tms570ls20206的can总线中,为什么设置了屏蔽寄存器,可是还是所有的CAN的ID都产生中断,且中断清不掉.关于验收滤波器这方面请赐教!谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
tms570ls20206的can总线中,为什么设置了屏蔽寄存器,可是还是所有的CAN的ID都产生中断,且中断清不掉.关于验收滤波器这方面请赐教!谢谢!
Hi Zhangjie,
请查收附件,这是一个使用ID MASK的例子。
请您先查看570的TRM,关于IFxMSK寄存器一节(16.15.19 IF1/IF2 Mask Registers (DCAN IF1MSK, DCAN IF2MSK))。
我们的MASK的工作方式是:
0: The corresponding bit in the identifier of the message object is not used for acceptance filtering (don’t care).
1: The corresponding bit in the identifier of the message object is used for acceptance filtering.
以11bit ID为例,如果您把ID为0x501的MsgObj的MASK设置成0x7FF,那么这个MsgObj只能接收0x501 ID的报文。
如果把MASK设置成0x7FE,也就是ID的最后一个bit不关心(don't care),那么0x500和0x501就都能接收进来了。
附件中的例子就是将MsgObj 4的MASK设置成0x7FE,那么本来ID是0x500的MsgObj4也可以接收0x501 ID的报文了。
关于清中断,请参考附件例程的方法。
正常情况下,进入中断后,通过IFxCMD寄存器的ClrIntPnd位来清楚中断标志。
接收中断可以使用IFxCMD的CLRINTpnd清除了,谢谢!现在还有一个疑问,就是我是启动了发送中断,使用中断来发送CAN总线的多帧,现在发现发送中断无法清除,想知道发送中断如何清除,IFxCMD的CLRINTpnd位只是清除接收中断吧,谢谢
Hi Zhangjie,
DCAN模块本身是不严格区分发送或接收中断的。只有IE0和IE1两个bit控制的DCANxINT0和DCANxINT1两个中断。
也就是常说的High和Low中断。
建议您用不同的中断ISR来响应发送或接收中断。
无论您用哪个中断ISR来响应发送中断,清除INTPND的方法都是使用IFxCMD的CLRINTpnd清除。
如果您使用同一个ISR来响应发送和接收中断,那么需要在ISR中稍加判断了。
还有就是,如果使用中断的方式来完成连续发送,您可能需要考虑总线繁忙(busy)问题。
另一种方法是使用时间片来完成发送,通过轮询TxRqst位来判断当前数据是否发送完成,进而进行后面的报文发送。
这样的做法更便于实现超时监控(Timeout monitor).