drivers: esp32: UART - use dts config for HW flow Control
- dts updated for UART1/2 - Additional check added to _INIT macro to configure flow control mode - Additional check added to _INIT macro to set CTS/RTS gpios values - Additional check added for gpio config Signed-off-by: Mohamed ElShahawi <ExtremeGTX@hotmail.com>
This commit is contained in:
parent
2fa48c879a
commit
bcd9e49f3f
2 changed files with 72 additions and 59 deletions
|
@ -45,6 +45,7 @@
|
||||||
rx-pin = <9>;
|
rx-pin = <9>;
|
||||||
rts-pin = <11>;
|
rts-pin = <11>;
|
||||||
cts-pin = <6>;
|
cts-pin = <6>;
|
||||||
|
hw-flow-control;
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart2 {
|
&uart2 {
|
||||||
|
@ -53,4 +54,5 @@
|
||||||
rx-pin = <16>;
|
rx-pin = <16>;
|
||||||
rts-pin = <7>;
|
rts-pin = <7>;
|
||||||
cts-pin = <8>;
|
cts-pin = <8>;
|
||||||
|
hw-flow-control;
|
||||||
};
|
};
|
||||||
|
|
|
@ -211,14 +211,18 @@ static int uart_esp32_configure_pins(struct device *dev)
|
||||||
cfg->signals.rx_in,
|
cfg->signals.rx_in,
|
||||||
false);
|
false);
|
||||||
|
|
||||||
esp32_rom_gpio_matrix_out(cfg->pins.cts,
|
if (cfg->pins.cts) {
|
||||||
cfg->signals.cts_in,
|
esp32_rom_gpio_matrix_out(cfg->pins.cts,
|
||||||
false,
|
cfg->signals.cts_in,
|
||||||
false);
|
false,
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
|
||||||
esp32_rom_gpio_matrix_in(cfg->pins.rts,
|
if (cfg->pins.rts) {
|
||||||
cfg->signals.rts_out,
|
esp32_rom_gpio_matrix_in(cfg->pins.rts,
|
||||||
false);
|
cfg->signals.rts_out,
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -472,59 +476,66 @@ static const struct uart_driver_api uart_esp32_api = {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ESP32_UART_INIT(idx) \
|
#define ESP32_UART_INIT(idx) \
|
||||||
ESP32_UART_IRQ_HANDLER_DECL(idx); \
|
ESP32_UART_IRQ_HANDLER_DECL(idx); \
|
||||||
static const struct uart_esp32_config uart_esp32_cfg_port_##idx = { \
|
static const struct uart_esp32_config uart_esp32_cfg_port_##idx = { \
|
||||||
.dev_conf = { \
|
.dev_conf = { \
|
||||||
.base = (u8_t *)DT_INST_##idx##_ESPRESSIF_ESP32_UART_BASE_ADDRESS, \
|
.base = (u8_t *)DT_INST_##idx##_ESPRESSIF_ESP32_UART_BASE_ADDRESS, \
|
||||||
.sys_clk_freq = DT_INST_0_CADENCE_TENSILICA_XTENSA_LX6_CLOCK_FREQUENCY, \
|
.sys_clk_freq = DT_INST_0_CADENCE_TENSILICA_XTENSA_LX6_CLOCK_FREQUENCY, \
|
||||||
ESP32_UART_IRQ_HANDLER_FUNC(idx) \
|
ESP32_UART_IRQ_HANDLER_FUNC(idx) \
|
||||||
}, \
|
}, \
|
||||||
\
|
\
|
||||||
.peripheral = { \
|
.peripheral = { \
|
||||||
.clk = DPORT_UART##idx##_CLK_EN, \
|
.clk = DPORT_UART##idx##_CLK_EN, \
|
||||||
.rst = DPORT_UART##idx##_RST, \
|
.rst = DPORT_UART##idx##_RST, \
|
||||||
}, \
|
}, \
|
||||||
\
|
\
|
||||||
.signals = { \
|
.signals = { \
|
||||||
.tx_out = U##idx##TXD_OUT_IDX, \
|
.tx_out = U##idx##TXD_OUT_IDX, \
|
||||||
.rx_in = U##idx##RXD_IN_IDX, \
|
.rx_in = U##idx##RXD_IN_IDX, \
|
||||||
.rts_out = U##idx##RTS_OUT_IDX, \
|
.rts_out = U##idx##RTS_OUT_IDX, \
|
||||||
.cts_in = U##idx##CTS_IN_IDX, \
|
.cts_in = U##idx##CTS_IN_IDX, \
|
||||||
}, \
|
}, \
|
||||||
\
|
\
|
||||||
.pins = { \
|
.pins = { \
|
||||||
.tx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_TX_PIN, \
|
.tx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_TX_PIN, \
|
||||||
.rx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RX_PIN, \
|
.rx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RX_PIN, \
|
||||||
.rts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RTS_PIN, \
|
COND_CODE_1(IS_ENABLED(DT_INST_##idx##_ESPRESSIF_ESP32_UART_HW_FLOW_CONTROL), \
|
||||||
.cts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_CTS_PIN, \
|
(.rts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RTS_PIN, \
|
||||||
}, \
|
.cts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_CTS_PIN, \
|
||||||
\
|
), \
|
||||||
.irq = { \
|
(.rts = 0, \
|
||||||
.source = ETS_UART##idx##_INTR_SOURCE, \
|
.cts = 0 \
|
||||||
.line = DT_UART_ESP32_PORT_##idx##_IRQ_0, \
|
)) \
|
||||||
} \
|
}, \
|
||||||
}; \
|
\
|
||||||
\
|
.irq = { \
|
||||||
static struct uart_esp32_data uart_esp32_data_##idx = { \
|
.source = ETS_UART##idx##_INTR_SOURCE, \
|
||||||
.uart_config = { \
|
.line = DT_UART_ESP32_PORT_##idx##_IRQ_0, \
|
||||||
.baudrate = DT_INST_##idx##_ESPRESSIF_ESP32_UART_CURRENT_SPEED, \
|
} \
|
||||||
.parity = UART_CFG_PARITY_NONE, \
|
}; \
|
||||||
.stop_bits = UART_CFG_STOP_BITS_1, \
|
\
|
||||||
.data_bits = UART_CFG_DATA_BITS_8, \
|
static struct uart_esp32_data uart_esp32_data_##idx = { \
|
||||||
.flow_ctrl = UART_CFG_FLOW_CTRL_NONE \
|
.uart_config = { \
|
||||||
} \
|
.baudrate = DT_INST_##idx##_ESPRESSIF_ESP32_UART_CURRENT_SPEED, \
|
||||||
}; \
|
.parity = UART_CFG_PARITY_NONE, \
|
||||||
\
|
.stop_bits = UART_CFG_STOP_BITS_1, \
|
||||||
DEVICE_AND_API_INIT(uart_esp32_##idx, \
|
.data_bits = UART_CFG_DATA_BITS_8, \
|
||||||
DT_INST_##idx##_ESPRESSIF_ESP32_UART_LABEL, \
|
COND_CODE_1(IS_ENABLED(DT_INST_##idx##_ESPRESSIF_ESP32_UART_HW_FLOW_CONTROL), \
|
||||||
uart_esp32_init, \
|
(.flow_ctrl = UART_CFG_FLOW_CTRL_RTS_CTS), \
|
||||||
&uart_esp32_data_##idx, \
|
(.flow_ctrl = UART_CFG_FLOW_CTRL_NONE)) \
|
||||||
&uart_esp32_cfg_port_##idx, \
|
} \
|
||||||
PRE_KERNEL_1, \
|
}; \
|
||||||
CONFIG_KERNEL_INIT_PRIORITY_DEVICE, \
|
\
|
||||||
&uart_esp32_api); \
|
DEVICE_AND_API_INIT(uart_esp32_##idx, \
|
||||||
\
|
DT_INST_##idx##_ESPRESSIF_ESP32_UART_LABEL, \
|
||||||
|
uart_esp32_init, \
|
||||||
|
&uart_esp32_data_##idx, \
|
||||||
|
&uart_esp32_cfg_port_##idx, \
|
||||||
|
PRE_KERNEL_1, \
|
||||||
|
CONFIG_KERNEL_INIT_PRIORITY_DEVICE, \
|
||||||
|
&uart_esp32_api); \
|
||||||
|
\
|
||||||
ESP32_UART_IRQ_HANDLER(idx)
|
ESP32_UART_IRQ_HANDLER(idx)
|
||||||
|
|
||||||
#ifdef DT_INST_0_ESPRESSIF_ESP32_UART
|
#ifdef DT_INST_0_ESPRESSIF_ESP32_UART
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue