#defineTMR16B0TC 0x40004008 #define PCLKSEL0 0x400FC1A8 #define TMR16B0IR 0x40004000 #define TMR16B0TCR 0x40004004 #define TMR16B0PR 0x4000400C #define TMR16B0MR0 0x40004018 #define TMR16B0MCR 0x40004014 #define TMR16B0CTCR 0x40004070 #define PCONP 0x400FC0C4 #define ISER0 0xE000E100 int* pCLKSEL0= (int*) PCLKSEL0; int* tMR16B0TCR = (int*) TMR16B0TCR; int* tMR16B0PR = (int*) TMR16B0PR; int* tMR16B0MR0 = (int*) TMR16B0MR0; int* tMR16B0MCR = (int*) TMR16B0MCR; int* tMR16B0CTCR = (int*) TMR16B0CTCR; int* tMR16B0IR = (int*) TMR16B0IR; int* iSER0 = (int*) ISER1; int* tMR16B0TC = (int*) TMR16B0TC; int* pCONP = (int*) PCONP; void (*timer_tmr_callback)(); void init() { *pCONP = 0x2; *pCLKSEL0 = 0xC; *tMR16B0TC = 0x0; *tMR16B0PR = 1000 - 1; *tMR16B0CTCR = 0; } void timer_async_usec( unsigned int msec, void (*callback)()) { timer_tmr_callback = callback; *tMR16B0MR0 = msec; *tMR16B0MCR = 0x07; *iSER0 = (1 << 1); *tMR16B0TCR = 0x2; *tMR16B0TCR = 0x1; } void (TIMER0_IRQHandler(void)) { *tMR16B0IR = 0x1F; timer_tmr_callback(); } |
NSEL := 0; CCLKSEL := 3; MSEL := 11; Fcco := (2 * 12000000 * (MSEL + 1)) DIV (NSEL + 1); CCLK := Fcco DIV (CCLKSEL + 1); PCLK := CCLK DIV 4; |