@@ -47,6 +47,21 @@ ledc_periph_t ledc_handle = {0};
4747
4848static bool fade_initialized = false;
4949
50+ static ledc_clk_cfg_t clock_source = LEDC_DEFAULT_CLK ;
51+
52+ ledc_clk_cfg_t ledcGetClockSource (void ) {
53+ return clock_source ;
54+ }
55+
56+ bool ledcSetClockSource (ledc_clk_cfg_t source ) {
57+ if (ledc_handle .used_channels ) {
58+ log_e ("Cannot change LEDC clock source! LEDC channels in use." );
59+ return false;
60+ }
61+ clock_source = source ;
62+ return true;
63+ }
64+
5065static bool ledcDetachBus (void * bus ) {
5166 ledc_channel_handle_t * handle = (ledc_channel_handle_t * )bus ;
5267 bool channel_found = false;
@@ -111,7 +126,7 @@ bool ledcAttachChannel(uint8_t pin, uint32_t freq, uint8_t resolution, uint8_t c
111126 return false;
112127 }
113128 } else {
114- ledc_timer_config_t ledc_timer = {.speed_mode = group , .timer_num = timer , .duty_resolution = resolution , .freq_hz = freq , .clk_cfg = LEDC_DEFAULT_CLK };
129+ ledc_timer_config_t ledc_timer = {.speed_mode = group , .timer_num = timer , .duty_resolution = resolution , .freq_hz = freq , .clk_cfg = clock_source };
115130 if (ledc_timer_config (& ledc_timer ) != ESP_OK ) {
116131 log_e ("ledc setup failed!" );
117132 return false;
@@ -241,7 +256,7 @@ uint32_t ledcWriteTone(uint8_t pin, uint32_t freq) {
241256
242257 uint8_t group = (bus -> channel / 8 ), timer = ((bus -> channel / 2 ) % 4 );
243258
244- ledc_timer_config_t ledc_timer = {.speed_mode = group , .timer_num = timer , .duty_resolution = 10 , .freq_hz = freq , .clk_cfg = LEDC_DEFAULT_CLK };
259+ ledc_timer_config_t ledc_timer = {.speed_mode = group , .timer_num = timer , .duty_resolution = 10 , .freq_hz = freq , .clk_cfg = clock_source };
245260
246261 if (ledc_timer_config (& ledc_timer ) != ESP_OK ) {
247262 log_e ("ledcWriteTone configuration failed!" );
@@ -292,7 +307,7 @@ uint32_t ledcChangeFrequency(uint8_t pin, uint32_t freq, uint8_t resolution) {
292307 }
293308 uint8_t group = (bus -> channel / 8 ), timer = ((bus -> channel / 2 ) % 4 );
294309
295- ledc_timer_config_t ledc_timer = {.speed_mode = group , .timer_num = timer , .duty_resolution = resolution , .freq_hz = freq , .clk_cfg = LEDC_DEFAULT_CLK };
310+ ledc_timer_config_t ledc_timer = {.speed_mode = group , .timer_num = timer , .duty_resolution = resolution , .freq_hz = freq , .clk_cfg = clock_source };
296311
297312 if (ledc_timer_config (& ledc_timer ) != ESP_OK ) {
298313 log_e ("ledcChangeFrequency failed!" );
0 commit comments