我正在为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
那么,我做错了什么吗? (我想是的,但我不知道是什么)
答案 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;