请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR5994 工具与软件:
我正在尝试从 A3和 A4输入读取处理器数据。 我可以读取 A3、但当我尝试读取 A4时、我得到相同的值。 借助调试器、我可以根据我调用函数的哪个参数正确地更改 ADC12MCTL0、所以我假设我读取结果寄存器时还有其他问题? 如果有任何帮助、将不胜感激。
uint16_t adcResult = 0x0000;
void initADC(){
while(REFCTL0 & REFGENBUSY); // If ref generator busy, WAIT
REFCTL0 |= REFVSEL_2 | REFON; // Select internal ref = 2.5V
ADC12CTL0 = ADC12SHT0_2 | ADC12ON;
ADC12CTL1 = ADC12SHP; // ADCCLK = MODOSC; sampling timer
ADC12CTL2 |= ADC12RES_2; // 12-bit conversion results
}
uint16_t sampleADC(ADC_Input channel){
//select right channels from the ADC
switch(channel){
case ADC_CH_REG_3V3:
ADC12MCTL0 = ADC12INCH_4 | ADC12VRSEL_1; // A1 ADC input select; Vref=+VRef
break;
case ADC_CH_INA241:
ADC12MCTL0 = ADC12INCH_3 | ADC12VRSEL_1;
break;
}
while(!(REFCTL0 & REFGENRDY)); //make sure reference has settled
ADC12IER0 |= ADC12IE0; // Enable ADC conv complete interrupt
ADC12CTL0 |= ADC12ENC | ADC12SC; // Enable and start sampling/conversion
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupts
return adcResult;
}
//**********************************************************************************************
//** ADC Interrupt routine *********************************************************************
//** Called when the corresponding ADC12MEMx memory register is loaded with a conversion result
//**********************************************************************************************
#pragma vector = ADC12_B_VECTOR
__interrupt void ADC12_ISR(void)
{
switch(__even_in_range(ADC12IV, ADC12IV__ADC12RDYIFG))
{
case ADC12IV__ADC12IFG0: // Vector 12: ADC12MEM0 Interrupt
adcResult = ADC12MEM0;
// Exit from LPM0 and continue executing main
__bic_SR_register_on_exit(LPM0_bits);
break;
}
}