mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-31 19:24:33 +02:00
adc: fix adc filter acquire logic
This commit is contained in:
@@ -21,8 +21,8 @@ static portMUX_TYPE s_filter_spinlock = portMUX_INITIALIZER_UNLOCKED;
|
|||||||
|
|
||||||
|
|
||||||
#if SOC_ADC_DIG_IIR_FILTER_UNIT_BINDED
|
#if SOC_ADC_DIG_IIR_FILTER_UNIT_BINDED
|
||||||
static atomic_bool s_adc_filter_claimed[SOC_ADC_PERIPH_NUM] = {ATOMIC_VAR_INIT(false),
|
static atomic_bool s_adc_filter_claimed[SOC_ADC_DIGI_IIR_FILTER_NUM] = {ATOMIC_VAR_INIT(false),
|
||||||
#if (SOC_ADC_PERIPH_NUM >= 2)
|
#if (SOC_ADC_DIGI_IIR_FILTER_NUM >= 2)
|
||||||
ATOMIC_VAR_INIT(false)
|
ATOMIC_VAR_INIT(false)
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@@ -59,16 +59,18 @@ static esp_err_t s_adc_filter_claim(adc_continuous_handle_t handle, adc_iir_filt
|
|||||||
{
|
{
|
||||||
(void)unit;
|
(void)unit;
|
||||||
assert(handle && filter_ctx);
|
assert(handle && filter_ctx);
|
||||||
|
|
||||||
|
portENTER_CRITICAL(&s_filter_spinlock);
|
||||||
for (int i = 0; i < SOC_ADC_DIGI_IIR_FILTER_NUM; i++) {
|
for (int i = 0; i < SOC_ADC_DIGI_IIR_FILTER_NUM; i++) {
|
||||||
portENTER_CRITICAL(&s_filter_spinlock);
|
|
||||||
bool found = !handle->iir_filter[i];
|
bool found = !handle->iir_filter[i];
|
||||||
handle->iir_filter[i] = filter_ctx;
|
|
||||||
filter_ctx->filter_id = i;
|
|
||||||
portEXIT_CRITICAL(&s_filter_spinlock);
|
|
||||||
if (found) {
|
if (found) {
|
||||||
|
handle->iir_filter[i] = filter_ctx;
|
||||||
|
filter_ctx->filter_id = i;
|
||||||
|
portEXIT_CRITICAL(&s_filter_spinlock);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
portEXIT_CRITICAL(&s_filter_spinlock);
|
||||||
|
|
||||||
return ESP_ERR_NOT_FOUND;
|
return ESP_ERR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user