Simple MCP23017 I2C 16bit IO expander IC

Committer:
hsgw
Date:
Mon Jun 02 05:38:36 2014 +0000
Revision:
0:6dd30d790eff
1st commit

Who changed what in which revision?

UserRevisionLine numberNew 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