PCA9624, PCA9622 and PCA9626 class library. The PCA9624 is a 8-channel, the PCA9622 is a 16-channel and the PCA9956A is a 24-channel Fm+ I2C-bus 100mA/40V LED driver.

Dependencies:   CompLedDvr

Dependents:   PCA9626_Hello PCA9624_Hello PCA9622_Hello

What is this?

Code for PCA9626, PCA9622 and PCA9624.
24-channel, 16-channel and 8-channel PWM output LED driver component class.

Please refer to the component page for details

8, 16 & 24-channel Fm+ I2C-bus 100mA/40 V LED driver

High-level API is available

A high-level API that can be used as the "PwmOut" of bed-SDK is available.
This API enables to make instances of each LED output pins and control PWM duty cycle by assignment.
For detail information, refer API document of LedPwmOut Class class which is included in PCA962xA class library.

#include "mbed.h"
#include "PCA9626.h"

PCA9626     led_cntlr( p28, p27, 0xC4 );  //  SDA, SCL, Slave_address(option)
LedPwmOut   led( led_cntlr, L0 );

int main()
{
    while( 1 ) {
        for( float p = 0.0f; p < 1.0f; p += 0.1f ) {
            led     = p;
            wait( 0.1 );
        }
    }
}

About the chips

PCA9626

The PCA9626 is an I2C-bus controlled 24-bit LED driver optimized for voltage switch dimming and blinking 100 mA LEDs. Each LED output has its own 8-bit resolution (256 steps) fixed frequency individual PWM controller that operates at 97 kHz with a duty cycle that is adjustable from 0 % to 99.6 % to allow the LED to be set to a specific brightness value.

Datasheet: http://www.nxp.com/documents/data_sheet/PCA9626.pdf

PCA9622

The PCA9622 is an I2C-bus controlled 16-bit LED driver optimized for voltage switch dimming and blinking 100 mA LEDs. Each LED output has its own 8-bit resolution (256 steps) fixed frequency individual PWM controller that operates at 97 kHz with a duty cycle that is adjustable from 0 % to 99.6 % to allow the LED to be set to a specific brightness value.

Datasheet: http://www.nxp.com/documents/data_sheet/PCA9622.pdf

PCA9624

The PCA9624 is an I2C-bus controlled 8-bit LED driver optimized for voltage switch dimming and blinking 100 mA Red/Green/Blue/Amber (RGBA) LEDs. Each LED output has its own 8-bit resolution (256 steps) fixed frequency individual PWM controller that operates at 97 kHz with a duty cycle that is adjustable from 0 % to 99.6 % to allow the LED to be set to a specific brightness value.

Datasheet: http://www.nxp.com/documents/data_sheet/PCA9624.pdf

How the API works?

When the instance is made, all set up for PWM operation are done automatically.
PCA9626, PCA9624 and PCA9622 have internal 97kHz oscillator to generate internal PWM waveform. This signal switchs the output current ON and OFF. The class' function pwm() controls duty-cycle of this output.

API_and_output

Tips for the chips

PCA962x family

This PCA962x components library can be used for all PCA9926(24-channel), PCA9922(16-channel) and PCA9624(8-channel).
If you are using both chips on the I2C bus, those can be operated like..

#include "mbed.h"
 
#include "PCA9622.h"
#include "PCA9626.h"

PCA9622    led0( p28, p27, 0xC0 );    //  SDA, SCL, Slave_address=0xC0 (16-channel chip)
PCA9626    led1( p28, p27, 0xC2 );    //  SDA, SCL, Slave_address=0xC2 (24-channel chip)
 
