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:如何将接收到的 CANbus 远程请求作为 ISR 处理

Guru**** 2478765 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1454631/tms320f28379d-how-to-process-a-received-canbus-remote-request-as-an-isr

器件型号:TMS320F28379D

工具与软件:

您好!

我想使用 CAN 总线外设接收大约60个不同 ID 的远程请求、并 根据请求的 ID 提供唯一的数据消息。  没有足够的消息对象(32)通过自动回复 CAN_MSG_OBJ_TYPE_RxTx_REMOTE 来执行此操作、如 CAN_Ex9_REMOTE_ANSWER.c 中所示。

我想创建一个 ISR、1)确认 IRQ 由远程请求引起、2)检查远程请求的 ID 并回复相关的 CAN 总线数据帧。  我的问题是:

  • 在 ISR 内、如何检查 CAN 总线消息是否设置了远程位(首选 driverlib)、以便区分数据帧的 RX 与远程帧的 RX。
  • 如何从 ISR 中获取 CAN 总线消息中使用的 ID (确定60种不同的可能方式中的哪一种)?
  • 是使用 ISR 来回复如此多的远程 ID 是最佳方法还是有任何其他建议?

谢谢你。

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

    我已经取得了一些进展。  对于第二个项目、有一个名为"CAN_readMessageWithID"的 driverlib 函数、可用于选择正确的回复数据。  目前正在 TRM 中查找可能提供远程位状态的寄存器。

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

    (+)[常见问题解答] TMS570LC4357:DCAN 远程帧-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

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

    您好、您能就第一个和第三个问题提供更多说明吗?

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

    尊敬的 Mark:

    远程消息和响应数据消息由 CAN 消息处理器自动处理。 当收到远程报文时、 报文处理器会考虑匹配报文对象的三种不同配置。

    1. Dir=1和 RmtEn = 1:发送响应数据消息

    2. dir=1、 RmtEn = 0、umask=1:仲裁域和控制域被保存到报文对象中

    3.  dir=1和  RmtEn =0、umask=0: 远程消息被忽略。

    您可以将#2配置用于您的特殊用例。  

    1.配置一个消息对象#0或者邮箱:TX、TmtEN=0、和 umask=1。 接收到的远程消息存储在此报文对象中

    2.读取仲裁和控制字段:ID

    3.然后手动传输具有相同 ID 的报文对象