mirror of https://github.com/ARMmbed/mbed-os.git
Merge branch 'master' of https://github.com/Sissors/mbed into Sissors-master
commit
0659ba42f6
|
@ -48,8 +48,6 @@ static const uint16_t ICR[0x40] = {
|
||||||
2304, 2560, 3072, 3840
|
2304, 2560, 3072, 3840
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint8_t first_read;
|
|
||||||
|
|
||||||
|
|
||||||
void i2c_init(i2c_t *obj, PinName sda, PinName scl) {
|
void i2c_init(i2c_t *obj, PinName sda, PinName scl) {
|
||||||
// determine the I2C to use
|
// 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(sda, PinMap_I2C_SDA);
|
||||||
pinmap_pinout(scl, PinMap_I2C_SCL);
|
pinmap_pinout(scl, PinMap_I2C_SCL);
|
||||||
|
|
||||||
first_read = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int i2c_start(i2c_t *obj) {
|
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_MST_MASK;
|
||||||
obj->i2c->C1 |= I2C_C1_TX_MASK;
|
obj->i2c->C1 |= I2C_C1_TX_MASK;
|
||||||
}
|
}
|
||||||
first_read = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +93,6 @@ int i2c_stop(i2c_t *obj) {
|
||||||
// code provided with the freedom board
|
// code provided with the freedom board
|
||||||
for (n = 0; n < 100; n++)
|
for (n = 0; n < 100; n++)
|
||||||
__NOP();
|
__NOP();
|
||||||
first_read = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,30 +273,19 @@ void i2c_reset(i2c_t *obj) {
|
||||||
|
|
||||||
int i2c_byte_read(i2c_t *obj, int last) {
|
int i2c_byte_read(i2c_t *obj, int last) {
|
||||||
char data;
|
char data;
|
||||||
|
|
||||||
// set rx mode
|
// set rx mode
|
||||||
obj->i2c->C1 &= ~I2C_C1_TX_MASK;
|
obj->i2c->C1 &= ~I2C_C1_TX_MASK;
|
||||||
|
|
||||||
if(first_read) {
|
// Setup 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
i2c_do_read(obj, &data, last);
|
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) {
|
int i2c_byte_write(i2c_t *obj, int data) {
|
||||||
first_read = 1;
|
|
||||||
|
|
||||||
// set tx mode
|
// set tx mode
|
||||||
obj->i2c->C1 |= I2C_C1_TX_MASK;
|
obj->i2c->C1 |= I2C_C1_TX_MASK;
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,6 @@ static const uint16_t ICR[0x40] = {
|
||||||
2304, 2560, 3072, 3840
|
2304, 2560, 3072, 3840
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint8_t first_read;
|
|
||||||
|
|
||||||
|
|
||||||
void i2c_init(i2c_t *obj, PinName sda, PinName scl) {
|
void i2c_init(i2c_t *obj, PinName sda, PinName scl) {
|
||||||
// determine the I2C to use
|
// 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(sda, PinMap_I2C_SDA);
|
||||||
pinmap_pinout(scl, PinMap_I2C_SCL);
|
pinmap_pinout(scl, PinMap_I2C_SCL);
|
||||||
|
|
||||||
first_read = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int i2c_start(i2c_t *obj) {
|
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_MST_MASK;
|
||||||
obj->i2c->C1 |= I2C_C1_TX_MASK;
|
obj->i2c->C1 |= I2C_C1_TX_MASK;
|
||||||
}
|
}
|
||||||
first_read = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +93,6 @@ int i2c_stop(i2c_t *obj) {
|
||||||
// This wait is also included on the samples
|
// This wait is also included on the samples
|
||||||
// code provided with the freedom board
|
// code provided with the freedom board
|
||||||
for (n = 0; n < 100; n++) __NOP();
|
for (n = 0; n < 100; n++) __NOP();
|
||||||
first_read = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,26 +278,15 @@ int i2c_byte_read(i2c_t *obj, int last) {
|
||||||
// set rx mode
|
// set rx mode
|
||||||
obj->i2c->C1 &= ~I2C_C1_TX_MASK;
|
obj->i2c->C1 &= ~I2C_C1_TX_MASK;
|
||||||
|
|
||||||
if(first_read) {
|
// Setup 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
i2c_do_read(obj, &data, last);
|
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) {
|
int i2c_byte_write(i2c_t *obj, int data) {
|
||||||
first_read = 1;
|
|
||||||
|
|
||||||
// set tx mode
|
// set tx mode
|
||||||
obj->i2c->C1 |= I2C_C1_TX_MASK;
|
obj->i2c->C1 |= I2C_C1_TX_MASK;
|
||||||
|
|
||||||
|
|
|
@ -44,8 +44,6 @@ static const PinMap PinMap_I2C_SCL[] = {
|
||||||
{NC , NC , 0}
|
{NC , NC , 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint8_t first_read;
|
|
||||||
|
|
||||||
void i2c_init(i2c_t *obj, PinName sda, PinName scl) {
|
void i2c_init(i2c_t *obj, PinName sda, PinName scl) {
|
||||||
uint32_t i2c_sda = pinmap_peripheral(sda, PinMap_I2C_SDA);
|
uint32_t i2c_sda = pinmap_peripheral(sda, PinMap_I2C_SDA);
|
||||||
uint32_t i2c_scl = pinmap_peripheral(scl, PinMap_I2C_SCL);
|
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(sda, PinMap_I2C_SDA);
|
||||||
pinmap_pinout(scl, PinMap_I2C_SCL);
|
pinmap_pinout(scl, PinMap_I2C_SCL);
|
||||||
first_read = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int i2c_start(i2c_t *obj) {
|
int i2c_start(i2c_t *obj) {
|
||||||
i2c_hal_send_start(obj->instance);
|
i2c_hal_send_start(obj->instance);
|
||||||
first_read = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +74,6 @@ int i2c_stop(i2c_t *obj) {
|
||||||
// This wait is also included on the samples
|
// This wait is also included on the samples
|
||||||
// code provided with the freedom board
|
// code provided with the freedom board
|
||||||
for (n = 0; n < 100; n++) __NOP();
|
for (n = 0; n < 100; n++) __NOP();
|
||||||
first_read = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,26 +224,15 @@ int i2c_byte_read(i2c_t *obj, int last) {
|
||||||
// set rx mode
|
// set rx mode
|
||||||
i2c_hal_set_direction(obj->instance, kI2CReceive);
|
i2c_hal_set_direction(obj->instance, kI2CReceive);
|
||||||
|
|
||||||
if(first_read) {
|
// Setup 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
i2c_do_read(obj, &data, last);
|
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) {
|
int i2c_byte_write(i2c_t *obj, int data) {
|
||||||
first_read = 1;
|
|
||||||
|
|
||||||
// set tx mode
|
// set tx mode
|
||||||
i2c_hal_set_direction(obj->instance, kI2CTransmit);
|
i2c_hal_set_direction(obj->instance, kI2CTransmit);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue