@@ -31,6 +31,9 @@ extern "C" {
3131static uint32_t saadcReference = SAADC_CH_CONFIG_REFSEL_Internal ;
3232static uint32_t saadcGain = SAADC_CH_CONFIG_GAIN_Gain1_6 ;
3333
34+ static uint32_t saadcOversampling = SAADC_OVERSAMPLE_OVERSAMPLE_Bypass ;
35+ static bool saadcBurst = SAADC_CH_CONFIG_BURST_Disabled ;
36+
3437#if 0 // Note: Adafruit use seperated HardwarePWM class
3538#define PWM_COUNT 3
3639
@@ -124,6 +127,47 @@ void analogReference( eAnalogReference ulMode )
124127 }
125128}
126129
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+
127171uint32_t analogRead ( uint32_t ulPin )
128172{
129173 uint32_t pin = SAADC_CH_PSELP_PSELP_NC ;
@@ -200,7 +244,8 @@ uint32_t analogRead( uint32_t ulPin )
200244 | ((saadcGain << SAADC_CH_CONFIG_GAIN_Pos ) & SAADC_CH_CONFIG_GAIN_Msk )
201245 | ((saadcReference << SAADC_CH_CONFIG_REFSEL_Pos ) & SAADC_CH_CONFIG_REFSEL_Msk )
202246 | ((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 );
204249 NRF_SAADC -> CH [0 ].PSELN = pin ;
205250 NRF_SAADC -> CH [0 ].PSELP = pin ;
206251
0 commit comments