Программирование ARM ESP32-C3: контроллер прерываний Fri, July 12 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

ESP32-C3: контроллер прерываний Печать
Добавил(а) microsin   

Контроллер прерывания 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 показана структура матрицы прерываний.

ESP32 C3 CPU Interrupt Matrix Structure fig8 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)

ESP32 C3 INTERRUPT CORE0 SOURCE X MAP REG

INTERRUPT_CORE0_SOURCE_X_MAP Отображает источник прерывания (SOURCE_X) на прерывание CPU. Для дополнительной информации про SOURCE_X см. таблицу 8-1 (R/W).

INTERRUPT_CORE0_INTR_STATUS_0_REG (0x00F8)

ESP32 C3 INTERRUPT CORE0 INTR STATUS 0 REG

INTERRUPT_CORE0_INTR_STATUS_0 Этот регистр хранит статус первых 32 источников прерывания: 0 .. 31. Если здесь какой-либо бит равен 1, то это означает, что соответствующий источник активировал прерывание (RO).

INTERRUPT_CORE0_INTR_STATUS_1_REG (0x00FC)

ESP32 C3 INTERRUPT CORE0 INTR STATUS 1 REG

INTERRUPT_CORE0_INTR_STATUS_1 Этот регистр хранит статус следующих 32 источников прерывания: 32 .. 61. Если здесь какой-либо бит равен 1, то это означает, что соответствующий источник активировал прерывание (RO).

INTERRUPT_CORE0_CLOCK_GATE_REG (0x0100)

ESP32 C3 INTERRUPT CORE0 CLOCK GATE REG

INTERRUPT_CORE0_CLK_EN Установите в 1, чтобы принудительно включить такты регистра прерываний (R/W).

INTERRUPT_CORE0_CPU_INT_ENABLE_REG (0x0104)

ESP32 C3 INTERRUPT CORE0 CPU INT ENABLE REG

INTERRUPT_CORE0_CPU_INT_ENABLE Запишите 1 в определенный бит, чтобы разрешить соответствующее прерывание CPU. Для информации о том, как использовать этот регистр, см. [2] (R/W).

INTERRUPT_CORE0_CPU_INT_TYPE_REG (0x0108)

ESP32 C3 INTERRUPT CORE0 CPU INT TYPE REG

INTERRUPT_CORE0_CPU_INT_TYPE Конфигурирует тип прерывания CPU. 0: level-triggered, 1: edge-triggered. Для информации о том, как использовать этот регистр, см. [2] (R/W).

INTERRUPT_CORE0_CPU_INT_CLEAR_REG (0x010C)

ESP32 C3 INTERRUPT CORE0 CPU INT CLEAR REG

INTERRUPT_CORE0_CPU_INT_CLEAR Запись 1 в этот бит очистит соответствующее прерывание CPU. Для информации о том, как использовать этот регистр, см. [2] (R/W).

INTERRUPT_CORE0_CPU_INT_EIP_STATUS_REG (0x0110)

ESP32 C3 INTERRUPT CORE0 CPU INT EIP STATUS REG

INTERRUPT_CORE0_CPU_INT_EIP_STATUS Хранит статус ожидания обработки прерывания CPU interrupts. Для информации о том, как использовать этот регистр, см. [2] (RO).

INTERRUPT_CORE0_CPU_INT_PRI_n_REG (n: 1 .. 31)(0x0118 + 0x4*n)

ESP32 C3 INTERRUPT CORE0 CPU INT PRI n REG

INTERRUPT_CORE0_CPU_PRI_n_MAP Установит приоритет для n-прерывания CPU. Здесь может быть установлен приоритет в диапазоне от 1 (самый низкий приоритет) до 15 (самый высокий приоритет). Для информации о том, как использовать этот регистр, см. [2] (R/W).

INTERRUPT_CORE0_CPU_INT_THRESH_REG (0x0194)

ESP32 C3 INTERRUPT CORE0 CPU INT THRESH REG

INTERRUPT_CORE0_CPU_INT_THRESH Установит порог для активации прерывания для CPU. Ядро CPU ответит на прерывание только в том случае, когда его приоритет больше или равен этому установленному порогу. Для информации о том, как использовать этот регистр, см. [2].

INTERRUPT_CORE0_INTERRUPT_DATE_REG (0x07FC).

ESP32 C3 INTERRUPT CORE0 INTERRUPT DATE REG

INTERRUPT_CORE0_INTERRUPT_DATE Version control register (R/W).

[Ссылки]

1. ESP32­C3 Technical Reference Manual site:espressif.com.
2. ESP32-C3 ESP-RISC-V CPU.

 

Добавить комментарий


Защитный код
Обновить

Top of Page