From adad44a3a99dae529cc979bd4deb68bba8e9c61c Mon Sep 17 00:00:00 2001 From: px4dev Date: Fri, 14 Sep 2012 00:22:07 -0700 Subject: [PATCH] Avoid a possible issue where an interrupt can intervene at a critical point, possibly leading to excess bytes being transferred on the bus. --- nuttx/arch/arm/src/stm32/stm32_i2c.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/nuttx/arch/arm/src/stm32/stm32_i2c.c b/nuttx/arch/arm/src/stm32/stm32_i2c.c index cca7a24aaa..2d1a7142c5 100644 --- a/nuttx/arch/arm/src/stm32/stm32_i2c.c +++ b/nuttx/arch/arm/src/stm32/stm32_i2c.c @@ -1198,6 +1198,10 @@ static int stm32_i2c_isr(struct stm32_i2c_priv_s *priv) { stm32_i2c_traceevent(priv, I2CEVENT_RCVBYTE, priv->dcnt); +#ifdef CONFIG_I2C_POLLED + //irqstate_t state = irqsave(); +#endif + /* Receive a byte */ *priv->ptr++ = stm32_i2c_getreg(priv, STM32_I2C_DR_OFFSET); @@ -1209,6 +1213,11 @@ static int stm32_i2c_isr(struct stm32_i2c_priv_s *priv) stm32_i2c_modifyreg(priv, STM32_I2C_CR1_OFFSET, I2C_CR1_ACK, 0); } priv->dcnt--; + +#ifdef CONFIG_I2C_POLLED + //irqrestore(state); +#endif + } }