mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-02 03:49:12 +08:00
Avoid a possible issue where an interrupt can intervene at a critical point, possibly leading to excess bytes being transferred on the bus.
This commit is contained in:
@@ -1198,6 +1198,10 @@ static int stm32_i2c_isr(struct stm32_i2c_priv_s *priv)
|
|||||||
{
|
{
|
||||||
stm32_i2c_traceevent(priv, I2CEVENT_RCVBYTE, priv->dcnt);
|
stm32_i2c_traceevent(priv, I2CEVENT_RCVBYTE, priv->dcnt);
|
||||||
|
|
||||||
|
#ifdef CONFIG_I2C_POLLED
|
||||||
|
//irqstate_t state = irqsave();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Receive a byte */
|
/* Receive a byte */
|
||||||
|
|
||||||
*priv->ptr++ = stm32_i2c_getreg(priv, STM32_I2C_DR_OFFSET);
|
*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);
|
stm32_i2c_modifyreg(priv, STM32_I2C_CR1_OFFSET, I2C_CR1_ACK, 0);
|
||||||
}
|
}
|
||||||
priv->dcnt--;
|
priv->dcnt--;
|
||||||
|
|
||||||
|
#ifdef CONFIG_I2C_POLLED
|
||||||
|
//irqrestore(state);
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user