Skip to content

PLIC 数据手册

English

概述

PLIC 是参数化平台级中断控制器软 IP,兼容 RISC-V PLIC 1.0.0,提供 APB4 从 接口,支持一个 hart target 和最多 31 路外部中断。

接口

端口类型说明
apb4interfaceAPB4 从接口
plic.irq_iinput外部中断源输入
plic.irq_ooutput发往 hart 的中断输出

寄存器

名称偏移长度说明
CTRL0x004控制和 gateway 最大触发数
TM0x04432 路触发模式
PRIO10x084IRQ 0~7 优先级
PRIO20x0c4IRQ 8~15 优先级
PRIO30x104IRQ 16~23 优先级
PRIO40x144IRQ 24~31 优先级
IP0x184pending 状态
IE0x1c4中断使能
THOLD0x204target 0 优先级阈值
CLAIMCOMP0x244claim/complete

寄存器复位值均为 0x0000_0000

CTRL

  • CTRL.EN:0 禁用 PLIC,1 启用。
  • CTRL.TNM:gateway 最大触发数。

TM 和优先级

  • TM[i] = 0:IRQ i 为电平触发;TM[i] = 1:边沿触发。
  • 每路优先级占 4 位,分布在 PRIO1PRIO4

Pending、使能和阈值

  • IP[i]:IRQ i 的只读 pending 状态。
  • IE[i]:IRQ i 的使能位。
  • THOLD:只有优先级高于阈值的中断才能到达 target。

Claim/Complete

读取 CLAIMCOMP 返回当前可处理的 IRQ ID;处理完成后将同一 ID 写回,清除该 中断的 in-service 状态。

编程示例

c
plic.CTRL.TNM = TNM;
plic.TM       = TRIGGER_MODES;
plic.PRIO1    = PRIORITY_0_7;
plic.PRIO2    = PRIORITY_8_15;
plic.PRIO3    = PRIORITY_16_23;
plic.PRIO4    = PRIORITY_24_31;
plic.THOLD    = THRESHOLD;
plic.IE       = ENABLE_MASK;
plic.CTRL.EN  = 1;

void plic_handle(void) {
    uint32_t id = plic.CLAIMCOMP;
    handle_external_irq(id);
    plic.CLAIMCOMP = id;
}

文档以中文为第一语言,并提供对应英文版本。