新闻中心

EEPW首页 > 汽车电子 > 设计应用 > μC/OS-II的CAN驱动程序设计

μC/OS-II的CAN驱动程序设计

作者: 时间:2010-09-26 来源:网络 收藏

4 协议层
从OSI网络模型的角度来看,现场总线网络一般实现了第1层(物理层)、第2层(数据链路层)、第7层(应用层);而现场总线仅仅定义了第1层、第2层,这两层分别由收发器和CAN控制器实现。CAN总线没有规定应用层,本身并不完整,因此需要一个高层协议来定义CAN报文中11/29位标识符、8字节的使用。目前,已经有一些国际上标准的CAN总线高层协议,例如DeviceNet协议和CANopen协议;但是这个协议规范比较复杂,理解和开发难度都比较大,对于一些并不复杂的基于CAN总线的控制网络不太适合。本设计采用国内周立功CAN开发组织根据实际应用制定的简单的CAN应用层协议I-CAN协议,作为软件设计的CAN协议层。ICAN协议中的29位帧标识符定义如表1所列。

5d.jpg


CAN总线仲裁是从标识符的最高位(28位)开始逐位进行的。每一个发送器都对发送位的电平与被监控的总线电平进行比较:如果相同,则这个单元可以继续发送;如果发送的是“隐性”(逻辑1)电平,而监控到的却为“显性”(逻辑O)电平,那么该单元就失去了仲裁,必须退出发送状态。根据I-CAN源节点编号部分可以看出,节点的地址编号越小,优先级也就越高,在仲裁时能够优先获得总线使用权。在CAN网络系统中,节点越重要,分配的地址编号的优先级相应地也越高。譬如,车载网络中的发动机电控单元就应该比定向大灯电控单元的优先级高,这样才能保证重要的报文及时传送出去。在节点接收到报文之后,应用程序依据I-CAN协议解析报文标识符,并实现其指定的功能。

5 CAN应用层
CAN应用层实现CAN控制器的所有功能。CAN设备控制层、CAN接口层和CAN协议层都在应用层的控制之中。应用层主要实现的任务包括:
①初始化CAN控制器,以及与应用层相关的全局变量。
②编写CAN控制器的中断服务程序。
③报文处理任务。该任务基于I-CAN协议来解析报文,并实现报文指示的功能。
④报文发送任务。该任务存储未能发送的报文,并在发送缓冲区可用的情况下自动发送报文。
初始化CAN控制器的程序详见第3节。由于初始化CAN控制器直接和CAN物理层及链路层的性能挂钩,因此只有依据具体应用环境正确地配置CAN控制器,才能使系统稳定地运行。
5.1 中断服务程序
中断服务程序用来判断CAN控制器的中断类型,并作出相应的响应。具体程序如下:

5e.jpg
这里只对接收中断、发送中断以及总线错误中断进行阐述,其他类型的CAN中断处理应根据具体系统进行具体设计。
5.1.1 接收中断
接收中断处理函数CANl_RI_HANDLE()负责接收报文,并将报文发送到任务的消息队列中。其代码如下:

5f.jpg

其中,RI_DATA为定义的结构体CAN_MSG变量;CANlRFS、CANlRID、CANlRDA和CANlRDB分别为CAN控制器存储接收报文帧信息、标识符、数据字节的寄存器。CAN_MSG结构体如下所示:

5g.jpg



评论


相关推荐

技术专区

关闭