The PCAL6416A is a low-voltage 16-bit general purpose I/O (GPIO) expander with interrupt. This component library is compatible to basic operation as GPIO expanders: PCAL6416A, PCAL9555, PCA9555, PCA9535, PCA9539, PCAL9554, PCA9554 and PCA9538. On addition to this, this library is including mbed-SDK-style APIs. APIs that similar to DigitaiInOut, DigitalOut, DigitalIn, BusInOUt, BusOut and BusIn are available.

This is a copy of the PCA9555 library by Akifumi "Tedd" OKANO, which is compatible with PCAL6416A chip.

Committer:
andriym
Date:
Wed Feb 15 10:07:59 2017 +0000
Revision:
0:035111d3d631
A change of name for the PCAL955x library to make it searchable for people needing PCAL6416A library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andriym 0:035111d3d631 1 /** GpioBusIn API for GPIO-expander component class
andriym 0:035111d3d631 2 *
andriym 0:035111d3d631 3 * @author Akifumi (Tedd) OKANO, NXP Semiconductors
andriym 0:035111d3d631 4 * @version 0.6
andriym 0:035111d3d631 5 * @date 19-Mar-2015
andriym 0:035111d3d631 6 *
andriym 0:035111d3d631 7 * Released under the Apache 2 license
andriym 0:035111d3d631 8 */
andriym 0:035111d3d631 9
andriym 0:035111d3d631 10 #ifndef MBED_GpioBusIn
andriym 0:035111d3d631 11 #define MBED_GpioBusIn
andriym 0:035111d3d631 12
andriym 0:035111d3d631 13 #include "mbed.h"
andriym 0:035111d3d631 14 #include "GpioBusInOut.h"
andriym 0:035111d3d631 15
andriym 0:035111d3d631 16 /** GpioBusIn class
andriym 0:035111d3d631 17 *
andriym 0:035111d3d631 18 * @class GpioBusIn
andriym 0:035111d3d631 19 *
andriym 0:035111d3d631 20 * "GpioBusIn" class works like "BusIn" class of mbed-SDK.
andriym 0:035111d3d631 21 * This class provides pin oriented API, abstracting the GPIO-expander chip.
andriym 0:035111d3d631 22 *
andriym 0:035111d3d631 23 * Example:
andriym 0:035111d3d631 24 * @code
andriym 0:035111d3d631 25 * #include "mbed.h"
andriym 0:035111d3d631 26 * #include "PCAL9555.h"
andriym 0:035111d3d631 27 *
andriym 0:035111d3d631 28 * PCAL9555 gpio_exp( p28, p27, 0xE8 ); // SDA, SCL, Slave_address(option)
andriym 0:035111d3d631 29 * GpioBusIn nibble( gpio_exp, X0_0, X0_1, X0_2, X0_3 );
andriym 0:035111d3d631 30 *
andriym 0:035111d3d631 31 * int main() {
andriym 0:035111d3d631 32 * while ( 1 ) {
andriym 0:035111d3d631 33 * switch ( nibble ) {
andriym 0:035111d3d631 34 * case 0x3: printf( "Hello!\n" ); break; // X0_0 and X0_1 are 1
andriym 0:035111d3d631 35 * case 0x8: printf( "World!\n" ); break; // X0_3 is 1
andriym 0:035111d3d631 36 * }
andriym 0:035111d3d631 37 * }
andriym 0:035111d3d631 38 * }
andriym 0:035111d3d631 39 * @endcode
andriym 0:035111d3d631 40 */
andriym 0:035111d3d631 41 class GpioBusIn : public GpioBusInOut
andriym 0:035111d3d631 42 {
andriym 0:035111d3d631 43 public:
andriym 0:035111d3d631 44
andriym 0:035111d3d631 45 #if DOXYGEN_ONLY
andriym 0:035111d3d631 46 /** GPIO-Expander pin names */
andriym 0:035111d3d631 47 typedef enum {
andriym 0:035111d3d631 48 X0_0, /**< P0_0 pin */
andriym 0:035111d3d631 49 X0_1, /**< P0_1 pin */
andriym 0:035111d3d631 50 X0_2, /**< P0_2 pin */
andriym 0:035111d3d631 51 X0_3, /**< P0_3 pin */
andriym 0:035111d3d631 52 X0_4, /**< P0_4 pin */
andriym 0:035111d3d631 53 X0_5, /**< P0_5 pin */
andriym 0:035111d3d631 54 X0_6, /**< P0_6 pin */
andriym 0:035111d3d631 55 X0_7, /**< P0_7 pin */
andriym 0:035111d3d631 56 X1_0, /**< P1_0 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 57 X1_1, /**< P1_1 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 58 X1_2, /**< P1_2 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 59 X1_3, /**< P1_3 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 60 X1_4, /**< P1_4 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 61 X1_5, /**< P1_5 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 62 X1_6, /**< P1_6 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 63 X1_7, /**< P1_7 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 64 X0 = X0_0, /**< P0_0 pin */
andriym 0:035111d3d631 65 X1 = X0_1, /**< P0_1 pin */
andriym 0:035111d3d631 66 X2 = X0_2, /**< P0_2 pin */
andriym 0:035111d3d631 67 X3 = X0_3, /**< P0_3 pin */
andriym 0:035111d3d631 68 X4 = X0_4, /**< P0_4 pin */
andriym 0:035111d3d631 69 X5 = X0_5, /**< P0_5 pin */
andriym 0:035111d3d631 70 X6 = X0_6, /**< P0_6 pin */
andriym 0:035111d3d631 71 X7 = X0_7, /**< P0_7 pin */
andriym 0:035111d3d631 72 X8 = X1_0, /**< P1_0 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 73 X9 = X1_1, /**< P1_1 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 74 X10 = X1_2, /**< P1_2 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 75 X11 = X1_3, /**< P1_3 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 76 X12 = X1_4, /**< P1_4 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 77 X13 = X1_5, /**< P1_5 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 78 X14 = X1_6, /**< P1_6 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 79 X15 = X1_7, /**< P1_7 pin (for 16-bit GPIO device only) */
andriym 0:035111d3d631 80
andriym 0:035111d3d631 81 X_NC = ~0x0L /**< for when the pin is left no-connection */
andriym 0:035111d3d631 82 } GpioPinName;
andriym 0:035111d3d631 83 #endif
andriym 0:035111d3d631 84
andriym 0:035111d3d631 85 /** Create an GpioBusIn, connected to the specified pins
andriym 0:035111d3d631 86 *
andriym 0:035111d3d631 87 * @param gpiop Instance of GPIO expander device
andriym 0:035111d3d631 88 * @param p<n> DigitalInOut pin to connect to bus bit p<n> (GpioPinName)
andriym 0:035111d3d631 89 *
andriym 0:035111d3d631 90 * @note
andriym 0:035111d3d631 91 * It is only required to specify as many pin variables as is required
andriym 0:035111d3d631 92 * for the bus; the rest will default to NC (not connected)
andriym 0:035111d3d631 93 */
andriym 0:035111d3d631 94 GpioBusIn( CompGpioExp &gpiop,
andriym 0:035111d3d631 95 GpioPinName p0, GpioPinName p1 = X_NC, GpioPinName p2 = X_NC, GpioPinName p3 = X_NC,
andriym 0:035111d3d631 96 GpioPinName p4 = X_NC, GpioPinName p5 = X_NC, GpioPinName p6 = X_NC, GpioPinName p7 = X_NC,
andriym 0:035111d3d631 97 GpioPinName p8 = X_NC, GpioPinName p9 = X_NC, GpioPinName p10 = X_NC, GpioPinName p11 = X_NC,
andriym 0:035111d3d631 98 GpioPinName p12 = X_NC, GpioPinName p13 = X_NC, GpioPinName p14 = X_NC, GpioPinName p15 = X_NC );
andriym 0:035111d3d631 99 GpioBusIn( CompGpioExp &gpiop, GpioPinName pins[ 16 ] );
andriym 0:035111d3d631 100
andriym 0:035111d3d631 101 /**
andriym 0:035111d3d631 102 * Destractor
andriym 0:035111d3d631 103 */
andriym 0:035111d3d631 104 virtual ~GpioBusIn();
andriym 0:035111d3d631 105
andriym 0:035111d3d631 106 /** A shorthand for read()
andriym 0:035111d3d631 107 */
andriym 0:035111d3d631 108 operator int( void );
andriym 0:035111d3d631 109
andriym 0:035111d3d631 110 private:
andriym 0:035111d3d631 111 GpioBusIn& operator= ( int rhs );
andriym 0:035111d3d631 112 GpioBusIn& operator= ( GpioBusIn& rhs );
andriym 0:035111d3d631 113 }
andriym 0:035111d3d631 114 ;
andriym 0:035111d3d631 115
andriym 0:035111d3d631 116 #endif // MBED_GpioBusIn