芯片:MSP430FR6972
IDE:IAR6.14
问题描述:
我的程序平时在一直采集电流,接收到读取电池电压指令后关闭采样定时器,重新配置ADC通道采集电池电压。调试过程发现采集完后读取的电压值老是不正确,进入IAR调试定位到temp = ADC12MEM0;这一句发现此时ADC12MEM0的值是对的,但是全速跑然后将断电定位到Indicator_Status.Voltage_Bat = temp;这一句发现temp值不正确,通过调试框看寄存器值ADC12MEM0值却对的。这是什么原因导致的呢?
相关程序:
{
TimerB0_Stop(); //暂停电流采样
For_Real_Sample();
while(ADC12IFGR0 & ADC12IFG1 == 0);
temp = ADC12MEM0;//这里
Indicator_Status.Voltage_Bat = temp;
}
void For_Real_Sample(void)
{
PowerSwitch(ADC_CAP,ENABLE);
PowerSwitch(ADC_BAT,ENABLE);
while(REFCTL0 & REFGENBUSY); // If ref generator busy, WAIT
REFCTL0 |= REFVSEL_2 | REFON; // Select internal ref = 2.5V, Internal Reference ON
ADC12CTL0 &= ~ADC12ENC;
ADC12CTL0 = ADC12ON | ADC12SHT0_2 | ADC12MSC; // Turn on ADC12, 采样周期64 ADC12CLK,采样保持时间尽量长
ADC12CTL1 = ADC12SHP |ADC12SHS_0 | ADC12CONSEQ_1 | ADC12SSEL_3 | ADC12PDIV_1; // ADC12SC触发采样,序列通道采样 0-1,SMCLK/4
ADC12MCTL0 = ADC12VRSEL_1 | ADC12INCH_14; //ADC_BAT
ADC12MCTL1 = ADC12VRSEL_1 | ADC12INCH_15 | ADC12EOS; //ADC_CAP
ADC12IER0 = 0; //关闭中断
while(!(REFCTL0 & REFGENRDY)); // Wait for reference generator to settle
ADC12CTL0 |= ADC12ENC + ADC12SC;
}