You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

223 lines
6.7 KiB

diff --git NuttX/nuttx/arch/arm/src/stm32/stm32_serial.c NuttX/nuttx/arch/arm/src/stm32/stm32_serial.c
index a6a2d07..ea8ba61 100644
--- NuttX/nuttx/arch/arm/src/stm32/stm32_serial.c
+++ NuttX/nuttx/arch/arm/src/stm32/stm32_serial.c
@@ -315,6 +315,9 @@ struct up_dev_s
const unsigned int rxdma_channel; /* DMA channel assigned */
#endif
+#if defined(CONFIG_NOIRQARGS)
+ int (*const vector)(int irq, void *context, void *arg); /* Interrupt handler */
+#endif
/* RX DMA state */
#ifdef SERIAL_HAVE_DMA
@@ -371,6 +374,32 @@ static int up_pm_prepare(struct pm_callback_s *cb, int domain,
enum pm_state_e pmstate);
#endif
+#if defined(CONFIG_NOIRQARGS)
+# ifdef CONFIG_STM32_USART1_SERIALDRIVER
+static int up_interrupt_usart1(int irq, void *context, void *arg);
+# endif
+# ifdef CONFIG_STM32_USART2_SERIALDRIVER
+static int up_interrupt_usart2(int irq, void *context, void *arg);
+# endif
+# ifdef CONFIG_STM32_USART3_SERIALDRIVER
+static int up_interrupt_usart3(int irq, void *context, void *arg);
+# endif
+# ifdef CONFIG_STM32_UART4_SERIALDRIVER
+static int up_interrupt_uart4(int irq, void *context, void *arg);
+# endif
+# ifdef CONFIG_STM32_UART5_SERIALDRIVER
+static int up_interrupt_uart5(int irq, void *context, void *arg);
+# endif
+# ifdef CONFIG_STM32_USART6_SERIALDRIVER
+static int up_interrupt_usart6(int irq, void *context, void *arg);
+# endif
+# ifdef CONFIG_STM32_UART7_SERIALDRIVER
+static int up_interrupt_uart7(int irq, void *context, void *arg);
+# endif
+# ifdef CONFIG_STM32_UART8_SERIALDRIVER
+static int up_interrupt_uart8(int irq, void *context, void *arg);
+# endif
+#endif
/****************************************************************************
* Private Data
****************************************************************************/
@@ -536,7 +565,9 @@ static struct up_dev_s g_usart1priv =
.rxdma_channel = DMAMAP_USART1_RX,
.rxfifo = g_usart1rxfifo,
#endif
-
+#if defined(CONFIG_NOIRQARGS)
+ .vector = up_interrupt_usart1,
+#endif
#ifdef CONFIG_USART1_RS485
.rs485_dir_gpio = GPIO_USART1_RS485_DIR,
# if (CONFIG_USART1_RS485_DIR_POLARITY == 0)
@@ -597,6 +628,9 @@ static struct up_dev_s g_usart2priv =
.rxdma_channel = DMAMAP_USART2_RX,
.rxfifo = g_usart2rxfifo,
#endif
+#if defined(CONFIG_NOIRQARGS)
+ .vector = up_interrupt_usart2,
+#endif
#ifdef CONFIG_USART2_RS485
.rs485_dir_gpio = GPIO_USART2_RS485_DIR,
@@ -658,6 +692,9 @@ static struct up_dev_s g_usart3priv =
.rxdma_channel = DMAMAP_USART3_RX,
.rxfifo = g_usart3rxfifo,
#endif
+#if defined(CONFIG_NOIRQARGS)
+ .vector = up_interrupt_usart3,
+#endif
#ifdef CONFIG_USART3_RS485
.rs485_dir_gpio = GPIO_USART3_RS485_DIR,
@@ -723,6 +760,9 @@ static struct up_dev_s g_uart4priv =
.rxdma_channel = DMAMAP_UART4_RX,
.rxfifo = g_uart4rxfifo,
#endif
+#if defined(CONFIG_NOIRQARGS)
+ .vector = up_interrupt_uart4,
+#endif
#ifdef CONFIG_UART4_RS485
.rs485_dir_gpio = GPIO_UART4_RS485_DIR,
@@ -788,6 +828,9 @@ static struct up_dev_s g_uart5priv =
.rxdma_channel = DMAMAP_UART5_RX,
.rxfifo = g_uart5rxfifo,
#endif
+#if defined(CONFIG_NOIRQARGS)
+ .vector = up_interrupt_uart5,
+#endif
#ifdef CONFIG_UART5_RS485
.rs485_dir_gpio = GPIO_UART5_RS485_DIR,
@@ -849,6 +892,9 @@ static struct up_dev_s g_usart6priv =
.rxdma_channel = DMAMAP_USART6_RX,
.rxfifo = g_usart6rxfifo,
#endif
+#if defined(CONFIG_NOIRQARGS)
+ .vector = up_interrupt_uart6,
+#endif
#ifdef CONFIG_USART6_RS485
.rs485_dir_gpio = GPIO_USART6_RS485_DIR,
@@ -910,6 +956,9 @@ static struct up_dev_s g_uart7priv =
.rxdma_channel = DMAMAP_UART7_RX,
.rxfifo = g_uart7rxfifo,
#endif
+#if defined(CONFIG_NOIRQARGS)
+ .vector = up_interrupt_uart7,
+#endif
#ifdef CONFIG_UART7_RS485
.rs485_dir_gpio = GPIO_UART7_RS485_DIR,
@@ -971,6 +1020,9 @@ static struct up_dev_s g_uart8priv =
.rxdma_channel = DMAMAP_UART8_RX,
.rxfifo = g_uart8rxfifo,
#endif
+#if defined(CONFIG_NOIRQARGS)
+ .vector = up_interrupt_uart8,
+#endif
#ifdef CONFIG_UART8_RS485
.rs485_dir_gpio = GPIO_UART8_RS485_DIR,
@@ -1709,7 +1761,11 @@ static int up_attach(struct uart_dev_s *dev)
/* Attach and enable the IRQ */
+#if defined(CONFIG_NOIRQARGS)
+ ret = irq_attach(priv->irq, priv->vector, NULL);
+#else
ret = irq_attach(priv->irq, up_interrupt, priv);
+#endif
if (ret == OK)
{
/* Enable the interrupt (RX and TX interrupts are still disabled
@@ -1740,7 +1796,7 @@ static void up_detach(struct uart_dev_s *dev)
}
/****************************************************************************
- * Name: up_interrupt
+ * Name: up_interrupt_common
*
* Description:
* This is the USART interrupt handler. It will be invoked when an
@@ -2480,6 +2536,72 @@ static bool up_txready(struct uart_dev_s *dev)
return ((up_serialin(priv, STM32_USART_SR_OFFSET) & USART_SR_TXE) != 0);
}
+#if defined(CONFIG_NOIRQARGS)
+/****************************************************************************
+ * Name: up_interrupt_u[s]art[n]
+ *
+ * Description:
+ * Interrupt handlers for U[S]ART[n] where n=1,..,6.
+ *
+ ****************************************************************************/
+
+# ifdef CONFIG_STM32_USART1_SERIALDRIVER
+static int up_interrupt_usart1(int irq, void *context, void *arg)
+{
+ return up_interrupt(irq, context, &g_usart1priv);
+}
+# endif
+
+# ifdef CONFIG_STM32_USART2_SERIALDRIVER
+static int up_interrupt_usart2(int irq, void *context, void *arg)
+{
+ return up_interrupt(irq, context, &g_usart2priv);
+}
+# endif
+
+# ifdef CONFIG_STM32_USART3_SERIALDRIVER
+static int up_interrupt_usart3(int irq, void *context, void *arg)
+{
+ return up_interrupt(irq, context, &g_usart3priv);
+}
+# endif
+
+# ifdef CONFIG_STM32_UART4_SERIALDRIVER
+static int up_interrupt_uart4(int irq, void *context, void *arg)
+{
+ return up_interrupt(irq, context, &g_uart4priv);
+}
+# endif
+
+# ifdef CONFIG_STM32_UART5_SERIALDRIVER
+static int up_interrupt_uart5(int irq, void *context, void *arg)
+{
+ return up_interrupt(irq, context, &g_uart5priv);
+}
+# endif
+
+# ifdef CONFIG_STM32_USART6_SERIALDRIVER
+static int up_interrupt_usart6(int irq, void *context, void *arg)
+{
+ return up_interrupt(irq, context, &g_usart6priv);
+}
+# endif
+
+# ifdef CONFIG_STM32_UART7_SERIALDRIVER
+static int up_interrupt_uart7(int irq, void *context, void *arg)
+{
+ return up_interrupt(irq, context, &g_uart7priv);
+}
+# endif
+
+# ifdef CONFIG_STM32_UART8_SERIALDRIVER
+static int up_interrupt_uart8(int irq, void *context, void *arg)
+{
+ return up_interrupt(irq, context, &g_uart8priv);
+}
+# endif
+#endif
+
/****************************************************************************
* Name: up_dma_rxcallback
*