掩码和滤波器dsPic30F4011

时间:2015-04-30 11:20:20

标签: c embedded can-bus dspic

我正在为CAN编程dsPIC30F4011。但是我在指定标识符,掩码和过滤器方面遇到了问题。

我使用标准标识符和extendet标识符。在16-23号,我会写出收发器的地址。 所以,它看起来像 00000 00000001 0000000000000001 空间只是为了显示tranceiver部分 我设置了以下位:

// PRIO
C1TX0SIDbits.SID10_6 = 0x0000; 
// SCR
C1TX0SIDbits.SID5_0 = 0x0000;   
C1TX0EIDbits.EID17 = 0x0000;
C1TX0EIDbits.EID16 = 0x0001;
// DEST
C1TX0EIDbits.EID15 = 0x0000;    
C1TX0EIDbits.EID14 = 0x0000;
C1TX0EIDbits.EID13 = 0x0000;
C1TX0EIDbits.EID12 = 0x0000;
C1TX0EIDbits.EID11 = 0x0000;
C1TX0EIDbits.EID10 = 0x0000;
C1TX0EIDbits.EID9 = 0x0000;
C1TX0EIDbits.EID8 = 0x0000;
// CMD
C1TX0DLCbits.EID5_0 = 0x0001;

现在我的面具和过滤器都有问题 我设置了它们

// Mask
C1RXM0SID = 0x00FD;
C1RXM0EIDH = 0x0C00;
C1RXM0EIDL = 0x0000;
// Filter
C1RXF0SID = 0x0000;
C1RXF0EIDH = 0x0400;
C1RXF0EIDL = 0x0000;

现在我没有收到任何东西。如果我设置

C1RXM0SID = 0x000FC;

我收到所有邮件。 我尝试使用收发器地址

0b00000000

0b00000001

那么,我做错了什么吗? (我想是的,但我不知道是什么)

1 个答案:

答案 0 :(得分:0)

  

现在我在设置口罩和滤镜方面遇到了问题

// Mask
C1RXM0SID = 0x00FD;
C1RXM0EIDH = 0x0C00;
C1RXM0EIDL = 0x0000;
// Filter
C1RXF0SID = 0x0000;
C1RXF0EIDH = 0x0400;
C1RXF0EIDL = 0x0000;
     

现在我什么也没收到。如果我设置

C1RXM0SID = 0x000FC;

这是因为您正在设置C1RXM0SID的位0。根据{{​​3}}中的寄存器描述,这将仅匹配由过滤器中的EXIDE位确定的消息类型(标准或扩展地址)。该寄存器的位1未实现。假设您想要的SID掩码为0xFD,那么您想要的此寄存器为

C1RXM0SID = 0x00FD << 2;