【问题标题】:Mask and Filter dsPic30F4011掩模和过滤器 dsPic30F4011
【发布时间】:2015-07-10 01:48:15
【问题描述】:

我正在为 CAN 编程一个 dsPIC30F4011。但我在指定标识符、掩码和过滤器时遇到问题。

我使用标准标识符和扩展标识符。在第 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

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

【问题讨论】:

    标签: c embedded can-bus dspic


    【解决方案1】:

    现在我的面具和我设置的过滤器有问题

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

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 2021-03-15
      • 2021-06-03
      • 2013-03-16
      • 1970-01-01
      相关资源
      最近更新 更多