新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于S3C44B0和μCOS-II的CAN节点的设计

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

作者:时间:2012-04-16来源:网络收藏

引言
在系统越来越复杂,功能越来越强大的今天,嵌入式系统的中采用实时多任务操作系统已经成为嵌入式应用的主流。μ是一个开源嵌入式实时操作系统(Real Time Operating System, RTOS),它已经被成功移植到各种CPU上。但是μ的应用软件需要在移植操作系统后自行完成。模块化的应用程序可以使得嵌入式设计变得更加方便,产品的开发更加迅速。是三星公司生产的一种ARM7芯片,性能强大,在通用嵌入式设计中运用广泛。总线(Control Area Network)是一种有效支持分布式控制和实时控制的现场总线,由于其高性能和高可靠性,总线的应用范围广布过程工业、机器人和机械工业等领域。论文将μ移植到上,设计开发了μCOS-II的通讯模块,与传统的前后台形式的系统相比较,CAN总线在μCOS- II下运行,实时性更容易得到保证,更容易进行功能扩展。

本文引用地址:http://www.eepw.com.cn/article/171606.htm

1 S3C44BO简介

是三星公司设计的16/32位RISC处理器,为手持设备等提供一个低成本高性能的方案。S3C44B0提供2.5V ARM7TDMI内核,最高时钟频率66MHz,总线寻址空间达到256M,采用中断矢量表来减少中断延迟,提供30个中断源,支持C语言编程和多任务处理,具有丰富的片内资源:LCD控制器、2路UART、2路DMA、外部存储器控制器、5路带PWM输出的定时器、看门狗、RTC、8路10bit ADC、IIC接口、IIS接口、SIO等等。

2 SJA1000和82C250简介

SJA1000是一种独立CAN控制器,它是PHILIPS公司的PCA82C200 CAN控制器的替代产品。SJA1000具有BasicCAN和PeliCAN两种工作方式,PeliCAN工作方式支持具有很多新特性的CAN2.0B 协议。SJA1000同时支持11位和29位识别码,位速率最快可达1Mbits/s,时钟频率最高为24MHz,支持PeliCAN模式的扩展功能,如支持一些错误分析功能,支持系统诊断、系统维护、系统优化等。

82C250是PHILIPS公司生产的CAN总线收发器,提供对总线的差动发送和差动接收功能,另外还具有电流限制电路,提供了对总线的进一步保护功能。

3μCOS-II在S3C44B0上的移植

μCOS-II (micro-controller OS II)是一种开放式的操作系统内核,它是专为微控制器系统和软件开发而设计的占先式的实时多任务操作系统微内核。μCOS-II是一个源码公开、可移植、可固化、可剪裁、具可剥夺性、可确定性的实时多任务操作系统。它的绝大部分代码是用ANSI C语言编写的,只有和处理器相关的不到200行代码是用汇编语言编写,因此可移植性很好,比较容易移植到各种体系的CPU上面。本文中将μCOS-II移植到S3C44B0上面运行,该移植工作主要是三个文件的修改工作:

改头文件OS_CPU.H相关内容,包括:数据类型定义、堆栈增长方向、中断相关的一些宏定义等。

在OS_CPU_C.C中编写任务堆栈初始化函数及系统HOOK函数。

在OS_CPU_A.ASM中编写四个汇编语言函数:OSSstartHighRdy()、OSCtxSw()、OSIntCtxSw()和OSTickISR()。

完成上述工作后,μCOS-II就可以运行在S3C44B0处理器上了。

4 CAN总线智能的软硬件结构

CAN总线是现场总线的一种,它结构简单,通信方式灵活,采用非破坏性仲裁技术,通信采用短帧格式,从而可以形成低成本,高性能,实时性好的通讯系统。

4.1 CAN总线智能的硬件结构

用S3C44B0和SJA1000来实现CAN总线时,SJA1000采用地址数据复用的数据传输方式,而S3C44B0却采用分开的地址总线与数据总线,因此,不能像51系列单片机和SJA-1000那样直接相连,而必须另想办法。将发送的地址和数据都从数据总线上发出,而用IO口和 nGCSx, nOE, nWE等信号来形成ALE信号和读、写、片选信号接到SJA1000,这样就可以完成S3C44B0和SJA1000的连接,在硬件上形成CAN总线节点,同时为了保证信号不互相干扰,采用光耦6N137来进行隔离。另外,S3C44B0的3.3V信号和SJA1000的5V信号之间需要进行电平转换。

18.jpg

4.2 CAN总线智能节点的软件结构

采用BasicCAN模式,RX和TX缓冲器各是10个字节长,其中两个ID字节和最多8个数据字节。其中ID字节1是8个ID位,ID字节2是3 个ID位,1个远程发送请求位和4个数据长度代码位。11位的ID能够建立2032种报文类型,足够普通应用的需求。ID位的规定可根据实际需要自行定义。

发送报文时调用CAN发送函数U8 BCAN_DATA_WRITE(U8 *SendDataBuf),其中*SendDataBuf指向要发的内容。在这个函数里,将报文内容按CAN接受缓冲器规定的格式填入,然后调用命令函数U8 BCAN_CMD_PRG(U8 cmd),其中cmd参数决定命令类型,选用发送数据命令将报文发送出去。

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

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


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