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