You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by sa...@apache.org on 2021/09/16 17:07:35 UTC

[incubator-nuttx] 02/02: risc-v/esp32c3: Make the semaphore timeout on I2C configurable

This is an automated email from the ASF dual-hosted git repository.

sara pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 52cea558af6e7dfa41cbfc616ff209ccb36c1276
Author: Gustavo Henrique Nihei <gu...@espressif.com>
AuthorDate: Wed Sep 15 16:29:50 2021 -0300

    risc-v/esp32c3: Make the semaphore timeout on I2C configurable
    
    Signed-off-by: Gustavo Henrique Nihei <gu...@espressif.com>
---
 arch/risc-v/src/esp32c3/Kconfig       |  8 ++++++++
 arch/risc-v/src/esp32c3/esp32c3_i2c.c | 14 ++++++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/arch/risc-v/src/esp32c3/Kconfig b/arch/risc-v/src/esp32c3/Kconfig
index 30126a6..f91e39d 100644
--- a/arch/risc-v/src/esp32c3/Kconfig
+++ b/arch/risc-v/src/esp32c3/Kconfig
@@ -375,6 +375,14 @@ config ESP32C3_I2C0_SDAPIN
 
 endif # ESP32C3_I2C0
 
+config ESP32C3_I2CTIMEOSEC
+	int "Timeout seconds"
+	default 0
+
+config ESP32C3_I2CTIMEOMS
+	int "Timeout milliseconds"
+	default 500
+
 endmenu # I2C configuration
 
 menu "SPI configuration"
diff --git a/arch/risc-v/src/esp32c3/esp32c3_i2c.c b/arch/risc-v/src/esp32c3/esp32c3_i2c.c
index 8807703..3617382 100644
--- a/arch/risc-v/src/esp32c3/esp32c3_i2c.c
+++ b/arch/risc-v/src/esp32c3/esp32c3_i2c.c
@@ -799,8 +799,18 @@ static int esp32c3_i2c_sem_waitdone(struct esp32c3_i2c_priv_s *priv)
 
   clock_gettime(CLOCK_REALTIME, &abstime);
 
-  abstime.tv_sec += 10;
-  abstime.tv_nsec += 0;
+#if CONFIG_ESP32C3_I2CTIMEOSEC > 0
+  abstime.tv_sec += CONFIG_ESP32C3_I2CTIMEOSEC;
+#endif
+
+#if CONFIG_ESP32C3_I2CTIMEOMS > 0
+  abstime.tv_nsec += CONFIG_ESP32C3_I2CTIMEOMS * NSEC_PER_MSEC;
+  if (abstime.tv_nsec >= 1000 * NSEC_PER_MSEC)
+    {
+      abstime.tv_sec++;
+      abstime.tv_nsec -= 1000 * NSEC_PER_MSEC;
+    }
+#endif
 
   ret = nxsem_timedwait_uninterruptible(&priv->sem_isr, &abstime);