int main()
{
    led0.pwm( ....    //  PWM control for PCA9955A(16-channel chip)
    led1.pwm( ....    //  PWM control for PCA9956A(24-channel chip)
    ...

Sample code for each types

For PCA9624 (8 channel) : http://developer.mbed.org/users/nxp_ip/code/PCA9624_Hello/
For PCA9622 (16 channel) : http://developer.mbed.org/users/nxp_ip/code/PCA9622_Hello/
For PCA9626 (24 channel) : http://developer.mbed.org/users/nxp_ip/code/PCA9626_Hello/

Committer:
nxp_ip
Date:
Thu Mar 19 10:02:57 2015 +0000
Revision:
7:7ebf563f6e6c
Parent:
3:40f83904f0a8
API document update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nxp_ip 0:7a206e6db594 1 /** PCA9626 PWM control LED driver
nxp_ip 0:7a206e6db594 2 *
nxp_ip 0:7a206e6db594 3 * An operation sample of PCA9626 24-channel Fm+ I2C-bus 100mA/40 V LED driver.
nxp_ip 0:7a206e6db594 4 * mbed accesses the PCA9626 registers through I2C.
nxp_ip 0:7a206e6db594 5 *
nxp_ip 0:7a206e6db594 6 * @class PCA9626
nxp_ip 0:7a206e6db594 7 * @author Akifumi (Tedd) OKANO, NXP Semiconductors
nxp_ip 3:40f83904f0a8 8 * @version 0.6
nxp_ip 3:40f83904f0a8 9 * @date 04-Mar-2015
nxp_ip 0:7a206e6db594 10 *
nxp_ip 3:40f83904f0a8 11 * Released under the Apache 2 license License
nxp_ip 0:7a206e6db594 12 *
nxp_ip 0:7a206e6db594 13 * About PCA9626:
nxp_ip 0:7a206e6db594 14 * http://www.nxp.com/products/lighting_driver_and_controller_ics/i2c_led_display_control/series/PCA9626.html
nxp_ip 0:7a206e6db594 15 */
nxp_ip 0:7a206e6db594 16
nxp_ip 0:7a206e6db594 17 #ifndef MBED_PCA9626
nxp_ip 0:7a206e6db594 18 #define MBED_PCA9626
nxp_ip 0:7a206e6db594 19
nxp_ip 0:7a206e6db594 20 #include "mbed.h"
nxp_ip 0:7a206e6db594 21 #include "PCA962x.h"
nxp_ip 3:40f83904f0a8 22 #include "CompLedDvrAPI.h"
nxp_ip 0:7a206e6db594 23
nxp_ip 0:7a206e6db594 24 /** PCA9626 class
nxp_ip 0:7a206e6db594 25 *
nxp_ip 0:7a206e6db594 26 * This is a driver code for the PCA9626 24-channel Fm+ I2C-bus 100mA/40V PWM control LED driver.
nxp_ip 0:7a206e6db594 27 * This class provides interface for PCA9626 operation and accessing its registers.
nxp_ip 0:7a206e6db594 28 * Detail information is available on next URL.
nxp_ip 0:7a206e6db594 29 * http://www.nxp.com/products/lighting_driver_and_controller_ics/i2c_led_display_control/series/PCA9626.html
nxp_ip 0:7a206e6db594 30 *
nxp_ip 7:7ebf563f6e6c 31 * Next sample code shows operation based on low-level-API (operated by just device instane)
nxp_ip 7:7ebf563f6e6c 32 *
nxp_ip 0:7a206e6db594 33 * Example:
nxp_ip 0:7a206e6db594 34 * @code
nxp_ip 7:7ebf563f6e6c 35 * // PCA9626 operation sample using its device instance
nxp_ip 7:7ebf563f6e6c 36 *
nxp_ip 0:7a206e6db594 37 * #include "mbed.h"
nxp_ip 0:7a206e6db594 38 * #include "PCA9626.h"
nxp_ip 7:7ebf563f6e6c 39 *
nxp_ip 0:7a206e6db594 40 * PCA9626 led_cntlr( p28, p27, 0x3E ); // SDA, SCL, Slave_address(option)
nxp_ip 7:7ebf563f6e6c 41 *
nxp_ip 0:7a206e6db594 42 * int main()
nxp_ip 0:7a206e6db594 43 * {
nxp_ip 0:7a206e6db594 44 * while(1) {
nxp_ip 0:7a206e6db594 45 * for ( int port = 0; port < led_cntlr.number_of_ports(); port++ ) {
nxp_ip 0:7a206e6db594 46 * for ( int i = 1; i <= 100; i++ ) {
nxp_ip 0:7a206e6db594 47 * led_cntlr.pwm( port, (float)i / 100.0 );
nxp_ip 0:7a206e6db594 48 * wait( 0.01 );
nxp_ip 0:7a206e6db594 49 * }
nxp_ip 0:7a206e6db594 50 * }
nxp_ip 0:7a206e6db594 51 * led_cntlr.pwm( ALLPORTS, 0.0 );
nxp_ip 0:7a206e6db594 52 * }
nxp_ip 0:7a206e6db594 53 * }
nxp_ip 0:7a206e6db594 54 * @endcode
nxp_ip 7:7ebf563f6e6c 55 *
nxp_ip 7:7ebf563f6e6c 56 * The high-level-API:LedPwmOutCC is also available.
nxp_ip 7:7ebf563f6e6c 57 * It can be used like next sample code.
nxp_ip 7:7ebf563f6e6c 58 *
nxp_ip 7:7ebf563f6e6c 59 * @code
nxp_ip 7:7ebf563f6e6c 60 * // PCA9626 operation sample using high-level-API
nxp_ip 7:7ebf563f6e6c 61 *
nxp_ip 7:7ebf563f6e6c 62 * #include "mbed.h"
nxp_ip 7:7ebf563f6e6c 63 * #include "PCA9626.h"
nxp_ip 7:7ebf563f6e6c 64 *
nxp_ip 7:7ebf563f6e6c 65 * PCA9626 led_cntlr( p28, p27, 0x3E ); // SDA, SCL, Slave_address(option)
nxp_ip 7:7ebf563f6e6c 66 * LedPwmOut led0( led_cntlr, L0 ); // Instance for LED0 pin
nxp_ip 7:7ebf563f6e6c 67 * LedPwmOut led1( led_cntlr, L1 ); // Instance for LED1 pin
nxp_ip 7:7ebf563f6e6c 68 * LedPwmOut led2( led_cntlr, L2 ); // Instance for LED2 pin
nxp_ip 7:7ebf563f6e6c 69 *
nxp_ip 7:7ebf563f6e6c 70 * int main()
nxp_ip 7:7ebf563f6e6c 71 * {
nxp_ip 7:7ebf563f6e6c 72 * while(1) {
nxp_ip 7:7ebf563f6e6c 73 *
nxp_ip 7:7ebf563f6e6c 74 * for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
nxp_ip 7:7ebf563f6e6c 75 * led0 = p; // Set LED0 output PWM dutycycle as 'p'
nxp_ip 7:7ebf563f6e6c 76 * wait( 0.01 );
nxp_ip 7:7ebf563f6e6c 77 * }
nxp_ip 7:7ebf563f6e6c 78 *
nxp_ip 7:7ebf563f6e6c 79 * for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
nxp_ip 7:7ebf563f6e6c 80 * led1 = p; // Set LED1 output PWM dutycycle as 'p'
nxp_ip 7:7ebf563f6e6c 81 * wait( 0.01 );
nxp_ip 7:7ebf563f6e6c 82 * }
nxp_ip 7:7ebf563f6e6c 83 *
nxp_ip 7:7ebf563f6e6c 84 * for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
nxp_ip 7:7ebf563f6e6c 85 * led2 = p; // Set LED2 output PWM dutycycle as 'p'
nxp_ip 7:7ebf563f6e6c 86 * wait( 0.01 );
nxp_ip 7:7ebf563f6e6c 87 * }
nxp_ip 7:7ebf563f6e6c 88 * }
nxp_ip 7:7ebf563f6e6c 89 * }
nxp_ip 7:7ebf563f6e6c 90 * @endcode
nxp_ip 0:7a206e6db594 91 */
nxp_ip 0:7a206e6db594 92
nxp_ip 0:7a206e6db594 93 class PCA9626 : public PCA962x
nxp_ip 0:7a206e6db594 94 {
nxp_ip 0:7a206e6db594 95 public:
nxp_ip 7:7ebf563f6e6c 96
nxp_ip 7:7ebf563f6e6c 97 #if DOXYGEN_ONLY
nxp_ip 7:7ebf563f6e6c 98 /** PCA9626 pin names high-level API i.e. LedPwmOut */
nxp_ip 7:7ebf563f6e6c 99 typedef enum {
nxp_ip 7:7ebf563f6e6c 100 L0, /**< LED0 pin */
nxp_ip 7:7ebf563f6e6c 101 L1, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 102 L2, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 103 L3, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 104 L4, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 105 L5, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 106 L6, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 107 L7, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 108 L8, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 109 L9, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 110 L10, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 111 L11, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 112 L12, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 113 L13, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 114 L14, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 115 L15, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 116 L16, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 117 L17, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 118 L18, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 119 L19, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 120 L20, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 121 L21, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 122 L22, /**< LED2 pin */
nxp_ip 7:7ebf563f6e6c 123 L23, /**< LED23 pin */
nxp_ip 7:7ebf563f6e6c 124 L_NC = ~0x0L /**< for when the pin is left no-connection */
nxp_ip 7:7ebf563f6e6c 125 } LedPinName;
nxp_ip 7:7ebf563f6e6c 126 #endif // DOXYGEN_ONLY
nxp_ip 7:7ebf563f6e6c 127
nxp_ip 7:7ebf563f6e6c 128 /** Name of the PCA9626 registers (for direct register access) */
nxp_ip 0:7a206e6db594 129 enum command_reg {
nxp_ip 7:7ebf563f6e6c 130 MODE1, /**< MODE1 register */
nxp_ip 7:7ebf563f6e6c 131 MODE2, /**< MODE2 register */
nxp_ip 7:7ebf563f6e6c 132 PWM0, /**< PWM0 register */
nxp_ip 7:7ebf563f6e6c 133 PWM1, /**< PWM1 register */
nxp_ip 7:7ebf563f6e6c 134 PWM2, /**< PWM2 register */
nxp_ip 7:7ebf563f6e6c 135 PWM3, /**< PWM3 register */
nxp_ip 7:7ebf563f6e6c 136 PWM4, /**< PWM4 register */
nxp_ip 7:7ebf563f6e6c 137 PWM5, /**< PWM5 register */
nxp_ip 7:7ebf563f6e6c 138 PWM6, /**< PWM6 register */
nxp_ip 7:7ebf563f6e6c 139 PWM7, /**< PWM7 register */
nxp_ip 7:7ebf563f6e6c 140 PWM8, /**< PWM8 register */
nxp_ip 7:7ebf563f6e6c 141 PWM9, /**< PWM9 register */
nxp_ip 7:7ebf563f6e6c 142 PWM10, /**< PWM10 register */
nxp_ip 7:7ebf563f6e6c 143 PWM11, /**< PWM11 register */
nxp_ip 7:7ebf563f6e6c 144 PWM12, /**< PWM12 register */
nxp_ip 7:7ebf563f6e6c 145 PWM13, /**< PWM13 register */
nxp_ip 7:7ebf563f6e6c 146 PWM14, /**< PWM14 register */
nxp_ip 7:7ebf563f6e6c 147 PWM15, /**< PWM15 register */
nxp_ip 7:7ebf563f6e6c 148 PWM16, /**< PWM16 register */
nxp_ip 7:7ebf563f6e6c 149 PWM17, /**< PWM17 register */
nxp_ip 7:7ebf563f6e6c 150 PWM18, /**< PWM18 register */
nxp_ip 7:7ebf563f6e6c 151 PWM19, /**< PWM19 register */
nxp_ip 7:7ebf563f6e6c 152 PWM20, /**< PWM20 register */
nxp_ip 7:7ebf563f6e6c 153 PWM21, /**< PWM21 register */
nxp_ip 7:7ebf563f6e6c 154 PWM22, /**< PWM22 register */
nxp_ip 7:7ebf563f6e6c 155 PWM23, /**< PWM23 register */
nxp_ip 7:7ebf563f6e6c 156 GRPPWM, /**< GRPPWM register */
nxp_ip 7:7ebf563f6e6c 157 GRPFREQ, /**< GRPFREQ register */
nxp_ip 7:7ebf563f6e6c 158 CHASE, /**< CHASE register */
nxp_ip 7:7ebf563f6e6c 159 LEDOUT0, /**< LEDOUT0 register */
nxp_ip 7:7ebf563f6e6c 160 LEDOUT1, /**< LEDOUT1 register */
nxp_ip 7:7ebf563f6e6c 161 LEDOUT2, /**< LEDOUT2 register */
nxp_ip 7:7ebf563f6e6c 162 LEDOUT3, /**< LEDOUT3 register */
nxp_ip 7:7ebf563f6e6c 163 LEDOUT4, /**< LEDOUT4 register */
nxp_ip 7:7ebf563f6e6c 164 LEDOUT5, /**< LEDOUT5 register */
nxp_ip 7:7ebf563f6e6c 165 SUBADR1, /**< SUBADR1 register */
nxp_ip 7:7ebf563f6e6c 166 SUBADR2, /**< SUBADR2 register */
nxp_ip 7:7ebf563f6e6c 167 SUBADR3, /**< SUBADR3 register */
nxp_ip 7:7ebf563f6e6c 168 ALLCALLADR, /**< ALLCALLADR register */
nxp_ip 0:7a206e6db594 169
nxp_ip 0:7a206e6db594 170 REGISTER_START = MODE1,
nxp_ip 0:7a206e6db594 171 LEDOUT_REGISTER_START = LEDOUT0,
nxp_ip 0:7a206e6db594 172 PWM_REGISTER_START = PWM0,
nxp_ip 0:7a206e6db594 173 };
nxp_ip 0:7a206e6db594 174
nxp_ip 7:7ebf563f6e6c 175 /** Create a PCA9626 instance connected to specified I2C pins with specified address
nxp_ip 0:7a206e6db594 176 *
nxp_ip 0:7a206e6db594 177 * @param i2c_sda I2C-bus SDA pin
nxp_ip 0:7a206e6db594 178 * @param i2c_sda I2C-bus SCL pin
nxp_ip 0:7a206e6db594 179 * @param i2c_address I2C-bus address (default: 0xC0)
nxp_ip 0:7a206e6db594 180 */
nxp_ip 0:7a206e6db594 181 PCA9626( PinName i2c_sda, PinName i2c_scl, char i2c_address = PCA962x::DEFAULT_I2C_ADDR );
nxp_ip 0:7a206e6db594 182
nxp_ip 7:7ebf563f6e6c 183 /** Create a PCA9626 instance connected to specified I2C pins with specified address
nxp_ip 0:7a206e6db594 184 *
nxp_ip 0:7a206e6db594 185 * @param i2c_obj I2C object (instance)
nxp_ip 0:7a206e6db594 186 * @param i2c_address I2C-bus address (default: 0xC0)
nxp_ip 0:7a206e6db594 187 */
nxp_ip 0:7a206e6db594 188 PCA9626( I2C &i2c_obj, char i2c_address = PCA962x::DEFAULT_I2C_ADDR );
nxp_ip 0:7a206e6db594 189
nxp_ip 0:7a206e6db594 190 /** Destractor
nxp_ip 0:7a206e6db594 191 *
nxp_ip 0:7a206e6db594 192 */
nxp_ip 0:7a206e6db594 193 virtual ~PCA9626();
nxp_ip 7:7ebf563f6e6c 194
nxp_ip 0:7a206e6db594 195 /** Returns the number of output ports
nxp_ip 0:7a206e6db594 196 *
nxp_ip 0:7a206e6db594 197 * @returns
nxp_ip 0:7a206e6db594 198 * The number of output ports
nxp_ip 0:7a206e6db594 199 */
nxp_ip 7:7ebf563f6e6c 200 virtual int number_of_ports( void );
nxp_ip 0:7a206e6db594 201
nxp_ip 0:7a206e6db594 202 #if DOXYGEN_ONLY
nxp_ip 0:7a206e6db594 203 /** Set the output duty-cycle, specified as a percentage (float)
nxp_ip 0:7a206e6db594 204 *
nxp_ip 0:7a206e6db594 205 * @param port Selecting output port
nxp_ip 0:7a206e6db594 206 * 'ALLPORTS' can be used to set all port duty-cycle same value.
nxp_ip 0:7a206e6db594 207 * @param v A floating-point value representing the output duty-cycle,
nxp_ip 0:7a206e6db594 208 * specified as a percentage. The value should lie between
nxp_ip 3:40f83904f0a8 209 * 0.0f (representing on 0%) and 1.0f (representing on 100%).
nxp_ip 0:7a206e6db594 210 * Values outside this range will have undefined behavior.
nxp_ip 0:7a206e6db594 211 */
nxp_ip 0:7a206e6db594 212 void pwm( int port, float v );
nxp_ip 7:7ebf563f6e6c 213
nxp_ip 0:7a206e6db594 214 /** Set all output port duty-cycle, specified as a percentage (array of float)
nxp_ip 0:7a206e6db594 215 *
nxp_ip 0:7a206e6db594 216 * @param vp Aray to floating-point values representing the output duty-cycle,
nxp_ip 0:7a206e6db594 217 * specified as a percentage. The value should lie between
nxp_ip 3:40f83904f0a8 218 * 0.0f (representing on 0%) and 1.0f (representing on 100%).
nxp_ip 0:7a206e6db594 219 *
nxp_ip 0:7a206e6db594 220 * @note
nxp_ip 0:7a206e6db594 221 * The aray should have length of 24
nxp_ip 0:7a206e6db594 222 */
nxp_ip 0:7a206e6db594 223 void pwm( float *vp );
nxp_ip 7:7ebf563f6e6c 224
nxp_ip 0:7a206e6db594 225 /** Register write (single byte) : Low level access to device register
nxp_ip 0:7a206e6db594 226 *
nxp_ip 0:7a206e6db594 227 * @param reg_addr Register address
nxp_ip 0:7a206e6db594 228 * @param data Value for setting into the register
nxp_ip 7:7ebf563f6e6c 229 */
nxp_ip 0:7a206e6db594 230 void write( char reg_addr, char data );
nxp_ip 0:7a206e6db594 231
nxp_ip 0:7a206e6db594 232 /** Register write (multiple bytes) : Low level access to device register
nxp_ip 0:7a206e6db594 233 *
nxp_ip 0:7a206e6db594 234 * @param data Pointer to an array. First 1 byte should be the writing start register address
nxp_ip 0:7a206e6db594 235 * @param length Length of data
nxp_ip 7:7ebf563f6e6c 236 */
nxp_ip 0:7a206e6db594 237 void write( char *data, int length );
nxp_ip 0:7a206e6db594 238
nxp_ip 0:7a206e6db594 239 /** Register read (single byte) : Low level access to device register
nxp_ip 0:7a206e6db594 240 *
nxp_ip 0:7a206e6db594 241 * @param reg_addr Register address
nxp_ip 0:7a206e6db594 242 * @return Read value from register
nxp_ip 7:7ebf563f6e6c 243 */
nxp_ip 0:7a206e6db594 244 char read( char reg_addr );
nxp_ip 0:7a206e6db594 245
nxp_ip 0:7a206e6db594 246 /** Register write (multiple bytes) : Low level access to device register
nxp_ip 0:7a206e6db594 247 *
nxp_ip 0:7a206e6db594 248 * @param reg_addr Register address
nxp_ip 0:7a206e6db594 249 * @param data Pointer to an array. The values are stored in this array.
nxp_ip 0:7a206e6db594 250 * @param length Length of data
nxp_ip 7:7ebf563f6e6c 251 */
nxp_ip 0:7a206e6db594 252 void read( char reg_addr, char *data, int length );
nxp_ip 0:7a206e6db594 253 #endif
nxp_ip 0:7a206e6db594 254
nxp_ip 0:7a206e6db594 255 private:
nxp_ip 0:7a206e6db594 256 virtual void initialize( void );
nxp_ip 0:7a206e6db594 257 virtual char pwm_register_access( int port );
nxp_ip 0:7a206e6db594 258
nxp_ip 0:7a206e6db594 259 const int n_of_ports;
nxp_ip 0:7a206e6db594 260 }
nxp_ip 0:7a206e6db594 261 ;
nxp_ip 0:7a206e6db594 262
nxp_ip 0:7a206e6db594 263 #endif // MBED_PCA9626