#include #include "nrf_log.h" #include "nrf_log_ctrl.h" #include "nrf_drv_saadc.h" #include "adc.h" #define SAMPLES_IN_BUFFER 1 //Number of SAADC samples in RAM before returning a SAADC event. Do not change this constant for low power SAADC static nrf_saadc_value_t m_buffer_pool[2][SAMPLES_IN_BUFFER]; static uint32_t m_adc_evt_counter; void HardFault_Handler(void); /******************************************************************************************************************************************************************************************* * @brief callback function for the ADC ******************************************************************************************************************************************************************************************/ void saadc_callback(nrf_drv_saadc_evt_t const * p_event) { if (p_event->type == NRF_DRV_SAADC_EVT_DONE) { ret_code_t err_code; err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer, SAMPLES_IN_BUFFER); APP_ERROR_CHECK(err_code); NRF_LOG_INFO("ADC event number: %d\r\n",(int)m_adc_evt_counter); NRF_LOG_FLUSH(); for (int i = 0; i < SAMPLES_IN_BUFFER; i++) { NRF_LOG_INFO("%d\r\n", p_event->data.done.p_buffer[i]); NRF_LOG_FLUSH(); } m_adc_evt_counter++; nrf_drv_saadc_uninit(); NRF_SAADC->INTENCLR = (SAADC_INTENCLR_END_Clear << SAADC_INTENCLR_END_Pos); NVIC_ClearPendingIRQ(SAADC_IRQn); } } /******************************************************************************************************************************************************************************************* * @brief Initialize the adc ******************************************************************************************************************************************************************************************/ void saadc_init(void) { static ret_code_t err_code; nrf_saadc_channel_config_t channel_config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN3); channel_config.gain = NRF_SAADC_GAIN1_6; // 1/6 divider so iput range is 0.0 - 3.6V with the internal reference of 0.6V channel_config.mode = NRF_SAADC_MODE_SINGLE_ENDED; err_code = nrf_drv_saadc_init(NULL, saadc_callback); APP_ERROR_CHECK(err_code); err_code = nrf_drv_saadc_channel_init(0, &channel_config); APP_ERROR_CHECK(err_code); err_code = nrf_drv_saadc_buffer_convert(m_buffer_pool[0], SAMPLES_IN_BUFFER); APP_ERROR_CHECK(err_code); err_code = nrf_drv_saadc_buffer_convert(m_buffer_pool[1], SAMPLES_IN_BUFFER); APP_ERROR_CHECK(err_code); }