基于tms320 lf2407a在can总线上的应用研究_第1页
基于tms320 lf2407a在can总线上的应用研究_第2页
基于tms320 lf2407a在can总线上的应用研究_第3页
基于tms320 lf2407a在can总线上的应用研究_第4页
基于tms320 lf2407a在can总线上的应用研究_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论