Перейти к содержанию

Регистры 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_MUX0x6000 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_CTRL0x0000Выбор тактов на выходах CLK_OUT1…30x0000 07FF
IO_MUX_GPIOn_REG0x0004 + n · 0x0004Функция и электрические настройки вывода GPIOn0x0000 0B00
IO_MUX_DATE_REG0x00FCВерсия блока: дата ревизии аппаратуры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.

1514131211109876543210
—CLK_OUT3CLK_OUT2CLK_OUT1
ПолеБитыДоступСбросНазначение
CLK_OUT311:8R/W0x7Источник тактов для выхода CLK_OUT3
CLK_OUT27:4R/W0xFИсточник тактов для выхода CLK_OUT2
CLK_OUT13:0R/W0xFИсточник тактов для выхода CLK_OUT1

IO_MUX_GPIOn_REG — функция и электрические настройки вывода GPIOn

22 копии, n = 0…21: смещение 0x0004 + n · 0x0004, после сброса 0x0000 0B00. TRM: регистр 5.21.

1514131211109876543210
GPIOn_FILTER_ENGPIOn_MCU_SELGPIOn_FUN_DRVGPIOn_FUN_IEGPIOn_FUN_WPUGPIOn_FUN_WPDGPIOn_MCU_DRVGPIOn_MCU_IEGPIOn_MCU_WPUGPIOn_MCU_WPDGPIOn_SLP_SELGPIOn_MCU_OE
ПолеБитыДоступСбросНазначение
GPIOn_FILTER_EN15R/W0Фильтр коротких импульсов на входе
GPIOn_MCU_SEL14:12R/W0x0Функция вывода по таблице IO MUX: 0 — функция 0, 1 — GPIO и так далее
GPIOn_FUN_DRV11:10R/W0x2Сила выхода в активном режиме, 0…3 (от 5 до 40 мА)
GPIOn_FUN_IE9R/W1Разрешение входа в активном режиме
GPIOn_FUN_WPU8R/W1Подтяжка к питанию в активном режиме
GPIOn_FUN_WPD7R/W0Подтяжка к земле в активном режиме
GPIOn_MCU_DRV6:5R/W0x0Сила выхода во сне
GPIOn_MCU_IE4R/W0Разрешение входа во сне
GPIOn_MCU_WPU3R/W0Подтяжка к питанию во сне
GPIOn_MCU_WPD2R/W0Подтяжка к земле во сне
GPIOn_SLP_SEL1R/W0Во сне действуют поля MCU_* вместо FUN_*
GPIOn_MCU_OE0R/W0Разрешение выхода во сне

IO_MUX_DATE_REG — версия блока: дата ревизии аппаратуры

Смещение 0x00FC, адрес 0x6000 90FC, после сброса 0x0200 6050. TRM: регистр 5.22.

ПолеБитыДоступСброс
REG_DATE27:0R/W0x2006050

Частые вопросы

Какой ток даёт вывод 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.

Источники

  1. Espressif. ESP32-C3 Technical Reference Manual, версия 1.4 — глава 5: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
  2. Espressif. SVD svd/esp32c3.svd, версия 18 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
  3. Espressif. ESP-IDF v6.1: заголовки components/soc/esp32c3/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT

Нашли ошибку в регистрах?

Другие регистры ESP32-C3

Статьи, инструменты и термины