From 4c190a3fa3d6981457ec1430ce83f990cc2af4a2 Mon Sep 17 00:00:00 2001 From: Karl Palsson Date: Fri, 15 Aug 2014 10:04:59 +0000 Subject: [PATCH] stm32: i2c: actually keep bit 14 set as per datasheet. Old code did three writes, new way actually seems to follow datasheet properly. --- lib/stm32/common/i2c_common_all.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/stm32/common/i2c_common_all.c b/lib/stm32/common/i2c_common_all.c index 886f594a..fd2ba155 100644 --- a/lib/stm32/common/i2c_common_all.c +++ b/lib/stm32/common/i2c_common_all.c @@ -147,9 +147,10 @@ This sets an address for Slave mode operation, in 7 bit form. void i2c_set_own_7bit_slave_address(uint32_t i2c, uint8_t slave) { - I2C_OAR1(i2c) = (uint16_t)(slave << 1); - I2C_OAR1(i2c) &= ~I2C_OAR1_ADDMODE; - I2C_OAR1(i2c) |= (1 << 14); /* Datasheet: always keep 1 by software. */ + uint16_t val = (uint16_t)(slave << 1); + /* Datasheet: always keep 1 by software. */ + val |= (1 << 14); + I2C_OAR1(i2c) = val; } /*---------------------------------------------------------------------------*/