基于ADμC812的CAN总线智能节点的设计
完成初始化后,CAN控制器就能正常运行了,但是要实现具体的数据收发任务,还必须编制特定的收、发程序。
本文链接地址:http://www.oyaya.net/fanwen/view/155644.html
4.3 CAN总线数据的发送和接收
(1)发送部分的程序设计
用CAN总线发送数据的流程图如图4所示。实际上,在程序运行过程中,常常会在发送某一帧数据时发现上一帧的数据还没有完全发送完毕(可以通过查询状态寄存器REG STATUS的第4位BIT TCS的显、隐状态可了解上次数据的发送情况)。因此,笔者采用的处理方法是:通过指令启动本次发送之后,就不停地查询状态寄存器,以判断本次发送是否完成,直到确定完成为止。这样可以为下次发送提供便利,同时也有利于程序的顺利执行,从而避免出现错误。
(2)接收部分的程序设计
图5所示是该系统接收部分的软件流程图。
实际上,在对响应速度要求不太高的场合,以查询方式来设计接收子程序是最简单、最可靠的方式。如果总线上有数据发往本节点,则通过查询状态寄存器的第1位BIT_RBS的位状态,便可得知接收缓冲区(RXFIFO)中的可用信息,然后通过软件将RXFIFO中的数据逐个“移入”到指定的片内存储空间即可。对于这
样一个主要以数据采集功能为主的CAN节点,这些数据多半是由CAN网络中的“控制中心”发来的控制信号,设计时把它们留给ADμC812进一步处理就可以了。
还应注意的是:在接收查询过程中,要“观察”是否有总线关闭、总线出错、接收缓冲器超载等状态,如果有的话,必须要进行相应的“错误”处理,否则也不能正常进行数据接收,还有一个问题是关于远程帧的处理。限于篇幅,本文不作介绍。
5 结束语
实践证明:本文所介绍的CAN总线智能节点能够很好地实现对工业标准模拟输出信号的采集以及与CAN总线上其它节点的通信。由于该节点是基于单片机ADμC812开发的,因此它的体积小巧且扩展灵活。笔者相信,基于该单片机的各种总线节点一定会得到广泛的应用。
《基于ADμC812的CAN总线智能节点的设计(第3页)》