Программирование ARM ESP32-C3 ESP-RISC-V CPU Thu, October 10 2024  

Поделиться

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

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

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), осуществляющие интерфейс с памятью и периферийными устройствами.

ESP32 C3 CPU Block Diagram fig1 1

Рис. 1-1. Блок-схема CPU.

AHB Advanced Hardware Bus, шина доступа к периферийным устройствам.
DBUS шина доступа к данным.
DM Debug Module, модуль отладки.
DRAM доступ к памяти данных.
IBUS шина доступа к инструкциям.
INTC контроллер прерываний.
IRAM доступ к памяти программ (инструкций).
JTAG интерфейс для подключения отладчика.
SBA System Bus Access, доступ к системной шине.

Функции CPU:

• Рабочая тактовая частота до 160 МГц.
• Доступ к внутренней встроенной SRAM и кэшу с нулевыми циклами ожидания для доступа к программе и данным через интерфейс IRAM/DRAM.
• Контроллер прерываний (INTC), у которого до 31 векторов прерываний с программируемым приоритетом и уровнями порога.
• Модуль отладки (DM), совместимый со спецификацией RISC-V v0.13, поддерживающий внешний отладчик через стандартный порт JTAG/USB.
• Прямой доступ отладчика к системной шине (SBA) для памяти и периферийных устройств.
• Аппаратный триггер, совместимый со спецификацией отладки RISC-V v0.13, обеспечивающий до 8 точек останова и изменения ячеек памяти (breakpoints/watchpoints).
• Физическая защита памяти (PMP), с возможностью конфигурации до 16 регионов.
• 32-битная системная шина AHB для доступа к периферийным устройствам.
• Конфигурируемые события для метрик производительности ядра.

[Карта адресов памяти]

В таблице 1-1 показано распределение адресного пространства для различных регионов, доступных со стороны CPU, предназначенных для инструкций, данных, системной шины периферийных устройств и отладки.

Таблица 1-1. CPU Address Map.

Регион Описание Начальный адрес Конечный адрес Доступ
DM Debug Address Map 0x20000000 0x27FFFFFF R/W
DRAM Data Address Map 0x38000000 0x3FFFFFFF R/W
IRAM Instruction Address Map 0x40000000 0x47FFFFFF R/W
AHB AHB Address Map *default *default R/W

Примечание *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.

Регистр Описание Адрес Доступ
Machine Information CSR
mvendorid Machine Vendor ID 0xF11 RO
marchid Machine Architecture ID 0xF12 RO
mimpid Machine Implementation ID 0xF13 RO
mhartid Machine Hart ID 0xF14 RO
Machine Trap Setup CSR
mstatus Machine Mode Status 0x300 R/W
misa(1) Machine ISA 0x301 R/W
mtvec(2) Machine Trap Vector 0x305 R/W
Machine Trap Handling CSR
mscratch Machine Scratch 0x340 R/W
mepc Machine Trap Program Counter 0x341 R/W
mcause(3) Machine Trap Cause 0x342 R/W
mtval Machine Trap Value 0x343 R/W
Physical Memory Protection (PMP) CSR
pmpcfg0 Конфигурация физической защиты памяти 0x3A0 R/W
pmpcfg1 0x3A1 R/W
pmpcfg2 0x3A2 R/W
pmpcfg3 0x3A3 R/W
pmpaddr0 Регистр адреса физической защиты памяти 0x3B0 R/W
pmpaddr1 0x3B1 R/W
.. .. ..
pmpaddr15 0x3BF R/W
Trigger Module CSRs (shared with Debug Mode)
tselect Trigger Select Register 0x7A0 R/W
tdata1 Trigger Abstract Data 1 0x7A1 R/W
tdata2 Trigger Abstract Data 2 0x7A2 R/W
tcontrol Global Trigger Control 0x7A5 R/W
Debug Mode CSR
dcsr Debug Control and Status 0x7B0 R/W
dpc Debug PC 0x7B1 R/W
dscratch0 Debug Scratch Register 0 0x7B2 R/W
dscratch1 Debug Scratch Register 1 0x7B3 R/W
Performance Counter CSRs (Custom)(4)
mpcer Machine Performance Counter Event 0x7E0 R/W
mpcmr Machine Performance Counter Mode 0x7E1 R/W
mpccr Machine Performance Counter Count 0x7E2 R/W
GPIO Access CSRs (Custom)
cpu_gpio_oen GPIO Output Enable 0x803 R/W
cpu_gpio_in GPIO Input Value 0x804 RO
cpu_gpio_out GPIO Output Value 0x805 R/W

Примечания:

(1) Хотя для misa указано, что для него реализован доступ и на чтение, и на запись (R/W), его поля жестко ограничены аппаратурой, и запись не дает никакого эффекта. Это то, что можно было назвать WARL (Write Any Read Legal) в терминологии RISC-V.
(2) Регистр mtvec предоставляет только конфигурацию за перехват прерываний (trap handling) в режиме vectored, с базовым адресом, выровненным на 256 байт.
(3) Идентификаторы внешних прерываний (External interrupt ID), отраженные в mcause, включают даже те ID, которые зарезервированы стандартом RISC-V для внутренних источников прерываний ядра.
(4) Эти пользовательские CSR были реализованы в адресном пространстве, зарезервированном стандартом RISC-V для использования в программах пользователя.

Обратите внимание, что если делается попытка выполнения операции write/set/clear для любого из этих CSR, которые помечены "только для чтения" (read-only, RO), как показано в таблице выше, то CPU сгенерирует исключение недопустимой инструкции (illegal instruction exception).

[Описание регистров]

ESP32 C3 CSR mvendorid

MVENDORID Vendor ID (RO).

