|
13 | 13 | // limitations under the License. |
14 | 14 |
|
15 | 15 | #include "esp32-hal.h" |
| 16 | +#include "soc/soc_caps.h" |
16 | 17 |
|
17 | | -#if CONFIG_IDF_TARGET_ESP32 |
18 | | -#include "soc/rtc_io_reg.h" |
19 | | -#define DAC1 25 |
20 | | -#define DAC2 26 |
21 | | -#elif CONFIG_IDF_TARGET_ESP32S2 |
22 | | -#include "soc/rtc_io_reg.h" |
23 | | -#define DAC1 17 |
24 | | -#define DAC2 18 |
25 | | -#elif CONFIG_IDF_TARGET_ESP32C3 |
| 18 | +#ifndef SOC_DAC_SUPPORTED |
26 | 19 | #define NODAC |
27 | 20 | #else |
28 | | -#error Target CONFIG_IDF_TARGET is not supported |
29 | | -#endif |
30 | | - |
31 | | -#ifndef NODAC |
32 | | -#include "esp_attr.h" |
33 | | -#include "soc/rtc_cntl_reg.h" |
34 | | -#include "soc/rtc_io_periph.h" |
35 | | -#include "soc/sens_reg.h" |
36 | | -#include "soc/sens_struct.h" |
37 | | -#include "driver/dac.h" |
| 21 | +#include "soc/dac_channel.h" |
| 22 | +#include "driver/dac_common.h" |
38 | 23 |
|
39 | 24 | void ARDUINO_ISR_ATTR __dacWrite(uint8_t pin, uint8_t value) |
40 | 25 | { |
41 | | - if(pin < DAC1 || pin > DAC2){ |
| 26 | + if(pin < DAC_CHANNEL_1_GPIO_NUM || pin > DAC_CHANNEL_2_GPIO_NUM){ |
42 | 27 | return;//not dac pin |
43 | 28 | } |
44 | | - pinMode(pin, ANALOG); |
45 | | - uint8_t channel = pin - DAC1; |
46 | | -#if CONFIG_IDF_TARGET_ESP32 |
47 | | - CLEAR_PERI_REG_MASK(SENS_SAR_DAC_CTRL1_REG, SENS_SW_TONE_EN); |
48 | | -#elif CONFIG_IDF_TARGET_ESP32S2 |
49 | | - SENS.sar_dac_ctrl1.dac_clkgate_en = 1; |
50 | | -#endif |
51 | | - RTCIO.pad_dac[channel].dac_xpd_force = 1; |
52 | | - RTCIO.pad_dac[channel].xpd_dac = 1; |
53 | | - if (channel == 0) { |
54 | | - SENS.sar_dac_ctrl2.dac_cw_en1 = 0; |
55 | | - } else if (channel == 1) { |
56 | | - SENS.sar_dac_ctrl2.dac_cw_en2 = 0; |
| 29 | + |
| 30 | + uint8_t channel = pin - DAC_CHANNEL_1_GPIO_NUM; |
| 31 | + dac_output_enable(channel); |
| 32 | + dac_output_voltage(channel, value); |
| 33 | + |
| 34 | +} |
| 35 | + |
| 36 | +void ARDUINO_ISR_ATTR __dacDisable(uint8_t pin) |
| 37 | +{ |
| 38 | + if(pin < DAC_CHANNEL_1_GPIO_NUM || pin > DAC_CHANNEL_2_GPIO_NUM){ |
| 39 | + return;//not dac pin |
57 | 40 | } |
58 | | - RTCIO.pad_dac[channel].dac = value; |
| 41 | + |
| 42 | + uint8_t channel = pin - DAC_CHANNEL_1_GPIO_NUM; |
| 43 | + dac_output_disable(channel); |
59 | 44 | } |
60 | 45 |
|
61 | 46 | extern void dacWrite(uint8_t pin, uint8_t value) __attribute__ ((weak, alias("__dacWrite"))); |
| 47 | +extern void dacDisable(uint8_t pin) __attribute__ ((weak, alias("__dacDisable"))); |
62 | 48 |
|
63 | 49 | #endif |
0 commit comments