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.
222 lines
6.7 KiB
222 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 |
|
*
|
|
|