Контроллер прерывания ESP32-C3 позволяет выполнять захват, маскирование и динамическую настройку приоритетов от сигналов источников прерывания, поступающих от периферийных устройств на RISC-V CPU. Контроллер прерываний поддерживает:
• До 31 асинхронных прерываний с уникальными ID (1-31). • Конфигурацию через чтение/запись регистров MMR (memory mapped register). • Поддерживаются источники прерываний как по уровню (level), так и по перепаду сигнала (edge). • 15 уровней приоритета, программируемого для каждого прерывания. • Программируемый глобальный порог для маскируемых прерываний с пониженным приоритетом. • ID прерываний отображаются на смещения таблицы векторов прерываний (trap-vector address offsets).
Полный список регистров прерывания и их подробное описание см. в [1], глава "Interrupt Matrix (INTMTRX)", секция 8.4, группа регистров "CPU Interrupt Registers".
[Свойства ID прерываний]
Каждый ID обладает привязанными к нему 5 свойствами:
1. Enable State (0-1).
• Определяет, разрешено ли прерывание для захвата и обработки ядром CPU. • Программируется записью соответствующего бита в регистр INTERRUPT_CORE0_CPU_INT_ENABLE_REG.
2. Type (0-1).
• Позволяет защелкнуть состояние сигнала прерывания по его фронту. • Программируется записью соответствующего бита в регистр INTERRUPT_CORE0_CPU_INT_TYPE_REG. • Прерывание, для которого Type сохраняется равным 0, называется прерыванием типа "level" (прерывание по уровню). • Прерывание, для которого Type устанавливается равным 1, называется прерыванием типа "edge" (прерывание по перепаду).
3. Priority (1 .. 15).
• Определяет, какое прерывание вместе с другими прерываниями, ожидающими обработки, будет обработано CPU в первую очередь. • Программируется записью INTERRUPT_CORE0_CPU_INT_PRI_n_REG для определенного interrupt ID n в диапазоне (1-31). • Разрешенные прерывания с приоритетом 0 или меньше, чем значение порога в INTERRUPT_CORE0_CPU_INT_THRESH_REG, будут маскироваться. • Уровни приоритета повышаются от 1 (самый низкий приоритет) до 15 (самый высокий приоритет). • Прерывания с одинаковым приоритетом статически приоритизируются по их ID, при этом самый малый ID получает самый высокий приоритет.
4. Pending State (0-1).
• Отражает захваченное состояние разрешенного и демаскированного сигнала прерывания. • Для каждого interrupt ID соответствующий бит (read-only) в регистре INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG показывает его состояние ожидания обработки. • Ожидающее обработки прерывание приведет к тому, что CPU войдет в ловушку (trap), если нет других ожидающих обработки прерываний с более высоким приоритетом. • Считается, что ожидающее обработки прерывание является "заявленным" (claimed) если оно вытесняет обработку другого кода и заставляет CPU перейти по соответствующему вектору обработки прерывания (trap vector address). • Все ожидающие обработки прерывания, которые которые пока не обрабатываются, обозначаются как "не заявленные" (unclaimed).
5. Clear State (0-1).
• Переключение этого бита очистит состояние ожидания только для заявленных прерываний, работающих по перепаду (edge). • Переключение происходит путем установки и последующего сброс соответствующего бита в регистре INTERRUPT_CORE0_CPU_INT_CLEAR_REG. • Этот бит не влияет на прерывание, работающее по уровню (level), и должно быть очищено из источника. • Состояние ожидания обработки для unclaimed прерывания типа edge может быть при необходимости сброшено (flushed), путем предварительной очистки бита в регистре INTERRUPT_CORE0_CPU_INT_ENABLE_REG, и затем переключения того же самого бита в регистре INTERRUPT_CORE0_CPU_INT_CLEAR_REG.
Когда CPU обслуживает ожидающее обработки прерывания, происходит следующее:
• CPU сохраняет адрес текущей выполняемой инструкции mepc, чтобы позже можно было продолжить её выполнение. • CPU обновляет значение mcause на ID обрабатываемого прерывания. • CPU копирует состояние MIE в MPIE, после чего очищает MIE, тем самым прерывания глобально запрещаются. • CPU входит в trap путем перехода по выровненному на размер слова (word-aligned) смещению адреса, сохраненного в mtvec.
Таблица 1-3 показывает отображение каждого interrupt ID на соответствующий вектор прерывания (trap-vector address). Если кратко, то word aligned trap address для прерывания с определенным ID = i может быть вычислен как (mtvec + 4i).
Примечание: ID = 0 недоступен, поэтому не может использоваться для захвата прерываний. Причина в том, что соответствующий trap vector address (mtvec + 0x00) зарезервирован для исключений (exceptions).
Таблица 1-3. Карта идентификаторов для адресов векторов прерываний.
ID |
Адрес |
0 |
Недоступно |
1 |
mtvec + 0x04 |
2 |
mtvec + 0x08 |
3 |
mtvec + 0x0C |
4 |
mtvec + 0x10 |
5 |
mtvec + 0x14 |
6 |
mtvec + 0x18 |
7 |
mtvec + 0x1C |
8 |
mtvec + 0x20 |
9 |
mtvec + 0x24 |
10 |
mtvec + 0x28 |
11 |
mtvec + 0x2C |
12 |
mtvec + 0x30 |
13 |
mtvec + 0x34 |
14 |
mtvec + 0x38 |
15 |
mtvec + 0x3C |
16 |
mtvec + 0x40 |
17 |
mtvec + 0x44 |
18 |
mtvec + 0x48 |
19 |
mtvec + 0x4C |
20 |
mtvec + 0x50 |
21 |
mtvec + 0x54 |
22 |
mtvec + 0x58 |
23 |
mtvec + 0x5C |
24 |
mtvec + 0x60 |
25 |
mtvec + 0x64 |
26 |
mtvec + 0x68 |
27 |
mtvec + 0x6C |
28 |
mtvec + 0x70 |
29 |
mtvec + 0x74 |
30 |
mtvec + 0x78 |
31 |
mtvec + 0x7C |
После перехода на адрес вектора прерывания поток выполнения зависит от программной реализации, хотя скорее всего прерывание будет обработано (и очищено) в каком-то обработчике (interrupt service routine, ISR), и нормальное выполнение кода возобновится, как только CPU выполнит инструкцию MRET.
При выполнении инструкции MRET происходит следующее:
• CPU копирует состояние MPIE обратно в MIE, и затем очищает MPIE. Это значит, что если ранее MPIE был установлен, то после MRET будет установлен MIE, что глобально разрешит прерывания. • CPU переходит по адресу, сохраненному в mepc, и выполнение кода возобновляется.
Есть возможность реализовать программно-управляемую вложенность прерываний внутри ISR, как это показано далее в разделе "Рекомендации по обработке прерываний".
Ниже перечислены моменты, описывающие функциональное поведение контроллера:
• Только если у прерывание ненулевой приоритет, который больше или равен значению в регистре порога, оно будет отражено в регистре INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG. • Если прерывание видимо в регистре INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG, и пока не обработано, то его можно маскировать (и предотвратить таким образом его обработку) путем либо понижения его приоритета, либо путем повышения глобального порога. • Если прерывание, видимое в INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG, было сброшено (и таким образом, была предотвращена его обработка), то оно должно быть запрещено (и очищено, если у него тип edge).
[Рекомендации по обработке прерываний]
Аспекты латентности. При настройке контроллера прерываний происходит задержка. В установившемся рабочем состоянии (steady state) у контроллера прерываний задержка фиксирована, и равна 4 тактам. Steady state означает, что недавно в регистры контроллера прерываний не было внесено никаких изменений. Это означает, что время обработки любого прерывания, установленного для контроллера, составит ровно 4 такта до момента, когда CPU начнет обработку прерывания. При этом также подразумевается, что CPU может выполнить до 5 инструкций перед тем, как произойдет вытеснение текущего кода.
Всякий раз, когда регистры контроллера прерываний модифицируются, он входит в переходное состояние, которое может занимать до 4 тактов, пока не станет снова активным steady state. Во время этого переходного состояния порядок прерываний может быть не предсказуемым, и поэтому для безопасности требуется несколько измерений в программе, чтобы избежать проблем синхронизации.
Также следует заметить, что регистры конфигурации контроллера прерываний лежат в диапазоне адресов APB, следовательно любой доступ на чтение/запись в эти регистры может занять несколько тактов. Принимая во внимание вышеупомянутые характеристики, пользователям рекомендуется следовать последовательности, описанной ниже, всякий раз, когда выполняется модификация любого из регистров контроллера прерываний:
1. Сохраните состояние MIE и очистите в 0 MIE. 2. Выполните операцию read-modify-write одного или нескольких регистров контроллера прерываний. 3. Выполните инструкцию FENCE, чтобы подождать завершения любой операции записи. 4. И наконец, восстановите состояние MIE.
Из-за критических ограничений рекомендуется предварительно запретить глобальные прерывания (MIE=0) всякий раз, когда конфигурируются регистры контроллера прерываний, и затем восстановить MIE, как показано в последовательности выше.
После завершения описанной выше последовательности контроллер прерываний возобновит работу в установившемся состоянии (steady state).
Процедура конфигурации. По умолчанию прерывания запрещены глобально, поскольку бит MIE в mstatus равен 0. Программа должна установить MIE=1 после инициализации стека прерывания (включая установку mtvec в адрес вектора прерывания).
Во время нормального выполнения кода, если прерывание n должно быть разрешено, следует придерживаться последовательности действий:
1. Сохраните состояние MIE и очистите MIE в 0. 2. В зависимости от типа прерывания (edge/level) установите или сбросьте n-бит регистра INTERRUPT_CORE0_CPU_INT_TYPE_REG. 3. Установите приоритет путем записи значения в регистр INTERRUPT_CORE0_CPU_INT_PRI_n_REG в диапазоне от 1 до 15. 4. Установите n-бит в INTERRUPT_CORE0_CPU_INT_ENABLE_REG. 5. Выполните инструкцию FENCE. 6. Восстановите состояние MIE.
Когда ожидают обработки одно или несколько прерываний, CPU подтверждает (claims) обработку прерывания с самым высоким приоритетом, и перескакивает на trap vector address, соответствующий ID прерывания. Программная реализация может прочитать mcause для определения типа trap (mcause(31) = 1 для прерываний и = 0 для исключений), и затем ID прерывания (mcause(4-0) дает ID прерывания или исключения). Это может не потребоваться, если каждый адрес в таблице векторов соответствует разным обработчикам. В конечном итоге обработчики trap перенаправляют выполнение на соответствующий ISR для этого прерывания.
На входе в ISR программа должна переключить n-бит регистра INTERRUPT_CORE0_CPU_INT_CLEAR_REG, если у прерывания тип edge, или очистить источник прерывания, если у него тип level.
Программа также может обновить значение INTERRUPT_CORE0_CPU_INT_THRESH_REG и запрограммировать MIE=1, чтобы позволить более высокоприоритетным прерываниям вытеснить текущий ISR (тем самым реализуется вложенность прерываний), однако перед этим все состояния регистров CSR должно быть сохранено (mepc, mstatus, mcause, и т. д.), поскольку они будут перезаписаны вытесняющим прерыванием. Позже, когда выполняется ISR, значения этих CSR должно быть восстановлено.
И наконец, когда выполнение вернется из ISR обратно в trap handler, используется инструкция MRET для возобновления нормального выполнения кода.
Впоследствии, если прерывание n больше не требуется и должно быть запрещено, нужно придерживаться последовательности действий:
1. Сохраните состояние MIE и очистите MIE в 0. 2. Проверьте в регистре INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG, имеется ли ожидающее обработки прерывание. 3. Установите/сбросьте бит n регистра INTERRUPT_CORE0_CPU_INT_ENABLE_REG. 4. Если на шаге 2 было обнаружено прерывание типа edge, то должен быть переключен n-бит регистра INTERRUPT_CORE0_CPU_INT_CLEAR_REG, тем самым будет сброшен (flush) его статус ожидания обработки. 5. Выполните инструкцию FENCE. 6. Восстановите состояние MIE.
Показанная здесь последовательность действий всего лишь рекомендуемая. Реальная реализация ПО может меняться.
[Описание регистров]
Адрес матрицы регистров прерываний (Interrupt Matrix) равен 0x600C2000, и занимает 4 килобайта (диапазон от 0x600C2000 до 0x600C2FFF включительно). Адреса контроллера прерываний базируются относительно адреса Interrupt Controller, предоставленного в таблице 3-4 главы 3 "System and Memory" [1]. Полный список регистров прерывания и подробное описание информации конфигурации см. в главе 8 "Interrupt Matrix (INTMTRX)", секция 8.4, группа регистров "CPU Interrupt Registers" [1].
В таблице 3-4 перечислены все модули/периферийные устройства и их соответствующие диапазоны адресов. Обратите внимание, что адресное пространство определенных модулей/периферийных устройств определены в столбцах "Диапазон адресов" (включая "Нижний адрес" и "Верхний адрес").
Таблица 3-4. Карта адресов модулей / периферийных устройств.
Периф. устройство
|
Диапазон адресов
|
Размер (байт) |
Нижний адрес |
Верхний адрес |
UART Controller 0 |
0x60000000 |
0x60000FFF |
4096 |
Зарезервировано |
0x60001000 |
0x60001FFF |
|
SPI Controller 1 |
0x60002000 |
0x60002FFF |
4096 |
SPI Controller 0 |
0x60003000 |
0x60003FFF |
4096 |
GPIO |
0x60004000 |
0x60004FFF |
4096 |
Зарезервировано |
0x60005000 |
0x60005FFF |
|
TIMER |
0x60007000 |
0x60007FFF |
4096 |
Low-Power Management |
0x60008000 |
0x60008FFF |
4096 |
IO MUX |
0x60009000 |
0x60009FFF |
4096 |
Зарезервировано |
0x6000A000 |
0x6000FFFF |
|
UART Controller 1 |
0x60010000 |
0x60010FFF |
4096 |
Зарезервировано |
0x60011000 |
0x60012FFF |
|
I2C Controller |
0x60013000 |
0x60013FFF |
4096 |
UHCIO |
0x60014000 |
0x60014FFF |
4096 |
Зарезервировано |
0x60015000 |
0x60015FFF |
|
Remote Control Peripheral |
0x60016000 |
0x60016FFF |
4096 |
Зарезервировано |
0x60017000 |
0x60018FFF |
|
LED PWM Controller |
0x60019000 |
0x60019FFF |
4096 |
eFuse Controller |
0x6001A000 |
0x6001AFFF |
4096 |
Зарезервировано |
0x6001B000 |
0x6001EFFF |
|
Timer Group 0 |
0x6001F000 |
0x6001FFFF |
4096 |
Timer Group 1 |
0x60020000 |
0x60020FFF |
4096 |
Зарезервировано |
0x60021000 |
0x60022FFF |
|
System Timer |
0x60023000 |
0x60023FFF |
4096 |
SPI Controller 2 |
0x60024000 |
0x60024FFF |
4096 |
Зарезервировано |
0x60025000 |
0x60025FFF |
|
APB Controller |
0x60026000 |
0x60026FFF |
4096 |
Зарезервировано |
0x60027000 |
0x6002AFFF |
|
Two-wire Automotive Interface |
0x6002B000 |
0x6002BFFF |
4096 |
Зарезервировано |
0x6002C000 |
0x6002CFFF |
|
I2S Controller |
0x6002D000 |
0x6002DFFF |
4096 |
Зарезервировано |
0x6002E000 |
0x60039FFF |
|
AES Accelerator |
0x6003A000 |
0x6003AFFF |
4096 |
SHA Accelerator |
0x6003B000 |
0x6003BFFF |
4096 |
RSA Accelerator |
0x6003C000 |
0x6003CFFF |
4096 |
Digital Signature |
0x6003D000 |
0x6003DFFF |
4096 |
HMAC Accelerator |
0x6003E000 |
0x6003EFFF |
4096 |
GDMA Controller |
0x6003F000 |
0x6003FFFF |
4096 |
ADC Controller |
0x60040000 |
0x60040FFF |
4096 |
Зарезервировано |
0x60041000 |
0x6002FFFF |
|
USB Serial/JTAG Controller |
0x60043000 |
0x60043FFF |
4096 |
Зарезервировано |
0x60044000 |
0x600BFFFF |
|
System Registers |
0x600C0000 |
0x600C0FFF |
4096 |
Sensitive Register |
0x600C1000 |
0x600C1FFF |
4096 |
Interrupt Matrix |
0x600C2000 |
0x600C2FFF |
4096 |
Зарезервировано |
0x600C3000 |
0x600C3FFF |
|
Configure Cache |
0x600C4000 |
0x600CBFFF |
32768 |
External Memory Encryption and Decryption |
0x600CC000 |
0x600CCFFF |
4096 |
Зарезервировано |
0x600CD000 |
0x600CDFFF |
|
Assist Debug |
0x600CE000 |
0x600CEFFF |
4096 |
Зарезервировано |
0x600CF000 |
0x600CFFFF |
|
World Controller |
0x600D0000 |
0x600D0FFF |
4096 |
[Interrupt Matrix (INTMTRX)]
Матрица прерываний, встроенная в ESP32-C3, независимо перенаправляет источники прерываний периферийных устройств в в прерывания периферийных устройств ESP-RISC-V CPU, чтобы своевременно информировать CPU о необходимости обработки поступающих прерываний. У ESP32-C3 есть 62 внутренних источника прерываний периферийных устройств. Эта матрица прерываний необходима, чтобы отобразить их на 31 прерывание CPU.
Примечание: в этой главе описание сфокусировано на том, как отображаются источники прерываний периферийных устройств на прерывания CPU. Более подробно про конфигурацию прерываний, вектора, рекомендуемые операции ISA, см. [2].
Функции Interrupt Matrix (INTMTRX):
• На входе принимает сигналы до 62 источников прерываний от периферийных устройств. • На выходе генерирует для CPU до 31 прерываний периферийных устройств. • Опрос текущего состояния источников прерываний прерываний периферийных устройств. • Конфигурирование приоритета, типа, порога и разрешения сигналов прерывания CPU.
На рис. 8-1 показана структура матрицы прерываний.
Рис. 8-1. Структура Interrupt Matrix.
Источники прерываний. Всего у ESP32-C3 есть 62 источника прерываний от периферийных устройств. В таблице 8-1 перечислены все источники и их соответствующие регистры конфигурации и статуса.
• Столбец "№": номер источника прерывания от периферийного устройства, может быть в диапазоне 0 .. 61.
• Столбец "Глава": показывает, в какой главе [1] подробно описан источник прерывания.
• Столбец "Источник": имя источника прерывания периферийного устройства.
• Столбец "Регистр конфигурации": регистры, используемые для перенаправления сигнала источника прерывания от периферийного устройства на прерывания периферийных устройств CPU.
• Столбец "Регистр статуса": регистры, используемые для индикации состояния прерывания от источников прерываний периферийных устройств.
– Столбец "Регистр статус - Бит": позиция бита в регистре статуса, показывающего статус прерывания. – Столбец "Регистр статуса - Имя": мнемоническое имя регистров статуса.
Таблица 8-1. Регистры конфигурации/статуса прерываний CPU и источников прерывания периферийных устройств.
№
|
Глава
|
Источник
|
Регистр конфигурации
|
Регистр статуса |
Бит |
Имя |
0 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
0 |
INTERRUPT_CORE0_ INTR_STATUS_0_REG |
1 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
1 |
2 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
2 |
3 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
3 |
4 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
4 |
5 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
5 |
6 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
6 |
7 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
7 |
8 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
8 |
9 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
9 |
10 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
10 |
11 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
11 |
12 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
12 |
13 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
13 |
14 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
14 |
15 |
UART Controller (UART) |
UHCI0_INTR |
INTERRUPT_CORE0_UHCI0_INTR_MAP_REG |
15 |
16 |
IO MUX and GPIO Matrix (GPIO, IO MUX) |
GPIO_PROCPU_INTR |
INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_MAP_REG |
16 |
17 |
GPIO_PROCPU_NMI_INTR |
INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_NMI_MAP_REG |
17 |
18 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
18 |
19 |
SPI Controller (SPI) |
GPSPI2_INTR_2 |
INTERRUPT_CORE0_SPI_INTR_2_MAP_REG |
19 |
20 |
I2S Controller (I2S) |
I2S_INTR |
INTERRUPT_CORE0_I2S1_INT_MAP_REG |
20 |
21 |
UART Controller (UART) |
UART_INTR |
INTERRUPT_CORE0_UART_INTR_MAP_REG |
21 |
22 |
UART1_INTR |
INTERRUPT_CORE0_UART1_INTR_MAP_REG |
22 |
23 |
LED PWM Controller (LEDC) |
LEDC_INTR |
INTERRUPT_CORE0_LEDC_INT_MAP_REG |
23 |
24 |
eFuse Controller (EFUSE) |
EFUSE_INTR |
INTERRUPT_CORE0_EFUSE_INT_MAP_REG |
24 |
25 |
Two-wire Automotive Interface (TWAI) |
TWAI_INTR |
INTERRUPT_CORE0_CAN_INT_MAP_REG |
25 |
26 |
USB Serial/JTAG Controller (USB_SERIAL_JTAG) |
USB_SERIAL_JTAG_INTR |
INTERRUPT_CORE0_USB_INTR_MAP_REG |
26 |
27 |
Low-power Management |
RTC_CNTL_INTR |
INTERRUPT_CORE0_RTC_CORE_INTR_MAP_REG |
27 |
28 |
Remote Control Peripheral (RMT) |
RMT_INTR |
INTERRUPT_CORE0_RMT_INTR_MAP_REG |
28 |
29 |
I2C Controller (I2C) |
I2C_EXT0_INTR |
INTERRUPT_CORE0_I2C_EXT0_INTR_MAP_REG |
29 |
30 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
30 |
31 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
31 |
32 |
Timer Group (TIMG) |
TG_T0_INTR |
INTERRUPT_CORE0_TG_T0_INT_MAP_REG |
0 |
INTERRUPT_CORE0_ INTR_STATUS_1_REG |
33 |
TG_WDT_INTR |
INTERRUPT_CORE0_TG_WDT_INT_MAP_REG |
1 |
34 |
TG1_T0_INTR |
INTERRUPT_CORE0_TG1_T0_INT_MAP_REG |
2 |
35 |
TG1_WDT_INTR |
INTERRUPT_CORE0_TG1_WDT_INT_MAP_REG |
3 |
36 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
4 |
37 |
System Timer (SYSTIMER) |
SYSTIMER_TARGET0_INTR |
INTERRUPT_CORE0_SYSTIMER_TARGET0_INT_MAP_REG |
5 |
38 |
SYSTIMER_TARGET1_INTR |
INTERRUPT_CORE0_SYSTIMER_TARGET1_INT_MAP_REG |
6 |
39 |
SYSTIMER_TARGET2_INTR |
INTERRUPT_CORE0_SYSTIMER_TARGET2_INT_MAP_REG |
7 |
40 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
8 |
41 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
9 |
42 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
10 |
43 |
On-Chip Sensor and Analog Signal Processing |
vDIGTAL_ADC_INTR |
INTERRUPT_CORE0_APB_ADC_INT_MAP_REG |
11 |
44 |
GDMA Controller (GDMA) |
GDMA_CH0_INTR |
INTERRUPT_CORE0_DMA_CH0_INT_MAP_REG |
12 |
45 |
GDMA_CH1_INTR |
INTERRUPT_CORE0_DMA_CH1_INT_MAP_REG |
13 |
46 |
GDMA_CH2_INTR |
INTERRUPT_CORE0_DMA_CH2_INT_MAP_REG |
14 |
47 |
RSA Accelerator (RSA) |
RSA_INTR |
INTERRUPT_CORE0_RSA_INTR_MAP_REG |
15 |
48 |
AES Accelerator (AES) |
AES_INTR |
INTERRUPT_CORE0_AES_INTR_MAP_REG |
16 |
49 |
SHA Accelerator (SHA) |
SHA_INTR |
INTERRUPT_CORE0_SHA_INTR_MAP_REG |
17 |
50 |
System Registers (SYSREG) |
SW_INTR_0 |
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_0_MAP_REG |
18 |
51 |
SW_INTR_1 |
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_1_MAP_REG |
19 |
52 |
SW_INTR_2 |
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_2_MAP_REG |
20 |
53 |
SW_INTR_3 |
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_3_MAP_REG |
21 |
54 |
Debug Assist |
ASSIST_DEBUG_INTR |
INTERRUPT_CORE0_ASSIST_DEBUG_INTR_MAP_REG |
22 |
55 |
Permission Control (PMS) [будет добавлено позже] |
PMS_DMA_VIO_INTR |
INTERRUPT_CORE0_DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP_REG |
23 |
56 |
PMS_IBUS_VIO_INTR |
INTERRUPT_CORE0_CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG |
24 |
57 |
PMS_DBUS_VIO_INTR |
INTERRUPT_CORE0_CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG |
25 |
58 |
PMS_PERI_VIO_INTR |
INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP_REG |
26 |
59 |
PMS_PERI_VIO_SIZE_INTR |
INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP_REG |
27 |
28 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
28 |
29 |
Зарезервировано |
Зарезервировано |
Зарезервировано |
29 |
Прерывания CPU. ESP32-C3 реализует свой механизм прерываний на основе контроллера прерываний вместо спецификации RISC-V Privileged ISA. У ESP-RISC-V CPU есть 31 прерывания, пронумерованных в диапазоне 1 .. 31. Каждое прерывание CPU имеет следующие свойства.
• Уровни приоритета от 1 (самый низкий приоритет) до 15 (самый высокий приоритет). • Конфигурируемый тип прерывания - срабатывание либо по уровню сигнала (level-triggered) или по перепаду уровня (edge-triggered). • Прерывания с низким уровнем можно маскировать с помощью установки порога (interrupt threshold).
Примечание: для подробной информации о том, как конфигурировать прерывания CPU, см. [2].
Выделение источника прерывания периферийного устройства для CPU. В этой секции используются следующие термины для описания работы матрицы прерываний.
• Source_X: означает источник прерывания от периферийного устройства, где X обозначает номер этого прерывания в таблице 8-1. • INTERRUPT_CORE0_SOURCE_X_MAP_REG: обозначает регистр конфигурации для источника прерывания периферийного устройства (Source_X). • Num_P: индекс прерывания CPU, может быть 1 .. 31. • Interrupt_P: означает для CPU номер прерывания как Num_P.
Выделение одного источника прерывания периферийного устройства (Source_X) для CPU. Установка соответствующего регистра конфигурации INTERRUPT_CORE0_SOURCE_X_MAP_REG для Source_X в Num_P выделяет этот источник прерывания для Interrupt_P.
Выделение нескольких источников прерывания периферийного устройства (Source_Xn) для CPU. Установка соответствующего регистра конфигурации INTERRUPT_CORE0_SOURCE_Xn_MAP_REG каждого источника прерывания в одинаковое значение Num_P выделяет несколько источников прерывания для одного и тог же Interrupt_P. Любой из этих источников может вызвать активацию CPU Interrupt_P. Когда генерируется сигнал прерывания, CPU должен проверить регистры статуса прерывания, чтобы определить периферийное устройство, которое сгенерировало прерывание. Для дополнительной информации см. [2].
Запрет источника прерывания периферийного устройства для CPU (Source_X). Очистка регистра конфигурации INTERRUPT_CORE0_SOURCE_X_MAP_REG запретит соответствующий источник прерывания.
Опрос текущего статуса прерывания от источника периферийного устройства. Пользователи могут опрашивать статус прерывания источника от периферийного устройства путем чтения значения бита в регистре INTERRUPT_CORE0_INTR_STATUS_n_REG (регистр только для чтения). Для отображения между INTERRUPT_CORE0_INTR_STATUS_n_REG и источниками прерываний от периферийных устройств см. таблицу 8-1.
[Общее описание регистров]
Имя |
Описание |
Адрес |
Доступ |
Interrupt Source Mapping Registers (регистры привязки источника прерывания) |
INTERRUPT_CORE0_PWR_INTR_MAP_REG |
Регистр привязки PWR_INTR |
0x0008 |
R/W |
INTERRUPT_CORE0_I2C_MST_INT_MAP_REG |
Регистр привязки I2C_MST_INT |
0x002C |
R/W |
INTERRUPT_CORE0_SLC0_INTR_MAP_REG |
Регистр привязки SLC0_INTR |
0x0030 |
R/W |
INTERRUPT_CORE0_SLC1_INTR_MAP_REG |
Регистр привязки SLC1_INTR |
0x0034 |
R/W |
INTERRUPT_CORE0_APB_CTRL_INTR_MAP_REG |
Регистр привязки APB_CTRL_INTR |
0x0038 |
R/W |
INTERRUPT_CORE0_UHCI0_INTR_MAP_REG |
Регистр привязки UHCI0_INTR |
0x003C |
R/W |
INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_MAP_REG |
Регистр привязки GPIO_INTERRUPT_PRO |
0x0040 |
R/W |
INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_NMI_MAP_REG |
Регистр привязки GPIO_INTERRUPT_PRO_NMI |
0x0044 |
R/W |
INTERRUPT_CORE0_SPI_INTR_1_MAP_REG |
Регистр привязки SPI_INTR_1 |
0x0048 |
R/W |
INTERRUPT_CORE0_SPI_INTR_2_MAP_REG |
Регистр привязки SPI_INTR_2 |
0x004C |
R/W |
INTERRUPT_CORE0_I2S1_INT_MAP_REG |
Регистр привязки I2S1_INT |
0x0050 |
R/W |
INTERRUPT_CORE0_UART_INTR_MAP_REG |
Регистр привязки UART_INTR |
0x0054 |
R/W |
INTERRUPT_CORE0_UART1_INTR_MAP_REG |
Регистр привязки UART1_INTR |
0x0058 |
R/W |
INTERRUPT_CORE0_LEDC_INT_MAP_REG |
Регистр привязки LEDC_INT |
0x005C |
R/W |
INTERRUPT_CORE0_EFUSE_INT_MAP_REG |
Регистр привязки EFUSE_INT |
0x0060 |
R/W |
INTERRUPT_CORE0_CAN_INT_MAP_REG |
Регистр привязки CAN_INT |
0x0064 |
R/W |
INTERRUPT_CORE0_USB_INTR_MAP_REG |
Регистр привязки USB_INTR |
0x0068 |
R/W |
INTERRUPT_CORE0_RTC_CORE_INTR_MAP_REG |
Регистр привязки RTC_CORE_INTR |
0x006C |
R/W |
INTERRUPT_CORE0_RMT_INTR_MAP_REG |
Регистр привязки RMT_INTR |
0x0070 |
R/W |
INTERRUPT_CORE0_I2C_EXT0_INTR_MAP_REG |
Регистр привязки I2C_EXT0 |
0x0074 |
R/W |
INTERRUPT_CORE0_TIMER_INT1_MAP_REG |
Регистр привязки TIMER_INT1 |
0x0078 |
R/W |
INTERRUPT_CORE0_TIMER_INT2_MAP_REG |
Регистр привязки TIMER_INT2 |
0x007C |
R/W |
INTERRUPT_CORE0_TG_T0_INT_MAP_REG |
Регистр привязки TG_T0_INT |
0x0080 |
R/W |
INTERRUPT_CORE0_TG_WDT_INT_MAP_REG |
Регистр привязки TG_WDT_INT |
0x0084 |
R/W |
INTERRUPT_CORE0_TG1_T0_INT_MAP_REG |
Регистр привязки TG1_T0_INT |
0x0088 |
R/W |
INTERRUPT_CORE0_TG1_WDT_INT_MAP_REG |
Регистр привязки TG1_WDT_INT |
0x008C |
R/W |
INTERRUPT_CORE0_CACHE_IA_INT_MAP_REG |
Регистр привязки CACHE_IA_INT |
0x0090 |
R/W |
INTERRUPT_CORE0_SYSTIMER_TARGET0_INT_MAP_REG |
Регистр привязки SYSTIMER_TARGET0_INT |
0x0094 |
R/W |
INTERRUPT_CORE0_SYSTIMER_TARGET1_INT_MAP_REG |
Регистр привязки SYSTIMER_TARGET1_INT |
0x0098 |
R/W |
INTERRUPT_CORE0_SYSTIMER_TARGET2_INT_MAP_REG |
Регистр привязки SYSTIMER_TARGET2_INT |
0x009C |
R/W |
INTERRUPT_CORE0_SPI_MEM_REJECT_INTR_MAP_REG |
Регистр привязки SPI_MEM_REJECT_INTR |
0x00A0 |
R/W |
INTERRUPT_CORE0_ICACHE_PRELOAD_INT_MAP_REG |
Регистр привязки ICACHE_PRELOAD_INT |
0x00A4 |
R/W |
INTERRUPT_CORE0_ICACHE_SYNC_INT_MAP_REG |
Регистр привязки ICACHE_SYNC_INT |
0x00A8 |
R/W |
INTERRUPT_CORE0_APB_ADC_INT_MAP_REG |
Регистр привязки APB_ADC_INT |
0x00AC |
R/W |
INTERRUPT_CORE0_DMA_CH0_INT_MAP_REG |
Регистр привязки DMA_CH0_INT |
0x00B0 |
R/W |
INTERRUPT_CORE0_DMA_CH1_INT_MAP_REG |
Регистр привязки DMA_CH1_INT |
0x00B4 |
R/W |
INTERRUPT_CORE0_DMA_CH2_INT_MAP_REG |
Регистр привязки DMA_CH2_INT |
0x00B8 |
R/W |
INTERRUPT_CORE0_RSA_INT_MAP_REG |
Регистр привязки RSA_INT |
0x00BC |
R/W |
INTERRUPT_CORE0_AES_INT_MAP_REG |
Регистр привязки AES_INT |
0x00C0 |
R/W |
INTERRUPT_CORE0_SHA_INT_MAP_REG |
Регистр привязки SHA_INT |
0x00C4 |
R/W |
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_0_MAP_REG |
Регистр привязки CPU_INTR_FROM_CPU_0 |
0x00C8 |
R/W |
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_1_MAP_REG |
Регистр привязки CPU_INTR_FROM_CPU_1 |
0x00CC |
R/W |
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_2_MAP_REG |
Регистр привязки CPU_INTR_FROM_CPU_2 |
0x00D0 |
R/W |
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_2_MAP_REG |
Регистр привязки CPU_INTR_FROM_CPU_3 |
0x00D4 |
R/W |
INTERRUPT_CORE0_ASSIST_DEBUG_INTR_MAP_REG |
Регистр привязки ASSIST_DEBUG_INTR |
0x00D8 |
R/W |
INTERRUPT_CORE0_DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP_REG |
Регистр привязки DMA_APBPERI_PMS_MONITOR_VIOLATE |
0x00DC |
R/W |
INTERRUPT_CORE0_CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG |
Регистр привязки IRAM0_PMS_MONITOR_VIOLATE |
0x00E0 |
R/W |
INTERRUPT_CORE0_CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG |
Регистр привязки DRAM0_PMS_MONITOR_VIOLATE |
0x00E4 |
R/W |
INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP_REG |
Регистр привязки PIF_PMS_MONITOR_VIOLATE |
0x00E8 |
R/W |
INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP_REG |
Регистр привязки PIF_PMS_MONITOR_VIOLATE_SIZE |
0x00EC |
R/W |
INTERRUPT_CORE0_BACKUP_PMS_VIOLATE_INTR_MAP_REG |
Регистр привязки BACKUP_PMS_VIOLATE |
0x00F0 |
R/W |
INTERRUPT_CORE0_CACHE_CORE0_ACS_INT_MAP_REG |
Регистр привязки CACHE_CORE0_ACS |
0x00F4 |
R/W |
Interrupt Source Status Registers (регистры состояния источников прерывания) |
INTERRUPT_CORE0_INTR_STATUS_0_REG |
Регистр для источников прерывания 0 .. 31 |
0x00F8 |
RO |
INTERRUPT_CORE0_INTR_STATUS_1_REG |
Регистр для источников прерывания 32 .. 61 |
0x00FC |
RO |
Clock Register (регистр тактирования) |
INTERRUPT_CORE0_CLOCK_GATE_REG |
Регистр управления тактированием |
0x0100 |
R/W |
CPU Interrupt Registers (регистры прерываний) |
INTERRUPT_CORE0_CPU_INT_ENABLE_REG |
Регистр разрешения прерываний CPU |
0x0104 |
R/W |
INTERRUPT_CORE0_CPU_INT_TYPE_REG |
Регистр конфигурации типа прерываний CPU |
0x0108 |
R/W |
INTERRUPT_CORE0_CPU_INT_CLEAR_REG |
Регистр очистки прерываний CPU |
0x010C |
R/W |
INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG |
Регистр статуса ожидающих обработки прерываний CPU |
0x0110 |
RO |
INTERRUPT_CORE0_CPU_INT_PRI_1_REG |
Регистр конфигурирования приоритета для прерывания 1 CPU |
0x0118 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_2_REG |
Регистр конфигурирования приоритета для прерывания 2 CPU |
0x011C |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_3_REG |
Регистр конфигурирования приоритета для прерывания 3 CPU |
0x0120 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_4_REG |
Регистр конфигурирования приоритета для прерывания 4 CPU |
0x0124 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_5_REG |
Регистр конфигурирования приоритета для прерывания 5 CPU |
0x0128 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_6_REG |
Регистр конфигурирования приоритета для прерывания 6 CPU |
0x012C |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_7_REG |
Регистр конфигурирования приоритета для прерывания 7 CPU |
0x0130 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_8_REG |
Регистр конфигурирования приоритета для прерывания 8 CPU |
0x0134 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_9_REG |
Регистр конфигурирования приоритета для прерывания 9 CPU |
0x0138 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_10_REG |
Регистр конфигурирования приоритета для прерывания 10 CPU |
0x013C |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_11_REG |
Регистр конфигурирования приоритета для прерывания 11 CPU |
0x0140 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_12_REG |
Регистр конфигурирования приоритета для прерывания 12 CPU |
0x0144 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_13_REG |
Регистр конфигурирования приоритета для прерывания 13 CPU |
0x0148 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_14_REG |
Регистр конфигурирования приоритета для прерывания 14 CPU |
0x014C |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_15_REG |
Регистр конфигурирования приоритета для прерывания 15 CPU |
0x0150 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_16_REG |
Регистр конфигурирования приоритета для прерывания 16 CPU |
0x0154 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_17_REG |
Регистр конфигурирования приоритета для прерывания 17 CPU |
0x0158 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_18_REG |
Регистр конфигурирования приоритета для прерывания 18 CPU |
0x015C |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_19_REG |
Регистр конфигурирования приоритета для прерывания 19 CPU |
0x0160 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_20_REG |
Регистр конфигурирования приоритета для прерывания 20 CPU |
0x0164 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_21_REG |
Регистр конфигурирования приоритета для прерывания 21 CPU |
0x0168 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_22_REG |
Регистр конфигурирования приоритета для прерывания 22 CPU |
0x016C |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_23_REG |
Регистр конфигурирования приоритета для прерывания 23 CPU |
0x0170 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_24_REG |
Регистр конфигурирования приоритета для прерывания 24 CPU |
0x0174 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_25_REG |
Регистр конфигурирования приоритета для прерывания 25 CPU |
0x0178 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_26_REG |
Регистр конфигурирования приоритета для прерывания 26 CPU |
0x017C |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_27_REG |
Регистр конфигурирования приоритета для прерывания 27 CPU |
0x0180 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_28_REG |
Регистр конфигурирования приоритета для прерывания 28 CPU |
0x0184 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_29_REG |
Регистр конфигурирования приоритета для прерывания 29 CPU |
0x0188 |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_30_REG |
Регистр конфигурирования приоритета для прерывания 30 CPU |
0x018C |
R/W |
INTERRUPT_CORE0_CPU_INT_PRI_31_REG |
Регистр конфигурирования приоритета для прерывания 31 CPU |
0x0190 |
R/W |
INTERRUPT_CORE0_CPU_INT_THRESH_REG |
Регистр конфигурирования порога приоритета прерываний CPU |
0x0194 |
R/W |
Version Register (регистр версии) |
INTERRUPT_CORE0_INTERRUPT_DATE_REG |
Регистр управления версией |
0x07FC |
R/W |
Следующие адреса регистров указаны относительно базового адреса матрицы прерываний из таблицы 3-4 в главе 3 "System and Memory" [1].
INTERRUPT_CORE0_PWR_INTR_MAP_REG (0x0008)
INTERRUPT_CORE0_I2C_MST_INT_MAP_REG (0x002C)
INTERRUPT_CORE0_SLC0_INTR_MAP_REG (0x0030)
INTERRUPT_CORE0_SLC1_INTR_MAP_REG (0x0034)
INTERRUPT_CORE0_APB_CTRL_INTR_MAP_REG (0x0038)
INTERRUPT_CORE0_UHCI0_INTR_MAP_REG (0x003C)
INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_MAP_REG (0x0040)
INTERRUPT_CORE0_GPIO_INTERRUPT_PRO_NMI_MAP_REG (0x0044)
INTERRUPT_CORE0_SPI_INTR_1_MAP_REG (0x0048)
INTERRUPT_CORE0_SPI_INTR_2_MAP_REG (0x004C)
INTERRUPT_CORE0_I2S1_INT_MAP_REG (0x0050)
INTERRUPT_CORE0_UART_INTR_MAP_REG (0x0054)
INTERRUPT_CORE0_UART1_INTR_MAP_REG (0x0058)
INTERRUPT_CORE0_LEDC_INT_MAP_REG (0x005C)
INTERRUPT_CORE0_EFUSE_INT_MAP_REG (0x0060)
INTERRUPT_CORE0_CAN_INT_MAP_REG (0x0064)
INTERRUPT_CORE0_USB_INTR_MAP_REG (0x0068)
INTERRUPT_CORE0_RTC_CORE_INTR_MAP_REG (0x006C)
INTERRUPT_CORE0_RMT_INTR_MAP_REG (0x0070)
INTERRUPT_CORE0_I2C_EXT0_INTR_MAP_REG (0x0074)
INTERRUPT_CORE0_TIMER_INT1_MAP_REG (0x0078)
INTERRUPT_CORE0_TIMER_INT2_MAP_REG (0x007C)
INTERRUPT_CORE0_TG_T0_INT_MAP_REG (0x0080)
INTERRUPT_CORE0_TG_WDT_INT_MAP_REG (0x0084)
INTERRUPT_CORE0_TG1_T0_INT_MAP_REG (0x0088)
INTERRUPT_CORE0_TG1_WDT_INT_MAP_REG (0x008C)
INTERRUPT_CORE0_CACHE_IA_INT_MAP_REG (0x0090)
INTERRUPT_CORE0_SYSTIMER_TARGET0_INT_MAP_REG (0x0094)
INTERRUPT_CORE0_SYSTIMER_TARGET1_INT_MAP_REG (0x0098)
INTERRUPT_CORE0_SYSTIMER_TARGET2_INT_MAP_REG (0x009C)
INTERRUPT_CORE0_SPI_MEM_REJECT_INTR_MAP_REG (0x00A0)
INTERRUPT_CORE0_ICACHE_PRELOAD_INT_MAP_REG (0x00A4)
INTERRUPT_CORE0_ICACHE_SYNC_INT_MAP_REG (0x00A8)
INTERRUPT_CORE0_APB_ADC_INT_MAP_REG (0x00AC)
INTERRUPT_CORE0_DMA_CH0_INT_MAP_REG (0x00B0)
INTERRUPT_CORE0_DMA_CH1_INT_MAP_REG (0x00B4)
INTERRUPT_CORE0_DMA_CH2_INT_MAP_REG (0x00B8)
INTERRUPT_CORE0_RSA_INT_MAP_REG (0x00BC)
INTERRUPT_CORE0_AES_INT_MAP_REG (0x00C0)
INTERRUPT_CORE0_SHA_INT_MAP_REG (0x00C4)
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_0_MAP_REG (0x00C8)
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_1_MAP_REG (0x00CC)
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_2_MAP_REG (0x00D0)
INTERRUPT_CORE0_CPU_INTR_FROM_CPU_3_MAP_REG (0x00D4)
INTERRUPT_CORE0_ASSIST_DEBUG_INTR_MAP_REG (0x00D8)
INTERRUPT_CORE0_DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP_REG (0x00DC)
INTERRUPT_CORE0_CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG (0x00E0)
INTERRUPT_CORE0_CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP_REG (0x00E4)
INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP_REG (0x00E8)
INTERRUPT_CORE0_CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP_REG (0x00EC)
INTERRUPT_CORE0_BACKUP_PMS_VIOLATE_INTR_MAP_REG (0x00F0)
INTERRUPT_CORE0_CACHE_CORE0_ACS_INT_MAP_REG (0x00F4)
INTERRUPT_CORE0_SOURCE_X_MAP Отображает источник прерывания (SOURCE_X) на прерывание CPU. Для дополнительной информации про SOURCE_X см. таблицу 8-1 (R/W).
INTERRUPT_CORE0_INTR_STATUS_0_REG (0x00F8)
INTERRUPT_CORE0_INTR_STATUS_0 Этот регистр хранит статус первых 32 источников прерывания: 0 .. 31. Если здесь какой-либо бит равен 1, то это означает, что соответствующий источник активировал прерывание (RO).
INTERRUPT_CORE0_INTR_STATUS_1_REG (0x00FC)
INTERRUPT_CORE0_INTR_STATUS_1 Этот регистр хранит статус следующих 32 источников прерывания: 32 .. 61. Если здесь какой-либо бит равен 1, то это означает, что соответствующий источник активировал прерывание (RO).
INTERRUPT_CORE0_CLOCK_GATE_REG (0x0100)
INTERRUPT_CORE0_CLK_EN Установите в 1, чтобы принудительно включить такты регистра прерываний (R/W).
INTERRUPT_CORE0_CPU_INT_ENABLE_REG (0x0104)
INTERRUPT_CORE0_CPU_INT_ENABLE Запишите 1 в определенный бит, чтобы разрешить соответствующее прерывание CPU. Для информации о том, как использовать этот регистр, см. [2] (R/W).
INTERRUPT_CORE0_CPU_INT_TYPE_REG (0x0108)
INTERRUPT_CORE0_CPU_INT_TYPE Конфигурирует тип прерывания CPU. 0: level-triggered, 1: edge-triggered. Для информации о том, как использовать этот регистр, см. [2] (R/W).
INTERRUPT_CORE0_CPU_INT_CLEAR_REG (0x010C)
INTERRUPT_CORE0_CPU_INT_CLEAR Запись 1 в этот бит очистит соответствующее прерывание CPU. Для информации о том, как использовать этот регистр, см. [2] (R/W).
INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG (0x0110)
INTERRUPT_CORE0_CPU_INT_EIP_STATUS Хранит статус ожидания обработки прерывания CPU interrupts. Для информации о том, как использовать этот регистр, см. [2] (RO).
INTERRUPT_CORE0_CPU_INT_PRI_n_REG (n: 1 .. 31)(0x0118 + 0x4*n)
INTERRUPT_CORE0_CPU_PRI_n_MAP Установит приоритет для n-прерывания CPU. Здесь может быть установлен приоритет в диапазоне от 1 (самый низкий приоритет) до 15 (самый высокий приоритет). Для информации о том, как использовать этот регистр, см. [2] (R/W).
INTERRUPT_CORE0_CPU_INT_THRESH_REG (0x0194)
INTERRUPT_CORE0_CPU_INT_THRESH Установит порог для активации прерывания для CPU. Ядро CPU ответит на прерывание только в том случае, когда его приоритет больше или равен этому установленному порогу. Для информации о том, как использовать этот регистр, см. [2].
INTERRUPT_CORE0_INTERRUPT_DATE_REG (0x07FC).
INTERRUPT_CORE0_INTERRUPT_DATE Version control register (R/W).
[Ссылки]
1. ESP32C3 Technical Reference Manual site:espressif.com. 2. ESP32-C3 ESP-RISC-V CPU. |