大家好、
对于我的应用、我将使用多个同步 ePWM 通道、初始化过程相当长、以确保输出信号在前几个周期内是完美的、没有任何奇数行为。 我遵循 TI 的建议、在初始化所有寄存器时保持 TBCLKSYNC = 0、然后写入 TBCLKSYNC = 1以激活 ePWM 操作(之后是软件强制同步)。 但是、我注意到初始化例程中的某些内容不符合我的预期。 例如、我要通过初始化 AQ 模块来设置 PWM 输出的状态初始化。 下面是我尝试执行此操作的大致方式:
//禁用 TBCLKSYNC
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;
....
//初始化 AQ 以便两个引脚最初都处于低电平
//ePWMB 在 DB 模块中反相、因此需要设置 B 输出高
电平 EPwm1Regs.AQSFRC.bit.RLDSF=3;//立即重新加载 EPwm1Regs.AQSFRC.bit.AQSFFA=AQSFREG=AQ1Regs.AQSFR1.bit.AQSFR1.AQSFREG=1.AQSFREG1.AQSFREG=1.AQSFREG1.AQSFR1.AQSF1.AQSFR1.AQSFR1.AQSFREG1.AQSF1.AQSF1.bit.AQSFREG=1.AQSFREG1.
//设置 DB 以反转 AQ
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC 的 B 输出;//这是我观察 B 引脚变为高电平的位置。
(笑声) //完成寄存器初始化//启用时基时钟
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
__asm (" nop");
__asm (" nop");
__asm (" nop");__asm (" nop");
_asm (" nop");
__asm (" nop");
//执行软件同步
EPwm1Regs.TBCTL.bit.SWFSYNC = 1;//强制从 TBPHS 加载所有时基
__asm (" nop");
__asm (" nop");
__asm (" nop);__asm (" nop)
;
EDIS;
但是、OTSFA 操作似乎不会执行任何操作。 但是 、当 DBCTL.bit.POLSEL 被写入时、我确实看到 ePWM1B 引脚变为高电平。 在调试器中、似乎如果我在此后的任何时间手动设置 TBCLKSYNC、那么 ePWM1B 会立即变为低电平、就好像 OTSF 操作一直保持挂起状态一样。
那么、当 TBCLKSYNC=0时、哪些操作实际生效、哪些操作将等待 TBCLKSYNC 设置为1?