#define TMR16B0TC 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; *tMR16B0MR0 = 1000; *tMR16B0MCR = 0x05; } 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(); } |
#include "lpc175x_6x.h" #include "lpc17xx_clkpwr.h" void (*timer_tmr_callback)(); #define CLKPWR_PCLKSEL_CCLK_DIV_8((uint32_t)(3))/* Ahem.. This definition seems to be missing from the include files. */ void init() { LPC_SC->PCONP = CLKPWR_PCONP_PCTIM0;/* NOTE: Turn off EVERYTHING but timer0! */ LPC_SC->PCLKSEL0 = CLKPWR_PCLKSEL_SET(CLKPWR_PCLKSEL_TIMER0, CLKPWR_PCLKSEL_CCLK_DIV_8); LPC_TIM0->TC = 0x0; LPC_TIM0->PR = 1000 - 1; LPC_TIM0->CTCR = 0; LPC_TIM0->MR0 = 1000; LPC_TIM0->MCR = TIM_INT_ON_MATCH(0) | TIM_STOP_ON_MATCH(0); } void timer_async_usec( unsigned int msec, void (*callback)()) { timer_tmr_callback = callback; LPC_TIM0->MR0 = msec; LPC_TIM0->MCR = TIM_INT_ON_MATCH(0) | TIM_RESET_ON_MATCH(0) | TIM_STOP_ON_MATCH(0); NVIC->ISER[1] = (1 << TIMER0_IRQn);/* using NVIC_EnableIRQ(TIMER0_IRQn); won't hurt */ LPC_TIM0->TCR = TIM_RESET; LPC_TIM0->TCR = TIM_ENABLE; } void (TIMER0_IRQHandler(void)) { LPC_TIM0->IR = 0x1F;/* note: NXP clears all 32 bits; I suggest using LPC_TIM0->IR = ~0; */ timer_tmr_callback(); } |