Test program for MCP23S17
Dependencies: ExioController MCP23S17 mbed-rtos mbed
main.cpp@1:e0679b70b51d, 2016-10-30 (annotated)
- Committer:
- ryood
- Date:
- Sun Oct 30 14:17:53 2016 +0000
- Revision:
- 1:e0679b70b51d
- Parent:
- 0:0b1ae70a694b
- Child:
- 2:aae9ca66cc87
Impl. ExioMcp23s17DigitalInTest
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:0b1ae70a694b | 5 | |
ryood | 0:0b1ae70a694b | 6 | SPI Spi(PC_12, PC_11, PC_10); // SPI3: mosi, miso, sclk |
ryood | 0:0b1ae70a694b | 7 | //SPI Spi(PA_7, PA_6, PA_5); // SPI1: mosi, miso, sclk |
ryood | 0:0b1ae70a694b | 8 | |
ryood | 0:0b1ae70a694b | 9 | // MExioMcp23s17(int hardwareaddress, SPI& spi, PinName nCs, PinName nReset); |
ryood | 0:0b1ae70a694b | 10 | ExioMcp23s17 Exio(0x00, Spi, PD_2, PA_13); |
ryood | 0:0b1ae70a694b | 11 | |
ryood | 0:0b1ae70a694b | 12 | void ExioMcp23s17Test() |
ryood | 0:0b1ae70a694b | 13 | { |
ryood | 0:0b1ae70a694b | 14 | printf("\r\n\n*** ExioMcp23s17 ***\r\n"); |
ryood | 0:0b1ae70a694b | 15 | |
ryood | 0:0b1ae70a694b | 16 | // Reset MCP23S17 |
ryood | 0:0b1ae70a694b | 17 | Exio.reset(); |
ryood | 0:0b1ae70a694b | 18 | |
ryood | 0:0b1ae70a694b | 19 | // PORTA output |
ryood | 0:0b1ae70a694b | 20 | Exio.ioDirection(ExioPortA, 0x00); |
ryood | 0:0b1ae70a694b | 21 | |
ryood | 0:0b1ae70a694b | 22 | // PORTB input |
ryood | 0:0b1ae70a694b | 23 | Exio.ioDirection(ExioPortB, 0xFF); |
ryood | 0:0b1ae70a694b | 24 | // PORTB pull-up |
ryood | 0:0b1ae70a694b | 25 | Exio.ioPullup(ExioPortB, 0xFF); |
ryood | 0:0b1ae70a694b | 26 | // PORTB invert polarity |
ryood | 0:0b1ae70a694b | 27 | Exio.ioPolarity(ExioPortB, 0xFF); |
ryood | 0:0b1ae70a694b | 28 | |
ryood | 1:e0679b70b51d | 29 | // LED Check (PortA) |
ryood | 0:0b1ae70a694b | 30 | for (int i = 0; i < 8; i++) { |
ryood | 0:0b1ae70a694b | 31 | Exio.writePort(ExioPortA, 1 << i); |
ryood | 0:0b1ae70a694b | 32 | wait(0.1); |
ryood | 0:0b1ae70a694b | 33 | } |
ryood | 1:e0679b70b51d | 34 | Exio.writePort(ExioPortA, 0x00); |
ryood | 0:0b1ae70a694b | 35 | |
ryood | 0:0b1ae70a694b | 36 | while (true) { |
ryood | 1:e0679b70b51d | 37 | uint8_t data = Exio.readPort(ExioPortB); |
ryood | 0:0b1ae70a694b | 38 | wait_us(1); |
ryood | 0:0b1ae70a694b | 39 | Exio.writePort(ExioPortA, data); |
ryood | 0:0b1ae70a694b | 40 | } |
ryood | 0:0b1ae70a694b | 41 | } |
ryood | 0:0b1ae70a694b | 42 | |
ryood | 1:e0679b70b51d | 43 | void ExioMcp23s17DigitalInTest() |
ryood | 1:e0679b70b51d | 44 | { |
ryood | 1:e0679b70b51d | 45 | printf("\r\n\n*** ExioMcp23s17DigitalIn test ***\r\n"); |
ryood | 1:e0679b70b51d | 46 | |
ryood | 1:e0679b70b51d | 47 | Exio.reset(); |
ryood | 1:e0679b70b51d | 48 | |
ryood | 1:e0679b70b51d | 49 | // set PORTA as output |
ryood | 1:e0679b70b51d | 50 | Exio.ioDirection(ExioPortA, 0x00); |
ryood | 1:e0679b70b51d | 51 | |
ryood | 1:e0679b70b51d | 52 | // set PORTB as input via ExioDigitalIn |
ryood | 1:e0679b70b51d | 53 | ExioMcp23s17DigitalIn inB0(Exio, ExioPortB, 0); |
ryood | 1:e0679b70b51d | 54 | ExioMcp23s17DigitalIn inB1(Exio, ExioPortB, 1); |
ryood | 1:e0679b70b51d | 55 | ExioMcp23s17DigitalIn inB2(Exio, ExioPortB, 2); |
ryood | 1:e0679b70b51d | 56 | ExioMcp23s17DigitalIn inB3(Exio, ExioPortB, 3); |
ryood | 1:e0679b70b51d | 57 | ExioMcp23s17DigitalIn inB4(Exio, ExioPortB, 4); |
ryood | 1:e0679b70b51d | 58 | ExioMcp23s17DigitalIn inB5(Exio, ExioPortB, 5); |
ryood | 1:e0679b70b51d | 59 | ExioMcp23s17DigitalIn inB6(Exio, ExioPortB, 6); |
ryood | 1:e0679b70b51d | 60 | ExioMcp23s17DigitalIn inB7(Exio, ExioPortB, 7); |
ryood | 1:e0679b70b51d | 61 | |
ryood | 1:e0679b70b51d | 62 | inB0.mode(PullUp); |
ryood | 1:e0679b70b51d | 63 | inB1.mode(PullUp); |
ryood | 1:e0679b70b51d | 64 | inB2.mode(PullUp); |
ryood | 1:e0679b70b51d | 65 | inB3.mode(PullUp); |
ryood | 1:e0679b70b51d | 66 | inB4.mode(PullUp); |
ryood | 1:e0679b70b51d | 67 | inB5.mode(PullUp); |
ryood | 1:e0679b70b51d | 68 | inB6.mode(PullUp); |
ryood | 1:e0679b70b51d | 69 | inB7.mode(PullUp); |
ryood | 1:e0679b70b51d | 70 | |
ryood | 1:e0679b70b51d | 71 | // LED Check (PortA) |
ryood | 1:e0679b70b51d | 72 | for (int i = 0; i < 8; i++) { |
ryood | 1:e0679b70b51d | 73 | Exio.writePort(ExioPortA, 1 << i); |
ryood | 1:e0679b70b51d | 74 | wait(0.1); |
ryood | 1:e0679b70b51d | 75 | } |
ryood | 1:e0679b70b51d | 76 | Exio.writePort(ExioPortA, 0x00); |
ryood | 1:e0679b70b51d | 77 | |
ryood | 1:e0679b70b51d | 78 | while (true) { |
ryood | 1:e0679b70b51d | 79 | |
ryood | 1:e0679b70b51d | 80 | // read PORTB via ExioMcp23s17DigitalIn |
ryood | 1:e0679b70b51d | 81 | uint8_t data = 0; |
ryood | 1:e0679b70b51d | 82 | data |= inB0.read(); |
ryood | 1:e0679b70b51d | 83 | data |= inB1.read() << 1; |
ryood | 1:e0679b70b51d | 84 | data |= inB2.read() << 2; |
ryood | 1:e0679b70b51d | 85 | data |= inB3.read() << 3; |
ryood | 1:e0679b70b51d | 86 | data |= inB4.read() << 4; |
ryood | 1:e0679b70b51d | 87 | data |= inB5.read() << 5; |
ryood | 1:e0679b70b51d | 88 | data |= inB6.read() << 6; |
ryood | 1:e0679b70b51d | 89 | data |= inB7.read() << 7; |
ryood | 1:e0679b70b51d | 90 | |
ryood | 1:e0679b70b51d | 91 | // write PORTA |
ryood | 1:e0679b70b51d | 92 | Exio.writePort(ExioPortA, data); |
ryood | 1:e0679b70b51d | 93 | } |
ryood | 1:e0679b70b51d | 94 | } |
ryood | 1:e0679b70b51d | 95 | |
ryood | 0:0b1ae70a694b | 96 | int main() |
ryood | 0:0b1ae70a694b | 97 | { |
ryood | 1:e0679b70b51d | 98 | //ExioMcp23s17Test(); |
ryood | 1:e0679b70b51d | 99 | ExioMcp23s17DigitalInTest(); |
ryood | 1:e0679b70b51d | 100 | |
ryood | 1:e0679b70b51d | 101 | } |