Colin Hogben
/
gpio_irq_test
Demonstrate that you can't attach different GPIO IRQ handlers at the C API level.
main.cpp@0:5274ce888dea, 2016-06-23 (annotated)
- Committer:
- infinnovation
- Date:
- Thu Jun 23 08:12:00 2016 +0000
- Revision:
- 0:5274ce888dea
Initial
Who changed what in which revision?
User | Revision | Line number | New 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 |