Browse Source

[bsp][nxp][mcxa153] add more UART channels (#9635)

* [bsp][nxp][mcxa153] add more UART channels
下里巴人 7 months ago
parent
commit
be0161ec62

+ 41 - 0
bsp/nxp/mcx/mcxa/Libraries/drivers/drv_uart.c

@@ -6,6 +6,7 @@
  * Change Logs:
  * Date           Author       Notes
  * 2024-02-06     yandld       The first version for MCX
+ * 2024-11-11     hywing       add more UART channels
  */
 #include <rtdevice.h>
 #include "drv_uart.h"
@@ -35,6 +36,22 @@ void LPUART0_IRQHandler(void)
     uart_isr(&serial0);
 }
 #endif
+#if defined(BSP_USING_UART1)
+struct rt_serial_device serial1;
+
+void LPUART1_IRQHandler(void)
+{
+    uart_isr(&serial1);
+}
+#endif
+#if defined(BSP_USING_UART2)
+struct rt_serial_device serial2;
+
+void LPUART2_IRQHandler(void)
+{
+    uart_isr(&serial2);
+}
+#endif
 
 static const struct mcx_uart uarts[] =
 {
@@ -50,6 +67,30 @@ static const struct mcx_uart uarts[] =
         "uart0",
     },
 #endif
+#ifdef BSP_USING_UART1
+    {
+        &serial1,
+        LPUART1,
+        LPUART1_IRQn,
+        kCLOCK_Fro12M,
+        kFRO12M_to_LPUART1,
+        kCLOCK_GateLPUART1,
+        kCLOCK_DivLPUART1,
+        "uart1",
+    },
+#endif
+#ifdef BSP_USING_UART2
+    {
+        &serial2,
+        LPUART2,
+        LPUART2_IRQn,
+        kCLOCK_Fro12M,
+        kFRO12M_to_LPUART2,
+        kCLOCK_GateLPUART2,
+        kCLOCK_DivLPUART2,
+        "uart2",
+    },
+#endif
 };
 
 static rt_err_t mcx_configure(struct rt_serial_device *serial, struct serial_configure *cfg)

+ 7 - 1
bsp/nxp/mcx/mcxa/frdm-mcxa153/board/Kconfig

@@ -27,8 +27,14 @@ menu "On-chip Peripheral Drivers"
 
             if BSP_USING_UART
                 config BSP_USING_UART0
-                    bool "Enable LPUART as UART"
+                    bool "Enable LPUART as UART0"
                     default y
+                config BSP_USING_UART1
+                    bool "Enable LPUART as UART1"
+                    default n
+                config BSP_USING_UART2
+                    bool "Enable LPUART as UART2"
+                    default n
             endif
 
     menuconfig BSP_USING_I2C

+ 103 - 0
bsp/nxp/mcx/mcxa/frdm-mcxa153/board/MCUX_Config/board/pin_mux.c

@@ -117,6 +117,109 @@ void BOARD_InitPins(void)
     /* PORT0_3 (pin 52) is configured as LPUART0_TXD */
     PORT_SetPinConfig(PORT0, 3U, &port0_3_pin52_config);
 
