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