Skip to content

Commit 49568c0

Browse files
authored
Merge pull request #89 from Ureloc/master
Added analog oversampling and Uart::flush()
2 parents d718112 + 52752f3 commit 49568c0

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

cores/nRF5/Uart.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ void Uart::end()
186186

187187
void Uart::flush()
188188
{
189+
rxBuffer.clear();
189190
}
190191

191192
void Uart::IrqHandler()

cores/nRF5/wiring_analog.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ typedef enum _eAnalogReference
6161
*/
6262
extern void analogReference( eAnalogReference ulMode ) ;
6363

64+
/*
65+
* \brief Configures the oversampling amount used to sample analog input.
66+
*
67+
* \param ulOversampling Should be set to 1, 2, 4, 8, 16, 32, 64, 128 or 256.
68+
*/
69+
extern void analogOversampling( uint32_t ulOversampling );
70+
6471
/*
6572
* \brief Writes an analog value (PWM wave) to a pin.
6673
*

cores/nRF5/wiring_analog_nRF52.c

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ extern "C" {
3131
static uint32_t saadcReference = SAADC_CH_CONFIG_REFSEL_Internal;
3232
static uint32_t saadcGain = SAADC_CH_CONFIG_GAIN_Gain1_6;
3333

34+
static bool saadcBurst = SAADC_CH_CONFIG_BURST_Disabled;
35+
3436
#if 0 // Note: Adafruit use seperated HardwarePWM class
3537
#define PWM_COUNT 3
3638

@@ -124,6 +126,44 @@ void analogReference( eAnalogReference ulMode )
124126
}
125127
}
126128

129+
void analogOversampling( uint32_t ulOversampling )
130+
{
131+
saadcBurst = SAADC_CH_CONFIG_BURST_Enabled;
132+
133+
switch (ulOversampling) {
134+
case 0:
135+
case 1:
136+
saadcBurst = SAADC_CH_CONFIG_BURST_Disabled;
137+
NRF_SAADC->OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Bypass;
138+
return;
139+
break;
140+
case 2:
141+
NRF_SAADC->OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over2x;
142+
break;
143+
case 4:
144+
NRF_SAADC->OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over4x;
145+
break;
146+
case 8:
147+
NRF_SAADC->OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over8x;
148+
break;
149+
case 16:
150+
NRF_SAADC->OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over16x;
151+
break;
152+
case 32:
153+
NRF_SAADC->OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over32x;
154+
break;
155+
case 64:
156+
NRF_SAADC->OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over64x;
157+
break;
158+
case 128:
159+
NRF_SAADC->OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over128x;
160+
break;
161+
case 256:
162+
NRF_SAADC->OVERSAMPLE = SAADC_OVERSAMPLE_OVERSAMPLE_Over256x;
163+
break;
164+
}
165+
}
166+
127167
uint32_t analogRead( uint32_t ulPin )
128168
{
129169
uint32_t pin = SAADC_CH_PSELP_PSELP_NC;
@@ -200,7 +240,8 @@ uint32_t analogRead( uint32_t ulPin )
200240
| ((saadcGain << SAADC_CH_CONFIG_GAIN_Pos) & SAADC_CH_CONFIG_GAIN_Msk)
201241
| ((saadcReference << SAADC_CH_CONFIG_REFSEL_Pos) & SAADC_CH_CONFIG_REFSEL_Msk)
202242
| ((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);
243+
| ((SAADC_CH_CONFIG_MODE_SE << SAADC_CH_CONFIG_MODE_Pos) & SAADC_CH_CONFIG_MODE_Msk)
244+
| ((saadcBurst << SAADC_CH_CONFIG_BURST_Pos) & SAADC_CH_CONFIG_BURST_Msk);
204245
NRF_SAADC->CH[0].PSELN = pin;
205246
NRF_SAADC->CH[0].PSELP = pin;
206247

0 commit comments

Comments
 (0)