Dependencies:   mbed

Committer:
simon
Date:
Tue Feb 09 11:00:52 2010 +0000
Revision:
0:a6ea53688962

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:a6ea53688962 1 // Example to set up an interrupt based on the LPC TIMER0 match register, sford
simon 0:a6ea53688962 2
simon 0:a6ea53688962 3 #include "mbed.h"
simon 0:a6ea53688962 4
simon 0:a6ea53688962 5 DigitalOut myled(LED1);
simon 0:a6ea53688962 6 DigitalOut irqled(LED2);
simon 0:a6ea53688962 7
simon 0:a6ea53688962 8 void myhandler() {
simon 0:a6ea53688962 9 // do something!
simon 0:a6ea53688962 10 irqled = !irqled;
simon 0:a6ea53688962 11
simon 0:a6ea53688962 12 // clear the TIMER0 interrupt
simon 0:a6ea53688962 13 LPC_TIM0->IR = 1;
simon 0:a6ea53688962 14 }
simon 0:a6ea53688962 15
simon 0:a6ea53688962 16 int main() {
simon 0:a6ea53688962 17 // power up TIMER0 (PCONP[1])
simon 0:a6ea53688962 18 LPC_SC->PCONP |= 1 << 1;
simon 0:a6ea53688962 19
simon 0:a6ea53688962 20 // reset and set TIMER0 to timer mode
simon 0:a6ea53688962 21 LPC_TIM0->TCR = 0x2;
simon 0:a6ea53688962 22 LPC_TIM0->CTCR = 0x0;
simon 0:a6ea53688962 23
simon 0:a6ea53688962 24 // set no prescaler
simon 0:a6ea53688962 25 LPC_TIM0->PR = 0;
simon 0:a6ea53688962 26
simon 0:a6ea53688962 27 // calculate period (1 interrupt every second)
simon 0:a6ea53688962 28 uint32_t period = SystemCoreClock / 4;
simon 0:a6ea53688962 29
simon 0:a6ea53688962 30 // set match register and enable interrupt
simon 0:a6ea53688962 31 LPC_TIM0->MR0 = period;
simon 0:a6ea53688962 32 LPC_TIM0->MCR |= 1 << 0; // interrupt on match
simon 0:a6ea53688962 33 LPC_TIM0->MCR |= 1 << 1; // reset on match
simon 0:a6ea53688962 34
simon 0:a6ea53688962 35 // enable the vector in the interrupt controller
simon 0:a6ea53688962 36 NVIC_SetVector(TIMER0_IRQn, (uint32_t)&myhandler);
simon 0:a6ea53688962 37 NVIC_EnableIRQ(TIMER0_IRQn);
simon 0:a6ea53688962 38
simon 0:a6ea53688962 39 // start the timer
simon 0:a6ea53688962 40 LPC_TIM0->TCR = 1;
simon 0:a6ea53688962 41
simon 0:a6ea53688962 42 // hang around!
simon 0:a6ea53688962 43 while(1) {
simon 0:a6ea53688962 44 myled = 1;
simon 0:a6ea53688962 45 wait(0.2);
simon 0:a6ea53688962 46 myled = 0;
simon 0:a6ea53688962 47 wait(0.2);
simon 0:a6ea53688962 48 }
simon 0:a6ea53688962 49 }