summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/stm32
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-23 14:38:13 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-23 14:38:13 +0000
commit7866bca6aac68f69426b9433fa5c972b5143dde1 (patch)
treec6824d3be2f29e4996ca87ddee70422dc028a151 /nuttx/arch/arm/src/stm32
parentf663a4a46924f3082d33a39a5872e90f2aff9eb0 (diff)
downloadpx4-nuttx-7866bca6aac68f69426b9433fa5c972b5143dde1.tar.gz
px4-nuttx-7866bca6aac68f69426b9433fa5c972b5143dde1.tar.bz2
px4-nuttx-7866bca6aac68f69426b9433fa5c972b5143dde1.zip
Add single-wire UART support to STM32 serial driver
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5552 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/arm/src/stm32')
-rw-r--r--nuttx/arch/arm/src/stm32/Kconfig19
-rw-r--r--nuttx/arch/arm/src/stm32/stm32_serial.c27
2 files changed, 44 insertions, 2 deletions
diff --git a/nuttx/arch/arm/src/stm32/Kconfig b/nuttx/arch/arm/src/stm32/Kconfig
index 99dde3209..85cdebd35 100644
--- a/nuttx/arch/arm/src/stm32/Kconfig
+++ b/nuttx/arch/arm/src/stm32/Kconfig
@@ -457,32 +457,38 @@ config STM32_USART1
bool "USART1"
default n
select ARCH_HAVE_USART1
+ select STM32_USART
config STM32_USART2
bool "USART2"
default n
select ARCH_HAVE_USART2
+ select STM32_USART
config STM32_USART3
bool "USART3"
default n
select ARCH_HAVE_USART3
+ select STM32_USART
config STM32_UART4
bool "UART4"
default n
select ARCH_HAVE_UART4
+ select STM32_USART
config STM32_UART5
bool "UART5"
default n
select ARCH_HAVE_UART5
+ select STM32_USART
config STM32_USART6
bool "USART6"
default n
depends on STM32_STM32F20XX || STM32_STM32F40XX
select ARCH_HAVE_USART6
+ select STM32_USART
config STM32_USB
bool "USB Device"
@@ -1804,8 +1810,11 @@ config STM32_TIM14_DAC2
endchoice
+bool STM32_USART
+ bool
+
menu "U[S]ART Configuration"
- depends on STM32_USART1 || STM32_USART2 || STM32_USART3 || STM32_USART4 || STM32_USART5 || STM32_USART6
+ depends on STM32_USART
config USART1_RS485
bool "RS-485 on USART1"
@@ -1968,6 +1977,14 @@ config SERIAL_TERMIOS
endmenu
+config STM32_USART_SINGLEWIRE
+ bool "Single Wire Support"
+ default n
+ depends on STM32_USART
+ ---help---
+ Enable single wire UART support. The option enables support for the
+ TIOCSSINGLEWIRE ioctl in the STM32 serial driver.
+
menu "SPI Configuration"
depends on STM32_SPI
diff --git a/nuttx/arch/arm/src/stm32/stm32_serial.c b/nuttx/arch/arm/src/stm32/stm32_serial.c
index e86fbcf6f..0151bd247 100644
--- a/nuttx/arch/arm/src/stm32/stm32_serial.c
+++ b/nuttx/arch/arm/src/stm32/stm32_serial.c
@@ -1,7 +1,7 @@
/****************************************************************************
* arch/arm/src/stm32/stm32_serial.c
*
- * Copyright (C) 2009-2012 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2009-2013 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -1401,6 +1401,31 @@ static int up_ioctl(struct file *filep, int cmd, unsigned long arg)
}
break;
+#ifdef CONFIG_STM32_USART_SINGLEWIRE
+ case TIOCSSINGLEWIRE:
+ {
+ /* Change the TX port to be open-drain/push-pull and enable/disable
+ * half-duplex mode.
+ */
+
+ uint32_t cr = up_serialin(priv, STM32_USART_CR3_OFFSET);
+
+ if (arg == SER_SINGLEWIRE_ENABLED)
+ {
+ stm32_configgpio(priv->tx_gpio | GPIO_OPENDRAIN);
+ cr |= USART_CR3_HDSEL;
+ }
+ else
+ {
+ stm32_configgpio(priv->tx_gpio | GPIO_PUSHPULL);
+ cr &= ~USART_CR3_HDSEL;
+ }
+
+ up_serialout(priv, STM32_USART_CR3_OFFSET, cr);
+ }
+ break;
+#endif
+
#ifdef CONFIG_SERIAL_TERMIOS
case TCGETS:
{