@@ -47,6 +47,21 @@ ledc_periph_t ledc_handle = {0};
47
47
48
48
static bool fade_initialized = false;
49
49
50
+ ledc_clk_cfg_t clock_source = LEDC_DEFAULT_CLK ;
51
+
52
+ ledc_clk_cfg_t ledcReadClockSource (void ) {
53
+ return clock_source ;
54
+ }
55
+
56
+ bool ledcWriteClockSource (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
+
50
65
static bool ledcDetachBus (void * bus ) {
51
66
ledc_channel_handle_t * handle = (ledc_channel_handle_t * )bus ;
52
67
bool channel_found = false;
@@ -111,7 +126,7 @@ bool ledcAttachChannel(uint8_t pin, uint32_t freq, uint8_t resolution, uint8_t c
111
126
return false;
112
127
}
113
128
} 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 };
115
130
if (ledc_timer_config (& ledc_timer ) != ESP_OK ) {
116
131
log_e ("ledc setup failed!" );
117
132
return false;
@@ -241,7 +256,7 @@ uint32_t ledcWriteTone(uint8_t pin, uint32_t freq) {
241
256
242
257
uint8_t group = (bus -> channel / 8 ), timer = ((bus -> channel / 2 ) % 4 );
243
258
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 };
245
260
246
261
if (ledc_timer_config (& ledc_timer ) != ESP_OK ) {
247
262
log_e ("ledcWriteTone configuration failed!" );
@@ -292,7 +307,7 @@ uint32_t ledcChangeFrequency(uint8_t pin, uint32_t freq, uint8_t resolution) {
292
307
}
293
308
uint8_t group = (bus -> channel / 8 ), timer = ((bus -> channel / 2 ) % 4 );
294
309
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 };
296
311
297
312
if (ledc_timer_config (& ledc_timer ) != ESP_OK ) {
298
313
log_e ("ledcChangeFrequency failed!" );
0 commit comments