summaryrefslogtreecommitdiff
path: root/firmware/target/coldfire/timer-coldfire.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2011-06-17 03:09:47 +0000
committerMichael Sevakis <jethead71@rockbox.org>2011-06-17 03:09:47 +0000
commitd4800fa3851d2d89c1be03ec99af81f277892579 (patch)
tree60c2beebe08192b2ba6a9c2db31e4409aa940b4e /firmware/target/coldfire/timer-coldfire.c
parent7b605f04168400f3b1b2024600886045f0103c3a (diff)
downloadrockbox-d4800fa3851d2d89c1be03ec99af81f277892579.tar.gz
rockbox-d4800fa3851d2d89c1be03ec99af81f277892579.zip
Coldfire: Fix the modification of IMR. Interrupts must be masked at the core level at at least the level of the interrupt being masked. Not following the datasheet and relying strictly on and/or_l causes unhandled 'Levelx' exceptions (showing itself quite often in PCM mixer work which more greatly stresses PCM lockout).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30009 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/coldfire/timer-coldfire.c')
-rw-r--r--firmware/target/coldfire/timer-coldfire.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/firmware/target/coldfire/timer-coldfire.c b/firmware/target/coldfire/timer-coldfire.c
index 49d22bb5fa..cc665cb9c6 100644
--- a/firmware/target/coldfire/timer-coldfire.c
+++ b/firmware/target/coldfire/timer-coldfire.c
@@ -89,7 +89,7 @@ bool timer_set(long cycles, bool start)
89bool timer_start(void) 89bool timer_start(void)
90{ 90{
91 ICR2 = 0x90; /* interrupt on level 4.0 */ 91 ICR2 = 0x90; /* interrupt on level 4.0 */
92 and_l(~(1<<10), &IMR); 92 coldfire_imr_mod(0, 1 << 10);
93 TMR1 |= 1; /* start timer */ 93 TMR1 |= 1; /* start timer */
94 return true; 94 return true;
95} 95}
@@ -97,7 +97,7 @@ bool timer_start(void)
97void timer_stop(void) 97void timer_stop(void)
98{ 98{
99 TMR1 = 0; /* disable timer 1 */ 99 TMR1 = 0; /* disable timer 1 */
100 or_l((1<<10), &IMR); /* disable interrupt */ 100 coldfire_imr_mod(1 << 10, 1 << 10); /* disable interrupt */
101} 101}
102 102
103void timers_adjust_prescale(int multiplier, bool enable_irq) 103void timers_adjust_prescale(int multiplier, bool enable_irq)