This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28377S:CAN 标识符掩码问题

Guru**** 1996415 points
Other Parts Discussed in Thread: CONTROLSUITE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/565265/tms320f28377s-can-identifier-mask-question

器件型号:TMS320F28377S
Thread 中讨论的其他器件:controlSUITE

您好、香榭丽舍

我尝试使用以下示例测试 F2837x CAN 的标识符掩码函数:

C:\ti\controlSUITE\device_support\F2837xS\v191\F2837xS_Examples_CPU1\CAN_loopback

在  CANInit(Cana_base)中,我已设置 IF2MCTL.umask 位。 通过使用以下指令、

 HWREGH (ui32Base + CAN_O_IF2MCTL)= CAN_IF2MCTL_UMASK;

我 修改了消息 ID 和掩码、如下所示:

   sTXCANMessage.ui32MsgID = 0x04000164;                     //  
   sTXCANMessage.ui32MsgIDMask = 0x1f00FFFF;                 //

   sRXCANMessage.ui32MsgID = 0x04000168;                     //  
   sRXCANMessage.ui32MsgIDMask = 0x1f00fff0;                 //

但是 ,消息对象2无法接收 来自对象1的消息。

您能否帮助检查  标识符掩码函数的其它任何内容或如何配置标识符掩码函数?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Huihuang、

               如果您不使用任何滤波、这是否起作用? 即、如果您使两个邮箱的 MSGID 相同、是否收到了消息? 如果确实如此、则可以将掩码的所有位设置为"无关"、然后查看其是否起作用。 如果这也起作用、您可以尝试屏蔽所选的位、就像您在发布的代码 snip 中所做的那样。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Haresh、

    感谢您的帮助!

    如果两个邮箱的 MSGID 与下面的相同 ,不管 MASK 位设置为 0x00或 0x1ffffff,都可以接收到消息,

    sTXCANMessage.ui32MsgID = 0x04000164;//

    sRXCANMessage.ui32MsgID = 0x04000164;//

    但是,如果我按如下方式更改 MSGIDS,  那么不管掩码位 是0x00还是 0x1ffffff,都无法接收到消息。

    sTXCANMessage.ui32MsgID = 0x04000164;//

    sRXCANMessage.ui32MsgID = 0x04000168;//

    //设置为无关

    sTXCANMessage.ui32MsgIDMask = 0x00;//  

    sRXCANMessage.ui32MsgIDMask = 0x00;    

    //设置掩码位

    sTXCANMessage.ui32MsgIDMask = 0x1fffffff;//  

    sRXCANMessage.ui32MsgIDMask = 0x1fffffff;       

         

    我是否知道我的设置有什么问题 、还有其他需要注意的问题、或者您是否有有关掩码位设置的可行示例?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Huihuang、
    您是否已将 IF1MSK 寄存器中的 MDir / MXtd 设置为正确的值? 很抱歉、我现在没有分享示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Haresh、

    我只需使用 F2837x CAN 示例项目、如下所示:

    C:\ti\controlSUITE\device_support\F2837xS\v191\F2837xS_Examples_CPU1\CAN_loopback

    在  CANInit(Cana_base)中,我已设置 IF2MCTL.umask 位。 通过使用以下指令、

     HWREGH (ui32Base + CAN_O_IF2MCTL)= CAN_IF2MCTL_UMASK;

    我 修改了消息 ID 和掩码、如下所示:

       sTXCANMessage.ui32MsgID = 0x04000164;                     //  
       sTXCANMessage.ui32MsgIDMask = 0x1f00FFFF;                 //

       sRXCANMessage.ui32MsgID = 0x04000168;                     //  
       sRXCANMessage.ui32MsgIDMask = 0x1f00fff0;                 //

    除了上述修改之外,不 需要更改其他内容 ,这将非常容易 根据   示例项目重新出现问题。

    在 Debug 窗口中,我可以在   IF2MSK 寄存器中看到 MDir 为0,MXtd 为1。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Haresh、

    根据您的建议,我将代码修改如下,过滤功能可以正常工作。

    非常感谢您的热情帮助!

      *(unsigned long *) ucTXMsgData = 0;

       sTXCANMessage.ui32MsgID = 0x04000164;                              // CAN 消息 ID

       sTXCANMessage.ui32Flags = MSG_OBJ_EXDED_ID | MSG_OBJ_TX_INT_ENABLE;

       sTXCANMessage.ui32MsgLen = sizeof (ucTXMsgData);                    //消息大小为4

       sTXCANMessage.pucMsgData = ucTXMsgData;                            // ptr 至消息内容

     

       //

       //初始化将用于接收 CAN 的消息对象

       //消息。

       

       *(unsigned long *) ucRXMsgData = 0;

       sRXCANMessage.ui32MsgID = 0x04000168;                              // CAN 消息 ID -使用1

        sRXCANMessage.ui32MsgIDMask = 0x1f00fff0;

       sRXCANMessage.ui32Flags = MSG_OBJ_EXDED_ID | MSG_OBJ_USE_ID_FILTER;

       sRXCANMessage.ui32MsgLen = sizeof (ucRXMsgData);                    //消息大小为4

       sRXCANMessage.pucMsgData = ucRXMsgData;                            // ptr 至消息内容