您现在的位置:机电论文网>> 机床加工>> 正文内容

基于tms320f2812内嵌ecan模块的can总线通信

作者: 来源: 发布时间:2018/2/11 16:12:47  点击数:491
当前有许多微处理器将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控制器有较大的提高:增加的邮箱数量使数据传输更加方便灵活,信息量大大增加;可获得接收或者发送一个信息的时间;可以判断发送或者接收一个信息是否超时等等。

更多
字体:【】-【】-【】【关闭此页

上一篇:c语言高效编程的几招'   下一篇:基于dsp的弧焊逆变电源数字化控制系'


特别声明:机电之家(http://www.jdzj.com )所共享的机电类资料,机电论文、机电类文章、机电企业类管理制度、机电类软件都来自网上收集,其版权归作者本人所有,如果有任何侵犯您权益的地方,请联系我们,我们将马上进行处理。购买的论文都出自原创,保证作者的原创的版权的转让,任何纠纷由法律解决。