Part Number: MSP430FR58891
I am reading 16 analog channels in a single sequence. using the ADC12MCTLx registers. I was advised to use the buffered reference, VRSEL = 0001b (VR+ = VREF buffered, VR- = AVSS). I did this for the first channel but left the remaining 15 left to unbuffered, VRSEL = 0010b, as I was concerned that the documentation warns about using the buffer REF only once??? Can I use buffered REF for all analog inputs?
void ADC10_Initialize( void )
{
P9SEL1 = 0xff; // A8 - A15 58891 Data Sht p.114
P9SEL0 = 0xff;
P1SEL0 = 0x0f; // A0 - A3 58891 Data Sht p.93
P1SEL1 = 0x0f;
P1SEL1_bit.P1SEL1_0 = 1; // A0
P1SEL0_bit.P1SEL0_0 = 1;
while( ADC12CTL1 & ADC12BUSY ){dummy++;}
while( REFCTL0 & REFGENBUSY ){ dummy++;} // Wait for REF module
ADC12CTL0_bit.ADC12SC = 0; // No Sample-n-Conversion Start
ADC12CTL0_bit.ADC12ENC = 0; // Disable Conversion
ADC12CTL0 = 0x4490; //S&HTime 3=>64 ADC12CLKs, ADC12ON=1, MSC=1 Seq mode
REFCTL0 = 0x0061; // GENOT=1, VSEL=2.5V, REFON=1
ADC12CTL1 = 0x02FA; // ClkDiv=8, SHP=1, SHS=000 ADC12SC bit,
// ClkSel=11 SMCLK, CONSEQ=00 Single Chnl
ADC12CTL2 = 0x0010; // RES = 10-bit
ADC12CTL3 = 0x0000; // StartAddx=0 Start Seq at Chnl 0
ADC12MCTL0 = 0x0100; // Chanl A0 VRSEL=0001b -> VR+ = VREF buffered, VR- =AVSS
ADC12MCTL1 = 0x0401; // Chanl A1
ADC12MCTL2 = 0x0402; // Chanl A2
ADC12MCTL3 = 0x0403; // Chanl A3
ADC12MCTL4 = 0x0404; // Chanl A4
ADC12MCTL5 = 0x0405; // Chanl A5
ADC12MCTL6 = 0x0406; // Chanl A6
ADC12MCTL7 = 0x0407; // Chanl A7
ADC12MCTL8 = 0x0408; // Chanl A8
ADC12MCTL9 = 0x0409; // Chanl A9
ADC12MCTL10 = 0x040A; // Chanl A10
ADC12MCTL11 = 0x040B; // Chanl A11
ADC12MCTL12 = 0x040C; // Chanl A12
ADC12MCTL13 = 0x040D; // Chanl A13
ADC12MCTL14 = 0x040E; // Chanl A14
ADC12MCTL15 = 0x048F; // Chanl A15 8=EOS - End of Sequence
// ADC12IER0 = 0x0001; // Interrupt Enables :A0 only
ADC12IER0 = 0x0000; // Interrupt Enables: A15-A0
ADC12IER0 = ADC12IE15; // Interrupt Enables :A15 only
ADC12IER1 = 0x0000; // Interrupt Enables: A31-A16
ADC12IER2 = 0x0000; // Interrupt Enables: RDY, TOV, OV, HI, LO, IN
ADC12IFGR0 = 0x0000; // Interrupt Flags: A15-A0
ADC12IFGR1 = 0x0000; // Interrupt Flags: A31-A16
ADC12IFGR2 = 0x0000; // Interrupt Flags: RDY, TOV, OV, HI, LO, IN
ADC_done_flag=0;
ADC12CTL0 |= ADC12ENC | ADC12SC;
}