diff --git a/components/driver/ledc.c b/components/driver/ledc.c index 515d9335ef..d8f52de20f 100644 --- a/components/driver/ledc.c +++ b/components/driver/ledc.c @@ -228,7 +228,6 @@ esp_err_t ledc_timer_rst(ledc_mode_t speed_mode, ledc_timer_t timer_sel) LEDC_CHECK(p_ledc_obj[speed_mode] != NULL, LEDC_NOT_INIT, ESP_ERR_INVALID_STATE); portENTER_CRITICAL(&ledc_spinlock); ledc_hal_timer_rst(&(p_ledc_obj[speed_mode]->ledc_hal), timer_sel); - ledc_ls_timer_update(speed_mode, timer_sel); portEXIT_CRITICAL(&ledc_spinlock); return ESP_OK; } @@ -240,7 +239,6 @@ esp_err_t ledc_timer_pause(ledc_mode_t speed_mode, ledc_timer_t timer_sel) LEDC_CHECK(p_ledc_obj[speed_mode] != NULL, LEDC_NOT_INIT, ESP_ERR_INVALID_STATE); portENTER_CRITICAL(&ledc_spinlock); ledc_hal_timer_pause(&(p_ledc_obj[speed_mode]->ledc_hal), timer_sel); - ledc_ls_timer_update(speed_mode, timer_sel); portEXIT_CRITICAL(&ledc_spinlock); return ESP_OK; } @@ -252,7 +250,6 @@ esp_err_t ledc_timer_resume(ledc_mode_t speed_mode, ledc_timer_t timer_sel) LEDC_CHECK(p_ledc_obj[speed_mode] != NULL, LEDC_NOT_INIT, ESP_ERR_INVALID_STATE); portENTER_CRITICAL(&ledc_spinlock); ledc_hal_timer_resume(&(p_ledc_obj[speed_mode]->ledc_hal), timer_sel); - ledc_ls_timer_update(speed_mode, timer_sel); portEXIT_CRITICAL(&ledc_spinlock); return ESP_OK; } @@ -312,8 +309,6 @@ static esp_err_t ledc_set_timer_div(ledc_mode_t speed_mode, ledc_timer_t timer_n } //Set the divisor ledc_timer_set(speed_mode, timer_num, div_param, duty_resolution, timer_clk_src); - // reset the timer - ledc_timer_rst(speed_mode, timer_num); return ESP_OK; error: ESP_LOGE(LEDC_TAG, "requested frequency and duty resolution can not be achieved, try reducing freq_hz or duty_resolution. div_param=%d", @@ -348,7 +343,12 @@ esp_err_t ledc_timer_config(const ledc_timer_config_t* timer_conf) ledc_hal_init(&(p_ledc_obj[speed_mode]->ledc_hal), speed_mode); } - return ledc_set_timer_div(speed_mode, timer_num, timer_conf->clk_cfg, freq_hz, duty_resolution); + esp_err_t ret = ledc_set_timer_div(speed_mode, timer_num, timer_conf->clk_cfg, freq_hz, duty_resolution); + if (ret == ESP_OK) { + /* Reset the timer. */ + ledc_timer_rst(speed_mode, timer_num); + } + return ret; } esp_err_t ledc_set_pin(int gpio_num, ledc_mode_t speed_mode, ledc_channel_t ledc_channel) diff --git a/components/driver/test/test_ledc.c b/components/driver/test/test_ledc.c index 988204da11..b8874f86de 100644 --- a/components/driver/test/test_ledc.c +++ b/components/driver/test/test_ledc.c @@ -548,6 +548,7 @@ TEST_CASE("LEDC timer pause and resume", "[ledc][test_env=UT_T1_LEDC]") printf("reset ledc timer\n"); TEST_ESP_OK(ledc_timer_rst(test_speed_mode, LEDC_TIMER_0)); vTaskDelay(100 / portTICK_RATE_MS); + count = wave_count(1000); TEST_ASSERT_UINT32_WITHIN(5, count, 5000); }