我正在为CAN编写一个dsPIC30F4011。但是我在指定标识符、掩码和过滤器时遇到了问题。
我使用标准标识符和扩展标识符。在第16-23位中,我将写入收发信机的地址。因此,看起来00000 00000001 0000000000000001空格只是为了显示我设置的以下位的收发器部分:
// 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那么,我做错什么了吗?(我想是的,但我不知道是什么)
发布于 2018-08-31 05:22:20
现在我设置的遮罩和滤镜有问题了
//掩码C1RXM0SID = 0x00FD;C1RXM0EIDH = 0x0C00;C1RXM0EIDL = 0x0000;//过滤C1RXF0SID = 0x0000;C1RXF0EIDH = 0x0400;C1RXF0EIDL = 0x0000;
现在我什么也收不到了。如果我设置
C1RXM0SID = 0x000FC;
这是因为您正在设置C1RXM0SID的位0。根据reference manual中的寄存器描述,这将仅匹配由过滤器中的EXIDE位确定的消息类型(标准或扩展地址)。此寄存器的位1未实现。假设您想要的SID掩码为0xFD,则此寄存器的SID掩码为
C1RXM0SID = 0x00FD << 2;https://stackoverflow.com/questions/29966370
复制相似问题