Регистры GPIO ESP32-S3
Регистры GPIO ESP32-S3: уровни на выходах и входах 45 выводов в двух банках, установка и сброс битов без чтения-изменения-записи, условия прерываний и матрица, которая подключает сигнал периферии к любому выводу.
Содержание
- Пример на C
- Регистры блока
- GPIO_BT_SELECT_REG
- GPIO_OUT_REG
- GPIO_OUT_W1TS_REG
- GPIO_OUT_W1TC_REG
- GPIO_OUT1_REG
- GPIO_OUT1_W1TS_REG
- GPIO_OUT1_W1TC_REG
- GPIO_SDIO_SELECT_REG
- GPIO_ENABLE_REG
- GPIO_ENABLE_W1TS_REG
- GPIO_ENABLE_W1TC_REG
- GPIO_ENABLE1_REG
- GPIO_ENABLE1_W1TS_REG
- GPIO_ENABLE1_W1TC_REG
- GPIO_STRAP_REG
- GPIO_IN_REG
- GPIO_IN1_REG
- GPIO_STATUS_REG
- GPIO_STATUS_W1TS_REG
- GPIO_STATUS_W1TC_REG
- GPIO_STATUS1_REG
- GPIO_STATUS1_W1TS_REG
- GPIO_STATUS1_W1TC_REG
- GPIO_PCPU_INT_REG
- GPIO_PCPU_NMI_INT_REG
- GPIO_PCPU_INT1_REG
- GPIO_PCPU_NMI_INT1_REG
- GPIO_PINn_REG
- GPIO_STATUS_NEXT_REG
- GPIO_STATUS_NEXT1_REG
- GPIO_FUNCn_IN_SEL_CFG_REG
- GPIO_FUNCn_OUT_SEL_CFG_REG
- GPIO_CLOCK_GATE_REG
- GPIO_DATE_REG
Блок GPIO по адресу 0x6000 4000 обслуживает выводы GPIO0…21 и GPIO26…48 — всего 45. Первый банк — регистры GPIO_OUT_REG, GPIO_ENABLE_REG, GPIO_IN_REG и GPIO_STATUS_REG: бит n относится к GPIOn, биты 22…25 не действуют. Второй банк — регистры с цифрой 1 (GPIO_OUT1_REG и другие): бит 0 — GPIO32, бит 16 — GPIO48. Пары W1TS и W1TC меняют только биты, в которые записана единица.
Матрица GPIO соединяет 175 входных и 184 выходных сигнала периферии с выводами. GPIO_FUNCn_IN_SEL_CFG_REG (n = 0…255, номер сигнала) выбирает вывод для входного сигнала; значения 0x38 и 0x3C вместо номера вывода дают постоянные 1 и 0. GPIO_FUNCn_OUT_SEL_CFG_REG (n — номер вывода) выбирает сигнал для выхода; значение 256 отдаёт вывод регистрам GPIO_OUT и GPIO_ENABLE. Номера сигналов — в таблице 6.11-1 TRM и в заголовке soc/gpio_sig_map.h ESP-IDF.
Функцию вывода, подтяжки и силу выхода задают регистры IO MUX: простой выход через матрицу требует выбрать в поле MCU_SEL функцию 1 (GPIO) — она первая у всех выводов.
| Экземпляр | Базовый адрес |
|---|---|
| GPIO | 0x6000 4000 |
Пример на C
GPIO2 — выход, GPIO40 — вход во втором банке (ESP-IDF, soc/gpio_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/gpio_reg.h"
#include "soc/io_mux_reg.h"
#include "soc/gpio_sig_map.h"
PIN_FUNC_SELECT(IO_MUX_GPIO2_REG, PIN_FUNC_GPIO); // функция 1 — GPIO
REG_WRITE(GPIO_FUNC2_OUT_SEL_CFG_REG, SIG_GPIO_OUT_IDX); // 256: выход из GPIO_OUT_REG
REG_WRITE(GPIO_ENABLE_W1TS_REG, BIT(2)); // включить выходной драйвер
REG_WRITE(GPIO_OUT_W1TS_REG, BIT(2)); // GPIO2 = 1
REG_WRITE(GPIO_OUT_W1TC_REG, BIT(2)); // GPIO2 = 0
PIN_FUNC_SELECT(IO_MUX_GPIO40_REG, PIN_FUNC_GPIO);
PIN_INPUT_ENABLE(IO_MUX_GPIO40_REG); // FUN_IE = 1
uint32_t level = (REG_READ(GPIO_IN1_REG) >> (40 - 32)) & 1; // уровень на GPIO40Регистры блока
| Регистр (ESP-IDF) | Смещение | Назначение | После сброса |
|---|---|---|---|
| GPIO_BT_SELECT_REG | 0x0000 | Зарезервировано | 0x0000 0000 |
| GPIO_OUT_REG | 0x0004 | Уровни на выходах GPIO0…21 и GPIO26…31 | 0x0000 0000 |
| GPIO_OUT_W1TS_REG | 0x0008 | Банк 0: установка выходов записью единицы | 0x0000 0000 |
| GPIO_OUT_W1TC_REG | 0x000C | Банк 0: сброс выходов записью единицы | 0x0000 0000 |
| GPIO_OUT1_REG | 0x0010 | Уровни на выходах GPIO32…48 | 0x0000 0000 |
| GPIO_OUT1_W1TS_REG | 0x0014 | Банк 1: установка выходов записью единицы | 0x0000 0000 |
| GPIO_OUT1_W1TC_REG | 0x0018 | Банк 1: сброс выходов записью единицы | 0x0000 0000 |
| GPIO_SDIO_SELECT_REG | 0x001C | Зарезервировано | 0x0000 0000 |
| GPIO_ENABLE_REG | 0x0020 | Разрешение выходов GPIO0…31 | 0x0000 0000 |
| GPIO_ENABLE_W1TS_REG | 0x0024 | Банк 0: включение выходов записью единицы | 0x0000 0000 |
| GPIO_ENABLE_W1TC_REG | 0x0028 | Банк 0: выключение выходов записью единицы | 0x0000 0000 |
| GPIO_ENABLE1_REG | 0x002C | Разрешение выходов GPIO32…48 | 0x0000 0000 |
| GPIO_ENABLE1_W1TS_REG | 0x0030 | Банк 1: включение выходов записью единицы | 0x0000 0000 |
| GPIO_ENABLE1_W1TC_REG | 0x0034 | Банк 1: выключение выходов записью единицы | 0x0000 0000 |
| GPIO_STRAP_REG | 0x0038 | Уровни strapping-выводов, защёлкнутые при сбросе | 0x0000 0000 |
| GPIO_IN_REG | 0x003C | Уровни на входах GPIO0…31 | 0x0000 0000 |
| GPIO_IN1_REG | 0x0040 | Уровни на входах GPIO32…48 | 0x0000 0000 |
| GPIO_STATUS_REG | 0x0044 | Банк 0: флаги прерываний выводов | 0x0000 0000 |
| GPIO_STATUS_W1TS_REG | 0x0048 | Банк 0: установка флагов прерываний записью единицы | 0x0000 0000 |
| GPIO_STATUS_W1TC_REG | 0x004C | Банк 0: сброс флагов прерываний записью единицы | 0x0000 0000 |
| GPIO_STATUS1_REG | 0x0050 | Банк 1: флаги прерываний выводов | 0x0000 0000 |
| GPIO_STATUS1_W1TS_REG | 0x0054 | Банк 1: установка флагов прерываний записью единицы | 0x0000 0000 |
| GPIO_STATUS1_W1TC_REG | 0x0058 | Банк 1: сброс флагов прерываний записью единицы | 0x0000 0000 |
| GPIO_PCPU_INT_REG | 0x005C | Банк 0: прерывания выводов, разрешённые для ядра | 0x0000 0000 |
| GPIO_PCPU_NMI_INT_REG | 0x0060 | Банк 0: немаскируемые прерывания выводов | 0x0000 0000 |
| GPIO_PCPU_INT1_REG | 0x0068 | Банк 1: прерывания выводов, разрешённые для ядра | 0x0000 0000 |
| GPIO_PCPU_NMI_INT1_REG | 0x006C | Банк 1: немаскируемые прерывания выводов | 0x0000 0000 |
| GPIO_PINn_REG | 0x0074 + n · 0x0004 | Прерывание, пробуждение и тип выхода вывода GPIOn | 0x0000 0000 |
| GPIO_STATUS_NEXT_REG | 0x014C | Банк 0: текущие сигналы прерываний выводов | 0x0000 0000 |
| GPIO_STATUS_NEXT1_REG | 0x0150 | Банк 1: текущие сигналы прерываний выводов | 0x0000 0000 |
| GPIO_FUNCn_IN_SEL_CFG_REG | 0x0154 + n · 0x0004 | Вывод для входного сигнала периферии n | 0x0000 0000 |
| GPIO_FUNCn_OUT_SEL_CFG_REG | 0x0554 + n · 0x0004 | Сигнал периферии на выходе GPIOn | 0x0000 0100 |
| GPIO_CLOCK_GATE_REG | 0x062C | Тактирование блока GPIO | 0x0000 0001 |
| GPIO_DATE_REG | 0x06FC | Версия блока: дата ревизии аппаратуры | 0x0190 7040 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
GPIO_BT_SELECT_REG — зарезервировано
Смещение 0x0000, адрес 0x6000 4000, после сброса 0x0000 0000. TRM: регистр 6.1.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| BT_SEL | 31:0 | R/W | 0x0000 0000 |
GPIO_OUT_REG — уровни на выходах GPIO0…21 и GPIO26…31
Смещение 0x0004, адрес 0x6000 4004, после сброса 0x0000 0000. TRM: регистр 6.2.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OUT_DATA_ORIG | 31:0 | R/W | 0x0000 0000 | Биты 0…21 — выходы GPIO0…21, биты 26…31 — GPIO26…31, биты 22…25 не действуют |
GPIO_OUT_W1TS_REG — банк 0: установка выходов записью единицы
Смещение 0x0008, адрес 0x6000 4008, после сброса 0x0000 0000. TRM: регистр 6.3.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| OUT_W1TS | 31:0 | WO | 0x0000 0000 |
GPIO_OUT_W1TC_REG — банк 0: сброс выходов записью единицы
Смещение 0x000C, адрес 0x6000 400C, после сброса 0x0000 0000. TRM: регистр 6.4.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| OUT_W1TC | 31:0 | WO | 0x0000 0000 |
GPIO_OUT1_REG — уровни на выходах GPIO32…48
Смещение 0x0010, адрес 0x6000 4010, после сброса 0x0000 0000. TRM: регистр 6.5.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OUT1_DATA_ORIG | 21:0 | R/W | 0x000000 | Биты 0…16 — выходы GPIO32…48, биты 17…21 не действуют |
GPIO_OUT1_W1TS_REG — банк 1: установка выходов записью единицы
Смещение 0x0014, адрес 0x6000 4014, после сброса 0x0000 0000. TRM: регистр 6.6.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| OUT1_W1TS | 21:0 | WO | 0x000000 |
GPIO_OUT1_W1TC_REG — банк 1: сброс выходов записью единицы
Смещение 0x0018, адрес 0x6000 4018, после сброса 0x0000 0000. TRM: регистр 6.7.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| OUT1_W1TC | 21:0 | WO | 0x000000 |
GPIO_SDIO_SELECT_REG — зарезервировано
Смещение 0x001C, адрес 0x6000 401C, после сброса 0x0000 0000. TRM: регистр 6.8.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| SDIO_SEL | 7:0 | R/W | 0x00 |
GPIO_ENABLE_REG — разрешение выходов GPIO0…31
Смещение 0x0020, адрес 0x6000 4020, после сброса 0x0000 0000. TRM: регистр 6.9.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| ENABLE_DATA | 31:0 | R/W | 0x0000 0000 | Бит n включает выходной драйвер GPIOn |
GPIO_ENABLE_W1TS_REG — банк 0: включение выходов записью единицы
Смещение 0x0024, адрес 0x6000 4024, после сброса 0x0000 0000. TRM: регистр 6.10.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| ENABLE_W1TS | 31:0 | WO | 0x0000 0000 |
GPIO_ENABLE_W1TC_REG — банк 0: выключение выходов записью единицы
Смещение 0x0028, адрес 0x6000 4028, после сброса 0x0000 0000. TRM: регистр 6.11.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| ENABLE_W1TC | 31:0 | WO | 0x0000 0000 |
GPIO_ENABLE1_REG — разрешение выходов GPIO32…48
Смещение 0x002C, адрес 0x6000 402C, после сброса 0x0000 0000. TRM: регистр 6.12.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| ENABLE1_DATA | 21:0 | R/W | 0x000000 | Бит n включает выходной драйвер GPIO(32 + n) |
GPIO_ENABLE1_W1TS_REG — банк 1: включение выходов записью единицы
Смещение 0x0030, адрес 0x6000 4030, после сброса 0x0000 0000. TRM: регистр 6.13.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| ENABLE1_W1TS | 21:0 | WO | 0x000000 |
GPIO_ENABLE1_W1TC_REG — банк 1: выключение выходов записью единицы
Смещение 0x0034, адрес 0x6000 4034, после сброса 0x0000 0000. TRM: регистр 6.14.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| ENABLE1_W1TC | 21:0 | WO | 0x000000 |
GPIO_STRAP_REG — уровни strapping-выводов, защёлкнутые при сбросе
Смещение 0x0038, адрес 0x6000 4038, после сброса 0x0000 0000. TRM: регистр 6.15.
В версии TRM 1.8 описание GPIO_STRAP_REG исправлено: поле занимает биты 5:0. SVD и заголовок soc/gpio_reg.h ESP-IDF v6.1 по-прежнему описывают GPIO_STRAPPING как биты 15:0; страница следует TRM.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| STRAPPING | 5:0 | RO | 0x00 | По TRM v1.8: бит 2 — GPIO46, бит 3 — GPIO0, бит 4 — GPIO45, бит 5 — GPIO3, биты 0 и 1 зарезервированы; в ESP-IDF поле GPIO_STRAPPING шире — биты 15:0 |
GPIO_IN_REG — уровни на входах GPIO0…31
Смещение 0x003C, адрес 0x6000 403C, после сброса 0x0000 0000. TRM: регистр 6.16.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| IN_DATA_NEXT | 31:0 | RO | 0x0000 0000 | Бит n — уровень на входе GPIOn: 1 — высокий, 0 — низкий |
GPIO_IN1_REG — уровни на входах GPIO32…48
Смещение 0x0040, адрес 0x6000 4040, после сброса 0x0000 0000. TRM: регистр 6.17.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| IN_DATA1_NEXT | 21:0 | RO | 0x000000 | Бит n — уровень на входе GPIO(32 + n) |
GPIO_STATUS_REG — банк 0: флаги прерываний выводов
Смещение 0x0044, адрес 0x6000 4044, после сброса 0x0000 0000. TRM: регистр 6.22.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| STATUS_INTERRUPT | 31:0 | R/W | 0x0000 0000 | Бит n — флаг прерывания GPIOn; сбрасывается записью единицы в STATUS_W1TC |
GPIO_STATUS_W1TS_REG — банк 0: установка флагов прерываний записью единицы
Смещение 0x0048, адрес 0x6000 4048, после сброса 0x0000 0000. TRM: регистр 6.28.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| STATUS_W1TS | 31:0 | WO | 0x0000 0000 |
GPIO_STATUS_W1TC_REG — банк 0: сброс флагов прерываний записью единицы
Смещение 0x004C, адрес 0x6000 404C, после сброса 0x0000 0000. TRM: регистр 6.29.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| STATUS_W1TC | 31:0 | WO | 0x0000 0000 |
GPIO_STATUS1_REG — банк 1: флаги прерываний выводов
Смещение 0x0050, адрес 0x6000 4050, после сброса 0x0000 0000. TRM: регистр 6.23.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| STATUS1_INTERRUPT | 21:0 | R/W | 0x000000 | Бит n — флаг прерывания GPIO(32 + n) |
GPIO_STATUS1_W1TS_REG — банк 1: установка флагов прерываний записью единицы
Смещение 0x0054, адрес 0x6000 4054, после сброса 0x0000 0000. TRM: регистр 6.30.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| STATUS1_W1TS | 21:0 | WO | 0x000000 |
GPIO_STATUS1_W1TC_REG — банк 1: сброс флагов прерываний записью единицы
Смещение 0x0058, адрес 0x6000 4058, после сброса 0x0000 0000. TRM: регистр 6.31.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| STATUS1_W1TC | 21:0 | WO | 0x000000 |
GPIO_PCPU_INT_REG — банк 0: прерывания выводов, разрешённые для ядра
Смещение 0x005C, адрес 0x6000 405C, после сброса 0x0000 0000. TRM: регистр 6.24 (GPIO_CPU_INT_REG).
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CPU_INT | 31:0 | RO | 0x0000 0000 | Флаги из GPIO_STATUS_REG выводов, у которых установлен бит 13 поля PINn_INT_ENA |
GPIO_PCPU_NMI_INT_REG — банк 0: немаскируемые прерывания выводов
Смещение 0x0060, адрес 0x6000 4060, после сброса 0x0000 0000. TRM: регистр 6.25 (GPIO_CPU_NMI_INT_REG).
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CPU_NMI_INT | 31:0 | RO | 0x0000 0000 | Флаги из GPIO_STATUS_REG выводов, у которых установлен бит 14 поля PINn_INT_ENA |
GPIO_PCPU_INT1_REG — банк 1: прерывания выводов, разрешённые для ядра
Смещение 0x0068, адрес 0x6000 4068, после сброса 0x0000 0000. TRM: регистр 6.26 (GPIO_CPU_INT1_REG).
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CPU1_INT | 21:0 | RO | 0x000000 |
GPIO_PCPU_NMI_INT1_REG — банк 1: немаскируемые прерывания выводов
Смещение 0x006C, адрес 0x6000 406C, после сброса 0x0000 0000. TRM: регистр 6.27 (GPIO_CPU_NMI_INT1_REG).
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CPU_NMI1_INT | 21:0 | RO | 0x000000 |
GPIO_PINn_REG — прерывание, пробуждение и тип выхода вывода GPIOn
49 копий, n = 0…48: смещение 0x0074 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 6.18.
Прерывание вывода задают два поля: условие в PINn_INT_TYPE и получатель в PINn_INT_ENA. Флаг события появляется в GPIO_STATUS_REG или GPIO_STATUS1_REG; обработчик сбрасывает его записью единицы в регистр W1TC того же банка. Копии регистра есть для n = 0…48, хотя выводов GPIO22…25 у ESP32-S3 нет.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | PINn_INT_ENA | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| PINn_INT_ENA | PINn_CONFIG | PINn_WAKEUP_ENABLE | PINn_INT_TYPE | — | PINn_SYNC1_BYPASS | PINn_PAD_DRIVER | PINn_SYNC2_BYPASS | ||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| PINn_INT_ENA | 17:13 | R/W | 0x00 | Бит 13 — прерывание ядра, бит 14 — немаскируемое прерывание |
| PINn_CONFIG | 12:11 | R/W | 0x0 | Зарезервировано |
| PINn_WAKEUP_ENABLE | 10 | R/W | 0 | Пробуждать ядро по прерыванию вывода; действует только в лёгком сне |
| PINn_INT_TYPE | 9:7 | R/W | 0x0 | Условие прерывания: 0 — выключено, 1 — фронт, 2 — спад, 3 — любой перепад, 4 — низкий уровень, 5 — высокий уровень |
| PINn_SYNC1_BYPASS | 4:3 | R/W | 0x0 | Первая ступень синхронизации входа с APB_CLK: 0 — нет, 1 — по спаду, 2 и 3 — по фронту |
| PINn_PAD_DRIVER | 2 | R/W | 0 | Тип выхода: 0 — обычный, 1 — открытый сток |
| PINn_SYNC2_BYPASS | 1:0 | R/W | 0x0 | Вторая ступень синхронизации, значения как у SYNC1_BYPASS |
GPIO_STATUS_NEXT_REG — банк 0: текущие сигналы прерываний выводов
Смещение 0x014C, адрес 0x6000 414C, после сброса 0x0000 0000. TRM: регистр 6.32.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| STATUS_INTERRUPT_NEXT | 31:0 | RO | 0x0000 0000 |
GPIO_STATUS_NEXT1_REG — банк 1: текущие сигналы прерываний выводов
Смещение 0x0150, адрес 0x6000 4150, после сброса 0x0000 0000. TRM: регистр 6.33.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| STATUS1_INTERRUPT_NEXT | 21:0 | RO | 0x000000 |
GPIO_FUNCn_IN_SEL_CFG_REG — вывод для входного сигнала периферии n
256 копий, n = 0…255: смещение 0x0154 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 6.19.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | SIGn_IN_SEL | FUNCn_IN_INV_SEL | FUNCn_IN_SEL | ||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| SIGn_IN_SEL | 7 | R/W | 0 | 1 — сигнал идёт через матрицу GPIO, 0 — напрямую от вывода, выбранного в IO MUX |
| FUNCn_IN_INV_SEL | 6 | R/W | 0 | 1 — инвертировать входной сигнал |
| FUNCn_IN_SEL | 5:0 | R/W | 0x00 | Номер вывода для входного сигнала n; 0x38 — постоянная 1, 0x3C — постоянный 0 |
GPIO_FUNCn_OUT_SEL_CFG_REG — сигнал периферии на выходе GPIOn
49 копий, n = 0…48: смещение 0x0554 + n · 0x0004, после сброса 0x0000 0100. TRM: регистр 6.20.
После сброса во всех копиях записано 0x100 = 256: выходы управляются регистрами GPIO_OUT и GPIO_ENABLE, а выходные драйверы выключены.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | FUNCn_OEN_INV_SEL | FUNCn_OEN_SEL | FUNCn_OUT_INV_SEL | FUNCn_OUT_SEL | |||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| FUNCn_OEN_INV_SEL | 11 | R/W | 0 | 1 — инвертировать сигнал разрешения выхода |
| FUNCn_OEN_SEL | 10 | R/W | 0 | Разрешение выхода: 0 — от периферии, 1 — из бита n регистра GPIO_ENABLE_REG |
| FUNCn_OUT_INV_SEL | 9 | R/W | 0 | 1 — инвертировать выходной сигнал |
| FUNCn_OUT_SEL | 8:0 | R/W | 0x100 | Номер выходного сигнала периферии 0…255; 256 — уровень и разрешение из регистров GPIO_OUT и GPIO_ENABLE |
GPIO_CLOCK_GATE_REG — тактирование блока GPIO
Смещение 0x062C, адрес 0x6000 462C, после сброса 0x0000 0001. TRM: регистр 6.21.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CLK_EN | 0 | R/W | 1 | 1 — такт регистров работает постоянно |
GPIO_DATE_REG — версия блока: дата ревизии аппаратуры
Смещение 0x06FC, адрес 0x6000 46FC, после сброса 0x0190 7040. TRM: регистр 6.34 (GPIO_DATE_REG).
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| DATE | 27:0 | R/W | 0x1907040 |
Частые вопросы
Как управлять выводами GPIO32…GPIO48 ESP32-S3?
Через второй банк регистров: GPIO_OUT1_REG, GPIO_ENABLE1_REG, GPIO_IN1_REG и их пары W1TS и W1TC. Бит 0 этих регистров — GPIO32, бит 8 — GPIO40, бит 16 — GPIO48; биты 17…21 по TRM не действуют. Первый банк (GPIO_OUT_REG и другие) покрывает GPIO0…31, где биты 22…25 пустые: таких выводов у ESP32-S3 нет.
Как подать постоянный уровень на вход периферии ESP32-S3 без вывода?
Записать в поле FUNCn_IN_SEL регистра входного сигнала n значение 0x38 — сигнал всегда 1, или 0x3C — всегда 0, и установить бит SIGn_IN_SEL, чтобы сигнал шёл через матрицу. Так, например, держат неиспользуемый вход CTS в нужном состоянии.
Источники
- Espressif. ESP32-S3 Technical Reference Manual, версия 1.8 — глава 6: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
- Espressif. SVD svd/esp32s3.svd, версия 21 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
- Espressif. ESP-IDF v6.1: заголовки components/soc/esp32s3/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT
Нашли ошибку в регистрах?
Другие регистры ESP32-S3
- Все регистры ESP32-S3Блоки периферии и базовые адреса
- IO MUX — мультиплексор функций и электрические настройки выводовPIN_CTRL, IO_MUX_GPIOn_REG
- UART — универсальный асинхронный приёмопередатчикUART_FIFO_REG, UART_INT_RAW_REG, UART_INT_ST_REG, UART_INT_ENA_REG
- SPI — контроллеры SPI общего назначения GP-SPI2 и GP-SPI3SPI_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_TnCONFIG_REG, TIMG_TnLO_REG, TIMG_TnHI_REG, TIMG_TnUPDATE_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 — управление питанием, сном и RTC-доменомRTC_CNTL_OPTIONS0_REG, RTC_CNTL_SLP_TIMER0_REG, RTC_CNTL_SLP_TIMER1_REG, RTC_CNTL_TIME_UPDATE_REG
- APB_SARADC — цифровой контроллер АЦПAPB_SARADC_CTRL_REG, APB_SARADC_CTRL2_REG, APB_SARADC_FILTER_CTRL1_REG, APB_SARADC_SAR1_PATT_TABn_REG
- SENS — RTC-контроллеры АЦП, датчиков касания и температурыSENS_SAR_READER1_CTRL_REG, SENS_SAR_MEAS1_CTRL2_REG, SENS_SAR_MEAS1_MUX_REG, SENS_SAR_ATTENn_REG
- USB Serial/JTAG — встроенный USB-переходник на последовательный порт и 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_MAC_INTR_MAP_REG, INTERRUPT_CORE0_MAC_NMI_MAP_REG, INTERRUPT_CORE0_PWR_INTR_MAP_REG, INTERRUPT_CORE0_BB_INT_MAP_REG
Статьи, инструменты и термины
- ESP32-S3: выводы и GPIO45 GPIO: функции, свободные и занятые выводы, флеш и PSRAM, strapping, USB, JTAG, токи
- Матрица GPIOПрограммное соединение сигналов периферии ESP32 с любыми выводами
- GPIOВывод общего назначения: вход и выход, подтяжки, сила выхода, функции
- Открытый стокВыход только с транзистором к земле, единицу даёт подтяжка