From 1615d5642e7aaf1362ef6a6fefa7acb74706eee5 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Wed, 27 Sep 2017 14:41:24 -1000 Subject: [PATCH] kinetis:drv_io_timer ensure the Mod register is updated --- src/drivers/kinetis/drv_io_timer.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/drivers/kinetis/drv_io_timer.c b/src/drivers/kinetis/drv_io_timer.c index 7a0b2dad4e..b049f6c2a7 100644 --- a/src/drivers/kinetis/drv_io_timer.c +++ b/src/drivers/kinetis/drv_io_timer.c @@ -456,11 +456,16 @@ static int allocate_channel(unsigned channel, io_timer_channel_mode_t mode) static int timer_set_rate(unsigned timer, unsigned rate) { + irqstate_t flags = px4_enter_critical_section(); + + uint32_t save = rSC(timer); + rSC(timer) = save & ~(FTM_SC_CLKS_MASK); + /* configure the timer to update at the desired rate */ rMOD(timer) = (BOARD_PWM_FREQ / rate) - 1; + rSC(timer) = save; - /* generate an update event; reloads the counter and all registers */ - rSYNC(timer) = FTM_SYNC; + px4_leave_critical_section(flags); return 0; }