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.

[参考译文] CCS/TMS320F280049C:CAN 读取、DLC、ARBID

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/849930/ccs-tms320f280049c-can-reading-dlc-arbid

器件型号:TMS320F280049C

工具/软件:Code Composer Studio

您好!

我已经使用中断读取了 CAN 消息  

执行该操作  

CAN_readMessage (CANB_BASE、RX_MSG_OBJ_ID、rxMsgData);

我可以看到数据。 同样、我想阅读《ARBID》和《DLC》  

那么、我放置类似这样的内容  

RX_ID = HWREG_BP (CANB_MSG_RAM_BASE + RX_MSG_OBJ_ID * 0x20 + 0x08);  

在该代码之后、我仍然只读取0。

此致

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

    您好、Lakshmi、

          不确定是否可以正常工作、但您可以尝试读取 CAN_IF2ARB 寄存器以进行竞标:

                        RX_ID = HWREG (CANB_BASE + CAN_O_IF2ARB)和0x1FFFFFF;//[28:0] 29位 ARB ID

          对于 DLC、尝试读取 CAN_IF2MCTL 寄存器:

                          DLC = HWREG (CANB_BASE + CAN_O_IF2MCTL)和0xF;//[3:0] 4位 DLC

    此致、

    Joseph

                        

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

    您好、Joseph、

    我尝试了  

    RX_ID = HWREG (CANB_BASE + CAN_O_IF2ARB)& 0x1FFFFFF;  

    RX_ID 保持为0、同时数据被更新。 我正在使用 std_id、但仍需要在 rx_id.

    有一些疑问:

    1. 在上面的等式中、我看不到任何与 obj_id 对应的宏或变量、因为我不使用17。
    2. 在调试模式期间、消息 RAM 不能通过 sprui33c.pdf 中的 IFx 寄存器组进行访问

    此致

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

    您好、Lakshmi、

    几个问题:

           -如果您使用寄存器读出 CAN 消息、它是 IF1还是 IF2呢?

           -对于您感兴趣读出的 ID、是消息对象 ID (1至32)还是仲裁 ID (来自发送节点的唯一 ID、11位标准还是29位扩展)?

    谢谢、

    Joseph

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

    您好!

     -如果您使用寄存器读出 CAN 消息、它是 IF1还是 IF2呢?

    我正在使用来自 diverslib 的此函数

    CAN_readMessage (CANB_BASE、17、rxMsgData);

    -对于您感兴趣读出的 ID、是消息对象 ID (1至32)还是仲裁 ID (来自发送节点的唯一 ID、11位标准还是29位扩展)?

    • 是的、我使用的是消息 obj id 17、  
    • 我收到了所有消息、然后  

    CAN_setupMessageObject (CANB_BASE、17、0x00、
    CAN_MSG_FRAME_STD、CAN_MSG_OBJ_TYPE_RX、0、
    CAN_MSG_OBJ_RX_INT_ENABLE | CAN_MSG_OBJ_USE_ID_FILTER、8);

    此致、

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

    您好、Lakshmi、

    如果您使用的是 driverlib、则它是 IF2。  抱歉、我省略了一个步骤。  在读取 arbID 和 DLC 之前先执行此操作。  以下函数将数据从消息 RAM 传输到 IF2寄存器(您还可以查看 driverlib 中函数的参数的可能值):

    CAN_transferMessage (CANB_BASE、2、17、false、false);

    然后:

    RX_ID = HWREG (CANB_BASE + CAN_O_IF2ARB)和0x1FFFFFF;//[28:0] 29位 ARB ID

    DLC = HWREG (CANB_BASE + CAN_O_IF2MCTL)和0xF;//[3:0] 4位 DLC

    此致、

    Joseph