|
|
|
@ -36,12 +36,12 @@
|
|
|
|
|
|
|
|
|
|
void analogin_init(void) {
|
|
|
|
|
// Calibrate the ADC once, on startup.
|
|
|
|
|
nrf_saadc_enable();
|
|
|
|
|
nrf_saadc_event_clear(NRF_SAADC_EVENT_CALIBRATEDONE);
|
|
|
|
|
nrf_saadc_task_trigger(NRF_SAADC_TASK_CALIBRATEOFFSET);
|
|
|
|
|
while (nrf_saadc_event_check(NRF_SAADC_EVENT_CALIBRATEDONE) == 0) { }
|
|
|
|
|
nrf_saadc_event_clear(NRF_SAADC_EVENT_CALIBRATEDONE);
|
|
|
|
|
nrf_saadc_disable();
|
|
|
|
|
nrf_saadc_enable(NRF_SAADC);
|
|
|
|
|
nrf_saadc_event_clear(NRF_SAADC, NRF_SAADC_EVENT_CALIBRATEDONE);
|
|
|
|
|
nrf_saadc_task_trigger(NRF_SAADC, NRF_SAADC_TASK_CALIBRATEOFFSET);
|
|
|
|
|
while (nrf_saadc_event_check(NRF_SAADC, NRF_SAADC_EVENT_CALIBRATEDONE) == 0) { }
|
|
|
|
|
nrf_saadc_event_clear(NRF_SAADC, NRF_SAADC_EVENT_CALIBRATEDONE);
|
|
|
|
|
nrf_saadc_disable(NRF_SAADC);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void common_hal_analogio_analogin_construct(analogio_analogin_obj_t *self, const mcu_pin_obj_t *pin) {
|
|
|
|
@ -81,34 +81,33 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
|
|
|
|
|
.reference = NRF_SAADC_REFERENCE_VDD4,
|
|
|
|
|
.acq_time = NRF_SAADC_ACQTIME_3US,
|
|
|
|
|
.mode = NRF_SAADC_MODE_SINGLE_ENDED,
|
|
|
|
|
.burst = NRF_SAADC_BURST_DISABLED,
|
|
|
|
|
.pin_p = self->pin->adc_channel,
|
|
|
|
|
.pin_n = self->pin->adc_channel,
|
|
|
|
|
.burst = NRF_SAADC_BURST_DISABLED
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
nrf_saadc_resolution_set(NRF_SAADC_RESOLUTION_14BIT);
|
|
|
|
|
nrf_saadc_oversample_set(NRF_SAADC_OVERSAMPLE_DISABLED);
|
|
|
|
|
nrf_saadc_enable();
|
|
|
|
|
nrf_saadc_resolution_set(NRF_SAADC, NRF_SAADC_RESOLUTION_14BIT);
|
|
|
|
|
nrf_saadc_oversample_set(NRF_SAADC, NRF_SAADC_OVERSAMPLE_DISABLED);
|
|
|
|
|
nrf_saadc_enable(NRF_SAADC);
|
|
|
|
|
|
|
|
|
|
for (uint32_t i = 0; i < NRF_SAADC_CHANNEL_COUNT; i++)
|
|
|
|
|
nrf_saadc_channel_input_set(i, NRF_SAADC_INPUT_DISABLED, NRF_SAADC_INPUT_DISABLED);
|
|
|
|
|
for (uint32_t i = 0; i < SAADC_CH_NUM; i++)
|
|
|
|
|
nrf_saadc_channel_input_set(NRF_SAADC, i, NRF_SAADC_INPUT_DISABLED, NRF_SAADC_INPUT_DISABLED);
|
|
|
|
|
|
|
|
|
|
nrf_saadc_channel_init(CHANNEL_NO, &config);
|
|
|
|
|
nrf_saadc_buffer_init(&value, 1);
|
|
|
|
|
nrf_saadc_channel_init(NRF_SAADC, CHANNEL_NO, &config);
|
|
|
|
|
nrf_saadc_channel_input_set(NRF_SAADC, CHANNEL_NO, self->pin->adc_channel, self->pin->adc_channel);
|
|
|
|
|
nrf_saadc_buffer_init(NRF_SAADC, &value, 1);
|
|
|
|
|
|
|
|
|
|
nrf_saadc_task_trigger(NRF_SAADC_TASK_START);
|
|
|
|
|
while (nrf_saadc_event_check(NRF_SAADC_EVENT_STARTED) == 0);
|
|
|
|
|
nrf_saadc_event_clear(NRF_SAADC_EVENT_STARTED);
|
|
|
|
|
nrf_saadc_task_trigger(NRF_SAADC, NRF_SAADC_TASK_START);
|
|
|
|
|
while (nrf_saadc_event_check(NRF_SAADC, NRF_SAADC_EVENT_STARTED) == 0);
|
|
|
|
|
nrf_saadc_event_clear(NRF_SAADC, NRF_SAADC_EVENT_STARTED);
|
|
|
|
|
|
|
|
|
|
nrf_saadc_task_trigger(NRF_SAADC_TASK_SAMPLE);
|
|
|
|
|
while (nrf_saadc_event_check(NRF_SAADC_EVENT_END) == 0);
|
|
|
|
|
nrf_saadc_event_clear(NRF_SAADC_EVENT_END);
|
|
|
|
|
nrf_saadc_task_trigger(NRF_SAADC, NRF_SAADC_TASK_SAMPLE);
|
|
|
|
|
while (nrf_saadc_event_check(NRF_SAADC, NRF_SAADC_EVENT_END) == 0);
|
|
|
|
|
nrf_saadc_event_clear(NRF_SAADC, NRF_SAADC_EVENT_END);
|
|
|
|
|
|
|
|
|
|
nrf_saadc_task_trigger(NRF_SAADC_TASK_STOP);
|
|
|
|
|
while (nrf_saadc_event_check(NRF_SAADC_EVENT_STOPPED) == 0);
|
|
|
|
|
nrf_saadc_event_clear(NRF_SAADC_EVENT_STOPPED);
|
|
|
|
|
nrf_saadc_task_trigger(NRF_SAADC, NRF_SAADC_TASK_STOP);
|
|
|
|
|
while (nrf_saadc_event_check(NRF_SAADC, NRF_SAADC_EVENT_STOPPED) == 0);
|
|
|
|
|
nrf_saadc_event_clear(NRF_SAADC, NRF_SAADC_EVENT_STOPPED);
|
|
|
|
|
|
|
|
|
|
nrf_saadc_disable();
|
|
|
|
|
nrf_saadc_disable(NRF_SAADC);
|
|
|
|
|
|
|
|
|
|
if (value < 0)
|
|
|
|
|
value = 0;
|
|
|
|
|