Test of interrupt at register level on KL25z

Dependencies:   mbed

Committer:
vsluiter
Date:
Fri Aug 02 23:53:40 2013 +0000
Revision:
2:29e88718aded
Parent:
1:ff3274c0ed87
Added index in event_irq_init

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsluiter 0:3e02d7f06e70 1 #include "mbed.h"
vsluiter 0:3e02d7f06e70 2
vsluiter 0:3e02d7f06e70 3 // Function prototype/forward declaration for ISR.
vsluiter 2:29e88718aded 4 void atint(void);
vsluiter 0:3e02d7f06e70 5
vsluiter 0:3e02d7f06e70 6 /** EINT3_IRQHandler
vsluiter 0:3e02d7f06e70 7 */
vsluiter 2:29e88718aded 8 extern "C" void PORTA_IRQHandler (void) {
vsluiter 0:3e02d7f06e70 9
vsluiter 0:3e02d7f06e70 10 // The "event" is connected to pin p10 which is LPC1768 P0_1
vsluiter 0:3e02d7f06e70 11 // so lets trap that and ignore all other GPIO interrupts.
vsluiter 0:3e02d7f06e70 12 // Test for IRQ on Port0.
vsluiter 0:3e02d7f06e70 13 if (PORTA->ISFR & (1<<5))
vsluiter 0:3e02d7f06e70 14 {
vsluiter 0:3e02d7f06e70 15 // If P0_1/p10 rises, call atint()
vsluiter 0:3e02d7f06e70 16 atint();
vsluiter 0:3e02d7f06e70 17 }
vsluiter 0:3e02d7f06e70 18
vsluiter 0:3e02d7f06e70 19 // Clear this and all other possible GPIO generated interrupts as they don't concern us.
vsluiter 0:3e02d7f06e70 20 PORTA->ISFR = 0x0000FFFF;
vsluiter 0:3e02d7f06e70 21 //LPC_GPIOINT->IO2IntClr = (LPC_GPIOINT->IO2IntStatR | LPC_GPIOINT->IO2IntStatF);
vsluiter 0:3e02d7f06e70 22 //LPC_GPIOINT->IO0IntClr = (LPC_GPIOINT->IO0IntStatR | LPC_GPIOINT>IO0IntStatF);
vsluiter 0:3e02d7f06e70 23 }
vsluiter 0:3e02d7f06e70 24
vsluiter 0:3e02d7f06e70 25 void event_irq_init(void) {
vsluiter 0:3e02d7f06e70 26 // Use macro to set p10 as an input.
vsluiter 0:3e02d7f06e70 27 //p10_AS_INPUT;
vsluiter 2:29e88718aded 28 PORTA->PCR[5] = (PORTA->PCR[5] & ~PORT_PCR_MUX_MASK) | PORT_PCR_MUX(1);
vsluiter 0:3e02d7f06e70 29 // Enable P0_1/p10 for rising edge interrupt generation.
vsluiter 2:29e88718aded 30 PORTA->PCR[5] = (PORTA->PCR[5] & ~PORT_PCR_IRQC_MASK) | PORT_PCR_IRQC(0xB);
vsluiter 0:3e02d7f06e70 31
vsluiter 0:3e02d7f06e70 32 //LPC_GPIOINT->IO0IntEnR |= (1UL << 1);
vsluiter 0:3e02d7f06e70 33 // Enable the interrupt.
vsluiter 0:3e02d7f06e70 34 NVIC_EnableIRQ(PORTA_IRQn);
vsluiter 0:3e02d7f06e70 35 }
vsluiter 0:3e02d7f06e70 36
ylebre 1:ff3274c0ed87 37
vsluiter 0:3e02d7f06e70 38 int main(void)
vsluiter 0:3e02d7f06e70 39 {
vsluiter 0:3e02d7f06e70 40 event_irq_init();
vsluiter 2:29e88718aded 41 while(1)
vsluiter 2:29e88718aded 42 {
vsluiter 2:29e88718aded 43 static volatile int i;
vsluiter 2:29e88718aded 44 i++;
vsluiter 2:29e88718aded 45 }
ylebre 1:ff3274c0ed87 46 }
ylebre 1:ff3274c0ed87 47
ylebre 1:ff3274c0ed87 48 void atint(void) {
ylebre 1:ff3274c0ed87 49 static int toggle = 0;
ylebre 1:ff3274c0ed87 50 DigitalOut rled(LED_RED);
ylebre 1:ff3274c0ed87 51 rled = toggle;
ylebre 1:ff3274c0ed87 52 toggle = !toggle;
ylebre 1:ff3274c0ed87 53 }