mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
mcpwm: fix multiplication overflow in converting us to compare ticks
Closes https://github.com/espressif/esp-idf/issues/9648
This commit is contained in:
parent
645d5641dd
commit
ca831bbd63
@ -285,9 +285,11 @@ esp_err_t mcpwm_set_duty_in_us(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num,
|
|||||||
|
|
||||||
mcpwm_critical_enter(mcpwm_num);
|
mcpwm_critical_enter(mcpwm_num);
|
||||||
int real_group_prescale = mcpwm_ll_group_get_clock_prescale(hal->dev);
|
int real_group_prescale = mcpwm_ll_group_get_clock_prescale(hal->dev);
|
||||||
unsigned long int real_timer_clk_hz =
|
// to avid multiplication overflow, use uint64_t here
|
||||||
|
uint64_t real_timer_clk_hz =
|
||||||
SOC_MCPWM_BASE_CLK_HZ / real_group_prescale / mcpwm_ll_timer_get_clock_prescale(hal->dev, timer_num);
|
SOC_MCPWM_BASE_CLK_HZ / real_group_prescale / mcpwm_ll_timer_get_clock_prescale(hal->dev, timer_num);
|
||||||
mcpwm_ll_operator_set_compare_value(hal->dev, op, cmp, duty_in_us * real_timer_clk_hz / 1000000);
|
uint64_t compare_val = real_timer_clk_hz * duty_in_us / 1000000;
|
||||||
|
mcpwm_ll_operator_set_compare_value(hal->dev, op, cmp, (uint32_t)compare_val);
|
||||||
mcpwm_ll_operator_enable_update_compare_on_tez(hal->dev, op, cmp, true);
|
mcpwm_ll_operator_enable_update_compare_on_tez(hal->dev, op, cmp, true);
|
||||||
mcpwm_critical_exit(mcpwm_num);
|
mcpwm_critical_exit(mcpwm_num);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user