From 6dab3f6777b47e077fecd5b27f5f316664dd6096 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 12 Apr 2019 17:49:44 +0200 Subject: [PATCH] Fix LEDC channels above 8 not properly clearing Fixes: https://github.com/espressif/arduino-esp32/issues/2660 --- cores/esp32/esp32-hal-ledc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cores/esp32/esp32-hal-ledc.c b/cores/esp32/esp32-hal-ledc.c index b23a17db..336d1efb 100644 --- a/cores/esp32/esp32-hal-ledc.c +++ b/cores/esp32/esp32-hal-ledc.c @@ -167,7 +167,7 @@ static void _ledcSetupChannel(uint8_t chan, uint8_t idle_level) LEDC_CHAN(group, channel).conf0.sig_out_en = 0;//This is the output enable control bit for channel LEDC_CHAN(group, channel).conf1.duty_start = 0;//When duty_num duty_cycle and duty_scale has been configured. these register won't take effect until set duty_start. this bit is automatically cleared by hardware. if(group) { - LEDC_CHAN(group, channel).conf0.val &= ~BIT(4); + LEDC_CHAN(group, channel).conf0.low_speed_update = 1; } else { LEDC_CHAN(group, channel).conf0.clk_en = 0; } @@ -196,7 +196,7 @@ void ledcWrite(uint8_t chan, uint32_t duty) LEDC_CHAN(group, channel).conf0.sig_out_en = 1;//This is the output enable control bit for channel LEDC_CHAN(group, channel).conf1.duty_start = 1;//When duty_num duty_cycle and duty_scale has been configured. these register won't take effect until set duty_start. this bit is automatically cleared by hardware. if(group) { - LEDC_CHAN(group, channel).conf0.val |= BIT(4); + LEDC_CHAN(group, channel).conf0.low_speed_update = 1; } else { LEDC_CHAN(group, channel).conf0.clk_en = 1; } @@ -204,7 +204,7 @@ void ledcWrite(uint8_t chan, uint32_t duty) LEDC_CHAN(group, channel).conf0.sig_out_en = 0;//This is the output enable control bit for channel LEDC_CHAN(group, channel).conf1.duty_start = 0;//When duty_num duty_cycle and duty_scale has been configured. these register won't take effect until set duty_start. this bit is automatically cleared by hardware. if(group) { - LEDC_CHAN(group, channel).conf0.val &= ~BIT(4); + LEDC_CHAN(group, channel).conf0.low_speed_update = 1; } else { LEDC_CHAN(group, channel).conf0.clk_en = 0; }