msp430fr2311单片机adc序列通道采样
使用P1.2、P1.3、P1.4、P1.5为采样通道,以demo的msp430fr231x_adc10_10.c文件为例。
1、将上述4个管脚配置为ADC模式:
P1SEL0 |= BIT2 + BIT3 + BIT4 + BIT5;
P1SEL1 |= BIT2 + BIT3 + BIT4 + BIT5;
2、查看资料可知,有4种adc采样模式,单通道单次,序列通道单次,单通道多次,序列通道多次;
本例选择序列通道单次,将ADCCT寄存器设为L1ADCCONSEQ_1;430读取通道数据时是由最高通道开始,直至A0,因此将ADCMCTL0设置为ADCINCH_5(通道5),
ADCMCTL0 |= ADCINCH_5; //参考电压为ADCC。
adc采样值保存在ADCMEM0寄存器中,类似串口接收区。当配置为序列通道时,循环读取ADCMEM的值,即为采样的数据。
注意:序列通道时,需要从最高通道一直读到通道0,总共6个通道。因此定义数组u16 ADC_Result[6],在ADC的中断处理函数中,进行赋值:
//初始化函数
void adc_init()
{
// Configure ADC A0~2 pins
P1SEL0 |= BIT2 + BIT3 + BIT4 + BIT5;
P1SEL1 |= BIT2 + BIT3 + BIT4 + BIT5;
// Disable the GPIO power-on default high-impedance mode to activate
// previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
// Configure ADC
ADCCTL0 |= ADCSHT_2 | ADCMSC | ADCON; // 16ADCclks, MSC, ADC ON
ADCCTL1 |= ADCSHP | ADCCONSEQ_1 | ADCSSEL_1; // ADC clock ACLK, sampling timer, s/w trig.,single sequence
ADCCTL2 = ADCRES; // 10-bit conversion results
ADCMCTL0 |= ADCINCH_5; // A5~2(EoS); Vref=avcc=3.3v
ADCIE |= ADCIE0; // Enable ADC conv complete interrupt
// Configure reference
PMMCTL0_H = PMMPW_H; // Unlock the PMM registers
PMMCTL2 |= INTREFEN; // Enable internal reference
__delay_cycles(400); // Delay for reference settling