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**** 2482105 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/705188/tms320f28377s-can-driver-how-to-communicate-with-the-mailboxes-message-objects

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WARE

我正在尝试使用 Driverlib、但我越来越多地得出这样一个结论、即创建 Driverlib 时、完全不知道如何在实际应用中使用它。

我正在深入研究文档、这也不能帮助我。

是否有人可以提供一个流程图、说明如何访问邮箱?

我不理解/无法在文档中找到如何完成内容切换。

 例如: 我要为  邮箱16启用或禁用 TX 中断? 或检查邮箱4是否有 RX 溢出?

谢谢!

 EV

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

    您是否看过 C2000Ware 中的示例?
    要重新配置消息对象设置,可以使用 CAN_setupMessageObject()。
    如果要获取有关消息目标控制寄存器的特定信息、必须使用 HWREG 命令触发从消息目标到 IFx 寄存器的读取。 在您的开发中、如果您发现缺少 driverlib、请详细说明缺少哪种类型的 API、我可以提交增强请求。

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

    Chris、

    我已经花了很长时间使用 TI 产品进行编程。 因此、我已经通过了一般性要求、我需要详细信息! 那么、如何在邮箱之间切换呢?

    使用 CAN_setupMessageObject 更改设置是实现通用方法的一种方法。 当我更改设置时、并非所有信息都可用。 需要有一种方法、以便为单独的邮箱读取和写入标志。

     此外、还有多个用于接收消息的邮箱、只有一个用于发送。 为什么 您需要多个邮箱进行发送? 尤其是当您只有32个时。

    因此需要添加用于发送消息的 msgid 配置。

    其他问题:

     I2C 添加读取和写入数据序列。 数据表不完整、TI 专家无法准确(再次详细说明)说明数据表是如何完成的。 因此、我认为这有助于很多人使 I2C 正常工作。

     示例:

     写入序列: 一行中有多个数据字节。

     读取序列: 首次写入数据等待准备就绪并继续读取序列。

    这让我更感到困扰、那么它应该:

       //
       //检查参数。
       //

    您是否按新代码行付款? 此文本中没有信息、库中有一个信息。

    我在更新 TI 软件以进行更改方面的经验并不是很好。  我仍在等待修复此编译器问题: CodeGen-3927。 在编译器汇编中手动添加 nops 不是一个解决方法!

    感谢您的帮助、

     EV

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

    我对任何挫折表示歉意。 如果您遇到 I2C 问题、请在此问题上单独启动线程。
    我不确定我是否完全清楚"在邮箱之间切换"的含义。 如果您是要获取消息对象1的配置并将其移动到消息对象2、则需要使用 HWREG 来使用 IFX 寄存器执行此操作(请参阅技术参考手册中的消息接口寄存器集部分)。

    例如、您配置 HWREG_BP (CANA_base + CAN_O_IF1CMD)=(0x1 | CAN_IF1CMD_DATA_B | CAN_IF1CMD_DATA_A | CAN_IF1CMD_CONTROL_CAN_IF1CMD_OBJ|CAN_IF1CMD_MASK)、以将内容读取到 CAN_IF1CMD_CAN_CMD_CONTROL_CANIF1CMD|CAN_CAN_CMD_CAN_CMD_CONTROL_CANIF1CMD|CAN_CAN_CANIF1CMD_CMD_CAN_CAN_CAN_CAN_CAN_CANIF1CMD_CAN_CAN_CAN_CAN_CAN_CAN_CAN_CAN_CAN_CAN_CAN_ING_1寄存器中| CANIF1CMD_CMD_ING_W1CMD_CAN_CAN_CAN_CAN_CAN_CAN_CAN_CAN_CAN_CAN_CAN_ING_

    32个报文对象中的任何一个都可以配置为 TX 或 RX。 您可能具有不同的 DLC 或其他设置、这些设置随后需要具有另一个 TX 消息对象。 这只是一个示例。

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

    Chris、

    我知道您正在尽最大努力提供帮助、您对此什么也不做。 但我认为 TI 的总体质量很低、没有其他选择。 一般而言、我在这里提出我的问题、而不是期望得到解答。

    就像在 I2C 问题中一样、我需要自己解决它。 只有解决它需要很长时间。

    我同时解决了以下两个问题:

    我在文档中没有找到任何信息、说明如何选择消息对象/邮箱来进行配置或读取状态位、如 MsgLst。 (消息丢失、driverlib 中不支持重要)

    那么、它是如何实现的:

    写入报文对象:

    检查 IF1CMD 忙位是否 为0。 如果不等待

    根据需要填充寄存器:IF1MSK、IF1ARB、IF1MCTL、IF1DATA

    在 IF1CMD 中选择与您已填充的寄存器相对应的位。 哪个位与哪个 IF1寄存器相对应、TI 假设您知道。

    最后选择要配置的邮件对象。

    完成:

    读取报文对象:

    检查 IF1CMD 忙位是否 为0。 如果不等待

    在 IF1CMD 中选择与您要读取的寄存器相对应的位。 哪个位与哪个 IF1寄存器相对应、TI 假设您知道。

    选择要读取的消息对象。

    检查 IF1CMD 忙位是否 为0。 如果不等待

    读取所选的寄存器:(IF1MSK、IF1ARB、IF1MCTL、IF1DATA)