掩模和滤波器dsPic30F4011

掩模和滤波器dsPic30F4011,c,embedded,can-bus,dspic,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

我正在为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;
C1RXM0SID = 0x000FC;
我收到所有的信息。 我用收发机地址试过了

0b00000000

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

现在我设置的遮罩和过滤器有问题

// Mask
C1RXM0SID = 0x00FD;
C1RXM0EIDH = 0x0C00;
C1RXM0EIDL = 0x0000;
// Filter
C1RXF0SID = 0x0000;
C1RXF0EIDH = 0x0400;
C1RXF0EIDL = 0x0000;
现在我没有收到任何东西。如果我设定

C1RXM0SID = 0x000FC;
C1RXM0SID = 0x000FC;
这是因为您正在设置C1RXM0SID的位0。根据中的寄存器描述,这将仅匹配由筛选器中的EXIDE位确定的消息类型(标准或扩展地址)。该寄存器的第1位未实现。假设所需的SID掩码为0xFD,则此寄存器所需的是

C1RXM0SID = 0x00FD << 2;
C1RXM0SID=0x00FD