/*--------------------------------ReadA2D------------------------------*/ uint16_t ReadA2D(uint8_t Channel) { uint32_t Level; uint16_t i; const uint16_t Samples = 100; ADC12CTL0 &= ~(ADC12ENC | ADC12ON); if (Channel <= 7) P6SEL |= (0x01 << Channel); else if (Channel >= 12) P7SEL |= (1 << (Channel - 8)); while (REFCTL0 & REFGENBUSY); if (Channel == 10) REFCTL0 = REFMSTR + REFVSEL_2 + REFON; else REFCTL0 = REFMSTR + REFVSEL_2 + REFON + REFTCOFF; //REFCTL0 &= ~REFMSTR; //ADC12CTL0 = ADC12REF2_5V + ADC12REFON + ADC12SHT0_8 + ADC12ON; // Sampling time, ADC12 on ADC12CTL0 = ADC12SHT0_8 + ADC12ON; // Sampling time, ADC12 on ADC12CTL1 = ADC12DIV_1 + ADC12SHP; // Do not run sample timer as at full speed ADC12CTL2 |= ADC12REFBURST; ADC12MCTL0 = ADC12SREF_1 + Channel; ADC12CTL0 |= ADC12ENC; // ENable Conversion ? __delay_cycles(10000); // WaitCentiSeconds(2); //WaitCentiSeconds(2); Level = 0; for (i = 0; i < Samples; i++) { ADC12IFG = 0; ADC12CTL0 |= ADC12SC; // Start sampling/conversion //ADC12CTL0 |= ADC12ENC | ADC12SC; // Start sampling/conversion while ((ADC12IFG & 0x01) == 0); Level += ADC12MEM0; //while (ADC12CTL1 & ADC12BUSY); //if (i != Samples - 1) WaitCentiSeconds(2); } ADC12CTL0 &= ~(ADC12ENC | ADC12ON); REFCTL0 &= ~REFON; return Level / Samples; }