diff --git a/os/hal/platforms/STM32/i2c_lld.c b/os/hal/platforms/STM32/i2c_lld.c index 9dc3a66bc..1ac7e4309 100644 --- a/os/hal/platforms/STM32/i2c_lld.c +++ b/os/hal/platforms/STM32/i2c_lld.c @@ -215,7 +215,7 @@ static void i2c_serve_event_interrupt(I2CDriver *i2cp) { if (i2cp->id_slave_config->id_callback != NULL) i2cp->id_slave_config->id_callback(i2cp, i2cp->id_slave_config); - else /* No callback function set - generate stop */ + else /* No callback function set. Generate stop */ i2c_lld_master_stop(i2cp); return; @@ -497,7 +497,7 @@ void i2c_lld_master_start(I2CDriver *i2cp){ while (i2cp->id_i2c->CR1 & I2C_CR1_START); /* enable interrupts from I2C hardware. They will disable in driver state - machine after the tranafer finish.*/ + machine after the transfer finish.*/ i2cp->id_i2c->CR2 |= I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN; } diff --git a/os/hal/src/i2c.c b/os/hal/src/i2c.c index 11d4fccfa..ad9a5d0ac 100644 --- a/os/hal/src/i2c.c +++ b/os/hal/src/i2c.c @@ -138,7 +138,9 @@ void i2cMasterStart(I2CDriver *i2cp){ chDbgCheck((i2cp != NULL), "i2cMasterTransmit"); + chSysLock(); i2c_lld_master_start(i2cp); + chSysUnlock(); } /** @@ -149,8 +151,9 @@ void i2cMasterStart(I2CDriver *i2cp){ void i2cMasterStop(I2CDriver *i2cp){ chDbgCheck((i2cp != NULL), "i2cMasterTransmit"); - + chSysLock(); i2c_lld_master_stop(i2cp); + chSysUnlock(); } /** @@ -168,7 +171,9 @@ void i2cMasterTransmit(I2CDriver *i2cp, I2CSlaveConfig *i2cscfg) { "i2cMasterTransmit(), #1", "not active"); + chSysLock(); i2c_lld_master_transmit(i2cp, i2cscfg); + chSysUnlock(); } @@ -186,7 +191,9 @@ void i2cMasterReceive(I2CDriver *i2cp, I2CSlaveConfig *i2cscfg) { "i2cMasterReceive(), #1", "not active"); + chSysLock(); i2c_lld_master_receive(i2cp, i2cscfg); + chSysUnlock(); } diff --git a/testhal/STM32/I2C/main.c b/testhal/STM32/I2C/main.c index 860e179d4..793f73f49 100644 --- a/testhal/STM32/I2C/main.c +++ b/testhal/STM32/I2C/main.c @@ -36,7 +36,7 @@ static msg_t PollTmp75Thread(void *arg) { systime_t time = chTimeNow(); while (TRUE) { - time += MS2ST(1000); + time += MS2ST(1001); /* Call reading function */ request_temperature(); chThdSleepUntil(time);