ESP32 C3 CSR marchid

MARCHID Architecture ID (RO).

ESP32 C3 CSR mimpid

MIMPID Implementation ID (RO).

ESP32 C3 CSR mhartid

MHARTID Hart ID (RO).

ESP32 C3 CSR mstatus

MIE Global machine mode interrupt enable (глобальное разрешение прерываний) (R/W).

MPIE Previous MIE (предыдущее значение MIE) (R/W).

MPP Machine previous privilege mode (предыдущий привилегированный режим) (R/W). Возможные значения:

• 0x0: User mode
• 0x3: Machine mode

Примечание: записать можно только младший бит. Запись в старший бит игнорируется, поскольку он напрямую привязан к младшему биту.

TW Timeout wait (таймаут ожидания) (R/W). Если этот бит установлен, выполнение инструкции WFI (Wait-for-Interrupt) в User приведет к исключению недопустимой инструкции (illegal instruction exception).

ESP32 C3 CSR misa

MXL Machine XLEN = 1 (32-bit) (RO).

Z Зарезервировано = 0 (RO).
Y Зарезервировано = 0 (RO).
X Non-standard extensions present (присутствует нестандартное расширение) = 0 (RO).
W Зарезервировано = 0 (RO).
V Зарезервировано = 0 (RO).
U User mode implemented (режим пользователя реализован) = 1 (RO).
T Зарезервировано = 0 (RO).
S Supervisor mode implemented (режим супервизора реализован) = 0 (RO).
R Зарезервировано = 0 (RO).
Q Quad-precision floating-point extension (расширение для плавающей точки учетверенной точности) = 0 (RO).
P Зарезервировано = 0 (RO).
O Зарезервировано = 0 (RO).
N User-level interrupts supported (поддерживаются прерывания уровня пользователя) = 0 (RO).
M Integer Multiply/Divide extension (расширение целочисленного умножения и деления) = 1 (RO).
L Зарезервировано = 0 (RO).
K Зарезервировано = 0 (RO).
J Зарезервировано = 0 (RO).
I RV32I base ISA = 1 (RO).
H Hypervisor extension (расширение гипервизора) = 0 (RO).
G Additional standard extensions present (присутствуют стандартные дополнительные расширения) = 0 (RO).
F Single-precision floating-point extension (расширение для плавающей точки одинарной точности) = 0 (RO).
E RV32E base ISA = 0 (RO).
D Double-precision floating-point extension (расширение для плавающей точки двойной точности) = 0 (RO).
C Compressed Extension = 1 (RO).
B Зарезервировано = 0 (RO).
A Atomic Extension = 0 (RO).

ESP32 C3 CSR mtvec

MODE Only vectored mode 0x1 is available (доступен только векторный режим 0x1) (RO).

BASE Старшие 24 бита базового адреса перехватчиков прерывания (trap vector base address), выровненный на 256 байт (R/W).

ESP32 C3 CSR mscratch

MSCRATCH Machine scratch register for custom use (временный регистр для произвольного использования) (R/W).

ESP32 C3 CSR mepc

MEPC Machine trap/exception program counter (R/W).

Этот регистр автоматически обновляется адресом инструкции, которая должна быть выполнена, когда CPU обнаружил последнюю trap.

ESP32 C3 CSR mcause

Exception Code Это поле автоматически обновляется уникальным ID последнего возникшего исключения или прерывания, из-за которого CPU вошел в (R/W). Возможны следующие значения ID исключений:

0x1: PMP Instruction access fault
0x2: Illegal Instruction
0x3: Hardware Breakpoint/Watchpoint or EBREAK
0x5: PMP Load access fault
0x7: PMP Store access fault
0x8: ECALL from U mode
0xb: ECALL from M mode

Примечание: Exception ID 0x0 (instruction access misaligned) не представлено, потому что CPU всегда маскирует младший бит адреса во время выборки инструкции.

Interrupt Flag Этот флаг автоматически обновляется, когда CPU входит в trap (R/W). Если флаг установлен, то это указывает, что произошел вход в trap из-за прерывания. Для исключений этот флаг остается не установленным.

Примечание: контроллер прерываний использует значения ID в диапазоне 1 .. 31 для всех внешних источников прерывания. Это отличается от стандарта RISC-V, где имеются зарезервированные ID в диапазоне 0 .. 15 для внутренних источников прерывания ядра.

ESP32 C3 CSR mtval

MTVAL Machine trap value (значение ловушки прерывания) (R/W). Этот регистр автоматически обновится данными, зависящими от исключения, что может быть полезно для обработки исключений. Данные интерпретируются в зависимости от идентификаторов исключений (exception ID):

0x1: Faulting virtual address of instruction
0x2: Faulting instruction opcode
0x5: Faulting data address of load operation
0x7: Faulting data address of store operation

Примечание: значение в этом регистре недостоверно для других exception ID и для прерываний.

ESP32 C3 CSR mpcer

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).

Примечание: каждый бит выбирает определенное события для инкремента счетчика. Если выбрано больше одного события, и они произошли одновременно, то счетчик прирастет только на единицу.

ESP32 C3 CSR mpcmr

COUNT_SAT Counter Saturation Control (R/W). Возможные значения:

0: Overflow on maximum value
1: Halt on maximum value

COUNT_EN Counter Enable Control (R/W). Возможные значения:

0: запрещено
1: разрешено

ESP32 C3 CSR mpccr

MPCCR Machine Performance Counter Value (R/W).

ESP32 C3 CSR cpu gpio oen

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
1: разрешение выхода GPIO

ESP32 C3 CSR cpu gpio in

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).

ESP32 C3 CSR cpu gpio out

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.

 

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


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

Top of Page