//*****************************************************************************
// CAN中断服务函数
//*****************************************************************************
void
CANIntHandler(void)
{
unsigned long ulStatus;
ulStatus = CANIntStatus(CAN0_BASE, CAN_INT_STS_CAUSE);
if(ulStatus == CAN_INT_INTID_STATUS)//中断产生的原因是一个状态中断
{
ulStatus = CANStatusGet(CAN0_BASE, CAN_STS_CONTROL);//读取主控制器状态寄存器
//在读取主控制器状态寄存器时,将清除一个正在挂起的状态中断。
// 表示有错误发生
g_bErrFlag = 1;
}
else if(ulStatus == 1)//表示具有高优先级编号1的报文对象正在挂起一个中断
{
CANIntClear(CAN0_BASE, 1);//清楚报文对象中断
g_ulMsgCount++;//中断次数递增
g_bErrFlag = 0;//清楚错误标记
}
}
中断产生的原因是一个状态中断,这个状态中断是什么意思呢?
此帖出自
小平头技术问答
找一个 CAN 协议的书看看,这些就都明白了。
一周热门 更多>