summaryrefslogtreecommitdiff
path: root/nuttx
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-18 13:34:09 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-18 13:34:09 +0000
commit4b2838bcbd58ec1d77e2c8b658191d6aab40a069 (patch)
treeac3d3e501447e483ee774d925fb7a26974ffd21e /nuttx
parentc5aff7d2d81275f2023345b9e11ca5cacb34665b (diff)
downloadpx4-nuttx-4b2838bcbd58ec1d77e2c8b658191d6aab40a069.tar.gz
px4-nuttx-4b2838bcbd58ec1d77e2c8b658191d6aab40a069.tar.bz2
px4-nuttx-4b2838bcbd58ec1d77e2c8b658191d6aab40a069.zip
STM32 I2C changes from Mike Smith
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5532 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx')
-rw-r--r--nuttx/arch/arm/src/stm32/stm32_i2c.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/nuttx/arch/arm/src/stm32/stm32_i2c.c b/nuttx/arch/arm/src/stm32/stm32_i2c.c
index c44a823db..18687c6f4 100644
--- a/nuttx/arch/arm/src/stm32/stm32_i2c.c
+++ b/nuttx/arch/arm/src/stm32/stm32_i2c.c
@@ -1245,11 +1245,11 @@ static int stm32_i2c_isr(struct stm32_i2c_priv_s *priv)
/* Disable acknowledge when last byte is to be received */
+ priv->dcnt--;
if (priv->dcnt == 1)
{
stm32_i2c_modifyreg(priv, STM32_I2C_CR1_OFFSET, I2C_CR1_ACK, 0);
}
- priv->dcnt--;
#ifdef CONFIG_I2C_POLLED
irqrestore(state);
@@ -1985,7 +1985,6 @@ int up_i2creset(FAR struct i2c_dev_s * dev)
unit32_ scl_gpio;
unit32_ sda_gpio;
int ret = ERROR;
- irqstate_t state;
ASSERT(dev);
@@ -2010,6 +2009,10 @@ int up_i2creset(FAR struct i2c_dev_s * dev)
scl_gpio = MKI2C_OUTPUT(priv->config->scl_pin);
sda_gpio = MKI2C_OUTPUT(priv->config->sda_pin);
+ /* Let SDA go high */
+
+ stm32_gpiowrite(sda_gpio, 1);
+
/* Clock the bus until any slaves currently driving it let it go. */
clock_count = 0;
@@ -2017,7 +2020,7 @@ int up_i2creset(FAR struct i2c_dev_s * dev)
{
/* Give up if we have tried too hard */
- if (clock_count++ > 1000)
+ if (clock_count++ > 10)
{
goto out;
}
@@ -2032,7 +2035,7 @@ int up_i2creset(FAR struct i2c_dev_s * dev)
{
/* Give up if we have tried too hard */
- if (stretch_count++ > 1000)
+ if (stretch_count++ > 10)
{
goto out;
}