Test program for MCP23S17

Dependencies:   ExioController MCP23S17 mbed-rtos mbed

Committer:
ryood
Date:
Sun Oct 30 16:58:11 2016 +0000
Revision:
3:3638468099de
Parent:
2:aae9ca66cc87
Child:
5:69ea7aa2a755
Add: ?????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:0b1ae70a694b 1 #include "mbed.h"
ryood 0:0b1ae70a694b 2 #include "rtos.h"
ryood 0:0b1ae70a694b 3 #include "ExioMcp23s17.h"
ryood 1:e0679b70b51d 4 #include "ExioMcp23s17DigitalIn.h"
ryood 2:aae9ca66cc87 5 #include "ExioMcp23s17PinDetect.h"
ryood 0:0b1ae70a694b 6
ryood 0:0b1ae70a694b 7 SPI Spi(PC_12, PC_11, PC_10); // SPI3: mosi, miso, sclk
ryood 0:0b1ae70a694b 8 //SPI Spi(PA_7, PA_6, PA_5); // SPI1: mosi, miso, sclk
ryood 0:0b1ae70a694b 9
ryood 0:0b1ae70a694b 10 // MExioMcp23s17(int hardwareaddress, SPI& spi, PinName nCs, PinName nReset);
ryood 0:0b1ae70a694b 11 ExioMcp23s17 Exio(0x00, Spi, PD_2, PA_13);
ryood 0:0b1ae70a694b 12
ryood 2:aae9ca66cc87 13 /*
ryood 0:0b1ae70a694b 14 void ExioMcp23s17Test()
ryood 0:0b1ae70a694b 15 {
ryood 0:0b1ae70a694b 16 printf("\r\n\n*** ExioMcp23s17 ***\r\n");
ryood 0:0b1ae70a694b 17
ryood 0:0b1ae70a694b 18 // Reset MCP23S17
ryood 0:0b1ae70a694b 19 Exio.reset();
ryood 0:0b1ae70a694b 20
ryood 0:0b1ae70a694b 21 // PORTA output
ryood 0:0b1ae70a694b 22 Exio.ioDirection(ExioPortA, 0x00);
ryood 0:0b1ae70a694b 23
ryood 0:0b1ae70a694b 24 // PORTB input
ryood 0:0b1ae70a694b 25 Exio.ioDirection(ExioPortB, 0xFF);
ryood 0:0b1ae70a694b 26 // PORTB pull-up
ryood 0:0b1ae70a694b 27 Exio.ioPullup(ExioPortB, 0xFF);
ryood 0:0b1ae70a694b 28 // PORTB invert polarity
ryood 0:0b1ae70a694b 29 Exio.ioPolarity(ExioPortB, 0xFF);
ryood 0:0b1ae70a694b 30
ryood 1:e0679b70b51d 31 // LED Check (PortA)
ryood 0:0b1ae70a694b 32 for (int i = 0; i < 8; i++) {
ryood 0:0b1ae70a694b 33 Exio.writePort(ExioPortA, 1 << i);
ryood 0:0b1ae70a694b 34 wait(0.1);
ryood 0:0b1ae70a694b 35 }
ryood 1:e0679b70b51d 36 Exio.writePort(ExioPortA, 0x00);
ryood 0:0b1ae70a694b 37
ryood 0:0b1ae70a694b 38 while (true) {
ryood 1:e0679b70b51d 39 uint8_t data = Exio.readPort(ExioPortB);
ryood 0:0b1ae70a694b 40 wait_us(1);
ryood 0:0b1ae70a694b 41 Exio.writePort(ExioPortA, data);
ryood 0:0b1ae70a694b 42 }
ryood 0:0b1ae70a694b 43 }
ryood 0:0b1ae70a694b 44
ryood 1:e0679b70b51d 45 void ExioMcp23s17DigitalInTest()
ryood 1:e0679b70b51d 46 {
ryood 1:e0679b70b51d 47 printf("\r\n\n*** ExioMcp23s17DigitalIn test ***\r\n");
ryood 1:e0679b70b51d 48
ryood 1:e0679b70b51d 49 Exio.reset();
ryood 1:e0679b70b51d 50
ryood 1:e0679b70b51d 51 // set PORTA as output
ryood 1:e0679b70b51d 52 Exio.ioDirection(ExioPortA, 0x00);
ryood 1:e0679b70b51d 53
ryood 1:e0679b70b51d 54 // set PORTB as input via ExioDigitalIn
ryood 1:e0679b70b51d 55 ExioMcp23s17DigitalIn inB0(Exio, ExioPortB, 0);
ryood 1:e0679b70b51d 56 ExioMcp23s17DigitalIn inB1(Exio, ExioPortB, 1);
ryood 1:e0679b70b51d 57 ExioMcp23s17DigitalIn inB2(Exio, ExioPortB, 2);
ryood 1:e0679b70b51d 58 ExioMcp23s17DigitalIn inB3(Exio, ExioPortB, 3);
ryood 1:e0679b70b51d 59 ExioMcp23s17DigitalIn inB4(Exio, ExioPortB, 4);
ryood 1:e0679b70b51d 60 ExioMcp23s17DigitalIn inB5(Exio, ExioPortB, 5);
ryood 1:e0679b70b51d 61 ExioMcp23s17DigitalIn inB6(Exio, ExioPortB, 6);
ryood 1:e0679b70b51d 62 ExioMcp23s17DigitalIn inB7(Exio, ExioPortB, 7);
ryood 1:e0679b70b51d 63
ryood 1:e0679b70b51d 64 inB0.mode(PullUp);
ryood 1:e0679b70b51d 65 inB1.mode(PullUp);
ryood 1:e0679b70b51d 66 inB2.mode(PullUp);
ryood 1:e0679b70b51d 67 inB3.mode(PullUp);
ryood 1:e0679b70b51d 68 inB4.mode(PullUp);
ryood 1:e0679b70b51d 69 inB5.mode(PullUp);
ryood 1:e0679b70b51d 70 inB6.mode(PullUp);
ryood 1:e0679b70b51d 71 inB7.mode(PullUp);
ryood 1:e0679b70b51d 72
ryood 1:e0679b70b51d 73 // LED Check (PortA)
ryood 1:e0679b70b51d 74 for (int i = 0; i < 8; i++) {
ryood 1:e0679b70b51d 75 Exio.writePort(ExioPortA, 1 << i);
ryood 1:e0679b70b51d 76 wait(0.1);
ryood 1:e0679b70b51d 77 }
ryood 1:e0679b70b51d 78 Exio.writePort(ExioPortA, 0x00);
ryood 1:e0679b70b51d 79
ryood 1:e0679b70b51d 80 while (true) {
ryood 1:e0679b70b51d 81
ryood 1:e0679b70b51d 82 // read PORTB via ExioMcp23s17DigitalIn
ryood 1:e0679b70b51d 83 uint8_t data = 0;
ryood 1:e0679b70b51d 84 data |= inB0.read();
ryood 1:e0679b70b51d 85 data |= inB1.read() << 1;
ryood 1:e0679b70b51d 86 data |= inB2.read() << 2;
ryood 1:e0679b70b51d 87 data |= inB3.read() << 3;
ryood 1:e0679b70b51d 88 data |= inB4.read() << 4;
ryood 1:e0679b70b51d 89 data |= inB5.read() << 5;
ryood 1:e0679b70b51d 90 data |= inB6.read() << 6;
ryood 1:e0679b70b51d 91 data |= inB7.read() << 7;
ryood 1:e0679b70b51d 92
ryood 1:e0679b70b51d 93 // write PORTA
ryood 1:e0679b70b51d 94 Exio.writePort(ExioPortA, data);
ryood 1:e0679b70b51d 95 }
ryood 1:e0679b70b51d 96 }
ryood 2:aae9ca66cc87 97 */
ryood 2:aae9ca66cc87 98
ryood 3:3638468099de 99 // トグル動作
ryood 3:3638468099de 100 bool pb0state = false;
ryood 2:aae9ca66cc87 101 void pb0Falled() {
ryood 3:3638468099de 102 uint8_t data = Exio.readPort(ExioPortA);
ryood 3:3638468099de 103 pb0state = !pb0state;
ryood 3:3638468099de 104 if (pb0state) {
ryood 3:3638468099de 105 data |= (1 << 0);
ryood 3:3638468099de 106 } else {
ryood 3:3638468099de 107 data &= ~(1 << 0);
ryood 3:3638468099de 108 }
ryood 3:3638468099de 109 Exio.writePort(ExioPortA, data);
ryood 2:aae9ca66cc87 110 }
ryood 2:aae9ca66cc87 111
ryood 2:aae9ca66cc87 112 void pb1Falled() {
ryood 2:aae9ca66cc87 113 Exio.writePort(ExioPortA, (1 << 1));
ryood 2:aae9ca66cc87 114 }
ryood 2:aae9ca66cc87 115
ryood 2:aae9ca66cc87 116 void pb2Falled() {
ryood 2:aae9ca66cc87 117 Exio.writePort(ExioPortA, (1 << 2));
ryood 2:aae9ca66cc87 118 }
ryood 2:aae9ca66cc87 119
ryood 2:aae9ca66cc87 120 void pb3Falled() {
ryood 2:aae9ca66cc87 121 Exio.writePort(ExioPortA, (1 << 3));
ryood 2:aae9ca66cc87 122 }
ryood 2:aae9ca66cc87 123
ryood 2:aae9ca66cc87 124 void pb4Falled() {
ryood 2:aae9ca66cc87 125 Exio.writePort(ExioPortA, (1 << 4));
ryood 2:aae9ca66cc87 126 }
ryood 2:aae9ca66cc87 127
ryood 2:aae9ca66cc87 128 void pb5Falled() {
ryood 2:aae9ca66cc87 129 Exio.writePort(ExioPortA, (1 << 5));
ryood 2:aae9ca66cc87 130 }
ryood 2:aae9ca66cc87 131
ryood 2:aae9ca66cc87 132 void pb6Falled() {
ryood 2:aae9ca66cc87 133 Exio.writePort(ExioPortA, (1 << 6));
ryood 2:aae9ca66cc87 134 }
ryood 2:aae9ca66cc87 135
ryood 2:aae9ca66cc87 136 void pb7Falled() {
ryood 2:aae9ca66cc87 137 Exio.writePort(ExioPortA, (1 << 7));
ryood 2:aae9ca66cc87 138 }
ryood 2:aae9ca66cc87 139
ryood 2:aae9ca66cc87 140 void ExioMcp23s17PinDetectTest()
ryood 2:aae9ca66cc87 141 {
ryood 2:aae9ca66cc87 142 printf("\r\n\n*** ExioMcp23s17PinDetect test ***\r\n");
ryood 2:aae9ca66cc87 143
ryood 2:aae9ca66cc87 144 Exio.reset();
ryood 2:aae9ca66cc87 145
ryood 2:aae9ca66cc87 146 // set PORTA as output
ryood 2:aae9ca66cc87 147 Exio.ioDirection(ExioPortA, 0x00);
ryood 2:aae9ca66cc87 148
ryood 2:aae9ca66cc87 149 // create PORTB pins as inputs via ExioMcp23s17PinDetect
ryood 2:aae9ca66cc87 150 ExioMcp23s17PinDetect PinB0(Exio, ExioPortB, 0);
ryood 2:aae9ca66cc87 151 ExioMcp23s17PinDetect PinB1(Exio, ExioPortB, 1);
ryood 2:aae9ca66cc87 152 ExioMcp23s17PinDetect PinB2(Exio, ExioPortB, 2);
ryood 2:aae9ca66cc87 153 ExioMcp23s17PinDetect PinB3(Exio, ExioPortB, 3);
ryood 2:aae9ca66cc87 154 ExioMcp23s17PinDetect PinB4(Exio, ExioPortB, 4);
ryood 2:aae9ca66cc87 155 ExioMcp23s17PinDetect PinB5(Exio, ExioPortB, 5);
ryood 2:aae9ca66cc87 156 ExioMcp23s17PinDetect PinB6(Exio, ExioPortB, 6);
ryood 2:aae9ca66cc87 157 ExioMcp23s17PinDetect PinB7(Exio, ExioPortB, 7);
ryood 2:aae9ca66cc87 158
ryood 2:aae9ca66cc87 159 // assign callback functions
ryood 2:aae9ca66cc87 160 PinB0.attach_asserted(&pb0Falled);
ryood 2:aae9ca66cc87 161 PinB0.setAssertValue(0);
ryood 2:aae9ca66cc87 162 PinB0.setSampleFrequency();
ryood 2:aae9ca66cc87 163
ryood 2:aae9ca66cc87 164 PinB1.attach_asserted(&pb1Falled);
ryood 2:aae9ca66cc87 165 PinB1.setAssertValue(0);
ryood 2:aae9ca66cc87 166 PinB1.setSampleFrequency();
ryood 2:aae9ca66cc87 167
ryood 2:aae9ca66cc87 168 PinB2.attach_asserted(&pb2Falled);
ryood 2:aae9ca66cc87 169 PinB2.setAssertValue(0);
ryood 2:aae9ca66cc87 170 PinB2.setSampleFrequency();
ryood 2:aae9ca66cc87 171
ryood 2:aae9ca66cc87 172 PinB3.attach_asserted(&pb3Falled);
ryood 2:aae9ca66cc87 173 PinB3.setAssertValue(0);
ryood 2:aae9ca66cc87 174 PinB3.setSampleFrequency();
ryood 2:aae9ca66cc87 175
ryood 2:aae9ca66cc87 176 PinB4.attach_asserted(&pb4Falled);
ryood 2:aae9ca66cc87 177 PinB4.setAssertValue(0);
ryood 2:aae9ca66cc87 178 PinB4.setSampleFrequency();
ryood 2:aae9ca66cc87 179
ryood 2:aae9ca66cc87 180 PinB5.attach_asserted(&pb5Falled);
ryood 2:aae9ca66cc87 181 PinB5.setAssertValue(0);
ryood 2:aae9ca66cc87 182 PinB5.setSampleFrequency();
ryood 2:aae9ca66cc87 183
ryood 2:aae9ca66cc87 184 PinB6.attach_asserted(&pb6Falled);
ryood 2:aae9ca66cc87 185 PinB6.setAssertValue(0);
ryood 2:aae9ca66cc87 186 PinB6.setSampleFrequency();
ryood 2:aae9ca66cc87 187
ryood 2:aae9ca66cc87 188 PinB7.attach_asserted(&pb7Falled);
ryood 2:aae9ca66cc87 189 PinB7.setAssertValue(0);
ryood 2:aae9ca66cc87 190 PinB7.setSampleFrequency();
ryood 2:aae9ca66cc87 191
ryood 2:aae9ca66cc87 192
ryood 2:aae9ca66cc87 193 // LED Check (PortA)
ryood 2:aae9ca66cc87 194 for (int i = 0; i < 8; i++) {
ryood 2:aae9ca66cc87 195 Exio.writePort(ExioPortA, 1 << i);
ryood 2:aae9ca66cc87 196 wait(0.1);
ryood 2:aae9ca66cc87 197 }
ryood 2:aae9ca66cc87 198 Exio.writePort(ExioPortA, 0x00);
ryood 2:aae9ca66cc87 199
ryood 2:aae9ca66cc87 200 while (true) {
ryood 2:aae9ca66cc87 201 }
ryood 2:aae9ca66cc87 202 }
ryood 1:e0679b70b51d 203
ryood 0:0b1ae70a694b 204 int main()
ryood 0:0b1ae70a694b 205 {
ryood 1:e0679b70b51d 206 //ExioMcp23s17Test();
ryood 2:aae9ca66cc87 207 //ExioMcp23s17DigitalInTest();
ryood 2:aae9ca66cc87 208 ExioMcp23s17PinDetectTest();
ryood 1:e0679b70b51d 209 }