Skip to content

Commit 51518f0

Browse files
committed
Failed to account for PWM prescaler on high frequencies.
1 parent d49d21c commit 51518f0

File tree

1 file changed

+2
-2
lines changed
  • libraries/mbed/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32

1 file changed

+2
-2
lines changed

libraries/mbed/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/pwmout_api.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ void pwmout_write(pwmout_t *obj, float value)
139139
value = 1;
140140
}
141141

142-
float pulse_period_in_s = obj->period_cycles / (float) pwm_clockfreq;
142+
float pulse_period_in_s = obj->period_cycles / ((float) (pwm_clockfreq >> pwm_prescaler_div));
143143
pwmout_pulsewidth(obj, value * pulse_period_in_s);
144144
}
145145

@@ -192,7 +192,7 @@ void pwmout_period_us(pwmout_t *obj, int us)
192192

193193
void pwmout_pulsewidth(pwmout_t *obj, float seconds)
194194
{
195-
obj->width_cycles = pwm_clockfreq * seconds;
195+
obj->width_cycles = (uint32_t) (((float) (pwm_clockfreq >> pwm_prescaler_div)) * seconds);
196196
TIMER_CompareBufSet(PWM_TIMER, obj->channel, obj->width_cycles);
197197
}
198198

0 commit comments

Comments
 (0)