微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > CAN接收中断为什么每次只能接收一个ID

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

时间:10-02 整理:3721RD 点击:
/*************************************************************/
/*                      中断接收函数                         */
/*************************************************************/
#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芯片。

自己先顶一发!

连续接收ID,是不是不能用这种方法?是不是要存到某个地方,然后去读取呢?

读取ID,数据里再加个结束标志就可以了。(数据量不大的情况下)

如果数据量大的话,是不是不能用中断去接收了?要用别的什么方法?

使用中断接收数据来不及处理完,在FIFO中可能会出现数据丢弃或者覆盖的现象。其他的还有什么样的方法呢?麻烦给指导一下。

我也正在找方法呢啊

我也正在找方法呢啊

我也在弄XEP100板子  小编写过TLC吗?

TLC是什么啊?你CAN通讯弄过吗?

你在FIFO中是如何处理的?

读取ID,数据里再加个结束标志就可以了。(数据量不大)

弄过CAN通信,小编不做底层驱动吗?

我改成了数据处理完成才去释放FIFO

FIFO是怎么用的啊?资料上说是有5个接收缓冲区的,数据要怎么读啊?谢谢

我将这个函数中FIFO释放部分程序屏蔽了,在我处理完成才释放的。


淡定,淡定,淡定……

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top