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

Регистры INTERRUPT ESP32-C3

Регистры матрицы прерываний ESP32-C3: какое прерывание ядра получает каждый из 62 источников периферии, разрешение, тип и приоритет 31 прерывания ядра RISC-V, порог приоритета и состояние источников.

Содержание

Ядро 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_CORE00x600C 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_REG0x0008Источник PWR → прерывание ядра0x0000 0000
INTERRUPT_CORE0_I2C_MST_INT_MAP_REG0x002CИсточник внутреннего I2C-ведущего → прерывание ядра0x0000 0000
INTERRUPT_CORE0_SLCn_INTR_MAP_REG0x0030 + n · 0x0004Источник SLC n → прерывание ядра0x0000 0000
INTERRUPT_CORE0_APB_CTRL_INTR_MAP_REG0x0038Источник системных регистров (SYSCON) → прерывание ядра0x0000 0000
INTERRUPT_CORE0_UHCI0_INTR_MAP_REG0x003CИсточник UHCI0 → прерывание ядра0x0000 0000
INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_MAP_REG0x0040Источник GPIO → прерывание ядра0x0000 0000
INTERRUPT_CORE0_SPI_INTR_n_MAP_REG0x0044 + n · 0x0004Источник SPI n → прерывание ядра0x0000 0000
INTERRUPT_CORE0_I2S_INT_MAP_REG0x0050Источник I2S → прерывание ядра0x0000 0000
INTERRUPT_CORE0_UART_INTR_MAP_REG0x0054Источник UART0 → прерывание ядра0x0000 0000
INTERRUPT_CORE0_UART1_INTR_MAP_REG0x0058Источник UART1 → прерывание ядра0x0000 0000
INTERRUPT_CORE0_LEDC_INT_MAP_REG0x005CИсточник LEDC → прерывание ядра0x0000 0000
INTERRUPT_CORE0_EFUSE_INT_MAP_REG0x0060Источник eFuse → прерывание ядра0x0000 0000
INTERRUPT_CORE0_CAN_INT_MAP_REG0x0064Источник TWAI (CAN) → прерывание ядра0x0000 0000
INTERRUPT_CORE0_USB_INTR_MAP_REG0x0068Источник USB Serial/JTAG → прерывание ядра0x0000 0000
INTERRUPT_CORE0_RTC_CORE_INTR_MAP_REG0x006CИсточник RTC_CNTL → прерывание ядра0x0000 0000
INTERRUPT_CORE0_RMT_INTR_MAP_REG0x0070Источник RMT → прерывание ядра0x0000 0000
INTERRUPT_CORE0_I2C_EXT0_INTR_MAP_REG0x0074Источник I2C0 → прерывание ядра0x0000 0000
INTERRUPT_CORE0_TIMER_INTn_MAP_REG0x0074 + n · 0x0004Источник TIMER n → прерывание ядра0x0000 0000
INTERRUPT_CORE0_TG_T0_INT_MAP_REG0x0080Источник таймера T0 группы TIMG0 → прерывание ядра0x0000 0000
INTERRUPT_CORE0_TG_WDT_INT_MAP_REG0x0084Источник сторожа группы TIMG0 → прерывание ядра0x0000 0000
INTERRUPT_CORE0_TG1_T0_INT_MAP_REG0x0088Источник таймера T0 группы TIMG1 → прерывание ядра0x0000 0000
INTERRUPT_CORE0_TG1_WDT_INT_MAP_REG0x008CИсточник сторожа группы TIMG1 → прерывание ядра0x0000 0000
INTERRUPT_CORE0_CACHE_IA_INT_MAP_REG0x0090Источник ошибки доступа к кэшу → прерывание ядра0x0000 0000
INTERRUPT_CORE0_SYSTIMER_TARGETn_INT_MAP_REG0x0094 + n · 0x0004Источник компаратора n системного таймера → прерывание ядра0x0000 0000
INTERRUPT_CORE0_SPI_MEM_REJECT_INTR_MAP_REG0x00A0Источник отказа контроллера флеш-памяти → прерывание ядра0x0000 0000
INTERRUPT_CORE0_ICACHE_PRELOAD_INT_MAP_REG0x00A4Источник предзагрузки кэша → прерывание ядра0x0000 0000
INTERRUPT_CORE0_ICACHE_SYNC_INT_MAP_REG0x00A8Источник синхронизации кэша → прерывание ядра0x0000 0000
INTERRUPT_CORE0_APB_ADC_INT_MAP_REG0x00ACИсточник АЦП → прерывание ядра0x0000 0000
INTERRUPT_CORE0_DMA_CHn_INT_MAP_REG0x00B0 + n · 0x0004Источник канала n GDMA → прерывание ядра0x0000 0000
INTERRUPT_CORE0_RSA_INT_MAP_REG0x00BCИсточник ускорителя RSA → прерывание ядра0x0000 0000
INTERRUPT_CORE0_AES_INT_MAP_REG0x00C0Источник ускорителя AES → прерывание ядра0x0000 0000
INTERRUPT_CORE0_SHA_INT_MAP_REG0x00C4Источник ускорителя SHA → прерывание ядра0x0000 0000
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_n_MAP_REG0x00C8 + n · 0x0004Программное прерывание n → прерывание ядра0x0000 0000
INTERRUPT_CORE0_ASSIST_DEBUG_INTR_MAP_REG0x00D8Источник Debug Assistant → прерывание ядра0x0000 0000
INTERRUPT_CORE0_DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP_REG0x00DCНарушение прав доступа GDMA → прерывание ядра0x0000 0000
INTERRUPT_CORE0_CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG0x00E0Нарушение прав доступа к IRAM → прерывание ядра0x0000 0000
INTERRUPT_CORE0_CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG0x00E4Нарушение прав доступа к DRAM → прерывание ядра0x0000 0000
INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP_REG0x00E8Нарушение прав доступа к периферии → прерывание ядра0x0000 0000
INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP_REG0x00ECНарушение размера доступа к периферии → прерывание ядра0x0000 0000
INTERRUPT_CORE0_BACKUP_PMS_VIOLATE_INTR_MAP_REG0x00F0Нарушение прав доступа к кэшу → прерывание ядра0x0000 0000
INTERRUPT_CORE0_CACHE_CORE0_ACS_INT_MAP_REG0x00F4Ошибка доступа ядра к кэшу → прерывание ядра0x0000 0000
INTERRUPT_CORE0_INTR_STATUS_n_REG0x00F8 + n · 0x0004Состояние источников: 0…31 и 32…610x0000 0000
INTERRUPT_CORE0_CLOCK_GATE_REG0x0100Тактирование регистров матрицы0x0000 0001
INTERRUPT_CORE0_CPU_INT_ENABLE_REG0x0104Разрешение прерываний ядра0x0000 0000
INTERRUPT_CORE0_CPU_INT_TYPE_REG0x0108Тип прерываний ядра: уровень или фронт0x0000 0000
INTERRUPT_CORE0_CPU_INT_CLEAR_REG0x010CСброс прерываний ядра по фронту0x0000 0000
INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG0x0110Ожидающие прерывания ядра0x0000 0000
INTERRUPT_CORE0_CPU_INT_PRI_n_REG0x0114 + n · 0x0004Приоритет прерывания ядра n0x0000 0000
INTERRUPT_CORE0_CPU_INT_THRESH_REG0x0194Порог приоритета0x0000 0000
INTERRUPT_CORE0_INTERRUPT_DATE_REG0x07FCВерсия блока: дата ревизии аппаратуры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_MAP4:0R/W0x00

