diff --git a/APP_Framework/Framework/transform_layer/xizi/user_api/include/dev_serial.h b/APP_Framework/Framework/transform_layer/xizi/user_api/include/dev_serial.h index 8fbd3417d..a82f6fa7a 100644 --- a/APP_Framework/Framework/transform_layer/xizi/user_api/include/dev_serial.h +++ b/APP_Framework/Framework/transform_layer/xizi/user_api/include/dev_serial.h @@ -50,8 +50,8 @@ extern "C" { #define STOP_BITS_4 4 #define PARITY_NONE 1 -#define PARITY_ODD 2 -#define PARITY_EVEN 3 +#define PARITY_ODD 2 +#define PARITY_EVEN 3 #define BIT_ORDER_LSB 1 #define BIT_ORDER_MSB 2 diff --git a/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/Kconfig b/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/Kconfig index f1a423e7a..28aba04f5 100644 --- a/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/Kconfig +++ b/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/Kconfig @@ -35,6 +35,75 @@ menu "ru-d01-m200 feature" endmenu + menu "config console output device" + depends on KERNEL_CONSOLE + choice + prompt "Select Console Interface" + default BSP_CONSOLE_UART + help + Select the interface to use as the console. Ensure that the corresponding device is enabled. + + config BSP_CONSOLE_UART + bool "Use UART as Console" + depends on BSP_USING_UART + endchoice + + if BSP_CONSOLE_UART + choice + prompt "Select UART Device" + default BSP_CONSOLE_UART1 + help + Select the UART device to use as the console output. The corresponding UART device will be automatically enabled. + + config BSP_CONSOLE_UART1 + bool "UART1" + select BSP_USING_USART1 + + config BSP_CONSOLE_UART2 + bool "UART2" + select BSP_USING_USART2 + + config BSP_CONSOLE_UART3 + bool "UART3" + select BSP_USING_USART3 + + config BSP_CONSOLE_UART4 + bool "UART4" + select BSP_USING_UART4 + + config BSP_CONSOLE_UART5 + bool "UART5" + select BSP_USING_UART5 + endchoice + endif + + # Define KERNEL_CONSOLE_* based on selected device + + config KERNEL_CONSOLE_BUS_NAME + string "Console bus name" + default SERIAL_BUS_NAME_1 if BSP_CONSOLE_UART1 + default SERIAL_BUS_NAME_2 if BSP_CONSOLE_UART2 + default SERIAL_BUS_NAME_3 if BSP_CONSOLE_UART3 + default SERIAL_BUS_NAME_4 if BSP_CONSOLE_UART4 + default SERIAL_BUS_NAME_5 if BSP_CONSOLE_UART5 + + config KERNEL_CONSOLE_DRV_NAME + string "Console driver name" + default SERIAL_DRV_NAME_1 if BSP_CONSOLE_UART1 + default SERIAL_DRV_NAME_2 if BSP_CONSOLE_UART2 + default SERIAL_DRV_NAME_3 if BSP_CONSOLE_UART3 + default SERIAL_DRV_NAME_4 if BSP_CONSOLE_UART4 + default SERIAL_DRV_NAME_5 if BSP_CONSOLE_UART5 + + config KERNEL_CONSOLE_DEVICE_NAME + string "Console device name" + default SERIAL_1_DEVICE_NAME_0 if BSP_CONSOLE_UART1 + default SERIAL_2_DEVICE_NAME_0 if BSP_CONSOLE_UART2 + default SERIAL_3_DEVICE_NAME_0 if BSP_CONSOLE_UART3 + default SERIAL_4_DEVICE_NAME_0 if BSP_CONSOLE_UART4 + default SERIAL_5_DEVICE_NAME_0 if BSP_CONSOLE_UART5 + endmenu + endmenu diff --git a/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/include/connect_usart.h b/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/include/connect_usart.h index 217531bdc..647102c29 100644 --- a/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/include/connect_usart.h +++ b/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/include/connect_usart.h @@ -29,10 +29,6 @@ extern "C" { #endif -#define KERNEL_CONSOLE_BUS_NAME SERIAL_BUS_NAME_1 -#define KERNEL_CONSOLE_DRV_NAME SERIAL_DRV_NAME_1 -#define KERNEL_CONSOLE_DEVICE_NAME SERIAL_1_DEVICE_NAME_0 - #define USART1_PREEMPT_PRIORITY 3 #define USART1_SUB_PRIORITY 0 @@ -42,10 +38,6 @@ struct UsartHwCfg IRQn_Type irq; }; -#define KERNEL_CONSOLE_BUS_NAME SERIAL_BUS_NAME_1 -#define KERNEL_CONSOLE_DRV_NAME SERIAL_DRV_NAME_1 -#define KERNEL_CONSOLE_DEVICE_NAME SERIAL_1_DEVICE_NAME_0 - int HwUsartInit(void); diff --git a/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/uart/Kconfig b/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/uart/Kconfig index fc8164f89..aa6920f50 100644 --- a/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/uart/Kconfig +++ b/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/uart/Kconfig @@ -9,8 +9,70 @@ menuconfig BSP_USING_USART1 string "serial bus 1 driver name" default "usart1_drv" config SERIAL_1_DEVICE_NAME_0 - string "serial bus 1 device 0 name" - default "usart1_dev1" + string "serial bus 1 device 0 name" + default "usart1_dev1" + + menuconfig USART1_ENABLE_DETAILED_CONFIG + bool "Enable detailed configuration for USART1" + default n + help + Enable this option if you want to configure USART1 parameters like BaudRate, Parity, DataWidth, and StopBits. + if USART1_ENABLE_DETAILED_CONFIG + config USART1_BAUDRATE + int "USART1 BaudRate" + default 115200 + help + Configure the baud rate for USART1. Options: + - 2400 + - 4800 + - 9600 + - 19200 + - 38400 + - 57600 + - 115200 + - 230400 + - 460800 + - 921600 + - 2000000 + - 3000000 + + choice + prompt "USART1 Parity Mode" + default USART1_PARITY_NONE + help + Select the parity mode for USART1. + config USART1_PARITY_NONE + bool "None" + config USART1_PARITY_ODD + bool "Odd" + config USART1_PARITY_EVEN + bool "Even" + endchoice + + choice + prompt "USART1 Data Width" + default USART1_DATA_BITS_8 + help + Select the data width for USART1. + config USART1_DATA_BITS_7 + bool "7 bits" + config USART1_DATA_BITS_8 + bool "8 bits" + config USART1_DATA_BITS_9 + bool "9 bits" + endchoice + + choice + prompt "USART1 Stop Bits" + default USART1_STOP_BITS_1 + help + Select the stop bits for USART1. + config USART1_STOP_BITS_1 + bool "1 stop bit" + config USART1_STOP_BITS_2 + bool "2 stop bits" + endchoice + endif endif menuconfig BSP_USING_USART2 @@ -24,8 +86,8 @@ menuconfig BSP_USING_USART2 string "serial bus 2 driver name" default "usart2_drv" config SERIAL_2_DEVICE_NAME_0 - string "serial bus 2 device 0 name" - default "usart2_dev2" + string "serial bus 2 device 0 name" + default "usart2_dev2" endif menuconfig BSP_USING_USART3 @@ -39,8 +101,8 @@ menuconfig BSP_USING_USART3 string "serial bus 3 driver name" default "usart3_drv" config SERIAL_3_DEVICE_NAME_0 - string "serial bus 3 device 0 name" - default "usart3_dev3" + string "serial bus 3 device 0 name" + default "usart3_dev3" endif menuconfig BSP_USING_UART4 @@ -54,8 +116,8 @@ menuconfig BSP_USING_UART4 string "serial bus 4 driver name" default "uart4drv" config SERIAL_4_DEVICE_NAME_0 - string "serial bus 4 device 0 name" - default "uart4_dev4" + string "serial bus 4 device 0 name" + default "uart4_dev4" endif menuconfig BSP_USING_UART5 @@ -69,6 +131,6 @@ menuconfig BSP_USING_UART5 string "serial bus 5 driver name" default "uart5_drv" config SERIAL_5_DEVICE_NAME_0 - string "serial bus 5 device 0 name" - default "uart5_dev5" + string "serial bus 5 device 0 name" + default "uart5_dev5" endif diff --git a/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/uart/connect_usart.c b/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/uart/connect_usart.c index bcb40531f..383246a72 100644 --- a/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/uart/connect_usart.c +++ b/Ubiquitous/XiZi_IIoT/board/ru-d01-m200/third_party_driver/uart/connect_usart.c @@ -46,14 +46,130 @@ Modification: #include "stm32l4xx_ll_gpio.h" #include "stm32l4xx_ll_bus.h" -#if defined(BSP_USING_UART1) -#define USART1_RX_PORT (GPIO_PORT_B) -#define USART1_RX_PIN (GPIO_PIN_11) - -#define USART1_TX_PORT (GPIO_PORT_B) -#define USART1_TX_PIN (GPIO_PIN_10) +#if defined(BSP_USING_USART1) +#define UART1_GPIO_PORT (GPIOA) +#define UART1_GPIO_RX_PIN (LL_GPIO_PIN_10) +#define UART1_GPIO_TX_PIN (LL_GPIO_PIN_9) +#define UART1_GPIO_ALTERNATE (LL_GPIO_AF_7) #endif +#if defined(BSP_USING_USART2) +#define UART2_GPIO_PORT (GPIOA) +#define UART2_GPIO_RX_PIN (LL_GPIO_PIN_3) +#define UART2_GPIO_TX_PIN (LL_GPIO_PIN_2) +#define UART2_GPIO_ALTERNATE (LL_GPIO_AF_7) +#endif + +#if defined(BSP_USING_USART3) +#define UART3_GPIO_PORT (GPIOC) +#define UART3_GPIO_RX_PIN (LL_GPIO_PIN_5) +#define UART3_GPIO_TX_PIN (LL_GPIO_PIN_4) +#define UART3_GPIO_ALTERNATE (LL_GPIO_AF_7) +#endif + +#if defined(BSP_USING_UART4) +#define UART4_GPIO_PORT (GPIOA) +#define UART4_GPIO_RX_PIN (LL_GPIO_PIN_1) +#define UART4_GPIO_TX_PIN (LL_GPIO_PIN_0) +#define UART4_GPIO_ALTERNATE (LL_GPIO_AF_8) +#endif + +#if defined(BSP_USING_UART5) +#define UART5_GPIO_RX_PORT (GPIOD) +#define UART5_GPIO_RX_PIN (LL_GPIO_PIN_2) +#define UART5_GPIO_TX_PORT (GPIOC) +#define UART5_GPIO_TX_PIN (LL_GPIO_PIN_12) +#define UART5_GPIO_ALTERNATE (LL_GPIO_AF_8) +#endif + +static void RCC_Configuration(void) +{ +#ifdef BSP_USING_USART1 + LL_RCC_SetUSARTClockSource(LL_RCC_USART1_CLKSOURCE_PCLK2); + LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1); + LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); +#endif + +#ifdef BSP_USING_USART2 + LL_RCC_SetUSARTClockSource(LL_RCC_USART2_CLKSOURCE_PCLK1); + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2); + LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); +#endif + +#ifdef BSP_USING_USART3 + LL_RCC_SetUSARTClockSource(LL_RCC_USART3_CLKSOURCE_PCLK1); + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3); + LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC); +#endif + +#ifdef BSP_USING_UART4 + LL_RCC_SetUARTClockSource(LL_RCC_UART4_CLKSOURCE_PCLK1); + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_UART4); + LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); +#endif + +#ifdef BSP_USING_UART5 + LL_RCC_SetUARTClockSource(LL_RCC_UART5_CLKSOURCE_PCLK1); + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_UART5); + LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC); + LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOD); +#endif +} + +static void GPIO_Configuration(void) +{ + LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; + + GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; + +#ifdef BSP_USING_USART1 + GPIO_InitStruct.Pin = UART1_GPIO_RX_PIN | UART1_GPIO_TX_PIN; + GPIO_InitStruct.Alternate = UART1_GPIO_ALTERNATE; + + LL_GPIO_Init(UART1_GPIO_PORT, &GPIO_InitStruct); +#endif + +#ifdef BSP_USING_USART2 + GPIO_InitStruct.Pin = UART2_GPIO_RX_PIN | UART2_GPIO_TX_PIN; + GPIO_InitStruct.Alternate = UART2_GPIO_ALTERNATE; + + LL_GPIO_Init(UART2_GPIO_PORT, &GPIO_InitStruct); +#endif + +#ifdef BSP_USING_USART3 + GPIO_InitStruct.Pin = UART3_GPIO_RX_PIN | UART3_GPIO_TX_PIN; + GPIO_InitStruct.Alternate = UART3_GPIO_ALTERNATE; + + LL_GPIO_Init(UART3_GPIO_PORT, &GPIO_InitStruct); +#endif + +#ifdef BSP_USING_UART4 + GPIO_InitStruct.Pin = UART4_GPIO_RX_PIN | UART4_GPIO_TX_PIN; + GPIO_InitStruct.Alternate = UART4_GPIO_ALTERNATE; + + LL_GPIO_Init(UART4_GPIO_PORT, &GPIO_InitStruct); +#endif + +#ifdef BSP_USING_UART5 + GPIO_InitStruct.Alternate = UART5_GPIO_ALTERNATE; + + GPIO_InitStruct.Pin = UART5_GPIO_RX_PIN; + LL_GPIO_Init(UART5_GPIO_RX_PORT, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = UART5_GPIO_TX_PIN; + LL_GPIO_Init(UART5_GPIO_TX_PORT, &GPIO_InitStruct); +#endif +} + +static void NVIC_Configuration(IRQn_Type irq) +{ + NVIC_SetPriority(irq, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); + NVIC_EnableIRQ(irq); +} + static void UartIsr(struct SerialBus *serial, struct SerialDriver *serial_drv, struct SerialHardwareDevice *serial_dev); @@ -102,6 +218,9 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf struct SerialCfgParam *serial_cfg = (struct SerialCfgParam *)serial_drv->private_data; struct UsartHwCfg *serial_hw_cfg = (struct UsartHwCfg *)serial_cfg->hw_cfg.private_data; + /* Interrupt Init */ + NVIC_Configuration(serial_hw_cfg->irq); + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; @@ -119,35 +238,69 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf LL_USART_InitTypeDef USART_InitStruct = {0}; - LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; + USART_InitStruct.BaudRate = serial_cfg->data_cfg.serial_baud_rate; + USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; + USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE; + USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16; - LL_RCC_SetUSARTClockSource(LL_RCC_USART1_CLKSOURCE_PCLK2); + switch (serial_cfg->data_cfg.serial_parity_mode) + { + case PARITY_NONE: + USART_InitStruct.Parity = LL_USART_PARITY_NONE; + break; + case PARITY_ODD: + USART_InitStruct.Parity = LL_USART_PARITY_ODD; + break; + case PARITY_EVEN: + USART_InitStruct.Parity = LL_USART_PARITY_EVEN; + break; + default: + USART_InitStruct.Parity = LL_USART_PARITY_NONE; + break; + } - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1); + switch (serial_cfg->data_cfg.serial_data_bits) + { + case DATA_BITS_7: + if (serial_cfg->data_cfg.serial_parity_mode != PARITY_NONE) + USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; + else + USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_7B; + break; + case DATA_BITS_8: + if (serial_cfg->data_cfg.serial_parity_mode != PARITY_NONE) + USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_9B; + else + USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; + break; + case DATA_BITS_9: + USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_9B; + break; + default: + USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; + break; + } - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); - GPIO_InitStruct.Pin = LL_GPIO_PIN_9|LL_GPIO_PIN_10; - GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; - GPIO_InitStruct.Alternate = LL_GPIO_AF_7; - LL_GPIO_Init(GPIOA, &GPIO_InitStruct); + switch (serial_cfg->data_cfg.serial_stop_bits) + { + case STOP_BITS_1: + USART_InitStruct.StopBits = LL_USART_STOPBITS_1; + break; + case STOP_BITS_2: + USART_InitStruct.StopBits = LL_USART_STOPBITS_2; + break; + default: + USART_InitStruct.StopBits = LL_USART_STOPBITS_1; + break; + } + + LL_USART_EnableIT_RXNE(serial_hw_cfg->uart_device); - NVIC_SetPriority(USART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); - NVIC_EnableIRQ(USART1_IRQn); - LL_USART_EnableIT_RXNE(USART1); - - USART_InitStruct.BaudRate = 115200; - USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; - USART_InitStruct.StopBits = LL_USART_STOPBITS_1; - USART_InitStruct.Parity = LL_USART_PARITY_NONE; - USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; - USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE; - USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16; - LL_USART_Init(USART1, &USART_InitStruct); - LL_USART_ConfigAsyncMode(USART1); - LL_USART_Enable(USART1); + if (LL_USART_Init(serial_hw_cfg->uart_device, &USART_InitStruct) != LL_SUCCESS) { + return ERROR; + } + LL_USART_ConfigAsyncMode(serial_hw_cfg->uart_device); + LL_USART_Enable(serial_hw_cfg->uart_device); return EOK; } @@ -226,6 +379,54 @@ void USART1_IRQHandler(int irq_num, void *arg) DECLARE_HW_IRQ(USART1_IRQn, USART1_IRQHandler, NONE); #endif +#ifdef BSP_USING_USART2 +struct SerialBus serial_bus_2; +struct SerialDriver serial_driver_2; +struct SerialHardwareDevice serial_device_2; + +void USART2_IRQHandler(int irq_num, void *arg) +{ + UartIsr(&serial_bus_2, &serial_driver_2, &serial_device_2); +} +DECLARE_HW_IRQ(USART2_IRQn, USART2_IRQHandler, NONE); +#endif + +#ifdef BSP_USING_USART3 +struct SerialBus serial_bus_3; +struct SerialDriver serial_driver_3; +struct SerialHardwareDevice serial_device_3; + +void USART3_IRQHandler(int irq_num, void *arg) +{ + UartIsr(&serial_bus_3, &serial_driver_3, &serial_device_3); +} +DECLARE_HW_IRQ(USART3_IRQn, USART3_IRQHandler, NONE); +#endif + +#ifdef BSP_USING_UART4 +struct SerialBus serial_bus_4; +struct SerialDriver serial_driver_4; +struct SerialHardwareDevice serial_device_4; + +void UART4_IRQHandler(int irq_num, void *arg) +{ + UartIsr(&serial_bus_4, &serial_driver_4, &serial_device_4); +} +DECLARE_HW_IRQ(UART4_IRQn, UART4_IRQHandler, NONE); +#endif + +#ifdef BSP_USING_UART5 +struct SerialBus serial_bus_5; +struct SerialDriver serial_driver_5; +struct SerialHardwareDevice serial_device_5; + +void UART5_IRQHandler(int irq_num, void *arg) +{ + UartIsr(&serial_bus_5, &serial_driver_5, &serial_device_5); +} +DECLARE_HW_IRQ(UART5_IRQn, UART5_IRQHandler, NONE); +#endif + static uint32 SerialDrvConfigure(void *drv, struct BusConfigureInfo *configure_info) { NULL_PARAM_CHECK(drv); @@ -329,6 +530,10 @@ int HwUsartInit(void) { x_err_t ret = EOK; + RCC_Configuration(); + + GPIO_Configuration(); + #ifdef BSP_USING_USART1 static struct SerialCfgParam serial_cfg_1; memset(&serial_cfg_1, 0, sizeof(struct SerialCfgParam)); @@ -340,10 +545,35 @@ int HwUsartInit(void) memset(&serial_hw_cfg_1, 0, sizeof(struct UsartHwCfg)); serial_driver_1.drv_done = &drv_done; - serial_driver_1.configure = SerialDrvConfigure; + serial_driver_1.configure = &SerialDrvConfigure; serial_device_1.hwdev_done = &hwdev_done; serial_cfg_1.data_cfg = data_cfg_init; + #ifdef USART1_ENABLE_DETAILED_CONFIG + serial_cfg_1.data_cfg.serial_baud_rate = USART1_BAUDRATE; + + #if defined USART1_PARITY_ODD + serial_cfg_1.data_cfg.serial_parity_mode = PARITY_ODD; + #elif defined USART1_PARITY_EVEN + serial_cfg_1.data_cfg.serial_parity_mode = PARITY_EVEN; + #else + serial_cfg_1.data_cfg.serial_parity_mode = PARITY_NONE; + #endif + + #if defined USART1_DATA_BITS_7 + serial_cfg_1.data_cfg.serial_data_bits = DATA_BITS_7; + #elif defined USART1_DATA_BITS_9 + serial_cfg_1.data_cfg.serial_data_bits = DATA_BITS_9; + #else + serial_cfg_1.data_cfg.serial_data_bits = DATA_BITS_8; + #endif + + #if defined USART1_STOP_BITS_2 + serial_cfg_1.data_cfg.serial_stop_bits = STOP_BITS_2; + #else + serial_cfg_1.data_cfg.serial_stop_bits = STOP_BITS_1; + #endif + #endif //default irq configure serial_hw_cfg_1.uart_device = USART1; @@ -365,7 +595,163 @@ int HwUsartInit(void) if (EOK != ret) { KPrintf("HwUartInit uart1 error ret %u\n", ret); return ERROR; - } + } +#endif + +#ifdef BSP_USING_USART2 + static struct SerialCfgParam serial_cfg_2; + memset(&serial_cfg_2, 0, sizeof(struct SerialCfgParam)); + + static struct SerialDevParam serial_dev_param_2; + memset(&serial_dev_param_2, 0, sizeof(struct SerialDevParam)); + + static struct UsartHwCfg serial_hw_cfg_2; + memset(&serial_hw_cfg_2, 0, sizeof(struct UsartHwCfg)); + + serial_driver_2.drv_done = &drv_done; + serial_driver_2.configure = &SerialDrvConfigure; + serial_device_2.hwdev_done = &hwdev_done; + + serial_cfg_2.data_cfg = data_cfg_init; + + //default irq configure + serial_hw_cfg_2.uart_device = USART2; + serial_hw_cfg_2.irq = USART2_IRQn; + + serial_cfg_2.hw_cfg.private_data = (void *)&serial_hw_cfg_2; + serial_driver_2.private_data = (void *)&serial_cfg_2; + + serial_dev_param_2.serial_work_mode = SIGN_OPER_INT_RX; + serial_device_2.haldev.private_data = (void *)&serial_dev_param_2; + + ret = BoardSerialBusInit(&serial_bus_2, &serial_driver_2, SERIAL_BUS_NAME_2, SERIAL_DRV_NAME_2); + if (EOK != ret) { + KPrintf("HwUartInit uart2 error ret %u\n", ret); + return ERROR; + } + + ret = BoardSerialDevBend(&serial_device_2, (void *)&serial_cfg_2, SERIAL_BUS_NAME_2, SERIAL_2_DEVICE_NAME_0); + if (EOK != ret) { + KPrintf("HwUartInit uart2 error ret %u\n", ret); + return ERROR; + } +#endif + +#ifdef BSP_USING_USART3 + 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)); + + static struct UsartHwCfg serial_hw_cfg_3; + memset(&serial_hw_cfg_3, 0, sizeof(struct UsartHwCfg)); + + 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; + + //default irq configure + serial_hw_cfg_3.uart_device = USART3; + serial_hw_cfg_3.irq = USART3_IRQn; + + serial_cfg_3.hw_cfg.private_data = (void *)&serial_hw_cfg_3; + 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("HwUartInit uart3 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("HwUartInit uart3 error ret %u\n", ret); + return ERROR; + } +#endif + +#ifdef BSP_USING_UART4 + 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)); + + static struct UsartHwCfg serial_hw_cfg_4; + memset(&serial_hw_cfg_4, 0, sizeof(struct UsartHwCfg)); + + 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; + + //default irq configure + serial_hw_cfg_4.uart_device = UART4; + serial_hw_cfg_4.irq = UART4_IRQn; + + serial_cfg_4.hw_cfg.private_data = (void *)&serial_hw_cfg_4; + 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("HwUartInit uart4 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("HwUartInit uart4 error ret %u\n", ret); + return ERROR; + } +#endif + +#ifdef BSP_USING_UART5 + static struct SerialCfgParam serial_cfg_5; + memset(&serial_cfg_5, 0, sizeof(struct SerialCfgParam)); + + static struct SerialDevParam serial_dev_param_5; + memset(&serial_dev_param_5, 0, sizeof(struct SerialDevParam)); + + static struct UsartHwCfg serial_hw_cfg_5; + memset(&serial_hw_cfg_5, 0, sizeof(struct UsartHwCfg)); + + serial_driver_5.drv_done = &drv_done; + serial_driver_5.configure = &SerialDrvConfigure; + serial_device_5.hwdev_done = &hwdev_done; + + serial_cfg_5.data_cfg = data_cfg_init; + + //default irq configure + serial_hw_cfg_5.uart_device = UART5; + serial_hw_cfg_5.irq = UART5_IRQn; + + serial_cfg_5.hw_cfg.private_data = (void *)&serial_hw_cfg_5; + serial_driver_5.private_data = (void *)&serial_cfg_5; + + serial_dev_param_5.serial_work_mode = SIGN_OPER_INT_RX; + serial_device_5.haldev.private_data = (void *)&serial_dev_param_5; + + ret = BoardSerialBusInit(&serial_bus_5, &serial_driver_5, SERIAL_BUS_NAME_5, SERIAL_DRV_NAME_5); + if (EOK != ret) { + KPrintf("HwUartInit uart5 error ret %u\n", ret); + return ERROR; + } + + ret = BoardSerialDevBend(&serial_device_5, (void *)&serial_cfg_5, SERIAL_BUS_NAME_5, SERIAL_5_DEVICE_NAME_0); + if (EOK != ret) { + KPrintf("HwUartInit uart5 error ret %u\n", ret); + return ERROR; + } #endif return ret;