引言
当前有许多微处理器将CAN控制器嵌入到系统之中,成为片上的微处理器,TI公司新推出的TMS320 F2812就是其中之一。这种结构成本低廉、运行稳定、功能完备,是一种很有前途的CAN通信系统组成方案。
eCAN模块是TMS320F2812 DSP片上的增强型CAN控制器。其性能较之已有的DSP内嵌CAN控制器有较大的提高,在进行CAN总线通信时,数据传输更加灵活方便,数据量更大、可靠性更高、功能更加完备。随着TMS320F2812的大量推广使用,基于eCAN的CAN总线通信方式将得到广泛的应用。
TMS320F2812 eCAN模块的增强特性
eCAN模块是TI公司新一代32位高级CAN控制器,性能相当于TI公司TMS470系列微控制器使用的高端CAN控制器(HECC,High-end CAN Controller)。它完全兼容CAN2.0B协议,可以在有干扰的环境里使用上述协议与其他控制器串行通信。eCAN模块具有32个可以完全控制的邮箱和时间标识特性,提供了一个通用可靠的串行通信接口。除具有一般DSP内嵌CAN控制器的所有功能外,与TMS320LF 240x系列DSP的CAN模块相比,它主要具有如下的一些增强特性:
1.增加了邮箱数量,并且所有邮箱都具有独立的接收屏蔽寄存器。原来的TMS320LF240x系列(以TMS320LF2407为例),仅有6个邮箱: 2个接收邮箱、 2个发送邮箱和2个可配置为接收或者发送邮箱。而TMS320F2812有多达32个的邮箱,占用512字节RAM,都可以配置为发送或接收邮箱,且都有一个可编程的接收屏蔽寄存器。这样就使数据传输更加方便灵活、信息量大大增加。
2.eCAN是一个32位的高级CAN控制器。其控制寄存器的状态寄存器必须以32位方式访问;接收屏蔽、时间标识寄存器、超时寄存器和邮箱所在的RAM范围可以以8位、16位和32位方式访问。
3.时间标识。eCAN模块应用了一个全速运行的32位定时器(LNT)来获得接收或者发送一个信息(有效的CAN数据帧)的时间。当一个接收信息被保存或被发送的时候,定时器的内容写入到相应邮箱的时间标识寄存器(MOTS)里。这样就可获得接收或发送一个信息的时间。
当邮箱16成功发送或接收一个信息时,LNT寄存器被清除。所以可以通过使用邮箱16来实现网络的全局时间同步。
4.超时功能:为了确定所有的信息都在预定的时间里送出或接收,每个邮箱都有它自己的超时寄存器(MOTO)。如果一个信息没有在超时寄存器设定的时间完成发送或接收,一个标志位将在超时状态寄存器里被设置,据此可以判断出是否超时。
以上这些增强特性使得 TMS320F2812进行CAN通信时,传输更加方便灵活、数据量更大、功能更完备,这也正是eCAN的增强特性所在。
eCAN通信程序设计的基本流程
下面介绍TMS320F2812的eCAN模块与CAN卡之间的通信实例。本文主要讨论的是下位机程序。eCAN的邮箱0配置为发送方式,邮箱16配置为接收方式,都采用标准信息帧格式。发送用查询方式、接收用中断方式。接收到数据后,用接收到的数据更新邮箱0的数据。对接收到的数据进行确认,使用一个全局变量来记录接收错误发生的次数。这个程序的实现分为以下几个重要步骤。
eCAN模块初始化
eCAN模块在使用前必须对它初始化。仅当模块处于初始化模式下,初始化才能进行。DSP复位后,就激活了初始化模式,此时就应该对eCAN模块初始化。eCAN 模块初始化流程图略(详见《电子设计应用》2003.10)。其中要对以下寄存器或寄存器的某些位进行操作:主控制寄存器(CANMC)的改变配置请求位(CCR),当其为0时,eCAN处于正常工作方式,为1时eCAN处于配置方式;错误状态寄存器(CANES)的改变配置使能位(CCE),当其为0时,CPU不能写控制寄存器,为1时则可以;位定时器配置寄存器(CANBTC),它用合适的网络定时器参数配置CAN节点。当CCR=1时,CPU必须等到CCE置位为1才能操作CANBTC。
信息的发送
信息的发送程序要对以下寄存器或寄存器的某些位进行操作:发送请求寄存器(CANTRS)的相应位,当其被置1时,eCAN将发送相应发送邮箱的信息,为0则不进行任何操作;邮箱使能寄存器(CANME)的相应位,当其为1时使能邮箱,为0则禁止邮箱;信息标识符寄存器(MID),用来存储邮箱标识符;信箱控制区寄存器(CANMCF),用于设置邮箱发送的优先级;邮箱方向寄存器(CANMD)的相应位,当其为1时,相应邮箱被配置为接收邮箱,为0则被配置为发送邮箱。
信息的接收
信息的接收程序要对以下寄存器或寄存器的某些位进行操作:邮箱使能寄存器(CANME)的相应位;信息标识符寄存器(MID);局部接收屏蔽寄存器(LAM),用来存储局部接收屏蔽位;邮箱方向寄存器(CANMD)的相应位;覆盖保护控制寄存器(CANOPC)的相应位,当其为1时,保护相应邮箱里的数据不被新的数据覆盖,为0则不保护;接收信息悬挂寄存器(CANRMP)的相应位,如果油箱包含一个接收到的信息则置位1,没有则置0;接收信息丢失寄存器(CANRML)的相应位,当其为1时,表示相应的邮箱里有一条未读信息被新信息覆盖了,为0则表示没有信息丢失。
eCAN通信主程序流程
主程序流程图略(详见《电子设计应用》2003.10),其中“初始化”、“调用信息发送函数”、“相应中断服务程序”分别对应着上述三个步骤。发送用查询方式,接收用中断方式。
程序设计注意事项
TMS320F28x C/C++编译器支持标准的ANSI C语言和ISO/IEC 14882:1998标准定义的C++语言。这样我们就可以利用高级语言的特性降低编程的难度,提高程序的可维护性和缩短开发时间。
本程序使用C语言编写,在程序设计中要注意以下几点:
1.原来我们对某个寄存器的位操作多是采用间接的方式,例如要置位为1是通过把整个寄存器和一个特定的“或操作”实现的。而现在我们可以利用高级语言的特性,在头文件中用结构体把寄存器的各个位封装起来,然后用成员运算符(.)直接对某个位进行置位或清零的操作(例如ECAN Shadow.CAN TA.bit.TA0=1).这样大大方便了位操作,还确保了其正确性,减少了人为失误。
2.eCAN的控制寄存器要求以32位方式访问。如果直接对控制寄存器的个别位进行操作,编译器会把这种访问变为16位的访问方式,而16位的访问方式可能会破坏控制寄存器的内容,尤其是对高16位中的位进行写操作的时候。解决的办法是:使用一个32位的临时寄存器,先把欲操作的整个寄存器的内容读入到临时寄存器中,这个操作是32位的访问方式。在临时寄存器中对某些位进行操作,然后把值以32位写的方式赋给eCAN控制寄存器。以此来强制实现32位访问方式,达到了目的,这种设计技巧在整个程序中大量使用。
结语
TMS320F2812 DSP eCAN模块的性能较之已有的DSP内嵌CAN控制器有较大的提高:增加的邮箱数量使数据传输更加方便灵活,信息量大大增加;可获得接收或者发送一个信息的时间;可以判断发送或者接收一个信息是否超时等等。
1楼
0
0
回复