Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE
Tool/software: Code Composer Studio
I need SOC3-SOC12 of ADC module to start conversion every 1ms.My ADC module configuration is listed below:
EALLOW;
AdcRegs.SOCPRICTL.bit.SOCPRIORITY = 0x03;///< SOC0-SOC2 are high priority;
AdcRegs.SOCPRICTL.bit.ONESHOT = 1; ///< Enable one shot mode.
AdcRegs.ADCSOC0CTL.bit.CHSEL = 0x03;
AdcRegs.ADCSOC1CTL.bit.CHSEL = 0x05;
AdcRegs.ADCSOC2CTL.bit.CHSEL = 0x0C;
AdcRegs.ADCSOC3CTL.bit.CHSEL = 0x00; ///< ADCINA0,Grid voltage L1n;
AdcRegs.ADCSOC4CTL.bit.CHSEL = 0x01; ///< ADCINA1,Grid voltage L2n;
AdcRegs.ADCSOC5CTL.bit.CHSEL = 0x02; ///< ADCINA2,Grid voltage L3n;
AdcRegs.ADCSOC6CTL.bit.CHSEL = 0x0A; ///< ADCINB2,DC bus voltage;
AdcRegs.ADCSOC7CTL.bit.CHSEL = 0x07; ///<
AdcRegs.ADCSOC8CTL.bit.CHSEL = 0x04; ///< ADCINA4,Charging Module temperature;
AdcRegs.ADCSOC9CTL.bit.CHSEL = 0x06; ///< ADCINA6,IPM temperature;
AdcRegs.ADCSOC10CTL.bit.CHSEL = 0x08;///< ADCINB0,Air temperature;
AdcRegs.ADCSOC11CTL.bit.CHSEL = 0x09;///< ADCINB1,Motor temperature;
AdcRegs.ADCSOC12CTL.bit.CHSEL = 0x0B;///< ADCINB3,IGBT temperature;
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0x06;///< ePWM1 ADCSOCB trigger SOC0
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0x06;///< ePWM1 ADCSOCB trigger SOC1
AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 0x06;///< ePWM1 ADCSOCB trigger SOC2
AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 1; ///< CPU Timer0 trigger SOC3
AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 1; ///< CPU Timer0 trigger SOC4
AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 1; ///< CPU Timer0 trigger SOC5
AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 1; ///< CPU Timer0 trigger SOC6
AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 1; ///< CPU Timer0 trigger SOC7
AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 1; ///< CPU Timer0 trigger SOC8
AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 1; ///< CPU Timer0 trigger SOC9
AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 1; ///< CPU Timer0 trigger SOC10
AdcRegs.ADCSOC11CTL.bit.TRIGSEL = 1; ///< CPU Timer0 trigger SOC11
AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 1; ///< CPU Timer0 trigger SOC12
AdcRegs.INTSEL1N2.bit.INT1CONT = 1; ///< Enable continuous mode.
AdcRegs.INTSEL1N2.bit.INT1SEL = 2; ///< A interruption will be generated after competition of SOC2.
AdcRegs.INTSEL1N2.bit.INT2CONT = 1; ///< Enable continuous mode.
AdcRegs.INTSEL1N2.bit.INT2SEL = 12; ///< A interruption will be generated after competition of SOC11.
AdcRegs.INTSEL1N2.bit.INT1E = 1;
AdcRegs.INTSEL1N2.bit.INT2E = 1;
AdcRegs.ADCINTSOCSEL1.all = 0;
AdcRegs.ADCINTSOCSEL2.all = 0;
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINTs generated at end of conversion
AdcRegs.ADCCTL1.bit.VREFLOCONV = 0;
AdcRegs.ADCCTL1.bit.TEMPCONV = 0;
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; ///< Select internal reference voltage.
AdcRegs.ADCCTL1.bit.ADCENABLE = 1;
EDIS;
There were two ADC interruption,one for SOC2 and another for SOC12.CPU TIMER 0 was configured to gernated a interruption every 1ms,and it worked well.But ISR of ADCINT2 was called only twice by CPU.The problem bothered me all day.At last,I had to change the trigger source to software trigger .
Is there anyone who can tell me why the ADC don't work with CPU TIMER 0 as its trigger source?
Thanks in advance for the help.