CAN总线节点的软件设计主要包括三大部分:CAN节点初始化、报文发送和报文接收。
熟悉这三部分程序的设计就能编写出利用CAN总线进行通信的一般应用程序。当然要将CAN总线应用于通信任务比较复杂的系统中还需详细了解有关CAN总线错误处理总线脱离处理接收滤波处理波特率参数设置和自动检测以及CAN总线通信距离和节点数的计算等方面的内容,下面就前面提到的三部分程序的设计作一个描述。
1.初始化SJA1000
SJA1000的初始化只有在复位模式下才可以进行。初始化主要包括工作方式的设置、接收滤波方式的设置、接收屏蔽寄存器AMR和接收代码寄存器ACR的设置、波特率参数设置和中断允许寄存器IER的设置等。在完成SJA1000的初始化设置以后,SJA1000就可以回到工作状态进行正常的通信任务。初始化SJA1000的流程图如下图所示。
函数SJAlOOO_Config_Normal()实现初始化SJA1000的功能。程序首先使SJA1000进入复位模式,然后配置组态时钟分频器、认可码和屏蔽寄存器、总线定时寄存器和输出控制寄存器,然后进入运行模式。程序代码如下:
2.报文的发送
报文的发送是CAN控制器SJA1000依据CAN协议规范自动进行的,主控制器要将发送的报文写入SJA1000的发送缓冲区,并将发送请求位(TransmitRequest)置1,发送过程既可以采用中断方式,也可以采用查询方式(查询SJA1000控制段的状态标志)。
如下图所示为查询方式的报文发送流程,在查询方式下CAN发送中断应被屏蔽。
一旦报文开始发送,发送缓冲器写闭锁,因此主控制器要查询“发送缓冲器状态”标志,确定是否可以将一个新的报文版式TXBuffer。
若发送缓冲器写闭锁,循环查询状态寄存器,主控制器进入等待状态,直到发送缓冲器空闲。若发送缓冲器被释放,主控制器将新报文写入发送缓冲器TXBuffer,并置命令寄存器的发送请求标志TR=1,执行报文的发送。
报文发送程序如下:
3.报文的接收
接收报文是CAN控制器依据CAN协议规范自动进行的,接收报文被放在RXBuffer中,一个报文是否可以传送给主控制器,由状态寄存器的接收缓冲器状态RBS和接收中断标明(若中断开放),主控制器要将有效数据读入其内存,并释入RXBuffer,并对报文进行处理,传送过程既可由中断控制,也可通过查询状态寄存器标志来完成。下图所示给出了查询方式接收过程流程,CAN控制器的接收中断应屏蔽,主控制器读SJA1000状态寄存器(周期性的)、查询接收缓冲器状态标志(RBS),是否接收缓冲器中到有一个报文存在(报文这些标志的定义位于控制段的寄存器)。
报文接收程序如下:
本文关键字:程序设计 总线技术,电子知识资料 - 总线技术
上一篇:USB总线原理