blob: 53da68f5b6ece6deb9760cca4e46b1be04dbbdaa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
#include "test_env.h"
DigitalOut myled(LED1);
DigitalOut led2(LED2);
volatile int checks = 0;
void in_handler() {
checks++;
led2 = !led2;
}
#if defined(TARGET_KL25Z)
#define PIN_OUT PTC6
#define PIN_IN PTA5
#elif defined(TARGET_KL05Z)
#define PIN_OUT PTB11
#define PIN_IN PTB1
#elif defined(TARGET_LPC812)
#define PIN_OUT D10
#define PIN_IN D11
#elif defined(TARGET_LPC1114)
#define PIN_OUT dp1
#define PIN_IN dp2
#elif defined(TARGET_LPC1549)
// TARGET_FF_ARDUINO cannot be used, because D0 is used as USBRX (USB serial
// port pin), D1 is used as USBTX
#define PIN_OUT D2
#define PIN_IN D7
#elif defined(TARGET_LPC4088)
#define PIN_IN (p11)
#define PIN_OUT (p12)
#elif defined(TARGET_NUCLEO_F030R8) || \
defined(TARGET_NUCLEO_F070RB) || \
defined(TARGET_NUCLEO_F072RB) || \
defined(TARGET_NUCLEO_F091RC) || \
defined(TARGET_NUCLEO_F103RB) || \
defined(TARGET_NUCLEO_F302R8) || \
defined(TARGET_NUCLEO_F303RE) || \
defined(TARGET_NUCLEO_F334R8) || \
defined(TARGET_NUCLEO_F401RE) || \
defined(TARGET_NUCLEO_F411RE) || \
defined(TARGET_NUCLEO_L053R8) || \
defined(TARGET_NUCLEO_L073RZ) || \
defined(TARGET_NUCLEO_L152RE)
#define PIN_IN PB_8
#define PIN_OUT PC_7
#elif defined(TARGET_ARCH_MAX) || \
defined(TARGET_DISCO_F407VG) || \
defined(TARGET_DISCO_F429ZI)|| \
defined(TARGET_DISCO_F401VC)
#define PIN_OUT PC_12
#define PIN_IN PD_0
#elif defined(TARGET_RZ_A1H)
#define PIN_OUT D1
#define PIN_IN D5
#elif defined(TARGET_FF_ARDUINO)
#define PIN_OUT D0
#define PIN_IN D7
#elif defined(TARGET_MAXWSNENV)
#define PIN_OUT P0_0
#define PIN_IN P0_1
#elif defined(TARGET_MAX32600MBED)
#define PIN_OUT P1_0
#define PIN_IN P4_7
#else
#define PIN_IN (p5)
#define PIN_OUT (p25)
#endif
DigitalOut out(PIN_OUT);
InterruptIn in(PIN_IN);
#define IN_OUT_SET out = 1; myled = 1;
#define IN_OUT_CLEAR out = 0; myled = 0;
void flipper() {
for (int i = 0; i < 5; i++) {
IN_OUT_SET;
wait(0.2);
IN_OUT_CLEAR;
wait(0.2);
}
}
int main() {
MBED_HOSTTEST_TIMEOUT(15);
MBED_HOSTTEST_SELECT(default_auto);
MBED_HOSTTEST_DESCRIPTION(InterruptIn);
MBED_HOSTTEST_START("MBED_A7");
IN_OUT_CLEAR;
//Test falling edges first
in.rise(NULL);
in.fall(in_handler);
flipper();
if(checks != 5) {
printf("MBED: falling edges test failed: %d\r\n",checks);
MBED_HOSTTEST_RESULT(false);
}
//Now test rising edges
in.rise(in_handler);
in.fall(NULL);
flipper();
if (checks != 10) {
printf("MBED: raising edges test failed: %d\r\n", checks);
MBED_HOSTTEST_RESULT(false);
}
//Now test switch off edge detection
in.rise(NULL);
in.fall(NULL);
flipper();
if (checks != 10) {
printf("MBED: edge detection switch off test failed: %d\r\n", checks);
MBED_HOSTTEST_RESULT(false);
}
//Finally test both
in.rise(in_handler);
in.fall(in_handler);
flipper();
if (checks != 20) {
printf("MBED: Simultaneous rising and falling edges failed: %d\r\n", checks);
MBED_HOSTTEST_RESULT(false);
}
MBED_HOSTTEST_RESULT(true);
}
|