PCA9555

Dependents:   Telliskivi2_2014 PowerManagementBoard_Rev_A_2017

Committer:
Reiko
Date:
Mon Sep 16 16:09:56 2013 +0000
Revision:
5:73884f49ed97
Parent:
2:fae93e0841f6
Child:
6:0373a167d58b
Changed write method to use proper sequence of data, created separate method for writing pin changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Reiko 0:011622696878 1 #ifndef MBED_PCA9555_H
Reiko 0:011622696878 2 #define MBED_PCA9555_H
Reiko 2:fae93e0841f6 3
Reiko 2:fae93e0841f6 4 #include "mbed.h"
Reiko 2:fae93e0841f6 5 //#include "PinDetect.h"
Reiko 0:011622696878 6
Reiko 0:011622696878 7 /** Interface to the PCA9555 I2C 16 Bit IO expander */
Reiko 0:011622696878 8 class PCA9555 {
Reiko 2:fae93e0841f6 9 protected:
Reiko 2:fae93e0841f6 10 InterruptIn _irqpin;
Reiko 2:fae93e0841f6 11 FunctionPointer _callbackChange;
Reiko 0:011622696878 12 public:
Reiko 0:011622696878 13 /** Create an instance of the PCA9555 connected to specfied I2C pins, with the specified address.
Reiko 0:011622696878 14 *
Reiko 0:011622696878 15 * @param sda The I2C data pin
Reiko 0:011622696878 16 * @param scl The I2C clock pin
Reiko 0:011622696878 17 * @param address The I2C address for this PCA9555
Reiko 0:011622696878 18 */
Reiko 2:fae93e0841f6 19 PCA9555(PinName sda, PinName scl, PinName interrupPin, int address);
Reiko 0:011622696878 20
Reiko 0:011622696878 21 /** Read the IO pin level
Reiko 0:011622696878 22 *
Reiko 0:011622696878 23 * @return The two bytes read
Reiko 0:011622696878 24 */
Reiko 0:011622696878 25 int read();
Reiko 0:011622696878 26
Reiko 0:011622696878 27 /** Write to the IO pins
Reiko 0:011622696878 28 *
Reiko 0:011622696878 29 * @param data The 16 bits to write to the IO port
Reiko 0:011622696878 30 */
Reiko 0:011622696878 31 void write(int data);
Reiko 1:a6699cd826bb 32
Reiko 1:a6699cd826bb 33 void setPin(unsigned int pinNumber);
Reiko 1:a6699cd826bb 34 void clearPin(unsigned int pinNumber);
Reiko 1:a6699cd826bb 35 void togglePin(unsigned int pinNumber);
Reiko 2:fae93e0841f6 36 bool getPin(unsigned int pinNumber);
Reiko 5:73884f49ed97 37 void writePins();
Reiko 1:a6699cd826bb 38
Reiko 1:a6699cd826bb 39 void setDirection(int data);
Reiko 2:fae93e0841f6 40
Reiko 2:fae93e0841f6 41 void change(void (*function)(void));
Reiko 2:fae93e0841f6 42
Reiko 2:fae93e0841f6 43 template<typename T>
Reiko 2:fae93e0841f6 44 void change(T *object, void (T::*member)(void)) {
Reiko 2:fae93e0841f6 45 _callbackChange.attach(object, member);
Reiko 2:fae93e0841f6 46 }
Reiko 0:011622696878 47
Reiko 0:011622696878 48 private:
Reiko 0:011622696878 49 I2C _i2c;
Reiko 0:011622696878 50 int _address;
Reiko 2:fae93e0841f6 51 unsigned int currentWriteState;
Reiko 2:fae93e0841f6 52
Reiko 2:fae93e0841f6 53 void callChange(void);
Reiko 0:011622696878 54 };
Reiko 0:011622696878 55
Reiko 0:011622696878 56 #endif