I2C fast mode plus support library. This library works on mbed-11U24's p28&p27 only.

Dependents:   I2C_FmPlus_Hello

A sample code for I2C Fast mode plus operation.

Warning!

This code works on mbed-LPC11U24 only.

Import programI2C_FmPlus_Hello

Sample code for "I2C_FmPlus" library. I2C fast mode plus support library. This library works on mbed-11U24's p28&p27 only.

Committer:
okano
Date:
Tue Dec 02 04:01:28 2014 +0000
Revision:
2:16a05acd675b
Parent:
1:6d19e8abca69
"#error" is added to limit the target platform

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 0:213903402306 1 /** I2C_FmPlus library
okano 0:213903402306 2 *
okano 0:213903402306 3 * @class I2C_FmPlus
okano 0:213903402306 4 * @author tedd
okano 1:6d19e8abca69 5 * @version 1.0
okano 1:6d19e8abca69 6 * @date 02-Dec-2014
okano 0:213903402306 7 */
okano 0:213903402306 8
okano 0:213903402306 9 #include "mbed.h"
okano 0:213903402306 10 #include "I2C_FmPlus.h"
okano 0:213903402306 11
okano 2:16a05acd675b 12 #ifndef TARGET_LPC11U24_401
okano 2:16a05acd675b 13 #error this version pnly supports mbed-LPC11U24
okano 2:16a05acd675b 14 #endif
okano 2:16a05acd675b 15
okano 1:6d19e8abca69 16 I2C_FmPlus::I2C_FmPlus( PinName sda, PinName scl ) : I2C( sda, scl ), _frequency( 1000 * 1000 ), _ratio( 0.4 )
okano 0:213903402306 17 {
okano 0:213903402306 18 LPC_IOCON->PIO0_4 &= ~0x300;
okano 0:213903402306 19 LPC_IOCON->PIO0_4 |= 0x200;
okano 0:213903402306 20 LPC_IOCON->PIO0_5 &= ~0x300;
okano 0:213903402306 21 LPC_IOCON->PIO0_5 |= 0x200;
okano 0:213903402306 22 }
okano 0:213903402306 23
okano 1:6d19e8abca69 24 void I2C_FmPlus::frequency( float hz ) {
okano 1:6d19e8abca69 25 _frequency = hz;
okano 1:6d19e8abca69 26 uint32_t pclk = SystemCoreClock;
okano 1:6d19e8abca69 27 float i2c_scl_period = (1.0 / hz) - 100e-9; // for SCLH offset and rise/fall time conpensation;
okano 1:6d19e8abca69 28 float scl_period_in_clock = (float)pclk * i2c_scl_period;
okano 1:6d19e8abca69 29 uint32_t low_period = scl_period_in_clock * (1.0 - _ratio);
okano 1:6d19e8abca69 30 uint32_t high_period = scl_period_in_clock * _ratio;
okano 1:6d19e8abca69 31 // I2C Rate
okano 1:6d19e8abca69 32 LPC_I2C->SCLL = low_period < 4 ? 4 : low_period;
okano 1:6d19e8abca69 33 LPC_I2C->SCLH = high_period < 4 ? 4 : high_period;
okano 1:6d19e8abca69 34 }
okano 1:6d19e8abca69 35
okano 1:6d19e8abca69 36 void I2C_FmPlus::duty_ratio( float ratio ) {
okano 1:6d19e8abca69 37 _ratio = ratio;
okano 1:6d19e8abca69 38 frequency( _frequency );
okano 1:6d19e8abca69 39 }
okano 1:6d19e8abca69 40
okano 1:6d19e8abca69 41 #if 0
okano 0:213903402306 42 void I2C_FmPlus::scl_setting( char sclh, char scll )
okano 0:213903402306 43 {
okano 0:213903402306 44 LPC_I2C->SCLH = sclh;
okano 0:213903402306 45 LPC_I2C->SCLL = scll;
okano 0:213903402306 46 }
okano 1:6d19e8abca69 47 #endif