微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于S3C44B0和μCOS-II的CAN节点的设计

基于S3C44B0和μCOS-II的CAN节点的设计

时间:04-16 来源:互联网 点击:

8 BCAN_DATA_RECEIVE(U8 *RcvDataBuf),其中*RcvDataBuf是报文的存储地址。在这个函数里,读取接收缓冲区里的数据,并存到指定的位置。

这两个函数只是发送与接收函数,具体的发送和接收需要建立相应的任务或中断,并调用这两个函数来完成。其中发送采用主动方式,当发送任务接到启动发送的指令后调用CAN发送函数进行数据发送,接收采用中断方式,CAN中断的优先级高于时钟中断和其他任务。

节点通信流程图如图2所示:

5 基于μCOS-II的CAN总线通讯程序模块的设计

传统的前后台方式设计的单片机程序是一个无限循环,循环中调用相应函数来完成相应操作是其后台行为,而中断服务程序处

理异步事件是其前台行为。μCOS-II是一个实时多任务操作系统,是一个基于占先式内核的多任务调度平台。作为一个模块的CAN总线程序,在嵌入 μCOS-II之中,相对于前后台方式而言,CPU的运行时间被μCOS-II依据调度算法按照不同的优先级分配给不同的任务模块,各个任务程序在自己的运行时间内访问CPU,这样CAN总线的实时性更容易得到保证,同时各任务相对独立,相互影响小,也便于对程序的调试,更重要的是如果要实现更为复杂的通讯协议时不用改变原有的程序结构,只需增加扩展部分的程序就可以进行功能扩展。

本文中CAN总线如上所述采用主动方式发送和采用中断方式接收数据,CAN中断优先级高于其他任务的优先级。本文中数据发送建立一个独立任务,它拥有自己的堆栈空间,可以被其他的任务和中断服务子程序挂起或删除。这个任务分配128个OS_STK的堆栈空间,在μCOS-II中OS_STK被定义为一个字长。

系统建立了两个任务(不包括统计和空闲任务):起始任务Main_Task和发送任务CANSENDDATA_Task,优先级分别为10,12。在CAN控制器初始化和OS初始化后,建立起始任务Main_Task,OS开始运行,进入起始任务Main_Task,起始任务启动时间节拍,并创建发送任务,然后进入挂起。发送任务进入运行态,当发送数据完成后,发送任务挂起。

两个任务在各自的延时结束后按照优先级先后进入运行态,若都在挂起状态则系统的空闲任务进入运行。此过程中如果有接收中断发生,则中断服务将挂起正在运行的任务,并调用CAN数据接收函数,完成数据的接收,当此过程结束后恢复现场,继续进行高优先级的任务。图3是CAN通信模块在μCOS-II中运行的系统结构框图:

本文利用上述思想所设计的CAN总线智能节点与ZLG USBCAN-1型CAN总线开发设备互相通信正常,从图4可以看到数据接收和发送的顺利进行。

结束语

在S3C44B0上运行的μCOS-II中实现CAN总线智能节点,能够克服传统前后台编程方法的弊端,并且提供模块化、可移植性好、高实时性、易扩展的通信模块,能够大大减少产品的开发时间。

本文作者创新点:

一: 建立了S3C44B0和SJA1000的连接,使这两种常用芯片得以配合使用。

二: 建立起基于S3C44B0和μCOS-II的CAN总线智能节点模块,为以后在μCOS-II操作系统中的CAN总线应用打下了基础。

参考文献
[1] 邬宽明. CAN总线原理与应用系统设计[M]. 北京航空航天大学出版社. 1996.
[2] Jean J. Labrosse 著. 邵贝贝等译. μCOS-II嵌入式实时操作系统[M]. 北京航空航天大学出版社. 2003.
[3] 黄元峰,李育清,姜生元.基于μC/OS的嵌入式系统应用开发研究[J].微计算机信息(嵌入式与SOC),2006年第22卷第2-2期:100-102。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top