+#ifdef BSP_USING_UART1
+    const port_pin_config_t port1_8_pin2_config = {/* Internal pull-up resistor is enabled */
+                                                    kPORT_PullUp,
+                                                    /* Low internal pull resistor value is selected. */
+                                                    kPORT_LowPullResistor,
+                                                    /* Fast slew rate is configured */
+                                                    kPORT_FastSlewRate,
+                                                    /* Passive input filter is disabled */
+                                                    kPORT_PassiveFilterDisable,
+                                                    /* Open drain output is disabled */
+                                                    kPORT_OpenDrainDisable,
+                                                    /* Low drive strength is configured */
+                                                    kPORT_LowDriveStrength,
+                                                    /* Normal drive strength is configured */
+                                                    kPORT_NormalDriveStrength,
+                                                    /* Pin is configured as LPUART1_RXD */
+                                                    kPORT_MuxAlt2,
+                                                    /* Digital input enabled */
+                                                    kPORT_InputBufferEnable,
+                                                    /* Digital input is not inverted */
+                                                    kPORT_InputNormal,
+                                                    /* Pin Control Register fields [15:0] are not locked */
+                                                    kPORT_UnlockRegister};
+    /* PORT1_8 (pin 2) is configured as LPUART1_RXD */
+    PORT_SetPinConfig(PORT1, 8U, &port1_8_pin2_config);
+
+    const port_pin_config_t port1_9_pin3_config = {/* Internal pull-up resistor is enabled */
+                                                    kPORT_PullUp,
+                                                    /* Low internal pull resistor value is selected. */
+                                                    kPORT_LowPullResistor,
+                                                    /* Fast slew rate is configured */
+                                                    kPORT_FastSlewRate,
+                                                    /* Passive input filter is disabled */
+                                                    kPORT_PassiveFilterDisable,
+                                                    /* Open drain output is disabled */
+                                                    kPORT_OpenDrainDisable,
+                                                    /* Low drive strength is configured */
+                                                    kPORT_LowDriveStrength,
+                                                    /* Normal drive strength is configured */
+                                                    kPORT_NormalDriveStrength,
+                                                    /* Pin is configured as LPUART1_TXD */
+                                                    kPORT_MuxAlt2,
+                                                    /* Digital input enabled */
+                                                    kPORT_InputBufferEnable,
+                                                    /* Digital input is not inverted */
+                                                    kPORT_InputNormal,
+                                                    /* Pin Control Register fields [15:0] are not locked */
+                                                    kPORT_UnlockRegister};
+    /* PORT1_9 (pin 3) is configured as LPUART1_TXD */
+    PORT_SetPinConfig(PORT1, 9U, &port1_9_pin3_config);
+#endif
+#ifdef BSP_USING_UART2
+    const port_pin_config_t port3_14_pin36_config = {/* Internal pull-up resistor is enabled */
+                                                     kPORT_PullUp,
+                                                     /* Low internal pull resistor value is selected. */
+                                                     kPORT_LowPullResistor,
+                                                     /* Fast slew rate is configured */
+                                                     kPORT_FastSlewRate,
+                                                     /* Passive input filter is disabled */
+                                                     kPORT_PassiveFilterDisable,
+                                                     /* Open drain output is disabled */
+                                                     kPORT_OpenDrainDisable,
+                                                     /* Low drive strength is configured */
+                                                     kPORT_LowDriveStrength,
+                                                     /* Normal drive strength is configured */
+                                                     kPORT_NormalDriveStrength,
+                                                     /* Pin is configured as LPUART2_RXD */
+                                                     kPORT_MuxAlt2,
+                                                     /* Digital input enabled */
+                                                     kPORT_InputBufferEnable,
+                                                     /* Digital input is not inverted */
+                                                     kPORT_InputNormal,
+                                                     /* Pin Control Register fields [15:0] are not locked */
+                                                     kPORT_UnlockRegister};
+    /* PORT3_14 (pin 36) is configured as LPUART2_RXD */
+    PORT_SetPinConfig(PORT3, 14U, &port3_14_pin36_config);
+
+    const port_pin_config_t port3_15_pin35_config = {/* Internal pull-up resistor is enabled */
+                                                     kPORT_PullUp,
+                                                     /* Low internal pull resistor value is selected. */
+                                                     kPORT_LowPullResistor,
+                                                     /* Fast slew rate is configured */
+                                                     kPORT_FastSlewRate,
+                                                     /* Passive input filter is disabled */
+                                                     kPORT_PassiveFilterDisable,
+                                                     /* Open drain output is disabled */
+                                                     kPORT_OpenDrainDisable,
+                                                     /* Low drive strength is configured */
+                                                     kPORT_LowDriveStrength,
+                                                     /* Normal drive strength is configured */
+                                                     kPORT_NormalDriveStrength,
+                                                     /* Pin is configured as LPUART2_TXD */
+                                                     kPORT_MuxAlt2,
+                                                     /* Digital input enabled */
+                                                     kPORT_InputBufferEnable,
+                                                     /* Digital input is not inverted */
+                                                     kPORT_InputNormal,
+                                                     /* Pin Control Register fields [15:0] are not locked */
+                                                     kPORT_UnlockRegister};
+    /* PORT3_15 (pin 35) is configured as LPUART2_TXD */
+    PORT_SetPinConfig(PORT3, 15U, &port3_15_pin35_config);
+#endif
+
 #ifdef BSP_USING_PWM0
     ctimer_config_t config;
     CTIMER_Init(CTIMER1, &config);