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.

[参考译文] TMDSHVPSFBKIT:TMDSHVPSFBKIT 过流保护(工作... 不是?)

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/691860/tmdshvpsfbkit-tmdshvpsfbkit-overcurrent-protection-works-or-not

器件型号:TMDSHVPSFBKIT

你(们)好

我们使用来自 TDMSHUPSFBKIT 的"过流检测"机制(ADC +比较器)。
有时、我们会看到由于"过流检测"、我们的系统无法正常启动。
我们无法在启动时看到/测量硬件上的任何信号/尖峰。
过程 A1 (..) 包含以下代码:

//锁存初级过流处理(ePWM2A、ePWM2B、ePWM4A 和 ePWM4B 清理关断):
if (* ePWM[1]).TZFlG.bit.OST =1)

 过流 Cnt =过流 Cnt + 1;
 (笑声)  等等...


对于某些装置、这将始终被执行(并随后阻止装置正确启动!)。
由于 ePWM[1]是受保护的寄存器、我尝试在前面添加一个 EALLOW:


//锁存初级过流处理(ePWM2A、ePWM2B、ePWM4A 和 ePWM4B 清理关断):
EALLOW;  
if (* ePWM[1]).TZFlG.bit.OST =1)

 过流 Cnt =过流 Cnt + 1;
 (笑声)  等等...
         

现在、启动问题已"解决"、所有单元启动良好。

到目前为止还不错、但我担心的是、我不明白为什么这会有所帮助、
因为 ePWM[1]寄存器仅针对写入操作而不针对读取操作?

我很感激有人评论这为什么现在看起来这么好!? 工作。

此致
Terje Bøhler ć
         

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

    EALLOW 保护阻止对寄存器的访问。 "(* ePWM[1]).TZFlG.bit.OST"是一个读-修改-写指令。 如果 TZFLG 寄存器受 EALLOW 保护、那么您必须在执行上述指令之前执行 EALLOW 指令。

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

    是的、TZFLG 受 EALLOW 保护。
    我想这个菜单必须添加 EALLOW 指令(正如我现在所做的那样)!
    否则、我的"IF 语句"(以及过流检测)将返回不可预测的结果?
    对吧?

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

    使用 EALLOW 的目的是为了保护一些有效寄存器被噪声/意外写入。 在更改受保护寄存器之前、必须使用 EALLOW 来使受保护寄存器可写入、之后必须使用 EDIS。

    以下是有关 EALLOW 指令的信息:

    EALLOW (位6)—仿真访问使能位。
    该位、当置位时、启用到仿真和其它受保护寄存器的访问。 使用设置此位
    EALLOW 指令并使用 EDIS 指令将该位清零。 请参阅的数据表
    特定器件来确定受保护的寄存器。
    当 CPU 处理一个中断时、EALLOW 的当前值被保存在堆栈上(当
    ST1被保存在堆栈上)、然后 EALLOW 被清零。 因此、在中断开始时
    服务例程(ISR)、禁用对受保护寄存器的访问。 如果 ISR 必须访问受保护的
    寄存器中、它必须包含一条 EALLOW 指令。 在 ISR 结束时、可以恢复 EALLOW
    IRET 指令执行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Hrishi。
    我和一位同事对此仍有一些不了解的情况、因此感谢您对以下内容的澄清:
    问题1:"如果(* ePWM[1]).tZFlG.bit.OST =1)"语句是写操作(因此为什么需要在 EALLOW 之前添加/添加)?
    Q2:为什么这个 EALLOW 指令不包含在 TI-kit HVPSFB 的 main.c (第670行)中、以及为什么它在这里看起来不是一个问题(省略它)?
    此致
    Terje Bøhler ć
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Terje、

    很抱歉,我错误地说"*ePWM[1]).TZFlG.bit.OST ==1 "操作是一个读-修改-写操作。 不是。 此外、TZFLG 不是 EALLOW 受保护寄存器。 我认为必须有一些其他指令接近执行该指令的位置 、需要 EALLOW 指令。 您是否正在使用编译器优化? 等级是多少?

    Hrishi