#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();
} |