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:如何使用通用 ePWM ISR 并确定触发它的通道?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1461724/tms320f28379d-how-to-use-common-epwm-isr-and-determine-which-channel-triggered-it

器件型号:TMS320F28379D

工具与软件:

如果我对所有 ePWM 通道使用单个 ISR、那么确定触发 ISR 的通道的最佳方法是什么?

谢谢!

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

    您好!

    有多种方法可以触发 ISR。 它可以通过多个 IP 来实现:EPWM、CPUTimer、ADC、eCAP。 如果您计划使用 ePWM 来触发 ISR、我建议使用"主"ePWM。 "主"PWM 是向其他 EPWM 发送同步输出信号的 PWM。  如果您的应用需要可变频率、那么我建议使用另一个静态的 ePWM 通道、其目的只是触发 ISR。  

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

    这并不是我想要的。   

    我将让多个 ePWM 通道独立运行并触发一个 ISR。  我知道如何做这部分。  我想使用相同的 ISR 来处理每个事件、但我想仍然能够确定哪个触发了该 ISR。  

    例如、

    INTERRUPT_REGISTER (INT_EPWM1、&EPWM_ISR);

    INTERRUPT_REGISTER (INT_EPWM2、&EPWM_ISR);

    INTERRUPT_REGISTER (INT_EPWM3、&EPWM_ISR);

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

    您好!

    好的、我明白了。  您要对3个不同的 PWM 使用相同的 ISR 的具体原因是什么。 如果您 想知道是哪个 PWM 触发了 ISR、则应该只使用3个不同的 ISR、并使每个 ISR 中的代码相同。 否则、您必须读取 PIE 标志以查看是哪个 PWM 触发了它。

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

    尊敬的 Stevan:

    每个 ISR 都是相同的、并且逻辑会有点复杂、并且可能会发生变化。  主要是、如果我需要进行更改、我不希望手动更改6到9个 ISR、并可能出现拼写错误。

    PIE 标志不起作用(我想)、因为举例来说、如果 EPWM4首先触发 ISR、但到我检查标志时、EPWM1已设置其中断标志、因此如果我读取 IFR 寄存器、我将看到 EPWM2和 EPWM4标志、不知道哪个触发了 ISR。

    我希望我可能还需要查看其他一些硬件标志/寄存器/设置、例如中断矢量 ID (如果可以访问的话)。   

    我想我有一种通过软件实现这一目的的策略、但需要加以尝试。

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

    您好!

    您可以将 ISR 代码移动到所有3个 ISR 共享的函数中、并将一个参数传递给该函数、该参数指示哪个 PWM ISR 调用该函数。

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

    这是我最后做的。  谢谢!