Test program for MCP23S17

Dependencies:   ExioController MCP23S17 mbed-rtos mbed

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?

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 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 }