Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
mbed-os/features/unsupported/tests/mbed/interruptin/main.cpp@0:6bf0743ece18, 2020-03-28 (annotated)
- Committer:
- demayer
- Date:
- Sat Mar 28 15:28:19 2020 +0000
- Revision:
- 0:6bf0743ece18
IMU Thread with an event-queue running parallel to handle tasks like a 5 times blinking LED. Button with interrupt detected.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| demayer | 0:6bf0743ece18 | 1 | #include "test_env.h" |
| demayer | 0:6bf0743ece18 | 2 | |
| demayer | 0:6bf0743ece18 | 3 | #if !DEVICE_INTERRUPTIN |
| demayer | 0:6bf0743ece18 | 4 | #error [NOT_SUPPORTED] InterruptIn is not supported |
| demayer | 0:6bf0743ece18 | 5 | #endif |
| demayer | 0:6bf0743ece18 | 6 | |
| demayer | 0:6bf0743ece18 | 7 | DigitalOut myled(LED1); |
| demayer | 0:6bf0743ece18 | 8 | DigitalOut led2(LED2); |
| demayer | 0:6bf0743ece18 | 9 | |
| demayer | 0:6bf0743ece18 | 10 | volatile int checks = 0; |
| demayer | 0:6bf0743ece18 | 11 | void in_handler() { |
| demayer | 0:6bf0743ece18 | 12 | checks++; |
| demayer | 0:6bf0743ece18 | 13 | led2 = !led2; |
| demayer | 0:6bf0743ece18 | 14 | } |
| demayer | 0:6bf0743ece18 | 15 | |
| demayer | 0:6bf0743ece18 | 16 | #if defined(TARGET_KL25Z) |
| demayer | 0:6bf0743ece18 | 17 | #define PIN_OUT PTC6 |
| demayer | 0:6bf0743ece18 | 18 | #define PIN_IN PTA5 |
| demayer | 0:6bf0743ece18 | 19 | |
| demayer | 0:6bf0743ece18 | 20 | #elif defined(TARGET_KL05Z) |
| demayer | 0:6bf0743ece18 | 21 | #define PIN_OUT PTB11 |
| demayer | 0:6bf0743ece18 | 22 | #define PIN_IN PTB1 |
| demayer | 0:6bf0743ece18 | 23 | |
| demayer | 0:6bf0743ece18 | 24 | #elif defined(TARGET_LPC812) |
| demayer | 0:6bf0743ece18 | 25 | #define PIN_OUT D10 |
| demayer | 0:6bf0743ece18 | 26 | #define PIN_IN D11 |
| demayer | 0:6bf0743ece18 | 27 | |
| demayer | 0:6bf0743ece18 | 28 | #elif defined(TARGET_LPC1114) |
| demayer | 0:6bf0743ece18 | 29 | #define PIN_OUT dp1 |
| demayer | 0:6bf0743ece18 | 30 | #define PIN_IN dp2 |
| demayer | 0:6bf0743ece18 | 31 | |
| demayer | 0:6bf0743ece18 | 32 | #elif defined(TARGET_LPC1549) |
| demayer | 0:6bf0743ece18 | 33 | // TARGET_FF_ARDUINO cannot be used, because D0 is used as USBRX (USB serial |
| demayer | 0:6bf0743ece18 | 34 | // port pin), D1 is used as USBTX |
| demayer | 0:6bf0743ece18 | 35 | #define PIN_OUT D2 |
| demayer | 0:6bf0743ece18 | 36 | #define PIN_IN D7 |
| demayer | 0:6bf0743ece18 | 37 | |
| demayer | 0:6bf0743ece18 | 38 | #elif defined(TARGET_LPC4088) |
| demayer | 0:6bf0743ece18 | 39 | #define PIN_IN (p11) |
| demayer | 0:6bf0743ece18 | 40 | #define PIN_OUT (p12) |
| demayer | 0:6bf0743ece18 | 41 | |
| demayer | 0:6bf0743ece18 | 42 | #elif defined(TARGET_STM) && defined(TARGET_FF_ARDUINO) |
| demayer | 0:6bf0743ece18 | 43 | // TARGET_FF_ARDUINO cannot be used |
| demayer | 0:6bf0743ece18 | 44 | // D0 is used as USBRX for some NUCLEO64 |
| demayer | 0:6bf0743ece18 | 45 | // D7 is not used for some NUCLEO32 |
| demayer | 0:6bf0743ece18 | 46 | #define PIN_OUT D2 |
| demayer | 0:6bf0743ece18 | 47 | #define PIN_IN D3 |
| demayer | 0:6bf0743ece18 | 48 | |
| demayer | 0:6bf0743ece18 | 49 | #elif defined(TARGET_DISCO_L053C8) || \ |
| demayer | 0:6bf0743ece18 | 50 | defined(TARGET_DISCO_F334C8) |
| demayer | 0:6bf0743ece18 | 51 | #define PIN_OUT PA_15 |
| demayer | 0:6bf0743ece18 | 52 | #define PIN_IN PA_8 |
| demayer | 0:6bf0743ece18 | 53 | |
| demayer | 0:6bf0743ece18 | 54 | #elif defined(TARGET_DISCO_L476VG) |
| demayer | 0:6bf0743ece18 | 55 | #define PIN_OUT PA_1 |
| demayer | 0:6bf0743ece18 | 56 | #define PIN_IN PA_2 |
| demayer | 0:6bf0743ece18 | 57 | |
| demayer | 0:6bf0743ece18 | 58 | #elif defined(TARGET_ARCH_MAX) || \ |
| demayer | 0:6bf0743ece18 | 59 | defined(TARGET_DISCO_F407VG) || \ |
| demayer | 0:6bf0743ece18 | 60 | defined(TARGET_DISCO_F429ZI)|| \ |
| demayer | 0:6bf0743ece18 | 61 | defined(TARGET_DISCO_F401VC) |
| demayer | 0:6bf0743ece18 | 62 | #define PIN_OUT PC_12 |
| demayer | 0:6bf0743ece18 | 63 | #define PIN_IN PD_0 |
| demayer | 0:6bf0743ece18 | 64 | |
| demayer | 0:6bf0743ece18 | 65 | #elif defined(TARGET_RZ_A1H) |
| demayer | 0:6bf0743ece18 | 66 | #define PIN_OUT D1 |
| demayer | 0:6bf0743ece18 | 67 | #define PIN_IN D5 |
| demayer | 0:6bf0743ece18 | 68 | |
| demayer | 0:6bf0743ece18 | 69 | #elif defined(TARGET_VK_RZ_A1H) |
| demayer | 0:6bf0743ece18 | 70 | #define PIN_OUT P3_2 |
| demayer | 0:6bf0743ece18 | 71 | #define PIN_IN P5_6 |
| demayer | 0:6bf0743ece18 | 72 | |
| demayer | 0:6bf0743ece18 | 73 | #elif defined(TARGET_FF_ARDUINO) |
| demayer | 0:6bf0743ece18 | 74 | #define PIN_OUT D0 |
| demayer | 0:6bf0743ece18 | 75 | #define PIN_IN D7 |
| demayer | 0:6bf0743ece18 | 76 | |
| demayer | 0:6bf0743ece18 | 77 | #elif defined(TARGET_MAXWSNENV) |
| demayer | 0:6bf0743ece18 | 78 | #define PIN_OUT P0_0 |
| demayer | 0:6bf0743ece18 | 79 | #define PIN_IN P0_1 |
| demayer | 0:6bf0743ece18 | 80 | |
| demayer | 0:6bf0743ece18 | 81 | #elif defined(TARGET_MAX32600MBED) |
| demayer | 0:6bf0743ece18 | 82 | #define PIN_OUT P1_0 |
| demayer | 0:6bf0743ece18 | 83 | #define PIN_IN P4_7 |
| demayer | 0:6bf0743ece18 | 84 | |
| demayer | 0:6bf0743ece18 | 85 | #elif defined(TARGET_EFM32LG_STK3600) || defined(TARGET_EFM32GG_STK3700) || defined(TARGET_EFM32WG_STK3800) |
| demayer | 0:6bf0743ece18 | 86 | #define PIN_OUT PD0 |
| demayer | 0:6bf0743ece18 | 87 | #define PIN_IN PC3 |
| demayer | 0:6bf0743ece18 | 88 | |
| demayer | 0:6bf0743ece18 | 89 | #elif defined(TARGET_EFM32ZG_STK3200) |
| demayer | 0:6bf0743ece18 | 90 | #define PIN_OUT PD7 |
| demayer | 0:6bf0743ece18 | 91 | #define PIN_IN PC1 |
| demayer | 0:6bf0743ece18 | 92 | |
| demayer | 0:6bf0743ece18 | 93 | #elif defined(TARGET_EFM32HG_STK3400) |
| demayer | 0:6bf0743ece18 | 94 | #define PIN_OUT PE10 |
| demayer | 0:6bf0743ece18 | 95 | #define PIN_IN PC1 |
| demayer | 0:6bf0743ece18 | 96 | |
| demayer | 0:6bf0743ece18 | 97 | #elif defined(TARGET_EFM32PG_STK3401) |
| demayer | 0:6bf0743ece18 | 98 | #define PIN_OUT PC6 |
| demayer | 0:6bf0743ece18 | 99 | #define PIN_IN PA3 |
| demayer | 0:6bf0743ece18 | 100 | |
| demayer | 0:6bf0743ece18 | 101 | #elif defined(TARGET_SAMR21G18A) || defined(TARGET_SAMD21J18A) || defined(TARGET_SAMD21G18A) |
| demayer | 0:6bf0743ece18 | 102 | #define PIN_OUT PB02 |
| demayer | 0:6bf0743ece18 | 103 | #define PIN_IN PB03 |
| demayer | 0:6bf0743ece18 | 104 | |
| demayer | 0:6bf0743ece18 | 105 | #elif defined(TARGET_SAML21J18A) |
| demayer | 0:6bf0743ece18 | 106 | #define PIN_OUT PA02 |
| demayer | 0:6bf0743ece18 | 107 | #define PIN_IN PA03 |
| demayer | 0:6bf0743ece18 | 108 | |
| demayer | 0:6bf0743ece18 | 109 | #elif defined(TARGET_SAMG55J19) |
| demayer | 0:6bf0743ece18 | 110 | #define PIN_OUT PA13 |
| demayer | 0:6bf0743ece18 | 111 | #define PIN_IN PB13 |
| demayer | 0:6bf0743ece18 | 112 | |
| demayer | 0:6bf0743ece18 | 113 | #else |
| demayer | 0:6bf0743ece18 | 114 | #define PIN_IN (p5) |
| demayer | 0:6bf0743ece18 | 115 | #define PIN_OUT (p25) |
| demayer | 0:6bf0743ece18 | 116 | |
| demayer | 0:6bf0743ece18 | 117 | #endif |
| demayer | 0:6bf0743ece18 | 118 | |
| demayer | 0:6bf0743ece18 | 119 | DigitalOut out(PIN_OUT); |
| demayer | 0:6bf0743ece18 | 120 | InterruptIn in(PIN_IN); |
| demayer | 0:6bf0743ece18 | 121 | |
| demayer | 0:6bf0743ece18 | 122 | #define IN_OUT_SET out = 1; myled = 1; |
| demayer | 0:6bf0743ece18 | 123 | #define IN_OUT_CLEAR out = 0; myled = 0; |
| demayer | 0:6bf0743ece18 | 124 | |
| demayer | 0:6bf0743ece18 | 125 | void flipper() { |
| demayer | 0:6bf0743ece18 | 126 | for (int i = 0; i < 5; i++) { |
| demayer | 0:6bf0743ece18 | 127 | IN_OUT_SET; |
| demayer | 0:6bf0743ece18 | 128 | wait(0.2); |
| demayer | 0:6bf0743ece18 | 129 | IN_OUT_CLEAR; |
| demayer | 0:6bf0743ece18 | 130 | wait(0.2); |
| demayer | 0:6bf0743ece18 | 131 | } |
| demayer | 0:6bf0743ece18 | 132 | } |
| demayer | 0:6bf0743ece18 | 133 | |
| demayer | 0:6bf0743ece18 | 134 | int main() { |
| demayer | 0:6bf0743ece18 | 135 | MBED_HOSTTEST_TIMEOUT(15); |
| demayer | 0:6bf0743ece18 | 136 | MBED_HOSTTEST_SELECT(default_auto); |
| demayer | 0:6bf0743ece18 | 137 | MBED_HOSTTEST_DESCRIPTION(InterruptIn); |
| demayer | 0:6bf0743ece18 | 138 | MBED_HOSTTEST_START("MBED_A7"); |
| demayer | 0:6bf0743ece18 | 139 | |
| demayer | 0:6bf0743ece18 | 140 | IN_OUT_CLEAR; |
| demayer | 0:6bf0743ece18 | 141 | //Test falling edges first |
| demayer | 0:6bf0743ece18 | 142 | in.rise(NULL); |
| demayer | 0:6bf0743ece18 | 143 | in.fall(in_handler); |
| demayer | 0:6bf0743ece18 | 144 | flipper(); |
| demayer | 0:6bf0743ece18 | 145 | |
| demayer | 0:6bf0743ece18 | 146 | if(checks != 5) { |
| demayer | 0:6bf0743ece18 | 147 | printf("MBED: falling edges test failed: %d\r\n",checks); |
| demayer | 0:6bf0743ece18 | 148 | MBED_HOSTTEST_RESULT(false); |
| demayer | 0:6bf0743ece18 | 149 | } |
| demayer | 0:6bf0743ece18 | 150 | |
| demayer | 0:6bf0743ece18 | 151 | //Now test rising edges |
| demayer | 0:6bf0743ece18 | 152 | in.rise(in_handler); |
| demayer | 0:6bf0743ece18 | 153 | in.fall(NULL); |
| demayer | 0:6bf0743ece18 | 154 | flipper(); |
| demayer | 0:6bf0743ece18 | 155 | |
| demayer | 0:6bf0743ece18 | 156 | if (checks != 10) { |
| demayer | 0:6bf0743ece18 | 157 | printf("MBED: raising edges test failed: %d\r\n", checks); |
| demayer | 0:6bf0743ece18 | 158 | MBED_HOSTTEST_RESULT(false); |
| demayer | 0:6bf0743ece18 | 159 | } |
| demayer | 0:6bf0743ece18 | 160 | |
| demayer | 0:6bf0743ece18 | 161 | //Now test switch off edge detection |
| demayer | 0:6bf0743ece18 | 162 | in.rise(NULL); |
| demayer | 0:6bf0743ece18 | 163 | in.fall(NULL); |
| demayer | 0:6bf0743ece18 | 164 | flipper(); |
| demayer | 0:6bf0743ece18 | 165 | |
| demayer | 0:6bf0743ece18 | 166 | if (checks != 10) { |
| demayer | 0:6bf0743ece18 | 167 | printf("MBED: edge detection switch off test failed: %d\r\n", checks); |
| demayer | 0:6bf0743ece18 | 168 | MBED_HOSTTEST_RESULT(false); |
| demayer | 0:6bf0743ece18 | 169 | } |
| demayer | 0:6bf0743ece18 | 170 | |
| demayer | 0:6bf0743ece18 | 171 | //Finally test both |
| demayer | 0:6bf0743ece18 | 172 | in.rise(in_handler); |
| demayer | 0:6bf0743ece18 | 173 | in.fall(in_handler); |
| demayer | 0:6bf0743ece18 | 174 | flipper(); |
| demayer | 0:6bf0743ece18 | 175 | |
| demayer | 0:6bf0743ece18 | 176 | if (checks != 20) { |
| demayer | 0:6bf0743ece18 | 177 | printf("MBED: Simultaneous rising and falling edges failed: %d\r\n", checks); |
| demayer | 0:6bf0743ece18 | 178 | MBED_HOSTTEST_RESULT(false); |
| demayer | 0:6bf0743ece18 | 179 | } |
| demayer | 0:6bf0743ece18 | 180 | |
| demayer | 0:6bf0743ece18 | 181 | MBED_HOSTTEST_RESULT(true); |
| demayer | 0:6bf0743ece18 | 182 | } |