Регистры IO MUX ESP32-C3
Регистры IO MUX ESP32-C3: какая функция подключена к выводу, подтяжки к питанию и к земле, разрешение входа, сила выходного тока, фильтр помех и отдельные настройки на время сна для каждого из 22 GPIO.
Блок IO MUX по адресу 0x6000 9000 содержит по регистру на каждый вывод: IO_MUX_GPIOn_REG лежит по смещению 0x04 + 4 · n. В ESP-IDF у этих регистров два имени — по номеру GPIO (IO_MUX_GPIO8_REG) и по названию площадки (PERIPHS_IO_MUX_GPIO8_U, PERIPHS_IO_MUX_MTMS_U для GPIO4).
Поле MCU_SEL выбирает функцию вывода по таблице IO MUX: функция 1 у всех выводов — GPIO, остальные — прямые подключения UART0, SPI-флеш-памяти и JTAG без матрицы GPIO. Поля FUN_* действуют в активном режиме, поля MCU_* — во сне, если для вывода установлен SLP_SEL.
Регистр PIN_CTRL выбирает, какие внутренние такты выводятся на CLK_OUT1…CLK_OUT3.
| Экземпляр | Базовый адрес |
|---|---|
| IO_MUX | 0x6000 9000 |
Пример на C
GPIO4 — вход с подтяжкой, сила выхода GPIO5 (soc/io_mux_reg.h). Макросы доступа REG_WRITE, REG_READ, REG_SET_BIT, REG_CLR_BIT, REG_GET_BIT, REG_SET_FIELD и REG_GET_FIELD объявлены в soc/soc.h ESP-IDF; поле задаётся именем макроса без суффикса, маска и сдвиг берутся из его вариантов _V и _S.
#include "soc/io_mux_reg.h"
PIN_FUNC_SELECT(IO_MUX_GPIO4_REG, PIN_FUNC_GPIO); // функция 1 — GPIO
PIN_INPUT_ENABLE(IO_MUX_GPIO4_REG); // FUN_IE = 1
REG_SET_BIT(IO_MUX_GPIO4_REG, FUN_PU); // подтяжка к питанию
REG_CLR_BIT(IO_MUX_GPIO4_REG, FUN_PD); // без подтяжки к земле
REG_SET_FIELD(IO_MUX_GPIO5_REG, FUN_DRV, 3); // около 40 мАРегистры блока
| Регистр (ESP-IDF) | Смещение | Назначение | После сброса |
|---|---|---|---|
| PIN_CTRL | 0x0000 | Выбор тактов на выходах CLK_OUT1…3 | 0x0000 07FF |
| IO_MUX_GPIOn_REG | 0x0004 + n · 0x0004 | Функция и электрические настройки вывода GPIOn | 0x0000 0B00 |
| IO_MUX_DATE_REG | 0x00FC | Версия блока: дата ревизии аппаратуры | 0x0200 6050 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
PIN_CTRL — выбор тактов на выходах CLK_OUT1…3
Смещение 0x0000, адрес 0x6000 9000, после сброса 0x0000 07FF. TRM: регистр 5.20.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | CLK_OUT3 | CLK_OUT2 | CLK_OUT1 | ||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CLK_OUT3 | 11:8 | R/W | 0x7 | Источник тактов для выхода CLK_OUT3 |
| CLK_OUT2 | 7:4 | R/W | 0xF | Источник тактов для выхода CLK_OUT2 |
| CLK_OUT1 | 3:0 | R/W | 0xF | Источник тактов для выхода CLK_OUT1 |
IO_MUX_GPIOn_REG — функция и электрические настройки вывода GPIOn
22 копии, n = 0…21: смещение 0x0004 + n · 0x0004, после сброса 0x0000 0B00. TRM: регистр 5.21.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GPIOn_FILTER_EN | GPIOn_MCU_SEL | GPIOn_FUN_DRV | GPIOn_FUN_IE | GPIOn_FUN_WPU | GPIOn_FUN_WPD | GPIOn_MCU_DRV | GPIOn_MCU_IE | GPIOn_MCU_WPU | GPIOn_MCU_WPD | GPIOn_SLP_SEL | GPIOn_MCU_OE | ||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| GPIOn_FILTER_EN | 15 | R/W | 0 | Фильтр коротких импульсов на входе |
| GPIOn_MCU_SEL | 14:12 | R/W | 0x0 | Функция вывода по таблице IO MUX: 0 — функция 0, 1 — GPIO и так далее |
| GPIOn_FUN_DRV | 11:10 | R/W | 0x2 | Сила выхода в активном режиме, 0…3 (от 5 до 40 мА) |
| GPIOn_FUN_IE | 9 | R/W | 1 | Разрешение входа в активном режиме |
| GPIOn_FUN_WPU | 8 | R/W | 1 | Подтяжка к питанию в активном режиме |
| GPIOn_FUN_WPD | 7 | R/W | 0 | Подтяжка к земле в активном режиме |
| GPIOn_MCU_DRV | 6:5 | R/W | 0x0 | Сила выхода во сне |
| GPIOn_MCU_IE | 4 | R/W | 0 | Разрешение входа во сне |
| GPIOn_MCU_WPU | 3 | R/W | 0 | Подтяжка к питанию во сне |
| GPIOn_MCU_WPD | 2 | R/W | 0 | Подтяжка к земле во сне |
| GPIOn_SLP_SEL | 1 | R/W | 0 | Во сне действуют поля MCU_* вместо FUN_* |
| GPIOn_MCU_OE | 0 | R/W | 0 | Разрешение выхода во сне |
IO_MUX_DATE_REG — версия блока: дата ревизии аппаратуры
Смещение 0x00FC, адрес 0x6000 90FC, после сброса 0x0200 6050. TRM: регистр 5.22.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| REG_DATE | 27:0 | R/W | 0x2006050 |
Частые вопросы
Какой ток даёт вывод ESP32-C3 при разных FUN_DRV?
По TRM: 0 — около 5 мА, 1 — около 10 мА, 2 — около 20 мА, 3 — около 40 мА; у выводов GPIO2, GPIO3, GPIO5, GPIO18 и GPIO19 значения 1 и 2 переставлены (1 — около 20 мА, 2 — около 10 мА). После сброса записано 2.
Как включить подтяжку к питанию на входе ESP32-C3 через регистры?
Установить бит FUN_WPU в регистре IO_MUX_GPIOn_REG и бит FUN_IE, разрешающий вход: REG_SET_BIT(IO_MUX_GPIO4_REG, FUN_PU) и PIN_INPUT_ENABLE(IO_MUX_GPIO4_REG). В ESP-IDF маска бита подтяжки называется FUN_PU, в TRM — FUN_WPU.
Источники
- Espressif. ESP32-C3 Technical Reference Manual, версия 1.4 — глава 5: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
- Espressif. SVD svd/esp32c3.svd, версия 18 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
- Espressif. ESP-IDF v6.1: заголовки components/soc/esp32c3/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT
Нашли ошибку в регистрах?
Другие регистры ESP32-C3
- Все регистры ESP32-C3Блоки периферии и базовые адреса
- GPIO — выводы общего назначения и матрица GPIOGPIO_BT_SELECT_REG, GPIO_OUT_REG, GPIO_OUT_W1TS_REG, GPIO_OUT_W1TC_REG
- UART — универсальный асинхронный приёмопередатчикUART_FIFO_REG, UART_INT_RAW_REG, UART_INT_ST_REG, UART_INT_ENA_REG
- SPI — контроллер SPI общего назначения GP-SPI2SPI_CMD_REG, SPI_ADDR_REG, SPI_CTRL_REG, SPI_CLOCK_REG
- I2C — контроллер шины I2CI2C_SCL_LOW_PERIOD_REG, I2C_CTR_REG, I2C_SR_REG, I2C_TO_REG
- LEDC — контроллер ШИМ для светодиодов и не толькоLEDC_LSCHn_CONF0_REG, LEDC_LSCHn_HPOINT_REG, LEDC_LSCHn_DUTY_REG, LEDC_LSCHn_CONF1_REG
- TIMG — группа таймеров: таймер общего назначения и сторожTIMG_T0CONFIG_REG, TIMG_T0LO_REG, TIMG_T0HI_REG, TIMG_T0UPDATE_REG
- RMT — контроллер инфракрасного пульта и импульсных протоколовRMT_CHnDATA_REG, RMT_CHnCONF0_REG, RMT_CHnCONF0_REG, RMT_CHnCONF1_REG
- SYSTIMER — системный таймерSYSTIMER_CONF_REG, SYSTIMER_UNITn_OP_REG, SYSTIMER_UNITn_LOAD_HI_REG, SYSTIMER_UNITn_LOAD_LO_REG
- RTC_CNTL — управление питанием, сном и RTCRTC_CNTL_OPTIONS0_REG, RTC_CNTL_SLP_TIMER0_REG, RTC_CNTL_SLP_TIMER1_REG, RTC_CNTL_TIME_UPDATE_REG
- АЦП — 12-битный SAR АЦП и датчик температурыAPB_SARADC_CTRL_REG, APB_SARADC_CTRL2_REG, APB_SARADC_FILTER_CTRL1_REG, APB_SARADC_SAR_PATT_TABn_REG
- USB Serial/JTAG — встроенный USB-порт: виртуальный COM-порт и JTAGUSB_SERIAL_JTAG_EP1_REG, USB_SERIAL_JTAG_EP1_CONF_REG, USB_SERIAL_JTAG_INT_RAW_REG, USB_SERIAL_JTAG_INT_ST_REG
- eFuse — однократно программируемая память настроек и ключейEFUSE_RD_WR_DIS_REG, EFUSE_RD_REPEAT_DATA0_REG, EFUSE_RD_REPEAT_DATA1_REG, EFUSE_RD_REPEAT_DATA2_REG
- INTERRUPT — матрица прерыванийINTERRUPT_CORE0_PWR_INTR_MAP_REG, INTERRUPT_CORE0_I2C_MST_INT_MAP_REG, INTERRUPT_CORE0_SLCn_INTR_MAP_REG, INTERRUPT_CORE0_APB_CTRL_INTR_MAP_REG