![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
-extracredit
Dependencies: mbed
MCP23S17.h@0:574e155464d5, 2015-01-28 (annotated)
- Committer:
- sheldonfernandes2404
- Date:
- Wed Jan 28 04:08:50 2015 +0000
- Revision:
- 0:574e155464d5
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sheldonfernandes2404 | 0:574e155464d5 | 1 | /* MCP23S17 - drive the Microchip MCP23S17 16-bit Port Extender using SPI |
sheldonfernandes2404 | 0:574e155464d5 | 2 | * Copyright (c) 2010 Romilly Cocking |
sheldonfernandes2404 | 0:574e155464d5 | 3 | * Released under the MIT License: http://mbed.org/license/mit |
sheldonfernandes2404 | 0:574e155464d5 | 4 | * |
sheldonfernandes2404 | 0:574e155464d5 | 5 | * version 0.4 |
sheldonfernandes2404 | 0:574e155464d5 | 6 | */ |
sheldonfernandes2404 | 0:574e155464d5 | 7 | #include "mbed.h" |
sheldonfernandes2404 | 0:574e155464d5 | 8 | |
sheldonfernandes2404 | 0:574e155464d5 | 9 | #ifndef MCP23S17_H |
sheldonfernandes2404 | 0:574e155464d5 | 10 | #define MCP23S17_H |
sheldonfernandes2404 | 0:574e155464d5 | 11 | |
sheldonfernandes2404 | 0:574e155464d5 | 12 | #define INTERRUPT_POLARITY_BIT 0x02 |
sheldonfernandes2404 | 0:574e155464d5 | 13 | #define INTERRUPT_MIRROR_BIT 0x40 |
sheldonfernandes2404 | 0:574e155464d5 | 14 | |
sheldonfernandes2404 | 0:574e155464d5 | 15 | // all register addresses assume IOCON.BANK = 0 (POR default) |
sheldonfernandes2404 | 0:574e155464d5 | 16 | |
sheldonfernandes2404 | 0:574e155464d5 | 17 | #define IODIRA 0x00 |
sheldonfernandes2404 | 0:574e155464d5 | 18 | #define GPINTENA 0x04 |
sheldonfernandes2404 | 0:574e155464d5 | 19 | #define DEFVALA 0x06 |
sheldonfernandes2404 | 0:574e155464d5 | 20 | #define INTCONA 0x08 |
sheldonfernandes2404 | 0:574e155464d5 | 21 | #define IOCON 0x0A |
sheldonfernandes2404 | 0:574e155464d5 | 22 | #define GPPUA 0x0C |
sheldonfernandes2404 | 0:574e155464d5 | 23 | #define GPIOA 0x12 |
sheldonfernandes2404 | 0:574e155464d5 | 24 | #define OLATA 0x14 |
sheldonfernandes2404 | 0:574e155464d5 | 25 | |
sheldonfernandes2404 | 0:574e155464d5 | 26 | // Control settings |
sheldonfernandes2404 | 0:574e155464d5 | 27 | |
sheldonfernandes2404 | 0:574e155464d5 | 28 | #define IOCON_BANK 0x80 // Banked registers |
sheldonfernandes2404 | 0:574e155464d5 | 29 | #define IOCON_BYTE_MODE 0x20 // Disables sequential operation. If bank = 0, operations toggle between A and B registers |
sheldonfernandes2404 | 0:574e155464d5 | 30 | #define IOCON_HAEN 0x08 // Hardware address enable |
sheldonfernandes2404 | 0:574e155464d5 | 31 | |
sheldonfernandes2404 | 0:574e155464d5 | 32 | enum Polarity { ACTIVE_LOW , ACTIVE_HIGH }; |
sheldonfernandes2404 | 0:574e155464d5 | 33 | enum Port { PORT_A, PORT_B }; |
sheldonfernandes2404 | 0:574e155464d5 | 34 | |
sheldonfernandes2404 | 0:574e155464d5 | 35 | class MCP23S17 { |
sheldonfernandes2404 | 0:574e155464d5 | 36 | public: |
sheldonfernandes2404 | 0:574e155464d5 | 37 | MCP23S17(SPI& spi, PinName ncs, char writeOpcode); |
sheldonfernandes2404 | 0:574e155464d5 | 38 | void direction(Port port, char direction); |
sheldonfernandes2404 | 0:574e155464d5 | 39 | void configurePullUps(Port port, char offOrOn); |
sheldonfernandes2404 | 0:574e155464d5 | 40 | void interruptEnable(Port port, char interruptsEnabledMask); |
sheldonfernandes2404 | 0:574e155464d5 | 41 | void interruptPolarity(Polarity polarity); |
sheldonfernandes2404 | 0:574e155464d5 | 42 | void mirrorInterrupts(bool mirror); |
sheldonfernandes2404 | 0:574e155464d5 | 43 | void defaultValue(Port port, char valuesToCompare); |
sheldonfernandes2404 | 0:574e155464d5 | 44 | void interruptControl(Port port, char interruptContolBits); |
sheldonfernandes2404 | 0:574e155464d5 | 45 | char read(Port port); |
sheldonfernandes2404 | 0:574e155464d5 | 46 | void write(Port port, char byte); |
sheldonfernandes2404 | 0:574e155464d5 | 47 | protected: |
sheldonfernandes2404 | 0:574e155464d5 | 48 | SPI& _spi; |
sheldonfernandes2404 | 0:574e155464d5 | 49 | DigitalOut _ncs; |
sheldonfernandes2404 | 0:574e155464d5 | 50 | void _init(); |
sheldonfernandes2404 | 0:574e155464d5 | 51 | void _write(Port port, char address, char data); |
sheldonfernandes2404 | 0:574e155464d5 | 52 | void _write(char address, char data); |
sheldonfernandes2404 | 0:574e155464d5 | 53 | char _read(Port port, char address); |
sheldonfernandes2404 | 0:574e155464d5 | 54 | char _read(char address); |
sheldonfernandes2404 | 0:574e155464d5 | 55 | char _readOpcode; |
sheldonfernandes2404 | 0:574e155464d5 | 56 | char _writeOpcode; |
sheldonfernandes2404 | 0:574e155464d5 | 57 | }; |
sheldonfernandes2404 | 0:574e155464d5 | 58 | |
sheldonfernandes2404 | 0:574e155464d5 | 59 | #endif |