Architecture / ISA
Advanced
RISC-V Privileged ISA / QEMU
RISC-V 제어 상태 레지스터(CSR)와 하드웨어 트랩/인터럽트 처리 구조
특권 모드(Machine Mode)에서 mtvec, mepc, mcause, mstatus 제어 상태 레지스터(CSR)를 다루고 예외/인터럽트를 핸들링하는 아키텍처 원리.
#RISC-V #CSR #Interrupt #OS #Embedded
핵심 개념RISC-V 프로세서의 상태 제어 및 하드웨어 인터럽트 처리는 CSR(Control and Status Register) 전용 명령어(
csrr, csrw, csrrw, csrrs, csrrc)를 통해 이루어집니다. 타이머나 외부 인터럽트 발생 시 하드웨어가 현재 PC를 mepc에 기록하고 트랩 벡터(mtvec)로 점프합니다.1. 핵심 Machine-mode CSR 일람
| CSR 이름 | 주소 | 역할 |
|---|---|---|
| mstatus | 0x300 | 글로벌 인터럽트 활성화(MIE) 및 이전 모드 상태 보존 |
| mtvec | 0x305 | 트랩 핸들러의 기본 시작 주소 및 모드(Direct/Vectored) |
| mepc | 0x341 | 예외가 발생한 시점의 복귀 PC 주소 |
| mcause | 0x342 | 트랩 발생 원인 (인터럽트 비트 + 예외 코드) |
| mtval | 0x343 | 잘못된 메모리 주소(Bad Address) 등 추가 예외 정보 |
2. 인터럽트 핸들러 어셈블리 템플릿
.globl trap_handler
.align 4
trap_handler:
# 1. 컨텍스트 백업 (스택에 레지스터들 저장)
addi sp, sp, -32
sw t0, 0(sp)
sw t1, 4(sp)
# 2. 원인 판별
csrr t0, mcause # 트랩 원인 코드 읽기
bgez t0, handle_exception # 최상위 비트가 0이면 동기식 예외, 1이면 비동기 인터럽트
# 3. 인터럽트 처리 수행 (예: 타이머 초기화)
# ...
# 4. 복원 및 복귀
lw t0, 0(sp)
lw t1, 4(sp)
addi sp, sp, 32
mret # mepc 주소로 복귀하며 mstatus 복원