| airwill 发表于 2014-12-10 10:26  是的, eCAN 里的各个时间寄存器都是以位时间为单位计数的.
用中断实现的数据收发,目的是想增加超时功能,判断发送是否超时,若超时,返回TRANSMIT_OVERTIME,现在我在TRS置位前配置了寄存器
 struct ECAN_REGS ECanaShadow;
 //设置接收邮箱超时寄存器:读CANTSC的值,设置MOTO;
 //MOTO:消息对象超时寄存器,用于真正地接收消息的定时邮递计数器的限制值
 EALLOW;
 BeginTscTime = ECanaRegs.CANTSC;
 ECanaMOTORegs.MOTO16 = BeginTscTime + 2;
 EDIS;
 //设置接收邮箱超时寄存器:设置CANTOC;
 //CANTOC:超时控制寄存器位        1:使能邮箱超时功能        0:禁止邮箱超时功能
 //在设置TOC[n]位之前,MOTO寄存器应该加载与TSC相关的超时值
 ECanaShadow.CANTOC.all = ECanaRegs.CANTOC.all;
 ECanaShadow.CANTOC.bit.TOC16 = 1;
 ECanaRegs.CANTOC.all = ECanaShadow.CANTOC.all;
 那么在什么地方判断
 if ((ECanaRegs.CANTOS.all & 0xFFFF0000) != 0)
 {
 return TRANSMIT_OVERTIME;//返回指示发送超时
 }
 |