1 |
#include "launchelf.h" |
2 |
|
3 |
// Timer Define |
4 |
#define T0_COUNT ((volatile unsigned long*)0x10000000) |
5 |
#define T0_MODE ((volatile unsigned long*)0x10000010) |
6 |
|
7 |
static int TimerInterruptID = -1; |
8 |
static u64 TimerInterruptCount = 0; |
9 |
|
10 |
// Timer Interrupt |
11 |
int TimerInterrupt(int a) |
12 |
{ |
13 |
TimerInterruptCount++; |
14 |
*T0_MODE |= (1 << 11); |
15 |
return -1; |
16 |
} |
17 |
// Timer Init |
18 |
void TimerInit(void) |
19 |
{ |
20 |
*T0_MODE = 0x0000; |
21 |
TimerInterruptID = AddIntcHandler(9, TimerInterrupt, 0); |
22 |
EnableIntc(9); |
23 |
*T0_COUNT = 0; |
24 |
*T0_MODE = ( 2 << 0 )+( 1 << 7 )+( 1 << 9 ); |
25 |
TimerInterruptCount = 0; |
26 |
} |
27 |
// Timer Count |
28 |
u64 Timer(void) |
29 |
{ |
30 |
u64 ticks = (*T0_COUNT + (TimerInterruptCount << 16)) * (1000.0F / ( 147456000.0F / 256.0F )); |
31 |
return ticks; |
32 |
} |
33 |
// Timer End |
34 |
void TimerEnd(void) |
35 |
{ |
36 |
*T0_MODE = 0x0000; |
37 |
if (TimerInterruptID >= 0){ |
38 |
DisableIntc(9); |
39 |
RemoveIntcHandler(9, TimerInterruptID); |
40 |
TimerInterruptID = -1; |
41 |
} |
42 |
TimerInterruptCount = 0; |
43 |
} |