Added support for banked registers

Dependents:   Component_Test_Interface FalconWing MX_Spoile_Test Simple_Power_Distribution ... more

Revision:
1:e2edbd61f4d0
Parent:
0:1a9288cc0630
Child:
3:72da9cd002bd
--- a/MCP23017.cpp	Sat Dec 18 18:49:19 2010 +0000
+++ b/MCP23017.cpp	Mon Dec 20 15:53:38 2010 +0000
@@ -3,18 +3,29 @@
 *
 * Released under the MIT License: http://mbed.org/license/mit
 *
-* version 0.2
+* version 0.2 Initial Release
+* version 0.3 Cleaned up
 */
 
 #include "mbed.h"
 #include "MCP23017.h"
 
+/** Create an MCP23017 object connected to the specified I2C object and using the specified deviceAddress
+*
+* @param I2C &i2c the I2C port to connect to 
+* @param char deviceAddress the address of the MSC23017
+*/
 MCP23017::MCP23017(I2C &i2c, char deviceAddress) : _i2c(i2c) {
     _writeOpcode = deviceAddress & 0xFE; // low order bit = 0 for write
     _readOpcode  = deviceAddress | 0x01; // low order bit = 1 for read
     _init();
 }
 
+/** Read from specified MCP23017 register
+*
+* @param char address the internal registeraddress of the MSC23017
+* @returns data from register 
+*/
 char MCP23017::_read(char address) {
     char data[2];
     char result;
@@ -27,6 +38,10 @@
 }
 
 
+/** Write to specified MCP23017 register
+*
+* @param char address the internal registeraddress of the MSC23017
+*/
 void MCP23017::_write(char address, char byte) {
     char data[2];
 
@@ -36,15 +51,30 @@
 }
 
 
+/** Init MCP23017
+*
+* @param
+* @returns 
+*/
 void MCP23017::_init() {
     _write(IOCON, (IOCON_BYTE_MODE | IOCON_HAEN )); // Hardware addressing on, operations toggle between A and B registers
 
 }
 
+/** Set I/O direction of specified MCP23017 Port
+*
+* @param Port Port address (Port_A or Port_B)
+* @param char direction pin direction (0 = output, 1 = input)
+*/
 void MCP23017::direction(Port port, char direction) {
     _write(port + IODIRA, direction);
 }
 
+/** Set Pull-Up Resistors on specified MCP23017 Port
+*
+* @param Port Port address (Port_A or Port_B)
+* @param char offOrOn per pin (0 = off, 1 = on)
+*/
 void MCP23017::configurePullUps(Port port, char offOrOn) {
     _write(port + GPPUA, offOrOn);
 }
@@ -82,51 +112,21 @@
     _write(port + INTCONA, interruptControlBits);
 }
 
+/** Write to specified MCP23017 Port
+*
+* @param Port Port address (Port_A or Port_B)
+* @param char byte data to write
+*/
 void MCP23017::write(Port port, char byte) {
     _write(port + OLATA, byte);
-    
-//faster    (56 sec for lcd init)
-//   char data[2];
-//
-//   data[0] = OLATA + port;
-//   data[1] = byte;
-//   _i2c.write(_writeOpcode, data, 2);    // Write data to selected Register
-
-//faster  47 sec for complete init
-//   _i2c.start();
-//   _i2c.write(_writeOpcode);    // Select Device
-//   _i2c.write(OLATA + port);    // Select Register
-//   _i2c.write(byte);            // Write data to selected Register
-//   _i2c.stop();  
 }
     
-
+/** Read from specified MCP23017 Port
+*
+* @param Port Port address (Port_A or Port_B)
+* @returns data from Port 
+*/
 char MCP23017::read(Port port) {
     return _read(port + GPIOA);
 }
 
-// Optimised Databus write operation for Graphics LCD.
-//   Port A is used as databus, Port B is used as controlbus.
-//
-void MCP23017::databus_write(char data, char ctrl_1, char ctrl_2, char ctrl_3, char ctrl_4) {
-
-   _i2c.start();
-   _i2c.write(_writeOpcode);    // Select Device
-   _i2c.write(OLATA);           // Select Register A
-
-//Remove separate CS Low, to speed up
-//   _i2c.write(data);            // Write data to Port A Register and Auto-incr to Register B
-//   _i2c.write(ctrl_1);          // Write control to Port B  and Auto-incr to Register A
-   
-   _i2c.write(data);            // Write data to Port A Register and Auto-incr to Register B
-   _i2c.write(ctrl_2);          // Write control to Port B  and Auto-incr to Register A
-   
-   _i2c.write(data);            // Write data to Port A Register and Auto-incr to Register B
-   _i2c.write(ctrl_3);          // Write control to Port B  and Auto-incr to Register A
-
-//Remove separate CS High, to speed up
-//   _i2c.write(data);            // Write data to Port A Register and Auto-incr to Register B
-//   _i2c.write(ctrl_4);          // Write control to Port B  and Auto-incr to Register A
-   
-   _i2c.stop();  
-}
\ No newline at end of file