@@ -140,38 +140,87 @@ void analogReference(eAnalogReference mode)
140
140
//TODO: fix gains
141
141
switch (mode )
142
142
{
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 :
145
152
//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 ; //
148
165
break ;
149
166
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
+
150
207
case AR_EXTERNAL :
151
208
//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
153
210
ADC1 -> REFCTRL .bit .REFSEL = ADC_REFCTRL_REFSEL_AREFA_Val ;
154
211
break ;
155
212
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
-
163
213
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 ; //
167
217
break ;
168
-
218
+
169
219
case AR_DEFAULT :
170
220
default :
171
221
//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 ; //
175
224
break ;
176
225
}
177
226
0 commit comments