@@ -140,38 +140,87 @@ void analogReference(eAnalogReference mode)
140140 //TODO: fix gains
141141 switch (mode )
142142 {
143- case AR_INTERNAL :
144- case AR_INTERNAL2V23 :
143+ case AR_INTERNAL1V0 :
144+ //ADC0->GAINCORR.reg = ADC_GAINCORR_GAINCORR(); // Gain Factor Selection
145+ SUPC -> VREF .bit .SEL = SUPC_VREF_SEL_1V0_Val ; // select 1.0V
146+ SUPC -> VREF .bit .VREFOE = 1 ; // Turn on for use with ADC
147+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; // Use SUPC.VREF
148+ ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; //
149+ break ;
150+
151+ case AR_INTERNAL1V1 :
145152 //ADC0->GAINCORR.reg = ADC_GAINCORR_GAINCORR(); // Gain Factor Selection
146- ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTVCC0_Val ; // 1/1.48 VDDANA = 1/1.48* 3V3 = 2.2297
147- ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTVCC0_Val ; // 1/1.48 VDDANA = 1/1.48* 3V3 = 2.2297
153+ SUPC -> VREF .bit .SEL = SUPC_VREF_SEL_1V1_Val ; // select 1.1V
154+ SUPC -> VREF .bit .VREFOE = 1 ; // Turn on for use with ADC
155+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; // Use SUPC.VREF
156+ ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; //
157+ break ;
158+
159+ case AR_INTERNAL1V2 :
160+ //ADC0->GAINCORR.reg = ADC_GAINCORR_GAINCORR(); // Gain Factor Selection
161+ SUPC -> VREF .bit .SEL = SUPC_VREF_SEL_1V2_Val ; // select 1V2
162+ SUPC -> VREF .bit .VREFOE = 1 ; // Turn on for use with ADC
163+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; // Use SUPC.VREF
164+ ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; //
148165 break ;
149166
167+ case AR_INTERNAL1V25 :
168+ //ADC0->GAINCORR.reg = ADC_GAINCORR_GAINCORR(); // Gain Factor Selection
169+ SUPC -> VREF .bit .SEL = SUPC_VREF_SEL_1V25_Val ; // select 1.25V
170+ SUPC -> VREF .bit .VREFOE = 1 ; // Turn on for use with ADC
171+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; // Use SUPC.VREF
172+ ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; //
173+ break ;
174+
175+ case AR_INTERNAL2V0 :
176+ //ADC0->GAINCORR.reg = ADC_GAINCORR_GAINCORR(); // Gain Factor Selection
177+ SUPC -> VREF .bit .SEL = SUPC_VREF_SEL_2V0_Val ; // select 2.0V
178+ SUPC -> VREF .bit .VREFOE = 1 ; // Turn on for use with ADC
179+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; // Use SUPC.VREF
180+ ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; //
181+ break ;
182+
183+ case AR_INTERNAL2V2 :
184+ //ADC0->GAINCORR.reg = ADC_GAINCORR_GAINCORR(); // Gain Factor Selection
185+ SUPC -> VREF .bit .SEL = SUPC_VREF_SEL_2V2_Val ; // select 2.2V
186+ SUPC -> VREF .bit .VREFOE = 1 ; // Turn on for use with ADC
187+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; // Use SUPC.VREF
188+ ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; //
189+ break ;
190+
191+ case AR_INTERNAL2V4 :
192+ //ADC0->GAINCORR.reg = ADC_GAINCORR_GAINCORR(); // Gain Factor Selection
193+ SUPC -> VREF .bit .SEL = SUPC_VREF_SEL_2V4_Val ; // select 2.4V
194+ SUPC -> VREF .bit .VREFOE = 1 ; // Turn on for use with ADC
195+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; // Use SUPC.VREF
196+ ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; //
197+ break ;
198+
199+ case AR_INTERNAL2V5 :
200+ //ADC0->GAINCORR.reg = ADC_GAINCORR_GAINCORR(); // Gain Factor Selection
201+ SUPC -> VREF .bit .SEL = SUPC_VREF_SEL_2V5_Val ; // select 2.5V
202+ SUPC -> VREF .bit .VREFOE = 1 ; // Turn on for use with ADC
203+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; // Use SUPC.VREF
204+ ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTREF_Val ; //
205+ break ;
206+
150207 case AR_EXTERNAL :
151208 //ADC0->INPUTCTRL.bit.GAIN = ADC_INPUTCTRL_GAIN_1X_Val; // Gain Factor Selection
152- ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_AREFA_Val ;
209+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_AREFA_Val ; // AREF is jumpered to VCC, so 3.3V
153210 ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_AREFA_Val ;
154211 break ;
155212
156- /* Don't think this works on SAMD51
157- case AR_INTERNAL1V0:
158- //ADC0->INPUTCTRL.bit.GAIN = ADC_INPUTCTRL_GAIN_1X_Val; // Gain Factor Selection
159- ADC0->REFCTRL.bit.REFSEL = ADC_REFCTRL_REFSEL_INT1V_Val; // 1.0V voltage reference
160- break;
161- */
162-
163213 case AR_INTERNAL1V65 :
164- //ADC0->INPUTCTRL.bit.GAIN = ADC_INPUTCTRL_GAIN_1X_Val; // Gain Factor Selection
165- ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTVCC1_Val ; // 1/2 VDDANA = 0.5* 3V3 = 1.65V
166- ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTVCC1_Val ; // 1/2 VDDANA = 0.5* 3V3 = 1.65V
214+ //ADC0->INPUTCTRL.bit.GAIN = ADC_INPUTCTRL_GAIN_DIV2_Val;
215+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTVCC0_Val ; // 1/2 VDDANA = 1.65
216+ ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTVCC0_Val ; //
167217 break ;
168-
218+
169219 case AR_DEFAULT :
170220 default :
171221 //ADC0->INPUTCTRL.bit.GAIN = ADC_INPUTCTRL_GAIN_DIV2_Val;
172- ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTVCC1_Val ; // 1/2 VDDANA = 0.5* 3V3 = 1.65V
173- ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTVCC1_Val ; // 1/2 VDDANA = 0.5* 3V3 = 1.65V
174-
222+ ADC0 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTVCC1_Val ; // VDDANA = 3V3
223+ ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_INTVCC1_Val ; //
175224 break ;
176225 }
177226
0 commit comments