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.

[参考译文] TMS320F28379D:程序运行时 CAN 邮箱 ID 修改

Guru**** 2779905 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1617539/tms320f28379d-can-mailbox-id-modification-when-programm-running

部件号: TMS320F28379D
主题: SysConfig 中讨论的其他器件

您好:

我想在程序正在运行时更改邮箱的 ID。

我了解了 SysConfig 会为 board_init () 中的初始化生成什么:

  • 通过 can_setupMessageObject () 初始化整个邮箱
  • can_startModule () 为模块的开始

所以,我的想法是  

  • 停止模块
  • 初始化邮箱、更改 ID

但是 can_stopModule () 函数不存在。

“你说什么? 我自己写一个这样的函数? 使用此方法更改 ID 是否存在其他风险?

感谢您的建议

Vincent

 

 

 

 

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

    您好:

    对延误表示歉意、星期一是在美国度假的。 请稍后回复。

    此致、
    马特

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

    嗨、Vincent、

    没有 can_stopModule()、有一个 can_disableController() 函数可以为您实现此函数。

    不过、  

    最安全的方法是仅禁用要修改的特定邮箱、而不是停止整个 CAN 模块:

    通过将 CAN_IF1ARB 寄存器中的 MsgVal 位(位 31)清零来禁用邮箱。 禁用时、消息处理程序会忽略该消息对象。
    通过更新 CAN_IF1ARB 寄存器中的 ID 位 (28:0) 来修改 ID。
    Re — 通过将 MsgVal 位设置回 1 来启用邮箱。
    您可以使用 Driverlib 函数 can_setupMessageObject() 以新 ID 重新配置邮箱。 如果需要显式禁用消息对象、该库还提供 can_disableMessageObject ()。

    若要在运行时修改消息对象、必须使用 CAN 接口 (IFx) 寄存器:

    1. 通过将消息编号写入 CAN_IFxCMD 寄存器的 MSG_NUM 字段、启动从消息对象到接口寄存器的读取传输。
    2. 等待 BUSY 位(位 15)清零。 设置该位时、接口寄存器受写保护。
    3. 修改接口寄存器中的数据(包括 CAN_IF1ARB 中的 ID)。
    4. 通过将 DIR 位设置为 1 并确保 ARB 位(位 21)设置为将仲裁字段传回消息对象、启动写入传输。
    5. can_setupMessageObject() 函数可为您处理此序列。

    如果此解决方案能正确解决您的问题、请告诉我们。 我们很高兴为您提供更多帮助。

    此致、

    Zackary Fleenor

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

    您好 Zackary、

    非常感谢您的解释、非常清楚。

    因此、您能否确认 这两行 符合我的需求:

    (假设在 board_init () 中将对象 2 配置为 ID 983)

    (我做过测试,似乎还可以)

    我不会忘记关闭这个问题。

    再见

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

    嗨、Vincent、

    这对我来说是正确的、假设之后重新启用消息对象。 很高兴听到测试按计划进行!

    听起来我们可以同时关闭此问题。 如果您有任何其他问题、请随时创建新的 E2E 主题、我们很高兴从那里获得更多帮助Slight smile

    此致、

    Zackary Fleenor