3.3 CAN/CAN网桥的软件设计
CAN/CAN网桥的主要功能是实现两路CAN之间的数据过滤及转发,由于客车网络控制系统中对通讯的实时性的要求,在进行软件设计时要做到数据存储和转发的时间要求尽可能的短。为了达到这一要求,数据的接收采用向量中断(IRQ)方式,而且由于底盘CAN控制子系统的数据通讯量明显要高于车身CAN控制子系统,因此将连接底盘CAN控制子系统的CAN1接收优先级设置为最高,而连接车身CAN控制子系统的CAN2接收优先级次之。同时尽量精简中断服务程序,使系统的响应时间尽量的短。对应两路CAN设置了两个FIFO的环形接收缓冲区,由于CAN1的数据通讯量要高,因此CAN1的FIFO环形接收缓冲区比CAN2的大,这样更适合实际情况。
CAN/CAN网桥的软件设计主要包括:两路CAN控制器的初始化,FIFO环形接收缓冲区的设置,两路CAN控制器的全局验收过滤器的设置,接收中断服务程序,CAN发送程序,主监控程序。
CAN控制器的初始化流程如图3所示。其中全局验收过滤器的配置是一个难点,也是区别于SJA1000独立CAN控制器的一个地方。有5个地址寄存器用来指向验收过滤器RAM中的表格:fullCAN标准地址、标准单个地址、标准地址范围、扩展单个地址和扩展地址范围。这些表格在存储器中必须是连续的。后4个表格的起始地址分别是各自相邻的前一个表格的终止地址。扩展地址范围表格的终止地址在表格终止寄存器中给出。如果一个表格的起始地址等于下一个表格的起始地址或表格终止寄存器的值,则该表格为空。
FIFO环形接收缓冲区中设置一个发送指针、一个接收指针和当前数据帧数frameCount,当frameCount为0时表明FIFO环形接收缓冲区是空的。
接收中断服务程序将接收到的数据放入对应的FIFO环形接收缓冲区中并且修改接收指针和当前数据帧数frameCount。
主监控程序负责监控两路CAN的FIFO环形接收缓冲区中是否有数据,如果其中一路CAN的FIFO环形接收缓冲区中有数据则向另一路CAN发送数据。主监控程序不断查询两路CAN的FIFO环形接收缓冲区中的当前数据帧数frameCount标志,如果非零立即向另一路发送数据,并且在子程序CAN1SendToCAN2()和CAN2SendToCAN1()中修改发送指针和当前数据帧数。主监控程序流程如图4所示。
4 总结
本文在LPC2119的基础上设计了一个CAN/CAN网桥,并从硬件和软件的角度论述了设计过程。作者采用广州周立功单片机发展有限公司的CANalyst-II和USBCAN-II分别模拟客车底盘CAN和车身CAN对网桥进行了大量数据的反复测试,在向两路CAN连续不间断发送100000帧数据的情况下能够准确的转发,说明网桥工作可靠。下一步的研究目标将在网桥上移植实时多任务操作系统μC/OS-II来进一步提高网桥的实时性能。
本文作者创新点: 将客车网络控制系统划分为底盘和车身的两个网络控制子系统,并且设计了CAN/CAN网桥互连两个网络控制子系统。