summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2014-07-12 16:05:06 +0200
committerLorenz Meier <lm@inf.ethz.ch>2014-07-12 16:05:06 +0200
commitb77beb3a51afee96b2e10e19b005c25225b3618c (patch)
tree8f926f25e790594cd508fa48f52ec2d7a4d02889
parent2a94cc8e5babb7d5661aedc09201239d39644332 (diff)
downloadnuttx-b77beb3a51afee96b2e10e19b005c25225b3618c.tar.gz
nuttx-b77beb3a51afee96b2e10e19b005c25225b3618c.tar.bz2
nuttx-b77beb3a51afee96b2e10e19b005c25225b3618c.zip
Revert "Revert "stm32_i2c: ensure that unexpected ISR can't overwrite stale data""
This reverts commit 7a7a07ed0ec492b3ab9f87467189886a66b2fc1a.
-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;
}