Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
pub
hello-world
nrf52
Commits
438c1ff8
Commit
438c1ff8
authored
Oct 01, 2017
by
Sam Calisch
Browse files
added saadc
parent
f17aabc0
Pipeline
#865
passed with stage
in 0 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
modules/saadc/saadc.ino
0 → 100644
View file @
438c1ff8
//sec, 2017
#define N_SAMPLES 48
void
adc_setup
()
{
//configure SAADC resolution
NRF_SAADC
->
RESOLUTION
=
SAADC_RESOLUTION_VAL_12bit
;
//configure sample rate via internal timer
//NRF_SAADC->SAMPLERATE = (( SAADC_SAMPLERATE_MODE_Timers << SAADC_SAMPLERATE_MODE_Pos) & SAADC_SAMPLERATE_MODE_Msk) |
// (( 2047 << SAADC_SAMPLERATE_CC_Pos) & SAADC_SAMPLERATE_CC_Msk);
//enable oversampling -- do not combine with scan mode!
//NRF_SAADC->OVERSAMPLE = (SAADC_OVERSAMPLE_OVERSAMPLE_Over256x << SAADC_OVERSAMPLE_OVERSAMPLE_Pos) & SAADC_OVERSAMPLE_OVERSAMPLE_Msk ;
NRF_SAADC
->
OVERSAMPLE
=
(
SAADC_OVERSAMPLE_OVERSAMPLE_Bypass
<<
SAADC_OVERSAMPLE_OVERSAMPLE_Pos
)
&
SAADC_OVERSAMPLE_OVERSAMPLE_Msk
;
//enable SAADC
NRF_SAADC
->
ENABLE
=
(
SAADC_ENABLE_ENABLE_Enabled
<<
SAADC_ENABLE_ENABLE_Pos
);
//set result pointer
NRF_SAADC
->
RESULT
.
PTR
=
(
uint32_t
)(
&
data_buffer
);
NRF_SAADC
->
RESULT
.
MAXCNT
=
N_SAMPLES
;
// number of samples
//set channel 0 resistor network, gain, reference, sample time, and mode
NRF_SAADC
->
CH
[
0
].
CONFIG
=
((
SAADC_CH_CONFIG_RESP_Bypass
<<
SAADC_CH_CONFIG_RESP_Pos
)
&
SAADC_CH_CONFIG_RESP_Msk
)
|
((
SAADC_CH_CONFIG_RESP_Bypass
<<
SAADC_CH_CONFIG_RESN_Pos
)
&
SAADC_CH_CONFIG_RESN_Msk
)
|
((
SAADC_CH_CONFIG_GAIN_Gain4
<<
SAADC_CH_CONFIG_GAIN_Pos
)
&
SAADC_CH_CONFIG_GAIN_Msk
)
|
((
SAADC_CH_CONFIG_REFSEL_Internal
<<
SAADC_CH_CONFIG_REFSEL_Pos
)
&
SAADC_CH_CONFIG_REFSEL_Msk
)
|
((
SAADC_CH_CONFIG_TACQ_5us
<<
SAADC_CH_CONFIG_TACQ_Pos
)
&
SAADC_CH_CONFIG_TACQ_Msk
)
|
((
SAADC_CH_CONFIG_BURST_Disabled
<<
SAADC_CH_CONFIG_BURST_Pos
)
&
SAADC_CH_CONFIG_BURST_Msk
)
|
((
SAADC_CH_CONFIG_MODE_Diff
<<
SAADC_CH_CONFIG_MODE_Pos
)
&
SAADC_CH_CONFIG_MODE_Msk
);
//configure Channel 0 to use A0 as positive, A1 as negative
NRF_SAADC
->
CH
[
0
].
PSELP
=
SAADC_CH_PSELP_PSELP_AnalogInput0
;
NRF_SAADC
->
CH
[
0
].
PSELN
=
SAADC_CH_PSELP_PSELP_AnalogInput1
;
//set channel 1 resistor network, gain, reference, sample time, and mode
NRF_SAADC
->
CH
[
1
].
CONFIG
=
((
SAADC_CH_CONFIG_RESP_Bypass
<<
SAADC_CH_CONFIG_RESP_Pos
)
&
SAADC_CH_CONFIG_RESP_Msk
)
|
((
SAADC_CH_CONFIG_RESP_Bypass
<<
SAADC_CH_CONFIG_RESN_Pos
)
&
SAADC_CH_CONFIG_RESN_Msk
)
|
((
SAADC_CH_CONFIG_GAIN_Gain4
<<
SAADC_CH_CONFIG_GAIN_Pos
)
&
SAADC_CH_CONFIG_GAIN_Msk
)
|
((
SAADC_CH_CONFIG_REFSEL_Internal
<<
SAADC_CH_CONFIG_REFSEL_Pos
)
&
SAADC_CH_CONFIG_REFSEL_Msk
)
|
((
SAADC_CH_CONFIG_TACQ_5us
<<
SAADC_CH_CONFIG_TACQ_Pos
)
&
SAADC_CH_CONFIG_TACQ_Msk
)
|
((
SAADC_CH_CONFIG_BURST_Disabled
<<
SAADC_CH_CONFIG_BURST_Pos
)
&
SAADC_CH_CONFIG_BURST_Msk
)
|
((
SAADC_CH_CONFIG_MODE_Diff
<<
SAADC_CH_CONFIG_MODE_Pos
)
&
SAADC_CH_CONFIG_MODE_Msk
);
//configure Channel 1 to use A2 as positive, A4 as negative
NRF_SAADC
->
CH
[
1
].
PSELP
=
SAADC_CH_PSELP_PSELP_AnalogInput2
;
NRF_SAADC
->
CH
[
1
].
PSELN
=
SAADC_CH_PSELP_PSELP_AnalogInput4
;
}
void
setup
(){
//start task
NRF_SAADC
->
TASKS_START
=
0x01UL
;
while
(
!
NRF_SAADC
->
EVENTS_STARTED
);
NRF_SAADC
->
EVENTS_STARTED
=
0x00UL
;
for
(
int
i
=
0
;
i
<
N_SAMPLES
;
i
++
){
//sample task channel 0
NRF_SAADC
->
TASKS_SAMPLE
=
0x01UL
;
while
(
!
NRF_SAADC
->
EVENTS_DONE
);
NRF_SAADC
->
EVENTS_DONE
=
0x00UL
;
//sample task channel 1
NRF_SAADC
->
TASKS_SAMPLE
=
0x01UL
;
while
(
!
NRF_SAADC
->
EVENTS_DONE
);
NRF_SAADC
->
EVENTS_DONE
=
0x00UL
;
}
NRF_SAADC
->
TASKS_STOP
=
0x01UL
;
while
(
!
NRF_SAADC
->
EVENTS_STOPPED
);
NRF_SAADC
->
EVENTS_STOPPED
=
0x00UL
;
}
void
loop
()
{}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment