| 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 | } |