今天小编给大家带来的是华芯微特全系列芯片如何配置CAN中断模块的详细介绍,包括CAN各自中断以及错误处理方式,大家一起来看看吧。
Part 1:CANRX中断
CAN接受和发送模块各有64位深的FIFO用于缓存,如果像上图一样打开了RX非空中断,那FIFO中存在数组时会自动触发CAN中断。在中断中一次读完FIFO所存内容后会清空FIFO,自此结束触发。
读取函数如上图所示,在正常走完读取流程后,FIFO中的缓存内容会被读空,等待下一次消息传来时再次触发RX中断。
Part2:仲裁丢失中断
上图中间ArbitrLostIEn是仲裁丢失中断,此中断比较鸡肋。CAN没有主从概念,所以有可能会同时发出数据,这时候会根据ID来判断优先级,优先级高的会继续发送,优先级低的会停止发送,直到总线再次空闲。如果开了此中断,在停止发送时会触发一次中断。但因为CAN的逻辑,如果仲裁丢失是会自动重发,所以开了这个中断意义也不大。
Part3:错误判断中断
这个中断的作用很大,一般因为CAN总线布线较长,比较容易受到干扰,因此TX和RX模块都各有一个错误计数器,会对自身接收和发送的error存在判断,错误计数器单边最高到127。当总共累计到255时芯片会认为CAN模块失效,会自动把CAN模块挂起,这时候需要重新开启一次。而打开这个中断后,当TX和RX错误单边累计到127时会自动产生一次中断,打开后如果程序识别到错误中断,就可以判断出来基本有一边已经处于计数器计满状态,那可以重新复位计数器将CAN模块恢复正常。
如上图所示,中断中通过ERRPASS中断和ERRWARN中断来共同作用,判断CAN模块是否处于正常运行状态,如果发现并不是在正常运行(BUSOFF被置1)则重新打开CAN模块,恢复正常运行。