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.

[参考译文] IWRL6432:MCAN 中断不会在接收消息时触发、但只会在某些情况下触发。

Guru**** 2552050 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1462530/iwrl6432-mcan-interrupt-does-not-trigger-when-receiving-a-message-but-only-sometimes

器件型号:IWRL6432

工具与软件:

各位专家、您好!  

我有一个我们观察到的非常奇怪的问题。 将多个 CAN 设备连接到网络时、我们有时(大约50%的时间)可以发现除一个设备之外的所有设备。 如果网络上有5个、有时4个将是可发现的。 如果我们添加另一个设备、有时仍然只有一个设备不可发现。 我们已经发现了多达30个设备、发现了29个设备、发现了3个设备、发现了2个设备。  

问题的性质如下:  

  • 有问题的设备仍将通过内部计时器触发发送消息。  
    • 这意味着中断针对 TX 正常工作
  • 有问题的设备将接收到发送到 FIFO0的消息。 当消息被发送到该器件时、我们会观察 FIFO 填充情况、但器件永远不会将其从 FIFO 中取出。  
  • FIFO0 RX 中断永远不会被触发。
  • 问题设备并非始终是同一个设备。 它通常是同一个器件、但可以通过下电上电在一段时间内自行更改/修复。  
  • 创建中断后、返回 systemP_SUCCESS、指示中断应正常工作。  

我们有一个 CAN RX 任务、它与演示代码中的许多其他任务一样运行、在顶部有一个 while 循环、并且有一个不确定的信标、在等待信标发布(这应该在 MCAN ISR 中发生)。 虽然如果 FIFO 不为空、可以观察 FIFO 填充级别并发布信标、但这似乎并不能解决内核问题。  

对于 FIFO 收到新消息时寄存器为何不发布中断、您有什么见解吗? 据我所知、寄存器已正确启用、如网络上的 n-1个其他器件所示。  

提前感谢您。  

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

    你好。

    我正在研究这一问题、并将在明天结束时提供最新情况。

    此致、

    Santosh

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

    尊敬的 Santosh:  

    在我研究它时、我有一些关于这一点的更多详细信息。  

    我最初认为唯一功能异常的中断是 RX FIFO0新增 msg、但在进一步检查后、我发现没有任何 MCAN 中断通过 MCAN_IR 寄存器工作。 TX 中断似乎只起作用、因为我们为 TX 信标挂起分配了明确的超时、而不是像 RX 信标那样分配无限的超时。  

    这里澄清了我的问题、  

    您建议如何调试中断寄存器函数?  中断初始化函数(REGISTER、ENABLE、ASSIGN)没有返回值、它们调用的硬件寄存器函数也没有返回值。 我唯一想要在评估板上复制此问题并实时浏览寄存器以查看是否已启用的选项吗?  

    此外、什么可能导致中断寄存器未正确启用?  是否存在会导致寄存器无法正确启用的 CAN 情况? 是否有禁用寄存器的 CAN 条件?  

    感谢您投入宝贵的时间与精力。  

    DS

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

    Daniel、您好!

    对反应的拖延表示歉意;我还在研究这个问题。  您是否正在调用 MCAN_enableIntr 并同时启用 MCAN_INTR_SRC_RX_FIFO0_NEW_MSG 或任何其他 FIFO 中断?

    至于调试、如果器件上有 XDS、可尝试连接到 CCS Debug、并查看寄存器视图或存储器中的内容来查看这些寄存器的状态。  但是、尝试评估板将有助于确定定制设计是否存在任何其他问题或是否存在其他问题。

    此致、

    Santosh

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

    Santosh、  

    感谢您的答复。 假设我在调用 MCAN_enableIntr、 我在 MCAN_enableIntr 之前和之后有一个 CLI_WRITE ()、并且这两个都在被调用。 MCAN_enableIntr 未返回任何内容、因此很难知道它是否成功。 至于现在启用正确的寄存器、我们 设置了 MCAN_INTR_MASK_ALL。  

    我们将对评估板进行更多研究、因此我可能会针对该问题返回一些更多详细信息。  

    DS

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

    感谢您发送编修。

    一旦在 EVM 上运行测试、请随时更新此线程。

    此致、

    Santosh

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

    尊敬的 Santosh:

    我们仍在 EVM 上运行测试、但想读取中断使能的状态。 通过查看 TRM、看起来我们对 MCANSS_IES 寄存器感兴趣。 您是否对阅读此注册有任何建议? 无法在其外观的 API 中轻松读取。 理想情况下,我会有类似于 MCAN_getIntrStatus ()函数的东西。  

    此外、在阅读了寄存器之后、您建议如何解释它? TRM 中的详细信息包含整个寄存器作为保留、因此我不想在几乎不了解寄存器中实际包含的内容的情况下得出绝对结论。  

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

    您好!  

    除了上一篇文章、我还对 MCAN_ILS 寄存器感兴趣。 有一个 API 调用使用 MCAN_getIntrLineSelectStatus ()来读取它。 此函数能否告诉我中断是否已启用、或者仅当中断线路已被分配给该特定中断时?  

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

    Daniel、您好!

    您可以 通过提供寄存器的地址来使用 HW_RD_REG32 (addr)函数读取寄存器、而该寄存器的位0是识别中断已发生所需的全部。  请参阅 TRM 中的12.4.5.1外部时间戳计数器、了解更多信息。

    此致、

    Santosh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此函数能否告诉我是启用了中断、还是仅当中断线路被分配给该特定中断?  [报价]

    它只是告诉您为该中断分配了什么中断线。

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

    Santosh、  

    我们取得了一些重大发现。 查看 IE 寄存器、发现在错误状态下、中断仍然使能、所以我们要得到 RX FIFO 的新 msg 中断、但却没有被触发。  

    我们在评估板上复制了错误、并缩小了我们发现问题时的确切情形。  

    我们已在我们的器件中实现了 SBL、如果在 SBL 映像和正常操作固件之间的转换期间 CAN 总线上收到任何消息、则器件会进入不触发 CAN 中断的错误状态。  

    我们已将范围进一步缩小至这些装配线、  

    __asm(" MSR MSP, %0" : :"r" ((uint32_t)*(uint32_t*)appBootVec));
            __asm("BX %0"::"r" ((uint32_t)*(uint32_t*)(appBootVec + 4)));

     这些代码行被调用为 SBL 中的最后一行代码。 如果在 SBL 和正常操作固件中都初始化了 MCAN 之前或操作映像启动之后收到了消息、则通信正常。  

    正如提醒您该问题一样、在物理层面上、我们的 CAN 通信正常工作、我们能够发送和接收消息、但通常表明发生了 TX 和 RX 的中断不会触发。 我们最初认为这是随机发生的、但随着最新发现、我们再次通过在 SBL 和典型工作固件之间切换期间传输一条消息来使问题具有确定性。  

    对于过渡期间可能发生的会导致问题的情况、您是否有任何见解? 为什么在过渡期间接收到 CAN 消息会导致问题?  

    谢谢!  

    DS