support uart3 and uart4 on xidatong-arm32 board

This commit is contained in:
Liu_Weichao 2022-09-01 09:23:49 +08:00
parent 5de4b9eec0
commit e4f2c3e5aa
3 changed files with 161 additions and 0 deletions

View File

@ -1095,6 +1095,37 @@ void BOARD_InitUartPins(void)
0x10B0u); 0x10B0u);
#endif #endif
#ifdef BSP_USING_LPUART3
IOMUXC_SetPinMux(
IOMUXC_GPIO_AD_B1_06_LPUART3_TX,
0U);
IOMUXC_SetPinMux(
IOMUXC_GPIO_AD_B1_07_LPUART3_RX,
0U);
IOMUXC_SetPinConfig(
IOMUXC_GPIO_AD_B1_06_LPUART3_TX,
0x10B0u);
IOMUXC_SetPinConfig(
IOMUXC_GPIO_AD_B1_07_LPUART3_RX,
0x10B0u);
#endif
#ifdef BSP_USING_LPUART4
IOMUXC_SetPinMux(
IOMUXC_GPIO_SD_B1_00_LPUART4_TX,
0U);
IOMUXC_SetPinMux(
IOMUXC_GPIO_SD_B1_01_LPUART4_RX,
0U);
IOMUXC_SetPinConfig(
IOMUXC_GPIO_SD_B1_00_LPUART4_TX,
0x10B0u);
IOMUXC_SetPinConfig(
IOMUXC_GPIO_SD_B1_01_LPUART4_RX,
0x10B0u);
#endif
#ifdef BSP_USING_LPUART8 #ifdef BSP_USING_LPUART8
IOMUXC_SetPinMux( IOMUXC_SetPinMux(
IOMUXC_GPIO_AD_B1_10_LPUART8_TX, IOMUXC_GPIO_AD_B1_10_LPUART8_TX,

View File

@ -28,6 +28,36 @@ config BSP_USING_LPUART2
default "uart2_dev2" default "uart2_dev2"
endif endif
config BSP_USING_LPUART3
bool "Enable LPUART3"
default y
if BSP_USING_LPUART3
config SERIAL_BUS_NAME_3
string "serial bus 3 name"
default "uart3"
config SERIAL_DRV_NAME_3
string "serial bus 3 driver name"
default "uart3_drv"
config SERIAL_3_DEVICE_NAME_0
string "serial bus 3 device name"
default "uart3_dev3"
endif
config BSP_USING_LPUART4
bool "Enable LPUART4"
default n
if BSP_USING_LPUART4
config SERIAL_BUS_NAME_4
string "serial bus 4 name"
default "uart4"
config SERIAL_DRV_NAME_4
string "serial bus 4 driver name"
default "uart4_drv"
config SERIAL_4_DEVICE_NAME_0
string "serial bus 4 device name"
default "uart4_dev4"
endif
config BSP_USING_LPUART8 config BSP_USING_LPUART8
bool "Enable LPUART8" bool "Enable LPUART8"
default n default n

View File

@ -66,6 +66,40 @@ void LPUART2_IRQHandler(int irqn, void *arg)
DECLARE_HW_IRQ(UART2_IRQn, LPUART2_IRQHandler, NONE); DECLARE_HW_IRQ(UART2_IRQn, LPUART2_IRQHandler, NONE);
#endif #endif
#ifdef BSP_USING_LPUART3
struct SerialBus serial_bus_3;
struct SerialDriver serial_driver_3;
struct SerialHardwareDevice serial_device_3;
void LPUART3_IRQHandler(int irqn, void* arg)
{
DisableIRQ(LPUART3_IRQn);
UartIsr(&serial_bus_3, &serial_driver_3, &serial_device_3);
EnableIRQ(LPUART3_IRQn);
}
DECLARE_HW_IRQ(LPUART3_IRQn, LPUART3_IRQHandler, NONE);
#endif
#ifdef BSP_USING_LPUART4
struct SerialBus serial_bus_4;
struct SerialDriver serial_driver_4;
struct SerialHardwareDevice serial_device_4;
void LPUART4_IRQHandler(int irqn, void* arg)
{
DisableIRQ(LPUART4_IRQn);
UartIsr(&serial_bus_4, &serial_driver_4, &serial_device_4);
EnableIRQ(LPUART4_IRQn);
}
DECLARE_HW_IRQ(LPUART4_IRQn, LPUART4_IRQHandler, NONE);
#endif
#ifdef BSP_USING_LPUART8 #ifdef BSP_USING_LPUART8
struct SerialBus serial_bus_8; struct SerialBus serial_bus_8;
struct SerialDriver serial_driver_8; struct SerialDriver serial_driver_8;
@ -443,6 +477,72 @@ int Imxrt1052HwUartInit(void)
} }
#endif #endif
#ifdef BSP_USING_LPUART3
static struct SerialCfgParam serial_cfg_3;
memset(&serial_cfg_3, 0, sizeof(struct SerialCfgParam));
static struct SerialDevParam serial_dev_param_3;
memset(&serial_dev_param_3, 0, sizeof(struct SerialDevParam));
serial_driver_3.drv_done = &drv_done;
serial_driver_3.configure = &SerialDrvConfigure;
serial_device_3.hwdev_done = &hwdev_done;
serial_cfg_3.data_cfg = data_cfg_init;
serial_cfg_3.hw_cfg.private_data = (void*)LPUART3;
serial_cfg_3.hw_cfg.serial_irq_interrupt = LPUART3_IRQn;
serial_driver_3.private_data = (void*)&serial_cfg_3;
serial_dev_param_3.serial_work_mode = SIGN_OPER_INT_RX;
serial_device_3.haldev.private_data = (void*)&serial_dev_param_3;
ret = BoardSerialBusInit(&serial_bus_3, &serial_driver_3, SERIAL_BUS_NAME_3, SERIAL_DRV_NAME_3);
if (EOK != ret) {
KPrintf("Imxrt1052HwUartInit uart error ret %u\n", ret);
return ERROR;
}
ret = BoardSerialDevBend(&serial_device_3, (void*)&serial_cfg_3, SERIAL_BUS_NAME_3, SERIAL_3_DEVICE_NAME_0);
if (EOK != ret) {
KPrintf("Imxrt1052HwUartInit uart error ret %u\n", ret);
return ERROR;
}
#endif
#ifdef BSP_USING_LPUART4
static struct SerialCfgParam serial_cfg_4;
memset(&serial_cfg_4, 0, sizeof(struct SerialCfgParam));
static struct SerialDevParam serial_dev_param_4;
memset(&serial_dev_param_4, 0, sizeof(struct SerialDevParam));
serial_driver_4.drv_done = &drv_done;
serial_driver_4.configure = &SerialDrvConfigure;
serial_device_4.hwdev_done = &hwdev_done;
serial_cfg_4.data_cfg = data_cfg_init;
serial_cfg_4.hw_cfg.private_data = (void*)LPUART4;
serial_cfg_4.hw_cfg.serial_irq_interrupt = LPUART4_IRQn;
serial_driver_4.private_data = (void*)&serial_cfg_4;
serial_dev_param_4.serial_work_mode = SIGN_OPER_INT_RX;
serial_device_4.haldev.private_data = (void*)&serial_dev_param_4;
ret = BoardSerialBusInit(&serial_bus_4, &serial_driver_4, SERIAL_BUS_NAME_4, SERIAL_DRV_NAME_4);
if (EOK != ret) {
KPrintf("Imxrt1052HwUartInit uart error ret %u\n", ret);
return ERROR;
}
ret = BoardSerialDevBend(&serial_device_4, (void*)&serial_cfg_4, SERIAL_BUS_NAME_4, SERIAL_4_DEVICE_NAME_0);
if (EOK != ret) {
KPrintf("Imxrt1052HwUartInit uart error ret %u\n", ret);
return ERROR;
}
#endif
#ifdef BSP_USING_LPUART8 #ifdef BSP_USING_LPUART8
static struct SerialCfgParam serial_cfg_8; static struct SerialCfgParam serial_cfg_8;
memset(&serial_cfg_8, 0, sizeof(struct SerialCfgParam)); memset(&serial_cfg_8, 0, sizeof(struct SerialCfgParam));