我认为我发现从 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