I2C fast mode plus support library. This library works on mbed-11U24's p28&p27 only.
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.
I2C_FmPlus.cpp@2:16a05acd675b, 2014-12-02 (annotated)
- 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?
User | Revision | Line number | New 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 |