mirror of https://github.com/ARMmbed/mbed-os.git
Failed to account for PWM prescaler on high frequencies.
parent
d49d21cdca
commit
51518f0d4c
|
@ -139,7 +139,7 @@ void pwmout_write(pwmout_t *obj, float value)
|
||||||
value = 1;
|
value = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
float pulse_period_in_s = obj->period_cycles / (float) pwm_clockfreq;
|
float pulse_period_in_s = obj->period_cycles / ((float) (pwm_clockfreq >> pwm_prescaler_div));
|
||||||
pwmout_pulsewidth(obj, value * pulse_period_in_s);
|
pwmout_pulsewidth(obj, value * pulse_period_in_s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ void pwmout_period_us(pwmout_t *obj, int us)
|
||||||
|
|
||||||
void pwmout_pulsewidth(pwmout_t *obj, float seconds)
|
void pwmout_pulsewidth(pwmout_t *obj, float seconds)
|
||||||
{
|
{
|
||||||
obj->width_cycles = pwm_clockfreq * seconds;
|
obj->width_cycles = (uint32_t) (((float) (pwm_clockfreq >> pwm_prescaler_div)) * seconds);
|
||||||
TIMER_CompareBufSet(PWM_TIMER, obj->channel, obj->width_cycles);
|
TIMER_CompareBufSet(PWM_TIMER, obj->channel, obj->width_cycles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue