diff --git a/ports/esp32s2/common-hal/pwmio/PWMOut.c b/ports/esp32s2/common-hal/pwmio/PWMOut.c index c1a456d310..d4fa2721f4 100644 --- a/ports/esp32s2/common-hal/pwmio/PWMOut.c +++ b/ports/esp32s2/common-hal/pwmio/PWMOut.c @@ -63,6 +63,12 @@ pwmout_result_t common_hal_pwmio_pwmout_construct(pwmio_pwmout_obj_t *self, uint16_t duty, uint32_t frequency, bool variable_frequency) { + + // check the frequency (avoid divide by zero below) + if (frequency == 0) { + return PWMOUT_INVALID_FREQUENCY; + } + // Calculate duty cycle uint32_t duty_bits = 0; uint32_t interval = LEDC_APB_CLK_HZ / frequency; @@ -129,12 +135,6 @@ pwmout_result_t common_hal_pwmio_pwmout_construct(pwmio_pwmout_obj_t *self, return PWMOUT_INITIALIZATION_ERROR; } - // check the frequency -- 0 is not valid - // maybe also want to reject frequency > system_clock / 2 ?? - if (frequency == 0) { - return PWMOUT_INVALID_FREQUENCY; - } - // Make reservations reserved_timer_freq[timer_index] = frequency; reserved_channels[channel_index] = timer_index;