This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

2407A 使用中断方式发送数据



请问是否有用中断方式发送CAN数据的例程?基于lf2407a环境下的,谢谢!

我自己编的程序中,将CAN数据的接收和发送都放在中断中执行,发现总是不能进入中断,但如果只是在中断中执行接收CAN数据代码,一切都正常,查了所有寄存器设置,没看到哪里不对,想找个例程参考一下,谢谢!

  • 今天又尝试了一下,单独启用CAN数据接收中断OK,或是单独启用CAN数据发送成功产生中断也OK,但是同时启用发送和接收就不成功。跟踪了代码,发现不成功的时候是程序无法进入该中断了,查了相应的寄存器设置,与启用某一单独中断功能时基本相同,没有异样,不知道为什么出问题时无法进入中断,貌似中断完成时某些标志没清空导致的,但代码中确实没有遗漏。哪位有相似的经验可以借鉴没有?谢谢!

  • 2407现在很少人用了,而且2407一般用汇编来写效率比较高,而这汇编编写程序无法像C一样单步仿真,很难知道问题在哪。本人有前辈的2407的汇编程序,维护起来会让人变成疯子,建议不要用2407芯片了。

  • 问题终于解决了,当前中断的标志位必须在进入中断服务程序ISR时全部立刻清除,先将CANIFR寄存器拷贝到一个存储变量,清除所有中断标志后再进行中断服务程序就可以了。在用C语言进行结构化编程时,容易将接收和发送分开处理,这时就出现了我遇到的问题。但如果在刚刚进入中断服务程序后就先将各中断标志全部先清掉再分别进行数据处理,问题解决。