Tool/software: TI C/C++ Compiler
Good Day, I used Sequence of Channels Mode to sample A0, A1 channels. The same voltage is applied to the A0,A1 pins. However, the sample values is different in LPM3 and the sample values is same in active mode . Why is the reason? The codes is following:
INT16U g_Result[2][164] ={0} ; // A0 g_Result[0],A1 g_Result[1]
INT8U g_AdcCount;
INT8U g_ResutNum;
int main(void)
{
WDTCTL = WDTPW | WDTHOLD;
InitSystemClock(); //MCLK =8MHz, SMCLK = off ,REFO(~32768Hz) is source of ACLK = 32768Hz
P1SEL0 |= BIT0 + BIT1;
P1SEL1 |= BIT0 + BIT1;
PM5CTL0 &= ~LOCKLPM5;
ADCCTL0 = ADCSHT_4| ADCMSC ;
ADCCTL1 = ADCSHP | ADCSSEL_0 | ADCCONSEQ_1; //ADCSC Trriger,Sequence of Channels Mode
ADCCTL2 = ADCRES_1 ;
ADCMCTL0 = ADCSREF_1 | ADCINCH_1; //REF =1.5V
ADCIE |= ADCIE0;
PMMCTL0_H = PMMPW_H;
PMMCTL2 |= INTREFEN ;
while(!(PMMCTL2 & REFGENRDY));
TB0CCTL0 |= CCIE;
TB0CCR0 = 7; // set 244us
TB0CTL = TBSSEL__ACLK | MC_1 | TBCLR;
__bis_SR_register(GIE|LPM3_bits );
while(1);
}
#pragma vector = TIMER0_B0_VECTOR
__interrupt void Timer_B (void)
{
g_AdcCount = 1;
if(g_ResutNum > 163)
{
g_ResutNum = 0;
}
ADCCTL0 |= ADCON| ADCENC | ADCSC; //ADC start
}
#pragma vector=ADC_VECTOR
__interrupt void ADC_ISR(void)
{
switch(__even_in_range(ADCIV,ADCIV_ADCIFG))
{
case ADCIV_NONE:
break;
case ADCIV_ADCOVIFG:
break;
case ADCIV_ADCTOVIFG:
break;
case ADCIV_ADCHIIFG:
break;
case ADCIV_ADCLOIFG:
break;
case ADCIV_ADCINIFG:
break;
case ADCIV_ADCIFG:
g_Result[g_AdcCount][g_ResutNum] = ADCMEM0;
if(g_AdcCount == 0)
{
g_ResutNum++;
}
else
{
g_AdcCount--;
}
break;
default:
break;
}
}
the data of A0,A1 is following:
When I change "__bis_SR_register(GIE|LPM3_bits );" to "__bis_SR_register(GIE);" , the CPU is always active. The samples datas is normally , the data graph :




