From 46851b33b2842129af794f38e70f3b0f0dd45dda Mon Sep 17 00:00:00 2001 From: Juha Niskanen Date: Fri, 12 May 2017 15:54:48 +0300 Subject: [PATCH] STM32L4: port stm32l4_serial_get_uart function from STM32F7 --- arch/arm/src/stm32l4/stm32l4_serial.c | 47 ++++++++++++++++++++++++--- arch/arm/src/stm32l4/stm32l4_uart.h | 11 +++++++ 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/arch/arm/src/stm32l4/stm32l4_serial.c b/arch/arm/src/stm32l4/stm32l4_serial.c index 955fb548e1..15b9cbd120 100644 --- a/arch/arm/src/stm32l4/stm32l4_serial.c +++ b/arch/arm/src/stm32l4/stm32l4_serial.c @@ -200,6 +200,10 @@ struct stm32l4_serial_s uint16_t ie; /* Saved interrupt mask bits value */ uint16_t sr; /* Saved status bits */ + /* Has been initialized and HW is setup. */ + + bool initialized; + /* If termios are supported, then the following fields may vary at * runtime. */ @@ -1169,6 +1173,11 @@ static int stm32l4serial_setup(FAR struct uart_dev_s *dev) /* Set up the cached interrupt enables value */ priv->ie = 0; + + /* Mark device as initialized. */ + + priv->initialized = true; + return OK; } @@ -1279,6 +1288,10 @@ static void stm32l4serial_shutdown(FAR struct uart_dev_s *dev) FAR struct stm32l4_serial_s *priv = (FAR struct stm32l4_serial_s *)dev->priv; uint32_t regval; + /* Mark device as uninitialized. */ + + priv->initialized = false; + /* Disable all interrupts */ stm32l4serial_disableusartint(priv, NULL); @@ -2327,6 +2340,32 @@ static int stm32l4serial_pmprepare(FAR struct pm_callback_s *cb, int domain, #ifdef USE_SERIALDRIVER +/**************************************************************************** + * Name: stm32l4_serial_get_uart + * + * Description: + * Get serial driver structure for STM32 USART + * + ****************************************************************************/ + +FAR uart_dev_t *stm32l4_serial_get_uart(int uart_num) +{ + int uart_idx = uart_num - 1; + + if (uart_idx < 0 || uart_idx >= STM32L4_NUSART+STM32L4_NUART || \ + !uart_devs[uart_idx]) + { + return NULL; + } + + if (!uart_devs[uart_idx]->initialized) + { + return NULL; + } + + return &uart_devs[uart_idx]->dev; +} + /**************************************************************************** * Name: up_earlyserialinit * @@ -2360,10 +2399,10 @@ void up_earlyserialinit(void) #endif #endif /* HAVE UART */ } -#endif +#endif /* USE_EARLYSERIALINIT */ /**************************************************************************** - * Name: stm32l4serial_getregit + * Name: up_serialinit * * Description: * Register serial console and serial ports. This assumes @@ -2441,7 +2480,7 @@ void up_serialinit(void) } /**************************************************************************** - * Name: stm32l4serial_dmapoll + * Name: stm32l4_serial_dma_poll * * Description: * Checks receive DMA buffers for received bytes that have not accumulated @@ -2452,7 +2491,7 @@ void up_serialinit(void) ****************************************************************************/ #ifdef SERIAL_HAVE_DMA -void stm32l4serial_dmapoll(void) +void stm32l4_serial_dma_poll(void) { irqstate_t flags; diff --git a/arch/arm/src/stm32l4/stm32l4_uart.h b/arch/arm/src/stm32l4/stm32l4_uart.h index 286ba8eeb8..218e0c6b6f 100644 --- a/arch/arm/src/stm32l4/stm32l4_uart.h +++ b/arch/arm/src/stm32l4/stm32l4_uart.h @@ -41,6 +41,7 @@ ************************************************************************************/ #include +#include #include "chip.h" @@ -236,6 +237,16 @@ extern "C" * Public Functions ************************************************************************************/ +/************************************************************************************ + * Name: stm32l4_serial_get_uart + * + * Description: + * Get serial driver structure for STM32 USART + * + ************************************************************************************/ + +FAR uart_dev_t *stm32l4_serial_get_uart(int uart_num); + /************************************************************************************ * Name: stm32l4_serial_dma_poll *