diff options
-rw-r--r-- | nuttx/arch/arm/src/tiva/Kconfig | 40 | ||||
-rw-r--r-- | nuttx/arch/arm/src/tiva/tiva_i2c.c | 32 |
2 files changed, 56 insertions, 16 deletions
diff --git a/nuttx/arch/arm/src/tiva/Kconfig b/nuttx/arch/arm/src/tiva/Kconfig index 1e90a40d5..016bd8bd0 100644 --- a/nuttx/arch/arm/src/tiva/Kconfig +++ b/nuttx/arch/arm/src/tiva/Kconfig @@ -318,6 +318,46 @@ config TIVA_DISABLE_GPIOQ_IRQS endmenu +if TIVA_I2C + +menu "I2C Configuration" + +config TIVA_I2C_DYNTIMEO + bool "Use dynamic timeouts" + default n + +if TIVA_I2C_DYNTIMEO + +config TIVA_I2C_DYNTIMEO_USECPERBYTE + int "Timeout Microseconds per Byte" + default 500 + +config TIVA_I2C_DYNTIMEO_STARTSTOP + int "Timeout for Start/Stop (Milliseconds)" + default 1000 + +endif # TIVA_I2C_DYNTIMEO + +config TIVA_I2C_TIMEOSEC + int "Timeout seconds" + default 0 + +if !TIVA_I2C_DYNTIMEO + +config TIVA_I2C_TIMEOMS + int "Timeout Milliseconds" + default 500 + depends on !TIVA_I2C_DYNTIMEO + +config TIVA_I2C_TIMEOTICKS + int "Timeout for Done and Stop (ticks)" + default 500 + depends on !TIVA_I2C_DYNTIMEO + +endif # !TIVA_I2C_DYNTIMEO +endmenu # I2C Configuration +endif # TIVA_I2C + if TIVA_ETHERNET menu "Tiva/Stellaris Ethernet Configuration" diff --git a/nuttx/arch/arm/src/tiva/tiva_i2c.c b/nuttx/arch/arm/src/tiva/tiva_i2c.c index 152d8c02b..383a3a745 100644 --- a/nuttx/arch/arm/src/tiva/tiva_i2c.c +++ b/nuttx/arch/arm/src/tiva/tiva_i2c.c @@ -85,24 +85,24 @@ /* Interrupt wait timeout in seconds and milliseconds */ -#if !defined(CONFIG_TIVA_I2CTIMEOSEC) && !defined(CONFIG_TIVA_I2CTIMEOMS) -# define CONFIG_TIVA_I2CTIMEOSEC 0 -# define CONFIG_TIVA_I2CTIMEOMS 500 /* Default is 500 milliseconds */ -#elif !defined(CONFIG_TIVA_I2CTIMEOSEC) -# define CONFIG_TIVA_I2CTIMEOSEC 0 /* User provided milliseconds */ -#elif !defined(CONFIG_TIVA_I2CTIMEOMS) -# define CONFIG_TIVA_I2CTIMEOMS 0 /* User provided seconds */ +#if !defined(CONFIG_TIVA_I2C_TIMEOSEC) && !defined(CONFIG_TIVA_I2C_TIMEOMS) +# define CONFIG_TIVA_I2C_TIMEOSEC 0 +# define CONFIG_TIVA_I2C_TIMEOMS 500 /* Default is 500 milliseconds */ +#elif !defined(CONFIG_TIVA_I2C_TIMEOSEC) +# define CONFIG_TIVA_I2C_TIMEOSEC 0 /* User provided milliseconds */ +#elif !defined(CONFIG_TIVA_I2C_TIMEOMS) +# define CONFIG_TIVA_I2C_TIMEOMS 0 /* User provided seconds */ #endif /* Interrupt wait time timeout in system timer ticks */ -#ifndef CONFIG_TIVA_I2CTIMEOTICKS -# define CONFIG_TIVA_I2CTIMEOTICKS \ - (SEC2TICK(CONFIG_TIVA_I2CTIMEOSEC) + MSEC2TICK(CONFIG_TIVA_I2CTIMEOMS)) +#ifndef CONFIG_TIVA_I2C_TIMEOTICKS +# define CONFIG_TIVA_I2C_TIMEOTICKS \ + (SEC2TICK(CONFIG_TIVA_I2C_TIMEOSEC) + MSEC2TICK(CONFIG_TIVA_I2C_TIMEOMS)) #endif #ifndef CONFIG_TIVA_I2C_DYNTIMEO_STARTSTOP -# define CONFIG_TIVA_I2C_DYNTIMEO_STARTSTOP TICK2USEC(CONFIG_TIVA_I2CTIMEOTICKS) +# define CONFIG_TIVA_I2C_DYNTIMEO_STARTSTOP TICK2USEC(CONFIG_TIVA_I2C_TIMEOTICKS) #endif /* Macros to convert a I2C pin to a GPIO output */ @@ -588,8 +588,8 @@ static inline int tiva_i2c_sem_waitdone(struct tiva_i2c_priv_s *priv) /* Calculate a time in the future */ -#if CONFIG_TIVA_I2CTIMEOSEC > 0 - abstime.tv_sec += CONFIG_TIVA_I2CTIMEOSEC; +#if CONFIG_TIVA_I2C_TIMEOSEC > 0 + abstime.tv_sec += CONFIG_TIVA_I2C_TIMEOSEC; #endif /* Add a value proportional to the number of bytes in the transfer */ @@ -602,8 +602,8 @@ static inline int tiva_i2c_sem_waitdone(struct tiva_i2c_priv_s *priv) abstime.tv_nsec -= 1000 * 1000 * 1000; } -#elif CONFIG_TIVA_I2CTIMEOMS > 0 - abstime.tv_nsec += CONFIG_TIVA_I2CTIMEOMS * 1000 * 1000; +#elif CONFIG_TIVA_I2C_TIMEOMS > 0 + abstime.tv_nsec += CONFIG_TIVA_I2C_TIMEOMS * 1000 * 1000; if (abstime.tv_nsec > 1000 * 1000 * 1000) { abstime.tv_sec++; @@ -654,7 +654,7 @@ static inline int tiva_i2c_sem_waitdone(struct tiva_i2c_priv_s *priv) #ifdef CONFIG_TIVA_I2C_DYNTIMEO timeout = USEC2TICK(tiva_i2c_tousecs(priv->msgc, priv->msgv)); #else - timeout = CONFIG_TIVA_I2CTIMEOTICKS; + timeout = CONFIG_TIVA_I2C_TIMEOTICKS; #endif /* Signal the interrupt handler that we are waiting. NOTE: Interrupts |