ESP32-C3 ESP-RISC-V CPU |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ESP-RISC-VCPU это 32-битное ядро, основанное на стандартных расширениях RISC-V ISA base integer (I), multiplication/division (M) и compressed (C). У ядра есть скалярный 4-стадийный конвейер (4-stage, in-order, scalar pipeline), оптимизированный для энергопотребления и производительности. Ядро CPU снабжено контроллером прерываний (INTC), модулем отладки (DM) и системной шиной (SYS BUS), осуществляющие интерфейс с памятью и периферийными устройствами. Рис. 1-1. Блок-схема CPU. AHB Advanced Hardware Bus, шина доступа к периферийным устройствам. Функции CPU: • Рабочая тактовая частота до 160 МГц. [Карта адресов памяти] В таблице 1-1 показано распределение адресного пространства для различных регионов, доступных со стороны CPU, предназначенных для инструкций, данных, системной шины периферийных устройств и отладки. Таблица 1-1. CPU Address Map.
Примечание *default: к адресу, не соответствующему любому из указанных регионов (IRAM, DRAM, DM), доступ осуществляется через шину AHB. [Регистры конфигурации и состояния (CSR)] Ниже в таблице перечислены регистры состояния и статуса CPU (Configuration and Status Registers, CSR). Кроме пользовательского счетчика производительности CSR, все реализованные регистры CSR придерживаются стандартному распределению полей бит, как это описано в руководстве "RISC-V Instruction Set Manual, Volume II: Privileged Architecture, Version 1.10". Следует отметить, что даже среди стандартных регистров CSR реализованы не все битовые поля, ограниченные подмножеством функций, реализованных в CPU. См. следующую секцию для подробного описания подмножества полей, реализованных в каждом из этих CSR.
Примечания: (1) Хотя для misa указано, что для него реализован доступ и на чтение, и на запись (R/W), его поля жестко ограничены аппаратурой, и запись не дает никакого эффекта. Это то, что можно было назвать WARL (Write Any Read Legal) в терминологии RISC-V. Обратите внимание, что если делается попытка выполнения операции write/set/clear для любого из этих CSR, которые помечены "только для чтения" (read-only, RO), как показано в таблице выше, то CPU сгенерирует исключение недопустимой инструкции (illegal instruction exception). [Описание регистров] MVENDORID Vendor ID (RO). MARCHID Architecture ID (RO). MIMPID Implementation ID (RO). MHARTID Hart ID (RO). MIE Global machine mode interrupt enable (глобальное разрешение прерываний) (R/W). MPIE Previous MIE (предыдущее значение MIE) (R/W). MPP Machine previous privilege mode (предыдущий привилегированный режим) (R/W). Возможные значения: • 0x0: User mode Примечание: записать можно только младший бит. Запись в старший бит игнорируется, поскольку он напрямую привязан к младшему биту. TW Timeout wait (таймаут ожидания) (R/W). Если этот бит установлен, выполнение инструкции WFI (Wait-for-Interrupt) в User приведет к исключению недопустимой инструкции (illegal instruction exception). MXL Machine XLEN = 1 (32-bit) (RO). Z Зарезервировано = 0 (RO). MODE Only vectored mode 0x1 is available (доступен только векторный режим 0x1) (RO). BASE Старшие 24 бита базового адреса перехватчиков прерывания (trap vector base address), выровненный на 256 байт (R/W). MSCRATCH Machine scratch register for custom use (временный регистр для произвольного использования) (R/W). MEPC Machine trap/exception program counter (R/W). Этот регистр автоматически обновляется адресом инструкции, которая должна быть выполнена, когда CPU обнаружил последнюю trap. Exception Code Это поле автоматически обновляется уникальным ID последнего возникшего исключения или прерывания, из-за которого CPU вошел в (R/W). Возможны следующие значения ID исключений: 0x1: PMP Instruction access fault Примечание: Exception ID 0x0 (instruction access misaligned) не представлено, потому что CPU всегда маскирует младший бит адреса во время выборки инструкции. Interrupt Flag Этот флаг автоматически обновляется, когда CPU входит в trap (R/W). Если флаг установлен, то это указывает, что произошел вход в trap из-за прерывания. Для исключений этот флаг остается не установленным. Примечание: контроллер прерываний использует значения ID в диапазоне 1 .. 31 для всех внешних источников прерывания. Это отличается от стандарта RISC-V, где имеются зарезервированные ID в диапазоне 0 .. 15 для внутренних источников прерывания ядра. MTVAL Machine trap value (значение ловушки прерывания) (R/W). Этот регистр автоматически обновится данными, зависящими от исключения, что может быть полезно для обработки исключений. Данные интерпретируются в зависимости от идентификаторов исключений (exception ID): 0x1: Faulting virtual address of instruction Примечание: значение в этом регистре недостоверно для других exception ID и для прерываний. INST_COMP Count Compressed Instructions (R/W). BRANCH_TAKEN Count Branches Taken (R/W). BRANCH Count Branches (R/W). JMP_UNCOND Count Unconditional Jumps (R/W). STORE Count Stores (R/W). LOAD Count Loads (R/W). IDLE Count IDLE Cycles (R/W). JMP_HAZARD Count Jump Hazards (R/W). LD_HAZARD Count Load Hazards (R/W). INST Count Instructions (R/W). CYCLE Count Clock Cycles (R/W). Примечание: каждый бит выбирает определенное события для инкремента счетчика. Если выбрано больше одного события, и они произошли одновременно, то счетчик прирастет только на единицу. COUNT_SAT Counter Saturation Control (R/W). Возможные значения: 0: Overflow on maximum value COUNT_EN Counter Enable Control (R/W). Возможные значения: 0: запрещено MPCCR Machine Performance Counter Value (R/W). CPU_GPIO_OEN GPIOn (n = 0 .. 21) Output Enable (разрешение выхода). CPU_GPIO_OEN[7:0] соответствуют выходным сигналам разрешения cpu_gpio_out_oen[7:0] в таблице 5-1 Peripheral Signals via GPIO Matrix [1]. Значение CPU_GPIO_OEN соответствует значению cpu_gpio_out_oen. CPU_GPIO_OEN это сигнал разрешения CPU_GPIO_OUT (R/W). 0: запрет выхода GPIO CPU_GPIO_IN GPIOn (n=0 .. 21) Input Value (входное значение). Это CPU CSR для чтения входного значения (1 = лог. 1, 0 = лог. 0) с ножки SoC GPIO. CPU_GPIO_IN[7:0] соответствует входным сигналам cpu_gpio_in[7:0] в таблице 5-1 Peripheral Signals via GPIO Matrix [1]. CPU_GPIO_IN[7:0] могут быть отображены на ножки GPIO только через GPIO matrix. Подробности см. в секции 5.4 главы "IO MUX and GPIO Matrix (GPIO, IO MUX)" [1] (RO). CPU_GPIO_OUT GPIOn (n=0 .. 21) Output Value (выходное значение). Это CPU CSR для записи значения уровня (1 = лог. 1, 0 = лог. 0) на ножку SoC GPIO. Значение вступает в действие только когда установлен CPU_GPIO_OEN. CPU_GPIO_OUT[7:0] соответствуют выходным сигналам cpu_gpio_out[7:0] в таблице 5-1 Peripheral Signals via GPIO Matrix [1]. CPU_GPIO_OUT[7:0] можно отобразить на ножки GPIO только через GPIO matrix. Подробности см. в секции 5.5 главы "IO MUX and GPIO Matrix (GPIO, IO MUX)" [1] (R/W). [Ссылки] 1. ESP32-C3 Technical Reference Manual site:espressif.com. |