First Last
/
testInterruptKL25z
Test of interrupt at register level on KL25z
main.cpp@2:29e88718aded, 2013-08-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |