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:在 CPU2中未触发 CPU1中配置的中断。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1492205/tms320f28379d-interrupt-configured-in-cpu1-not-being-triggered-in-cpu2

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

工具/软件:

您好、

在 CPU1下、我配置了 ePWM 外设(ePWM1)并 在"Event Trigger"选项下启用了相应的中断。

在 CPU2上、我已 启用 相应的 PIE 中断(PIE3)、并尝试为相关的 ISR 提供服务。 但是、并未在 CPU2上触发中断。

通过 CCS 进行调试时、如果手动设置了相应的中断标志寄存器(PIEIFR3.INTx1)、则代码成功进入 ePWM ISR。

根据 F2837xD 的技术参考手册、应该可以在一个 CPU 上配置中断并在另一个 CPU 上对其进行服务。

但是、我当前的实现中无法使用此功能。 您能告诉我是否需要其他检查或配置吗?

谢谢、

Raghavendra

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

    尊敬的 Raghavendra:

    您是否已将 ePWM1外设的权限移交给 CPU2?  我认为、推荐的方法是在权限转移后在 CPU2上配置 ePWM1和 PIE。

    有一些很好的 IPC 示例有助于在 C2000ware 路径中查看:[C2000ware install]/driverlib/f2837xd/examples/dual/. 我建议查看 SCI 示例 以了解如何向外设传递权限、并查看 DMA 示例以了解如何配置 CPU2上的中断。

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您提供了回复和示例链接。

    详细说明我的工作流程:

    我将在目标的两个内核上部署 Simulink 模型。 ePWM1配置为在 CPU1上运行、而 CPU2未配置 ePWM1、但为其 ISR 提供服务除外。

    在这种情况下、是否仍然需要将 ePWM1外设权限转移到 CPU2?

    在共享 DMA 示例中、似乎有附加代码通过"sysCtl_enablePeripheral()函数启用相应的外设时钟。 我尝试使用以下行包含类似的代码来在 CPU2上启用 ePWM1时钟:"sysCtl_enablePeripheral (SysCtl_Peripheral (SysCtl_Periph_CLK_EPWM1);"

    但是、此更改没有任何影响、并且 ISR 在 CPU2上仍然不可使用。

    您能否告知是否需要配置任何其他寄存器或设置?

    感谢您的帮助。

    此致、

    Raghavendra

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

    尊敬的 Raghavendra

    Delaney 目前已离职、但在她回来后、她会尽快回复您。

    此致、

    Aishwarya

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

    尊敬的 Raghavendra:

    如果您从 CPU2为 ISR 提供服务、则 CPU2将需要 ePWM1的权限。 在大多数 ISR 中、都会访问外设寄存器、如果当前 CPU 没有外设权限、也无法访问这些寄存器。 通常还会从 CPU2配置 ePWM。

    我有点困惑、为什么您尝试在 CPU1上完成所有初始化/所有权、而只是从 CPU2处为 ISR 提供服务? 我想、如果您真的需要这样做、您可以 在 CPU2上设置一个 IPC 中断、使软件从 CPU1上的 ISR 内部触发。

    另外、在我之前提到的文件夹中、我建议查看此处的 DMA 示例。 它有一个很好的示例、说明在每个 CPU 上使用不同的外设并在每个 CPU 上配置中断。 您应该能够以类似的方式实现。

    此致、

    Delaney

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

    尊敬的 Delaney:

    请参阅下面随附的 F2837xD 技术参考手册(TRM)的快照:

    参考突出显示的部分、如果在另一个 CPU 上配置了 PIE、则外设可以由任一 CPU 拥有、并且可以在另一个 CPU 上触发相应的中断。

    将外设的所有权从一个 CPU 转移到另一个 CPU 以便为 ISR 提供服务将与 TRM 中指定的信息相矛盾。

    请您确认一下。

    我同意、如果在同一内核上同时配置和服务中断、则它将按预期工作。

    谢谢、

    Raghav

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

    尊敬的 Raghav:

    我的错、是的、您是对的。 您确实可以在两个 CPU 上触发 ISR、即使外设一次只能由一个拥有也是如此。 尽管您可以在非自有内核上触发 ISR、但该内核在无法访问外设的情况下仍然无法访问 ISR 中的外设寄存器(或任何位置)。 因此、在大多数情况下、在与内核无法访问的 IP 同步的内核上触发 ISR 并不是很有用。  

    您是如何为您的工程尝试调试此问题的? 您是否在非自有内核上的 ISR 中添加了断点? 您能否验证是否在"Register"窗口中从该内核的上下文启用了组的 IER、用于中断和全局中断的 PIEIER?

    此致、

    Delaney

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

    尊敬的 Delaney:

    是的、我已尝试在我的工程中进行调试。 在非自有内核上未处理中断、代码未进入 ISR。

    我已经验证了在非自有内核(即)上启用了 PIE 和全局中断

    • PIE 寄存器:PIECTRL -> ENPIE 和 PIEIER3 -> INTx1设置为1。
    • 内核寄存器:IER->INT1设置为1。

    如您所述、我无法从非自有内核查看或修改 ePWM 寄存器中的任何值。

    谢谢、

    Raghav

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

    尊敬的 Raghav:

    很抱歉耽误我的答复。

    您可以尝试在 ISR 中递增计数器、而不是 ISR 中的断点(并在启用持续刷新的情况下在"Expressions"窗口中检查此计数器)?

    当您期望发生此中断时、您还能否验证该组的 ACK 是否已关闭? 由于只有拥有的内核可以关闭 ACK、因此可能存在一些同步问题。 使用这种实现方式时、CPU 之间可能会存在一些时序问题。 我建议使用 IPC 来同步各个操作。

    此外、在非自有内核中、您希望 ISR 尽可能短、以便再次保持计时不干扰。 我建议只使用 CPU2中的 ISR 来设置全局标志、然后在主循环中检查是否存在该标志、并在其中执行任何所需的代码。

    此致、

    Delaney