在使用TMS320F280X做CAN报文接收时,有时候需要监测接收的报文是否存在丢帧的现象
为了实现丢帧监测,首先要用到以下几个寄存器的值
(1)该寄存器值为发送或接收CAN报文时刻的时间戳值,每次收发报文成功都会更新一次
(2)CAN收发报文的超时限制值
(3)对应邮箱的超时控制寄存器,使能邮箱的对应位为1
注意:使能之前需要先加载MOTO的值
(4)超时状态寄存器;对应值为1则超时,或者即可认为丢帧;是我们最终想要获取的值
程序实现:
这里我用的是邮箱2来接收报文,其常规配置信息不做赘述
注意:配置的超时时间一定要大于报文的接收周期的2-3倍;这里我的邮箱2接收到的报文周期为100ms;超时时间设置为1000ms
{
EALLOW;
ECanaMOTORegs.MOTO2=ECanaMOTSRegs.MOTS2+250000;//4us自加1,;自加250000次为1S
//ECanaMOTSRegs.MOTS2为上一时刻接收到邮箱消息的时刻,ECanaMOTORegs.MOTO2为设定的超时时间
ECanaRegs.CANTOC.bit.TOC2=1;//使能超时功能
EDIS;
}//此段程序不是放在初始化中执行;而是放到主函数或者中断执行
if(ECanaRegs.CANTOS.bit.TOS2==1)//TOS2的值为1则接受信号超时,或认为丢帧
{
//丢帧需要做相关的报文数据处理,这里我将所有数据置0
V2P_readdata_L=0;
V2P_readdata_H=0;
}
else//TOS2的值为0则正常读取邮箱2的数据
{
V2P_readdata_L=ECanaMboxes.MBOX2.MDL.all;
V2P_readdata_H=ECanaMboxes.MBOX2.MDH.all;
}
Debug运行,功能正常