diff --git a/components/bootloader_support/src/bootloader_console.c b/components/bootloader_support/src/bootloader_console.c index 5d453aed5b..fdacf11697 100644 --- a/components/bootloader_support/src/bootloader_console.c +++ b/components/bootloader_support/src/bootloader_console.c @@ -21,6 +21,7 @@ #include "soc/gpio_sig_map.h" #include "soc/rtc.h" #include "hal/clk_gate_ll.h" +#include "hal/gpio_hal.h" #if CONFIG_IDF_TARGET_ESP32S2 #include "esp32s2/rom/usb/cdc_acm.h" #include "esp32s2/rom/usb/usb_common.h" @@ -69,8 +70,8 @@ void bootloader_console_init(void) uart_tx_gpio != UART_NUM_0_TXD_DIRECT_GPIO_NUM || uart_rx_gpio != UART_NUM_0_RXD_DIRECT_GPIO_NUM) { // Change default UART pins back to GPIOs - PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, PIN_FUNC_GPIO); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_U0RXD_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_U0TXD_U, PIN_FUNC_GPIO); // Route GPIO signals to/from pins const uint32_t tx_idx = uart_periph_signal[uart_num].tx_sig; const uint32_t rx_idx = uart_periph_signal[uart_num].rx_sig; diff --git a/components/bootloader_support/src/bootloader_flash_config_esp32.c b/components/bootloader_support/src/bootloader_flash_config_esp32.c index 538ed38b63..8bb97957a3 100644 --- a/components/bootloader_support/src/bootloader_flash_config_esp32.c +++ b/components/bootloader_support/src/bootloader_flash_config_esp32.c @@ -25,6 +25,7 @@ #include "soc/spi_reg.h" #include "soc/soc_caps.h" #include "soc/soc_pins.h" +#include "hal/gpio_hal.h" #include "flash_qio_mode.h" #include "bootloader_common.h" #include "bootloader_flash_config.h" @@ -87,7 +88,7 @@ void IRAM_ATTR bootloader_flash_gpio_config(const esp_image_header_t* pfhdr) pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32PICOV302) { // For ESP32D2WD or ESP32-PICO series,the SPI pins are already configured // flash clock signal should come from IO MUX. - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_CLK_U, FUNC_SD_CLK_SPICLK); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_CLK_U, FUNC_SD_CLK_SPICLK); SET_PERI_REG_BITS(PERIPHS_IO_MUX_SD_CLK_U, FUN_DRV, drv, FUN_DRV_S); } else { const uint32_t spiconfig = esp_rom_efuse_get_flash_gpio_info(); @@ -102,14 +103,14 @@ void IRAM_ATTR bootloader_flash_gpio_config(const esp_image_header_t* pfhdr) esp_rom_gpio_connect_out_signal(SPI_IOMUX_PIN_NUM_HD, SPIHD_OUT_IDX, 0, 0); esp_rom_gpio_connect_in_signal(SPI_IOMUX_PIN_NUM_HD, SPIHD_IN_IDX, 0); //select pin function gpio - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA0_U, PIN_FUNC_GPIO); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA1_U, PIN_FUNC_GPIO); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA2_U, PIN_FUNC_GPIO); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA3_U, PIN_FUNC_GPIO); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_CMD_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_DATA0_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_DATA1_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_DATA2_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_DATA3_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_CMD_U, PIN_FUNC_GPIO); // flash clock signal should come from IO MUX. // set drive ability for clock - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_CLK_U, FUNC_SD_CLK_SPICLK); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_CLK_U, FUNC_SD_CLK_SPICLK); SET_PERI_REG_BITS(PERIPHS_IO_MUX_SD_CLK_U, FUN_DRV, drv, FUN_DRV_S); uint32_t flash_id = g_rom_flashchip.device_id; diff --git a/components/bootloader_support/src/esp32/bootloader_esp32.c b/components/bootloader_support/src/esp32/bootloader_esp32.c index 4bc9e37bf7..b385b17b5c 100644 --- a/components/bootloader_support/src/esp32/bootloader_esp32.c +++ b/components/bootloader_support/src/esp32/bootloader_esp32.c @@ -34,6 +34,7 @@ #include "soc/io_mux_reg.h" #include "soc/rtc.h" #include "soc/spi_periph.h" +#include "hal/gpio_hal.h" #include "esp32/rom/cache.h" #include "esp_rom_gpio.h" @@ -61,7 +62,7 @@ void bootloader_configure_spi_pins(int drv) pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32PICOV302) { // For ESP32D2WD or ESP32-PICO series,the SPI pins are already configured // flash clock signal should come from IO MUX. - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_CLK_U, FUNC_SD_CLK_SPICLK); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_CLK_U, FUNC_SD_CLK_SPICLK); SET_PERI_REG_BITS(PERIPHS_IO_MUX_SD_CLK_U, FUN_DRV, drv, FUN_DRV_S); } else { const uint32_t spiconfig = esp_rom_efuse_get_flash_gpio_info(); @@ -76,14 +77,14 @@ void bootloader_configure_spi_pins(int drv) esp_rom_gpio_connect_out_signal(FLASH_SPIHD_IO, SPIHD_OUT_IDX, 0, 0); esp_rom_gpio_connect_in_signal(FLASH_SPIHD_IO, SPIHD_IN_IDX, 0); //select pin function gpio - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA0_U, PIN_FUNC_GPIO); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA1_U, PIN_FUNC_GPIO); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA2_U, PIN_FUNC_GPIO); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA3_U, PIN_FUNC_GPIO); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_CMD_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_DATA0_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_DATA1_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_DATA2_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_DATA3_U, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_CMD_U, PIN_FUNC_GPIO); // flash clock signal should come from IO MUX. // set drive ability for clock - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_CLK_U, FUNC_SD_CLK_SPICLK); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_CLK_U, FUNC_SD_CLK_SPICLK); SET_PERI_REG_BITS(PERIPHS_IO_MUX_SD_CLK_U, FUN_DRV, drv, FUN_DRV_S); #if CONFIG_SPIRAM_TYPE_ESPPSRAM32 || CONFIG_SPIRAM_TYPE_ESPPSRAM64 diff --git a/components/driver/dedic_gpio.c b/components/driver/dedic_gpio.c index 118c9aa5d0..c9254f2aa9 100644 --- a/components/driver/dedic_gpio.c +++ b/components/driver/dedic_gpio.c @@ -25,6 +25,7 @@ #include "soc/io_mux_reg.h" #include "hal/cpu_hal.h" #include "hal/cpu_ll.h" +#include "hal/gpio_hal.h" #include "driver/periph_ctrl.h" #include "esp_rom_gpio.h" #include "freertos/FreeRTOS.h" @@ -267,13 +268,13 @@ esp_err_t dedic_gpio_new_bundle(const dedic_gpio_bundle_config_t *config, dedic_ // route dedicated GPIO channel signals to GPIO matrix if (config->flags.in_en) { for (size_t i = 0; i < config->array_size; i++) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[config->gpio_array[i]], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[config->gpio_array[i]], PIN_FUNC_GPIO); esp_rom_gpio_connect_in_signal(config->gpio_array[i], dedic_gpio_periph_signals.cores[core_id].in_sig_per_channel[in_offset + i], config->flags.in_invert); } } if (config->flags.out_en) { for (size_t i = 0; i < config->array_size; i++) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[config->gpio_array[i]], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[config->gpio_array[i]], PIN_FUNC_GPIO); esp_rom_gpio_connect_out_signal(config->gpio_array[i], dedic_gpio_periph_signals.cores[core_id].out_sig_per_channel[out_offset + i], config->flags.out_invert, false); } } diff --git a/components/driver/gpio.c b/components/driver/gpio.c index d29803621f..ec9294d6a3 100644 --- a/components/driver/gpio.c +++ b/components/driver/gpio.c @@ -392,7 +392,7 @@ esp_err_t gpio_config(const gpio_config_t *pGPIOConfig) } /* By default, all the pins have to be configured as GPIO pins. */ - PIN_FUNC_SELECT(io_reg, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(io_reg, PIN_FUNC_GPIO); } io_num++; diff --git a/components/driver/i2c.c b/components/driver/i2c.c index eb24c0a83f..522555c866 100644 --- a/components/driver/i2c.c +++ b/components/driver/i2c.c @@ -26,6 +26,7 @@ #include "esp_pm.h" #include "soc/soc_memory_layout.h" #include "hal/i2c_hal.h" +#include "hal/gpio_hal.h" #include "soc/i2c_periph.h" #include "driver/i2c.h" #include "driver/periph_ctrl.h" @@ -832,7 +833,7 @@ esp_err_t i2c_set_pin(i2c_port_t i2c_num, int sda_io_num, int scl_io_num, bool s scl_in_sig = i2c_periph_signal[i2c_num].scl_in_sig; if (sda_io_num >= 0) { gpio_set_level(sda_io_num, I2C_IO_INIT_LEVEL); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[sda_io_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[sda_io_num], PIN_FUNC_GPIO); gpio_set_direction(sda_io_num, GPIO_MODE_INPUT_OUTPUT_OD); if (sda_pullup_en == GPIO_PULLUP_ENABLE) { @@ -845,7 +846,7 @@ esp_err_t i2c_set_pin(i2c_port_t i2c_num, int sda_io_num, int scl_io_num, bool s } if (scl_io_num >= 0) { gpio_set_level(scl_io_num, I2C_IO_INIT_LEVEL); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[scl_io_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[scl_io_num], PIN_FUNC_GPIO); gpio_set_direction(scl_io_num, GPIO_MODE_INPUT_OUTPUT_OD); esp_rom_gpio_connect_out_signal(scl_io_num, scl_out_sig, 0, 0); esp_rom_gpio_connect_in_signal(scl_io_num, scl_in_sig, 0); diff --git a/components/driver/i2s.c b/components/driver/i2s.c index e705467491..9dd867b674 100644 --- a/components/driver/i2s.c +++ b/components/driver/i2s.c @@ -24,6 +24,7 @@ #include "soc/lldesc.h" #include "driver/gpio.h" #include "driver/i2s.h" +#include "hal/gpio_hal.h" #if SOC_I2S_SUPPORTS_ADC_DAC #include "driver/dac.h" #include "hal/i2s_hal.h" @@ -118,7 +119,7 @@ static inline void gpio_matrix_out_check(int gpio, uint32_t signal_idx, bool out { //if pin = -1, do not need to configure if (gpio != -1) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[gpio], PIN_FUNC_GPIO); gpio_set_direction(gpio, GPIO_MODE_OUTPUT); esp_rom_gpio_connect_out_signal(gpio, signal_idx, out_inv, oen_inv); } @@ -127,7 +128,7 @@ static inline void gpio_matrix_out_check(int gpio, uint32_t signal_idx, bool out static inline void gpio_matrix_in_check(int gpio, uint32_t signal_idx, bool inv) { if (gpio != -1) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[gpio], PIN_FUNC_GPIO); //Set direction, for some GPIOs, the input function are not enabled as default. gpio_set_direction(gpio, GPIO_MODE_INPUT); esp_rom_gpio_connect_in_signal(gpio, signal_idx, inv); diff --git a/components/driver/ledc.c b/components/driver/ledc.c index 64f12e8bd9..79e942b6d9 100644 --- a/components/driver/ledc.c +++ b/components/driver/ledc.c @@ -21,6 +21,7 @@ #include "soc/rtc.h" #include "soc/soc_caps.h" #include "hal/ledc_hal.h" +#include "hal/gpio_hal.h" #include "driver/ledc.h" #include "esp_rom_gpio.h" #include "esp_rom_sys.h" @@ -355,7 +356,7 @@ esp_err_t ledc_set_pin(int gpio_num, ledc_mode_t speed_mode, ledc_channel_t ledc LEDC_ARG_CHECK(ledc_channel < LEDC_CHANNEL_MAX, "ledc_channel"); LEDC_ARG_CHECK(GPIO_IS_VALID_OUTPUT_GPIO(gpio_num), "gpio_num"); LEDC_ARG_CHECK(speed_mode < LEDC_SPEED_MODE_MAX, "speed_mode"); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], PIN_FUNC_GPIO); gpio_set_direction(gpio_num, GPIO_MODE_OUTPUT); esp_rom_gpio_connect_out_signal(gpio_num, ledc_periph_signal[speed_mode].sig_out0_idx + ledc_channel, 0, 0); return ESP_OK; @@ -402,7 +403,7 @@ esp_err_t ledc_channel_config(const ledc_channel_config_t* ledc_conf) ledc_channel, gpio_num, duty, timer_select ); /*set LEDC signal in gpio matrix*/ - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], PIN_FUNC_GPIO); gpio_set_direction(gpio_num, GPIO_MODE_OUTPUT); esp_rom_gpio_connect_out_signal(gpio_num, ledc_periph_signal[speed_mode].sig_out0_idx + ledc_channel, 0, 0); diff --git a/components/driver/mcpwm.c b/components/driver/mcpwm.c index 6cab15d37e..45ed81c47b 100644 --- a/components/driver/mcpwm.c +++ b/components/driver/mcpwm.c @@ -24,6 +24,7 @@ #include "driver/periph_ctrl.h" #include "sdkconfig.h" #include "hal/mcpwm_hal.h" +#include "hal/gpio_hal.h" #include "esp_rom_gpio.h" typedef struct { @@ -109,7 +110,7 @@ esp_err_t mcpwm_gpio_init(mcpwm_unit_t mcpwm_num, mcpwm_io_signals_t io_signal, MCPWM_CHECK((GPIO_IS_VALID_GPIO(gpio_num)), MCPWM_GPIO_ERROR, ESP_ERR_INVALID_ARG); // we enabled both input and output mode for GPIO used here, which can help to simulate trigger source especially in test code - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], PIN_FUNC_GPIO); if (io_signal <= MCPWM2B) { // Generator output signal MCPWM_CHECK((GPIO_IS_VALID_OUTPUT_GPIO(gpio_num)), MCPWM_GPIO_ERROR, ESP_ERR_INVALID_ARG); gpio_set_direction(gpio_num, GPIO_MODE_INPUT_OUTPUT); diff --git a/components/driver/pcnt.c b/components/driver/pcnt.c index e04e177242..8d02df1ee2 100644 --- a/components/driver/pcnt.c +++ b/components/driver/pcnt.c @@ -19,6 +19,7 @@ #include "driver/periph_ctrl.h" #include "driver/pcnt.h" #include "hal/pcnt_hal.h" +#include "hal/gpio_hal.h" #include "esp_rom_gpio.h" #define PCNT_CHANNEL_ERR_STR "PCNT CHANNEL ERROR" @@ -85,14 +86,14 @@ static inline esp_err_t _pcnt_set_pin(pcnt_port_t pcnt_port, pcnt_unit_t unit, p PCNT_CHECK(GPIO_IS_VALID_GPIO(ctrl_io) || ctrl_io < 0, PCNT_GPIO_ERR_STR, ESP_ERR_INVALID_ARG); if (pulse_io >= 0) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[pulse_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[pulse_io], PIN_FUNC_GPIO); gpio_set_direction(pulse_io, GPIO_MODE_INPUT); gpio_set_pull_mode(pulse_io, GPIO_PULLUP_ONLY); esp_rom_gpio_connect_in_signal(pulse_io, pcnt_periph_signals.units[unit].channels[channel].pulse_sig, 0); } if (ctrl_io >= 0) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[ctrl_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[ctrl_io], PIN_FUNC_GPIO); gpio_set_direction(ctrl_io, GPIO_MODE_INPUT); gpio_set_pull_mode(ctrl_io, GPIO_PULLUP_ONLY); esp_rom_gpio_connect_in_signal(ctrl_io, pcnt_periph_signals.units[unit].channels[channel].control_sig, 0); diff --git a/components/driver/rmt.c b/components/driver/rmt.c index 12c29dde30..8c75f9ffbf 100644 --- a/components/driver/rmt.c +++ b/components/driver/rmt.c @@ -30,6 +30,7 @@ #include "soc/rtc.h" #include "hal/rmt_hal.h" #include "hal/rmt_ll.h" +#include "hal/gpio_hal.h" #include "esp_rom_gpio.h" #define RMT_CHANNEL_ERROR_STR "RMT CHANNEL ERR" @@ -536,7 +537,7 @@ esp_err_t rmt_set_gpio(rmt_channel_t channel, rmt_mode_t mode, gpio_num_t gpio_n (GPIO_IS_VALID_OUTPUT_GPIO(gpio_num) && (mode == RMT_MODE_TX))), RMT_GPIO_ERROR_STR, ESP_ERR_INVALID_ARG); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], PIN_FUNC_GPIO); if (mode == RMT_MODE_TX) { RMT_CHECK(RMT_IS_TX_CHANNEL(channel), RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG); gpio_set_direction(gpio_num, GPIO_MODE_OUTPUT); diff --git a/components/driver/sdio_slave.c b/components/driver/sdio_slave.c index 3f9ffd9fa0..5d259be381 100644 --- a/components/driver/sdio_slave.c +++ b/components/driver/sdio_slave.c @@ -98,6 +98,7 @@ The driver of FIFOs works as below: #include "driver/periph_ctrl.h" #include "driver/gpio.h" #include "hal/sdio_slave_hal.h" +#include "hal/gpio_hal.h" #define SDIO_SLAVE_CHECK(res, str, ret_val) do { if(!(res)){\ @@ -280,7 +281,7 @@ static void configure_pin(int pin, uint32_t func, bool pullup) assert(reg != UINT32_MAX); PIN_INPUT_ENABLE(reg); - PIN_FUNC_SELECT(reg, sdmmc_func); + gpio_hal_iomux_func_sel(reg, sdmmc_func); PIN_SET_DRV(reg, drive_strength); gpio_pulldown_dis(pin); if (pullup) { @@ -322,7 +323,7 @@ static void recover_pin(int pin, int sdio_func) int func = REG_GET_FIELD(reg, MCU_SEL); if (func == sdio_func) { gpio_set_direction(pin, GPIO_MODE_INPUT); - PIN_FUNC_SELECT(reg, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(reg, PIN_FUNC_GPIO); } } diff --git a/components/driver/sdmmc_host.c b/components/driver/sdmmc_host.c index f3a740c5fb..30b5bdd22e 100644 --- a/components/driver/sdmmc_host.c +++ b/components/driver/sdmmc_host.c @@ -29,6 +29,7 @@ #include "freertos/FreeRTOS.h" #include "freertos/semphr.h" #include "soc/sdmmc_periph.h" +#include "hal/gpio_hal.h" #define SDMMC_EVENT_QUEUE_LENGTH 32 @@ -303,7 +304,7 @@ static void configure_pin(int pin) uint32_t reg = GPIO_PIN_MUX_REG[pin]; assert(reg != UINT32_MAX); PIN_INPUT_ENABLE(reg); - PIN_FUNC_SELECT(reg, sdmmc_func); + gpio_hal_iomux_func_sel(reg, sdmmc_func); PIN_SET_DRV(reg, drive_strength); } diff --git a/components/driver/sigmadelta.c b/components/driver/sigmadelta.c index 043a996fba..b0e436f320 100644 --- a/components/driver/sigmadelta.c +++ b/components/driver/sigmadelta.c @@ -17,6 +17,7 @@ #include "driver/sigmadelta.h" #include "esp_heap_caps.h" #include "hal/sigmadelta_hal.h" +#include "hal/gpio_hal.h" #include "esp_rom_gpio.h" static const char *TAG = "sigma-delta"; @@ -57,7 +58,7 @@ static inline esp_err_t _sigmadelta_set_pin(sigmadelta_port_t sigmadelta_port, s { SIGMADELTA_OBJ_CHECK(sigmadelta_port); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], PIN_FUNC_GPIO); gpio_set_direction(gpio_num, GPIO_MODE_OUTPUT); esp_rom_gpio_connect_out_signal(gpio_num, sigma_delta_periph_signals.channels[channel].sd_sig, 0, 0); return ESP_OK; diff --git a/components/driver/spi_common.c b/components/driver/spi_common.c index f0e6cae24b..618b3d1f0e 100644 --- a/components/driver/spi_common.c +++ b/components/driver/spi_common.c @@ -30,6 +30,7 @@ #include "driver/spi_common_internal.h" #include "stdatomic.h" #include "hal/spi_hal.h" +#include "hal/gpio_hal.h" #include "esp_rom_gpio.h" #if CONFIG_IDF_TARGET_ESP32 #include "soc/dport_reg.h" @@ -498,7 +499,7 @@ esp_err_t spicommon_bus_initialize_io(spi_host_device_t host, const spi_bus_conf #if CONFIG_IDF_TARGET_ESP32S2 PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[bus_config->mosi_io_num]); #endif - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[bus_config->mosi_io_num], FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[bus_config->mosi_io_num], FUNC_GPIO); } if (bus_config->miso_io_num >= 0) { if (miso_need_output || (temp_flag&SPICOMMON_BUSFLAG_DUAL)) { @@ -511,7 +512,7 @@ esp_err_t spicommon_bus_initialize_io(spi_host_device_t host, const spi_bus_conf #if CONFIG_IDF_TARGET_ESP32S2 PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[bus_config->miso_io_num]); #endif - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[bus_config->miso_io_num], FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[bus_config->miso_io_num], FUNC_GPIO); } if (bus_config->quadwp_io_num >= 0) { gpio_set_direction(bus_config->quadwp_io_num, GPIO_MODE_INPUT_OUTPUT); @@ -520,7 +521,7 @@ esp_err_t spicommon_bus_initialize_io(spi_host_device_t host, const spi_bus_conf #if CONFIG_IDF_TARGET_ESP32S2 PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[bus_config->quadwp_io_num]); #endif - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[bus_config->quadwp_io_num], FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[bus_config->quadwp_io_num], FUNC_GPIO); } if (bus_config->quadhd_io_num >= 0) { gpio_set_direction(bus_config->quadhd_io_num, GPIO_MODE_INPUT_OUTPUT); @@ -529,7 +530,7 @@ esp_err_t spicommon_bus_initialize_io(spi_host_device_t host, const spi_bus_conf #if CONFIG_IDF_TARGET_ESP32S2 PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[bus_config->quadhd_io_num]); #endif - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[bus_config->quadhd_io_num], FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[bus_config->quadhd_io_num], FUNC_GPIO); } if (bus_config->sclk_io_num >= 0) { if (sclk_need_output) { @@ -542,7 +543,7 @@ esp_err_t spicommon_bus_initialize_io(spi_host_device_t host, const spi_bus_conf #if CONFIG_IDF_TARGET_ESP32S2 PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[bus_config->sclk_io_num]); #endif - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[bus_config->sclk_io_num], FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[bus_config->sclk_io_num], FUNC_GPIO); } } @@ -582,7 +583,7 @@ void spicommon_cs_initialize(spi_host_device_t host, int cs_io_num, int cs_num, } if (cs_num == 0) esp_rom_gpio_connect_in_signal(cs_io_num, spi_periph_signal[host].spics_in, false); PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[cs_io_num]); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[cs_io_num], FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[cs_io_num], FUNC_GPIO); } } diff --git a/components/driver/test/test_common_spi.c b/components/driver/test/test_common_spi.c index e302aae771..0081d2446d 100644 --- a/components/driver/test/test_common_spi.c +++ b/components/driver/test/test_common_spi.c @@ -2,6 +2,7 @@ #include "driver/spi_slave.h" #include "esp_log.h" #include "driver/gpio.h" +#include "hal/gpio_hal.h" int test_freq_default[]=TEST_FREQ_DEFAULT(); @@ -202,13 +203,13 @@ void master_free_device_bus(spi_device_handle_t spi) void spitest_gpio_output_sel(uint32_t gpio_num, int func, uint32_t signal_idx) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], func); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], func); GPIO.func_out_sel_cfg[gpio_num].func_sel = signal_idx; } void spitest_gpio_input_sel(uint32_t gpio_num, int func, uint32_t signal_idx) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], func); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], func); GPIO.func_in_sel_cfg[signal_idx].func_sel = gpio_num; } diff --git a/components/driver/test/test_i2c.c b/components/driver/test/test_i2c.c index 18625bea8a..a36eb4a4a9 100644 --- a/components/driver/test/test_i2c.c +++ b/components/driver/test/test_i2c.c @@ -17,6 +17,7 @@ #include "soc/uart_struct.h" #include "driver/periph_ctrl.h" #include "esp_rom_gpio.h" +#include "hal/gpio_hal.h" #define DATA_LENGTH 512 /*! #include "sdkconfig.h" #include "hal/cpu_hal.h" +#include "hal/gpio_hal.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_log.h" @@ -63,7 +64,7 @@ static void rmt_setup_testbench(int tx_channel, int rx_channel, uint32_t flags) } // Routing internal signals by IO Matrix (bind rmt tx and rx signal on the same GPIO) - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[RMT_DATA_IO], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[RMT_DATA_IO], PIN_FUNC_GPIO); TEST_ESP_OK(gpio_set_direction(RMT_DATA_IO, GPIO_MODE_INPUT_OUTPUT)); esp_rom_gpio_connect_out_signal(RMT_DATA_IO, RMT_SIG_OUT0_IDX + tx_channel, 0, 0); esp_rom_gpio_connect_in_signal(RMT_DATA_IO, RMT_SIG_IN0_IDX + rx_channel, 0); diff --git a/components/driver/uart.c b/components/driver/uart.c index a396f6d604..bf21ac3f80 100644 --- a/components/driver/uart.c +++ b/components/driver/uart.c @@ -22,6 +22,7 @@ #include "freertos/semphr.h" #include "freertos/ringbuf.h" #include "hal/uart_hal.h" +#include "hal/gpio_hal.h" #include "soc/uart_periph.h" #include "soc/rtc_cntl_reg.h" #include "driver/uart.h" @@ -597,23 +598,23 @@ esp_err_t uart_set_pin(uart_port_t uart_num, int tx_io_num, int rx_io_num, int r UART_CHECK((cts_io_num < 0 || (GPIO_IS_VALID_GPIO(cts_io_num))), "cts_io_num error", ESP_FAIL); if(tx_io_num >= 0) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[tx_io_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[tx_io_num], PIN_FUNC_GPIO); gpio_set_level(tx_io_num, 1); esp_rom_gpio_connect_out_signal(tx_io_num, uart_periph_signal[uart_num].tx_sig, 0, 0); } if(rx_io_num >= 0) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[rx_io_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[rx_io_num], PIN_FUNC_GPIO); gpio_set_pull_mode(rx_io_num, GPIO_PULLUP_ONLY); gpio_set_direction(rx_io_num, GPIO_MODE_INPUT); esp_rom_gpio_connect_in_signal(rx_io_num, uart_periph_signal[uart_num].rx_sig, 0); } if(rts_io_num >= 0) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[rts_io_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[rts_io_num], PIN_FUNC_GPIO); gpio_set_direction(rts_io_num, GPIO_MODE_OUTPUT); esp_rom_gpio_connect_out_signal(rts_io_num, uart_periph_signal[uart_num].rts_sig, 0, 0); } if(cts_io_num >= 0) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[cts_io_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[cts_io_num], PIN_FUNC_GPIO); gpio_set_pull_mode(cts_io_num, GPIO_PULLUP_ONLY); gpio_set_direction(cts_io_num, GPIO_MODE_INPUT); esp_rom_gpio_connect_in_signal(cts_io_num, uart_periph_signal[uart_num].cts_sig, 0); diff --git a/components/esp32/spiram_psram.c b/components/esp32/spiram_psram.c index a94883d986..0e329fc6d9 100644 --- a/components/esp32/spiram_psram.c +++ b/components/esp32/spiram_psram.c @@ -33,6 +33,7 @@ #include "soc/efuse_periph.h" #include "soc/soc_caps.h" #include "driver/gpio.h" +#include "hal/gpio_hal.h" #include "driver/spi_common_internal.h" #include "driver/periph_ctrl.h" #include "bootloader_common.h" @@ -752,18 +753,18 @@ static void IRAM_ATTR psram_gpio_config(psram_io_t *psram_io, psram_cache_mode_t //select pin function gpio if ((psram_io->flash_clk_io == SPI_IOMUX_PIN_NUM_CLK) && (psram_io->flash_clk_io != psram_io->psram_clk_io)) { //flash clock signal should come from IO MUX. - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io->flash_clk_io], FUNC_SD_CLK_SPICLK); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io->flash_clk_io], FUNC_SD_CLK_SPICLK); } else { //flash clock signal should come from GPIO matrix. - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io->flash_clk_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io->flash_clk_io], PIN_FUNC_GPIO); } - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io->flash_cs_io], PIN_FUNC_GPIO); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io->psram_cs_io], PIN_FUNC_GPIO); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io->psram_clk_io], PIN_FUNC_GPIO); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io->psram_spiq_sd0_io], PIN_FUNC_GPIO); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io->psram_spid_sd1_io], PIN_FUNC_GPIO); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io->psram_spihd_sd2_io], PIN_FUNC_GPIO); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io->psram_spiwp_sd3_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io->flash_cs_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io->psram_cs_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io->psram_clk_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io->psram_spiq_sd0_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io->psram_spid_sd1_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io->psram_spihd_sd2_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io->psram_spiwp_sd3_io], PIN_FUNC_GPIO); uint32_t flash_id = g_rom_flashchip.device_id; if (flash_id == FLASH_ID_GD25LQ32C) { diff --git a/components/esp32/test/test_ahb_arb.c b/components/esp32/test/test_ahb_arb.c index 9fa555b418..1b3c3d5126 100644 --- a/components/esp32/test/test_ahb_arb.c +++ b/components/esp32/test/test_ahb_arb.c @@ -4,6 +4,7 @@ #include #include "esp32/rom/lldesc.h" #include "driver/periph_ctrl.h" +#include "hal/gpio_hal.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/semphr.h" @@ -36,16 +37,16 @@ static void lcdIfaceInit(void) //Init pins to i2s functions SET_PERI_REG_MASK(GPIO_ENABLE_W1TS_REG, (1 << 11) | (1 << 3) | (1 << 0) | (1 << 2) | (1 << 5) | (1 << 16) | (1 << 17) | (1 << 18) | (1 << 19) | (1 << 20)); //ENABLE GPIO oe_enable - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO16_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO17_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO18_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO19_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO20_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_CMD_U, 2); //11 - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO26_U, 0); //RS + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO0_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO2_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO5_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO16_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO17_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO18_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO19_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO20_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_CMD_U, 2); //11 + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO26_U, 0); //RS WRITE_PERI_REG(GPIO_FUNC0_OUT_SEL_CFG_REG, (148 << GPIO_FUNC0_OUT_SEL_S)); WRITE_PERI_REG(GPIO_FUNC2_OUT_SEL_CFG_REG, (149 << GPIO_FUNC0_OUT_SEL_S)); diff --git a/components/esp32/test/test_fastbus.c b/components/esp32/test/test_fastbus.c index 39adbe7616..d90f3debf3 100644 --- a/components/esp32/test/test_fastbus.c +++ b/components/esp32/test/test_fastbus.c @@ -10,6 +10,7 @@ #include "unity.h" #include "soc/uart_periph.h" #include "soc/dport_reg.h" +#include "hal/gpio_hal.h" #include "driver/gpio.h" @@ -104,8 +105,8 @@ TEST_CASE("Fast I/O bus test", "[hw][ignore]") } gpio_pullup_dis(10); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA2_U, FUNC_SD_DATA2_U1RXD); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA3_U, FUNC_SD_DATA3_U1TXD); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_DATA2_U, FUNC_SD_DATA2_U1RXD); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_DATA3_U, FUNC_SD_DATA3_U1TXD); int reg_val = (1 << UART_RXFIFO_FULL_THRHD_S); WRITE_PERI_REG(UART_CONF1_REG(1), reg_val); diff --git a/components/esp32/test/test_unal_dma.c b/components/esp32/test/test_unal_dma.c index 7984138070..f568e4d3d4 100644 --- a/components/esp32/test/test_unal_dma.c +++ b/components/esp32/test/test_unal_dma.c @@ -5,6 +5,7 @@ #include #include "esp32/rom/lldesc.h" #include "driver/periph_ctrl.h" +#include "hal/gpio_hal.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/semphr.h" @@ -32,16 +33,16 @@ static void dmaMemcpy(void *in, void *out, int len) //Init pins to i2s functions SET_PERI_REG_MASK(GPIO_ENABLE_W1TS_REG, (1 << 11) | (1 << 3) | (1 << 0) | (1 << 2) | (1 << 5) | (1 << 16) | (1 << 17) | (1 << 18) | (1 << 19) | (1 << 20)); //ENABLE GPIO oe_enable - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO16_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO17_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO18_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO19_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO20_U, 0); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_CMD_U, 2); //11 - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO26_U, 0); //RS + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO0_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO2_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO5_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO16_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO17_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO18_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO19_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO20_U, 0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_SD_CMD_U, 2); //11 + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO26_U, 0); //RS WRITE_PERI_REG(GPIO_FUNC0_OUT_SEL_CFG_REG, (148 << GPIO_FUNC0_OUT_SEL_S)); WRITE_PERI_REG(GPIO_FUNC2_OUT_SEL_CFG_REG, (149 << GPIO_FUNC0_OUT_SEL_S)); diff --git a/components/esp32s3/spiram_psram.c b/components/esp32s3/spiram_psram.c index c909d8ec1f..a7e295a135 100644 --- a/components/esp32s3/spiram_psram.c +++ b/components/esp32s3/spiram_psram.c @@ -39,6 +39,7 @@ #include "soc/soc.h" #include "soc/io_mux_reg.h" #include "driver/gpio.h" +#include "hal/gpio_hal.h" #include "driver/spi_common_internal.h" #include "driver/spi_common.h" #include "driver/periph_ctrl.h" @@ -379,10 +380,10 @@ static void IRAM_ATTR psram_gpio_config(psram_cache_mode_t mode) esp_rom_spiflash_select_qio_pins(psram_io.psram_spiwp_sd3_io, spiconfig); if (psram_io.psram_cs_io == SPI_CS1_GPIO_NUM) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io.psram_cs_io], FUNC_SPICS1_SPICS1); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io.psram_cs_io], FUNC_SPICS1_SPICS1); } else { esp_rom_gpio_connect_out_signal(psram_io.psram_cs_io, SPICS1_OUT_IDX, 0, 0); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[psram_io.psram_cs_io], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[psram_io.psram_cs_io], PIN_FUNC_GPIO); } } diff --git a/components/esp_eth/src/esp_eth_mac_esp32.c b/components/esp_eth/src/esp_eth_mac_esp32.c index 45d99788d0..e9c051dd6d 100644 --- a/components/esp_eth/src/esp_eth_mac_esp32.c +++ b/components/esp_eth/src/esp_eth_mac_esp32.c @@ -28,6 +28,7 @@ #include "freertos/semphr.h" #include "hal/cpu_hal.h" #include "hal/emac.h" +#include "hal/gpio_hal.h" #include "soc/soc.h" #include "sdkconfig.h" #include "esp_rom_gpio.h" @@ -318,14 +319,14 @@ static void emac_esp32_init_smi_gpio(emac_esp32_t *emac) /* Setup SMI MDC GPIO */ gpio_set_direction(emac->smi_mdc_gpio_num, GPIO_MODE_OUTPUT); esp_rom_gpio_connect_out_signal(emac->smi_mdc_gpio_num, EMAC_MDC_O_IDX, false, false); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[emac->smi_mdc_gpio_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[emac->smi_mdc_gpio_num], PIN_FUNC_GPIO); } if (emac->smi_mdio_gpio_num >= 0) { /* Setup SMI MDIO GPIO */ gpio_set_direction(emac->smi_mdio_gpio_num, GPIO_MODE_INPUT_OUTPUT); esp_rom_gpio_connect_out_signal(emac->smi_mdio_gpio_num, EMAC_MDO_O_IDX, false, false); esp_rom_gpio_connect_in_signal(emac->smi_mdio_gpio_num, EMAC_MDI_I_IDX, false); - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[emac->smi_mdio_gpio_num], PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(GPIO_PIN_MUX_REG[emac->smi_mdio_gpio_num], PIN_FUNC_GPIO); } } diff --git a/components/espcoredump/src/core_dump_uart.c b/components/espcoredump/src/core_dump_uart.c index a04967d95c..f510afde38 100644 --- a/components/espcoredump/src/core_dump_uart.c +++ b/components/espcoredump/src/core_dump_uart.c @@ -15,6 +15,7 @@ #include "soc/uart_periph.h" #include "soc/gpio_periph.h" #include "driver/gpio.h" +#include "hal/gpio_hal.h" #include "esp_core_dump_types.h" #include "esp_core_dump_port.h" #include "esp_core_dump_common.h" @@ -147,8 +148,8 @@ void esp_core_dump_to_uart(panic_info_t *info) //Make sure txd/rxd are enabled // use direct reg access instead of gpio_pullup_dis which can cause exception when flash cache is disabled REG_CLR_BIT(GPIO_PIN_REG_1, FUN_PU); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_U0RXD_U0RXD); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD_U0TXD); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_U0RXD_U, FUNC_U0RXD_U0RXD); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD_U0TXD); ESP_COREDUMP_LOGI("Press Enter to print core dump to UART..."); const int cpu_ticks_per_ms = esp_clk_cpu_freq() / 1000; diff --git a/components/hal/component.mk b/components/hal/component.mk index 4c9254ba5f..da3d6456b9 100644 --- a/components/hal/component.mk +++ b/components/hal/component.mk @@ -7,3 +7,7 @@ COMPONENT_OBJEXCLUDE += ./spi_slave_hd_hal.o ./spi_flash_hal_gpspi.o ./spi_slave ifndef CONFIG_ETH_USE_ESP32_EMAC COMPONENT_OBJEXCLUDE += esp32/emac_hal.o endif + +ifdef IS_BOOTLOADER_BUILD + COMPONENT_OBJEXCLUDE += esp32/emac_hal.o +endif diff --git a/components/hal/esp32/emac_hal.c b/components/hal/esp32/emac_hal.c index b1ca6ff76f..5ba3c4aec9 100644 --- a/components/hal/esp32/emac_hal.c +++ b/components/hal/esp32/emac_hal.c @@ -17,6 +17,7 @@ #include "soc/gpio_periph.h" #include "soc/rtc.h" #include "hal/emac.h" +#include "hal/gpio_hal.h" #define ETH_CRC_LENGTH (4) @@ -63,27 +64,27 @@ void emac_hal_lowlevel_init(emac_hal_context_t *hal) { /* GPIO configuration */ /* TX_EN to GPIO21 */ - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO21_U, FUNC_GPIO21_EMAC_TX_EN); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO21_U, FUNC_GPIO21_EMAC_TX_EN); PIN_INPUT_DISABLE(GPIO_PIN_MUX_REG[21]); /* TXD0 to GPIO19 */ - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO19_U, FUNC_GPIO19_EMAC_TXD0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO19_U, FUNC_GPIO19_EMAC_TXD0); PIN_INPUT_DISABLE(GPIO_PIN_MUX_REG[19]); /* TXD1 to GPIO22 */ - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO22_U, FUNC_GPIO22_EMAC_TXD1); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO22_U, FUNC_GPIO22_EMAC_TXD1); PIN_INPUT_DISABLE(GPIO_PIN_MUX_REG[22]); /* RXD0 to GPIO25 */ - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO25_U, FUNC_GPIO25_EMAC_RXD0); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO25_U, FUNC_GPIO25_EMAC_RXD0); PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[25]); /* RXD1 to GPIO26 */ - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO26_U, FUNC_GPIO26_EMAC_RXD1); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO26_U, FUNC_GPIO26_EMAC_RXD1); PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[26]); /* CRS_DV to GPIO27 */ - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO27_U, FUNC_GPIO27_EMAC_RX_DV); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO27_U, FUNC_GPIO27_EMAC_RX_DV); PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[27]); #if CONFIG_ETH_RMII_CLK_INPUT #if CONFIG_ETH_RMII_CLK_IN_GPIO == 0 /* RMII clock (50MHz) input to GPIO0 */ - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_EMAC_TX_CLK); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_EMAC_TX_CLK); PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[0]); #else #error "ESP32 EMAC only support input RMII clock to GPIO0" @@ -92,15 +93,15 @@ void emac_hal_lowlevel_init(emac_hal_context_t *hal) #if CONFIG_ETH_RMII_CLK_OUTPUT #if CONFIG_ETH_RMII_CLK_OUTPUT_GPIO0 /* APLL clock output to GPIO0 (must be configured to 50MHz!) */ - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); PIN_INPUT_DISABLE(GPIO_PIN_MUX_REG[0]); #elif CONFIG_ETH_RMII_CLK_OUT_GPIO == 16 /* RMII CLK (50MHz) output to GPIO16 */ - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO16_U, FUNC_GPIO16_EMAC_CLK_OUT); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO16_U, FUNC_GPIO16_EMAC_CLK_OUT); PIN_INPUT_DISABLE(GPIO_PIN_MUX_REG[16]); #elif CONFIG_ETH_RMII_CLK_OUT_GPIO == 17 /* RMII CLK (50MHz) output to GPIO17 */ - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO17_U, FUNC_GPIO17_EMAC_CLK_OUT_180); + gpio_hal_iomux_func_sel(PERIPHS_IO_MUX_GPIO17_U, FUNC_GPIO17_EMAC_CLK_OUT_180); PIN_INPUT_DISABLE(GPIO_PIN_MUX_REG[17]); #endif #endif // CONFIG_ETH_RMII_CLK_OUTPUT diff --git a/components/hal/esp32/include/hal/gpio_ll.h b/components/hal/esp32/include/hal/gpio_ll.h index a421cab413..8c1acb3a1c 100644 --- a/components/hal/esp32/include/hal/gpio_ll.h +++ b/components/hal/esp32/include/hal/gpio_ll.h @@ -567,6 +567,17 @@ static inline void gpio_ll_iomux_in(gpio_dev_t *hw, uint32_t gpio, uint32_t sign PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[gpio]); } +/** + * @brief Select a function for the pin in the IOMUX + * + * @param pin_name Pin name to configure + * @param func Function to assign to the pin + */ +static inline void gpio_ll_iomux_func_sel(uint32_t pin_name, uint32_t func) +{ + PIN_FUNC_SELECT(pin_name, func); +} + /** * @brief Set peripheral output to an GPIO pad through the IOMUX. * @@ -580,7 +591,7 @@ static inline void gpio_ll_iomux_out(gpio_dev_t *hw, uint8_t gpio_num, int func, { hw->func_out_sel_cfg[gpio_num].oen_sel = 0; hw->func_out_sel_cfg[gpio_num].oen_inv_sel = oen_inv; - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], func); + gpio_ll_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], func); } #ifdef __cplusplus diff --git a/components/hal/esp32c3/include/hal/gpio_ll.h b/components/hal/esp32c3/include/hal/gpio_ll.h index 5fdd8f38bb..6ba4d601b9 100644 --- a/components/hal/esp32c3/include/hal/gpio_ll.h +++ b/components/hal/esp32c3/include/hal/gpio_ll.h @@ -32,6 +32,17 @@ extern "C" { #endif +/* + * The following defines are used to disable USB JTAG when pins 18 and pins 19 + * are set to be used as GPIO. + * See gpio_pad_select_gpio() below. + * + * TODO: Delete these definitions once the USB device registers definition is + * merged. + */ +#define USB_DEVICE_CONF0_REG (0x60043018) +#define USB_DEVICE_USB_PAD_ENABLE (BIT(14)) + // Get GPIO hardware instance with giving gpio num #define GPIO_LL_GET_HW(num) (((num) == 0) ? (&GPIO) : NULL) @@ -379,6 +390,20 @@ static inline void gpio_ll_iomux_in(gpio_dev_t *hw, uint32_t gpio, uint32_t sign PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[gpio]); } +/** + * @brief Select a function for the pin in the IOMUX + * + * @param pin_name Pin name to configure + * @param func Function to assign to the pin + */ +static inline void gpio_ll_iomux_func_sel(uint32_t pin_name, uint32_t func) +{ + if (pin_name == IO_MUX_GPIO18_REG || pin_name == IO_MUX_GPIO19_REG) { + CLEAR_PERI_REG_MASK(USB_DEVICE_CONF0_REG, USB_DEVICE_USB_PAD_ENABLE); + } + PIN_FUNC_SELECT(pin_name, func); +} + /** * @brief Set peripheral output to an GPIO pad through the IOMUX. * @@ -392,7 +417,7 @@ static inline void gpio_ll_iomux_out(gpio_dev_t *hw, uint8_t gpio_num, int func, { hw->func_out_sel_cfg[gpio_num].oen_sel = 0; hw->func_out_sel_cfg[gpio_num].oen_inv_sel = oen_inv; - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], func); + gpio_ll_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], func); } static inline void gpio_ll_force_hold_all(gpio_dev_t *hw) diff --git a/components/hal/esp32s2/include/hal/gpio_ll.h b/components/hal/esp32s2/include/hal/gpio_ll.h index aa02c11199..d6330db630 100644 --- a/components/hal/esp32s2/include/hal/gpio_ll.h +++ b/components/hal/esp32s2/include/hal/gpio_ll.h @@ -391,6 +391,17 @@ static inline void gpio_ll_iomux_in(gpio_dev_t *hw, uint32_t gpio, uint32_t sign PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[gpio]); } +/** + * @brief Select a function for the pin in the IOMUX + * + * @param pin_name Pin name to configure + * @param func Function to assign to the pin + */ +static inline void gpio_ll_iomux_func_sel(uint32_t pin_name, uint32_t func) +{ + PIN_FUNC_SELECT(pin_name, func); +} + /** * @brief Set peripheral output to an GPIO pad through the IOMUX. * @@ -404,7 +415,7 @@ static inline void gpio_ll_iomux_out(gpio_dev_t *hw, uint8_t gpio_num, int func, { hw->func_out_sel_cfg[gpio_num].oen_sel = 0; hw->func_out_sel_cfg[gpio_num].oen_inv_sel = oen_inv; - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], func); + gpio_ll_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], func); } static inline void gpio_ll_force_hold_all(gpio_dev_t *hw) diff --git a/components/hal/esp32s3/include/hal/gpio_ll.h b/components/hal/esp32s3/include/hal/gpio_ll.h index 783def85e6..234b477578 100644 --- a/components/hal/esp32s3/include/hal/gpio_ll.h +++ b/components/hal/esp32s3/include/hal/gpio_ll.h @@ -391,6 +391,17 @@ static inline void gpio_ll_iomux_in(gpio_dev_t *hw, uint32_t gpio, uint32_t sign PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[gpio]); } +/** + * @brief Select a function for the pin in the IOMUX + * + * @param pin_name Pin name to configure + * @param func Function to assign to the pin + */ +static inline void gpio_ll_iomux_func_sel(uint32_t pin_name, uint32_t func) +{ + PIN_FUNC_SELECT(pin_name, func); +} + /** * @brief Set peripheral output to an GPIO pad through the IOMUX. * @@ -404,7 +415,7 @@ static inline void gpio_ll_iomux_out(gpio_dev_t *hw, uint8_t gpio_num, int func, { hw->func_out_sel_cfg[gpio_num].oen_sel = 0; hw->func_out_sel_cfg[gpio_num].oen_inv_sel = oen_inv; - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], func); + gpio_ll_iomux_func_sel(GPIO_PIN_MUX_REG[gpio_num], func); } static inline void gpio_ll_force_hold_all(gpio_dev_t *hw) diff --git a/components/hal/include/hal/gpio_hal.h b/components/hal/include/hal/gpio_hal.h index 5a403f529c..018b4be128 100644 --- a/components/hal/include/hal/gpio_hal.h +++ b/components/hal/include/hal/gpio_hal.h @@ -466,6 +466,14 @@ void gpio_hal_sleep_pupd_config_unapply(gpio_hal_context_t *hal, gpio_num_t gpio #endif //SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP +/** + * @brief Select a function for the pin in the IOMUX + * + * @param pin_name Pin name to configure + * @param func Function to assign to the pin + */ +#define gpio_hal_iomux_func_sel(pin_name, func) gpio_ll_iomux_func_sel(pin_name, func) + #ifdef __cplusplus } #endif diff --git a/components/spi_flash/esp_flash_spi_init.c b/components/spi_flash/esp_flash_spi_init.c index 69330fd794..ee01c7f2ba 100644 --- a/components/spi_flash/esp_flash_spi_init.c +++ b/components/spi_flash/esp_flash_spi_init.c @@ -24,6 +24,7 @@ #include "hal/spi_types.h" #include "driver/spi_common_internal.h" #include "hal/spi_flash_hal.h" +#include "hal/gpio_hal.h" #include "esp_flash_internal.h" #include "esp_rom_gpio.h" #if CONFIG_IDF_TARGET_ESP32 @@ -127,7 +128,7 @@ static IRAM_ATTR NOINLINE_ATTR void cs_initialize(esp_flash_t *chip, const esp_f chip->os_func->start(chip->os_func_data); PIN_INPUT_ENABLE(iomux_reg); if (use_iomux) { - PIN_FUNC_SELECT(iomux_reg, spics_func); + gpio_hal_iomux_func_sel(iomux_reg, spics_func); } else { #if SOC_GPIO_PIN_COUNT <= 32 GPIO.enable_w1ts.val = (0x1 << cs_io_num); @@ -143,7 +144,7 @@ static IRAM_ATTR NOINLINE_ATTR void cs_initialize(esp_flash_t *chip, const esp_f if (cs_id == 0) { esp_rom_gpio_connect_in_signal(cs_io_num, spics_in, false); } - PIN_FUNC_SELECT(iomux_reg, PIN_FUNC_GPIO); + gpio_hal_iomux_func_sel(iomux_reg, PIN_FUNC_GPIO); } chip->os_func->end(chip->os_func_data); }