From ed98062c668a689e1602433e608a78c5847c9a87 Mon Sep 17 00:00:00 2001 From: Armando Date: Thu, 8 Sep 2022 19:20:52 +0800 Subject: [PATCH] esp_adc: refacotr tests for all supported attenuations --- .../esp_adc/test_apps/adc/main/test_adc.c | 15 +++-- .../test_apps/adc/main/test_adc_performance.c | 40 +++++------- .../test_apps/adc/main/test_common_adc.c | 10 +++ .../test_apps/adc/main/test_common_adc.h | 62 ++++++++++++------- 4 files changed, 71 insertions(+), 56 deletions(-) diff --git a/components/esp_adc/test_apps/adc/main/test_adc.c b/components/esp_adc/test_apps/adc/main/test_adc.c index 340965d5ad..d4fc8409db 100644 --- a/components/esp_adc/test_apps/adc/main/test_adc.c +++ b/components/esp_adc/test_apps/adc/main/test_adc.c @@ -132,7 +132,6 @@ TEST_CASE("ADC oneshot high/low test", "[adc_oneshot]") static void s_adc_oneshot_with_sleep(adc_unit_t unit_id, adc_channel_t channel) { - adc_atten_t atten[SOC_ADC_ATTEN_NUM] = {ADC_ATTEN_DB_0, ADC_ATTEN_DB_2_5, ADC_ATTEN_DB_6, ADC_ATTEN_DB_11}; //-------------ADC Init---------------// adc_oneshot_unit_handle_t adc_handle; adc_oneshot_unit_init_cfg_t init_config = { @@ -148,20 +147,20 @@ static void s_adc_oneshot_with_sleep(adc_unit_t unit_id, adc_channel_t channel) //-------------ADC Calibration Init---------------// bool do_calibration = false; - adc_cali_handle_t cali_handle[SOC_ADC_ATTEN_NUM] = {}; - for (int i = 0; i < SOC_ADC_ATTEN_NUM; i++) { - do_calibration = test_adc_calibration_init(unit_id, i, SOC_ADC_RTC_MAX_BITWIDTH, &cali_handle[i]); + adc_cali_handle_t cali_handle[TEST_ATTEN_NUMS] = {}; + for (int i = 0; i < TEST_ATTEN_NUMS; i++) { + do_calibration = test_adc_calibration_init(unit_id, g_test_atten[i], SOC_ADC_RTC_MAX_BITWIDTH, &cali_handle[i]); } if (!do_calibration) { ESP_LOGW(TAG, "No efuse bits burnt, only test the regi2c analog register values"); } - for (int i = 0; i < SOC_ADC_ATTEN_NUM; i++) { + for (int i = 0; i < TEST_ATTEN_NUMS; i++) { //-------------ADC Channel Config---------------// - config.atten = atten[i]; + config.atten = g_test_atten[i]; TEST_ESP_OK(adc_oneshot_config_channel(adc_handle, channel, &config)); - printf("Test with atten: %d\n", atten[i]); + printf("Test with atten: %d\n", g_test_atten[i]); //---------------------------------Before Sleep-----------------------------------// printf("Before Light Sleep\n"); @@ -234,7 +233,7 @@ static void s_adc_oneshot_with_sleep(adc_unit_t unit_id, adc_channel_t channel) } TEST_ESP_OK(adc_oneshot_del_unit(adc_handle)); - for (int i = 0; i < SOC_ADC_ATTEN_NUM; i++) { + for (int i = 0; i < TEST_ATTEN_NUMS; i++) { if (cali_handle[i]) { test_adc_calibration_deinit(cali_handle[i]); } diff --git a/components/esp_adc/test_apps/adc/main/test_adc_performance.c b/components/esp_adc/test_apps/adc/main/test_adc_performance.c index d3cf9f462b..314b59aef9 100644 --- a/components/esp_adc/test_apps/adc/main/test_adc_performance.c +++ b/components/esp_adc/test_apps/adc/main/test_adc_performance.c @@ -125,7 +125,6 @@ static void s_print_summary(bool figure) TEST_CASE("ADC1 oneshot raw average / std_deviation", "[adc_oneshot][ignore][manual]") { - adc_atten_t atten[SOC_ADC_ATTEN_NUM] = {ADC_ATTEN_DB_0, ADC_ATTEN_DB_2_5, ADC_ATTEN_DB_6, ADC_ATTEN_DB_11}; adc_channel_t channel = TEST_STD_ADC1_CHANNEL0; int raw = 0; bool print_figure = false; @@ -145,20 +144,20 @@ TEST_CASE("ADC1 oneshot raw average / std_deviation", "[adc_oneshot][ignore][man //-------------ADC Calibration Init---------------// bool do_calibration = false; - adc_cali_handle_t cali_handle[SOC_ADC_ATTEN_NUM] = {}; - for (int i = 0; i < SOC_ADC_ATTEN_NUM; i++) { - do_calibration = test_adc_calibration_init(ADC_UNIT_1, i, ADC_BITWIDTH_DEFAULT, &cali_handle[i]); + adc_cali_handle_t cali_handle[TEST_ATTEN_NUMS] = {}; + for (int i = 0; i < TEST_ATTEN_NUMS; i++) { + do_calibration = test_adc_calibration_init(ADC_UNIT_1, g_test_atten[i], ADC_BITWIDTH_DEFAULT, &cali_handle[i]); } if (!do_calibration) { ESP_LOGW(TAG, "calibration fail, jump calibration\n"); } - for (int i = 0; i < SOC_ADC_ATTEN_NUM; i++) { + for (int i = 0; i < TEST_ATTEN_NUMS; i++) { //-------------ADC1 Channel Config---------------// - config.atten = atten[i]; + config.atten = g_test_atten[i]; TEST_ESP_OK(adc_oneshot_config_channel(adc1_handle, channel, &config)); - ESP_LOGI("TEST_ADC", "Test with atten: %d", atten[i]); + ESP_LOGI("TEST_ADC", "Test with atten: %d", g_test_atten[i]); while (1) { @@ -181,7 +180,7 @@ TEST_CASE("ADC1 oneshot raw average / std_deviation", "[adc_oneshot][ignore][man } TEST_ESP_OK(adc_oneshot_del_unit(adc1_handle)); - for (int i = 0; i < SOC_ADC_ATTEN_NUM; i++) { + for (int i = 0; i < TEST_ATTEN_NUMS; i++) { if (cali_handle[i]) { test_adc_calibration_deinit(cali_handle[i]); } @@ -192,15 +191,7 @@ TEST_CASE("ADC1 oneshot raw average / std_deviation", "[adc_oneshot][ignore][man /*--------------------------------------------------------------- ADC Calibration Speed ---------------------------------------------------------------*/ -#ifdef CONFIG_IDF_TARGET_ESP32 -#define CPU_FREQ_MHZ CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ -#elif CONFIG_IDF_TARGET_ESP32S2 -#define CPU_FREQ_MHZ CONFIG_ESP32S2_DEFAULT_CPU_FREQ_MHZ -#elif CONFIG_IDF_TARGET_ESP32S3 -#define CPU_FREQ_MHZ CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ -#elif CONFIG_IDF_TARGET_ESP32C3 -#define CPU_FREQ_MHZ CONFIG_ESP32C3_DEFAULT_CPU_FREQ_MHZ -#endif +#define CPU_FREQ_MHZ CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ #define RECORD_TIME_PREPARE() uint32_t __t1, __t2 #define RECORD_TIME_START() do {__t1 = esp_cpu_get_cycle_count();}while(0) @@ -236,9 +227,9 @@ static void s_adc_cali_speed(adc_unit_t unit_id, adc_channel_t channel) { //-------------ADC Calibration Init---------------// bool do_calibration = false; - adc_cali_handle_t cali_handle[SOC_ADC_ATTEN_NUM] = {}; - for (int i = 0; i < SOC_ADC_ATTEN_NUM; i++) { - do_calibration = test_adc_calibration_init(unit_id, i, SOC_ADC_RTC_MAX_BITWIDTH, &cali_handle[i]); + adc_cali_handle_t cali_handle[TEST_ATTEN_NUMS] = {}; + for (int i = 0; i < TEST_ATTEN_NUMS; i++) { + do_calibration = test_adc_calibration_init(unit_id, g_test_atten[i], SOC_ADC_RTC_MAX_BITWIDTH, &cali_handle[i]); } if (!do_calibration) { @@ -246,7 +237,6 @@ static void s_adc_cali_speed(adc_unit_t unit_id, adc_channel_t channel) } else { ESP_LOGI(TAG, "CPU FREQ is %dMHz", CPU_FREQ_MHZ); - adc_atten_t atten[SOC_ADC_ATTEN_NUM] = {ADC_ATTEN_DB_0, ADC_ATTEN_DB_2_5, ADC_ATTEN_DB_6, ADC_ATTEN_DB_11}; uint32_t adc_time_record[4][TIMES_PER_ATTEN] = {}; int adc_raw = 0; @@ -264,12 +254,12 @@ static void s_adc_cali_speed(adc_unit_t unit_id, adc_channel_t channel) }; //atten0 ~ atten3 - for (int i = 0; i < SOC_ADC_ATTEN_NUM; i++) { + for (int i = 0; i < TEST_ATTEN_NUMS; i++) { //-------------ADC Channel Config---------------// - config.atten = atten[i]; + config.atten = g_test_atten[i]; TEST_ESP_OK(adc_oneshot_config_channel(adc_handle, channel, &config)); - ESP_LOGI("TEST_ADC", "Test with atten: %d", atten[i]); + ESP_LOGI("TEST_ADC", "Test with atten: %d", g_test_atten[i]); for (int j = 0; j < TIMES_PER_ATTEN; j++) { TEST_ESP_OK(adc_oneshot_read(adc_handle, channel, &adc_raw)); @@ -279,7 +269,7 @@ static void s_adc_cali_speed(adc_unit_t unit_id, adc_channel_t channel) } TEST_ESP_OK(adc_oneshot_del_unit(adc_handle)); - for (int i = 0; i < SOC_ADC_ATTEN_NUM; i++) { + for (int i = 0; i < TEST_ATTEN_NUMS; i++) { if (cali_handle[i]) { test_adc_calibration_deinit(cali_handle[i]); } diff --git a/components/esp_adc/test_apps/adc/main/test_common_adc.c b/components/esp_adc/test_apps/adc/main/test_common_adc.c index 984ac9516a..aff057286e 100644 --- a/components/esp_adc/test_apps/adc/main/test_common_adc.c +++ b/components/esp_adc/test_apps/adc/main/test_common_adc.c @@ -14,6 +14,16 @@ __attribute__((unused)) static const char *TAG = "TEST_ADC"; +/*--------------------------------------------------------------- + ADC Attenuation +---------------------------------------------------------------*/ +#if CONFIG_IDF_TARGET_ESP32C2 +adc_atten_t g_test_atten[TEST_ATTEN_NUMS] = {ADC_ATTEN_DB_0, ADC_ATTEN_DB_11}; +#else +adc_atten_t g_test_atten[TEST_ATTEN_NUMS] = {ADC_ATTEN_DB_0, ADC_ATTEN_DB_2_5, ADC_ATTEN_DB_6, ADC_ATTEN_DB_11}; +#endif + + /*--------------------------------------------------------------- ADC Calibration ---------------------------------------------------------------*/ diff --git a/components/esp_adc/test_apps/adc/main/test_common_adc.h b/components/esp_adc/test_apps/adc/main/test_common_adc.h index 99b80a0eb1..c72f528386 100644 --- a/components/esp_adc/test_apps/adc/main/test_common_adc.h +++ b/components/esp_adc/test_apps/adc/main/test_common_adc.h @@ -26,29 +26,7 @@ extern "C" { #endif /*--------------------------------------------------------------- - ADC Calibration ----------------------------------------------------------------*/ -/** - * @brief Initialise ADC Calibration - * - * @param[out] out_handle ADC calibration handle - * - * @return - * - True Calibration success - * - False Calibration fail - */ -bool test_adc_calibration_init(adc_unit_t unit, adc_atten_t atten, adc_bitwidth_t bitwidth, adc_cali_handle_t *out_handle); - -/** - * @brief De-initialise ADC Calibration - * - * @param[in] handle ADC calibration handle - */ -void test_adc_calibration_deinit(adc_cali_handle_t handle); - - -/*--------------------------------------------------------------- - ADC GPIO + ADC Level ---------------------------------------------------------------*/ /** * We use weak pulldown, `ADC_TEST_LOW_THRESH` may vary. @@ -94,6 +72,44 @@ void test_adc_calibration_deinit(adc_cali_handle_t handle); #define ADC_TEST_HIGH_THRESH 0 #endif + +/*--------------------------------------------------------------- + ADC Attenuation +---------------------------------------------------------------*/ +#if CONFIG_IDF_TARGET_ESP32C2 +#define TEST_ATTEN_NUMS 2 +extern adc_atten_t g_test_atten[TEST_ATTEN_NUMS]; +#else +#define TEST_ATTEN_NUMS 4 +extern adc_atten_t g_test_atten[TEST_ATTEN_NUMS]; +#endif + + +/*--------------------------------------------------------------- + ADC Calibration +---------------------------------------------------------------*/ +/** + * @brief Initialise ADC Calibration + * + * @param[out] out_handle ADC calibration handle + * + * @return + * - True Calibration success + * - False Calibration fail + */ +bool test_adc_calibration_init(adc_unit_t unit, adc_atten_t atten, adc_bitwidth_t bitwidth, adc_cali_handle_t *out_handle); + +/** + * @brief De-initialise ADC Calibration + * + * @param[in] handle ADC calibration handle + */ +void test_adc_calibration_deinit(adc_cali_handle_t handle); + + +/*--------------------------------------------------------------- + ADC GPIO +---------------------------------------------------------------*/ /** * @brief Set ADC IO level *