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.

[参考译文] MSPM0G3519:CAN API 阐释

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1446229/mspm0g3519-can-api-clarification

器件型号:MSPM0G3519
主题中讨论的其他器件:SysConfig

工具与软件:

大家好、您可以帮助了解 CAN API 吗?下面是 mcan_multi_message_tx 项目的代码

/*将 Tx 消息写入消息 RAM。 */
       DL_MCAN_writeMsgRam (MCAN0_INST、DL_MCAN_MEM_TYPE_BUF、0、&txMsg0);

       /*将 Tx 消息写入消息 RAM。 */
       DL_MCAN_writeMsgRam (MCAN0_INST、DL_MCAN_MEM_TYPE_BUF、1、&txMsg1);

       /*添加传输请求。 */
       DL_MCAN_TXBufAddReq (MCAN0_INST、0);

       /*添加传输请求。 */
       DL_MCAN_TXBufAddReq (MCAN0_INST、1);

我的客户需要使用 FIFO;因此、他们将 DL_MCAN_MEM_TYPE_BUF 更改为 DL_MCAN_MEM_TYPE_FIFO

         DL_MCAN_writeMsgRam (MCAN0_INST、DL_MCAN_MEM_TYPE_FIFO、0、&txMsg0);

但是、当它们更改为 DL_MCAN_MEM_TYPE_FIFO 时、代码不起作用。

请告诉我们如何将 API 用于 FIFO。

此致、

Frangline。

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

    嗨、Frangline、在上面的代码中、似乎仍在引用 TXBuf、而不是 TXFifo。 如果按住 CTRL 并点击  DL_MCAN_TXBufAddReq、它应该会将您带到 dl_mcan.h 文件中所引用的声明和定义。 您可以 在该视图中查看是否需要进行任何更改。 我看到其中的多个 FIFO 函数可能会导致问题。 能否提供有关代码、所做的任何其他更改以及 SysConfig 设置的更多详细信息?

    -Brian

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

    Brian、您好!

    感谢重放、我们正在尝试在 FIFO 模式下使用完整的 CAN 缓冲区 RAM (前512字节作为 Rx FIFO 缓冲区、后512字节作为 TX 缓冲区、随附下图)

     使用上述经典 CAN 和以下代码对 RAM 进行上述配置后、我们无法一次传输1条以上的消息、接收也是如此  

        /*将 Tx 消息写入消息 RAM。 */
           DL_MCAN_writeMsgRam (MCAN0_INST、DL_MCAN_MEM_TYPE_FIFO、0、&txMsg0);

           /*将 Tx 消息写入消息 RAM。 */
           DL_MCAN_writeMsgRam (MCAN0_INST、DL_MCAN_MEM_TYPE_FIFO、0、&txMsg1);

           /*添加传输请求。 */
           DL_MCAN_TXBufAddReq (MCAN0_INST、0);

           /*添加传输请求。 */
           DL_MCAN_TXBufAddReq (MCAN0_INST、1)

    我们正在尝试了解当 CAN RAM 配置为 FIFO 时要使用哪些 API 进行传输、如果有任何响应、我们将不胜感激。  

    谢谢你  

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

    尊敬的 Shivaraj:

    看看 SDK 中针对 CAN 的示例、FIFO 事件大小似乎具有不同的设置、您是否可以尝试更改此值以查看是否允许发送多条消息? 看起来您没有同时使用 FIFO TX 缓冲器。

    -Brian

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

    Brian、您好!

    是的、我们不使用 FIFO 事件、因此我们将其保持为0。  我们将 CAN RAM 仅用于 FIFO

    在了解可用的 API 后、现在我们可以使用以下代码一次传输32条消息以进行传输、但我们在接收 CAN 消息时仍然面临问题

      DL_MCAN_TxBufElement lstr_TxMsg;
      DL_MCAN_TxFIFOStatus lstr_TxfifoStatus;
      /*将 Tx 消息写入消息 RAM (FIFO)。 */
      DL_MCAN_writeMsgRam (CAN_INST、DL_MCAN_MEM_TYPE_FIFO、0、&lstr_TxMsg);
      /*在 txfifoStatus*中获取 Put 索引和其他 TxFIFO 详细信息
      DL_MCAN_getTxFIFOQueStatus (CAN_INST、&lstr_TxfifoStatus);

      /*添加传输请求。 */
      DL_MCAN_TXBufAddReq (CAN_INST、lstr_TxfifoStatus.putIdx);

    对于接收 CAN 消息、我们不知道当 FIFO 中填充多条消息时要使用哪个 API。  

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

    尊敬的 Shivaraj:

    您应该能够通过以下代码读取这些 RX 数据:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if ((gInterruptLine1Status & MCAN_IR_RF0N_MASK) == MCAN_IR_RF0N_MASK)
    {
    rxFS.num = DL_MCAN_RX_FIFO_NUM_0;
    while ((rxFS.fillLvl) == 0)
    {
    DL_MCAN_getRxFIFOStatus(MCAN0_INST, &rxFS);
    }
    DL_MCAN_readMsgRam(
    MCAN0_INST, DL_MCAN_MEM_TYPE_FIFO, 0U, rxFS.num, &rxMsg);
    DL_MCAN_writeRxFIFOAck(MCAN0_INST, rxFS.num, rxFS.getIdx);
    processRxMsg(&rxMsg);
    gInterruptLine1Status &= ~(MCAN_IR_RF0N_MASK);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    谢谢!

    此致

    Johnson

x 出现错误。请重试或与管理员联系。