我正在为CAN编程dsPIC30F4011但是我在指定标识符、掩码和过滤器时遇到了问题。
我使用标准标识符和extendet标识符在16-23位中,我将写出纳的地址。
所以,看起来
0000000000001亿1
这些空间只是为了显示出纳部分
我设置以下位:

// 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

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

最佳答案

现在我的面具和过滤器出了问题

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

现在我什么也收不到了如果我设置
C1RXM0SID = 0x000FC;

这是因为您正在设置C1RXM0SID的位0根据reference manual中的寄存器描述,这将只匹配由筛选器中的EXIDE位确定的消息类型(标准或扩展地址)此寄存器的位1未实现假设您想要的SID掩码是0xFD,那么您想要这个寄存器是
C1RXM0SID = 0x00FD << 2;

关于c - mask 和过滤器dsPic30F4011,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29966370/

10-10 12:52