1 #pragma once 2 3 #include "soc/soc_caps.h" 4 #include "hal/adc_types.h" 5 #include "sdkconfig.h" 6 7 typedef enum { 8 DAC_CHANNEL_1 = 0, /*!< DAC channel 1 is GPIO25(ESP32) / GPIO17(ESP32S2) */ 9 DAC_CHANNEL_2 = 1, /*!< DAC channel 2 is GPIO26(ESP32) / GPIO18(ESP32S2) */ 10 DAC_CHANNEL_MAX, 11 } dac_channel_t; 12 13 /** 14 * @brief The multiple of the amplitude of the cosine wave generator. The max amplitude is VDD3P3_RTC. 15 */ 16 typedef enum { 17 DAC_CW_SCALE_1 = 0x0, /*!< 1/1. Default. */ 18 DAC_CW_SCALE_2 = 0x1, /*!< 1/2. */ 19 DAC_CW_SCALE_4 = 0x2, /*!< 1/4. */ 20 DAC_CW_SCALE_8 = 0x3, /*!< 1/8. */ 21 } dac_cw_scale_t; 22 23 /** 24 * @brief Set the phase of the cosine wave generator output. 25 */ 26 typedef enum { 27 DAC_CW_PHASE_0 = 0x2, /*!< Phase shift +0° */ 28 DAC_CW_PHASE_180 = 0x3, /*!< Phase shift +180° */ 29 } dac_cw_phase_t; 30 31 /** 32 * @brief Config the cosine wave generator function in DAC module. 33 */ 34 typedef struct { 35 dac_channel_t en_ch; /*!< Enable the cosine wave generator of DAC channel. */ 36 dac_cw_scale_t scale; /*!< Set the amplitude of the cosine wave generator output. */ 37 dac_cw_phase_t phase; /*!< Set the phase of the cosine wave generator output. */ 38 uint32_t freq; /*!< Set frequency of cosine wave generator output. Range: 130(130Hz) ~ 55000(100KHz). */ 39 int8_t offset; /*!< Set the voltage value of the DC component of the cosine wave generator output. 40 Note: Unreasonable settings can cause waveform to be oversaturated. Range: -128 ~ 127. */ 41 } dac_cw_config_t; 42 43 #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 44 45 /** 46 * @brief DAC digital controller (DMA mode) work mode. 47 */ 48 typedef enum { 49 DAC_CONV_NORMAL, /*!< The data in the DMA buffer is simultaneously output to the enable channel of the DAC. */ 50 DAC_CONV_ALTER, /*!< The data in the DMA buffer is alternately output to the enable channel of the DAC. */ 51 DAC_CONV_MAX 52 } dac_digi_convert_mode_t; 53 54 /** 55 * @brief DAC digital controller (DMA mode) configuration parameters. 56 */ 57 typedef struct { 58 dac_digi_convert_mode_t mode; /*!<DAC digital controller (DMA mode) work mode. See ``dac_digi_convert_mode_t``. */ 59 uint32_t interval; /*!<The number of interval clock cycles for the DAC digital controller to output voltage. 60 The unit is the divided clock. Range: 1 ~ 4095. 61 Expression: `dac_output_freq` = `controller_clk` / interval. Refer to ``adc_digi_clk_t``. 62 Note: The sampling rate of each channel is also related to the conversion mode (See ``dac_digi_convert_mode_t``) and pattern table settings. */ 63 adc_digi_clk_t dig_clk; /*!<DAC digital controller clock divider settings. Refer to ``adc_digi_clk_t``. 64 Note: The clocks of the DAC digital controller use the ADC digital controller clock divider. */ 65 } dac_digi_config_t; 66 67 #endif //CONFIG_IDF_TARGET_ESP32S2 68