support uart for ru-d01-m200
This commit is contained in:
parent
fb4eb87659
commit
ecc68cd331
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue