Simple MCP23017 I2C 16bit IO expander IC
MCP23017.cpp@0:6dd30d790eff, 2014-06-02 (annotated)
- Committer:
- hsgw
- Date:
- Mon Jun 02 05:38:36 2014 +0000
- Revision:
- 0:6dd30d790eff
1st commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hsgw | 0:6dd30d790eff | 1 | /* MCP23017 Library for mbed |
hsgw | 0:6dd30d790eff | 2 | * Copyright (c) 2014, Takuya Urakawa |
hsgw | 0:6dd30d790eff | 3 | * |
hsgw | 0:6dd30d790eff | 4 | * This library is released under the MIT License |
hsgw | 0:6dd30d790eff | 5 | * See http://opensource.org/licenses/mit-license.php |
hsgw | 0:6dd30d790eff | 6 | */ |
hsgw | 0:6dd30d790eff | 7 | |
hsgw | 0:6dd30d790eff | 8 | #include "MCP23017.h" |
hsgw | 0:6dd30d790eff | 9 | |
hsgw | 0:6dd30d790eff | 10 | namespace MCP23017 { |
hsgw | 0:6dd30d790eff | 11 | |
hsgw | 0:6dd30d790eff | 12 | MCP23017::MCP23017(I2C &_i2c, char _addr): |
hsgw | 0:6dd30d790eff | 13 | mI2c(_i2c) |
hsgw | 0:6dd30d790eff | 14 | { |
hsgw | 0:6dd30d790eff | 15 | mWriteAddr = _addr & 0xFE; |
hsgw | 0:6dd30d790eff | 16 | mReadAddr = _addr | 0x01; |
hsgw | 0:6dd30d790eff | 17 | } |
hsgw | 0:6dd30d790eff | 18 | |
hsgw | 0:6dd30d790eff | 19 | void MCP23017::init(void){ |
hsgw | 0:6dd30d790eff | 20 | |
hsgw | 0:6dd30d790eff | 21 | // init config |
hsgw | 0:6dd30d790eff | 22 | i2cSend(REG_IOCON, 0); |
hsgw | 0:6dd30d790eff | 23 | |
hsgw | 0:6dd30d790eff | 24 | // port 0 |
hsgw | 0:6dd30d790eff | 25 | i2cSend(REG_GPIO, 0, 0); |
hsgw | 0:6dd30d790eff | 26 | |
hsgw | 0:6dd30d790eff | 27 | // port dirrection all input |
hsgw | 0:6dd30d790eff | 28 | i2cSend(REG_IODIR, 0, 0); |
hsgw | 0:6dd30d790eff | 29 | |
hsgw | 0:6dd30d790eff | 30 | // interupt off |
hsgw | 0:6dd30d790eff | 31 | i2cSend(REG_GPINTEN, 0, 0); |
hsgw | 0:6dd30d790eff | 32 | |
hsgw | 0:6dd30d790eff | 33 | // clear interrupt |
hsgw | 0:6dd30d790eff | 34 | read(MCP23017_PORTA); |
hsgw | 0:6dd30d790eff | 35 | read(MCP23017_PORTB); |
hsgw | 0:6dd30d790eff | 36 | } |
hsgw | 0:6dd30d790eff | 37 | |
hsgw | 0:6dd30d790eff | 38 | void MCP23017::setConfig(char _value){ |
hsgw | 0:6dd30d790eff | 39 | |
hsgw | 0:6dd30d790eff | 40 | i2cSend(REG_IOCON, _value); |
hsgw | 0:6dd30d790eff | 41 | } |
hsgw | 0:6dd30d790eff | 42 | |
hsgw | 0:6dd30d790eff | 43 | void MCP23017::setDirrection(char _port, char _value){ |
hsgw | 0:6dd30d790eff | 44 | |
hsgw | 0:6dd30d790eff | 45 | i2cSend(REG_IODIR + _port, _value); |
hsgw | 0:6dd30d790eff | 46 | } |
hsgw | 0:6dd30d790eff | 47 | |
hsgw | 0:6dd30d790eff | 48 | void MCP23017::setPullUp(char _port, char _value){ |
hsgw | 0:6dd30d790eff | 49 | |
hsgw | 0:6dd30d790eff | 50 | i2cSend(REG_GPPU + _port, _value); |
hsgw | 0:6dd30d790eff | 51 | } |
hsgw | 0:6dd30d790eff | 52 | |
hsgw | 0:6dd30d790eff | 53 | void MCP23017::setInputPolarity(char _port, char _value){ |
hsgw | 0:6dd30d790eff | 54 | |
hsgw | 0:6dd30d790eff | 55 | i2cSend(REG_IPOL + _port, _value); |
hsgw | 0:6dd30d790eff | 56 | } |
hsgw | 0:6dd30d790eff | 57 | |
hsgw | 0:6dd30d790eff | 58 | |
hsgw | 0:6dd30d790eff | 59 | void MCP23017::write(char _port, char _value){ |
hsgw | 0:6dd30d790eff | 60 | |
hsgw | 0:6dd30d790eff | 61 | i2cSend(REG_GPIO + _port, _value); |
hsgw | 0:6dd30d790eff | 62 | } |
hsgw | 0:6dd30d790eff | 63 | |
hsgw | 0:6dd30d790eff | 64 | char MCP23017::read(char _port){ |
hsgw | 0:6dd30d790eff | 65 | |
hsgw | 0:6dd30d790eff | 66 | return i2cRead(REG_GPIO + _port); |
hsgw | 0:6dd30d790eff | 67 | } |
hsgw | 0:6dd30d790eff | 68 | |
hsgw | 0:6dd30d790eff | 69 | //void MCP23017::setInterruptConfig(char _port, char _intcon, char _defval){ |
hsgw | 0:6dd30d790eff | 70 | // |
hsgw | 0:6dd30d790eff | 71 | // i2cSend(REG_INTCON + _port, _intcon); |
hsgw | 0:6dd30d790eff | 72 | // i2cSend(REG_DEFVAL + _port, _defval); |
hsgw | 0:6dd30d790eff | 73 | |
hsgw | 0:6dd30d790eff | 74 | //} |
hsgw | 0:6dd30d790eff | 75 | |
hsgw | 0:6dd30d790eff | 76 | //void MCP23017::interrupt(char _port, char _value){ |
hsgw | 0:6dd30d790eff | 77 | |
hsgw | 0:6dd30d790eff | 78 | // i2cSend(REG_GPINTEN + _port, _value); |
hsgw | 0:6dd30d790eff | 79 | // //Read from GPIO to clear interrupt flag |
hsgw | 0:6dd30d790eff | 80 | // read(_port); |
hsgw | 0:6dd30d790eff | 81 | //} |
hsgw | 0:6dd30d790eff | 82 | |
hsgw | 0:6dd30d790eff | 83 | //char MCP23017::readIntcap(char _port){ |
hsgw | 0:6dd30d790eff | 84 | |
hsgw | 0:6dd30d790eff | 85 | // return i2cRead(REG_INTCAP + _port); |
hsgw | 0:6dd30d790eff | 86 | //} |
hsgw | 0:6dd30d790eff | 87 | |
hsgw | 0:6dd30d790eff | 88 | } // end of namespace |
hsgw | 0:6dd30d790eff | 89 |