Demonstrate that you can't attach different GPIO IRQ handlers at the C API level.

Dependencies:   mbed

Committer:
infinnovation
Date:
Thu Jun 23 08:12:00 2016 +0000
Revision:
0:5274ce888dea
Initial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
infinnovation 0:5274ce888dea 1 // Demonstrate that only a single gpio_irq_handler may be used,
infinnovation 0:5274ce888dea 2 // rather than per pin or per port.
infinnovation 0:5274ce888dea 3 // On K64F, SW2=PTC6 and SW3=PTA4 i.e. on different ports.
infinnovation 0:5274ce888dea 4 #include "mbed.h"
infinnovation 0:5274ce888dea 5
infinnovation 0:5274ce888dea 6 volatile int count2 = 0;
infinnovation 0:5274ce888dea 7 volatile int count3 = 0;
infinnovation 0:5274ce888dea 8
infinnovation 0:5274ce888dea 9 void handler2(uint32_t id, gpio_irq_event event) {
infinnovation 0:5274ce888dea 10 ++ count2;
infinnovation 0:5274ce888dea 11 }
infinnovation 0:5274ce888dea 12
infinnovation 0:5274ce888dea 13 void handler3(uint32_t id, gpio_irq_event event) {
infinnovation 0:5274ce888dea 14 ++ count3;
infinnovation 0:5274ce888dea 15 }
infinnovation 0:5274ce888dea 16
infinnovation 0:5274ce888dea 17 int main() {
infinnovation 0:5274ce888dea 18 gpio_t sw2;
infinnovation 0:5274ce888dea 19 gpio_t sw3;
infinnovation 0:5274ce888dea 20 gpio_irq_t irq2;
infinnovation 0:5274ce888dea 21 gpio_irq_t irq3;
infinnovation 0:5274ce888dea 22
infinnovation 0:5274ce888dea 23 // Set up switches as inputs (enables port clocking)
infinnovation 0:5274ce888dea 24 gpio_init_in(&sw2, SW2);
infinnovation 0:5274ce888dea 25 gpio_irq_init(&irq2, SW2, handler2, 1);
infinnovation 0:5274ce888dea 26 gpio_irq_set(&irq2, IRQ_FALL, 1);
infinnovation 0:5274ce888dea 27
infinnovation 0:5274ce888dea 28 gpio_init_in(&sw3, SW3);
infinnovation 0:5274ce888dea 29 gpio_irq_init(&irq3, SW3, handler3, 1); // mbed now forgets handler2
infinnovation 0:5274ce888dea 30 gpio_irq_set(&irq3, IRQ_FALL, 1);
infinnovation 0:5274ce888dea 31
infinnovation 0:5274ce888dea 32 while (1) {
infinnovation 0:5274ce888dea 33 printf("Press SW2 and SW3 once each...\r\n");
infinnovation 0:5274ce888dea 34 wait(10);
infinnovation 0:5274ce888dea 35 // Each count should be 1, no?
infinnovation 0:5274ce888dea 36 printf("SW2 count=%d, SW3 count=%d\r\n", count2, count3);
infinnovation 0:5274ce888dea 37 }
infinnovation 0:5274ce888dea 38 }
infinnovation 0:5274ce888dea 39