|
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