Просмотр исходного кода

Merge branch 'contrib/github_pr_11810' into 'master'

ledc.c: Fix frequency calculation. (GitHub PR)

Closes IDFGH-10569

See merge request espressif/esp-idf!24618
Song Ruo Jing 2 лет назад
Родитель
Сommit
a9523b2cef

+ 1 - 1
components/driver/ledc/ledc.c

@@ -849,7 +849,7 @@ uint32_t ledc_get_freq(ledc_mode_t speed_mode, ledc_timer_t timer_num)
         ESP_LOGW(LEDC_TAG, "LEDC timer not configured, call ledc_timer_config to set timer frequency");
         return 0;
     }
-    return ((uint64_t) src_clk_freq << LEDC_LL_FRACTIONAL_BITS) / precision / clock_divider;
+    return (((uint64_t) src_clk_freq << LEDC_LL_FRACTIONAL_BITS) + (uint64_t) precision * clock_divider / 2) / precision / clock_divider;
 }
 
 static inline void IRAM_ATTR ledc_calc_fade_end_channel(uint32_t *fade_end_status, uint32_t *channel)

+ 1 - 1
components/driver/test_apps/ledc/main/test_app_main.c

@@ -10,7 +10,7 @@
 #include "esp_heap_caps.h"
 
 // Some resources are lazy allocated in LEDC driver, the threshold is left for that case
-#define TEST_MEMORY_LEAK_THRESHOLD (150)
+#define TEST_MEMORY_LEAK_THRESHOLD (230)
 
 static size_t before_free_8bit;
 static size_t before_free_32bit;

+ 1 - 1
components/driver/test_apps/ledc/main/test_ledc.c

@@ -553,7 +553,7 @@ static void timer_frequency_test(ledc_channel_t channel, ledc_timer_bit_t timer_
     uint32_t clk_src_freq = 0;
     esp_clk_tree_src_get_freq_hz((soc_module_clk_t)TEST_DEFAULT_CLK_CFG, ESP_CLK_TREE_SRC_FREQ_PRECISION_EXACT, &clk_src_freq);
     if (clk_src_freq == 80 * 1000 * 1000) {
-        theoretical_freq = 8992;
+        theoretical_freq = 8993;
     } else if (clk_src_freq == 96 * 1000 * 1000) {
         theoretical_freq = 9009;
     }