INTERRUPT_CORE0_I2C_MST_INT_MAP_REG — источник внутреннего I2C-ведущего → прерывание ядра

Смещение 0x002C, адрес 0x600C 202C, после сброса 0x0000 0000. TRM: регистр 8.2.

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

INTERRUPT_CORE0_SLCn_INTR_MAP_REG — источник SLC n → прерывание ядра

2 копии, n = 0, 1: смещение 0x0030 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.3.

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

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_MAP4:0R/W0x00

INTERRUPT_CORE0_UHCI0_INTR_MAP_REG — источник UHCI0 → прерывание ядра

Смещение 0x003C, адрес 0x600C 203C, после сброса 0x0000 0000. TRM: регистр 8.6.

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

INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_MAP_REG — источник GPIO → прерывание ядра

Смещение 0x0040, адрес 0x600C 2040, после сброса 0x0000 0000. TRM: регистр 8.7.

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

INTERRUPT_CORE0_SPI_INTR_n_MAP_REG — источник SPI n → прерывание ядра

2 копии, n = 1, 2: смещение 0x0044 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.8.

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

INTERRUPT_CORE0_I2S_INT_MAP_REG — источник I2S → прерывание ядра

Смещение 0x0050, адрес 0x600C 2050, после сброса 0x0000 0000. TRM: регистр 8.10 (INTERRUPT_CORE0_I2S_INT_MAP_REG).

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

INTERRUPT_CORE0_UART_INTR_MAP_REG — источник UART0 → прерывание ядра

Смещение 0x0054, адрес 0x600C 2054, после сброса 0x0000 0000. TRM: регистр 8.11.

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

INTERRUPT_CORE0_UART1_INTR_MAP_REG — источник UART1 → прерывание ядра

