tms570ls20206的can总线中,为什么设置了屏蔽寄存器,可是还是所有的CAN的ID都产生中断,且中断清不掉?
DCAN模块本身是不严格区分发送或接收中断的。只有IE0和IE1两个bit控制的DCANxINT0和DCANxINT1两个中断。 也就是常说的High和Low中断。
建议用不同的中断ISR来响应发送或接收中断。
无论用哪个中断ISR来响应发送中断,清除INTPND的方法都是使用IFxCMD的CLRINTpnd清除。
如果使用同一个ISR来响应发送和接收中断,那么需要在ISR中稍加判断了。
还有就是,如果使用中断的方式来完成连续发送,您可能需要考虑总线繁忙(busy)问题。
另一种方法是使用时间片来完成发送,通过轮询TxRqst位来判断当前数据是否发送完成,进而进行后面的报文发送。
这样的做法更便于实现超时监控(Timeout monitor).
请先查看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就都能接收进来了。