mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-25 01:37:22 +00:00
adc: no longer support adc2 oneshot mode on esp32c3
Due to HW limitation, we don't support this anymore. On c3, ADC2 under oneshot mode is not stable. However, you can enable CONFIG_ADC_ONESHOT_FORCE_USE_ADC2_ON_C3 to force use ADC2. Refer to errata to know more details: https://www.espressif.com/sites/default/files/documentation/esp32-s3_errata_en.pdf https://www.espressif.com/sites/default/files/documentation/esp32-c3_errata_en.pdf
This commit is contained in:
@@ -28,14 +28,22 @@ const static char *TAG = "EXAMPLE";
|
||||
#define EXAMPLE_ADC1_CHAN1 ADC_CHANNEL_3
|
||||
#endif
|
||||
|
||||
#if (SOC_ADC_PERIPH_NUM >= 2)
|
||||
#if (SOC_ADC_PERIPH_NUM >= 2) && !CONFIG_IDF_TARGET_ESP32C3
|
||||
/**
|
||||
* On ESP32C3, ADC2 is no longer supported, due to its HW limitation.
|
||||
* Search for errata on espressif website for more details.
|
||||
*/
|
||||
#define EXAMPLE_USE_ADC2 1
|
||||
#endif
|
||||
|
||||
#if EXAMPLE_USE_ADC2
|
||||
//ADC2 Channels
|
||||
#if CONFIG_IDF_TARGET_ESP32
|
||||
#define EXAMPLE_ADC2_CHAN0 ADC_CHANNEL_0
|
||||
#else
|
||||
#define EXAMPLE_ADC2_CHAN0 ADC_CHANNEL_0
|
||||
#endif
|
||||
#endif
|
||||
#endif //#if EXAMPLE_USE_ADC2
|
||||
|
||||
#define EXAMPLE_ADC_ATTEN ADC_ATTEN_DB_11
|
||||
|
||||
@@ -67,7 +75,7 @@ void app_main(void)
|
||||
bool do_calibration1 = example_adc_calibration_init(ADC_UNIT_1, EXAMPLE_ADC_ATTEN, &adc1_cali_handle);
|
||||
|
||||
|
||||
#if (SOC_ADC_PERIPH_NUM >= 2)
|
||||
#if EXAMPLE_USE_ADC2
|
||||
//-------------ADC2 Init---------------//
|
||||
adc_oneshot_unit_handle_t adc2_handle;
|
||||
adc_oneshot_unit_init_cfg_t init_config2 = {
|
||||
@@ -82,7 +90,7 @@ void app_main(void)
|
||||
|
||||
//-------------ADC2 Config---------------//
|
||||
ESP_ERROR_CHECK(adc_oneshot_config_channel(adc2_handle, EXAMPLE_ADC2_CHAN0, &config));
|
||||
#endif //#if (SOC_ADC_PERIPH_NUM >= 2)
|
||||
#endif //#if EXAMPLE_USE_ADC2
|
||||
|
||||
while (1) {
|
||||
ESP_ERROR_CHECK(adc_oneshot_read(adc1_handle, EXAMPLE_ADC1_CHAN0, &adc_raw[0][0]));
|
||||
@@ -101,7 +109,7 @@ void app_main(void)
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
|
||||
#if (SOC_ADC_PERIPH_NUM >= 2)
|
||||
#if EXAMPLE_USE_ADC2
|
||||
ESP_ERROR_CHECK(adc_oneshot_read(adc2_handle, EXAMPLE_ADC2_CHAN0, &adc_raw[1][0]));
|
||||
ESP_LOGI(TAG, "ADC%d Channel[%d] Raw Data: %d", ADC_UNIT_2 + 1, EXAMPLE_ADC2_CHAN0, adc_raw[1][0]);
|
||||
if (do_calibration2) {
|
||||
@@ -109,7 +117,7 @@ void app_main(void)
|
||||
ESP_LOGI(TAG, "ADC%d Channel[%d] Cali Voltage: %d mV", ADC_UNIT_2 + 1, EXAMPLE_ADC2_CHAN0, voltage[1][0]);
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
#endif //#if (SOC_ADC_PERIPH_NUM >= 2)
|
||||
#endif //#if EXAMPLE_USE_ADC2
|
||||
}
|
||||
|
||||
//Tear Down
|
||||
@@ -118,12 +126,12 @@ void app_main(void)
|
||||
example_adc_calibration_deinit(adc1_cali_handle);
|
||||
}
|
||||
|
||||
#if (SOC_ADC_PERIPH_NUM >= 2)
|
||||
#if EXAMPLE_USE_ADC2
|
||||
ESP_ERROR_CHECK(adc_oneshot_del_unit(adc2_handle));
|
||||
if (do_calibration2) {
|
||||
example_adc_calibration_deinit(adc2_cali_handle);
|
||||
}
|
||||
#endif //#if (SOC_ADC_PERIPH_NUM >= 2)
|
||||
#endif //#if EXAMPLE_USE_ADC2
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user