1 /*
2  * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #pragma once
8 #include "hal/adc_types.h"
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 /**
15  * @brief ADC resolution setting option.
16  * @note  Only used in single read mode
17  */
18 typedef enum {
19 #if CONFIG_IDF_TARGET_ESP32
20     ADC_WIDTH_BIT_9  = 9, /*!< ADC capture width is 9Bit. */
21     ADC_WIDTH_BIT_10 = 10, /*!< ADC capture width is 10Bit. */
22     ADC_WIDTH_BIT_11 = 11, /*!< ADC capture width is 11Bit. */
23     ADC_WIDTH_BIT_12 = 12, /*!< ADC capture width is 12Bit. */
24 #elif SOC_ADC_RTC_MAX_BITWIDTH == 12
25     ADC_WIDTH_BIT_12 = 12, /*!< ADC capture width is 12Bit. */
26 #elif SOC_ADC_RTC_MAX_BITWIDTH == 13
27     ADC_WIDTH_BIT_13 = 13, /*!< ADC capture width is 13Bit. */
28 #endif
29     ADC_WIDTH_MAX,
30 } adc_bits_width_t;
31 
32 /**
33  * The default (max) bit width of the ADC of current version. You can also get the maximum bitwidth
34  * by `SOC_ADC_RTC_MAX_BITWIDTH` defined in soc_caps.h.
35  */
36 #define ADC_WIDTH_BIT_DEFAULT    (ADC_WIDTH_MAX-1)
37 
38 #if CONFIG_IDF_TARGET_ESP32
39 typedef enum {
40     ADC1_CHANNEL_0 = 0, /*!< ADC1 channel 0 is GPIO36 */
41     ADC1_CHANNEL_1,     /*!< ADC1 channel 1 is GPIO37 */
42     ADC1_CHANNEL_2,     /*!< ADC1 channel 2 is GPIO38 */
43     ADC1_CHANNEL_3,     /*!< ADC1 channel 3 is GPIO39 */
44     ADC1_CHANNEL_4,     /*!< ADC1 channel 4 is GPIO32 */
45     ADC1_CHANNEL_5,     /*!< ADC1 channel 5 is GPIO33 */
46     ADC1_CHANNEL_6,     /*!< ADC1 channel 6 is GPIO34 */
47     ADC1_CHANNEL_7,     /*!< ADC1 channel 7 is GPIO35 */
48     ADC1_CHANNEL_MAX,
49 } adc1_channel_t;
50 #elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
51 typedef enum {
52     ADC1_CHANNEL_0 = 0, /*!< ADC1 channel 0 is GPIO1  */
53     ADC1_CHANNEL_1,     /*!< ADC1 channel 1 is GPIO2  */
54     ADC1_CHANNEL_2,     /*!< ADC1 channel 2 is GPIO3  */
55     ADC1_CHANNEL_3,     /*!< ADC1 channel 3 is GPIO4  */
56     ADC1_CHANNEL_4,     /*!< ADC1 channel 4 is GPIO5  */
57     ADC1_CHANNEL_5,     /*!< ADC1 channel 5 is GPIO6  */
58     ADC1_CHANNEL_6,     /*!< ADC1 channel 6 is GPIO7  */
59     ADC1_CHANNEL_7,     /*!< ADC1 channel 7 is GPIO8  */
60     ADC1_CHANNEL_8,     /*!< ADC1 channel 8 is GPIO9  */
61     ADC1_CHANNEL_9,     /*!< ADC1 channel 9 is GPIO10 */
62     ADC1_CHANNEL_MAX,
63 } adc1_channel_t;
64 #elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C2
65 typedef enum {
66     ADC1_CHANNEL_0 = 0, /*!< ADC1 channel 0 is GPIO0 */
67     ADC1_CHANNEL_1,     /*!< ADC1 channel 1 is GPIO1 */
68     ADC1_CHANNEL_2,     /*!< ADC1 channel 2 is GPIO2 */
69     ADC1_CHANNEL_3,     /*!< ADC1 channel 3 is GPIO3 */
70     ADC1_CHANNEL_4,     /*!< ADC1 channel 4 is GPIO4 */
71     ADC1_CHANNEL_MAX,
72 } adc1_channel_t;
73 #elif CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2
74 typedef enum {
75     ADC1_CHANNEL_0 = 0, /*!< ADC1 channel 0 is GPIO0 */
76     ADC1_CHANNEL_1,     /*!< ADC1 channel 1 is GPIO1 */
77     ADC1_CHANNEL_2,     /*!< ADC1 channel 2 is GPIO2 */
78     ADC1_CHANNEL_3,     /*!< ADC1 channel 3 is GPIO3 */
79     ADC1_CHANNEL_4,     /*!< ADC1 channel 4 is GPIO4 */
80     ADC1_CHANNEL_5,     /*!< ADC1 channel 5 is GPIO5 */
81     ADC1_CHANNEL_6,     /*!< ADC1 channel 6 is GPIO6 */
82     ADC1_CHANNEL_MAX,
83 } adc1_channel_t;
84 #endif // CONFIG_IDF_TARGET_*
85 
86 #if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
87 typedef enum {
88     ADC2_CHANNEL_0 = 0, /*!< ADC2 channel 0 is GPIO4  (ESP32), GPIO11 (ESP32-S2) */
89     ADC2_CHANNEL_1,     /*!< ADC2 channel 1 is GPIO0  (ESP32), GPIO12 (ESP32-S2) */
90     ADC2_CHANNEL_2,     /*!< ADC2 channel 2 is GPIO2  (ESP32), GPIO13 (ESP32-S2) */
91     ADC2_CHANNEL_3,     /*!< ADC2 channel 3 is GPIO15 (ESP32), GPIO14 (ESP32-S2) */
92     ADC2_CHANNEL_4,     /*!< ADC2 channel 4 is GPIO13 (ESP32), GPIO15 (ESP32-S2) */
93     ADC2_CHANNEL_5,     /*!< ADC2 channel 5 is GPIO12 (ESP32), GPIO16 (ESP32-S2) */
94     ADC2_CHANNEL_6,     /*!< ADC2 channel 6 is GPIO14 (ESP32), GPIO17 (ESP32-S2) */
95     ADC2_CHANNEL_7,     /*!< ADC2 channel 7 is GPIO27 (ESP32), GPIO18 (ESP32-S2) */
96     ADC2_CHANNEL_8,     /*!< ADC2 channel 8 is GPIO25 (ESP32), GPIO19 (ESP32-S2) */
97     ADC2_CHANNEL_9,     /*!< ADC2 channel 9 is GPIO26 (ESP32), GPIO20 (ESP32-S2) */
98     ADC2_CHANNEL_MAX,
99 } adc2_channel_t;
100 #elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C2
101 // ESP32C6 has no ADC2
102 typedef enum {
103     ADC2_CHANNEL_0 = 0, /*!< ADC2 channel 0 is GPIO5 */
104     ADC2_CHANNEL_MAX,
105 } adc2_channel_t;
106 #endif
107 
108 #if SOC_ADC_DMA_SUPPORTED
109 /**
110  * @brief Digital ADC DMA read max timeout value, it may make the ``adc_digi_read_bytes`` block forever if the OS supports
111  */
112 #define ADC_MAX_DELAY UINT32_MAX
113 
114 /**
115  * @brief ADC DMA driver configuration
116  */
117 typedef struct adc_digi_init_config_s {
118     uint32_t max_store_buf_size;    ///< Max length of the converted data that driver can store before they are processed.
119     uint32_t conv_num_each_intr;    ///< Bytes of data that can be converted in 1 interrupt. This should be in multiples of `SOC_ADC_DIGI_DATA_BYTES_PER_CONV`.
120     uint32_t adc1_chan_mask;        ///< Channel list of ADC1 to be initialized.
121     uint32_t adc2_chan_mask;        ///< Channel list of ADC2 to be initialized.
122 } adc_digi_init_config_t;
123 
124 /**
125  * @brief ADC digital controller settings
126  */
127 typedef struct {
128     bool conv_limit_en;                     ///< Suggest leaving it empty, this parameter has been deprecated
129     uint32_t conv_limit_num;                ///< suggest leaving it empty, this parameter has been deprecated
130     uint32_t pattern_num;                   ///< Number of ADC channels that will be used
131     adc_digi_pattern_config_t *adc_pattern; ///< List of configs for each ADC channel that will be used
132     uint32_t sample_freq_hz;                /*!< Please refer to `soc/soc_caps.h` to know the ADC sampling frequency range*/
133     adc_digi_convert_mode_t conv_mode;      ///< ADC DMA conversion mode, see `adc_digi_convert_mode_t`.
134     adc_digi_output_format_t format;        ///< ADC DMA conversion output format, see `adc_digi_output_format_t`.
135 } adc_digi_configuration_t;
136 #endif // #if SOC_ADC_DMA_SUPPORTED
137 
138 #ifdef __cplusplus
139 }
140 #endif
141