Hello to everyone! Please, tell me, why ADC may can't be rightly initialised after BLE stack init? It's happen only when I use Optimisation level 0 instead 3. Thank you so much!
Hello to everyone! Please, tell me, why ADC may can't be rightly initialised after BLE stack init? It's happen only when I use Optimisation level 0 instead 3. Thank you so much!
Are you using ADC driver from SDK? Please provide us some code that causes the issue.
This is an initialisation of ADC:
nrf_gpio_cfg_output(PIN_BATTERY_CHARGE_ON);
nrf_gpio_pin_set(PIN_BATTERY_CHARGE_ON);
/* Enable interrupt on ADC sample ready event*/
NRF_ADC->INTENSET = ADC_INTENSET_END_Msk;
sd_nvic_SetPriority(ADC_IRQn, NRF_APP_PRIORITY_LOW);
sd_nvic_EnableIRQ(ADC_IRQn);
NRF_ADC->CONFIG = (ADC_CONFIG_EXTREFSEL_None << ADC_CONFIG_EXTREFSEL_Pos) | (ADC_CONFIG_PSEL_AnalogInput6 << ADC_CONFIG_PSEL_Pos) | (ADC_CONFIG_REFSEL_VBG << ADC_CONFIG_REFSEL_Pos) | (ADC_CONFIG_INPSEL_AnalogInputTwoThirdsPrescaling << ADC_CONFIG_INPSEL_Pos) | (ADC_CONFIG_RES_8bit << ADC_CONFIG_RES_Pos);
/* Enable ADC*/
NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Enabled;
and this is a place when I'm try to get a data from ADC
uint32_t p_is_running = 0;
sd_clock_hfclk_request();
while(! p_is_running) { //wait for the hfclk to be available
sd_clock_hfclk_is_running((&p_is_running));
}
nrf_gpio_cfg_output(PIN_BATTERY_CHARGE_ON);
nrf_gpio_pin_set(PIN_BATTERY_CHARGE_ON);
NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Enabled;
NRF_ADC->TASKS_START = 1; //Start ADC sampling
while (NRF_ADC->EVENTS_END == 0);
}
It's run on while (NRF_ADC->EVENTS_END == 0); again and again and in some runs go to HardFaultHandler
Hi
Thank you for your question
I see that you initialize a pin as output in your initialization routine, but you do it again in your second code block. You should only initialize the pin once. You should also enable the ADC only once.