From f54adcfa934dafc3c696327f48c3624913ce82b5 Mon Sep 17 00:00:00 2001 From: Steven Yang Date: Thu, 30 Jul 2026 17:07:23 +0800 Subject: [PATCH] fix(mcpwm): stabilize mcpwm_timer_various_clk_src test Use count-up mode and account for counter wrap when measuring timer resolution. Extend the stop wait to cover the full timer period. --- .../test_apps/mcpwm/main/CMakeLists.txt | 3 ++- .../test_apps/mcpwm/main/test_mcpwm_timer.c | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/components/esp_driver_mcpwm/test_apps/mcpwm/main/CMakeLists.txt b/components/esp_driver_mcpwm/test_apps/mcpwm/main/CMakeLists.txt index 17d91c59e17..e59961b972c 100644 --- a/components/esp_driver_mcpwm/test_apps/mcpwm/main/CMakeLists.txt +++ b/components/esp_driver_mcpwm/test_apps/mcpwm/main/CMakeLists.txt @@ -24,5 +24,6 @@ endif() # In order for the cases defined by `TEST_CASE` to be linked into the final elf, # the component can be registered as WHOLE_ARCHIVE idf_component_register(SRCS ${srcs} - PRIV_REQUIRES unity esp_driver_mcpwm esp_driver_gpio esp_driver_gptimer esp_psram esp_timer esp_rom + PRIV_REQUIRES unity esp_driver_mcpwm esp_driver_gpio esp_driver_gptimer esp_psram + esp_timer esp_rom WHOLE_ARCHIVE) diff --git a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_timer.c b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_timer.c index 15b19759d96..7ee2ae4f922 100644 --- a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_timer.c +++ b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_timer.c @@ -103,7 +103,7 @@ TEST_CASE("mcpwm_timer_various_clk_src", "[mcpwm]") .clk_src = clk_src, .resolution_hz = 1000000, // 1MHz .period_ticks = 12000, - .count_mode = MCPWM_TIMER_COUNT_MODE_UP_DOWN, + .count_mode = MCPWM_TIMER_COUNT_MODE_UP, }; printf("create MCPWM timers with clock source: %d\r\n", clk_src); @@ -136,7 +136,12 @@ TEST_CASE("mcpwm_timer_various_clk_src", "[mcpwm]") TEST_ESP_OK(mcpwm_timer_get_phase(timers[i], &end_count, &direction)); int64_t elapsed_time_us = esp_timer_get_time() - start_time_us; uint32_t expected_ticks = (uint64_t)config.resolution_hz * elapsed_time_us / 1000000; - uint32_t actual_ticks = end_count - start_count; + uint32_t actual_ticks; + if (end_count >= start_count) { + actual_ticks = end_count - start_count; + } else { + actual_ticks = config.period_ticks - start_count + end_count; + } uint32_t tolerance_ticks = expected_ticks * tolerance_percent / 100; TEST_ASSERT_EQUAL(MCPWM_TIMER_DIRECTION_UP, direction); @@ -144,7 +149,7 @@ TEST_CASE("mcpwm_timer_various_clk_src", "[mcpwm]") // make sure the timer has stopped TEST_ESP_OK(mcpwm_timer_start_stop(timers[i], MCPWM_TIMER_STOP_EMPTY)); - vTaskDelay(pdMS_TO_TICKS(10)); + vTaskDelay(pdMS_TO_TICKS(20)); check_mcpwm_timer_phase(&timers[i], 1, 0, MCPWM_TIMER_DIRECTION_UP); }