#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; |