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.

[参考译文] TMS320F28069:有关 PIE 标志处理的问题

Guru**** 2560390 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/996037/tms320f28069-questions-about-pie-flag-handling

器件型号:TMS320F28069
主题中讨论的其他器件:C2000WARE

大家好、TI 工程师。 我对 PIE 中断标志有疑问。 我已经了解到 C2000的中断源实际上被分成12组、每个组有大约8个中断。 当程序运行到中断的服务例程中时、它必须清除组中断标志、以指示此中断已被处理、如下代码所示

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

我的问题是、由于可能存在两个属于同一中断组的不同中断同时出现的情况、在清除中断服务程序中的组标志时、它是否会引起任何问题。 例如 、EPWM1_INT 和 EPWM2_INT 都 属于同一 PIE 组、即组3。 当两个中断都出现并且程序运行到 EPWM1的中断并清除组标志时、是否会导致 EPWM2的中断不再工作?

谢谢!

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

    您好!

    感谢您的提问!

    要回答这个问题、您无需担心组中的其他中断被忽略、它们将只是等待另一个中断完成!

    原因如下:

    ISR 末尾的命令"PieCtrlRegs.PIEACK.all = PIEACK_Group1;"告诉 PIE、我们现在可以接受来自组1的更多中断。

    如果未清除 PIEACK、则该组不会再次处理中断(它将等待清除确认位)。 因此、请务必在每次中断结束时为组清除 PIEACK。

    因此、对于 ePWM 示例、您给出了:

    假设所有 EPWM1和 EPWM2同时出现(均在组3中)。 EPWM1优先处理、因为它具有更高的优先级。 在 EPWM1的 ISR 结束时、会调用 PieCtrlRegs.PIEACX.ALL = PIEACK_Group3。 这告诉组我们现在可以接受更多中断。

    ISR 退出、EPWM2的 PIEIFR 仍然置位(该中断的标志位)。 因此、它通过 EPWM2的 PIEIER (使能位仍然置位)、最后通过整个组的 PIEACK (我们在 EPWM1的 ISR 中清除了该操作)。 然后、它通过 CPU 中断处理程序的 IER 和 ITM、然后到达 CPU。

    总结:一个组中的所有中断都可以一对一地处理、并且使用 PIEACK 不会导致挂起的中断丢失。

    此致、

    Vince

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

    您好、Vince。 感谢您的回复、这确实有助于我了解 PIE 系统的工作原理。

    我有另一个问题。 我已经指出、在某些中断中、需要手动清除 外设的中断标志、而其他中断则不需要。 例如、在 timer0的中断中、我们只需编写以下代码即可清除中断标志。

    PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;

    但是、在 ECAP、SCI 和等中断中、除了 PIE 寄存器外、还需要清除其他外密钥的标志寄存器。 在 SCI 模块中、我们需要使用一些 SCIFFRx 位来清除中断标志、在 ECAP 模块中、我们需要清除 ECCLR。 我的问题是、有没有任何规则可以让我知道何时需要清除外设的标志以及何时不清除。 谢谢你。

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

    您好!

    感谢后续行动、很高兴听到我能提供帮助!

    对于您的另一个问题、遗憾的是、没有一个单步方法来判断外设是否需要清除其中断。 最简单的(虽然不是最完整的)方法是查看 C2000Ware 中的示例、并查看清除位的示例函数。

    确定外设(如 SCI、ECAP 等)是否需要清除其自身中断的最完整方法是查看技术参考手册(在此处链接)的该章节、并深入了解外设工作原理的详细信息 (我肯定理解、这可能会有点耗时、但也是真正理解外设所必需的)。

    一般而言:

    PIE 中的每个外设都需要为其组调用 PIEACK。

    PIE 中的大多数外设也需要清除它们自己的中断(如 SCIFFRx 中的位)。

    我希望能为您提供帮助、感谢您的提问!

    此致、

    Vince