summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/stm32/stm32_i2c.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/arch/arm/src/stm32/stm32_i2c.c')
-rw-r--r--nuttx/arch/arm/src/stm32/stm32_i2c.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/nuttx/arch/arm/src/stm32/stm32_i2c.c b/nuttx/arch/arm/src/stm32/stm32_i2c.c
index c02bf4543..996e8af39 100644
--- a/nuttx/arch/arm/src/stm32/stm32_i2c.c
+++ b/nuttx/arch/arm/src/stm32/stm32_i2c.c
@@ -1600,7 +1600,12 @@ static int stm32_i2c_process(FAR struct i2c_dev_s *dev, FAR struct i2c_msg_s *ms
stm32_i2c_clrstart(priv);
/* Old transfers are done */
-
+
+ /* reset ptr and dcnt to ensure an unexpected data
+ interrupt doesn't overwrite stale data */
+ priv->dcnt = 0;
+ priv->ptr = NULL;
+
priv->msgv = msgs;
priv->msgc = count;
@@ -1751,6 +1756,10 @@ static int stm32_i2c_process(FAR struct i2c_dev_s *dev, FAR struct i2c_msg_s *ms
stm32_i2c_enablefsmc(ahbenr);
stm32_i2c_sem_post(dev);
+
+ /* ensure that any ISR happening after we finish can't overwrite any user data */
+ priv->dcnt = 0;
+ priv->ptr = NULL;
return -errval;
}