Part Number: TMS320F28034
One piece of the mass production product work abnormal after 5-30mins during lab test. I found that the ADC interrupt terminate run through emulator and i need help to know why this will happen.
The program has three interrups, they are:
interrupt 1: ADC interrupt, ADC triggerd by Timer0 (50us period),ADC interrupt is triggerd by the completion of the whole sampling.
interrupt 2: Timer1(3ms period) interrupt,the interrupt task only run for about 200ns.
interrupt 3: Ecap1 interrupt,triggerd every 20ms. the interrupt task only run for about 200ns
When the ADC interrupt terminated, I found the value of the register related to the ADC interrupt as following
AdcRegs.INTSEL1N2.bit.INT1E,PieCtrlRegs.PIEIER1.bit.INTx1 , IER.INT1 , INTM, ADCINTFLG.ADCINT1, ADCINTOVF.ADCINT1are all set, but PieCtrlRegs.PIEIFR1.bit.INTx1 are unset.
After set PieCtrlRegs.PIEIFR1.bit.INTx1 manually through the emulator, the ADC interupt runs normally.
The ADC interrupt and ADC setup code is as follwoing.
{
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
// Acknowledge this interrupt to receive more interrupts from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
{
EALLOW;
AdcRegs.ADCCTL1.bit.TEMPCONV = 1;
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINT1 trips after AdcResults latch
AdcRegs.INTSEL1N2.bit.INT1E = 1; //Enabled ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT = 0; //Disable ADCINT1 Continuous mode
AdcRegs.ADCSOC0CTL.bit.CHSEL = 0; //set SOC0 channel select to ADCINA0,Vgrid1
AdcRegs.ADCSOC1CTL.bit.CHSEL = 0; //set SOC1 channel select to ADCINA0,Vgrid1
AdcRegs.ADCSOC2CTL.bit.CHSEL = 1; //set SOC2 channel select to ADCINA1,Vgrid2
AdcRegs.ADCSOC3CTL.bit.CHSEL = 3; //set SOC3 channel select to ADCINA3,VpvA
AdcRegs.ADCSOC4CTL.bit.CHSEL = 5; //set SOC4 channel select to ADCINA5,Vtemp
AdcRegs.ADCSOC5CTL.bit.CHSEL = 7; //set SOC5 channel select to ADCINA7,VpvB
AdcRegs.ADCSOC6CTL.bit.CHSEL = 8; //set SOC6 channel select to ADCINB0,IpvA
AdcRegs.ADCSOC7CTL.bit.CHSEL = 9; //set SOC7 channel select to ADCINB1,IpvB
AdcRegs.ADCSOC8CTL.bit.CHSEL = 10; //set SOC8 channel select to ADCINB2,Vdrv
AdcRegs.ADCSOC9CTL.bit.CHSEL = 11; //set SOC9 channel select to ADCINB3,VA33
AdcRegs.ADCSOC10CTL.bit.CHSEL = 12; //set SOC10 channel select to ADCINB4,VPE
AdcRegs.ADCSOC11CTL.bit.CHSEL = 13; //set SOC11 channel select to ADCINB5,VclampA
AdcRegs.ADCSOC12CTL.bit.CHSEL = 15; //set SOC12 channel select to ADCINB7,VclampB
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC11CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 0x1;
AdcRegs.ADCSOC0CTL.bit.ACQPS = 9;
AdcRegs.ADCSOC1CTL.bit.ACQPS = 9;
AdcRegs.ADCSOC2CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC3CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC4CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC5CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC6CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC7CTL.bit.ACQPS = 8; //sample time for temperature is 600ns
AdcRegs.ADCSOC8CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC9CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC10CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC11CTL.bit.ACQPS = 8;
AdcRegs.ADCSOC12CTL.bit.ACQPS = 8;
EDIS;
}

