我通过使用EPWM1中断实现EPWM1与EPWM4的内移相程序(即初始EPWM1与EPWM4的移相角为半个周期),期间EPWM2与EPWM3的时钟关闭。当EPWM1与EPWM4的移相比为0,即同相时打开EPWM2与EPWM3的时钟,但我打开EPWM2与EPWM3的时钟时,初始TBCTR不为0,这是为什么呢?
EPwm1Regs.ETSEL.bit.INTEN=0; //关PWM1(内移相)中断
EALLOW;
EPwm2Regs.TBCTR=0;
EPwm3Regs.TBCTR=0;
EPwm5Regs.TBCTR=0;
EPwm6Regs.TBCTR=0;
// CpuTimer0Regs.TCR.bit.TSS = 0; //启动PID中断,即启动定时器0
// DELAY_US(1.1); //为了错开启动PWM2,3时因PWM1产生同步信号而产生的影响
while(EPwm1Regs.TBCTR != 0);
SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK=1; //PWM2,3时钟开启
SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK=1;
SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK=1; //PWM2,3时钟开启
SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK=1;
EPwm2Regs.TZCLR.bit.OST=1; //清除PWM2,3错误联防标志位
EPwm3Regs.TZCLR.bit.OST=1;
EPwm5Regs.TZCLR.bit.OST=1; //清除PWM2,3错误联防标志位
EPwm6Regs.TZCLR.bit.OST=1;
EDIS;
以上问题找到原因了,可能是关闭EPWM2和EPWM3时钟后,更改不了TBCTR的值。但我现在想在EPWM1上升沿的时候(也即EPWM的TBCTR=0)打开EPWM2的时钟并赋值TBCTR,我现在用的是while,见代码第9行,但是因为指令周期与TBCTR之间存在时间差,并不能在第一时间就判断成功,而是时快时慢,请问有什么办法能更好地判断EPWM1上升沿(