gfdgd

Dependencies:   CompLedDvrCC

Fork of PCA995xA by InetrfaceProducts NXP

Committer:
nxp_ip
Date:
Thu Mar 19 10:47:49 2015 +0000
Revision:
5:cb07190e05e7
Parent:
4:fe221e1d4f44
API document update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nxp_ip 0:a624e2eeccac 1 /** PCA9956A constant current LED driver
nxp_ip 0:a624e2eeccac 2 *
nxp_ip 0:a624e2eeccac 3 * An operation sample of PCA9956A 24-channel Fm+ I2C-bus 57mA/20V constant current LED driver.
nxp_ip 0:a624e2eeccac 4 * mbed accesses the PCA9956A registers through I2C.
nxp_ip 0:a624e2eeccac 5 *
nxp_ip 0:a624e2eeccac 6 * @class PCA9956A
nxp_ip 0:a624e2eeccac 7 * @author Akifumi (Tedd) OKANO, NXP Semiconductors
nxp_ip 4:fe221e1d4f44 8 * @version 0.6
nxp_ip 4:fe221e1d4f44 9 * @date 19-Mar-2015
nxp_ip 0:a624e2eeccac 10 *
nxp_ip 1:3522be54a4f5 11 * Released under the Apache 2 license
nxp_ip 0:a624e2eeccac 12 *
nxp_ip 0:a624e2eeccac 13 * About PCA9956A:
nxp_ip 0:a624e2eeccac 14 * http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_led_display_control/PCA9956ATW.html
nxp_ip 0:a624e2eeccac 15 */
nxp_ip 0:a624e2eeccac 16
nxp_ip 0:a624e2eeccac 17 #ifndef MBED_PCA9956A
nxp_ip 0:a624e2eeccac 18 #define MBED_PCA9956A
nxp_ip 0:a624e2eeccac 19
nxp_ip 0:a624e2eeccac 20 #include "mbed.h"
nxp_ip 0:a624e2eeccac 21 #include "PCA995xA.h"
nxp_ip 2:eeea2e848b81 22 #include "LedPwmOutCC.h"
nxp_ip 0:a624e2eeccac 23
nxp_ip 0:a624e2eeccac 24 /** PCA9956A class
nxp_ip 0:a624e2eeccac 25 *
nxp_ip 0:a624e2eeccac 26 * This is a driver code for the PCA9956A 24-channel Fm+ I2C-bus 57mA/20V constant current LED driver.
nxp_ip 0:a624e2eeccac 27 * This class provides interface for PCA9956A operation and accessing its registers.
nxp_ip 0:a624e2eeccac 28 * Detail information is available on next URL.
nxp_ip 0:a624e2eeccac 29 * http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_led_display_control/PCA9956ATW.html
nxp_ip 0:a624e2eeccac 30 *
nxp_ip 4:fe221e1d4f44 31 * Next sample code shows operation based on low-level-API (operated by just device instane)
nxp_ip 4:fe221e1d4f44 32 *
nxp_ip 0:a624e2eeccac 33 * Example:
nxp_ip 0:a624e2eeccac 34 * @code
nxp_ip 4:fe221e1d4f44 35 * // PCA9956A operation sample using its device instance
nxp_ip 0:a624e2eeccac 36 *
nxp_ip 4:fe221e1d4f44 37 * #include "mbed.h"
nxp_ip 0:a624e2eeccac 38 * #include "PCA9956A.h"
nxp_ip 4:fe221e1d4f44 39 *
nxp_ip 0:a624e2eeccac 40 * PCA9956A led_cntlr( p28, p27, 0x02 ); // SDA, SCL, Slave_address(option)
nxp_ip 0:a624e2eeccac 41 *
nxp_ip 0:a624e2eeccac 42 * int main()
nxp_ip 0:a624e2eeccac 43 * {
nxp_ip 0:a624e2eeccac 44 * led_cntlr.current( ALLPORTS, 1.0 ); // Set all ports output current 100%
nxp_ip 0:a624e2eeccac 45 *
nxp_ip 0:a624e2eeccac 46 * while(1) {
nxp_ip 0:a624e2eeccac 47 * for ( int port = 0; port < led_cntlr.number_of_ports(); port++ ) {
nxp_ip 0:a624e2eeccac 48 * for ( int i = 1; i <= 100; i++ ) {
nxp_ip 0:a624e2eeccac 49 * led_cntlr.pwm( port, (float)i / 100.0 );
nxp_ip 0:a624e2eeccac 50 * wait( 0.01 );
nxp_ip 0:a624e2eeccac 51 * }
nxp_ip 0:a624e2eeccac 52 * }
nxp_ip 0:a624e2eeccac 53 * led_cntlr.pwm( ALLPORTS, 0.0 );
nxp_ip 0:a624e2eeccac 54 * }
nxp_ip 0:a624e2eeccac 55 * }
nxp_ip 0:a624e2eeccac 56 * @endcode
nxp_ip 5:cb07190e05e7 57 *
nxp_ip 4:fe221e1d4f44 58 * The high-level-API:LedPwmOutCC is also available.
nxp_ip 4:fe221e1d4f44 59 * It can be used like next sample code.
nxp_ip 4:fe221e1d4f44 60 *
nxp_ip 4:fe221e1d4f44 61 * @code
nxp_ip 4:fe221e1d4f44 62 * // PCA9956A operation sample using high-level-API
nxp_ip 4:fe221e1d4f44 63 *
nxp_ip 4:fe221e1d4f44 64 * #include "mbed.h"
nxp_ip 4:fe221e1d4f44 65 * #include "PCA9956A.h"
nxp_ip 4:fe221e1d4f44 66 *
nxp_ip 4:fe221e1d4f44 67 * PCA9956A led_cntlr( p28, p27, 0x02 ); // SDA, SCL, Slave_address(option)
nxp_ip 4:fe221e1d4f44 68 * LedPwmOutCC led0( led_cntlr, L0 ); // Instance for LED0 pin
nxp_ip 4:fe221e1d4f44 69 * LedPwmOutCC led1( led_cntlr, L1 ); // Instance for LED1 pin
nxp_ip 4:fe221e1d4f44 70 * LedPwmOutCC led2( led_cntlr, L2 ); // Instance for LED2 pin
nxp_ip 4:fe221e1d4f44 71 *
nxp_ip 4:fe221e1d4f44 72 * int main()
nxp_ip 4:fe221e1d4f44 73 * {
nxp_ip 4:fe221e1d4f44 74 * led0.current( 0.5 ); // LED0 pin current output setting to 50%
nxp_ip 4:fe221e1d4f44 75 * led1.current( 0.5 ); // LED1 pin current output setting to 50%
nxp_ip 4:fe221e1d4f44 76 * led2.current( 0.5 ); // LED2 pin current output setting to 50%
nxp_ip 4:fe221e1d4f44 77 *
nxp_ip 4:fe221e1d4f44 78 * while(1) {
nxp_ip 4:fe221e1d4f44 79 *
nxp_ip 4:fe221e1d4f44 80 * for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
nxp_ip 4:fe221e1d4f44 81 * led0 = p; // Set LED0 output PWM dutycycle as 'p'
nxp_ip 4:fe221e1d4f44 82 * wait( 0.01 );
nxp_ip 4:fe221e1d4f44 83 * }
nxp_ip 4:fe221e1d4f44 84 *
nxp_ip 4:fe221e1d4f44 85 * for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
nxp_ip 4:fe221e1d4f44 86 * led1 = p; // Set LED1 output PWM dutycycle as 'p'
nxp_ip 4:fe221e1d4f44 87 * wait( 0.01 );
nxp_ip 4:fe221e1d4f44 88 * }
nxp_ip 4:fe221e1d4f44 89 *
nxp_ip 4:fe221e1d4f44 90 * for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
nxp_ip 4:fe221e1d4f44 91 * led2 = p; // Set LED2 output PWM dutycycle as 'p'
nxp_ip 4:fe221e1d4f44 92 * wait( 0.01 );
nxp_ip 4:fe221e1d4f44 93 * }
nxp_ip 4:fe221e1d4f44 94 * }
nxp_ip 4:fe221e1d4f44 95 * }
nxp_ip 4:fe221e1d4f44 96 * @endcode
nxp_ip 0:a624e2eeccac 97 */
nxp_ip 0:a624e2eeccac 98 class PCA9956A : public PCA995xA
nxp_ip 0:a624e2eeccac 99 {
nxp_ip 0:a624e2eeccac 100 public:
nxp_ip 4:fe221e1d4f44 101
nxp_ip 4:fe221e1d4f44 102 #if DOXYGEN_ONLY
nxp_ip 4:fe221e1d4f44 103 /** PCA9956A pin names high-level API i.e. LedPwmOutCC */
nxp_ip 4:fe221e1d4f44 104 typedef enum {
nxp_ip 4:fe221e1d4f44 105 L0, /**< LED0 pin */
nxp_ip 4:fe221e1d4f44 106 L1, /**< LED1 pin */
nxp_ip 4:fe221e1d4f44 107 L2, /**< LED2 pin */
nxp_ip 4:fe221e1d4f44 108 L3, /**< LED3 pin */
nxp_ip 4:fe221e1d4f44 109 L4, /**< LED4 pin */
nxp_ip 4:fe221e1d4f44 110 L5, /**< LED5 pin */
nxp_ip 4:fe221e1d4f44 111 L6, /**< LED6 pin */
nxp_ip 4:fe221e1d4f44 112 L7, /**< LED7 pin */
nxp_ip 4:fe221e1d4f44 113 L8, /**< LED8 pin */
nxp_ip 4:fe221e1d4f44 114 L9, /**< LED9 pin */
nxp_ip 4:fe221e1d4f44 115 L10, /**< LED10 pin */
nxp_ip 4:fe221e1d4f44 116 L11, /**< LED11 pin */
nxp_ip 4:fe221e1d4f44 117 L12, /**< LED12 pin */
nxp_ip 4:fe221e1d4f44 118 L13, /**< LED13 pin */
nxp_ip 4:fe221e1d4f44 119 L14, /**< LED14 pin */
nxp_ip 4:fe221e1d4f44 120 L15, /**< LED15 pin */
nxp_ip 4:fe221e1d4f44 121 L16, /**< LED16 pin */
nxp_ip 4:fe221e1d4f44 122 L17, /**< LED17 pin */
nxp_ip 4:fe221e1d4f44 123 L18, /**< LED18 pin */
nxp_ip 4:fe221e1d4f44 124 L19, /**< LED19 pin */
nxp_ip 4:fe221e1d4f44 125 L20, /**< LED20 pin */
nxp_ip 4:fe221e1d4f44 126 L21, /**< LED21 pin */
nxp_ip 4:fe221e1d4f44 127 L22, /**< LED22 pin */
nxp_ip 4:fe221e1d4f44 128 L23, /**< LED23 pin */
nxp_ip 4:fe221e1d4f44 129 L_NC = ~0x0L /**< for when the pin is left no-connection */
nxp_ip 4:fe221e1d4f44 130 } LedPinName;
nxp_ip 4:fe221e1d4f44 131 #endif // DOXYGEN_ONLY
nxp_ip 4:fe221e1d4f44 132
nxp_ip 5:cb07190e05e7 133 /** Name of the PCA9956A registers (for direct register access) */
nxp_ip 0:a624e2eeccac 134 enum command_reg {
nxp_ip 5:cb07190e05e7 135 MODE1, /**< MODE1 register */
nxp_ip 5:cb07190e05e7 136 MODE2, /**< MODE2 register */
nxp_ip 5:cb07190e05e7 137 LEDOUT0, /**< LEDOUT0 register */
nxp_ip 5:cb07190e05e7 138 LEDOUT1, /**< LEDOUT1 register */
nxp_ip 5:cb07190e05e7 139 LEDOUT2, /**< LEDOUT2 register */
nxp_ip 5:cb07190e05e7 140 LEDOUT3, /**< LEDOUT3 register */
nxp_ip 5:cb07190e05e7 141 LEDOUT4, /**< LEDOUT4 register */
nxp_ip 5:cb07190e05e7 142 LEDOUT5, /**< LEDOUT5 register */
nxp_ip 5:cb07190e05e7 143 GRPPWM, /**< GRPPWM register */
nxp_ip 5:cb07190e05e7 144 GRPFREQ, /**< GRPFREQ register */
nxp_ip 5:cb07190e05e7 145 PWM0, /**< PWM0 register */
nxp_ip 5:cb07190e05e7 146 PWM1, /**< PWM1 register */
nxp_ip 5:cb07190e05e7 147 PWM2, /**< PWM2 register */
nxp_ip 5:cb07190e05e7 148 PWM3, /**< PWM3 register */
nxp_ip 5:cb07190e05e7 149 PWM4, /**< PWM4 register */
nxp_ip 5:cb07190e05e7 150 PWM5, /**< PWM5 register */
nxp_ip 5:cb07190e05e7 151 PWM6, /**< PWM6 register */
nxp_ip 5:cb07190e05e7 152 PWM7, /**< PWM7 register */
nxp_ip 5:cb07190e05e7 153 PWM8, /**< PWM8 register */
nxp_ip 5:cb07190e05e7 154 PWM9, /**< PWM9 register */
nxp_ip 5:cb07190e05e7 155 PWM10, /**< PWM10 register */
nxp_ip 5:cb07190e05e7 156 PWM11, /**< PWM11 register */
nxp_ip 5:cb07190e05e7 157 PWM12, /**< PWM12 register */
nxp_ip 5:cb07190e05e7 158 PWM13, /**< PWM13 register */
nxp_ip 5:cb07190e05e7 159 PWM14, /**< PWM14 register */
nxp_ip 5:cb07190e05e7 160 PWM15, /**< PWM15 register */
nxp_ip 5:cb07190e05e7 161 PWM16, /**< PWM16 register */
nxp_ip 5:cb07190e05e7 162 PWM17, /**< PWM17 register */
nxp_ip 5:cb07190e05e7 163 PWM18, /**< PWM18 register */
nxp_ip 5:cb07190e05e7 164 PWM19, /**< PWM19 register */
nxp_ip 5:cb07190e05e7 165 PWM20, /**< PWM20 register */
nxp_ip 5:cb07190e05e7 166 PWM21, /**< PWM21 register */
nxp_ip 5:cb07190e05e7 167 PWM22, /**< PWM22 register */
nxp_ip 5:cb07190e05e7 168 PWM23, /**< PWM23 register */
nxp_ip 5:cb07190e05e7 169 IREF0, /**< IREF0 register */
nxp_ip 5:cb07190e05e7 170 IREF1, /**< IREF1 register */
nxp_ip 5:cb07190e05e7 171 IREF2, /**< IREF2 register */
nxp_ip 5:cb07190e05e7 172 IREF3, /**< IREF3 register */
nxp_ip 5:cb07190e05e7 173 IREF4, /**< IREF4 register */
nxp_ip 5:cb07190e05e7 174 IREF5, /**< IREF5 register */
nxp_ip 5:cb07190e05e7 175 IREF6, /**< IREF6 register */
nxp_ip 5:cb07190e05e7 176 IREF7, /**< IREF7 register */
nxp_ip 5:cb07190e05e7 177 IREF8, /**< IREF8 register */
nxp_ip 5:cb07190e05e7 178 IREF9, /**< IREF9 register */
nxp_ip 5:cb07190e05e7 179 IREF10, /**< IREF10 register */
nxp_ip 5:cb07190e05e7 180 IREF11, /**< IREF11 register */
nxp_ip 5:cb07190e05e7 181 IREF12, /**< IREF12 register */
nxp_ip 5:cb07190e05e7 182 IREF13, /**< IREF13 register */
nxp_ip 5:cb07190e05e7 183 IREF14, /**< IREF14 register */
nxp_ip 5:cb07190e05e7 184 IREF15, /**< IREF15 register */
nxp_ip 5:cb07190e05e7 185 IREF16, /**< IREF16 register */
nxp_ip 5:cb07190e05e7 186 IREF17, /**< IREF17 register */
nxp_ip 5:cb07190e05e7 187 IREF18, /**< IREF18 register */
nxp_ip 5:cb07190e05e7 188 IREF19, /**< IREF19 register */
nxp_ip 5:cb07190e05e7 189 IREF20, /**< IREF20 register */
nxp_ip 5:cb07190e05e7 190 IREF21, /**< IREF21 register */
nxp_ip 5:cb07190e05e7 191 IREF22, /**< IREF22 register */
nxp_ip 5:cb07190e05e7 192 IREF23, /**< IREF23 register */
nxp_ip 5:cb07190e05e7 193 OFFSET = 0x3A, /**< OFFSET register */
nxp_ip 5:cb07190e05e7 194 SUBADR1, /**< SUBADR1 register */
nxp_ip 5:cb07190e05e7 195 SUBADR2, /**< SUBADR2 register */
nxp_ip 5:cb07190e05e7 196 SUBADR3, /**< SUBADR3 register */
nxp_ip 5:cb07190e05e7 197 ALLCALLADR, /**< ALLCALLADR register */
nxp_ip 5:cb07190e05e7 198 PWMALL, /**< PWMALL register */
nxp_ip 5:cb07190e05e7 199 IREFALL, /**< IREFALL register */
nxp_ip 5:cb07190e05e7 200 EFLAG0, /**< EFLAG0 register */
nxp_ip 5:cb07190e05e7 201 EFLAG1, /**< EFLAG1 register */
nxp_ip 5:cb07190e05e7 202 EFLAG2, /**< EFLAG2 register */
nxp_ip 5:cb07190e05e7 203 EFLAG3, /**< EFLAG3 register */
nxp_ip 5:cb07190e05e7 204 EFLAG4, /**< EFLAG4 register */
nxp_ip 5:cb07190e05e7 205 EFLAG5, /**< EFLAG5 register */
nxp_ip 0:a624e2eeccac 206
nxp_ip 0:a624e2eeccac 207 REGISTER_START = MODE1,
nxp_ip 0:a624e2eeccac 208 LEDOUT_REGISTER_START = LEDOUT0,
nxp_ip 0:a624e2eeccac 209 PWM_REGISTER_START = PWM0,
nxp_ip 0:a624e2eeccac 210 IREF_REGISTER_START = IREF0,
nxp_ip 0:a624e2eeccac 211 };
nxp_ip 0:a624e2eeccac 212
nxp_ip 5:cb07190e05e7 213 /** Create a PCA9956A instance connected to specified I2C pins with specified address
nxp_ip 0:a624e2eeccac 214 *
nxp_ip 0:a624e2eeccac 215 * @param i2c_sda I2C-bus SDA pin
nxp_ip 0:a624e2eeccac 216 * @param i2c_sda I2C-bus SCL pin
nxp_ip 0:a624e2eeccac 217 * @param i2c_address I2C-bus address (default: 0xC0)
nxp_ip 0:a624e2eeccac 218 */
nxp_ip 0:a624e2eeccac 219 PCA9956A( PinName i2c_sda, PinName i2c_scl, char i2c_address = PCA995xA::DEFAULT_I2C_ADDR );
nxp_ip 0:a624e2eeccac 220
nxp_ip 5:cb07190e05e7 221 /** Create a PCA9956A instance connected to specified I2C pins with specified address
nxp_ip 0:a624e2eeccac 222 *
nxp_ip 0:a624e2eeccac 223 * @param i2c_obj I2C object (instance)
nxp_ip 0:a624e2eeccac 224 * @param i2c_address I2C-bus address (default: 0xC0)
nxp_ip 0:a624e2eeccac 225 */
nxp_ip 0:a624e2eeccac 226 PCA9956A( I2C &i2c_obj, char i2c_address = PCA995xA::DEFAULT_I2C_ADDR );
nxp_ip 0:a624e2eeccac 227
nxp_ip 0:a624e2eeccac 228 /** Destractor
nxp_ip 0:a624e2eeccac 229 *
nxp_ip 0:a624e2eeccac 230 */
nxp_ip 0:a624e2eeccac 231 virtual ~PCA9956A();
nxp_ip 0:a624e2eeccac 232
nxp_ip 0:a624e2eeccac 233 /** Returns the number of output ports
nxp_ip 0:a624e2eeccac 234 *
nxp_ip 0:a624e2eeccac 235 * @returns
nxp_ip 0:a624e2eeccac 236 * The number of output ports
nxp_ip 0:a624e2eeccac 237 */
nxp_ip 0:a624e2eeccac 238 virtual int number_of_ports( void );
nxp_ip 0:a624e2eeccac 239
nxp_ip 0:a624e2eeccac 240 #if DOXYGEN_ONLY
nxp_ip 0:a624e2eeccac 241 /** Set the output duty-cycle, specified as a percentage (float)
nxp_ip 0:a624e2eeccac 242 *
nxp_ip 0:a624e2eeccac 243 * @param port Selecting output port
nxp_ip 0:a624e2eeccac 244 * 'ALLPORTS' can be used to set all port duty-cycle same value.
nxp_ip 0:a624e2eeccac 245 * @param v A floating-point value representing the output duty-cycle,
nxp_ip 0:a624e2eeccac 246 * specified as a percentage. The value should lie between
nxp_ip 1:3522be54a4f5 247 * 0.0f (representing on 0%) and 1.0f (representing on 99.6%).
nxp_ip 0:a624e2eeccac 248 * Values outside this range will have undefined behavior.
nxp_ip 0:a624e2eeccac 249 */
nxp_ip 0:a624e2eeccac 250 void pwm( int port, float v );
nxp_ip 0:a624e2eeccac 251
nxp_ip 0:a624e2eeccac 252 /** Set all output port duty-cycle, specified as a percentage (array of float)
nxp_ip 0:a624e2eeccac 253 *
nxp_ip 0:a624e2eeccac 254 * @param vp Aray to floating-point values representing the output duty-cycle,
nxp_ip 0:a624e2eeccac 255 * specified as a percentage. The value should lie between
nxp_ip 1:3522be54a4f5 256 * 0.0f (representing on 0%) and 1.0f (representing on 99.6%).
nxp_ip 0:a624e2eeccac 257 *
nxp_ip 0:a624e2eeccac 258 * @note
nxp_ip 0:a624e2eeccac 259 * The aray should have length of 24
nxp_ip 0:a624e2eeccac 260 */
nxp_ip 0:a624e2eeccac 261 void pwm( float *vp );
nxp_ip 0:a624e2eeccac 262
nxp_ip 0:a624e2eeccac 263 /** Set the output current, specified as a percentage (float)
nxp_ip 0:a624e2eeccac 264 *
nxp_ip 0:a624e2eeccac 265 * @param port Selecting output port
nxp_ip 0:a624e2eeccac 266 * 'ALLPORTS' can be used to set all port duty-cycle same value.
nxp_ip 0:a624e2eeccac 267 * @param v A floating-point value representing the output current,
nxp_ip 0:a624e2eeccac 268 * specified as a percentage. The value should lie between
nxp_ip 0:a624e2eeccac 269 * 0.0f (representing on 0%) and 1.0f (representing on 100%).
nxp_ip 0:a624e2eeccac 270 * Values outside this range will have undefined behavior.
nxp_ip 0:a624e2eeccac 271 */
nxp_ip 0:a624e2eeccac 272 void current( int port, float vp );
nxp_ip 0:a624e2eeccac 273
nxp_ip 0:a624e2eeccac 274 /** Set all output port curent, specified as a percentage (array of float)
nxp_ip 0:a624e2eeccac 275 *
nxp_ip 0:a624e2eeccac 276 * @param vp Aray to floating-point values representing the output current,
nxp_ip 0:a624e2eeccac 277 * specified as a percentage. The value should lie between
nxp_ip 0:a624e2eeccac 278 * 0.0f (representing on 0%) and 1.0f (representing on 100%).
nxp_ip 0:a624e2eeccac 279 *
nxp_ip 0:a624e2eeccac 280 * @note
nxp_ip 0:a624e2eeccac 281 * The aray should have length of 24
nxp_ip 0:a624e2eeccac 282 */
nxp_ip 0:a624e2eeccac 283 void current( float *vP );
nxp_ip 0:a624e2eeccac 284
nxp_ip 0:a624e2eeccac 285 /** Register write (single byte) : Low level access to device register
nxp_ip 0:a624e2eeccac 286 *
nxp_ip 0:a624e2eeccac 287 * @param reg_addr Register address
nxp_ip 0:a624e2eeccac 288 * @param data Value for setting into the register
nxp_ip 0:a624e2eeccac 289 */
nxp_ip 0:a624e2eeccac 290 void write( char reg_addr, char data );
nxp_ip 0:a624e2eeccac 291
nxp_ip 0:a624e2eeccac 292 /** Register write (multiple bytes) : Low level access to device register
nxp_ip 0:a624e2eeccac 293 *
nxp_ip 0:a624e2eeccac 294 * @param data Pointer to an array. First 1 byte should be the writing start register address
nxp_ip 0:a624e2eeccac 295 * @param length Length of data
nxp_ip 0:a624e2eeccac 296 */
nxp_ip 0:a624e2eeccac 297 void write( char *data, int length );
nxp_ip 0:a624e2eeccac 298
nxp_ip 0:a624e2eeccac 299 /** Register read (single byte) : Low level access to device register
nxp_ip 0:a624e2eeccac 300 *
nxp_ip 0:a624e2eeccac 301 * @param reg_addr Register address
nxp_ip 0:a624e2eeccac 302 * @return Read value from register
nxp_ip 0:a624e2eeccac 303 */
nxp_ip 0:a624e2eeccac 304 char read( char reg_addr );
nxp_ip 0:a624e2eeccac 305
nxp_ip 0:a624e2eeccac 306 /** Register write (multiple bytes) : Low level access to device register
nxp_ip 0:a624e2eeccac 307 *
nxp_ip 0:a624e2eeccac 308 * @param reg_addr Register address
nxp_ip 0:a624e2eeccac 309 * @param data Pointer to an array. The values are stored in this array.
nxp_ip 0:a624e2eeccac 310 * @param length Length of data
nxp_ip 0:a624e2eeccac 311 */
nxp_ip 0:a624e2eeccac 312 void read( char reg_addr, char *data, int length );
nxp_ip 0:a624e2eeccac 313 #endif
nxp_ip 0:a624e2eeccac 314
nxp_ip 0:a624e2eeccac 315 private:
nxp_ip 0:a624e2eeccac 316 void initialize( void );
nxp_ip 0:a624e2eeccac 317 virtual char pwm_register_access( int port );
nxp_ip 0:a624e2eeccac 318 virtual char current_register_access( int port );
nxp_ip 0:a624e2eeccac 319
nxp_ip 0:a624e2eeccac 320 const int n_of_ports;
nxp_ip 0:a624e2eeccac 321 }
nxp_ip 0:a624e2eeccac 322 ;
nxp_ip 0:a624e2eeccac 323
nxp_ip 0:a624e2eeccac 324 #endif // MBED_PCA9956A