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.

[参考译文] AM2634-Q1:ISR 破坏 IPC 通信

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1355695/am2634-q1-ipc-communication-corrupted-by-isr

器件型号:AM2634-Q1

亲爱的香榭丽舍大街,

我的客户面临执行 ISR 时 IPC 通信损坏。

例如、当每5us 发生一次 PWM 中断时、我的客户尝试通过 IPC 与其他内核通信、并且该 ISR 中将存在控制操作、但在此 ISR 之后、他们的 IPC 通信会出现问题、如数据覆盖、延迟等。

客户可以如何解决此问题? 它们是否可以通过控制 IPC 和 PWM 中断 ISR 的优先级来解决该问题? 或者他们应该使用 HWIP_disable() API 吗?

如果他们可以通过优先级控制来解决这个问题、你能否提供一些指导、说明他们如何控制优先级?

如果它们应该使用 HWIP_disable () API,有没有什么方法 使 PWM 中断 ISR 挂起?  

谢谢、此致、

SI

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

    我发现主函数中有 while 循环、当有更新的数据时、主函数的此 while 循环中会执行 IPC 函数。

    例如、当从 ISR 接收到新数据时、将在主函数中执行其 IPC 函数。

    谢谢、此致、

    SI

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

    您好、SI:

    您能否确认它是 MCAL IPC 还是 MCU_PLUS_SDK IPC?

    谢谢。
    贡詹

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

    您好、Gunjan、

    即 MCU_PLUS_SDK_IPC。

    它们使用的是 MCU_PLUS_SDK v8.6.0。

    谢谢、此致、

    SI

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

    您好、SI:

    我正在研究重现此问题。 请期待周三之前回复。

    此致、
    贡詹

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

    您好、SI:

    您能告诉客户用于 IPC 的内核吗? 哪个内核会生成 PWM 中断? 此外、PWM 和 IPC ISR 的优先级是多少?

    此致、
    贡詹

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

    您好、Gunjan、

    在 Core0/1中、有使用 IPC 的 AutoSAR 平台、而基于 MCU+SDK 的 PWM 正在使用具有 IPC 的 Core2/3上。

    在2/3中、内核中不存在 IPC ISR、当从 PWM ISR 接收到数据时、IPC 将在主 while 循环中执行、如下所示。

    主要()

    {

      请执行{

         如果(data!=0) IPC_to_core0_and_1 (data);

      } while ();

    }  

    谢谢、此致、

    SI

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

    您好、SI:

    很抱歉延迟回复。 我已尝试在 core1中为 MCU_PLUS_SDK 的 IPC_NOTIFY 示例添加 PWM 中断。
    每当 core1中出现 PWM 中断时、它将 向 core0执行"IpcNotify_sendMsg (0、4、itr_interrupts、1);"。
    对我而言、它工作正常、并且正在成功通过 IPC_NOTIFY_ECHO。

    此致、
    贡詹

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

    您好、Gunjan、

    感谢您的答复和测试。

    您在测试中是否使用了 Hwip_disable ()和 Hwip_restore () API ?

    如果没有这些 API、他们就会发现一些问题、比如数据覆盖、延迟等。

    如果没有这些 API、您仍然可以成功进行测试、那么您能否共享测试文件?

    谢谢、此致、

    SI

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

    您好、SI:

    我 在测试中没有使用 Hwip_disable ()和 Hwip_restore()。 我将附加 Core1中使用的已更新 ipc_notify_echo.c 和 example.syscfg。 剩余内核的代码与 MCU_PLUS_SDK 的 IPC_NOTIFY 示例中给出的代码相同。

    e2e.ti.com/.../ipc_5F00_notify_5F00_echo.ce2e.ti.com/.../6153.example.syscfg

    谢谢。
    贡詹

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

    您好、Gunjan、

    感谢您分享代码。

    我获得了以下有关其结构的更多详细信息。

    *每5us ISR 对应一次 PWM ISR

    * IPC 将于每

     -在主 while 循环中每1ms 读取一次(Core 0/1 -> Core 2/3)。

     - 在主 while 循环中每5ms 写入一次(Core 2/3 -> Core 0/1 )。

    他们的目标是获取所有 PWM ISR 而不丢失、而且他们担心 在  HwiP_disable ()之后 PWM 中断会丢失。

    我认为 HwIP_disable () API 会忽略所有中断,所有这些中断都会丢失,对吧?

    他们认为、执行 PWM ISR 需要3~3.5us (60~70% CPU 负载)。

    您能否为其用例建议 IPC 的稳健结构? 我认为他们应该增加 IPC 读取/写入的额外任务。  你有什么看法?

    谢谢、此致、

    SI

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

    您好、SI:

    所有内核中使用 PWM 中断、还是某些特定内核中使用 PWM 中断?

    当调用 HwiP_disable ()时,它将停止接收中断(假设我们为 PWM 处理:3us 而禁用它),并且由于 IPC 以1us 的间隔发生,因此将错过 IPC 中断之间的间隔。
    它们将生成 IPC 和 PWM 中断、那么其中一个中断将具有更高优先级。 将首先处理较高优先级的中断。

    此致、
    贡詹