1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-24 22:13:52 +01:00

Avoid rounding errors during frequency scaling.

This commit is contained in:
Ian Martin 2016-03-01 15:18:04 -05:00
parent e97af73862
commit b6fbdb2f79

View File

@ -144,6 +144,7 @@ int timer_set(tim_t dev, int channel, unsigned int timeout)
uint64_t scaled_value = timeout;
scaled_value *= RCOSC16M_FREQ;
scaled_value += config_freq[dev] / 2;
scaled_value /= config_freq[dev];
gptimer->TAMATCHR = gptimer->TAV + scaled_value;
@ -192,6 +193,7 @@ int timer_set_absolute(tim_t dev, int channel, unsigned int value)
uint64_t scaled_value = value;
scaled_value *= config_freq[dev];
scaled_value += RCOSC16M_FREQ / 2;
scaled_value /= RCOSC16M_FREQ;
gptimer->TAMATCHR = (scaled_value > UINT32_MAX)? UINT32_MAX : scaled_value;