3 CAN总线通信系统软件设计
对于LPC2294微处理器,CAN控制器完全是基于事件触发的,即在本身状态发生改变时,CAN控制器会把状态变化的结果告诉微处理器。因此中心微处理器可以采用中断方式或者轮询方式对CAN控制器做出相应的处理。各CAN节点按规定格式和周期发送数据到总线上,同时根据需要各取所需报文。对于接收数据,则采用中断的方式实现,一旦中断发生,即将接收的数据装载到相应的报文寄存器中。此时利用屏蔽滤波寄存器对接收报文的标识符和预先在接收缓冲器初始化时设定的标识符进行有选择地逐位比较,只有标识符匹配的报文才能进入接收缓冲器,那些不符合要求的报文将被屏蔽于接收缓冲器外,从而减轻CPU处理报文的负担。
3.1 CAN控制器初始化
初始化CAN控制器的操作包括硬件使能、软件复位、设置报警界限、设置总线波特率、设置中断工作方式、设置验收滤波器工作方式、设置工作模式并启动CAN等。初始化程序如下:
3.2 数据发送
将待发送的数据打包成符合CAN协议的帧格式后,便可写入发送缓冲区,并启动发送。在写发送缓冲区前必须查询其状态。LPC2294中的每个CAN控制器有3个发送缓冲区,它们的状态可通过查询CANSR得知。只有当其中有空闲的发送缓冲区时才可将数据写入。在发送大量数据时,这一步显得尤其重要,否则将不能保证发送的可靠性。启动发送成功后,只能通过查询cANGSR的TCS位或配合发送成功中断来判断数据是否发送成功。
3.3 数据接收
接收数据可采用查询方式或中断方式。在某一段时间内,CAN总线并不总是在活动。为了提高效率,可采用中断方式,在初始化程序中必须使能接收中断。在中断服务子程序中,读取CANICR,判断是否有接收中断标志,有则读取接收缓冲区数据。为了防止接收缓冲区数据溢出,可开辟一个循环接收数据队列来暂时存储数据,主程序则通过查询该队列获得总线数据。
4 总结
基于ARM的CAN总线,其电力集中抄表系统的数据通信具有很强的实时性、可靠性和抗干扰性,该系统的样机正在进行网测试,以期通过研究和改进,进一步提高程序的通信处理、纠错和容错能力。