Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystem app epson mbed msp430 pl tests
mcp23s17.h@0:c643d398cdb6, 2018-01-11 (annotated)
- Committer:
- marcbax
- Date:
- Thu Jan 11 13:42:27 2018 +0000
- Revision:
- 0:c643d398cdb6
Marc Bax version 180111. It hangs on the WritePartImage in the RedrawAlphabet routine in hangman.cpp. Within that call it does execute Ypos(), but not Xpos().
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| marcbax | 0:c643d398cdb6 | 1 | // | 
| marcbax | 0:c643d398cdb6 | 2 | // Filename: mcp23s17.h | 
| marcbax | 0:c643d398cdb6 | 3 | // | 
| marcbax | 0:c643d398cdb6 | 4 | // Flexbook Hardware Abstraction Layer. | 
| marcbax | 0:c643d398cdb6 | 5 | // | 
| marcbax | 0:c643d398cdb6 | 6 | |
| marcbax | 0:c643d398cdb6 | 7 | #ifndef MCP23S17_H | 
| marcbax | 0:c643d398cdb6 | 8 | #define MCP23S17_H | 
| marcbax | 0:c643d398cdb6 | 9 | |
| marcbax | 0:c643d398cdb6 | 10 | #include "mbed.h" | 
| marcbax | 0:c643d398cdb6 | 11 | |
| marcbax | 0:c643d398cdb6 | 12 | namespace HAL { | 
| marcbax | 0:c643d398cdb6 | 13 | |
| marcbax | 0:c643d398cdb6 | 14 | /** | 
| marcbax | 0:c643d398cdb6 | 15 | * @brief MCP23S17 register addresses in bank 0 mode. | 
| marcbax | 0:c643d398cdb6 | 16 | */ | 
| marcbax | 0:c643d398cdb6 | 17 | enum REG_MCP23S17 | 
| marcbax | 0:c643d398cdb6 | 18 | { | 
| marcbax | 0:c643d398cdb6 | 19 | IODIRA = 0x00, | 
| marcbax | 0:c643d398cdb6 | 20 | IODIRB = 0x01, | 
| marcbax | 0:c643d398cdb6 | 21 | IPOLA = 0x02, | 
| marcbax | 0:c643d398cdb6 | 22 | IPOLB = 0x03, | 
| marcbax | 0:c643d398cdb6 | 23 | GPINTENA = 0x04, | 
| marcbax | 0:c643d398cdb6 | 24 | GPINTENB = 0x05, | 
| marcbax | 0:c643d398cdb6 | 25 | DEFVALA = 0x06, | 
| marcbax | 0:c643d398cdb6 | 26 | DEFVALB = 0x07, | 
| marcbax | 0:c643d398cdb6 | 27 | INTCONA = 0x08, | 
| marcbax | 0:c643d398cdb6 | 28 | INTCONB = 0x09, | 
| marcbax | 0:c643d398cdb6 | 29 | IOCON1 = 0x0a, | 
| marcbax | 0:c643d398cdb6 | 30 | IOCON2 = 0x0b, | 
| marcbax | 0:c643d398cdb6 | 31 | GPPUA = 0x0c, | 
| marcbax | 0:c643d398cdb6 | 32 | GPPUB = 0x0d, | 
| marcbax | 0:c643d398cdb6 | 33 | INTFA = 0x0e, | 
| marcbax | 0:c643d398cdb6 | 34 | INTFB = 0x0f, | 
| marcbax | 0:c643d398cdb6 | 35 | INTCAPA = 0x10, | 
| marcbax | 0:c643d398cdb6 | 36 | INTCAPB = 0x11, | 
| marcbax | 0:c643d398cdb6 | 37 | GPIOA = 0x12, | 
| marcbax | 0:c643d398cdb6 | 38 | GPIOB = 0x13, | 
| marcbax | 0:c643d398cdb6 | 39 | OLATA = 0x14, | 
| marcbax | 0:c643d398cdb6 | 40 | OLATB = 0x15 | 
| marcbax | 0:c643d398cdb6 | 41 | }; | 
| marcbax | 0:c643d398cdb6 | 42 | |
| marcbax | 0:c643d398cdb6 | 43 | /** | 
| marcbax | 0:c643d398cdb6 | 44 | * @brief Microchip MCP23S17 encapsulation. | 
| marcbax | 0:c643d398cdb6 | 45 | * This chip is an SPI connected I/O expander. | 
| marcbax | 0:c643d398cdb6 | 46 | * | 
| marcbax | 0:c643d398cdb6 | 47 | * Example usage: | 
| marcbax | 0:c643d398cdb6 | 48 | <pre> | 
| marcbax | 0:c643d398cdb6 | 49 | SPI spi(p5, p6, p7); | 
| marcbax | 0:c643d398cdb6 | 50 | DigitalOut cs(p19); | 
| marcbax | 0:c643d398cdb6 | 51 | MCP23S17 mcp23s17(0x00, spi, cs); | 
| marcbax | 0:c643d398cdb6 | 52 | ... | 
| marcbax | 0:c643d398cdb6 | 53 | mcp23s17.Write(GPIOB, 0xaa); | 
| marcbax | 0:c643d398cdb6 | 54 | </pre> | 
| marcbax | 0:c643d398cdb6 | 55 | * | 
| marcbax | 0:c643d398cdb6 | 56 | * The MCP23S17 uses pins 5, 6, 7 (SPI MOSI, MISO, SCK) and 19 (CS) and | 
| marcbax | 0:c643d398cdb6 | 57 | * the write command sets GPIOB to 0xaa. The chip address is 0x00. | 
| marcbax | 0:c643d398cdb6 | 58 | * | 
| marcbax | 0:c643d398cdb6 | 59 | * Note that this code example does not cover the setup of the chip | 
| marcbax | 0:c643d398cdb6 | 60 | * configuration registers. | 
| marcbax | 0:c643d398cdb6 | 61 | */ | 
| marcbax | 0:c643d398cdb6 | 62 | class MCP23S17 | 
| marcbax | 0:c643d398cdb6 | 63 | { | 
| marcbax | 0:c643d398cdb6 | 64 | public: | 
| marcbax | 0:c643d398cdb6 | 65 | /** | 
| marcbax | 0:c643d398cdb6 | 66 | * @brief Constructor. | 
| marcbax | 0:c643d398cdb6 | 67 | * @param address The SPI address offset of the chip. | 
| marcbax | 0:c643d398cdb6 | 68 | * @param SPI the SPI to use for communication. | 
| marcbax | 0:c643d398cdb6 | 69 | * @param cs The chip select pin. | 
| marcbax | 0:c643d398cdb6 | 70 | */ | 
| marcbax | 0:c643d398cdb6 | 71 | MCP23S17(int address, SPI &spi, DigitalOut &cs); | 
| marcbax | 0:c643d398cdb6 | 72 | |
| marcbax | 0:c643d398cdb6 | 73 | /** | 
| marcbax | 0:c643d398cdb6 | 74 | * @brief Read a register. | 
| marcbax | 0:c643d398cdb6 | 75 | * @param address The SPI address of the MCP23S17. | 
| marcbax | 0:c643d398cdb6 | 76 | * @param reg The register to read. | 
| marcbax | 0:c643d398cdb6 | 77 | * @return The register value. | 
| marcbax | 0:c643d398cdb6 | 78 | */ | 
| marcbax | 0:c643d398cdb6 | 79 | int Read(REG_MCP23S17 reg); | 
| marcbax | 0:c643d398cdb6 | 80 | |
| marcbax | 0:c643d398cdb6 | 81 | /** | 
| marcbax | 0:c643d398cdb6 | 82 | * @brief Write a register. | 
| marcbax | 0:c643d398cdb6 | 83 | * @param address The SPI address of the MCP23S17. | 
| marcbax | 0:c643d398cdb6 | 84 | * @param reg The register to write. | 
| marcbax | 0:c643d398cdb6 | 85 | * @param value The value to write to the register. | 
| marcbax | 0:c643d398cdb6 | 86 | */ | 
| marcbax | 0:c643d398cdb6 | 87 | void Write(REG_MCP23S17 reg, int value); | 
| marcbax | 0:c643d398cdb6 | 88 | |
| marcbax | 0:c643d398cdb6 | 89 | private: | 
| marcbax | 0:c643d398cdb6 | 90 | int address; | 
| marcbax | 0:c643d398cdb6 | 91 | SPI &spi; | 
| marcbax | 0:c643d398cdb6 | 92 | DigitalOut &cs; | 
| marcbax | 0:c643d398cdb6 | 93 | }; | 
| marcbax | 0:c643d398cdb6 | 94 | |
| marcbax | 0:c643d398cdb6 | 95 | } // End HAL namespace. | 
| marcbax | 0:c643d398cdb6 | 96 | |
| marcbax | 0:c643d398cdb6 | 97 | #endif // MCP23S17_H |