TOOLS GAMES DEVLOG DOCS ABOUT CONTACT
HOME > DOCS > Architecture / ISA > RISC-V 제어 상태 레지스터(CSR)와 하드웨어 트랩/인터럽트 처리 구조
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 이름주소역할
mstatus0x300글로벌 인터럽트 활성화(MIE) 및 이전 모드 상태 보존
mtvec0x305트랩 핸들러의 기본 시작 주소 및 모드(Direct/Vectored)
mepc0x341예외가 발생한 시점의 복귀 PC 주소
mcause0x342트랩 발생 원인 (인터럽트 비트 + 예외 코드)
mtval0x343잘못된 메모리 주소(Bad Address) 등 추가 예외 정보

2. 인터럽트 핸들러 어셈블리 템플릿

trap_handler.s
.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 복원