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.

[参考译文] TM4C123GH6PM:CAN 编程需要帮助

Guru**** 2459550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/649453/tm4c123gh6pm-help-needed-in-can-programming

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123

大家好、  

我正在尝试详细了解 TM4C123器件中的 CAN 模块、以构建 AUTOSAR CAN 驱动器(这与我的毕业项目相关)。

我想知道如何在离开 CAN 控制器的初始化状态之前配置所有硬件消息对象。 例如、如果 RX 需要16个对象、TX 需要其他16个对象。  

我无法理解、因为我只有2个 MNUM 字段(在2个命令 REQ 中)。 寄存器)。 如何使用唯一消息。 每个硬件消息对象的对象编号。

此致、  

斯里特

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

    您好、Sarea、

     您没有使用用于 CAN 的 TivaWare 驱动程序库、而是创建自己的 AUTOSAR CAN 驱动程序?

     CAN 模块最多可支持32个报文对象、最多可使用 MNUM 位域指定32个报文对象。 通过使用掩码、每个报文对象可被配置为发送/接收不同的报文 ID。 请参考 CANIFxMSK 寄存器。  

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

    这是一个最能说明问题的答案-直接帮助海报。

    一个注释-使用六位(通常启用"64"选项)-但"限制在此处"至"32"-是(几乎保证)产生了多个不可靠的"悬崖跳线..."   (实际上、这是"老鼠类型"中的"覆盖"-但颜色粗体是自由的-而适当的"高光" 战胜了"蹲"、更好地确保了"对意外的认识!")

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

    谢谢 Charles、

    当然、如果与 AUTOSAR 规范没有冲突、我可以使用一些 TivaWare API。

    ------------------------------------------------------------------

    您是说在 ID、屏蔽、TX 或 RX 等其他寄存器中进行所有配置后... 等等

    我应该写入 MNUM 值、这样就会将所有设置分配给我指定的报文对象、我可以对另一个对象重复该过程。

    对吗?  

    此致、  

    斯里特

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

    萨里特

     您的理解是正确的。  请参阅 TivaWare CAN 示例、了解这是如何实现的。 下面是用于设置两个消息目标的代码片段。 您可以在中找到此示例 \examples\peripheral\cAN\multi_TX.c

    //
    //初始化报文对象1以能够发送 CAN 报文1。 这种情况
    //消息对象不是共享的,因此只需要初始化一个
    //时间,和可用于重复发送相同的消息 ID。
    //
    G_sCANMsgObject1.ui32MsgID = 0x1001;
    G_sCANMsgObject1.ui32MsgIDMask = 0;
    G_sCANMsgObject1.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
    G_sCANMsgObject1.ui32MsgLen = sizeof (g_pui8Msg1);
    G_sCANMsgObject1.pui8MsgData = g_pui8Msg1;
    
    //
    //初始化报文对象2以便能够发送 CAN 报文2. 这种情况
    //消息对象不是共享的,因此只需要初始化一个
    //时间,和可用于重复发送相同的消息 ID。
    //
    G_sCANMsgObject2.ui32MsgID = 0x2001;
    G_sCANMsgObject2.ui32MsgIDMask = 0;
    G_sCANMsgObject2.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
    G_sCANMsgObject2.ui32MsgLen = sizeof (g_pui8Msg2);
    G_sCANMsgObject2.pui8MsgData = g_pui8Msg2;