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.

[参考译文] TMS320F28035:多个中断、CAN#39;t 正确清除 TZCLR

Guru**** 2581345 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/650825/tms320f28035-multiple-interrupts-can-t-properly-clear-tzclr

器件型号:TMS320F28035

我正在 PCMC 中实施相移全桥转换器。

比较器2设置为 TRIP DCAEVT1、从而设置中断。 在我的 ISR 代码中、我执行以下操作:

EPwm2Regs.TZCLR.bit.OST = 1;
EPwm2Regs.TZCLR.bit.DCAEVT1 = 1;
EPwm2Regs.TZCLR.bit.INT = 1;

这不会清除 OST 或 DCAEVT1、但会清除 INT。 我认为这会导致第二个中断发生。

是否有任何关于为何不清除 OST 和 DCAEVT1的建议?

提前感谢您的任何帮助。

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

    尊敬的 Andrew:

    TZCLR 寄存器受 EALLOW 保护。 在清除 OST 和 DCAEVT1事件之前、请确保在代码中使用 EALLOW。 此外、确保导致 OST 和 DCAEVT1激活的事件也不再激活。

    但愿这对您有所帮助。

    Hrishi

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

    感谢您的快速响应。

    EALLOW 被正确置位。

    如果比较器变为高电平会触发事件、并且当我清除 TZFLG 位时比较器仍然为高电平、这是否说明我无法清除这些位?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果比较器变为高电平会触发事件、并且当我清除 TZFLG 位时比较器仍然为高电平、这是否说明我无法清除这些位?

    是的、正确。

    Hrishi

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

    Comp2Regs.COMPCTL.bit.COMPDACEN = 0;
    EPwm2Regs.TZCLR.ALL |= 0x000C;
    EPwm2Regs.TZCLR.bit.INT = 1;

    这允许成功清除这些位、因为它会强制比较器输出低电平(请记住、否则为高电平)。

    是否有其他方法来实现这一点、另一个可能被禁用的寄存器、因为这看起来有点蛮力、确实会引入一些其他不良行为。