mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

UserRevisionLine numberNew contents of line
be_bryan 0:b74591d5ab33 1 #include "test_env.h"
be_bryan 0:b74591d5ab33 2
be_bryan 0:b74591d5ab33 3 #if !DEVICE_INTERRUPTIN
be_bryan 0:b74591d5ab33 4 #error [NOT_SUPPORTED] InterruptIn is not supported
be_bryan 0:b74591d5ab33 5 #endif
be_bryan 0:b74591d5ab33 6
be_bryan 0:b74591d5ab33 7 DigitalOut myled(LED1);
be_bryan 0:b74591d5ab33 8 DigitalOut led2(LED2);
be_bryan 0:b74591d5ab33 9
be_bryan 0:b74591d5ab33 10 volatile int checks = 0;
be_bryan 0:b74591d5ab33 11 void in_handler() {
be_bryan 0:b74591d5ab33 12 checks++;
be_bryan 0:b74591d5ab33 13 led2 = !led2;
be_bryan 0:b74591d5ab33 14 }
be_bryan 0:b74591d5ab33 15
be_bryan 0:b74591d5ab33 16 #if defined(TARGET_KL25Z)
be_bryan 0:b74591d5ab33 17 #define PIN_OUT PTC6
be_bryan 0:b74591d5ab33 18 #define PIN_IN PTA5
be_bryan 0:b74591d5ab33 19
be_bryan 0:b74591d5ab33 20 #elif defined(TARGET_KL05Z)
be_bryan 0:b74591d5ab33 21 #define PIN_OUT PTB11
be_bryan 0:b74591d5ab33 22 #define PIN_IN PTB1
be_bryan 0:b74591d5ab33 23
be_bryan 0:b74591d5ab33 24 #elif defined(TARGET_LPC812)
be_bryan 0:b74591d5ab33 25 #define PIN_OUT D10
be_bryan 0:b74591d5ab33 26 #define PIN_IN D11
be_bryan 0:b74591d5ab33 27
be_bryan 0:b74591d5ab33 28 #elif defined(TARGET_LPC1114)
be_bryan 0:b74591d5ab33 29 #define PIN_OUT dp1
be_bryan 0:b74591d5ab33 30 #define PIN_IN dp2
be_bryan 0:b74591d5ab33 31
be_bryan 0:b74591d5ab33 32 #elif defined(TARGET_LPC1549)
be_bryan 0:b74591d5ab33 33 // TARGET_FF_ARDUINO cannot be used, because D0 is used as USBRX (USB serial
be_bryan 0:b74591d5ab33 34 // port pin), D1 is used as USBTX
be_bryan 0:b74591d5ab33 35 #define PIN_OUT D2
be_bryan 0:b74591d5ab33 36 #define PIN_IN D7
be_bryan 0:b74591d5ab33 37
be_bryan 0:b74591d5ab33 38 #elif defined(TARGET_LPC4088)
be_bryan 0:b74591d5ab33 39 #define PIN_IN (p11)
be_bryan 0:b74591d5ab33 40 #define PIN_OUT (p12)
be_bryan 0:b74591d5ab33 41
be_bryan 0:b74591d5ab33 42 #elif defined(TARGET_STM) && defined(TARGET_FF_ARDUINO)
be_bryan 0:b74591d5ab33 43 // TARGET_FF_ARDUINO cannot be used
be_bryan 0:b74591d5ab33 44 // D0 is used as USBRX for some NUCLEO64
be_bryan 0:b74591d5ab33 45 // D7 is not used for some NUCLEO32
be_bryan 0:b74591d5ab33 46 #define PIN_OUT D2
be_bryan 0:b74591d5ab33 47 #define PIN_IN D3
be_bryan 0:b74591d5ab33 48
be_bryan 0:b74591d5ab33 49 #elif defined(TARGET_DISCO_L053C8) || \
be_bryan 0:b74591d5ab33 50 defined(TARGET_DISCO_F334C8)
be_bryan 0:b74591d5ab33 51 #define PIN_OUT PA_15
be_bryan 0:b74591d5ab33 52 #define PIN_IN PA_8
be_bryan 0:b74591d5ab33 53
be_bryan 0:b74591d5ab33 54 #elif defined(TARGET_DISCO_L476VG)
be_bryan 0:b74591d5ab33 55 #define PIN_OUT PA_1
be_bryan 0:b74591d5ab33 56 #define PIN_IN PA_2
be_bryan 0:b74591d5ab33 57
be_bryan 0:b74591d5ab33 58 #elif defined(TARGET_ARCH_MAX) || \
be_bryan 0:b74591d5ab33 59 defined(TARGET_DISCO_F407VG) || \
be_bryan 0:b74591d5ab33 60 defined(TARGET_DISCO_F429ZI)|| \
be_bryan 0:b74591d5ab33 61 defined(TARGET_DISCO_F401VC)
be_bryan 0:b74591d5ab33 62 #define PIN_OUT PC_12
be_bryan 0:b74591d5ab33 63 #define PIN_IN PD_0
be_bryan 0:b74591d5ab33 64
be_bryan 0:b74591d5ab33 65 #elif defined(TARGET_RZ_A1H)
be_bryan 0:b74591d5ab33 66 #define PIN_OUT D1
be_bryan 0:b74591d5ab33 67 #define PIN_IN D5
be_bryan 0:b74591d5ab33 68
be_bryan 0:b74591d5ab33 69 #elif defined(TARGET_VK_RZ_A1H)
be_bryan 0:b74591d5ab33 70 #define PIN_OUT P3_2
be_bryan 0:b74591d5ab33 71 #define PIN_IN P5_6
be_bryan 0:b74591d5ab33 72
be_bryan 0:b74591d5ab33 73 #elif defined(TARGET_FF_ARDUINO)
be_bryan 0:b74591d5ab33 74 #define PIN_OUT D0
be_bryan 0:b74591d5ab33 75 #define PIN_IN D7
be_bryan 0:b74591d5ab33 76
be_bryan 0:b74591d5ab33 77 #elif defined(TARGET_MAXWSNENV)
be_bryan 0:b74591d5ab33 78 #define PIN_OUT P0_0
be_bryan 0:b74591d5ab33 79 #define PIN_IN P0_1
be_bryan 0:b74591d5ab33 80
be_bryan 0:b74591d5ab33 81 #elif defined(TARGET_MAX32600MBED)
be_bryan 0:b74591d5ab33 82 #define PIN_OUT P1_0
be_bryan 0:b74591d5ab33 83 #define PIN_IN P4_7
be_bryan 0:b74591d5ab33 84
be_bryan 0:b74591d5ab33 85 #elif defined(TARGET_EFM32LG_STK3600) || defined(TARGET_EFM32GG_STK3700) || defined(TARGET_EFM32WG_STK3800)
be_bryan 0:b74591d5ab33 86 #define PIN_OUT PD0
be_bryan 0:b74591d5ab33 87 #define PIN_IN PC3
be_bryan 0:b74591d5ab33 88
be_bryan 0:b74591d5ab33 89 #elif defined(TARGET_EFM32ZG_STK3200)
be_bryan 0:b74591d5ab33 90 #define PIN_OUT PD7
be_bryan 0:b74591d5ab33 91 #define PIN_IN PC1
be_bryan 0:b74591d5ab33 92
be_bryan 0:b74591d5ab33 93 #elif defined(TARGET_EFM32HG_STK3400)
be_bryan 0:b74591d5ab33 94 #define PIN_OUT PE10
be_bryan 0:b74591d5ab33 95 #define PIN_IN PC1
be_bryan 0:b74591d5ab33 96
be_bryan 0:b74591d5ab33 97 #elif defined(TARGET_EFM32PG_STK3401)
be_bryan 0:b74591d5ab33 98 #define PIN_OUT PC6
be_bryan 0:b74591d5ab33 99 #define PIN_IN PA3
be_bryan 0:b74591d5ab33 100
be_bryan 0:b74591d5ab33 101 #elif defined(TARGET_SAMR21G18A) || defined(TARGET_SAMD21J18A) || defined(TARGET_SAMD21G18A)
be_bryan 0:b74591d5ab33 102 #define PIN_OUT PB02
be_bryan 0:b74591d5ab33 103 #define PIN_IN PB03
be_bryan 0:b74591d5ab33 104
be_bryan 0:b74591d5ab33 105 #elif defined(TARGET_SAML21J18A)
be_bryan 0:b74591d5ab33 106 #define PIN_OUT PA02
be_bryan 0:b74591d5ab33 107 #define PIN_IN PA03
be_bryan 0:b74591d5ab33 108
be_bryan 0:b74591d5ab33 109 #elif defined(TARGET_SAMG55J19)
be_bryan 0:b74591d5ab33 110 #define PIN_OUT PA13
be_bryan 0:b74591d5ab33 111 #define PIN_IN PB13
be_bryan 0:b74591d5ab33 112
be_bryan 0:b74591d5ab33 113 #else
be_bryan 0:b74591d5ab33 114 #define PIN_IN (p5)
be_bryan 0:b74591d5ab33 115 #define PIN_OUT (p25)
be_bryan 0:b74591d5ab33 116
be_bryan 0:b74591d5ab33 117 #endif
be_bryan 0:b74591d5ab33 118
be_bryan 0:b74591d5ab33 119 DigitalOut out(PIN_OUT);
be_bryan 0:b74591d5ab33 120 InterruptIn in(PIN_IN);
be_bryan 0:b74591d5ab33 121
be_bryan 0:b74591d5ab33 122 #define IN_OUT_SET out = 1; myled = 1;
be_bryan 0:b74591d5ab33 123 #define IN_OUT_CLEAR out = 0; myled = 0;
be_bryan 0:b74591d5ab33 124
be_bryan 0:b74591d5ab33 125 void flipper() {
be_bryan 0:b74591d5ab33 126 for (int i = 0; i < 5; i++) {
be_bryan 0:b74591d5ab33 127 IN_OUT_SET;
be_bryan 0:b74591d5ab33 128 wait(0.2);
be_bryan 0:b74591d5ab33 129 IN_OUT_CLEAR;
be_bryan 0:b74591d5ab33 130 wait(0.2);
be_bryan 0:b74591d5ab33 131 }
be_bryan 0:b74591d5ab33 132 }
be_bryan 0:b74591d5ab33 133
be_bryan 0:b74591d5ab33 134 int main() {
be_bryan 0:b74591d5ab33 135 MBED_HOSTTEST_TIMEOUT(15);
be_bryan 0:b74591d5ab33 136 MBED_HOSTTEST_SELECT(default_auto);
be_bryan 0:b74591d5ab33 137 MBED_HOSTTEST_DESCRIPTION(InterruptIn);
be_bryan 0:b74591d5ab33 138 MBED_HOSTTEST_START("MBED_A7");
be_bryan 0:b74591d5ab33 139
be_bryan 0:b74591d5ab33 140 IN_OUT_CLEAR;
be_bryan 0:b74591d5ab33 141 //Test falling edges first
be_bryan 0:b74591d5ab33 142 in.rise(NULL);
be_bryan 0:b74591d5ab33 143 in.fall(in_handler);
be_bryan 0:b74591d5ab33 144 flipper();
be_bryan 0:b74591d5ab33 145
be_bryan 0:b74591d5ab33 146 if(checks != 5) {
be_bryan 0:b74591d5ab33 147 printf("MBED: falling edges test failed: %d\r\n",checks);
be_bryan 0:b74591d5ab33 148 MBED_HOSTTEST_RESULT(false);
be_bryan 0:b74591d5ab33 149 }
be_bryan 0:b74591d5ab33 150
be_bryan 0:b74591d5ab33 151 //Now test rising edges
be_bryan 0:b74591d5ab33 152 in.rise(in_handler);
be_bryan 0:b74591d5ab33 153 in.fall(NULL);
be_bryan 0:b74591d5ab33 154 flipper();
be_bryan 0:b74591d5ab33 155
be_bryan 0:b74591d5ab33 156 if (checks != 10) {
be_bryan 0:b74591d5ab33 157 printf("MBED: raising edges test failed: %d\r\n", checks);
be_bryan 0:b74591d5ab33 158 MBED_HOSTTEST_RESULT(false);
be_bryan 0:b74591d5ab33 159 }
be_bryan 0:b74591d5ab33 160
be_bryan 0:b74591d5ab33 161 //Now test switch off edge detection
be_bryan 0:b74591d5ab33 162 in.rise(NULL);
be_bryan 0:b74591d5ab33 163 in.fall(NULL);
be_bryan 0:b74591d5ab33 164 flipper();
be_bryan 0:b74591d5ab33 165
be_bryan 0:b74591d5ab33 166 if (checks != 10) {
be_bryan 0:b74591d5ab33 167 printf("MBED: edge detection switch off test failed: %d\r\n", checks);
be_bryan 0:b74591d5ab33 168 MBED_HOSTTEST_RESULT(false);
be_bryan 0:b74591d5ab33 169 }
be_bryan 0:b74591d5ab33 170
be_bryan 0:b74591d5ab33 171 //Finally test both
be_bryan 0:b74591d5ab33 172 in.rise(in_handler);
be_bryan 0:b74591d5ab33 173 in.fall(in_handler);
be_bryan 0:b74591d5ab33 174 flipper();
be_bryan 0:b74591d5ab33 175
be_bryan 0:b74591d5ab33 176 if (checks != 20) {
be_bryan 0:b74591d5ab33 177 printf("MBED: Simultaneous rising and falling edges failed: %d\r\n", checks);
be_bryan 0:b74591d5ab33 178 MBED_HOSTTEST_RESULT(false);
be_bryan 0:b74591d5ab33 179 }
be_bryan 0:b74591d5ab33 180
be_bryan 0:b74591d5ab33 181 MBED_HOSTTEST_RESULT(true);
be_bryan 0:b74591d5ab33 182 }