forked from espressif/esp-idf
Merge branch 'bugfix/adc_oneshot_error_after_continuous' into 'master'
fix(adc): fix adc oneshot error after continuous Closes IDFGH-13620 See merge request espressif/esp-idf!36077
This commit is contained in:
@@ -126,6 +126,7 @@ esp_err_t adc_oneshot_new_unit(const adc_oneshot_unit_init_cfg_t *init_config, a
|
|||||||
};
|
};
|
||||||
adc_oneshot_hal_init(&(unit->hal), &config);
|
adc_oneshot_hal_init(&(unit->hal), &config);
|
||||||
|
|
||||||
|
#if SOC_ADC_DIG_CTRL_SUPPORTED && !SOC_ADC_RTC_CTRL_SUPPORTED
|
||||||
//To enable the APB_SARADC periph if needed
|
//To enable the APB_SARADC periph if needed
|
||||||
_lock_acquire(&s_ctx.mutex);
|
_lock_acquire(&s_ctx.mutex);
|
||||||
s_ctx.apb_periph_ref_cnts++;
|
s_ctx.apb_periph_ref_cnts++;
|
||||||
@@ -133,6 +134,7 @@ esp_err_t adc_oneshot_new_unit(const adc_oneshot_unit_init_cfg_t *init_config, a
|
|||||||
adc_apb_periph_claim();
|
adc_apb_periph_claim();
|
||||||
}
|
}
|
||||||
_lock_release(&s_ctx.mutex);
|
_lock_release(&s_ctx.mutex);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (init_config->ulp_mode == ADC_ULP_MODE_DISABLE) {
|
if (init_config->ulp_mode == ADC_ULP_MODE_DISABLE) {
|
||||||
sar_periph_ctrl_adc_oneshot_power_acquire();
|
sar_periph_ctrl_adc_oneshot_power_acquire();
|
||||||
@@ -243,6 +245,10 @@ esp_err_t adc_oneshot_del_unit(adc_oneshot_unit_handle_t handle)
|
|||||||
bool success_free = s_adc_unit_free(handle->unit_id);
|
bool success_free = s_adc_unit_free(handle->unit_id);
|
||||||
ESP_RETURN_ON_FALSE(success_free, ESP_ERR_NOT_FOUND, TAG, "adc%"PRId32" isn't in use", handle->unit_id + 1);
|
ESP_RETURN_ON_FALSE(success_free, ESP_ERR_NOT_FOUND, TAG, "adc%"PRId32" isn't in use", handle->unit_id + 1);
|
||||||
|
|
||||||
|
#if ADC_LL_POWER_MANAGE_SUPPORTED
|
||||||
|
adc_ll_set_power_manage(handle->unit_id, ADC_LL_POWER_SW_OFF);
|
||||||
|
#endif
|
||||||
|
|
||||||
_lock_acquire(&s_ctx.mutex);
|
_lock_acquire(&s_ctx.mutex);
|
||||||
s_ctx.units[handle->unit_id] = NULL;
|
s_ctx.units[handle->unit_id] = NULL;
|
||||||
_lock_release(&s_ctx.mutex);
|
_lock_release(&s_ctx.mutex);
|
||||||
|
@@ -58,6 +58,10 @@ void adc_oneshot_hal_setup(adc_oneshot_hal_ctx_t *hal, adc_channel_t chan)
|
|||||||
s_disable_dac(hal, chan);
|
s_disable_dac(hal, chan);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ADC_LL_POWER_MANAGE_SUPPORTED
|
||||||
|
adc_ll_set_power_manage(unit, ADC_LL_POWER_SW_ON);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if SOC_ADC_DIG_CTRL_SUPPORTED && !SOC_ADC_RTC_CTRL_SUPPORTED
|
#if SOC_ADC_DIG_CTRL_SUPPORTED && !SOC_ADC_RTC_CTRL_SUPPORTED
|
||||||
adc_ll_digi_clk_sel(hal->clk_src);
|
adc_ll_digi_clk_sel(hal->clk_src);
|
||||||
adc_ll_digi_controller_clk_div(ADC_LL_CLKM_DIV_NUM_DEFAULT, ADC_LL_CLKM_DIV_A_DEFAULT, ADC_LL_CLKM_DIV_B_DEFAULT);
|
adc_ll_digi_controller_clk_div(ADC_LL_CLKM_DIV_NUM_DEFAULT, ADC_LL_CLKM_DIV_A_DEFAULT, ADC_LL_CLKM_DIV_B_DEFAULT);
|
||||||
|
Reference in New Issue
Block a user