This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28035: DCAEVT1的中断无法清除

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,这是什么原因导致的。