typedef struct
{
uint32_t flashtim;
} tflashtim;
#define LPC_FLASHTIM ((tflashtim *) 0x4003C010)
void TIMER16_0_IRQHandler(void) {
if(LPC_TMR16B0->IR & (1<<0)) { //breakpoint is here
static int i;
++i;
LPC_TMR16B0->IR |= (1<<0);
}
}
int main(void) {
volatile int i;
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7); //enable clock for 16bit timer 0
LPC_IOCON->PIO0_8 = 0x02; //select pin function for match 0 timer 0
LPC_TMR16B0->MR0 = 1000;
LPC_TMR16B0->MCR |= (1<<1); //reset on MR0 match
LPC_TMR16B0->MCR |= (1<<0); //enable interrupt on match 0
LPC_TMR16B0->EMR |= (3<<4); //toggle pin on match
LPC_TMR16B0->IR |= (1<<0); //reset pending interrupt flag
NVIC_EnableIRQ(TIMER_16_0_IRQn); //general enable of TIMER_16_IRQ
LPC_TMR16B0->TCR |= (1<<0); //Counter enable
LPC_FLASHTIM->flashtim |= (2<<0);
//target speed = 48MHz, irc=12MHz
LPC_SYSCON->SYSPLLCLKSEL = 0; //pll source clock = internal rc oscillator
LPC_SYSCON->SYSPLLCTRL |= 3<<0; //m divider value = 4
LPC_SYSCON->SYSPLLCTRL |= 1<<5; //p divider value = 2;
LPC_SYSCON->SYSPLLCLKUEN &= ~(1<<0); //toggle pll clock update
LPC_SYSCON->SYSPLLCLKUEN |= (1<<0);
while(!(LPC_SYSCON->SYSPLLSTAT & 1)){ //wait for pll to lock
i++;
}
LPC_SYSCON->MAINCLKSEL = 3; //set pll as main clock
LPC_SYSCON->MAINCLKUEN = 0; //toggle main clock update
LPC_SYSCON->MAINCLKUEN = 1;
LPC_SYSCON->CLKOUTCLKSEL = 3; //CLKOUT clock source = System oscillator
LPC_SYSCON->CLKOUTDIV |= 10; //CLKOUT divider = 1
LPC_IOCON->PIO0_1 |= 0x01; //pin has clock out function
LPC_SYSCON->CLKOUTUEN &= ~(1<<0); //toggle clockout update
LPC_SYSCON->CLKOUTUEN |= 1<<0;
while(1) {
++i;
}
return 0;
} |