查看ESP32 DAC的源代码
←
ESP32 DAC
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== Overview == Two DAC channel of ESP32: * GPIO25 / RTC_GPIO6 / PIN_14 * GPIO26 / RTC_GPIO7 / PIN_15 <br><br> == API == <source lang=cpp> static esp_err_t dac_pad_get_io_num(dac_channel_t channel, gpio_num_t *gpio_num) { RTC_MODULE_CHECK(channel < DAC_CHANNEL_MAX, "DAC Channel Err", ESP_ERR_INVALID_ARG); switch (channel) { case DAC_CHANNEL_1: *gpio_num = 25; break; case DAC_CHANNEL_2: *gpio_num = 26; break; default: return ESP_ERR_INVALID_ARG; } return ESP_OK; } static esp_err_t dac_rtc_pad_init(dac_channel_t channel) { RTC_MODULE_CHECK(channel < DAC_CHANNEL_MAX, "DAC Channel Err", ESP_ERR_INVALID_ARG); gpio_num_t gpio_num = 0; dac_pad_get_io_num(channel, &gpio_num); rtc_gpio_init(gpio_num); rtc_gpio_output_disable(gpio_num); rtc_gpio_input_disable(gpio_num); rtc_gpio_pullup_dis(gpio_num); rtc_gpio_pulldown_dis(gpio_num); return ESP_OK; } static esp_err_t dac_out_enable(dac_channel_t channel) { if (channel == DAC_CHANNEL_1) { portENTER_CRITICAL(&rtc_spinlock); SET_PERI_REG_MASK(RTC_IO_PAD_DAC1_REG, RTC_IO_PDAC1_XPD_DAC | RTC_IO_PDAC1_DAC_XPD_FORCE); portEXIT_CRITICAL(&rtc_spinlock); } else if (channel == DAC_CHANNEL_2) { portENTER_CRITICAL(&rtc_spinlock); SET_PERI_REG_MASK(RTC_IO_PAD_DAC2_REG, RTC_IO_PDAC2_XPD_DAC | RTC_IO_PDAC2_DAC_XPD_FORCE); portEXIT_CRITICAL(&rtc_spinlock); } else { return ESP_ERR_INVALID_ARG; } return ESP_OK; } esp_err_t dac_out_voltage(dac_channel_t channel, uint8_t dac_value) { RTC_MODULE_CHECK(channel < DAC_CHANNEL_MAX, "DAC Channel Err", ESP_ERR_INVALID_ARG); portENTER_CRITICAL(&rtc_spinlock); //Disable Tone CLEAR_PERI_REG_MASK(SENS_SAR_DAC_CTRL1_REG, SENS_SW_TONE_EN); //Disable Channel Tone if (channel == DAC_CHANNEL_1) { CLEAR_PERI_REG_MASK(SENS_SAR_DAC_CTRL2_REG, SENS_DAC_CW_EN1_M); } else if (channel == DAC_CHANNEL_2) { CLEAR_PERI_REG_MASK(SENS_SAR_DAC_CTRL2_REG, SENS_DAC_CW_EN2_M); } //Set the Dac value if (channel == DAC_CHANNEL_1) { SET_PERI_REG_BITS(RTC_IO_PAD_DAC1_REG, RTC_IO_PDAC1_DAC, dac_value, RTC_IO_PDAC1_DAC_S); //dac_output } else if (channel == DAC_CHANNEL_2) { SET_PERI_REG_BITS(RTC_IO_PAD_DAC2_REG, RTC_IO_PDAC2_DAC, dac_value, RTC_IO_PDAC2_DAC_S); //dac_output } portEXIT_CRITICAL(&rtc_spinlock); //dac pad init dac_rtc_pad_init(channel); dac_out_enable(channel); return ESP_OK; } </source> <br><br><br><br> <br><br><br><br> <br><br><br><br> <br><br><br><br> <br><br><br><br> <br><br><br><br>
返回到
ESP32 DAC
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面