mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 02:37:19 +02:00
fix(gpio): removed unnecessary step when routing input signal to a pin
This commit is contained in:
@ -20,6 +20,6 @@ When a peripheral driver does de-initialization, to de-configure the pin as the
|
||||
|
||||
If the signal is routed through IO MUX to the pin, then call `gpio_iomux_out` to select the IO MUX function index, and also call `gpio_iomux_in` to direct the signal to IO MUX. Input will be enabled for the IO internally.
|
||||
|
||||
If the signal is routed through GPIO Matrix to the pin, then first call `gpio_func_sel` to let the pin use `PIN_FUNC_GPIO` function, follow by calling `gpio_input_enable` and `esp_rom_gpio_connect_in_signal` to enable the input and connect the signal to the pin.
|
||||
If the signal is routed through GPIO Matrix to the pin, then call `gpio_input_enable` and `esp_rom_gpio_connect_in_signal` to enable the input and connect the signal to the pin.
|
||||
|
||||
When a peripheral driver does de-initialization, to de-configure the pin as the peripheral signal input, use `esp_rom_gpio_connect_in_signal` to connect the signal to CONST_ONE or CONST_ZERO, so that it is disconnected from the pin. It is not desired to call `gpio_input_disable`, because there might be other drivers still using this pin as an input.
|
||||
|
@ -256,7 +256,6 @@ static esp_err_t s_parlio_rx_unit_set_gpio(parlio_rx_unit_handle_t rx_unit, cons
|
||||
if (config->clk_src == PARLIO_CLK_SRC_EXTERNAL) {
|
||||
ESP_RETURN_ON_FALSE(config->clk_in_gpio_num >= 0, ESP_ERR_INVALID_ARG, TAG, "clk_in_gpio_num must be set while the clock input from external");
|
||||
/* Connect the clock in signal to the GPIO matrix if it is set */
|
||||
gpio_func_sel(config->clk_in_gpio_num, PIN_FUNC_GPIO);
|
||||
gpio_input_enable(config->clk_in_gpio_num);
|
||||
|
||||
// deprecated, to be removed in in esp-idf v6.0
|
||||
@ -288,7 +287,6 @@ static esp_err_t s_parlio_rx_unit_set_gpio(parlio_rx_unit_handle_t rx_unit, cons
|
||||
|
||||
/* Initialize the valid GPIO as input */
|
||||
if (config->valid_gpio_num >= 0) {
|
||||
gpio_func_sel(config->valid_gpio_num, PIN_FUNC_GPIO);
|
||||
gpio_input_enable(config->valid_gpio_num);
|
||||
|
||||
// deprecated, to be removed in in esp-idf v6.0
|
||||
@ -303,7 +301,6 @@ static esp_err_t s_parlio_rx_unit_set_gpio(parlio_rx_unit_handle_t rx_unit, cons
|
||||
for (int i = 0; i < config->data_width; i++) {
|
||||
/* Loop the data_gpio_nums to connect data and valid signals via GPIO matrix */
|
||||
if (config->data_gpio_nums[i] >= 0) {
|
||||
gpio_func_sel(config->data_gpio_nums[i], PIN_FUNC_GPIO);
|
||||
gpio_input_enable(config->data_gpio_nums[i]);
|
||||
|
||||
// deprecated, to be removed in in esp-idf v6.0
|
||||
|
@ -182,7 +182,6 @@ static esp_err_t parlio_tx_unit_configure_gpio(parlio_tx_unit_t *tx_unit, const
|
||||
parlio_periph_signals.groups[group_id].tx_units[unit_id].clk_out_sig, false, false);
|
||||
}
|
||||
if (config->clk_in_gpio_num >= 0) {
|
||||
gpio_func_sel(config->clk_in_gpio_num, PIN_FUNC_GPIO);
|
||||
gpio_input_enable(config->clk_in_gpio_num);
|
||||
|
||||
// deprecated, to be removed in in esp-idf v6.0
|
||||
|
@ -771,7 +771,6 @@ esp_err_t uart_set_pin(uart_port_t uart_num, int tx_io_num, int rx_io_num, int r
|
||||
if (rx_io_num >= 0 && (tx_rx_same_io || !uart_try_set_iomux_pin(uart_num, rx_io_num, SOC_UART_RX_PIN_IDX))) {
|
||||
io_reserve_mask &= ~BIT64(rx_io_num); // input IO via GPIO matrix does not need to be reserved
|
||||
if (uart_num < SOC_UART_HP_NUM) {
|
||||
gpio_func_sel(rx_io_num, PIN_FUNC_GPIO);
|
||||
gpio_input_enable(rx_io_num);
|
||||
esp_rom_gpio_connect_in_signal(rx_io_num, UART_PERIPH_SIGNAL(uart_num, SOC_UART_RX_PIN_IDX), 0);
|
||||
}
|
||||
@ -806,7 +805,6 @@ esp_err_t uart_set_pin(uart_port_t uart_num, int tx_io_num, int rx_io_num, int r
|
||||
if (cts_io_num >= 0 && !uart_try_set_iomux_pin(uart_num, cts_io_num, SOC_UART_CTS_PIN_IDX)) {
|
||||
io_reserve_mask &= ~BIT64(cts_io_num); // input IO via GPIO matrix does not need to be reserved
|
||||
if (uart_num < SOC_UART_HP_NUM) {
|
||||
gpio_func_sel(cts_io_num, PIN_FUNC_GPIO);
|
||||
gpio_pullup_en(cts_io_num);
|
||||
gpio_input_enable(cts_io_num);
|
||||
esp_rom_gpio_connect_in_signal(cts_io_num, UART_PERIPH_SIGNAL(uart_num, SOC_UART_CTS_PIN_IDX), 0);
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "driver/uart.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_rom_gpio.h"
|
||||
#include "esp_private/gpio.h"
|
||||
#if SOC_LP_GPIO_MATRIX_SUPPORTED
|
||||
#include "driver/lp_io.h"
|
||||
#include "driver/rtc_io.h"
|
||||
@ -463,6 +464,7 @@ TEST_CASE("uart int state restored after flush", "[uart]")
|
||||
/* Make sure UART's TX signal is connected to RX pin
|
||||
* This creates a loop that lets us receive anything we send on the UART */
|
||||
if (uart_num < SOC_UART_HP_NUM) {
|
||||
gpio_func_sel(uart_rx, PIN_FUNC_GPIO);
|
||||
esp_rom_gpio_connect_out_signal(uart_rx, uart_tx_signal, false, false);
|
||||
#if SOC_UART_LP_NUM > 0
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user