arch/arm/src/stm32f7/stm32_serial.c: Add Tx U[S]ART DMA.

This commit is contained in:
David Sidrane 2019-12-03 07:21:58 -06:00 committed by Gregory Nutt
parent d3e0d5ee72
commit baeaf54c6c
3 changed files with 728 additions and 169 deletions

View File

@ -1785,6 +1785,13 @@ config USART1_RXDMA
---help--- ---help---
In high data rate usage, Rx DMA may eliminate Rx overrun errors In high data rate usage, Rx DMA may eliminate Rx overrun errors
config USART1_TXDMA
bool "USART1 Tx DMA"
default n
depends on STM32F7_USART1 && STM32F7_DMA2
---help---
In high data rate usage, Rx DMA may reduce CPU Load
config USART2_RS485 config USART2_RS485
bool "RS-485 on USART2" bool "RS-485 on USART2"
default n default n
@ -1810,6 +1817,13 @@ config USART2_RXDMA
---help--- ---help---
In high data rate usage, Rx DMA may eliminate Rx overrun errors In high data rate usage, Rx DMA may eliminate Rx overrun errors
config USART2_TXDMA
bool "USART2 Tx DMA"
default n
depends on STM32F7_USART2 && STM32F7_DMA1
---help---
In high data rate usage, Rx DMA may reduce CPU Load
config USART3_RS485 config USART3_RS485
bool "RS-485 on USART3" bool "RS-485 on USART3"
default n default n
@ -1835,6 +1849,13 @@ config USART3_RXDMA
---help--- ---help---
In high data rate usage, Rx DMA may eliminate Rx overrun errors In high data rate usage, Rx DMA may eliminate Rx overrun errors
config USART3_TXDMA
bool "USART3 Tx DMA"
default n
depends on STM32F7_USART3 && STM32F7_DMA1
---help---
In high data rate usage, Rx DMA may reduce CPU Load
config UART4_RS485 config UART4_RS485
bool "RS-485 on UART4" bool "RS-485 on UART4"
default n default n
@ -1860,6 +1881,13 @@ config UART4_RXDMA
---help--- ---help---
In high data rate usage, Rx DMA may eliminate Rx overrun errors In high data rate usage, Rx DMA may eliminate Rx overrun errors
config UART4_TXDMA
bool "UART4 Tx DMA"
default n
depends on STM32F7_UART4 && STM32F7_DMA1
---help---
In high data rate usage, Rx DMA may reduce CPU Load
config UART5_RS485 config UART5_RS485
bool "RS-485 on UART5" bool "RS-485 on UART5"
default n default n
@ -1885,6 +1913,13 @@ config UART5_RXDMA
---help--- ---help---
In high data rate usage, Rx DMA may eliminate Rx overrun errors In high data rate usage, Rx DMA may eliminate Rx overrun errors
config UART5_TXDMA
bool "UART5 Tx DMA"
default n
depends on STM32F7_UART5 && STM32F7_DMA1
---help---
In high data rate usage, Rx DMA may reduce CPU Load
config USART6_RS485 config USART6_RS485
bool "RS-485 on USART6" bool "RS-485 on USART6"
default n default n
@ -1910,6 +1945,13 @@ config USART6_RXDMA
---help--- ---help---
In high data rate usage, Rx DMA may eliminate Rx overrun errors In high data rate usage, Rx DMA may eliminate Rx overrun errors
config USART6_TXDMA
bool "USART6 Tx DMA"
default n
depends on STM32F7_USART6 && STM32F7_DMA2
---help---
In high data rate usage, Rx DMA may reduce CPU Load
config UART7_RS485 config UART7_RS485
bool "RS-485 on UART7" bool "RS-485 on UART7"
default n default n
@ -1931,10 +1973,17 @@ config UART7_RS485_DIR_POLARITY
config UART7_RXDMA config UART7_RXDMA
bool "UART7 Rx DMA" bool "UART7 Rx DMA"
default n default n
depends on STM32F7_UART7 && STM32F7_DMA2 depends on STM32F7_UART7 && STM32F7_DMA1
---help--- ---help---
In high data rate usage, Rx DMA may eliminate Rx overrun errors In high data rate usage, Rx DMA may eliminate Rx overrun errors
config UART7_TXDMA
bool "UART7 Tx DMA"
default n
depends on STM32F7_UART7 && STM32F7_DMA1
---help---
In high data rate usage, Rx DMA may reduce CPU Load
config UART8_RS485 config UART8_RS485
bool "RS-485 on UART8" bool "RS-485 on UART8"
default n default n
@ -1956,10 +2005,17 @@ config UART8_RS485_DIR_POLARITY
config UART8_RXDMA config UART8_RXDMA
bool "UART8 Rx DMA" bool "UART8 Rx DMA"
default n default n
depends on STM32F7_UART8 && STM32F7_DMA2 depends on STM32F7_UART8 && STM32F7_DMA1
---help--- ---help---
In high data rate usage, Rx DMA may eliminate Rx overrun errors In high data rate usage, Rx DMA may eliminate Rx overrun errors
config UART8_TXDMA
bool "UART8 Tx DMA"
default n
depends on STM32F7_UART8 && STM32F7_DMA1
---help---
In high data rate usage, Rx DMA may reduce CPU Load
config STM32F7_SERIAL_RXDMA_BUFFER_SIZE config STM32F7_SERIAL_RXDMA_BUFFER_SIZE
int "Rx DMA buffer size" int "Rx DMA buffer size"
default 32 default 32

