Adaptation for PCA9548 Nxp I2C switch

Fork of PCA9547 by Tedd OKANO

Committer:
franzle
Date:
Wed Mar 22 09:34:59 2017 +0000
Revision:
9:2fcf9622c207
Parent:
PCA9547.cpp@8:c716fb3ccb8d
New Library for I2C switch

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 3:7e884a7805b1 1 /**
franzle 9:2fcf9622c207 2 * PCA9548A library
okano 1:47f2cf4c6619 3 *
okano 3:7e884a7805b1 4 * @author Tedd OKANO
okano 6:33ef755248e0 5 * @version 0.2
okano 6:33ef755248e0 6 * @date Feb-2015
okano 3:7e884a7805b1 7 *
franzle 9:2fcf9622c207 8 * PCA9548A: an I2C bus multiplexer control library
okano 1:47f2cf4c6619 9 *
franzle 9:2fcf9622c207 10 * PCA9548A is an I2C multiplexer which enables to select 1:8 multiplexed I2C bus.
okano 3:7e884a7805b1 11 * The multiplexer is useful for deviding I2C bus to avoiding slave address conflict and separating capacitive loads.
okano 1:47f2cf4c6619 12 *
franzle 9:2fcf9622c207 13 * For more information about PCA9548A:
franzle 9:2fcf9622c207 14 * http://www.nxp.com/documents/data_sheet/PCA9548A.pdf
okano 3:7e884a7805b1 15 *
okano 1:47f2cf4c6619 16 */
okano 3:7e884a7805b1 17
franzle 9:2fcf9622c207 18 #include "PCA9548A.h"
okano 0:662ab6a5aa97 19
franzle 9:2fcf9622c207 20 PCA9548A::PCA9548A( PinName sda, PinName scl, char i2c_address )
okano 5:f4f72501148a 21 : i2c_p( new I2C( sda, scl ) ), i2c( *i2c_p ), i2c_addr( i2c_address )
okano 0:662ab6a5aa97 22 {
okano 0:662ab6a5aa97 23 // do nothing.
okano 0:662ab6a5aa97 24 // leave it in default state.
okano 5:f4f72501148a 25 }
okano 5:f4f72501148a 26
franzle 9:2fcf9622c207 27 PCA9548A::PCA9548A( I2C &i2c_, char i2c_address )
okano 5:f4f72501148a 28 : i2c_p( NULL ), i2c( i2c_ ), i2c_addr( i2c_address )
okano 0:662ab6a5aa97 29 {
okano 0:662ab6a5aa97 30 // do nothing.
okano 0:662ab6a5aa97 31 // leave it in default state.
okano 0:662ab6a5aa97 32 }
okano 0:662ab6a5aa97 33
franzle 9:2fcf9622c207 34 PCA9548A::~PCA9548A()
okano 0:662ab6a5aa97 35 {
okano 5:f4f72501148a 36 if ( NULL != i2c_p )
okano 5:f4f72501148a 37 delete i2c_p;
okano 0:662ab6a5aa97 38 }
okano 0:662ab6a5aa97 39
franzle 9:2fcf9622c207 40 void PCA9548A::select( char channel )
okano 0:662ab6a5aa97 41 {
okano 0:662ab6a5aa97 42 char data = 0x08 | channel;
okano 0:662ab6a5aa97 43
okano 5:f4f72501148a 44 i2c.write( i2c_addr, &data, 1 );
okano 0:662ab6a5aa97 45 }
okano 2:c3459a955c8c 46
franzle 9:2fcf9622c207 47 void PCA9548A::disable( void )
okano 2:c3459a955c8c 48 {
okano 2:c3459a955c8c 49 char data = 0x00;
okano 2:c3459a955c8c 50
okano 5:f4f72501148a 51 i2c.write( i2c_addr, &data, 1 );
okano 2:c3459a955c8c 52 }