打印
[Cortex-M0技术交流]

M0_CAN中断的问题

[复制链接]
1299|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
youranhu|  楼主 | 2011-12-3 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void CAN_IRQHandler(void)
{
  uint32_t canstat = canstat;
  uint32_t can_int, msg_no;
   while ( (can_int = LPC_CAN->INT) != 0 )
  {
if ( can_int & CAN_STATUS_INTERRUPT )
{
   canstat = LPC_CAN->STAT;
#if CAN_DEBUG
   CANStatusLog[CANStatusLogCount++] = canstat;
#endif
   if ( canstat & STAT_EWARN )
   {
  EWarnCnt++;
  return;
   }
   if ( canstat & STAT_BOFF )
   {
  BOffCnt++;
  return;
   }
}
else
{
      if ( (canstat & STAT_LEC) == 0 )  /* NO ERROR */
   {
  /* deal with RX only for now. */
  msg_no = can_int & 0x7FFF;
  if ( (msg_no >= 0x01) && (msg_no <= 0x20) )
  {
    LPC_CAN->STAT &= ~STAT_RXOK;
    CAN_MessageProcess( msg_no-1 );
    CANRxDone[msg_no-1] = TRUE;
  }
   }
}
  }
  return;
}
#endif
问一下CAN收到数据进入这个中断时LPC_CAN->INT为状态中断,LPC_CAN->STAT为RXOK。那这个程序不是一接收到CAN数据就就马上产生状态中断么,怎么会进入ELSE里的报文中断里去呢?

相关帖子

沙发
Ryanhsiung| | 2011-12-3 10:55 | 只看该作者
没玩过,若为汽车 或工业行业不建议NUC单片机

使用特权

评论回复
板凳
youranhu|  楼主 | 2011-12-4 08:53 | 只看该作者
2# Ryanhsiung 呵呵~~只是平时找个例程学学而已~~调到这句出了点问题~~不知道是我理解错了还是这个例程本身就有问题~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

1

粉丝