File diff suppressed because it is too large Load Diff

View File

@ -187,101 +187,173 @@
#if !defined(HAVE_UART) || !defined(CONFIG_ARCH_DMA) #if !defined(HAVE_UART) || !defined(CONFIG_ARCH_DMA)
# undef CONFIG_USART1_RXDMA # undef CONFIG_USART1_RXDMA
# undef CONFIG_USART1_TXDMA
# undef CONFIG_USART2_RXDMA # undef CONFIG_USART2_RXDMA
# undef CONFIG_USART2_TXDMA
# undef CONFIG_USART3_RXDMA # undef CONFIG_USART3_RXDMA
# undef CONFIG_USART3_TXDMA
# undef CONFIG_UART4_RXDMA # undef CONFIG_UART4_RXDMA
# undef CONFIG_UART4_TXDMA
# undef CONFIG_UART5_RXDMA # undef CONFIG_UART5_RXDMA
# undef CONFIG_UART5_TXDMA
# undef CONFIG_USART6_RXDMA # undef CONFIG_USART6_RXDMA
# undef CONFIG_USART6_TXDMA
# undef CONFIG_UART7_RXDMA # undef CONFIG_UART7_RXDMA
# undef CONFIG_UART7_TXDMA
# undef CONFIG_UART8_RXDMA # undef CONFIG_UART8_RXDMA
# undef CONFIG_UART8_TXDMA
#endif #endif
/* Disable the DMA configuration on all unused USARTs */ /* Disable the DMA configuration on all unused USARTs */
#ifndef CONFIG_STM32F7_USART1 #ifndef CONFIG_STM32F7_USART1
# undef CONFIG_USART1_RXDMA # undef CONFIG_USART1_RXDMA
# undef CONFIG_USART1_TXDMA
#endif #endif
#ifndef CONFIG_STM32F7_USART2 #ifndef CONFIG_STM32F7_USART2
# undef CONFIG_USART2_RXDMA # undef CONFIG_USART2_RXDMA
# undef CONFIG_USART2_TXDMA
#endif #endif
#ifndef CONFIG_STM32F7_USART3 #ifndef CONFIG_STM32F7_USART3
# undef CONFIG_USART3_RXDMA # undef CONFIG_USART3_RXDMA
# undef CONFIG_USART3_TXDMA
#endif #endif
#ifndef CONFIG_STM32F7_UART4 #ifndef CONFIG_STM32F7_UART4
# undef CONFIG_UART4_RXDMA # undef CONFIG_UART4_RXDMA
# undef CONFIG_UART4_TXDMA
#endif #endif
#ifndef CONFIG_STM32F7_UART5 #ifndef CONFIG_STM32F7_UART5
# undef CONFIG_UART5_RXDMA # undef CONFIG_UART5_RXDMA
# undef CONFIG_UART5_TXDMA
#endif #endif
#ifndef CONFIG_STM32F7_USART6 #ifndef CONFIG_STM32F7_USART6
# undef CONFIG_USART6_RXDMA # undef CONFIG_USART6_RXDMA
# undef CONFIG_USART6_TXDMA
#endif #endif
#ifndef CONFIG_STM32F7_UART7 #ifndef CONFIG_STM32F7_UART7
# undef CONFIG_UART7_RXDMA # undef CONFIG_UART7_RXDMA
# undef CONFIG_UART7_TXDMA
#endif #endif
#ifndef CONFIG_STM32F7_UART8 #ifndef CONFIG_STM32F7_UART8
# undef CONFIG_UART8_RXDMA # undef CONFIG_UART8_RXDMA
# undef CONFIG_UART8_TXDMA
#endif #endif
/* Is DMA available on any (enabled) USART? */ /* Is RX DMA available on any (enabled) USART? */
#undef SERIAL_HAVE_DMA #undef SERIAL_HAVE_RXDMA
#if defined(CONFIG_USART1_RXDMA) || defined(CONFIG_USART2_RXDMA) || \ #if defined(CONFIG_USART1_RXDMA) || defined(CONFIG_USART2_RXDMA) || \
defined(CONFIG_USART3_RXDMA) || defined(CONFIG_UART4_RXDMA) || \ defined(CONFIG_USART3_RXDMA) || defined(CONFIG_UART4_RXDMA) || \
defined(CONFIG_UART5_RXDMA) || defined(CONFIG_USART6_RXDMA) || \ defined(CONFIG_UART5_RXDMA) || defined(CONFIG_USART6_RXDMA) || \
defined(CONFIG_UART7_RXDMA) || defined(CONFIG_UART8_RXDMA) defined(CONFIG_UART7_RXDMA) || defined(CONFIG_UART8_RXDMA)
# define SERIAL_HAVE_DMA 1 # define SERIAL_HAVE_RXDMA 1
#endif #endif
/* Is DMA used on the console UART? */ /* Is TX DMA available on any (enabled) USART? */
#undef SERIAL_HAVE_CONSOLE_DMA #undef SERIAL_HAVE_TXDMA
#if defined(CONFIG_USART1_TXDMA) || defined(CONFIG_USART2_TXDMA) || \
defined(CONFIG_USART3_TXDMA) || defined(CONFIG_UART4_TXDMA) || \
defined(CONFIG_UART5_TXDMA) || defined(CONFIG_USART6_TXDMA) || \
defined(CONFIG_UART7_TXDMA) || defined(CONFIG_UART8_TXDMA)
# define SERIAL_HAVE_TXDMA 1
#endif
/* Is RX DMA used on the console UART? */
#undef SERIAL_HAVE_CONSOLE_RXDMA
#if defined(CONFIG_USART1_SERIAL_CONSOLE) && defined(CONFIG_USART1_RXDMA) #if defined(CONFIG_USART1_SERIAL_CONSOLE) && defined(CONFIG_USART1_RXDMA)
# define SERIAL_HAVE_CONSOLE_DMA 1 # define SERIAL_HAVE_CONSOLE_RXDMA 1
#elif defined(CONFIG_USART2_SERIAL_CONSOLE) && defined(CONFIG_USART2_RXDMA) #elif defined(CONFIG_USART2_SERIAL_CONSOLE) && defined(CONFIG_USART2_RXDMA)
# define SERIAL_HAVE_CONSOLE_DMA 1 # define SERIAL_HAVE_CONSOLE_RXDMA 1
#elif defined(CONFIG_USART3_SERIAL_CONSOLE) && defined(CONFIG_USART3_RXDMA) #elif defined(CONFIG_USART3_SERIAL_CONSOLE) && defined(CONFIG_USART3_RXDMA)
# define SERIAL_HAVE_CONSOLE_DMA 1 # define SERIAL_HAVE_CONSOLE_RXDMA 1
#elif defined(CONFIG_UART4_SERIAL_CONSOLE) && defined(CONFIG_UART4_RXDMA) #elif defined(CONFIG_UART4_SERIAL_CONSOLE) && defined(CONFIG_UART4_RXDMA)
# define SERIAL_HAVE_CONSOLE_DMA 1 # define SERIAL_HAVE_CONSOLE_RXDMA 1
#elif defined(CONFIG_UART5_SERIAL_CONSOLE) && defined(CONFIG_UART5_RXDMA) #elif defined(CONFIG_UART5_SERIAL_CONSOLE) && defined(CONFIG_UART5_RXDMA)
# define SERIAL_HAVE_CONSOLE_DMA 1 # define SERIAL_HAVE_CONSOLE_RXDMA 1
#elif defined(CONFIG_USART6_SERIAL_CONSOLE) && defined(CONFIG_USART6_RXDMA) #elif defined(CONFIG_USART6_SERIAL_CONSOLE) && defined(CONFIG_USART6_RXDMA)
# define SERIAL_HAVE_CONSOLE_DMA 1 # define SERIAL_HAVE_CONSOLE_RXDMA 1
#elif defined(CONFIG_UART7_SERIAL_CONSOLE) && defined(CONFIG_UART7_RXDMA) #elif defined(CONFIG_UART7_SERIAL_CONSOLE) && defined(CONFIG_UART7_RXDMA)
# define SERIAL_HAVE_CONSOLE_DMA 1 # define SERIAL_HAVE_CONSOLE_RXDMA 1
#elif defined(CONFIG_UART8_SERIAL_CONSOLE) && defined(CONFIG_UART8_RXDMA) #elif defined(CONFIG_UART8_SERIAL_CONSOLE) && defined(CONFIG_UART8_RXDMA)
# define SERIAL_HAVE_CONSOLE_DMA 1 # define SERIAL_HAVE_CONSOLE_RXDMA 1
#endif #endif
/* Is DMA used on all (enabled) USARTs */ /* Is TX DMA used on the console UART? */
#define SERIAL_HAVE_ONLY_DMA 1 #undef SERIAL_HAVE_CONSOLE_TXDMA
#if defined(CONFIG_USART1_SERIAL_CONSOLE) && defined(CONFIG_USART1_TXDMA)
# define SERIAL_HAVE_CONSOLE_TXDMA 1
#elif defined(CONFIG_USART2_SERIAL_CONSOLE) && defined(CONFIG_USART2_TXDMA)
# define SERIAL_HAVE_CONSOLE_TXDMA 1
#elif defined(CONFIG_USART3_SERIAL_CONSOLE) && defined(CONFIG_USART3_TXDMA)
# define SERIAL_HAVE_CONSOLE_TXDMA 1
#elif defined(CONFIG_UART4_SERIAL_CONSOLE) && defined(CONFIG_UART4_TXDMA)
# define SERIAL_HAVE_CONSOLE_TXDMA 1
#elif defined(CONFIG_UART5_SERIAL_CONSOLE) && defined(CONFIG_UART5_TXDMA)
# define SERIAL_HAVE_CONSOLE_TXDMA 1
#elif defined(CONFIG_USART6_SERIAL_CONSOLE) && defined(CONFIG_USART6_TXDMA)
# define SERIAL_HAVE_CONSOLE_TXDMA 1
#elif defined(CONFIG_UART7_SERIAL_CONSOLE) && defined(CONFIG_UART7_TXDMA)
# define SERIAL_HAVE_CONSOLE_TXDMA 1
#elif defined(CONFIG_UART8_SERIAL_CONSOLE) && defined(CONFIG_UART8_TXDMA)
# define SERIAL_HAVE_CONSOLE_TXDMA 1
#endif
/* Is RX DMA used on all (enabled) USARTs */
#define SERIAL_HAVE_ONLY_RXDMA 1
#if defined(CONFIG_STM32F7_USART1) && !defined(CONFIG_USART1_RXDMA) #if defined(CONFIG_STM32F7_USART1) && !defined(CONFIG_USART1_RXDMA)
# undef SERIAL_HAVE_ONLY_DMA # undef SERIAL_HAVE_ONLY_RXDMA
#elif defined(CONFIG_STM32F7_USART2) && !defined(CONFIG_USART2_RXDMA) #elif defined(CONFIG_STM32F7_USART2) && !defined(CONFIG_USART2_RXDMA)
# undef SERIAL_HAVE_ONLY_DMA # undef SERIAL_HAVE_ONLY_RXDMA
#elif defined(CONFIG_STM32F7_USART3) && !defined(CONFIG_USART3_RXDMA) #elif defined(CONFIG_STM32F7_USART3) && !defined(CONFIG_USART3_RXDMA)
# undef SERIAL_HAVE_ONLY_DMA # undef SERIAL_HAVE_ONLY_RXDMA
#elif defined(CONFIG_STM32F7_UART4) && !defined(CONFIG_UART4_RXDMA) #elif defined(CONFIG_STM32F7_UART4) && !defined(CONFIG_UART4_RXDMA)
# undef SERIAL_HAVE_ONLY_DMA # undef SERIAL_HAVE_ONLY_RXDMA
#elif defined(CONFIG_STM32F7_UART5) && !defined(CONFIG_UART5_RXDMA) #elif defined(CONFIG_STM32F7_UART5) && !defined(CONFIG_UART5_RXDMA)
# undef SERIAL_HAVE_ONLY_DMA # undef SERIAL_HAVE_ONLY_RXDMA
#elif defined(CONFIG_STM32F7_USART6) && !defined(CONFIG_USART6_RXDMA) #elif defined(CONFIG_STM32F7_USART6) && !defined(CONFIG_USART6_RXDMA)
# undef SERIAL_HAVE_ONLY_DMA # undef SERIAL_HAVE_ONLY_RXDMA
#elif defined(CONFIG_STM32F7_UART7) && !defined(CONFIG_UART7_RXDMA) #elif defined(CONFIG_STM32F7_UART7) && !defined(CONFIG_UART7_RXDMA)
# undef SERIAL_HAVE_ONLY_DMA # undef SERIAL_HAVE_ONLY_RXDMA
#elif defined(CONFIG_STM32F7_UART8) && !defined(CONFIG_UART8_RXDMA) #elif defined(CONFIG_STM32F7_UART8) && !defined(CONFIG_UART8_RXDMA)
# undef SERIAL_HAVE_ONLY_DMA # undef SERIAL_HAVE_ONLY_RXDMA
#endif #endif
/* Is TX DMA used on all (enabled) USARTs */
#define SERIAL_HAVE_ONLY_TXDMA 1
#if defined(CONFIG_STM32F7_USART1) && !defined(CONFIG_USART1_TXDMA)
# undef SERIAL_HAVE_ONLY_TXDMA
#elif defined(CONFIG_STM32F7_USART2) && !defined(CONFIG_USART2_TXDMA)
# undef SERIAL_HAVE_ONLY_TXDMA
#elif defined(CONFIG_STM32F7_USART3) && !defined(CONFIG_USART3_TXDMA)
# undef SERIAL_HAVE_ONLY_TXDMA
#elif defined(CONFIG_STM32F7_UART4) && !defined(CONFIG_UART4_TXDMA)
# undef SERIAL_HAVE_ONLY_TXDMA
#elif defined(CONFIG_STM32F7_UART5) && !defined(CONFIG_UART5_TXDMA)
# undef SERIAL_HAVE_ONLY_TXDMA
#elif defined(CONFIG_STM32F7_USART6) && !defined(CONFIG_USART6_TXDMA)
# undef SERIAL_HAVE_ONLY_TXDMA
#elif defined(CONFIG_STM32F7_UART7) && !defined(CONFIG_UART7_TXDMA)
# undef SERIAL_HAVE_ONLY_TXDMA
#elif defined(CONFIG_STM32F7_UART8) && !defined(CONFIG_UART8_TXDMA)
# undef SERIAL_HAVE_ONLY_TXDMA
#endif
#undef SERIAL_HAVE_ONLY_DMA
#if defined(SERIAL_HAVE_ONLY_RXDMA) && defined(SERIAL_HAVE_ONLY_TXDMA)
#define SERIAL_HAVE_ONLY_DMA
#endif
/* Is RS-485 used? */ /* Is RS-485 used? */
#if defined(CONFIG_USART1_RS485) || defined(CONFIG_USART2_RS485) || \ #if defined(CONFIG_USART1_RS485) || defined(CONFIG_USART2_RS485) || \
@ -333,7 +405,7 @@ extern "C"
* *
************************************************************************************/ ************************************************************************************/
#ifdef SERIAL_HAVE_DMA #ifdef SERIAL_HAVE_RXDMA
void stm32_serial_dma_poll(void); void stm32_serial_dma_poll(void);
#endif #endif