mirror of
https://github.com/espressif/esp-idf.git
synced 2025-10-05 04:49:21 +00:00
refactor(drivers): refactor the iram-safe option of the gdma peripherals
Closes https://github.com/espressif/esp-idf/issues/15771
This commit is contained in:
@@ -10,7 +10,7 @@ menu "ADC and ADC Calibration"
|
||||
depends on SOC_ADC_DMA_SUPPORTED
|
||||
bool "ADC continuous mode driver ISR IRAM-Safe"
|
||||
default n
|
||||
select GDMA_ISR_IRAM_SAFE if SOC_ADC_DMA_SUPPORTED && SOC_GDMA_SUPPORTED
|
||||
select GDMA_ISR_HANDLER_IN_IRAM if SOC_ADC_DMA_SUPPORTED && SOC_GDMA_SUPPORTED
|
||||
help
|
||||
Ensure the ADC continuous mode ISR is IRAM-Safe. When enabled, the ISR handler
|
||||
will be available when the cache is disabled.
|
||||
|
@@ -30,6 +30,9 @@ esp_err_t adc_dma_init(adc_dma_t *adc_dma)
|
||||
//alloc rx gdma channel
|
||||
gdma_channel_alloc_config_t rx_alloc_config = {
|
||||
.direction = GDMA_CHANNEL_DIRECTION_RX,
|
||||
#if CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE
|
||||
.flags.isr_cache_safe = true,
|
||||
#endif
|
||||
};
|
||||
ret = gdma_new_ahb_channel(&rx_alloc_config, &(adc_dma->gdma_chan));
|
||||
if (ret != ESP_OK) {
|
||||
|
@@ -23,5 +23,5 @@ entries:
|
||||
if SOC_ADC_CALIBRATION_V1_SUPPORTED = y:
|
||||
adc_hal_common: adc_hal_set_calibration_param (noflash)
|
||||
adc_hal_common: adc_hal_calibration_init (noflash)
|
||||
if ADC_CONTINUOUS_ISR_IRAM_SAFE = y || GDMA_ISR_IRAM_SAFE = y:
|
||||
if ADC_CONTINUOUS_ISR_IRAM_SAFE = y:
|
||||
adc_hal: adc_hal_get_reading_result (noflash)
|
||||
|
@@ -142,7 +142,7 @@ TEST_CASE("ADC oneshot fast work with ISR and Flash", "[adc_oneshot]")
|
||||
}
|
||||
#endif //#if CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM && CONFIG_GPTIMER_ISR_IRAM_SAFE
|
||||
|
||||
#if CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE || CONFIG_GDMA_ISR_IRAM_SAFE
|
||||
#if CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE
|
||||
#include "esp_adc/adc_continuous.h"
|
||||
/*---------------------------------------------------------------
|
||||
ADC continuous work with cache safe ISR
|
||||
@@ -249,7 +249,7 @@ TEST_CASE("ADC continuous work with ISR and Flash", "[adc_continuous]")
|
||||
TEST_ESP_OK(adc_continuous_deinit(handle));
|
||||
|
||||
}
|
||||
#endif //#if CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE || CONFIG_GDMA_ISR_IRAM_SAFE
|
||||
#endif //#if CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE
|
||||
|
||||
static void IRAM_ATTR NOINLINE_ATTR s_test_cache_disable_period_us(test_adc_iram_ctx_t *ctx, uint32_t period_us)
|
||||
{
|
||||
|
@@ -36,17 +36,3 @@ def test_adc(dut: Dut) -> None:
|
||||
)
|
||||
def test_adc_esp32c2_xtal_26mhz(dut: Dut) -> None:
|
||||
dut.run_all_single_board_cases(timeout=120, reset=True)
|
||||
|
||||
|
||||
@pytest.mark.esp32s3
|
||||
@pytest.mark.esp32c3
|
||||
@pytest.mark.esp32c6
|
||||
@pytest.mark.esp32h2
|
||||
@pytest.mark.esp32c5
|
||||
@pytest.mark.esp32p4
|
||||
@pytest.mark.adc
|
||||
@pytest.mark.parametrize('config', [
|
||||
'gdma_iram_safe',
|
||||
], indirect=True)
|
||||
def test_adc_gdma_iram(dut: Dut) -> None:
|
||||
dut.run_all_single_board_cases(timeout=120, reset=True)
|
||||
|
@@ -1,7 +0,0 @@
|
||||
CONFIG_COMPILER_DUMP_RTL_FILES=y
|
||||
CONFIG_GDMA_ISR_IRAM_SAFE=y
|
||||
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
|
||||
# silent the error check, as the error string are stored in rodata, causing RTL check failure
|
||||
CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT=y
|
||||
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y
|
||||
CONFIG_HAL_ASSERTION_SILENT=y
|
Reference in New Issue
Block a user