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);