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.

[参考译文] TMS320F280049:清除 F280049上由 DCAEVT1和 DCBEVT1引起的 TZFLG 的最佳实践

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/765242/tms320f280049-the-best-practice-to-clear-tzflg-caused-by-dcaevt1-and-dcbevt1-on-f280049

器件型号:TMS320F280049

您好专家、

在 F280049上、我的客户使用 CMPSS6作为 EPWM7的 DCAEVT1和 DCBEVT1的源。 更多 DCAEVT1和 DCBEVT1将在两个通道都处于高电平状态时触发 EPWM7。 它们在40KHz 控制环路中清除跳闸区域标志(TZFLG)。 在控制环路中、它们检查 EPWM7模块 TZCLR 寄存器的 DCAEVT1和 DCBEVT1位、并清除如下标志:

const bool level2_ov_tz =(EPwm7Regs.TZCLR.ALL 和 DCAEVT1_MASK)? true:false;
………
………μ A
………μ A
if (level2_ov_tz)
{
EALLOW;
EPwm1Regs.TZCLR.ALL = EPwm1Regs.TZFLG.ALL;
EPwm2Regs.TZCLR.ALL = EPwm2Regs.TZFLG.ALL;
EPwm3Regs.TZCLR.ALL = EPwm3Regs.TZFLG.ALL;
EPwm4Regs.TZCLR.ALL = EPwm4Regs.TZFLG.ALL;
EPwm5Regs.TZCLR.ALL = EPwm5Regs.TZFLG.ALL;
EPwm6Regs.TZCLR.ALL = EPwm6Regs.TZFLG.ALL;
EPwm7Regs.TZCLR.ALL = EPwm7Regs.TZFLG.ALL;
EDIS;
}
…………
…………μ A
…………μ A

但是、他们发现有时 EPWM 因寄存器读数 TZFLG = 4而跳闸、这是意外的。 当它们更改为清零 TZCLR IN 位后、问题永远不会再次出现。 请帮我找出可能的原因。 它可能与信号延迟有关吗?

谢谢

谢尔登

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

    您说什么 TZFLG = 4是意外的? 这只是显示已发生单次跳闸。
    "更改以清除 TZCLR 位"是什么意思?

    谢谢、

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

    为了澄清这一点、应该使用上面显示的代码在控制环路中清除 TZFLG = 4、但是出于某种原因、它不会按预期被清除。 这就是问题所在。
    第二个问题。 首先、他们使用"EPwm1Regs.TZCLR.ALL = EPwm1Regs.TZFlG.all;"等方法来清除 TZFLG、他们发现清除操作有时不成功。 因此、它们通过"EPwm1Regs.TZCLR.bit.DCBEVT1 = EPwm1Regs.TZFlG.bit.DCBEVT1等其他方法来清除 TZFLG、然后再也不会出现问题。 因此、我需要知道背后的原因。

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

    我之前提供的代码应该具有
    "const bool level2_ov_tz =(EPwm7Regs.TZFlG.all 和 DCAEVT1_MASK)? 对:错;"
    而不是
    "const bool level2_ov_tz =(EPwm7Regs.TZCLR.ALL 和 DCAEVT1_MASK)? 对:错;"

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好、Nima。
    简单地说、您能帮助我了解"EPwm1Regs.TZFlG.bit.OST"和"EPwm1Regs.TZOSTFlG.bit.OST1"之间的关系吗? 发生一次性事件时、这两个寄存器的设置之间是否存在间隙?
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Nima、
    这是一个相关主题、但答案尚未确认。
    e2e.ti.com/.../693559
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sheldon、

    就标志而言、我们不会记录在 TZFLG 和 TZOSTFLG 上优先设置的任何差异。 但是、我总是先清除 TZOSTFLG、然后清除 TZFLG。 这是因为您检查 TZFLG 以查看是否存在中断、然后使用 TZOSTFLG 查看是哪个 OneShot 导致中断、如果是 OST 导致中断、请清除导致中断的特定 OST。 然后清除 TZFLG for OST 以完成这些步骤。

     至于.all 和.bit 的区别、我已经问过团队、目前我没有确切的答案、因此我们需要做更多的挖掘工作。 这是我们需要做的事情。

    在清除前记录所有标志。

    清除后记录所有标志。

    看看它们是否被清除。

    再次记录所有标志。

    让我们看看我们有什么。

    此外、让我们看看使用该位与使用.all 的反汇编、看看两者之间的区别。