/**@brief Function for configuring ADC to do battery level conversion. */ static void adc_configure(void) { #ifdef NRF51 nrf_adc_config_t adc_config = NRF_ADC_CONFIG_DEFAULT; adc_config.scaling = NRF_ADC_CONFIG_SCALING_SUPPLY_ONE_THIRD; nrf_adc_configure(&adc_config); nrf_adc_int_enable(ADC_INTENSET_END_Msk); NVIC_EnableIRQ(ADC_IRQn); NVIC_SetPriority(ADC_IRQn, 3); nrf_adc_input_select(NRF_ADC_CONFIG_INPUT_DISABLED); #else // NRF52 ret_code_t err_code = nrf_drv_saadc_init(NULL, saadc_event_handler); APP_ERROR_CHECK(err_code); nrf_saadc_channel_config_t config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_VDD); err_code = nrf_drv_saadc_channel_init(0,&config); APP_ERROR_CHECK(err_code); err_code = nrf_drv_saadc_buffer_convert(&adc_buf[0],1); APP_ERROR_CHECK(err_code); err_code = nrf_drv_saadc_buffer_convert(&adc_buf[1],1); APP_ERROR_CHECK(err_code); #endif //NRF51 }
/**@brief Function for handling the Battery measurement timer timeout. * * @details This function will be called each time the battery level measurement timer expires. * * @param[in] p_context Pointer used for passing some arbitrary information (context) from the * app_start_timer() call to the timeout handler. */ static void battery_level_meas_timeout_handler(void * p_context) { UNUSED_PARAMETER(p_context); nrf_adc_int_disable(ADC_INTENSET_END_Enabled << ADC_INTENSET_END_Pos); battery_level_update(); nrf_adc_int_enable(ADC_INTENSET_END_Enabled << ADC_INTENSET_END_Pos); }
static void adc_config(void) { const nrf_adc_config_t nrf_adc_config = NRF_ADC_CONFIG_DEFAULT; nrf_adc_configure((nrf_adc_config_t *)&nrf_adc_config); nrf_adc_input_select(NRF_ADC_CONFIG_INPUT_4); nrf_adc_int_enable(ADC_INTENSET_END_Enabled << ADC_INTENSET_END_Pos); NVIC_SetPriority(ADC_IRQn, NRF_APP_PRIORITY_HIGH); NVIC_EnableIRQ(ADC_IRQn); }
/** * @brief ADC initialization. */ void adc_config(void) { const nrf_adc_config_t nrf_adc_config = NRF_ADC_CONFIG_DEFAULT; // Initialize and configure ADC nrf_adc_configure( (nrf_adc_config_t *)&nrf_adc_config); nrf_adc_input_select(NRF_ADC_CONFIG_INPUT_7); nrf_adc_int_enable(ADC_INTENSET_END_Enabled << ADC_INTENSET_END_Pos); NVIC_SetPriority(ADC_IRQn, NRF_APP_PRIORITY_HIGH); NVIC_EnableIRQ(ADC_IRQn); //printf("\n\rADC Configured Corectly\r\n"); }
/** * @brief ADC initialization. */ static void adc_initialize(void) { const nrf_adc_config_t nrf_adc_config = { NRF_ADC_CONFIG_RES_10BIT, NRF_ADC_CONFIG_SCALING_SUPPLY_ONE_THIRD, NRF_ADC_CONFIG_REF_VBG }; // Initialize and configure ADC nrf_adc_configure( (nrf_adc_config_t *)&nrf_adc_config); nrf_adc_int_enable(ADC_INTENSET_END_Enabled << ADC_INTENSET_END_Pos); NVIC_SetPriority(ADC_IRQn, APP_IRQ_PRIORITY_LOW); NVIC_EnableIRQ(ADC_IRQn); }
nrfx_err_t nrfx_adc_buffer_convert(nrf_adc_value_t * buffer, uint16_t size) { NRFX_ASSERT(m_cb.state != NRFX_DRV_STATE_UNINITIALIZED); nrfx_err_t err_code; NRFX_LOG_INFO("Number of samples requested to convert: %d.", size); if (m_cb.state == NRFX_DRV_STATE_POWERED_ON) { err_code = NRFX_ERROR_BUSY; NRFX_LOG_WARNING("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code)); return err_code; } else { m_cb.state = NRFX_DRV_STATE_POWERED_ON; m_cb.p_current_conv = m_cb.p_head; m_cb.size = size; m_cb.idx = 0; m_cb.p_buffer = buffer; nrf_adc_config_set(m_cb.p_current_conv->config.data); nrf_adc_event_clear(NRF_ADC_EVENT_END); nrf_adc_enable(); if (m_cb.event_handler) { nrf_adc_int_enable(NRF_ADC_INT_END_MASK); } else { while (1) { while (!nrf_adc_event_check(NRF_ADC_EVENT_END)){} if (adc_sample_process()) { m_cb.state = NRFX_DRV_STATE_INITIALIZED; break; } } } err_code = NRFX_SUCCESS; NRFX_LOG_INFO("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code)); return err_code; } }
/** * @brief ADC initialization. */ static void adc_config(void) { const nrf_adc_config_t nrf_adc_config = NRF_ADC_CONFIG_DEFAULT; // Initialize and configure ADC nrf_adc_configure( (nrf_adc_config_t *)&nrf_adc_config); #if defined(BOARD_BVMCN5102) nrf_adc_input_select(NRF_ADC_CONFIG_INPUT_3); #elif defined(BOARD_BLENANO) nrf_adc_input_select(NRF_ADC_CONFIG_INPUT_5); #else # error unknown board #endif nrf_adc_int_enable(ADC_INTENSET_END_Enabled << ADC_INTENSET_END_Pos); NVIC_SetPriority(ADC_IRQn, NRF_APP_PRIORITY_LOW); NVIC_EnableIRQ(ADC_IRQn); }
nrfx_err_t nrfx_adc_sample_convert(nrfx_adc_channel_t const * const p_channel, nrf_adc_value_t * p_value) { nrfx_err_t err_code; NRFX_ASSERT(m_cb.state != NRFX_DRV_STATE_UNINITIALIZED); if (m_cb.state == NRFX_DRV_STATE_POWERED_ON) { err_code = NRFX_ERROR_BUSY; NRFX_LOG_WARNING("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code)); return err_code; } else { m_cb.state = NRFX_DRV_STATE_POWERED_ON; nrf_adc_config_set(p_channel->config.data); nrf_adc_enable(); nrf_adc_int_disable(NRF_ADC_INT_END_MASK); nrf_adc_start(); if (p_value) { while (!nrf_adc_event_check(NRF_ADC_EVENT_END)) {} nrf_adc_event_clear(NRF_ADC_EVENT_END); *p_value = (nrf_adc_value_t)nrf_adc_result_get(); nrf_adc_disable(); m_cb.state = NRFX_DRV_STATE_INITIALIZED; } else { NRFX_ASSERT(m_cb.event_handler); m_cb.p_buffer = NULL; nrf_adc_int_enable(NRF_ADC_INT_END_MASK); } err_code = NRFX_SUCCESS; NRFX_LOG_INFO("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code)); return err_code; } }
/**@brief Function for configuring ADC to do battery level conversion. */ static void adc_configure(void) { uint32_t err_code; nrf_adc_config_t adc_config = NRF_ADC_CONFIG_DEFAULT; // Configure ADC adc_config.reference = NRF_ADC_CONFIG_REF_VBG; adc_config.resolution = NRF_ADC_CONFIG_RES_8BIT; adc_config.scaling = NRF_ADC_CONFIG_SCALING_SUPPLY_ONE_THIRD; nrf_adc_configure(&adc_config); // Enable ADC interrupt nrf_adc_int_enable(ADC_INTENSET_END_Msk); err_code = sd_nvic_ClearPendingIRQ(ADC_IRQn); APP_ERROR_CHECK(err_code); err_code = sd_nvic_SetPriority(ADC_IRQn, NRF_APP_PRIORITY_LOW); APP_ERROR_CHECK(err_code); err_code = sd_nvic_EnableIRQ(ADC_IRQn); APP_ERROR_CHECK(err_code); }