我已设置 EPwM3 (在向上向下计数模式下)、以便在向上计数时在 CMPA 匹配上触发中断。 除非 我在 观察窗口中手动清零 EPwm3Regs.ETCLRbit.INT、否则中断会执行、但会在随机时间停止、然后它会重新启动、但最终停止、除非我通过观察窗口重新清零。 这似乎只在我连接了仿真器(XDS110)时发生;幸运的是、在没有仿真器的情况下运行时、似乎不会发生。
我正在使用 EPWMXLINK 寄存器将 EPwm3.TBPRD 与 EPwm2、6、8、10 (EPwm3Regs.EPWMXLINK.BIT.TBPRDLINK = 0;)一起链接到 EPwm1.TBPRD。 如果我禁用 EPWMXLINK、问题就会消失、因此问题似乎与 EPWMXLINK 有关。
下面是 EPwM3的初始化和中断代码。
提前感谢您的任何见解。
/***** 配置 EPwm3 /
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;//禁用 PWM 时钟*
CpuSysRegs.PCLKCR2.bit.EPWM3 = 1;
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm3Regs.TBCTL.bit.FREE_SOFT = 0;
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm3Regs.CMPCTL.bit.LOADASYS = SET_LOADAMBMODE;
EPwm3Regs.CMPCTL.bit.LOADBSYNC = SET_LOADAMBMODE;
EPwm3Regs.ETSEL.bit.INTSEL = ET_CTRL_CMPA;
EPwm3Regs.ETSEL.bit.INTEN = ENABLE_EPWM_INTERRUPT;//启用 EPwm1中断*
EPwm3Regs.ETSEL.bit.SOCASELCMP = CMPA_CMPB_SOC;
EPwm3Regs.ETSEL.bit.SOCBSELCMP = CMPA_CMPB_SOC;
EPwm3Regs.ETSEL.bit.INTSELCMP = CMPA_CMPB_INT;
EPwm3Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO;
EPwm3Regs.ETSEL.bit.SOCAEN = DISABLE_EPWM_SOCA;
EPwm3Regs.ETSEL.bit.SOCBSEL = ET_CTR_ZERO;
EPwm3Regs.ETSEL.bit.SOCBEN = DISABLE_EPWM_SOCB;
EPwm3Regs.ETPS.bit.INTPRD = et_1st;
EPwm3Regs.ETPS.bit.INTPSSEL = USE_ETPS;
EPwm3Regs.ETPS.bit.SOCPSSEL = USE_ETPS_SOCPS;
EPwm3Regs.ETPS.bit.SOCAPRD = DISABLE_SOCA;
EPwm3Regs.ETPS.bit.SOCBPRD = DISABLE_SOCB;
EPwm3Regs.TBPRD = EPwm1Regs.TBPRD;
EPwm3Regs.CMPA.bit.CMPA = 90;
EPwm3Regs.TBPHS.bit.TBPHS = 0;
EPwm3Regs.TBCTR = 0;
EPwm3Regs.DBCTL.bit.OUT_MODE = DB_DISABLE;
EPwm3Regs.EPWMXLINK 位 TBPRDLINK = 0;
PieVectTable.EPWM3_INT =&ISR_ePWM;
EPwm3Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
PieCtrlRegs.PIEIER3.bit.INTx3=1;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;//启用 PWM 时钟*
/ /
ISR 代码 如下所示。 代码停止时、变量 ISR_Counter 停止递增、表示出现问题。
中断空 ISR_ePWM (空)
{
ISR_Counter++;
EPwm3Regs.ETCLR.bit.INT = 1;//清除 PCMC EPwm2中断标志*/
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;}
}