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总线滤波及中断

Other Parts Discussed in Thread: TMS570LS20206

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).