Смещение 0x0058, адрес 0x600C 2058, после сброса 0x0000 0000. TRM: регистр 8.12.

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

INTERRUPT_CORE0_LEDC_INT_MAP_REG — источник LEDC → прерывание ядра

Смещение 0x005C, адрес 0x600C 205C, после сброса 0x0000 0000. TRM: регистр 8.13.

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

INTERRUPT_CORE0_EFUSE_INT_MAP_REG — источник eFuse → прерывание ядра

Смещение 0x0060, адрес 0x600C 2060, после сброса 0x0000 0000. TRM: регистр 8.14.

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

INTERRUPT_CORE0_CAN_INT_MAP_REG — источник TWAI (CAN) → прерывание ядра

Смещение 0x0064, адрес 0x600C 2064, после сброса 0x0000 0000. TRM: регистр 8.15 (INTERRUPT_CORE0_TWAI_INT_MAP_REG).

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

INTERRUPT_CORE0_USB_INTR_MAP_REG — источник USB Serial/JTAG → прерывание ядра

Смещение 0x0068, адрес 0x600C 2068, после сброса 0x0000 0000. TRM: регистр 8.16.

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

INTERRUPT_CORE0_RTC_CORE_INTR_MAP_REG — источник RTC_CNTL → прерывание ядра

Смещение 0x006C, адрес 0x600C 206C, после сброса 0x0000 0000. TRM: регистр 8.17.

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

INTERRUPT_CORE0_RMT_INTR_MAP_REG — источник RMT → прерывание ядра

Смещение 0x0070, адрес 0x600C 2070, после сброса 0x0000 0000. TRM: регистр 8.18.

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

INTERRUPT_CORE0_I2C_EXT0_INTR_MAP_REG — источник I2C0 → прерывание ядра

Смещение 0x0074, адрес 0x600C 2074, после сброса 0x0000 0000. TRM: регистр 8.19.

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

INTERRUPT_CORE0_TIMER_INTn_MAP_REG — источник TIMER n → прерывание ядра

2 копии, n = 1, 2: смещение 0x0074 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.20.

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

INTERRUPT_CORE0_TG_T0_INT_MAP_REG — источник таймера T0 группы TIMG0 → прерывание ядра

Смещение 0x0080, адрес 0x600C 2080, после сброса 0x0000 0000. TRM: регистр 8.22.

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

INTERRUPT_CORE0_TG_WDT_INT_MAP_REG — источник сторожа группы TIMG0 → прерывание ядра

Смещение 0x0084, адрес 0x600C 2084, после сброса 0x0000 0000. TRM: регистр 8.23.

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

INTERRUPT_CORE0_TG1_T0_INT_MAP_REG — источник таймера T0 группы TIMG1 → прерывание ядра

Смещение 0x0088, адрес 0x600C 2088, после сброса 0x0000 0000. TRM: регистр 8.24.

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

INTERRUPT_CORE0_TG1_WDT_INT_MAP_REG — источник сторожа группы TIMG1 → прерывание ядра

Смещение 0x008C, адрес 0x600C 208C, после сброса 0x0000 0000. TRM: регистр 8.25.

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

INTERRUPT_CORE0_CACHE_IA_INT_MAP_REG — источник ошибки доступа к кэшу → прерывание ядра

Смещение 0x0090, адрес 0x600C 2090, после сброса 0x0000 0000. TRM: регистр 8.26.

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

INTERRUPT_CORE0_SYSTIMER_TARGETn_INT_MAP_REG — источник компаратора n системного таймера → прерывание ядра

3 копии, n = 0…2: смещение 0x0094 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.27.

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

INTERRUPT_CORE0_SPI_MEM_REJECT_INTR_MAP_REG — источник отказа контроллера флеш-памяти → прерывание ядра

Смещение 0x00A0, адрес 0x600C 20A0, после сброса 0x0000 0000. TRM: регистр 8.30.

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

INTERRUPT_CORE0_ICACHE_PRELOAD_INT_MAP_REG — источник предзагрузки кэша → прерывание ядра

Смещение 0x00A4, адрес 0x600C 20A4, после сброса 0x0000 0000. TRM: регистр 8.31.

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

INTERRUPT_CORE0_ICACHE_SYNC_INT_MAP_REG — источник синхронизации кэша → прерывание ядра

Смещение 0x00A8, адрес 0x600C 20A8, после сброса 0x0000 0000. TRM: регистр 8.32.

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

INTERRUPT_CORE0_APB_ADC_INT_MAP_REG — источник АЦП → прерывание ядра

Смещение 0x00AC, адрес 0x600C 20AC, после сброса 0x0000 0000. TRM: регистр 8.33.

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

