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
223 lines
6.7 KiB
8 years ago
|
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
|
||
|
*
|