Part Number: TMS320F28035
(*ePWM[1]).DCTRIPSEL.bit.DCAHCOMPSEL = DC_COMP2OUT; // DCAH = Comparator 2 output
(*ePWM[1]).TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI; // DCAEVT1 = DCAH HIGH(will become active as Comparator output goes high)当DCAH事件为高时则DCAEVT1事件发生
(*ePWM[1]).DCACTL.bit.EVT1SRCSEL = DC_EVT1; // DCAEVT1 =No filtered
(*ePWM[1]).DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC; // Take async path
(*ePWM[1]).TZEINT.bit.DCAEVT1= 1;
PieCtrlRegs.PIEIER2.bit.INTx1 = 1;
IER |= M_INT2;
//TZISR
__interrupt void TZ2_ISR(void)
{
if((*ePWM[1]).TBSTS.bit.CTRDIR==1)
{
(*ePWM[1]).AQSFRC.bit.OTSFA==1;
(*ePWM[3]).AQSFRC.bit.OTSFA==1;
}
else
{
(*ePWM[1]).AQSFRC.bit.OTSFA==1;
}
EPwm1Regs.TZCLR.bit.INT = 1;
EPwm1Regs.TZCLR.bit.DCAEVT1 = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; // Acknowledge interrupt to PIE
// asm("NOP");
return;
}
代码中设置了epwm1模块的数字比较器以COPM2的输出作为DCAEVT1事件,并设置了中断触发,但在实际中发现中断只执行了一次,并且TZFLG[INT]以及TZFLG[DCAEVT1]标志位一直是1,在
EPwm1Regs.TZCLR.bit.INT = 1; //Clear TZ flag reinitialize for next SOC
EPwm1Regs.TZCLR.bit.DCAEVT1 = 1;
这两句设置了断点,发现标志位仍然是1,这是什么原因导致的。
