我调试中遇到的问题是,当我 屏蔽掉主程序中的 PieCtrlRegs.PIEIER3.bit.INTx1 = 1;和 PieVectTable.EPWM1_INT = &EPWM1_INT_ISR;时,28335也能输出方波。我明明是设置了中断模式的,怎么会不进中断也有数据输出呢?
另外正常进中断时,用示波器测量28335的输出波形,每产生7.5ms的方波,就有2.5ms的低电平。如果不进中断,则一直有方波输出,没有长时间的低电平。请问,为什么会出现这种情况?
请高手予以指教,谢谢!
我的程序如下:
void main(void)
{
InitSysCtrl();
EALLOW;
InitEPwm1Gpio();
DINT;
InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT = &EPWM1_INT_ISR;
EDIS;
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
HRPWM1_Config(3750);
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
IER = M_INT3 ;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
EINT;
ERTM;
for(;;);
}
void HRPWM1_Config(period)
{
EPwm1Regs.TBPRD = period;
EPwm1Regs.TBPHS.half.TBPHS = 0x0000;
EPwm1Regs.TBCTR = 0x0000;
EPwm1Regs.CMPA.half.CMPA = 1500;
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO_PRD;
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //1,Enable event time-base counter equal to zero.(TBCTR = 0x0000)
EPwm1Regs.ETSEL.bit.INTEN = 1; //Enable EPWMx_INT generation
EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; //1,Generate an interrupt on the first event INTCNT = 01 (first event)
EPwm1Regs.ETCLR.bit.INT=1; //清楚中断标志位
EPwm1Regs.DBCTL.all = 0xb;
EPwm1Regs.DBRED=60; // Dead-band rising edge delay
EPwm1Regs.DBFED=60; // Dead-band falling edge delay
}
// INT 3.1
interrupt void EPWM1_INT_ISR(void) // EPWM-1
{
if(k >= PRD)
{
k = 0;
}
EPwm1Regs.CMPA.half.CMPA = (Uint32)TonC[k];
k++;
EPwm1Regs.ETCLR.bit.INT = 1; //Clears the ETFLG[INT] flag bit and enable further interrupts pulses to be generated
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
