工具/软件:
你(们)好
我在工程中使用 MSP430FR2355 控制器、
我想使用 ADC、对于我的一个工程、我要初始化所有 ADC 寄存器、ADC 中断也可以工作。
但是、虽然从 ADCMEM0 寄存器读取时始终显示 101 或 102 的值、但我在端口引脚 1.0 上施加的电压为 1.55VDC。
帮助解决此问题。
我每 100ms 使用以下命令启动一次 ADC 转换。
ADCCTL0 |=(ADCENC | ADCSC);
我的代码如下:
void adc_config()
{
P1SEL0 |=BIT0;
P1SEL1 |=BIT0;
// Disable the GPIO power-on default high-impedance mode to activate
// previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
// Configure ADC12
ADCCTL0 |= ADCSHT_2 | ADCON; // ADCON, S&H=16 ADC clks
ADCCTL1 |= ADCSHP; // ADCCLK = MODOSC; sampling timer
ADCCTL2 &= ~ADCRES; // clear ADCRES in ADCCTL
ADCCTL2 |= ADCRES_2; // 12-bit conversion results
ADCMCTL0 |= ADCINCH0; // A1 ADC input select; Vref=AVCC
ADCIE |= ADCIE0;
}
// ADC interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC_VECTOR
__interrupt void ADC_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC_VECTOR))) ADC_ISR (void)
#else
#error Compiler not supported!
#endif
{
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:
ADC_data[0] = ADCMEM0;
__bic_SR_register_on_exit(LPM0_bits); // Clear CPUOFF bit from LPM0
break;
default:
break;
}
}
谢谢、
Yuvaraj