5#include "driver/gpio.h"
6#include "driver/ledc.h"
7#if __has_include("soc/soc_caps.h")
8#include "soc/soc_caps.h"
13#if defined(SOC_LEDC_CHANNEL_NUM)
19#if defined(SOC_LEDC_SUPPORT_HS_MODE) && SOC_LEDC_SUPPORT_HS_MODE
90 bool low_speed_configured =
false;
91 #if defined(SOC_LEDC_SUPPORT_HS_MODE) && SOC_LEDC_SUPPORT_HS_MODE
92 bool high_speed_configured =
false;
98 pins[j].pwm_timer = LEDC_TIMER_0;
100 if (
pins[j].speed_mode == LEDC_LOW_SPEED_MODE) {
101 if (!low_speed_configured) {
105#if defined(SOC_LEDC_SUPPORT_HS_MODE) && SOC_LEDC_SUPPORT_HS_MODE
107 if (!high_speed_configured) {
114 LOGI(
"setupPWM: pin=%d, channel=%d, frequency=%u, resolution=%d",
115 pins[j].gpio, (
int)
pins[j].pwm_channel,
122 for (
int j = 0; j <
pins.size(); j++) {
141 if (channel < 0 || channel >=
pins.size())
return;
142 uint32_t duty = value;
144 if (duty > max_duty) {
147 esp_err_t rc = ledc_set_duty(
pins[channel].speed_mode,
148 pins[channel].pwm_channel, duty);
150 LOGE(
"ledc_set_duty failed: pin=%d channel=%d error=%d",
151 pins[channel].gpio, (
int)
pins[channel].pwm_channel, (
int)rc);
154 rc = ledc_update_duty(
pins[channel].speed_mode,
pins[channel].pwm_channel);
156 LOGE(
"ledc_update_duty failed: pin=%d channel=%d error=%d",
157 pins[channel].gpio, (
int)
pins[channel].pwm_channel, (
int)rc);
167 ledc_timer_config_t config = {};
168 config.speed_mode = speed_mode;
169 config.timer_num = LEDC_TIMER_0;
172 config.clk_cfg = LEDC_AUTO_CLK;
174 esp_err_t rc = ledc_timer_config(&config);
176 LOGE(
"ledc_timer_config failed: mode=%d error=%d", (
int)speed_mode,
184 ledc_channel_config_t config = {};
185 config.gpio_num = pin.
gpio;
192 esp_err_t rc = ledc_channel_config(&config);
194 LOGE(
"ledc_channel_config failed: pin=%d channel=%d error=%d", pin.
gpio,
200 for (
int j = 0; j <
pins.size(); j++) {
201 ledc_stop(
pins[j].speed_mode,
pins[j].pwm_channel, 0);
202 gpio_reset_pin((gpio_num_t)
pins[j].gpio);
208#if defined(SOC_LEDC_SUPPORT_HS_MODE) && SOC_LEDC_SUPPORT_HS_MODE
210 : LEDC_HIGH_SPEED_MODE;
213 return LEDC_LOW_SPEED_MODE;
218 return static_cast<ledc_channel_t
>(channel %
228 return max_value > 0 ? (uint32_t)max_value : 0;
246#if defined(ESP32S2) || defined(ESP32S3)
247 switch (resolution) {
261 switch (resolution) {
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGE(...)
Definition AudioLoggerIDF.h:30
@ HZ
Definition AudioTypes.h:44