@@ -31,6 +31,9 @@ extern "C" {
31
31
static uint32_t saadcReference = SAADC_CH_CONFIG_REFSEL_Internal ;
32
32
static uint32_t saadcGain = SAADC_CH_CONFIG_GAIN_Gain1_6 ;
33
33
34
+ static uint32_t saadcOversampling = SAADC_OVERSAMPLE_OVERSAMPLE_Bypass ;
35
+ static bool saadcBurst = SAADC_CH_CONFIG_BURST_Disabled ;
36
+
34
37
#if 0 // Note: Adafruit use seperated HardwarePWM class
35
38
#define PWM_COUNT 3
36
39
@@ -124,6 +127,47 @@ void analogReference( eAnalogReference ulMode )
124
127
}
125
128
}
126
129
130
+ void analogOversampling ( uint32_t ulOversampling )
131
+ {
132
+ if (ulOversampling > 0 ) saadcBurst = SAADC_CH_CONFIG_BURST_Enabled ; // burst mode has to be enable to use oversampling
133
+ else saadcBurst = SAADC_CH_CONFIG_BURST_Disabled ;
134
+
135
+ switch (ulOversampling ) {
136
+ case 0 :
137
+ case 1 :
138
+ saadcBurst = SAADC_CH_CONFIG_BURST_Disabled ;
139
+ NRF_SAADC -> OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Bypass ;
140
+ return ;
141
+ break ;
142
+ case 2 :
143
+ NRF_SAADC -> OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over2x ;
144
+ break ;
145
+ case 4 :
146
+ NRF_SAADC -> OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over4x ;
147
+ break ;
148
+ case 8 :
149
+ NRF_SAADC -> OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over8x ;
150
+ break ;
151
+ case 16 :
152
+ NRF_SAADC -> OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over16x ;
153
+ break ;
154
+ case 32 :
155
+ NRF_SAADC -> OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over32x ;
156
+ break ;
157
+ case 64 :
158
+ NRF_SAADC -> OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over64x ;
159
+ break ;
160
+ case 128 :
161
+ NRF_SAADC -> OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over128x ;
162
+ break ;
163
+ case 256 :
164
+ NRF_SAADC -> OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over256x ;
165
+ break ;
166
+ }
167
+
168
+ saadcBurst = SAADC_CH_CONFIG_BURST_Enabled ;
169
+ }
170
+
127
171
uint32_t analogRead ( uint32_t ulPin )
128
172
{
129
173
uint32_t pin = SAADC_CH_PSELP_PSELP_NC ;
@@ -200,7 +244,8 @@ uint32_t analogRead( uint32_t ulPin )
200
244
| ((saadcGain << SAADC_CH_CONFIG_GAIN_Pos ) & SAADC_CH_CONFIG_GAIN_Msk )
201
245
| ((saadcReference << SAADC_CH_CONFIG_REFSEL_Pos ) & SAADC_CH_CONFIG_REFSEL_Msk )
202
246
| ((SAADC_CH_CONFIG_TACQ_3us << SAADC_CH_CONFIG_TACQ_Pos ) & SAADC_CH_CONFIG_TACQ_Msk )
203
- | ((SAADC_CH_CONFIG_MODE_SE << SAADC_CH_CONFIG_MODE_Pos ) & SAADC_CH_CONFIG_MODE_Msk );
247
+ | ((SAADC_CH_CONFIG_MODE_SE << SAADC_CH_CONFIG_MODE_Pos ) & SAADC_CH_CONFIG_MODE_Msk )
248
+ | ((saadcBurst << SAADC_CH_CONFIG_BURST_Pos ) & SAADC_CH_CONFIG_BURST_Msk );
204
249
NRF_SAADC -> CH [0 ].PSELN = pin ;
205
250
NRF_SAADC -> CH [0 ].PSELP = pin ;
206
251
0 commit comments