CAN接收中断为什么每次只能接收一个ID

2019-07-15 17:08发布

/*************************************************************/
/*                      中断接收函数                         */
/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt CAN_receive(void)
{
      if(MSCAN0GetMsg(&msg_get))
      {
        // 接收新信息
         if(msg_get.id == ID1 && (!msg_get.RTR))
         {
                 datain=0X01;      
         }
         if(msg_get.id == ID2 && (!msg_get.RTR))          {                 datain=0X02;                }      }
      else
      {
       for(;;);
      }
}
#pragma CODE_SEG DEFAULT

下面这个是接收数据。void play_data(void) {    unsigned char l;    write_command(0x8A);    for(l=0;l<msg_get.len;l++)       write_Data(msg_get.data[l]);}我上位机100mm发一次数据,连续发送多个ID,但是我的这个中断,每次只能接收到一个ID。以前没用到过CAN,请大神们帮忙指点一下。我用的是飞思卡尔MC9S12XEP100芯片



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
ren12
1楼-- · 2019-07-15 22:35
自己先顶一发!
ren12
2楼-- · 2019-07-16 01:25
 精彩回答 2  元偷偷看……
碧霄长博
3楼-- · 2019-07-16 03:50
读取ID,数据里再加个结束标志就可以了。(数据量不大的情况下)
ren12
4楼-- · 2019-07-16 04:36
碧霄长博 发表于 2017-5-18 18:19
读取ID,数据里再加个结束标志就可以了。(数据量不大的情况下)

如果数据量大的话,是不是不能用中断去接收了?要用别的什么方法?
碧霄长博
5楼-- · 2019-07-16 07:03
ren12 发表于 2017-5-20 10:50
如果数据量大的话,是不是不能用中断去接收了?要用别的什么方法?

使用中断接收数据来不及处理完,在FIFO中可能会出现数据丢弃或者覆盖的现象。其他的还有什么样的方法呢?麻烦给指导一下。
ren12
6楼-- · 2019-07-16 12:41
碧霄长博 发表于 2017-5-20 17:24
使用中断接收数据来不及处理完,在FIFO中可能会出现数据丢弃或者覆盖的现象。其他的还有什么样的方法呢?麻烦给指导一下。

我也正在找方法呢啊