CAN应用节点的程序设计主要分为3部分:SJA1000初始化子程序、发送子程序、接收子程序。可以说所有CAN通信程序设计都是遵循这3个基本步骤的,所以熟练掌握这3部分子程序的设计对于应用CAN总线的工程技术人员来说是非常有必要的。下面就这3个子程序分别加以说明。
4.1 SJA1000初始化子程序
微控制器和SJA1000之间状态、控制和命令信号的交换都是在控制段中完成的。初始化加载后,寄存器的接收代码、接收屏蔽、总线定时寄存器0和1以及输出控制就不能改变了。SJA1000共有2种工作模式:复位模式和工作模式。当硬件复位或控制器掉电时会自动进入复位模式,只有在复位模式下才可以对SJA1000进行初始化。初始化主要包括工作方式的设定、接收屏蔽寄存器和接收代码寄存器的设定、总线时序寄存器的设置、输出模式寄存器和中断使能寄存器的设置等。在初始化完成以后,CAN总线就可以开始进行数据的接收与发送工作,其初始化流程图见图3。
4.2 发送与接收子程序
首先与CAN控制器连接的微处理器必须将要发送的数据从其数据存储区中取出,与主机的ID地址一起组成信息帧按CAN报文结构发送到发送缓冲器中,并置位命令寄存器中的发送请求标志,接收到发送请求后发送过程由CAN控制器自动完成。在检测到接收缓冲器中存在有效报文后,接收程序将接收缓冲器中的内容读入CPU的数据存储区。接收完毕后检查总线状态及溢出情况等并做相应处理,发送与接收程序流程图见图4。
5 结语
采用了多主工作方式及CSMA/CD的CAN总线以其显著优于传统“一主多从”式多机串行通讯模式而得到了广泛应用。实践表明,由于CAN总线结构简单,器件容易购置,开发技术易于掌握,且具有统一的国际标准,故在现场总线的发展中占有了重要位置。本文所介绍的基于CAN总线的通信节点可在大部分中短距离传输信息的控制现场发挥良好的作用。