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.

[参考译文] LAUNCHTXL-F2.8379万D:Can RX Issue,How do I get ID of a receiving message?(RX问题,如何获取接收邮件的ID?)

Guru**** 2563960 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/640791/launchxl-f28379d-can-rx-issue-how-do-i-get-id-of-a-receiving-message

部件号:LAUNCHXL-F2.8379万D

使用F2837xD外设驱动程序库1.02 .00.00 ,
如何获取 收到的消息的msgid?

如果我使用msgid掩码,并允许多个msgid通过,则丢弃我的接收筛选器。
 -最好能得到收到的消息的实际msgid。

请参阅“F2837xD外设驱动程序库1.02 .00.00 ”第42页的用户指南

void CAN_setupMessageObject (UINT32_t base,UINT32_t Objid,UINT32_t msgid,CAN_MsgFrameType帧,CAN_MsgObjType msgType,UINT32_t msgIDMask, uINT32_tflags,uint16_t msgLen);

布尔CAN_readMessage (UINT32_t BASE,UINT32_t Objid,uint16_t msgData);
-此方法仅从消息获取原始数据,而不是ID。

另一个问题:

如果我在处理旧ObjID之前收到同一个ObjID的消息,它是否被覆盖/丢失,或者是否存在某种fifo缓冲区,会发生什么情况?

此致

西门

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

    最好的方法是直接查看寄存器的内容。 在CCS中,在函数CAN_readMessage内朝末尾设置一个断点。打开表达式窗口,并将CanaRegs.CAN_IF1ARB行添加到表达式窗口。 展开该字段,您应该会看到'ID'字段,该字段为29位长度,因为它支持扩展寻址(标准长度仅为11位)。 此字段中的值是消息ID,不包括掩码。

    在第二个问题上,如果使用相同的ObjID,则会覆盖上一条消息。

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

    你(们)好

    在此示例中,id为0x1234,STD消息(11位)的值实际上高于11位,将被屏蔽为0x234 (错误)?

    我用CAN_ex1_loopback示例测试了您的soulion。 CanaRegs.CAN_IF1ARB的值为0x8D0万 (ID << 18)

    我的应用程序中确实需要此ID,而不仅仅是为了进行调试。

    我在“new driverlib”中的任何头文件中都找不到CanaRegs的定义,因此我以与can.c相同的方式读出了该值。

       //
           //读取CAN消息对象2并检查新数据
           //
           如果(can_readMessage(Cana_base, 2, rxMsgData))
           {

              长ID = HWREG (Cana_base + CAN_O_IF1ARB);
               ID &= CAN_IF1ARC_STD_ID_M;
               ID = id >> CAN_IF1ARC_STD_ID_S;

    完成CAN_readMessage后立即提取此ID是否安全?
    我想不建议编辑CAN.C,因为将来某个时候可能会更新宽度,更新为新版本。

     

    还有一件事,浏览ccan.c文件

    在CAN_readMessage()的末尾,使用实例为"base"(变量)的"Cana_base"(常量)调用的HWREG,这是否是一个错误?  

     //
           //现在清除新的数据标志
           //
           //将消息对象传输到指定的消息对象
           //对象标识
           //
           HWREG_BP (Cana_base + CAN_O_IF2CMD)= CAN_IF2CMD_TXRQST |
                                                (Objid & CAN_IF2CMD_MSG_NUM_M);

           //
           //等待忙位清除
           //
           While ((HWREGH (Cana_base + CAN_O_IF2CMD)& CAN_IF2CMD_BUSY)== CAN_IF2CMD_BUSY)
           {
           }