Skip to content

Commit 405d48c

Browse files
authored
Merge pull request #591 from ogatatsu/analogReadVDD
Add analogReadVDD() function
2 parents 9f0f424 + fdded90 commit 405d48c

File tree

3 files changed

+78
-47
lines changed

3 files changed

+78
-47
lines changed

cores/nRF5/wiring_analog.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,14 @@ extern void analogWrite( uint32_t ulPin, uint32_t ulValue ) ;
8585
*/
8686
extern uint32_t analogRead( uint32_t ulPin ) ;
8787

88+
/*
89+
* \brief Read the value from the vdd pin.
90+
*
91+
* \return Read value from vdd pin, if no error.
92+
*/
93+
extern uint32_t analogReadVDD( void ) ;
94+
95+
8896
/*
8997
* \brief Set the resolution of analogRead return values. Default is 10 bits (range from 0 to 1023).
9098
*

cores/nRF5/wiring_analog_nRF52.c

Lines changed: 59 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -140,56 +140,12 @@ void analogOversampling( uint32_t ulOversampling )
140140
}
141141
}
142142

143-
uint32_t analogRead( uint32_t ulPin )
143+
static uint32_t analogRead_internal( uint32_t psel )
144144
{
145-
uint32_t pin = SAADC_CH_PSELP_PSELP_NC;
146145
uint32_t saadcResolution;
147146
uint32_t resolution;
148147
volatile int16_t value = 0;
149148

150-
if (ulPin >= PINS_COUNT) {
151-
return 0;
152-
}
153-
154-
ulPin = g_ADigitalPinMap[ulPin];
155-
156-
switch ( ulPin ) {
157-
case 2:
158-
pin = SAADC_CH_PSELP_PSELP_AnalogInput0;
159-
break;
160-
161-
case 3:
162-
pin = SAADC_CH_PSELP_PSELP_AnalogInput1;
163-
break;
164-
165-
case 4:
166-
pin = SAADC_CH_PSELP_PSELP_AnalogInput2;
167-
break;
168-
169-
case 5:
170-
pin = SAADC_CH_PSELP_PSELP_AnalogInput3;
171-
break;
172-
173-
case 28:
174-
pin = SAADC_CH_PSELP_PSELP_AnalogInput4;
175-
break;
176-
177-
case 29:
178-
pin = SAADC_CH_PSELP_PSELP_AnalogInput5;
179-
break;
180-
181-
case 30:
182-
pin = SAADC_CH_PSELP_PSELP_AnalogInput6;
183-
break;
184-
185-
case 31:
186-
pin = SAADC_CH_PSELP_PSELP_AnalogInput7;
187-
break;
188-
189-
default:
190-
return 0;
191-
}
192-
193149
if (readResolution <= 8) {
194150
resolution = 8;
195151
saadcResolution = SAADC_RESOLUTION_VAL_8bit;
@@ -218,8 +174,8 @@ uint32_t analogRead( uint32_t ulPin )
218174
| ((SAADC_CH_CONFIG_TACQ_3us << SAADC_CH_CONFIG_TACQ_Pos) & SAADC_CH_CONFIG_TACQ_Msk)
219175
| ((SAADC_CH_CONFIG_MODE_SE << SAADC_CH_CONFIG_MODE_Pos) & SAADC_CH_CONFIG_MODE_Msk)
220176
| ((saadcBurst << SAADC_CH_CONFIG_BURST_Pos) & SAADC_CH_CONFIG_BURST_Msk);
221-
NRF_SAADC->CH[0].PSELN = pin;
222-
NRF_SAADC->CH[0].PSELP = pin;
177+
NRF_SAADC->CH[0].PSELN = psel;
178+
NRF_SAADC->CH[0].PSELP = psel;
223179

224180

225181
NRF_SAADC->RESULT.PTR = (uint32_t)&value;
@@ -249,6 +205,62 @@ uint32_t analogRead( uint32_t ulPin )
249205
return mapResolution(value, resolution, readResolution);
250206
}
251207

208+
209+
uint32_t analogRead( uint32_t ulPin )
210+
{
211+
uint32_t psel = SAADC_CH_PSELP_PSELP_NC;
212+
213+
if (ulPin >= PINS_COUNT) {
214+
return 0;
215+
}
216+
217+
ulPin = g_ADigitalPinMap[ulPin];
218+
219+
switch ( ulPin ) {
220+
case 2:
221+
psel = SAADC_CH_PSELP_PSELP_AnalogInput0;
222+
break;
223+
224+
case 3:
225+
psel = SAADC_CH_PSELP_PSELP_AnalogInput1;
226+
break;
227+
228+
case 4:
229+
psel = SAADC_CH_PSELP_PSELP_AnalogInput2;
230+
break;
231+
232+
case 5:
233+
psel = SAADC_CH_PSELP_PSELP_AnalogInput3;
234+
break;
235+
236+
case 28:
237+
psel = SAADC_CH_PSELP_PSELP_AnalogInput4;
238+
break;
239+
240+
case 29:
241+
psel = SAADC_CH_PSELP_PSELP_AnalogInput5;
242+
break;
243+
244+
case 30:
245+
psel = SAADC_CH_PSELP_PSELP_AnalogInput6;
246+
break;
247+
248+
case 31:
249+
psel = SAADC_CH_PSELP_PSELP_AnalogInput7;
250+
break;
251+
252+
default:
253+
return 0;
254+
}
255+
256+
return analogRead_internal(psel);
257+
}
258+
259+
uint32_t analogReadVDD( void )
260+
{
261+
return analogRead_internal(SAADC_CH_PSELP_PSELP_VDD);
262+
}
263+
252264
#ifdef __cplusplus
253265
}
254266
#endif

keywords.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ dwt_enable KEYWORD2
3333
dwt_disable KEYWORD2
3434
delay_ns KEYWORD2
3535

36+
analogOversampling KEYWORD2
37+
analogReadVDD KEYWORD2
38+
3639
# RTOS
3740
rtos_malloc KEYWORD2
3841
rtos_free KEYWORD2
@@ -122,3 +125,11 @@ PIN_A7 LITERAL1
122125
PIN_AREF LITERAL1
123126

124127
ISR_DEFERRED LITERAL1
128+
129+
AR_DEFAULT LITERAL1
130+
AR_INTERNAL LITERAL1
131+
AR_INTERNAL_3_0 LITERAL1
132+
AR_INTERNAL_2_4 LITERAL1
133+
AR_INTERNAL_1_8 LITERAL1
134+
AR_INTERNAL_1_2 LITERAL1
135+
AR_VDD4 LITERAL1

0 commit comments

Comments
 (0)