diff options
Diffstat (limited to 'firmware/target/arm/tcc780x/timer-tcc780x.c')
-rw-r--r-- | firmware/target/arm/tcc780x/timer-tcc780x.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/firmware/target/arm/tcc780x/timer-tcc780x.c b/firmware/target/arm/tcc780x/timer-tcc780x.c new file mode 100644 index 0000000000..c724c4b3a8 --- /dev/null +++ b/firmware/target/arm/tcc780x/timer-tcc780x.c | |||
@@ -0,0 +1,82 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2008 by Rob Purchase | ||
11 | * | ||
12 | * All files in this archive are subject to the GNU General Public License. | ||
13 | * See the file COPYING in the source tree root for full license agreement. | ||
14 | * | ||
15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
16 | * KIND, either express or implied. | ||
17 | * | ||
18 | ****************************************************************************/ | ||
19 | |||
20 | #include "config.h" | ||
21 | #include "cpu.h" | ||
22 | #include "system.h" | ||
23 | #include "timer.h" | ||
24 | #include "logf.h" | ||
25 | |||
26 | /* Use the TC32 counter [sourced by Xin:12Mhz] for this timer, as it's the | ||
27 | only one that allows a 32-bit counter (Timer0-5 are 16/20 bit only). */ | ||
28 | |||
29 | bool __timer_set(long cycles, bool start) | ||
30 | { | ||
31 | #warning function not implemented | ||
32 | |||
33 | (void)cycles; | ||
34 | (void)start; | ||
35 | return false; | ||
36 | } | ||
37 | |||
38 | bool __timer_register(void) | ||
39 | { | ||
40 | #warning function not implemented | ||
41 | |||
42 | return false; | ||
43 | } | ||
44 | |||
45 | void __timer_unregister(void) | ||
46 | { | ||
47 | #warning function not implemented | ||
48 | } | ||
49 | |||
50 | |||
51 | /* Timer interrupt processing - all timers (inc. tick) have a single IRQ */ | ||
52 | |||
53 | extern void (*tick_funcs[MAX_NUM_TICK_TASKS])(void); | ||
54 | |||
55 | void TIMER(void) | ||
56 | { | ||
57 | if (TIREQ & TF0) /* Timer0 reached ref value */ | ||
58 | { | ||
59 | int i; | ||
60 | |||
61 | /* Run through the list of tick tasks */ | ||
62 | for(i = 0; i < MAX_NUM_TICK_TASKS; i++) | ||
63 | { | ||
64 | if(tick_funcs[i]) | ||
65 | { | ||
66 | tick_funcs[i](); | ||
67 | } | ||
68 | } | ||
69 | |||
70 | current_tick++; | ||
71 | |||
72 | /* reset Timer 0 IRQ & ref flags */ | ||
73 | TIREQ |= TI0 | TF0; | ||
74 | } | ||
75 | |||
76 | if (TC32IRQ & (1<<3)) /* end of TC32 prescale */ | ||
77 | { | ||
78 | /* dispatch timer */ | ||
79 | } | ||
80 | |||
81 | CREQ |= TIMER_IRQ_MASK; /* clear IRQ */ | ||
82 | } | ||