Регистры INTERRUPT ESP32-C3
Регистры матрицы прерываний ESP32-C3: какое прерывание ядра получает каждый из 62 источников периферии, разрешение, тип и приоритет 31 прерывания ядра RISC-V, порог приоритета и состояние источников.
Содержание
- Пример на C
- Регистры блока
- 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
- INTERRUPT_CORE0_UHCI0_INTR_MAP_REG
- INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_MAP_REG
- INTERRUPT_CORE0_SPI_INTR_n_MAP_REG
- INTERRUPT_CORE0_I2S_INT_MAP_REG
- INTERRUPT_CORE0_UART_INTR_MAP_REG
- INTERRUPT_CORE0_UART1_INTR_MAP_REG
- INTERRUPT_CORE0_LEDC_INT_MAP_REG
- INTERRUPT_CORE0_EFUSE_INT_MAP_REG
- INTERRUPT_CORE0_CAN_INT_MAP_REG
- INTERRUPT_CORE0_USB_INTR_MAP_REG
- INTERRUPT_CORE0_RTC_CORE_INTR_MAP_REG
- INTERRUPT_CORE0_RMT_INTR_MAP_REG
- INTERRUPT_CORE0_I2C_EXT0_INTR_MAP_REG
- INTERRUPT_CORE0_TIMER_INTn_MAP_REG
- INTERRUPT_CORE0_TG_T0_INT_MAP_REG
- INTERRUPT_CORE0_TG_WDT_INT_MAP_REG
- INTERRUPT_CORE0_TG1_T0_INT_MAP_REG
- INTERRUPT_CORE0_TG1_WDT_INT_MAP_REG
- INTERRUPT_CORE0_CACHE_IA_INT_MAP_REG
- INTERRUPT_CORE0_SYSTIMER_TARGETn_INT_MAP_REG
- INTERRUPT_CORE0_SPI_MEM_REJECT_INTR_MAP_REG
- INTERRUPT_CORE0_ICACHE_PRELOAD_INT_MAP_REG
- INTERRUPT_CORE0_ICACHE_SYNC_INT_MAP_REG
- INTERRUPT_CORE0_APB_ADC_INT_MAP_REG
- INTERRUPT_CORE0_DMA_CHn_INT_MAP_REG
- INTERRUPT_CORE0_RSA_INT_MAP_REG
- INTERRUPT_CORE0_AES_INT_MAP_REG
- INTERRUPT_CORE0_SHA_INT_MAP_REG
- INTERRUPT_CORE0_CPU_INTR_FROM_CPU_n_MAP_REG
- INTERRUPT_CORE0_ASSIST_DEBUG_INTR_MAP_REG
- INTERRUPT_CORE0_DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP_REG
- INTERRUPT_CORE0_CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG
- INTERRUPT_CORE0_CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG
- INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP_REG
- INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP_REG
- INTERRUPT_CORE0_BACKUP_PMS_VIOLATE_INTR_MAP_REG
- INTERRUPT_CORE0_CACHE_CORE0_ACS_INT_MAP_REG
- INTERRUPT_CORE0_INTR_STATUS_n_REG
- INTERRUPT_CORE0_CLOCK_GATE_REG
- INTERRUPT_CORE0_CPU_INT_ENABLE_REG
- INTERRUPT_CORE0_CPU_INT_TYPE_REG
- INTERRUPT_CORE0_CPU_INT_CLEAR_REG
- INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG
- INTERRUPT_CORE0_CPU_INT_PRI_n_REG
- INTERRUPT_CORE0_CPU_INT_THRESH_REG
- INTERRUPT_CORE0_INTERRUPT_DATE_REG
Ядро ESP32-C3 принимает 31 внешнее прерывание с номерами 1…31, а источников в периферии 62 — от GPIO и UART до сторожей и ускорителей. Матрица по адресу 0x600C 2000 соединяет их: в регистр INTERRUPT_CORE0_<источник>_MAP_REG записывают номер прерывания ядра, 0 отключает источник. Несколько источников могут вести на одно прерывание — обработчик тогда сам проверяет, кто из них сработал.
Для прерываний ядра здесь же задаются разрешение (CPU_INT_ENABLE, бит на прерывание), тип — уровень или фронт (CPU_INT_TYPE), приоритет 1…15 (CPU_INT_PRI_n) и порог (CPU_INT_THRESH): прерывания с приоритетом ниже порога не принимаются. Регистры INTR_STATUS_0 и INTR_STATUS_1 показывают, какие из 62 источников сейчас активны.
Названия части источников в SVD отличаются от руководства: SVD называет регистр TWAI CAN_INT_MAP, системных регистров — APB_CTRL_INTR_MAP, I2S — I2S1_INT_MAP. На странице показаны макросы ESP-IDF, под ними — название из руководства.
| Экземпляр | Базовый адрес |
|---|---|
| INTERRUPT_CORE0 | 0x600C 2000 |
Пример на C
UART0 → прерывание ядра 5, приоритет 3 (soc/interrupt_core0_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/interrupt_core0_reg.h"
REG_WRITE(INTERRUPT_CORE0_UART_INTR_MAP_REG, 5); // источник UART0 → прерывание 5
REG_WRITE(INTERRUPT_CORE0_CPU_INT_PRI_5_REG, 3); // приоритет 1…15
REG_CLR_BIT(INTERRUPT_CORE0_CPU_INT_TYPE_REG, BIT(5)); // по уровню
REG_SET_BIT(INTERRUPT_CORE0_CPU_INT_ENABLE_REG, BIT(5)); // разрешитьРегистры блока
| Регистр (ESP-IDF) | Смещение | Назначение | После сброса |
|---|---|---|---|
| INTERRUPT_CORE0_PWR_INTR_MAP_REG | 0x0008 | Источник PWR → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_I2C_MST_INT_MAP_REG | 0x002C | Источник внутреннего I2C-ведущего → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_SLCn_INTR_MAP_REG | 0x0030 + n · 0x0004 | Источник SLC n → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_APB_CTRL_INTR_MAP_REG | 0x0038 | Источник системных регистров (SYSCON) → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_UHCI0_INTR_MAP_REG | 0x003C | Источник UHCI0 → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_MAP_REG | 0x0040 | Источник GPIO → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_SPI_INTR_n_MAP_REG | 0x0044 + n · 0x0004 | Источник SPI n → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_I2S_INT_MAP_REG | 0x0050 | Источник I2S → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_UART_INTR_MAP_REG | 0x0054 | Источник UART0 → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_UART1_INTR_MAP_REG | 0x0058 | Источник UART1 → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_LEDC_INT_MAP_REG | 0x005C | Источник LEDC → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_EFUSE_INT_MAP_REG | 0x0060 | Источник eFuse → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_CAN_INT_MAP_REG | 0x0064 | Источник TWAI (CAN) → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_USB_INTR_MAP_REG | 0x0068 | Источник USB Serial/JTAG → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_RTC_CORE_INTR_MAP_REG | 0x006C | Источник RTC_CNTL → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_RMT_INTR_MAP_REG | 0x0070 | Источник RMT → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_I2C_EXT0_INTR_MAP_REG | 0x0074 | Источник I2C0 → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_TIMER_INTn_MAP_REG | 0x0074 + n · 0x0004 | Источник TIMER n → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_TG_T0_INT_MAP_REG | 0x0080 | Источник таймера T0 группы TIMG0 → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_TG_WDT_INT_MAP_REG | 0x0084 | Источник сторожа группы TIMG0 → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_TG1_T0_INT_MAP_REG | 0x0088 | Источник таймера T0 группы TIMG1 → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_TG1_WDT_INT_MAP_REG | 0x008C | Источник сторожа группы TIMG1 → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_CACHE_IA_INT_MAP_REG | 0x0090 | Источник ошибки доступа к кэшу → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_SYSTIMER_TARGETn_INT_MAP_REG | 0x0094 + n · 0x0004 | Источник компаратора n системного таймера → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_SPI_MEM_REJECT_INTR_MAP_REG | 0x00A0 | Источник отказа контроллера флеш-памяти → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_ICACHE_PRELOAD_INT_MAP_REG | 0x00A4 | Источник предзагрузки кэша → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_ICACHE_SYNC_INT_MAP_REG | 0x00A8 | Источник синхронизации кэша → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_APB_ADC_INT_MAP_REG | 0x00AC | Источник АЦП → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_DMA_CHn_INT_MAP_REG | 0x00B0 + n · 0x0004 | Источник канала n GDMA → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_RSA_INT_MAP_REG | 0x00BC | Источник ускорителя RSA → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_AES_INT_MAP_REG | 0x00C0 | Источник ускорителя AES → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_SHA_INT_MAP_REG | 0x00C4 | Источник ускорителя SHA → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_CPU_INTR_FROM_CPU_n_MAP_REG | 0x00C8 + n · 0x0004 | Программное прерывание n → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_ASSIST_DEBUG_INTR_MAP_REG | 0x00D8 | Источник Debug Assistant → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP_REG | 0x00DC | Нарушение прав доступа GDMA → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG | 0x00E0 | Нарушение прав доступа к IRAM → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG | 0x00E4 | Нарушение прав доступа к DRAM → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP_REG | 0x00E8 | Нарушение прав доступа к периферии → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP_REG | 0x00EC | Нарушение размера доступа к периферии → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_BACKUP_PMS_VIOLATE_INTR_MAP_REG | 0x00F0 | Нарушение прав доступа к кэшу → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_CACHE_CORE0_ACS_INT_MAP_REG | 0x00F4 | Ошибка доступа ядра к кэшу → прерывание ядра | 0x0000 0000 |
| INTERRUPT_CORE0_INTR_STATUS_n_REG | 0x00F8 + n · 0x0004 | Состояние источников: 0…31 и 32…61 | 0x0000 0000 |
| INTERRUPT_CORE0_CLOCK_GATE_REG | 0x0100 | Тактирование регистров матрицы | 0x0000 0001 |
| INTERRUPT_CORE0_CPU_INT_ENABLE_REG | 0x0104 | Разрешение прерываний ядра | 0x0000 0000 |
| INTERRUPT_CORE0_CPU_INT_TYPE_REG | 0x0108 | Тип прерываний ядра: уровень или фронт | 0x0000 0000 |
| INTERRUPT_CORE0_CPU_INT_CLEAR_REG | 0x010C | Сброс прерываний ядра по фронту | 0x0000 0000 |
| INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG | 0x0110 | Ожидающие прерывания ядра | 0x0000 0000 |
| INTERRUPT_CORE0_CPU_INT_PRI_n_REG | 0x0114 + n · 0x0004 | Приоритет прерывания ядра n | 0x0000 0000 |
| INTERRUPT_CORE0_CPU_INT_THRESH_REG | 0x0194 | Порог приоритета | 0x0000 0000 |
| INTERRUPT_CORE0_INTERRUPT_DATE_REG | 0x07FC | Версия блока: дата ревизии аппаратуры | 0x0200 7210 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
INTERRUPT_CORE0_PWR_INTR_MAP_REG — источник PWR → прерывание ядра
Смещение 0x0008, адрес 0x600C 2008, после сброса 0x0000 0000. TRM: регистр 8.1.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| PWR_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_I2C_MST_INT_MAP_REG — источник внутреннего I2C-ведущего → прерывание ядра
Смещение 0x002C, адрес 0x600C 202C, после сброса 0x0000 0000. TRM: регистр 8.2.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| I2C_MST_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_SLCn_INTR_MAP_REG — источник SLC n → прерывание ядра
2 копии, n = 0, 1: смещение 0x0030 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.3.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| SLCn_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_APB_CTRL_INTR_MAP_REG — источник системных регистров (SYSCON) → прерывание ядра
Смещение 0x0038, адрес 0x600C 2038, после сброса 0x0000 0000. TRM: регистр 8.5 (INTERRUPT_CORE0_SYSCON_INTR_MAP_REG).
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| APB_CTRL_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_UHCI0_INTR_MAP_REG — источник UHCI0 → прерывание ядра
Смещение 0x003C, адрес 0x600C 203C, после сброса 0x0000 0000. TRM: регистр 8.6.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| UHCI0_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_MAP_REG — источник GPIO → прерывание ядра
Смещение 0x0040, адрес 0x600C 2040, после сброса 0x0000 0000. TRM: регистр 8.7.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| GPIO_INTERRUPT_PRO_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_SPI_INTR_n_MAP_REG — источник SPI n → прерывание ядра
2 копии, n = 1, 2: смещение 0x0044 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.8.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| SPI_INTR_n_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_I2S_INT_MAP_REG — источник I2S → прерывание ядра
Смещение 0x0050, адрес 0x600C 2050, после сброса 0x0000 0000. TRM: регистр 8.10 (INTERRUPT_CORE0_I2S_INT_MAP_REG).
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| I2S1_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_UART_INTR_MAP_REG — источник UART0 → прерывание ядра
Смещение 0x0054, адрес 0x600C 2054, после сброса 0x0000 0000. TRM: регистр 8.11.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| UART_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_UART1_INTR_MAP_REG — источник UART1 → прерывание ядра
Смещение 0x0058, адрес 0x600C 2058, после сброса 0x0000 0000. TRM: регистр 8.12.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| UART1_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_LEDC_INT_MAP_REG — источник LEDC → прерывание ядра
Смещение 0x005C, адрес 0x600C 205C, после сброса 0x0000 0000. TRM: регистр 8.13.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| LEDC_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_EFUSE_INT_MAP_REG — источник eFuse → прерывание ядра
Смещение 0x0060, адрес 0x600C 2060, после сброса 0x0000 0000. TRM: регистр 8.14.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| EFUSE_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_CAN_INT_MAP_REG — источник TWAI (CAN) → прерывание ядра
Смещение 0x0064, адрес 0x600C 2064, после сброса 0x0000 0000. TRM: регистр 8.15 (INTERRUPT_CORE0_TWAI_INT_MAP_REG).
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CAN_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_USB_INTR_MAP_REG — источник USB Serial/JTAG → прерывание ядра
Смещение 0x0068, адрес 0x600C 2068, после сброса 0x0000 0000. TRM: регистр 8.16.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| USB_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_RTC_CORE_INTR_MAP_REG — источник RTC_CNTL → прерывание ядра
Смещение 0x006C, адрес 0x600C 206C, после сброса 0x0000 0000. TRM: регистр 8.17.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| RTC_CORE_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_RMT_INTR_MAP_REG — источник RMT → прерывание ядра
Смещение 0x0070, адрес 0x600C 2070, после сброса 0x0000 0000. TRM: регистр 8.18.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| RMT_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_I2C_EXT0_INTR_MAP_REG — источник I2C0 → прерывание ядра
Смещение 0x0074, адрес 0x600C 2074, после сброса 0x0000 0000. TRM: регистр 8.19.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| I2C_EXT0_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_TIMER_INTn_MAP_REG — источник TIMER n → прерывание ядра
2 копии, n = 1, 2: смещение 0x0074 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.20.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| TIMER_INTn_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_TG_T0_INT_MAP_REG — источник таймера T0 группы TIMG0 → прерывание ядра
Смещение 0x0080, адрес 0x600C 2080, после сброса 0x0000 0000. TRM: регистр 8.22.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| TG_T0_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_TG_WDT_INT_MAP_REG — источник сторожа группы TIMG0 → прерывание ядра
Смещение 0x0084, адрес 0x600C 2084, после сброса 0x0000 0000. TRM: регистр 8.23.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| TG_WDT_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_TG1_T0_INT_MAP_REG — источник таймера T0 группы TIMG1 → прерывание ядра
Смещение 0x0088, адрес 0x600C 2088, после сброса 0x0000 0000. TRM: регистр 8.24.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| TG1_T0_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_TG1_WDT_INT_MAP_REG — источник сторожа группы TIMG1 → прерывание ядра
Смещение 0x008C, адрес 0x600C 208C, после сброса 0x0000 0000. TRM: регистр 8.25.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| TG1_WDT_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_CACHE_IA_INT_MAP_REG — источник ошибки доступа к кэшу → прерывание ядра
Смещение 0x0090, адрес 0x600C 2090, после сброса 0x0000 0000. TRM: регистр 8.26.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CACHE_IA_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_SYSTIMER_TARGETn_INT_MAP_REG — источник компаратора n системного таймера → прерывание ядра
3 копии, n = 0…2: смещение 0x0094 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.27.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| SYSTIMER_TARGETn_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_SPI_MEM_REJECT_INTR_MAP_REG — источник отказа контроллера флеш-памяти → прерывание ядра
Смещение 0x00A0, адрес 0x600C 20A0, после сброса 0x0000 0000. TRM: регистр 8.30.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| SPI_MEM_REJECT_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_ICACHE_PRELOAD_INT_MAP_REG — источник предзагрузки кэша → прерывание ядра
Смещение 0x00A4, адрес 0x600C 20A4, после сброса 0x0000 0000. TRM: регистр 8.31.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| ICACHE_PRELOAD_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_ICACHE_SYNC_INT_MAP_REG — источник синхронизации кэша → прерывание ядра
Смещение 0x00A8, адрес 0x600C 20A8, после сброса 0x0000 0000. TRM: регистр 8.32.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| ICACHE_SYNC_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_APB_ADC_INT_MAP_REG — источник АЦП → прерывание ядра
Смещение 0x00AC, адрес 0x600C 20AC, после сброса 0x0000 0000. TRM: регистр 8.33.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| APB_ADC_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_DMA_CHn_INT_MAP_REG — источник канала n GDMA → прерывание ядра
3 копии, n = 0…2: смещение 0x00B0 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.34.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| DMA_CHn_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_RSA_INT_MAP_REG — источник ускорителя RSA → прерывание ядра
Смещение 0x00BC, адрес 0x600C 20BC, после сброса 0x0000 0000. TRM: регистр 8.37.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| RSA_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_AES_INT_MAP_REG — источник ускорителя AES → прерывание ядра
Смещение 0x00C0, адрес 0x600C 20C0, после сброса 0x0000 0000. TRM: регистр 8.38.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| AES_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_SHA_INT_MAP_REG — источник ускорителя SHA → прерывание ядра
Смещение 0x00C4, адрес 0x600C 20C4, после сброса 0x0000 0000. TRM: регистр 8.39.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| SHA_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_n_MAP_REG — программное прерывание n → прерывание ядра
4 копии, n = 0…3: смещение 0x00C8 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.40.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CPU_INTR_FROM_CPU_n_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_ASSIST_DEBUG_INTR_MAP_REG — источник Debug Assistant → прерывание ядра
Смещение 0x00D8, адрес 0x600C 20D8, после сброса 0x0000 0000. TRM: регистр 8.44.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| ASSIST_DEBUG_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP_REG — нарушение прав доступа GDMA → прерывание ядра
Смещение 0x00DC, адрес 0x600C 20DC, после сброса 0x0000 0000. TRM: регистр 8.45.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG — нарушение прав доступа к IRAM → прерывание ядра
Смещение 0x00E0, адрес 0x600C 20E0, после сброса 0x0000 0000. TRM: регистр 8.46.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG — нарушение прав доступа к DRAM → прерывание ядра
Смещение 0x00E4, адрес 0x600C 20E4, после сброса 0x0000 0000. TRM: регистр 8.47.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP_REG — нарушение прав доступа к периферии → прерывание ядра
Смещение 0x00E8, адрес 0x600C 20E8, после сброса 0x0000 0000. TRM: регистр 8.48.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP_REG — нарушение размера доступа к периферии → прерывание ядра
Смещение 0x00EC, адрес 0x600C 20EC, после сброса 0x0000 0000. TRM: регистр 8.49.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_BACKUP_PMS_VIOLATE_INTR_MAP_REG — нарушение прав доступа к кэшу → прерывание ядра
Смещение 0x00F0, адрес 0x600C 20F0, после сброса 0x0000 0000. TRM: регистр 8.50.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| BACKUP_PMS_VIOLATE_INTR_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_CACHE_CORE0_ACS_INT_MAP_REG — ошибка доступа ядра к кэшу → прерывание ядра
Смещение 0x00F4, адрес 0x600C 20F4, после сброса 0x0000 0000. TRM: регистр 8.51.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CACHE_CORE0_ACS_INT_MAP | 4:0 | R/W | 0x00 |
INTERRUPT_CORE0_INTR_STATUS_n_REG — состояние источников: 0…31 и 32…61
2 копии, n = 0, 1: смещение 0x00F8 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.52 (INTERRUPT_CORE0_INTR_STATUS_n_REG).
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| INTR_STATUS_n | 31:0 | RO | 0x0000 0000 | Бит на источник: 1 — источник сейчас активен |
INTERRUPT_CORE0_CLOCK_GATE_REG — тактирование регистров матрицы
Смещение 0x0100, адрес 0x600C 2100, после сброса 0x0000 0001. TRM: регистр 8.54.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CLK_EN | 0 | R/W | 1 | Принудительно тактировать регистры матрицы |
INTERRUPT_CORE0_CPU_INT_ENABLE_REG — разрешение прерываний ядра
Смещение 0x0104, адрес 0x600C 2104, после сброса 0x0000 0000. TRM: регистр 8.55.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CPU_INT_ENABLE | 31:0 | R/W | 0x0000 0000 | Бит n разрешает прерывание ядра n |
INTERRUPT_CORE0_CPU_INT_TYPE_REG — тип прерываний ядра: уровень или фронт
Смещение 0x0108, адрес 0x600C 2108, после сброса 0x0000 0000. TRM: регистр 8.56.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CPU_INT_TYPE | 31:0 | R/W | 0x0000 0000 | Бит n: 0 — прерывание n по уровню, 1 — по фронту |
INTERRUPT_CORE0_CPU_INT_CLEAR_REG — сброс прерываний ядра по фронту
Смещение 0x010C, адрес 0x600C 210C, после сброса 0x0000 0000. TRM: регистр 8.57.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CPU_INT_CLEAR | 31:0 | R/W | 0x0000 0000 | Бит n сбрасывает защёлкнутое прерывание n по фронту |
INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG — ожидающие прерывания ядра
Смещение 0x0110, адрес 0x600C 2110, после сброса 0x0000 0000. TRM: регистр 8.58.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CPU_INT_EIP_STATUS | 31:0 | RO | 0x0000 0000 | Бит n: прерывание n ожидает обработки |
INTERRUPT_CORE0_CPU_INT_PRI_n_REG — приоритет прерывания ядра n
31 копия, n = 1…31: смещение 0x0114 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.59.
В TRM v1.4 заголовок регистра даёт смещение 0x0118 + 4 · n, но таблица Register Summary, SVD и ESP-IDF помещают CPU_INT_PRI_1 по смещению 0x0118, то есть 0x0114 + 4 · n. Здесь показаны смещения таблицы.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CPU_PRI_n_MAP | 3:0 | R/W | 0x0 | Приоритет 1…15; 15 — высший |
INTERRUPT_CORE0_CPU_INT_THRESH_REG — порог приоритета
Смещение 0x0194, адрес 0x600C 2194, после сброса 0x0000 0000. TRM: регистр 8.60.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CPU_INT_THRESH | 3:0 | R/W | 0x0 | Принимаются прерывания с приоритетом не ниже порога |
INTERRUPT_CORE0_INTERRUPT_DATE_REG — версия блока: дата ревизии аппаратуры
Смещение 0x07FC, адрес 0x600C 27FC, после сброса 0x0200 7210. TRM: регистр 8.61 (INTERRUPT_CORE0_INTERRUPT_DATE_REG).
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| INTERRUPT_DATE | 27:0 | R/W | 0x2007210 |
Частые вопросы
Как вручную подключить прерывание UART0 ESP32-C3 к ядру?
Записать выбранный номер прерывания ядра, например 5, в INTERRUPT_CORE0_UART_INTR_MAP_REG, задать приоритет в INTERRUPT_CORE0_CPU_INT_PRI_5_REG, тип в CPU_INT_TYPE и разрешить бит 5 в INTERRUPT_CORE0_CPU_INT_ENABLE_REG. Обычно это делает esp_intr_alloc, который сам выбирает свободное прерывание.
Сколько уровней приоритета у прерываний ESP32-C3?
Пятнадцать: значения 1…15 в регистрах CPU_INT_PRI_n, 15 — высший. Ядро принимает прерывание, только если его приоритет не ниже порога в INTERRUPT_CORE0_CPU_INT_THRESH_REG; на этом пороге ESP-IDF строит вложенные прерывания.
Источники
- Espressif. ESP32-C3 Technical Reference Manual, версия 1.4 — глава 8: таблица 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
- IO MUX — мультиплексор функций и электрические настройки выводовPIN_CTRL, IO_MUX_GPIOn_REG, IO_MUX_DATE_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