INTERRUPT_CORE0_DMA_CHn_INT_MAP_REG — источник канала n GDMA → прерывание ядра

3 копии, n = 0…2: смещение 0x00B0 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 8.34.

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

INTERRUPT_CORE0_RSA_INT_MAP_REG — источник ускорителя RSA → прерывание ядра

Смещение 0x00BC, адрес 0x600C 20BC, после сброса 0x0000 0000. TRM: регистр 8.37.

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

INTERRUPT_CORE0_AES_INT_MAP_REG — источник ускорителя AES → прерывание ядра

Смещение 0x00C0, адрес 0x600C 20C0, после сброса 0x0000 0000. TRM: регистр 8.38.

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

INTERRUPT_CORE0_SHA_INT_MAP_REG — источник ускорителя SHA → прерывание ядра

Смещение 0x00C4, адрес 0x600C 20C4, после сброса 0x0000 0000. TRM: регистр 8.39.

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

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_MAP4:0R/W0x00

INTERRUPT_CORE0_ASSIST_DEBUG_INTR_MAP_REG — источник Debug Assistant → прерывание ядра

Смещение 0x00D8, адрес 0x600C 20D8, после сброса 0x0000 0000. TRM: регистр 8.44.

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

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_MAP4:0R/W0x00

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_MAP4:0R/W0x00

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_MAP4:0R/W0x00

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_MAP4:0R/W0x00

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_MAP4:0R/W0x00

INTERRUPT_CORE0_BACKUP_PMS_VIOLATE_INTR_MAP_REG — нарушение прав доступа к кэшу → прерывание ядра

Смещение 0x00F0, адрес 0x600C 20F0, после сброса 0x0000 0000. TRM: регистр 8.50.

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

INTERRUPT_CORE0_CACHE_CORE0_ACS_INT_MAP_REG — ошибка доступа ядра к кэшу → прерывание ядра

Смещение 0x00F4, адрес 0x600C 20F4, после сброса 0x0000 0000. TRM: регистр 8.51.

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

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_n31:0RO0x0000 0000Бит на источник: 1 — источник сейчас активен

INTERRUPT_CORE0_CLOCK_GATE_REG — тактирование регистров матрицы

Смещение 0x0100, адрес 0x600C 2100, после сброса 0x0000 0001. TRM: регистр 8.54.

ПолеБитыДоступСбросНазначение
CLK_EN0R/W1Принудительно тактировать регистры матрицы

INTERRUPT_CORE0_CPU_INT_ENABLE_REG — разрешение прерываний ядра

Смещение 0x0104, адрес 0x600C 2104, после сброса 0x0000 0000. TRM: регистр 8.55.

ПолеБитыДоступСбросНазначение
CPU_INT_ENABLE31:0R/W0x0000 0000Бит n разрешает прерывание ядра n

INTERRUPT_CORE0_CPU_INT_TYPE_REG — тип прерываний ядра: уровень или фронт

Смещение 0x0108, адрес 0x600C 2108, после сброса 0x0000 0000. TRM: регистр 8.56.

ПолеБитыДоступСбросНазначение
CPU_INT_TYPE31:0R/W0x0000 0000Бит n: 0 — прерывание n по уровню, 1 — по фронту

INTERRUPT_CORE0_CPU_INT_CLEAR_REG — сброс прерываний ядра по фронту

Смещение 0x010C, адрес 0x600C 210C, после сброса 0x0000 0000. TRM: регистр 8.57.

ПолеБитыДоступСбросНазначение
CPU_INT_CLEAR31:0R/W0x0000 0000Бит n сбрасывает защёлкнутое прерывание n по фронту

INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG — ожидающие прерывания ядра

Смещение 0x0110, адрес 0x600C 2110, после сброса 0x0000 0000. TRM: регистр 8.58.

ПолеБитыДоступСбросНазначение
CPU_INT_EIP_STATUS31:0RO0x0000 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_MAP3:0R/W0x0Приоритет 1…15; 15 — высший

INTERRUPT_CORE0_CPU_INT_THRESH_REG — порог приоритета

Смещение 0x0194, адрес 0x600C 2194, после сброса 0x0000 0000. TRM: регистр 8.60.

ПолеБитыДоступСбросНазначение
CPU_INT_THRESH3:0R/W0x0Принимаются прерывания с приоритетом не ниже порога

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

Смещение 0x07FC, адрес 0x600C 27FC, после сброса 0x0200 7210. TRM: регистр 8.61 (INTERRUPT_CORE0_INTERRUPT_DATE_REG).

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

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

Как вручную подключить прерывание 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 строит вложенные прерывания.

Источники

  1. Espressif. ESP32-C3 Technical Reference Manual, версия 1.4 — глава 8: таблица 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

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