Hello, i want to sample 13 channels software triggerd. My problem is the conversation is running once and in the secound conversation it is spinning in the while
//Wait for ADCINT1 to trigger, then add ADCRESULT0-7 registers to sum
while (AdcRegs.ADCINTFLG.bit.ADCINT1 == 0){}
maybe anybody have an idea.
Thanks a lot
here is my code:
EALLOW;
AdcRegs.ADCCTL1.bit.ADCREFSEL = 1; // use external REF with 2.5V
AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // Power ADC BG
AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // Power reference
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power ADC
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; // Enable ADC
// AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; // Select interal BG
EDIS;
EALLOW;
AdcRegs.ADCSOC0CTL.bit.CHSEL= 1; // A1 first conversation is sumetimes corrupt see errata
AdcRegs.ADCSOC1CTL.bit.CHSEL= 1; // A1
AdcRegs.ADCSOC2CTL.bit.CHSEL= 2; // A2
AdcRegs.ADCSOC3CTL.bit.CHSEL= 3; // A3
AdcRegs.ADCSOC4CTL.bit.CHSEL= 4; // A4
AdcRegs.ADCSOC5CTL.bit.CHSEL= 6; // A6
AdcRegs.ADCSOC6CTL.bit.CHSEL= 7; // A7
AdcRegs.ADCSOC7CTL.bit.CHSEL= 8; // B0
AdcRegs.ADCSOC8CTL.bit.CHSEL= 9; // B1
AdcRegs.ADCSOC9CTL.bit.CHSEL= 10; // B2
AdcRegs.ADCSOC10CTL.bit.CHSEL= 11; // B3
AdcRegs.ADCSOC11CTL.bit.CHSEL= 12; // B4
AdcRegs.ADCSOC12CTL.bit.CHSEL= 14; // B6
AdcRegs.ADCSOC13CTL.bit.CHSEL= 15; // B7
// AdcRegs.ADCSOC13CTL.bit.CHSEL= ch_no;
// AdcRegs.ADCSOC14CTL.bit.CHSEL= ch_no;
// AdcRegs.ADCSOC15CTL.bit.CHSEL= ch_no;
EDIS;
ACQPS_Value = 0x3f;
EALLOW;
AdcRegs.ADCSOC0CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC1CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC2CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC3CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC4CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC5CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC6CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC7CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC8CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC9CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC10CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC11CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC12CTL.bit.ACQPS = ACQPS_Value;
AdcRegs.ADCSOC13CTL.bit.ACQPS = ACQPS_Value;
// AdcRegs.ADCSOC14CTL.bit.ACQPS = ACQPS_Value;
// AdcRegs.ADCSOC15CTL.bit.ACQPS = ACQPS_Value;
//Enable ping-pong sampling
// Enabled ADCINT1 and ADCINT2
AdcRegs.INTSEL1N2.bit.INT1E = 1;
AdcRegs.INTSEL1N2.bit.INT2E = 1;
// Disable continuous sampling for ADCINT1 and ADCINT2
AdcRegs.INTSEL1N2.bit.INT1CONT = 0;
AdcRegs.INTSEL1N2.bit.INT2CONT = 0;
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINTs trigger at end of conversion
// Setup ADCINT1 and ADCINT2 trigger source
AdcRegs.INTSEL1N2.bit.INT1SEL = 6; //EOC5 triggers ADCINT1
AdcRegs.INTSEL1N2.bit.INT2SEL = 13; //EOC12 triggers ADCINT2
// Setup each SOC's ADCINT trigger source
AdcRegs.ADCINTSOCSEL1.bit.SOC0 = 2; //ADCINT2 starts SOC0-6
AdcRegs.ADCINTSOCSEL1.bit.SOC1 = 2;
AdcRegs.ADCINTSOCSEL1.bit.SOC2 = 2;
AdcRegs.ADCINTSOCSEL1.bit.SOC3 = 2;
AdcRegs.ADCINTSOCSEL1.bit.SOC4 = 2;
AdcRegs.ADCINTSOCSEL1.bit.SOC5 = 2;
AdcRegs.ADCINTSOCSEL1.bit.SOC6 = 2;
AdcRegs.ADCINTSOCSEL1.bit.SOC7 = 1; //ADCINT1 starts SOC6-13
AdcRegs.ADCINTSOCSEL2.bit.SOC8 = 1;
AdcRegs.ADCINTSOCSEL2.bit.SOC9 = 1;
AdcRegs.ADCINTSOCSEL2.bit.SOC10 = 1;
AdcRegs.ADCINTSOCSEL2.bit.SOC11 = 1;
AdcRegs.ADCINTSOCSEL2.bit.SOC12 = 1;
AdcRegs.ADCINTSOCSEL2.bit.SOC13 = 1;
// AdcRegs.ADCINTSOCSEL2.bit.SOC14 = 1;
// AdcRegs.ADCINTSOCSEL2.bit.SOC15 = 1;
EDIS;
DELAY_US(ADC_usDELAY); // Delay before converting ADC channels
for (i=0; i<13; i++) // clear the buffer
{
adc_result[i] = 0;
}
//ADC Conversion
AdcRegs.ADCSOCFRC1.all = 0x007F; // Force Start SOC0-6 to begin ping-pong sampling
while( index < SampleSize ) // take 8 samples
{
//Wait for ADCINT1 to trigger, then add ADCRESULT0-7 registers to sum
while (AdcRegs.ADCINTFLG.bit.ADCINT1 == 0){} // ADCINT1 is not going to 1 again
// while(AdcRegs.ADCCTL1.bit.ADCBSY)asm(" nop");
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //Must clear ADCINT1 flag since INT1CONT = 0
i16_tmp = AdcResult.ADCRESULT0; // A1; SOC0 1st conversation is corrupt see errata
adc_result[CURRENT_HEATER_1] += AdcResult.ADCRESULT1; // A1; SOC1
adc_result[CURRENT_HEATER_2] += AdcResult.ADCRESULT2; // A2; SOC2
adc_result[CURRENT_HEATER_3] += AdcResult.ADCRESULT3; // A3; SOC3
adc_result[CURRENT_HEATER_4] += AdcResult.ADCRESULT4; // A4; SOC4
adc_result[CURRENT_HEATER_5] += AdcResult.ADCRESULT5; // A6; SOC5
adc_result[CURRENT_HEATER_6] += AdcResult.ADCRESULT6; // A7; SOC6
// adc_result[0] = AdcResult.ADCRESULT7;
//Wait for ADCINT2 to trigger, then add ADCRESULT8-15 registers to sum
while (AdcRegs.ADCINTFLG.bit.ADCINT2 == 0)asm(" nop");
// while(AdcRegs.ADCCTL1.bit.ADCBSY){}
AdcRegs.ADCINTFLGCLR.bit.ADCINT2 = 1; //Must clear ADCINT2 flag since INT2CONT = 0
adc_result[CURRENT_HEATER_7] += AdcResult.ADCRESULT7; // B0; SOC7
adc_result[CURRENT_HEATER_8] += AdcResult.ADCRESULT8; // B1; SOC8
adc_result[VOLTAGE_24V] += AdcResult.ADCRESULT9; // B2; SOC9
adc_result[VOLTAGE_5V] += AdcResult.ADCRESULT10; // B3; SOC10
adc_result[CJ125_UR] += AdcResult.ADCRESULT11; // B4; SOC11
adc_result[CJ125_UA] += AdcResult.ADCRESULT12; // B6; SOC12
adc_result[PRESSURE_SENSOR] += AdcResult.ADCRESULT13; // B7; SOC13
// adc_result[13] = AdcResult.ADCRESULT13;
++index;
} // end data collection
//Disable ADCINT1 and ADCINT2 to STOP the ping-pong sampling
AdcRegs.INTSEL1N2.bit.INT1E = 0;
AdcRegs.INTSEL1N2.bit.INT2E = 0;