summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target')
-rw-r--r--firmware/target/arm/imx233/timrot-imx233.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/firmware/target/arm/imx233/timrot-imx233.c b/firmware/target/arm/imx233/timrot-imx233.c
index 0ba86c755d..22f9853051 100644
--- a/firmware/target/arm/imx233/timrot-imx233.c
+++ b/firmware/target/arm/imx233/timrot-imx233.c
@@ -45,12 +45,17 @@ void imx233_timrot_setup(unsigned timer_nr, bool reload, unsigned count,
45 bool irq = fn != NULL; 45 bool irq = fn != NULL;
46 timer_fns[timer_nr] = fn; 46 timer_fns[timer_nr] = fn;
47 47
48 /* manual says count - 1 for reload timers */ 48 /* make sure we start from stop state */
49 HW_TIMROT_TIMCTRLn(timer_nr) = BF_OR7(TIMROT_TIMCTRLn, SELECT(src), 49 HW_TIMROT_TIMCTRLn(timer_nr) = BF_OR2(TIMROT_TIMCTRLn,
50 SELECT(BV_TIMROT_TIMCTRLn_SELECT__NEVER_TICK), UPDATE(1));
51 /* write count and take effect immediately with UPDATE
52 * manual says count-1 for reload timers */
53 HW_TIMROT_TIMCOUNTn(timer_nr) = reload ? count - 1 : count;
54 /* start timer */
55 HW_TIMROT_TIMCTRLn(timer_nr) = BF_OR6(TIMROT_TIMCTRLn, SELECT(src),
50 PRESCALE(prescale), POLARITY(polarity), RELOAD(reload), IRQ(irq), 56 PRESCALE(prescale), POLARITY(polarity), RELOAD(reload), IRQ(irq),
51 IRQ_EN(irq), UPDATE(1)); 57 IRQ_EN(irq));
52 imx233_icoll_enable_interrupt(INT_SRC_TIMER(timer_nr), irq); 58 imx233_icoll_enable_interrupt(INT_SRC_TIMER(timer_nr), irq);
53 HW_TIMROT_TIMCOUNTn(timer_nr) = reload ? count - 1 : count;
54 59
55 restore_interrupt(oldstatus); 60 restore_interrupt(oldstatus);
56} 61}