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.

TMS320F28335: 程序采用EPWM触发中断,对AD采样的信号进行处理,但进入不了中断是出现了什么问题?

Part Number: TMS320F28335

interrupt void epwm1_isr(void);
void EPwm1Set();
void EPwm2Set();
void EPwm3Set();
void AdcSet();
void AdcResults();
void abtodq(float vain,float vbin,float wtin);
void dqtoab(float vdin,float vqin,float wtin);

void main()
{
InitSysCtrl(); //系统初始化,PLL, WatchDog, enable Peripheral Clocks

EALLOW;
SysCtrlRegs.HISPCP.all = 0x3; //HSPCLK = SYSCLKOUT/2*3 = 150/(2*3) = 25.0 MHz
EDIS;

DINT;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000; 

InitPieVectTable(); 

EALLOW;
PieVectTable.EPWM1_INT = &epwm1_isr; 
EDIS;

for(s=0;s<200;++s)
{
view_A[s]=0;
view_B[s]=0;
view_C[s]=0;
};

for(t=0;t<lengh;++t)
{
filter_va[t]=0;
filter_vb[t]=0;
filter_vc[t]=0;
};

InitAdc();

EPwm1Set(); 
EPwm2Set(); 
EPwm3Set(); 
AdcSet(); 
InitPID();

PieCtrlRegs.PIEIER3.bit.INTx1 = 1; 
IER |= M_INT3; 
EINT;
ERTM; 

GpioDataRegs.GPBDAT.bit.GPIO60 = 0; //初始化LED


while(1)
{
AdcResults();

}

}

void EPwm1Set() //A相
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;

EPwm1Regs.TBPRD = 7500; 
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; 
EPwm1Regs.TBCTR = 0x0000; 

EPwm1Regs.TBCTL.bit.CTRMODE = 0x2; 
EPwm1Regs.TBCTL.bit.PHSEN = 0; 
EPwm1Regs.TBCTL.bit.PRDLD = 0; 
EPwm1Regs.TBCTL.bit.SYNCOSEL = 0x3; 
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x0;
EPwm1Regs.TBCTL.bit.CLKDIV = 0x0; 

EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0; 
EPwm1Regs.CMPCTL.bit.LOADAMODE = 0; 

EPwm1Regs.CMPA.half.CMPA = 0; 
EPwm1Regs.CMPB =0;

EPwm1Regs.AQCTLA.bit.CAU = 0x2; 
EPwm1Regs.AQCTLA.bit.CAD = 0x1;

EPwm1Regs.DBCTL.bit.IN_MODE = 0x0; 
EPwm1Regs.DBCTL.bit.POLSEL = 0x2; 
EPwm1Regs.DBCTL.bit.OUT_MODE = 0x3; 
EPwm1Regs.DBFED = 0x12C; 
EPwm1Regs.DBRED = 0x12C; 

EPwm1Regs.ETSEL.bit.INTSEL = 0x1; 
EPwm1Regs.ETSEL.bit.INTEN = 1; 
EPwm1Regs.ETPS.bit.INTPRD = 0x1; 

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
}

void EPwm2Set() //B相
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; 
EDIS;

EPwm2Regs.TBPRD = 7500; 
EPwm2Regs.TBPHS.half.TBPHS = 0x0000; 
EPwm2Regs.TBCTR = 0x0000; 

EPwm2Regs.TBCTL.bit.CTRMODE = 0x2; 
EPwm2Regs.TBCTL.bit.PHSEN = 0;

EPwm2Regs.TBCTL.bit.PRDLD = 0;
EPwm2Regs.TBCTL.bit.SYNCOSEL = 0x3; 
EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0x0;
EPwm2Regs.TBCTL.bit.CLKDIV = 0x0; 

EPwm2Regs.CMPCTL.bit.SHDWAMODE = 0; 
EPwm2Regs.CMPCTL.bit.LOADAMODE = 0;

EPwm2Regs.CMPA.half.CMPA = 0; 
EPwm2Regs.CMPB =0;

