diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/i2c_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/i2c_api.c index 4cbdb2d42f..93b77b2a40 100644 --- a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/i2c_api.c +++ b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D5M/i2c_api.c @@ -48,8 +48,6 @@ static const uint16_t ICR[0x40] = { 2304, 2560, 3072, 3840 }; -static uint8_t first_read; - void i2c_init(i2c_t *obj, PinName sda, PinName scl) { // determine the I2C to use @@ -70,8 +68,6 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) { pinmap_pinout(sda, PinMap_I2C_SDA); pinmap_pinout(scl, PinMap_I2C_SCL); - - first_read = 1; } int i2c_start(i2c_t *obj) { @@ -83,7 +79,6 @@ int i2c_start(i2c_t *obj) { obj->i2c->C1 |= I2C_C1_MST_MASK; obj->i2c->C1 |= I2C_C1_TX_MASK; } - first_read = 1; return 0; } @@ -98,7 +93,6 @@ int i2c_stop(i2c_t *obj) { // code provided with the freedom board for (n = 0; n < 100; n++) __NOP(); - first_read = 1; return 0; } @@ -279,30 +273,19 @@ void i2c_reset(i2c_t *obj) { int i2c_byte_read(i2c_t *obj, int last) { char data; - + // set rx mode obj->i2c->C1 &= ~I2C_C1_TX_MASK; - - if(first_read) { - // first dummy read - i2c_do_read(obj, &data, 0); - first_read = 0; - } - - if (last) { - // set tx mode - obj->i2c->C1 |= I2C_C1_TX_MASK; - return obj->i2c->D; - } - + + // Setup read i2c_do_read(obj, &data, last); - return data; + // set tx mode + obj->i2c->C1 |= I2C_C1_TX_MASK; + return obj->i2c->D; } int i2c_byte_write(i2c_t *obj, int data) { - first_read = 1; - // set tx mode obj->i2c->C1 |= I2C_C1_TX_MASK; diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KLXX/i2c_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KLXX/i2c_api.c index add00a6d7c..a9f3743a07 100644 --- a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KLXX/i2c_api.c +++ b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KLXX/i2c_api.c @@ -37,8 +37,6 @@ static const uint16_t ICR[0x40] = { 2304, 2560, 3072, 3840 }; -static uint8_t first_read; - void i2c_init(i2c_t *obj, PinName sda, PinName scl) { // determine the I2C to use @@ -63,8 +61,6 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) { pinmap_pinout(sda, PinMap_I2C_SDA); pinmap_pinout(scl, PinMap_I2C_SCL); - - first_read = 1; } int i2c_start(i2c_t *obj) { @@ -84,7 +80,6 @@ int i2c_start(i2c_t *obj) { obj->i2c->C1 |= I2C_C1_MST_MASK; obj->i2c->C1 |= I2C_C1_TX_MASK; } - first_read = 1; return 0; } @@ -98,7 +93,6 @@ int i2c_stop(i2c_t *obj) { // This wait is also included on the samples // code provided with the freedom board for (n = 0; n < 100; n++) __NOP(); - first_read = 1; return 0; } @@ -284,26 +278,15 @@ int i2c_byte_read(i2c_t *obj, int last) { // set rx mode obj->i2c->C1 &= ~I2C_C1_TX_MASK; - if(first_read) { - // first dummy read - i2c_do_read(obj, &data, 0); - first_read = 0; - } - - if (last) { - // set tx mode - obj->i2c->C1 |= I2C_C1_TX_MASK; - return obj->i2c->D; - } - + // Setup read i2c_do_read(obj, &data, last); - - return data; + + // set tx mode + obj->i2c->C1 |= I2C_C1_TX_MASK; + return obj->i2c->D; } int i2c_byte_write(i2c_t *obj, int data) { - first_read = 1; - // set tx mode obj->i2c->C1 |= I2C_C1_TX_MASK; diff --git a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F/i2c_api.c b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F/i2c_api.c index b505813ec7..4dc01413cf 100644 --- a/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F/i2c_api.c +++ b/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F/i2c_api.c @@ -44,8 +44,6 @@ static const PinMap PinMap_I2C_SCL[] = { {NC , NC , 0} }; -static uint8_t first_read; - void i2c_init(i2c_t *obj, PinName sda, PinName scl) { uint32_t i2c_sda = pinmap_peripheral(sda, PinMap_I2C_SDA); uint32_t i2c_scl = pinmap_peripheral(scl, PinMap_I2C_SCL); @@ -60,12 +58,10 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) { pinmap_pinout(sda, PinMap_I2C_SDA); pinmap_pinout(scl, PinMap_I2C_SCL); - first_read = 1; } int i2c_start(i2c_t *obj) { i2c_hal_send_start(obj->instance); - first_read = 1; return 0; } @@ -78,7 +74,6 @@ int i2c_stop(i2c_t *obj) { // This wait is also included on the samples // code provided with the freedom board for (n = 0; n < 100; n++) __NOP(); - first_read = 1; return 0; } @@ -229,26 +224,15 @@ int i2c_byte_read(i2c_t *obj, int last) { // set rx mode i2c_hal_set_direction(obj->instance, kI2CReceive); - if(first_read) { - // first dummy read - i2c_do_read(obj, &data, 0); - first_read = 0; - } - - if (last) { - // set tx mode - i2c_hal_set_direction(obj->instance, kI2CTransmit); - return i2c_hal_read(obj->instance); - } - + // Setup read i2c_do_read(obj, &data, last); - return data; + // set tx mode + i2c_hal_set_direction(obj->instance, kI2CTransmit); + return i2c_hal_read(obj->instance); } int i2c_byte_write(i2c_t *obj, int data) { - first_read = 1; - // set tx mode i2c_hal_set_direction(obj->instance, kI2CTransmit);