>
摘 要:介绍了以DSP( TMS320F2407A) 和收发器SN65HVD230D 为主体所构成的控制模块在CAN 总线上的应用。
详细分析了实时操作系统uC/ OS - II 在DSP 中的移植,从而提高系统的实时性和软件的运行效率。
关键词:CAN 总线; TMS320F2407A ;接口技术;uC/ OS - II ,嵌入式操作系统
1 引言
CAN ,全称为“Cont roller Area Network”,即控制器局
域网,是国际上应用最广泛的现场总线之一。CAN 是一种
多种方式的串行通讯总线,基本设计规范要求有高的位速
率,高抗电磁干扰性,而且能够检测出任何错误。由于CAN
总线具有很高的实时性能,因此,CAN 已经在汽车工业、航
空工业、工业控制、安全防护等领域中得到了广泛应用。
TMS320L F2407A 是美国TI 公司生产的一种定点DSP
芯片,它采用增强的C2xx CPU 内核结构,代码与24x 系列
的芯片兼容。与24X 系列的DSP 芯片相比,
TMS320L F2407A 采用3. 3 V 电源供电,功耗更低;CPU 时
钟频率可达40MHz ,速度更快, EVM 板可对L F2407 代码
进行全速检查,其中有544 个字长的片上数据存储器、128 K
字长的板上存储器、片上只读闪烁存储器,片上UART 和一
个MP7680/ A 转换器, 可分别寻址程序存储器、数据存储
器以及I/ O 各64 位空间和两个事件管理模块EVA 和
EVB ,各有两个16 位的通用定时器。板上安装的器件可使
评估板解决各类问题,4 个扩展接口,可提供任何评估电路。
TMS320L F2407A 中含有一个支持CAN 2. 0B 协议的CAN
控制器,支持标准和扩展标识衬;支持两种信息帧格式,即
数据帧和远程帧,可以自动应答远程帧的请求,当出现错误
或仲裁失败时,具有自动重发数据功能。本文主要介绍使
用TMS320L F2407A 进行CAN 通信时硬件和软件方面的
设计。
2 DSP 功能介绍
本系统采用的TMS320L F2407A 微处理器主要包括以
下一些功能模块:
(1) 一个32 位的中央算术逻辑单元(CALU) 。
(2) 一个32 位的累加器(ACC) 。
(3) CALU 的输入和输出定标移位器。
(4) 一个乘积定标移位器(PSCAL E ) 。
(5) 8 个辅助寄存器(ARO - AR7 ) 。
(6) 一个辅助寄存器算术单元(ARAU) ,该模块提供了
(7) 还有两个状态寄存器ST0 和ST1 ,它们包含有决定
处理器工作方式、页地址指针值以及指示处理器不同条件
和算术逻辑运算结果的位。
(8) TMS320L F2407A 的16X16 位乘法器是由寄存器
TREG, PREG和一个硬件乘法器构成。其中TREG 是临
时寄存器,在作乘法运算时用来存储一个乘数,而PREG则
是结果寄存器,存储乘法运算所产生的结果。
(9) TMS320L F2407A 具有8 级硬件堆栈。当子程序调
用或中断发生时,程序地址产生逻辑把堆栈用于存储返回
地址或其它的一些参数。当子程序调用或中断服务子程序
完成时,返回指令将从堆栈顶返回地址或参数送到CPU 寄
存器中去。
3 CAN 的接口
DSP 芯片TMS320L F2407A 中集成了一个CAN 控制
器,CAN 接口线提供额外的高速窜行借口,其中有1 个4 针
mini - DIN 母接口,它可以用来连接CAN 接口,接口管脚
输出如图1 ; 管脚的定义如表1 :
4 收发器的选择
CAN 总线以其较高的通讯速率、良好的抗电磁干扰能
力可实现高可靠性串行通信,因而在实际应用中具有极高
的应用价值。但是,随着集成技术的不断发展,为了节省功
耗,缩小电路体积,一些新型CAN 总线控制器的逻辑电路
平均采用LVTTL ,这就需要与之相适应的总线收发器。文
献中介绍最多的CAN 总线收发器是Philip 公司生产的
820250 ,它与CAN 总线控制器SGA1000 配合使用时非常
方便, 但由于它使用5V 电源供电, 而DSP 芯片
TMS320L F2407A 采用3. 3V 电源供电,将两者配合使用
时,中问要加电平转换电路,为电路的设计带来了不便。TI
公司生产的SN65HVD230X 型电路很好地解决了这个问
题。它是采用3. 3 V 电源,有很高的输入阻抗,总线上最多
可连120 个节点,ESD 保护超过16 KV , 温度升高到一定值
时,总线自动关闭,节点上电或移去对总线上的其它节点没
有影明, 技术标准兼容1S011898 。我选取的即是
SN65HVD230D ,它的引脚排位及逻辑功能如图2 所示。
其引脚功能如图表2
5 软件系统的设计
本文采用的是由J ean J . Labrosse 编写的开放式实时操
作系统uC/ OS - II ,主要是基于以下的考虑: (1) 它的内核是
完全免费的。用户不需支付任何费用,有利于降低系统开
发成本。(2) 它的源代码是公开的,并且仍在不断的升级,
增加新功能。源代码的开放可以使得用户根据实际要求对
源代码进行取舍,去掉不必要的变量和不使用的函数,提高
系统性能。另外,由于对系统内核有源代码级的了解,用户
可以添加自己的模块,与原有系统内核兼容,使得系统具有
可扩展性。(3) 系统内核实用性强、可靠性高。从最老版本
的uCOS ,以及后来的uC/ OS ,到最新版本的uC/ OS - II ,该
实时内核已经走过了近10 年的历程。10 年来,世界上已有
数千人在各个领域使用了该实时内核,如医疗器械、网络设
备、自动提款机、工业机器人等等。这些应用的实践是该内
核实用性、无误性的最好证据。(4) 操作系统内核对处理器
以及ROM , RAM 资源的要求不高,有利于在8 位处理器上
的移植。(5) 它可以为嵌入式TCP/ IP 协议需要提供对多用
户的支持。
5. 1 操作系统uC/ OS - II 在TMS320L F2407A 的移植
虽然uC/ OS - II 大部分的代码是用C 语言写的,但仍
需要用汇编语言写一些与处理器相关的代码,这是因为uC/
OS - II 在读写处理器、寄存器时只能通过汇编语言来实现。
5. 2 移植工作介绍
uC/ OS - II 的移植工作主要就是修改C 语言头文件OS
_CPU. H. C 语言源文件OS_CPU - C. C 和汇编语言文件
OS_CPU_A. ASM。
①移植头文件OS_CPU. H。
为了确保其可移植性uC/ OS - II 不使用C 语言中的
short ;int ;long 等与编译器相关的数据类型,而是定义了一
系列可移植又很直观的数据类型如: INT8U , INT16S ,
INT328 等这部分工作在C 语言头文件OS_CPU. H 中实
现。应该指出的是,虽然在移植过程中将uC/ OS - II 数据
类型BOOL EAN ,INT8U ,INT8S 分别定义为unsigned char
和signed char 类型,但是由于TMS320L F2407A 内核与数
据总线宽度都是16bit ,所以这几种类型的数据实际上都要
占用一个16bit 字的内存。头文件OS_CPL. H 另一个主要
内容是定义用于临界段代码保护的两个宏OS_ INTER_
CRITICAL () 和OS EXITCRITICAL () .
②移植汇编文件OS_CPU_A. ASM。
OS_CPU_A. ASM 文件中包括有四个函数都涉及对寄
存器的处理,其跟处理器有关,由于不同的处理器有不同的
寄存器,所以操作系统在这个文件里给用户留下四个函数
接口,以便用户根据所选处理器编写相应的程序以完成固
定的功能. 四个函数分别是OSStart HighRdy ( ) ,OSCtxSw
() ,OSIntCtxSw() ,OSTickISR() 。
③OSStart HighRdy() 函数的实现。
OSStart HighRdy() 函数是一个高优先级就绪任务启动
函数,主要是将任务栈中的保存值弹回到CPU 寄存器中,
然后执行返回指令,中断返回指令强制执行该任务代码,实
现多任务启动。
④OSCTxSw() 和OSIntCtxSw() 函数的实现。
OSCtxSw() 和OSIntCtxSw() 都是任务切换函数,不同
的是后者为中断级任务切换函数,由于后者是在ISR 中被
调用的,所以需要调整堆栈指针SP 去掉在调用OSInt Exit
() ,OSIntCtxSw ( ) 过程中压入堆栈的多余内容。它们的主
要功能是将要挂起的任务的寄存器值保存起来,将要执行
的任务的寄存器的内容恢复。
OSCtxSw() 该函数完成的是任务级的任务切换工作。
其目的是为了保证处理器永远运行就绪表中优先级最高的
任务,这跟OSStart HighRdy ( ) 类似。然而,后者是由OS2
Start () 调用的,只是执行启动多任务的功能,而OSCTxSw
() 是在任务调度函数OSSched ( ) 通过宏定义OS TASKse
SW() 调用的,执行的是多任务的调度功能:不仅要使得高
优先级任务得以恢复运行,还得将待切换出去的任务保存
起来,两者的差别也可以从程序的处理过程比较出来。
⑤OSTickISR() 函数的实现。
OSTickISR() 是用定时器1 产生一个周期为25 毫秒的
时钟源提供给uC/ OS - II ,这是uC/ OS - II 时间延迟和超时
功能的时间基准。OSTickISR( ) 是该定时器周期中断的中
断服务程序。它主要有两个功能:一个是调用OSTimeTick要
修改该文件中的10 个C 函数
OS - TaskStkInit ; OSTaskCreateHook ; OSTaskDeHIook ;
OS - TaskSwHook ;OSTaskIdleHook ;OSTaskStat Hook ;OS
- Time TickHook ; OSInit Hookhenin ; OSInit HookEnd ;OS2
TCBInit Hook 。其中只有函数OSTaskStkInit () 修改是必要
的,其它函数是为了方便用户扩展而设的,可以定义为空。
OSTaskStklnit () 用于系统创建用户任务时,建立并初始化
任务堆栈。该函数和处理器的硬件体系密切相关,它将所
需的寄存器入栈,返回新堆栈的栈顶的地址,并将它们保存
在该任务的任务控制块OS_ TCB 中,最终使初始化后的堆
栈跟刚发生过一次中断一样。这样,系统无需对调度程序
作特殊的处理即可直接对新任务进行调度。
6 结论
CAN 总线因具有通信方式灵活、实时性好、可靠性高,
通信距离远、传输速度快等优点被广泛地应用于航空、航
海、汽车以及各种工业自动化控制系统. 而DSP 芯片内嵌了
16 通道的A/ D 转换模块,因此凡是适用于CAN 总线通信
的研究, TMS320L F2407A 基本上也都应用. 而且它的功
能,比使用单片机的效率要高得多。在软件设计上,采用了
嵌入式操作系统作为软件开发平台,从而为用户提供良好
的人机交互方式和较强的应用程序接口,进一步提高系统
的实时性和软件的运行效率,以嵌入式操作系统和DSP 相
结合的开发平台可以满足实时测控系统的需求。以上系统
已经在长春工业大学智能检测实验室实际调试通过,并可
跟据不同的需求作扩展。
参考文献
[ 1 ] 阳宪惠. 现场总线技术及其应用[J ] . 清华大学出版社,1999.
[ 2 ] 刘和平. TMS320L F240X DSP 结构、原理及应用[M] . 北京:北京
航空航人大学出版社,2002.
[ 3 ] 迟瑞娟,曹正清. 基于CAN 总线的整车管理系统硬件设计[ N ] .
中国农业大学学报,2002 , 7 (4) :91 - 94.
[ 4 ] 邻宽明. CAN 总线原理和应用系统设计[M] . 北京:北京航空航
天大学出版社,1996.
[ 5 ] J ean J . Labross - e 著,邵贝贝等译. 嵌入式实时操作系统uC/ OS
- II(第2 版) [M] . 北京:北京航空航人人学出版社,2003.