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.

[参考译文] TMS320F28377S:发出 CLA 写入 ePWM DBCTL 寄存器

Guru**** 2455360 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/773956/tms320f28377s-issue-cla-writing-to-epwm-dbctl-register

器件型号:TMS320F28377S

我认为我发现从 CLA 配置 ePWM DBCTL 寄存器时出现了问题。 我尚未测试在从 CPU 写入寄存器时是否出现相同的问题。

 

似乎、如果 ePWM 寄存器 DBCTL2包含一个0x04值并且 CLA 写入0x00、那么寄存器 DBCTL OUT_MODE 字段的值被设定为0x3。

 

下面是一个 CLA 汇编示例:

 

              ;--------

              ;此代码序列将在 DBCTL 寄存器中产生错误值

              ;

              MXOR32             MR0、MR0、MR0                             ;零

              MMOV16            @ EEPWM1Regs.DBCTL、MR0       ;零

              MMOVXI             MR0、#4

              MMOV16            μ@ EPwm1Regs.DBCTL2、MR0    ;在 SHDWDBCTLMODE 启用的情况下进行设置

              MXOR32             MR0、MR0、MR0                             ;零

              MMOV16            @ EEPWM1Regs.DBCTL、MR0       ;零

              MMOV16            μ@ EPwm1Regs.DBCTL2、MR0    ;在 SHDWDBCTLMODE 启用的情况下进行设置

 

              ;***错误:此时 DBCTL 为0x03,此时应为0x00。 DBCTL2为0x00。

              

              ;--------

              ;以下代码段将全部工作

              ;

              MXOR32             MR0、MR0、MR0                             ;零

              MMOV16            @ EEPWM1Regs.DBCTL、MR0       ;零

              MMOVXI             MR0、#0

              MMOV16            @ EEPWM1Regs.DBCTL2、MR0    ;设置为零

              MXOR32             MR0、MR0、MR0                             ;零

              MMOV16            @ EEPWM1Regs.DBCTL、MR0       ;零

              MMOV16            μ@ EPwm1Regs.DBCTL2、MR0    ;在 SHDWDBCTLMODE 启用的情况下进行设置

 

              ;正确:此时 DBCTL 为0x00, DBCTL2为0x00。

 

              ;在 DBCTL 归零之前,先将 DBCTL2设置为零。

 

              MXOR32             MR0、MR0、MR0                             ;零

              MMOV16            @ EEPWM1Regs.DBCTL2、MR0    ;设置为零

              MMOV16            @ EEPWM1Regs.DBCTL、MR0       ;零

 

              ;正确:此时 DBCTL 为0x00, DBCTL2为0x00。

 

我想验证这一点、并解释为什么写入 DBCTL2寄存器会更改 DBCTL 中的值?

 

我还想列出其他寄存器写入组合、这些组合会显示与此类序列初始化相关的问题?

 

谢谢

Jeramie

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

    Jeramie、

    我将为您看一下。

    NIMA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    、您可能会从脑海中知道答案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能评论一下吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仍在调查此问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您所描述的情形有点令人困惑。 在下面的代码中(您看到问题的地方)-

    [引述]

     ;--------

                  ;此代码序列将在 DBCTL 寄存器中产生错误值

                  ;

                  MXOR32             MR0、MR0、MR0                             ;零

                  MMOV16            @ EEPWM1Regs.DBCTL、MR0       ;零

                  MMOVXI             MR0、#4

                  MMOV16            μ@ EPwm1Regs.DBCTL2、MR0    ;在 SHDWDBCTLMODE 启用的情况下进行设置

                  MXOR32             MR0、MR0、MR0                             ;零

                  MMOV16            @ EEPWM1Regs.DBCTL、MR0       ;零

                  MMOV16            μ@ EPwm1Regs.DBCTL2、MR0    ;在 SHDWDBCTLMODE 启用的情况下进行设置

     

                  ;***错误:此时 DBCTL 为0x03,此时应为0x00。 DBCTL2为0x00。

    [/报价]

    您将向 DBCTL2寄存器写入0x4、该寄存器将 SHDWDBCTLMODE 位置为"1"。 这意味着任何对 DBCTL 寄存器的进一步 RD/WR 访问都将进入影子寄存器、而不是实际的 DBCTL 寄存器。 之后、您将0x0写入 DBCTL 寄存器、该寄存器将更新影子寄存器、而不是 DBCTL 寄存器。 接下来、将 DBCTL2寄存器清零为0x0意味着将对 DBCTL 寄存器进行进一步的 RD/WR 访问、而不是影子寄存器。 之后、您实际上正在读取 DBCTL 寄存器、其中0x0被写入影子寄存器。 这就是您看到不同值的原因。 如果您先清除 DBCTL2寄存  器、然后将0x0写入 DBCTL 寄存器、则不会出现问题、因为在这种情况下、您将写入您正在读取的同一寄存器。

    希望这能澄清问题。

    此致、

    Vivek Singh