diff options
author | Thom Johansen <thomj@rockbox.org> | 2005-12-12 13:53:22 +0000 |
---|---|---|
committer | Thom Johansen <thomj@rockbox.org> | 2005-12-12 13:53:22 +0000 |
commit | 544b03cf9abafc080e10a91f65046eda540ff5ae (patch) | |
tree | 1fabed08230448393c5cab1f20f1a845f3ab883d /firmware/kernel.c | |
parent | 07a2ad2a2246c649ec86c2adb077ec9ed3cfef11 (diff) | |
download | rockbox-544b03cf9abafc080e10a91f65046eda540ff5ae.tar.gz rockbox-544b03cf9abafc080e10a91f65046eda540ff5ae.zip |
Add interrupt handler for iPod. Add timer tick support. Remove temporary thread sleep solution. Remove temporary iPod current_tick solution.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8224 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/kernel.c')
-rw-r--r-- | firmware/kernel.c | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/firmware/kernel.c b/firmware/kernel.c index b9aee94221..6166437282 100644 --- a/firmware/kernel.c +++ b/firmware/kernel.c | |||
@@ -25,9 +25,7 @@ | |||
25 | #include "system.h" | 25 | #include "system.h" |
26 | #include "panic.h" | 26 | #include "panic.h" |
27 | 27 | ||
28 | #if (CONFIG_CPU != PP5020) | ||
29 | long current_tick = 0; | 28 | long current_tick = 0; |
30 | #endif | ||
31 | 29 | ||
32 | static void (*tick_funcs[MAX_NUM_TICK_TASKS])(void); | 30 | static void (*tick_funcs[MAX_NUM_TICK_TASKS])(void); |
33 | 31 | ||
@@ -319,9 +317,36 @@ void tick_start(unsigned int interval_in_ms) | |||
319 | 317 | ||
320 | #elif CONFIG_CPU == PP5020 | 318 | #elif CONFIG_CPU == PP5020 |
321 | 319 | ||
322 | void tick_start(unsigned int interval_in_ms) { | 320 | #define USECS_PER_INT 0x2710 |
323 | /* TODO: Implement tick_start */ | 321 | |
324 | (void)interval_in_ms; | 322 | void TIMER1(void) |
323 | { | ||
324 | int i; | ||
325 | |||
326 | PP5020_TIMER1_ACK; | ||
327 | /* Run through the list of tick tasks */ | ||
328 | for (i = 0;i < MAX_NUM_TICK_TASKS;i++) | ||
329 | { | ||
330 | if (tick_funcs[i]) | ||
331 | { | ||
332 | tick_funcs[i](); | ||
333 | } | ||
334 | } | ||
335 | |||
336 | current_tick++; | ||
337 | wake_up_thread(); | ||
338 | } | ||
339 | |||
340 | void tick_start(unsigned int interval_in_ms) | ||
341 | { | ||
342 | /* TODO: use interval_in_ms to set timer periode */ | ||
343 | (void)interval_in_ms; | ||
344 | PP5020_TIMER1 = 0x0; | ||
345 | PP5020_TIMER1_ACK; | ||
346 | /* enable timer, period, trigger value 0x2710 -> 100Hz */ | ||
347 | PP5020_TIMER1 = 0xc0000000 | USECS_PER_INT; | ||
348 | /* unmask interrupt source */ | ||
349 | PP5020_CPU_INT_EN = PP5020_TIMER1_MASK; | ||
325 | } | 350 | } |
326 | 351 | ||
327 | #endif | 352 | #endif |