EPwm2Regs.AQCTLA.bit.CAU = 0x2; 
EPwm2Regs.AQCTLA.bit.CAD = 0x1; 

EPwm2Regs.DBCTL.bit.IN_MODE = 0x0; 
EPwm2Regs.DBCTL.bit.POLSEL = 0x2; 
EPwm2Regs.DBCTL.bit.OUT_MODE = 0x3; 
EPwm2Regs.DBFED = 0x12C; 
EPwm2Regs.DBRED = 0x12C; 

EPwm2Regs.ETSEL.bit.INTSEL = 0x1; 
EPwm2Regs.ETSEL.bit.INTEN = 0;

EPwm2Regs.ETPS.bit.INTPRD = 0x1; 

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; 
EDIS;
}

void EPwm3Set() //C相
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; 
EDIS;

EPwm3Regs.TBPRD = 7500;
EPwm3Regs.TBPHS.half.TBPHS = 0x0000; 
EPwm3Regs.TBCTR = 0x0000; 

EPwm3Regs.TBCTL.bit.CTRMODE = 0x2;
EPwm3Regs.TBCTL.bit.PHSEN = 0; 
EPwm3Regs.TBCTL.bit.PRDLD = 0; 
EPwm3Regs.TBCTL.bit.SYNCOSEL = 0x3; 
EPwm3Regs.TBCTL.bit.HSPCLKDIV = 0x0;
EPwm3Regs.TBCTL.bit.CLKDIV = 0x0; 

EPwm3Regs.CMPCTL.bit.SHDWAMODE = 0; 
EPwm3Regs.CMPCTL.bit.LOADAMODE = 0; 

EPwm3Regs.CMPA.half.CMPA = 0;
EPwm3Regs.CMPB =0;

EPwm3Regs.AQCTLA.bit.CAU = 0x2; 
EPwm3Regs.AQCTLA.bit.CAD = 0x1;

EPwm3Regs.DBCTL.bit.IN_MODE = 0x0; 
EPwm3Regs.DBCTL.bit.POLSEL = 0x2; 
EPwm3Regs.DBCTL.bit.OUT_MODE = 0x3; 
EPwm3Regs.DBFED = 0x12C; 
EPwm3Regs.DBRED = 0x12C; 

EPwm3Regs.ETSEL.bit.INTSEL = 0x1; 
EPwm3Regs.ETSEL.bit.INTEN = 0; 
EPwm3Regs.ETPS.bit.INTPRD = 0x1; 

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; 
EDIS;
}

void AdcSet()
{
AdcRegs.ADCTRL1.bit.ACQ_PS = 0xF; 
AdcRegs.ADCTRL1.bit.SUSMOD = 0x3; 
AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x1; 
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; 
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 2; 
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; 
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; 
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; 

AdcRegs.ADCTRL1.bit.CONT_RUN = 1; 
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; 
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; 
}

void AdcResults()
{
float va_1,vb_1,vc_1;

va_1 = AdcRegs.ADCRESULT0 >>4;
vb_1 = AdcRegs.ADCRESULT1 >>4;
vc_1 = AdcRegs.ADCRESULT2 >>4;

va_1 = (va_1-1890)*1500/4095;
vb_1 = (vb_1-1880)*1500/4095;
vc_1 = (vc_1-2010)*1500/4095;

t++;
if(t>=lengh)
t=0;

va = va+(va_1-filter_va[t])/lengh;
vb = vb+(vb_1-filter_vb[t])/lengh;
vc = vc+(vc_1-filter_vc[t])/lengh;
}

interrupt void epwm1_isr(void)
{

......

s++;
if(s>=200)
s=0;

view_A[s] = va;
view_B[s] = vb;
view_C[s] = vc;

......

EPwm1Regs.CMPA.half.CMPA = cmpa_A;
EPwm2Regs.CMPA.half.CMPA = cmpa_B;
EPwm3Regs.CMPA.half.CMPA = cmpa_C;

EPwm1Regs.ETCLR.bit.INT = 1;
// PieCtrlRegs.PIEACK.bit.ACK3 = 1; 
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}