基于ARM的CAN总线智能节点的设计
LPC2294片内外设与引脚的连接由引脚连接模块控制。CAN控制器的硬件使能就是通过软件设备GPIO寄存器来控制多路开关的,将特定的引脚与CAN控制器连接起来。在设备各CAN寄存器之前必须进行软件复位,这是因为CAN的某些寄存器必须在软复位状态下读写。
值得注意的是,LPC2294为所有的CAN控制器提供了全局接收标识符查询功能。2KRAM可容纳1024个标准标识符或者512个扩展标识符或两种类型混合的标识符。通过软件处理,可在该RAM中设置存放1~5个标识符表格。与独立CAN控制器SJA1000相比,它能更容易地任意复杂的 ID进行筛选过滤,满足复杂的ID的接收过滤要求。这无疑大大减少了系统软件设计复杂度及运行时的负担。设置验收滤波器工作方式,必须首选创建LUT表格,指定每个表格的起始地址,并用实际的ID地址初始化该表格。最后设定验收过滤器模式寄存器。若该节点不主动发送数据,可选择在总线不活动时进入睡眠模式。
2.2 数据发送
将待发送的数据打包成符合CAN协议的帧格式后,便可写入发送缓站区,并自动发送。图3为发送子程序流程图。
![]() |
2.3 数据接收
接收数据可采用查询方式或中断方式。在某一段时间内,CAN总线并不是总是在活动,为了提高效率,可采用中断方式。在初始化程序中必须使能接收中断。在中断服务子程序中,读取CANICR,判断是否有接收中断标志,有则读取接收缓冲区数据。为了防止接收缓冲区数据溢出,可开辟一个循环接收数据队列来暂时存储数据,主程序则通过查询该队列来获得总线数据。
2.4 异常情况处理
在线总线发生严重故障的情况下,CAN节点有可能脱离总线,此时以下寄存器位被置位:CANSR的BS位、CANIR的BEI位和EI位(如果使能)和CANMOD的RM位。RM将许多CAN控制器功能复位和禁止。软件下一步必须置零RM位。发送错误计数器将递减计数总线释放条件(11个连续的隐性位)的第128个事情。软件可通过读取Tx错误计数器对计数器递减计数的情况进行监测。
在应用中,若前面传输到CAN控制器的数据未被读出,而接收缓冲区又没有及时释放,就有可能引起后面信息的丢失。这时必须通过写命令寄存器来清除CANSR的数据溢出位。这两种异常可通过异常中断来处理,只要在中断子程序中加入处理代码即可。其它的总线异常处理可根据使用情况决定是否在软件中处理。
总之,软件的编写和规划相当重要。ARM7TDMI指令集是基于RISC的,具有32位ARM/16位Thumb双指SR相互调用。因此,为了提高程序代码密度,某些对性能要求不高的代码可用Thumb指令集编写。
由于该方案体积小、功耗低、抗干扰性好,现已应用于电磁环境复杂的某车载通信设备中,满足了该项目对CAN网络点节的要求。



