1 引言
LF2407型数字信号处理器()以其处理能力强(30 MI/s),外设功能模块集成度高及存储器容量大等特点广泛应用于数字化控制与通信领域。笔者以某车载武器系统的前期预研为背景,讨论了该处理器内嵌模块e的检测功能及其软硬件实现过程。
2 检测系统的功能与硬件构成
2.1 eCAN控制模块
该控制器是一个16 bit的外围器件,其特性有:(1)完全支持CAN2.0B协议;(2)具有6个邮箱,其中mailbox2与mailtiox3可按工程需求配置为接收或发送邮箱,数据长度为0—8字节;(3)当发送时出错或仲裁过程中数据丢失时,该控制器具有自动重发功能;(4)能够通过软件编程实现自检测功能。
对的操作分为对控制,状态寄存器的访问以及对邮箱RAM的读写三个部分。这些寄存器与邮箱在内存空间的分配如图1所示,其中,7200H~7230H所在RAM区域为6个邮箱的分布地址。
2.2 硬件电路的连接
&nb
如图2所示,PCA82C250为总线驱动器.是LF2407内嵌CAN控制器与特殊总线之间所需要的接口电路,实现对总线的差动发送与接收能力。在硬件连接时要注意将RS引脚接地使PCA82C250处于高速模式下,而且为完成检测功能,CANH引脚和CANL引脚应通过阻值为120Ω的终端匹配电阻器相连接。
在项目开发过程中,笔者使用带ISA接口的仿真器驱动板.尽管不需要驱动程序.但还是要安装SetupC2XX.exe文件.否则在Code Composer集成开发环境内会出现调试困难。
3 软件编程
3.1 配置存储器
因为设计硬件时采用的是外扩存储器的方式。所以为了正确地加载输出文件.必须对CY7C1021作引导配置。具体说来就是修改initgel文件中的StartUp函数(该函数在系统默认状态下为空函数。一般说来,每次进人Cede Composer集成开发环境时,它都会被调用。对于硬件系统的初始化代码经常放置于其内)。下面给出主要的代码语句:
StartUp0
{
GEL_MapReset0;
GEL_MapAdd(0x0000,0,0x7fff,1,1);
GEL_MapAdd(0x8000,0,0xT000,1,1);
GEL_MapAdd(0x0000,1,0x10000,l,1);
GEL_MapAdd(0xffff,2,1,1,1);
GEL_MapOnO;
GEL_MemoryFill(0xffff,2,l,Ox40);
*(volatile unsigned int*)SCSRI=0x0200;
*(volatile unsigned int*)SCSR2=0x000C;
*(volatile unsigned int*)WDNTR=Ox006f;
*(volatile unsigned int*)WDKEY=0x055;
*(volatile unsigned int*)WDKEY=Ox0AA;
}
如果需要开发相应的Flash烧写子程序.可以参考此部分的格式完成。
3.2 系统初始化或重新配置位定时器
相应的操作步骤如下:
(1)设置MCR寄存器中的改变配置请求位为1,即CCR=I:
(2)判断CANGSR寄存器中的改变配置使能位是否为1,即CCE是否为l:
(3)设置CANBCR2和CANBCRl寄存器以确定波特率、同步跳转宽度及采样次数等
(4)清CANMCR寄存器中的改变配置请求位为0.即CCR=0
(5)判断CANGSR寄存器中的改变配置使能位是否为0,即CCE是否为0;
(6)配置完成进入正常工作模式。主要程序代码如下:
(*MCRB)=(*MCRB)10x00c0;
(
(*CANIFR)=0xffff;
(*CANLAMlH)=0x7fff
(*CANLAMlL)=Oxffff;
(*CANMCR)=Oxl040;
while(((*CANGSR)&Ox0010)==0);//CCR如果不等于1则进行软件等待状态
(*CANBCR2)=Ox0002;
(*CANBCRl)=0x0023; //BaudRate=500 kb/s
(*CANMC R)=(*CANMCR)&0xefff;
while(((*CANGSR)&0x0010)==I);
按CAN2.0B协议构成的总线通信系统,节点之间的波特率误差
其中,Brp为预分频系数fCLK为LF2407的工作频率,其值是外部晶振体振荡器频率与锁相环倍频或分频系数之积,时间段TSEG1与TSEG2在位配置寄存器BCR2中定义。本系统中晶体振荡器频率为15MHz,锁相环倍频系数为l,那么r=(15 MHz/3)/{(4+1)+(3+1)+1),即0.5 MHz。
3.3 邮箱的初始化
相关的流程如图3所示。
部分代码如下:
(*CANMDER)=0x0040; //将邮箱2配置为接收、
邮箱3为发送
(*CANMC R1=0x0140;
(*CANMSGID2H)=0x7fff;
(*CANMSGID2L)=0xffff;
(*CANMSGCTRL2)=0x0008;
/*此处用于添加接收邮箱的初始数据值*/
(*CANMSGID3H)=0x7fff;
(*CANMSGID3L)=Oxffff;
(*CANMSGCTRL3)=Ox0008;
/*此处用于添加发送邮箱的初始数据值*/
(*CANMCR)=0x04C0;
(*CANMDER)=0x004c;
3.4 信息的发送
数据写到发送邮箱的数据区后.如果相应的发送请求位使能.则信息帧被发送到总线网络上,整个过程以查询的方式完成。
具体的操作步骤如下:
(1)初始化发送邮箱;
(2)设置CANMCR寄存器中的邮箱使能位为1,即MEN=I;
(3)设置CANTCR寄存器中的发送请求位为1,即TSRN=I; ·
(4)等待发送应答信号TAN或发送中断标志位MIFN置位:
(5)清除发送中断标志位和发送应答位,即向TAN位写1即可。
程序代码如下:
(*CANTCR)=0x0020;
while(((*CANTC R)&Ox2000)==o);
*CANTCR)=0x2000;
delay(2); //软件延时子函数
3.5 信息的接收
接收过程以中断的方式完成。具体的操作步骤如下:
(1)设置局部屏蔽寄存器;
(2)确定接收邮箱的标识符和控制寄存器;
(3)等待接收信息悬挂位RMPN或接收中断标志位MIFN置位:
(4)向RCR寄存器中的接收信息悬挂位RMPN写1,以清除接收中断标志位和接收信息悬挂位.为下一次接收作准备。 #p#副标题#e#
相应中断服务子程序如下:
void MBXISRfvoid)//mailbox2接收中断服务子程序
{
(*CANMDER)=Ox0040;
(*CANMCR)=Ox0143;
(*CANMBX3A)=(*CANMBX2A)+Ox0012;
(*CANMBX3B)=(*CANMBX2B)+0x0034;
(*CANMBX3C)=(*CANMBX2C)+Ox0056;
(*CANMBX3D):(*CANMBX2D)+0x0078;
(*ANMCR)=Ox04C0:
(*CANMDER)=0x004o;
(*CANRCR)=Ox0040;//复住RMP2和。MIF2
}
3.6 检测结果
检测结果如图4所示,将放置邮箱数据的内存区域(0x7214~Ox721f)相应单元作差后的值与程序设计中的代码偏移量进行比较,可知邮箱2与其他部分都能正常工作,而且ID标识符与屏蔽设置正确,否则内存区域就接收不到相关数据。
4 结束语
借助于实验室调试成功的eCAN检测
获取更多评论