drivers: serial: uart_gecko: support uart_cfg options
Adde usage of uart_cfg struct and support its options of parity, data bits, and start bits Signed-off-by: Yishai Jaffe <yishai1999@gmail.com>
This commit is contained in:
parent
2363b6b595
commit
1cbd13cd0e
3 changed files with 291 additions and 88 deletions
|
|
@ -135,12 +135,6 @@ struct uart_gecko_config {
|
||||||
const struct silabs_clock_control_cmu_config clock_cfg;
|
const struct silabs_clock_control_cmu_config clock_cfg;
|
||||||
#else
|
#else
|
||||||
CMU_Clock_TypeDef clock;
|
CMU_Clock_TypeDef clock;
|
||||||
#endif
|
|
||||||
uint32_t baud_rate;
|
|
||||||
#ifndef CONFIG_PINCTRL
|
|
||||||
#ifdef UART_GECKO_HW_FLOW_CONTROL
|
|
||||||
bool hw_flowcontrol;
|
|
||||||
#endif /* UART_GECKO_HW_FLOW_CONTROL */
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
|
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
|
||||||
void (*irq_config_func)(const struct device *dev);
|
void (*irq_config_func)(const struct device *dev);
|
||||||
|
|
@ -166,6 +160,7 @@ struct uart_gecko_config {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct uart_gecko_data {
|
struct uart_gecko_data {
|
||||||
|
struct uart_config *uart_cfg;
|
||||||
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
|
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
|
||||||
uart_irq_callback_user_data_t callback;
|
uart_irq_callback_user_data_t callback;
|
||||||
void *cb_data;
|
void *cb_data;
|
||||||
|
|
@ -402,8 +397,10 @@ static void uart_gecko_init_pins(const struct device *dev)
|
||||||
#endif /* CONFIG_SOC_GECKO_HAS_INDIVIDUAL_PIN_LOCATION */
|
#endif /* CONFIG_SOC_GECKO_HAS_INDIVIDUAL_PIN_LOCATION */
|
||||||
|
|
||||||
#ifdef UART_GECKO_HW_FLOW_CONTROL
|
#ifdef UART_GECKO_HW_FLOW_CONTROL
|
||||||
|
const struct uart_gecko_data *data = dev->data;
|
||||||
|
const struct uart_config *uart_cfg = data->uart_cfg;
|
||||||
/* Configure HW flow control (RTS, CTS) */
|
/* Configure HW flow control (RTS, CTS) */
|
||||||
if (config->hw_flowcontrol) {
|
if (uart_cfg->flow_ctrl) {
|
||||||
GPIO_PinModeSet(config->pin_rts.port, config->pin_rts.pin,
|
GPIO_PinModeSet(config->pin_rts.port, config->pin_rts.pin,
|
||||||
config->pin_rts.mode, config->pin_rts.out);
|
config->pin_rts.mode, config->pin_rts.out);
|
||||||
GPIO_PinModeSet(config->pin_cts.port, config->pin_cts.pin,
|
GPIO_PinModeSet(config->pin_cts.port, config->pin_cts.pin,
|
||||||
|
|
@ -438,6 +435,149 @@ static void uart_gecko_init_pins(const struct device *dev)
|
||||||
}
|
}
|
||||||
#endif /* !CONFIG_PINCTRL */
|
#endif /* !CONFIG_PINCTRL */
|
||||||
|
|
||||||
|
static inline USART_Parity_TypeDef uart_gecko_cfg2ll_parity(enum uart_config_parity parity)
|
||||||
|
{
|
||||||
|
switch (parity) {
|
||||||
|
case UART_CFG_PARITY_ODD:
|
||||||
|
return usartOddParity;
|
||||||
|
case UART_CFG_PARITY_EVEN:
|
||||||
|
return usartEvenParity;
|
||||||
|
case UART_CFG_PARITY_NONE:
|
||||||
|
default:
|
||||||
|
return usartNoParity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline enum uart_config_parity uart_gecko_ll2cfg_parity(USART_Parity_TypeDef parity)
|
||||||
|
{
|
||||||
|
switch (parity) {
|
||||||
|
case usartOddParity:
|
||||||
|
return UART_CFG_PARITY_ODD;
|
||||||
|
case usartEvenParity:
|
||||||
|
return UART_CFG_PARITY_EVEN;
|
||||||
|
case usartNoParity:
|
||||||
|
default:
|
||||||
|
return UART_CFG_PARITY_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline USART_Stopbits_TypeDef uart_gecko_cfg2ll_stopbits(enum uart_config_stop_bits sb)
|
||||||
|
{
|
||||||
|
switch (sb) {
|
||||||
|
case UART_CFG_STOP_BITS_0_5:
|
||||||
|
return usartStopbits0p5;
|
||||||
|
case UART_CFG_STOP_BITS_1:
|
||||||
|
return usartStopbits1;
|
||||||
|
case UART_CFG_STOP_BITS_2:
|
||||||
|
return usartStopbits2;
|
||||||
|
case UART_CFG_STOP_BITS_1_5:
|
||||||
|
return usartStopbits1p5;
|
||||||
|
default:
|
||||||
|
return usartStopbits1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline enum uart_config_stop_bits uart_gecko_ll2cfg_stopbits(USART_Stopbits_TypeDef sb)
|
||||||
|
{
|
||||||
|
switch (sb) {
|
||||||
|
case usartStopbits0p5:
|
||||||
|
return UART_CFG_STOP_BITS_0_5;
|
||||||
|
case usartStopbits1:
|
||||||
|
return UART_CFG_STOP_BITS_1;
|
||||||
|
case usartStopbits1p5:
|
||||||
|
return UART_CFG_STOP_BITS_1_5;
|
||||||
|
case usartStopbits2:
|
||||||
|
return UART_CFG_STOP_BITS_2;
|
||||||
|
default:
|
||||||
|
return UART_CFG_STOP_BITS_1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline USART_Databits_TypeDef uart_gecko_cfg2ll_databits(enum uart_config_data_bits db,
|
||||||
|
enum uart_config_parity p)
|
||||||
|
{
|
||||||
|
switch (db) {
|
||||||
|
case UART_CFG_DATA_BITS_7:
|
||||||
|
if (p == UART_CFG_PARITY_NONE) {
|
||||||
|
return usartDatabits7;
|
||||||
|
} else {
|
||||||
|
return usartDatabits8;
|
||||||
|
}
|
||||||
|
case UART_CFG_DATA_BITS_9:
|
||||||
|
return usartDatabits9;
|
||||||
|
case UART_CFG_DATA_BITS_8:
|
||||||
|
default:
|
||||||
|
if (p == UART_CFG_PARITY_NONE) {
|
||||||
|
return usartDatabits8;
|
||||||
|
} else {
|
||||||
|
return usartDatabits9;
|
||||||
|
}
|
||||||
|
return usartDatabits8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline enum uart_config_data_bits uart_gecko_ll2cfg_databits(USART_Databits_TypeDef db,
|
||||||
|
USART_Parity_TypeDef p)
|
||||||
|
{
|
||||||
|
switch (db) {
|
||||||
|
case usartDatabits7:
|
||||||
|
if (p == usartNoParity) {
|
||||||
|
return UART_CFG_DATA_BITS_7;
|
||||||
|
} else {
|
||||||
|
return UART_CFG_DATA_BITS_6;
|
||||||
|
}
|
||||||
|
case usartDatabits9:
|
||||||
|
if (p == usartNoParity) {
|
||||||
|
return UART_CFG_DATA_BITS_9;
|
||||||
|
} else {
|
||||||
|
return UART_CFG_DATA_BITS_8;
|
||||||
|
}
|
||||||
|
case usartDatabits8:
|
||||||
|
default:
|
||||||
|
if (p == usartNoParity) {
|
||||||
|
return UART_CFG_DATA_BITS_8;
|
||||||
|
} else {
|
||||||
|
return UART_CFG_DATA_BITS_7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UART_GECKO_HW_FLOW_CONTROL
|
||||||
|
/**
|
||||||
|
* @brief Get LL hardware flow control define from
|
||||||
|
* Zephyr hardware flow control option.
|
||||||
|
* @note Supports only UART_CFG_FLOW_CTRL_RTS_CTS and UART_CFG_FLOW_CTRL_RS485.
|
||||||
|
* @param fc: Zephyr hardware flow control option.
|
||||||
|
* @retval usartHwFlowControlCtsAndRts, or usartHwFlowControlNone.
|
||||||
|
*/
|
||||||
|
static inline USART_HwFlowControl_TypeDef uart_gecko_cfg2ll_hwctrl(
|
||||||
|
enum uart_config_flow_control fc)
|
||||||
|
{
|
||||||
|
if (fc == UART_CFG_FLOW_CTRL_RTS_CTS) {
|
||||||
|
return usartHwFlowControlCtsAndRts;
|
||||||
|
}
|
||||||
|
|
||||||
|
return usartHwFlowControlNone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get Zephyr hardware flow control option from
|
||||||
|
* LL hardware flow control define.
|
||||||
|
* @note Supports only usartHwFlowControlCtsAndRts.
|
||||||
|
* @param fc: LL hardware flow control definition.
|
||||||
|
* @retval UART_CFG_FLOW_CTRL_RTS_CTS, or UART_CFG_FLOW_CTRL_NONE.
|
||||||
|
*/
|
||||||
|
static inline enum uart_config_flow_control uart_gecko_ll2cfg_hwctrl(
|
||||||
|
USART_HwFlowControl_TypeDef fc)
|
||||||
|
{
|
||||||
|
if (fc == usartHwFlowControlCtsAndRts) {
|
||||||
|
return UART_CFG_FLOW_CTRL_RTS_CTS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return UART_CFG_FLOW_CTRL_NONE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Main initializer for UART
|
* @brief Main initializer for UART
|
||||||
*
|
*
|
||||||
|
|
@ -450,6 +590,8 @@ static int uart_gecko_init(const struct device *dev)
|
||||||
int err;
|
int err;
|
||||||
#endif /* CONFIG_PINCTRL */
|
#endif /* CONFIG_PINCTRL */
|
||||||
const struct uart_gecko_config *config = dev->config;
|
const struct uart_gecko_config *config = dev->config;
|
||||||
|
const struct uart_gecko_data *data = dev->data;
|
||||||
|
const struct uart_config *uart_cfg = data->uart_cfg;
|
||||||
|
|
||||||
USART_InitAsync_TypeDef usartInit = USART_INITASYNC_DEFAULT;
|
USART_InitAsync_TypeDef usartInit = USART_INITASYNC_DEFAULT;
|
||||||
|
|
||||||
|
|
@ -465,9 +607,12 @@ static int uart_gecko_init(const struct device *dev)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Init USART */
|
/* Init USART */
|
||||||
usartInit.baudrate = config->baud_rate;
|
usartInit.baudrate = uart_cfg->baudrate;
|
||||||
|
usartInit.parity = uart_gecko_cfg2ll_parity(uart_cfg->parity);
|
||||||
|
usartInit.stopbits = uart_gecko_cfg2ll_stopbits(uart_cfg->stop_bits);
|
||||||
|
usartInit.databits = uart_gecko_cfg2ll_databits(uart_cfg->data_bits, uart_cfg->parity);
|
||||||
#ifdef UART_GECKO_HW_FLOW_CONTROL
|
#ifdef UART_GECKO_HW_FLOW_CONTROL
|
||||||
usartInit.hwFlowControl = config->hw_flowcontrol ?
|
usartInit.hwFlowControl = uart_cfg->flow_ctrl ?
|
||||||
usartHwFlowControlCtsAndRts : usartHwFlowControlNone;
|
usartHwFlowControlCtsAndRts : usartHwFlowControlNone;
|
||||||
#endif
|
#endif
|
||||||
USART_InitAsync(config->base, &usartInit);
|
USART_InitAsync(config->base, &usartInit);
|
||||||
|
|
@ -638,45 +783,52 @@ static DEVICE_API(uart, uart_gecko_driver_api) = {
|
||||||
.pin_rts = PIN_UART_RTS(idx), \
|
.pin_rts = PIN_UART_RTS(idx), \
|
||||||
.pin_cts = PIN_UART_CTS(idx),
|
.pin_cts = PIN_UART_CTS(idx),
|
||||||
|
|
||||||
#define GECKO_UART_HW_FLOW_CONTROL(idx) \
|
|
||||||
.hw_flowcontrol = DT_INST_PROP(idx, hw_flow_control),
|
|
||||||
|
|
||||||
#else /* UART_GECKO_HW_FLOW_CONTROL */
|
#else /* UART_GECKO_HW_FLOW_CONTROL */
|
||||||
|
|
||||||
#define GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx)
|
#define GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx)
|
||||||
#define VALIDATE_GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx)
|
#define VALIDATE_GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx)
|
||||||
#define GECKO_UART_RTS_CTS_PINS(idx)
|
#define GECKO_UART_RTS_CTS_PINS(idx)
|
||||||
#define GECKO_UART_HW_FLOW_CONTROL(idx)
|
|
||||||
|
|
||||||
#endif /* UART_GECKO_HW_FLOW_CONTROL */
|
#endif /* UART_GECKO_HW_FLOW_CONTROL */
|
||||||
|
|
||||||
#define GECKO_UART_INIT(idx) \
|
#define GECKO_UART_INIT(idx) \
|
||||||
VALIDATE_GECKO_UART_RX_TX_PIN_LOCATIONS(idx); \
|
VALIDATE_GECKO_UART_RX_TX_PIN_LOCATIONS(idx); \
|
||||||
VALIDATE_GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx); \
|
VALIDATE_GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx); \
|
||||||
\
|
\
|
||||||
GECKO_UART_IRQ_HANDLER_DECL(idx); \
|
GECKO_UART_IRQ_HANDLER_DECL(idx); \
|
||||||
\
|
\
|
||||||
static const struct uart_gecko_config uart_gecko_cfg_##idx = { \
|
static struct uart_config uart_cfg_##idx = { \
|
||||||
.base = (USART_TypeDef *)DT_INST_REG_ADDR(idx), \
|
.baudrate = DT_INST_PROP(idx, current_speed), \
|
||||||
GET_GECKO_UART_CLOCK(idx) \
|
.parity = DT_INST_ENUM_IDX(idx, parity), \
|
||||||
.baud_rate = DT_INST_PROP(idx, current_speed), \
|
.stop_bits = DT_INST_ENUM_IDX(idx, stop_bits), \
|
||||||
GECKO_UART_HW_FLOW_CONTROL(idx) \
|
.data_bits = DT_INST_ENUM_IDX(idx, data_bits), \
|
||||||
GECKO_UART_RX_TX_PINS(idx) \
|
.flow_ctrl = DT_INST_PROP(idx, hw_flow_control) \
|
||||||
GECKO_UART_RTS_CTS_PINS(idx) \
|
? UART_CFG_FLOW_CTRL_RTS_CTS \
|
||||||
GECKO_UART_RX_TX_PIN_LOCATIONS(idx) \
|
: UART_CFG_FLOW_CTRL_NONE, \
|
||||||
GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx) \
|
}; \
|
||||||
GECKO_UART_IRQ_HANDLER_FUNC(idx) \
|
\
|
||||||
}; \
|
static const struct uart_gecko_config uart_gecko_cfg_##idx = { \
|
||||||
\
|
.base = (USART_TypeDef *)DT_INST_REG_ADDR(idx), \
|
||||||
static struct uart_gecko_data uart_gecko_data_##idx; \
|
GET_GECKO_UART_CLOCK(idx) \
|
||||||
\
|
GECKO_UART_RX_TX_PINS(idx) \
|
||||||
DEVICE_DT_INST_DEFINE(idx, uart_gecko_init, \
|
GECKO_UART_RTS_CTS_PINS(idx) \
|
||||||
NULL, &uart_gecko_data_##idx, \
|
GECKO_UART_RX_TX_PIN_LOCATIONS(idx) \
|
||||||
&uart_gecko_cfg_##idx, PRE_KERNEL_1, \
|
GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx) \
|
||||||
CONFIG_SERIAL_INIT_PRIORITY, \
|
GECKO_UART_IRQ_HANDLER_FUNC(idx) \
|
||||||
&uart_gecko_driver_api); \
|
}; \
|
||||||
\
|
\
|
||||||
\
|
\
|
||||||
|
static struct uart_gecko_data uart_gecko_data_##idx = { \
|
||||||
|
.uart_cfg = &uart_cfg_##idx, \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
DEVICE_DT_INST_DEFINE(idx, uart_gecko_init, \
|
||||||
|
NULL, &uart_gecko_data_##idx, \
|
||||||
|
&uart_gecko_cfg_##idx, PRE_KERNEL_1, \
|
||||||
|
CONFIG_SERIAL_INIT_PRIORITY, \
|
||||||
|
&uart_gecko_driver_api); \
|
||||||
|
\
|
||||||
|
\
|
||||||
GECKO_UART_IRQ_HANDLER(idx)
|
GECKO_UART_IRQ_HANDLER(idx)
|
||||||
|
|
||||||
DT_INST_FOREACH_STATUS_OKAY(GECKO_UART_INIT)
|
DT_INST_FOREACH_STATUS_OKAY(GECKO_UART_INIT)
|
||||||
|
|
@ -709,56 +861,77 @@ DT_INST_FOREACH_STATUS_OKAY(GECKO_UART_INIT)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_PINCTRL
|
#ifdef CONFIG_PINCTRL
|
||||||
#define GECKO_USART_INIT(idx) \
|
#define GECKO_USART_INIT(idx) \
|
||||||
PINCTRL_DT_INST_DEFINE(idx); \
|
PINCTRL_DT_INST_DEFINE(idx); \
|
||||||
GECKO_USART_IRQ_HANDLER_DECL(idx); \
|
GECKO_USART_IRQ_HANDLER_DECL(idx); \
|
||||||
PM_DEVICE_DT_INST_DEFINE(idx, uart_gecko_pm_action); \
|
PM_DEVICE_DT_INST_DEFINE(idx, uart_gecko_pm_action); \
|
||||||
\
|
\
|
||||||
static const struct uart_gecko_config usart_gecko_cfg_##idx = { \
|
static struct uart_config uart_cfg_##idx = { \
|
||||||
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(idx), \
|
.baudrate = DT_INST_PROP(idx, current_speed), \
|
||||||
.base = (USART_TypeDef *)DT_INST_REG_ADDR(idx), \
|
.parity = DT_INST_ENUM_IDX(idx, parity), \
|
||||||
GET_GECKO_USART_CLOCK(idx) \
|
.stop_bits = DT_INST_ENUM_IDX(idx, stop_bits), \
|
||||||
.baud_rate = DT_INST_PROP(idx, current_speed), \
|
.data_bits = DT_INST_ENUM_IDX(idx, data_bits), \
|
||||||
GECKO_USART_IRQ_HANDLER_FUNC(idx) \
|
.flow_ctrl = DT_INST_PROP(idx, hw_flow_control) \
|
||||||
}; \
|
? UART_CFG_FLOW_CTRL_RTS_CTS \
|
||||||
\
|
: UART_CFG_FLOW_CTRL_NONE, \
|
||||||
static struct uart_gecko_data usart_gecko_data_##idx; \
|
}; \
|
||||||
\
|
\
|
||||||
DEVICE_DT_INST_DEFINE(idx, uart_gecko_init, PM_DEVICE_DT_INST_GET(idx),\
|
static const struct uart_gecko_config usart_gecko_cfg_##idx = { \
|
||||||
&usart_gecko_data_##idx, \
|
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(idx), \
|
||||||
&usart_gecko_cfg_##idx, PRE_KERNEL_1, \
|
.base = (USART_TypeDef *)DT_INST_REG_ADDR(idx), \
|
||||||
CONFIG_SERIAL_INIT_PRIORITY, \
|
GET_GECKO_USART_CLOCK(idx) \
|
||||||
&uart_gecko_driver_api); \
|
GECKO_USART_IRQ_HANDLER_FUNC(idx) \
|
||||||
\
|
} ; \
|
||||||
|
\
|
||||||
|
static struct uart_gecko_data usart_gecko_data_##idx = { \
|
||||||
|
.uart_cfg = &uart_cfg_##idx, \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
DEVICE_DT_INST_DEFINE(idx, uart_gecko_init, PM_DEVICE_DT_INST_GET(idx), \
|
||||||
|
&usart_gecko_data_##idx, \
|
||||||
|
&usart_gecko_cfg_##idx, PRE_KERNEL_1, \
|
||||||
|
CONFIG_SERIAL_INIT_PRIORITY, \
|
||||||
|
&uart_gecko_driver_api); \
|
||||||
|
\
|
||||||
GECKO_USART_IRQ_HANDLER(idx)
|
GECKO_USART_IRQ_HANDLER(idx)
|
||||||
#else
|
#else
|
||||||
#define GECKO_USART_INIT(idx) \
|
#define GECKO_USART_INIT(idx) \
|
||||||
VALIDATE_GECKO_UART_RX_TX_PIN_LOCATIONS(idx); \
|
VALIDATE_GECKO_UART_RX_TX_PIN_LOCATIONS(idx); \
|
||||||
VALIDATE_GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx); \
|
VALIDATE_GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx); \
|
||||||
\
|
\
|
||||||
GECKO_USART_IRQ_HANDLER_DECL(idx); \
|
GECKO_USART_IRQ_HANDLER_DECL(idx); \
|
||||||
PM_DEVICE_DT_INST_DEFINE(idx, uart_gecko_pm_action); \
|
PM_DEVICE_DT_INST_DEFINE(idx, uart_gecko_pm_action); \
|
||||||
\
|
\
|
||||||
static const struct uart_gecko_config usart_gecko_cfg_##idx = { \
|
static struct uart_config uart_cfg_##idx = { \
|
||||||
.base = (USART_TypeDef *)DT_INST_REG_ADDR(idx), \
|
.baudrate = DT_INST_PROP(idx, current_speed), \
|
||||||
GET_GECKO_USART_CLOCK(idx) \
|
.parity = DT_INST_ENUM_IDX(idx, parity), \
|
||||||
.baud_rate = DT_INST_PROP(idx, current_speed), \
|
.stop_bits = DT_INST_ENUM_IDX(idx, stop_bits), \
|
||||||
GECKO_UART_HW_FLOW_CONTROL(idx) \
|
.data_bits = DT_INST_ENUM_IDX(idx, data_bits), \
|
||||||
GECKO_UART_RX_TX_PINS(idx) \
|
.flow_ctrl = DT_INST_PROP(idx, hw_flow_control) \
|
||||||
GECKO_UART_RTS_CTS_PINS(idx) \
|
? UART_CFG_FLOW_CTRL_RTS_CTS \
|
||||||
GECKO_UART_RX_TX_PIN_LOCATIONS(idx) \
|
: UART_CFG_FLOW_CTRL_NONE, \
|
||||||
GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx) \
|
}; \
|
||||||
GECKO_USART_IRQ_HANDLER_FUNC(idx) \
|
\
|
||||||
}; \
|
static const struct uart_gecko_config usart_gecko_cfg_##idx = { \
|
||||||
\
|
.base = (USART_TypeDef *)DT_INST_REG_ADDR(idx), \
|
||||||
static struct uart_gecko_data usart_gecko_data_##idx; \
|
GET_GECKO_USART_CLOCK(idx) \
|
||||||
\
|
GECKO_UART_RX_TX_PINS(idx) \
|
||||||
DEVICE_DT_INST_DEFINE(idx, uart_gecko_init, PM_DEVICE_DT_INST_GET(idx),\
|
GECKO_UART_RTS_CTS_PINS(idx) \
|
||||||
&usart_gecko_data_##idx, \
|
GECKO_UART_RX_TX_PIN_LOCATIONS(idx) \
|
||||||
&usart_gecko_cfg_##idx, PRE_KERNEL_1, \
|
GECKO_UART_RTS_CTS_PIN_LOCATIONS(idx) \
|
||||||
CONFIG_SERIAL_INIT_PRIORITY, \
|
GECKO_USART_IRQ_HANDLER_FUNC(idx) \
|
||||||
&uart_gecko_driver_api); \
|
}; \
|
||||||
\
|
\
|
||||||
|
static struct uart_gecko_data usart_gecko_data_##idx = { \
|
||||||
|
.uart_cfg = &uart_cfg_##idx, \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
DEVICE_DT_INST_DEFINE(idx, uart_gecko_init, PM_DEVICE_DT_INST_GET(idx), \
|
||||||
|
&usart_gecko_data_##idx, \
|
||||||
|
&usart_gecko_cfg_##idx, PRE_KERNEL_1, \
|
||||||
|
CONFIG_SERIAL_INIT_PRIORITY, \
|
||||||
|
&uart_gecko_driver_api); \
|
||||||
|
\
|
||||||
GECKO_USART_IRQ_HANDLER(idx)
|
GECKO_USART_IRQ_HANDLER(idx)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,21 @@ properties:
|
||||||
interrupts:
|
interrupts:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
current-speed:
|
||||||
|
description: |
|
||||||
|
Initial baud rate setting for UART. Defaults to standard baudrate of 115200 if not specified.
|
||||||
|
default: 115200
|
||||||
|
|
||||||
|
stop-bits:
|
||||||
|
description: |
|
||||||
|
Sets the number of stop bits. Defaults to standard of 1 if not specified.
|
||||||
|
default: "1"
|
||||||
|
|
||||||
|
data-bits:
|
||||||
|
description: |
|
||||||
|
Sets the number of data bits. Defaults to standard of 8 if not specified.
|
||||||
|
default: 8
|
||||||
|
|
||||||
peripheral-id:
|
peripheral-id:
|
||||||
type: int
|
type: int
|
||||||
required: true
|
required: true
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,21 @@ properties:
|
||||||
interrupts:
|
interrupts:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
current-speed:
|
||||||
|
description: |
|
||||||
|
Initial baud rate setting for UART. Defaults to standard baudrate of 115200 if not specified.
|
||||||
|
default: 115200
|
||||||
|
|
||||||
|
stop-bits:
|
||||||
|
description: |
|
||||||
|
Sets the number of stop bits. Defaults to standard of 1 if not specified.
|
||||||
|
default: "1"
|
||||||
|
|
||||||
|
data-bits:
|
||||||
|
description: |
|
||||||
|
Sets the number of data bits. Defaults to standard of 8 if not specified.
|
||||||
|
default: 8
|
||||||
|
|
||||||
peripheral-id:
|
peripheral-id:
|
||||||
type: int
|
type: int
|
||||||
description: peripheral ID
|
description: peripheral ID
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue