RISC-V SiFive U54内核——CLINT中断控制器

简介: RISC-V SiFive U54内核——CLINT中断控制器

上篇 RISC-V SiFive U54内核——中断和异常详解 说到,SiFive U54内核有两个中断控制器:CLINT和PLIC。CLINT用于本地中断(软件中断和定时器中断),PLIC用于全局中断。

下面对CLINT进行详细说明。

内核本地中断(CLINT)

下图为CLINT示意图,CLINT通过固定的中断号和优先级,可将软件中断或定时器中断直接发送给指定的hart,该过程没有仲裁。

CLINT 占地面积小,可直接向 hart 提供软件、定时器和外部中断。CLINT 块还保存与软件和定时器中断相关的内存映射控制和状态寄存器。

CLINT 优先级和抢占

CLINT 具有固定的优先级方案,但不支持给定特权级别内的嵌套中断(抢占)。然而,较高的特权级别可能会抢占较低的特权级别。CLINT 提供两种操作模式,直接模式向量模式

直接模式下,所有中断和异常都会捕获到 mtvec.BASE

向量模式下,异常trap到 mtvec.BASE,但中断将直接跳转到它们的向量表索引。

CLINT向量表

CLINT向量表如下:

CLINT 向量表填充有跳转指令,因为硬件首先跳转到向量表中的索引,然后再跳转到处理程序。所有异常类型都trap到表中的第一个条目是 mtvec.BASE

下面是CLINT 向量表的示例:

CLINT 中断源

下图是CLINT 中断 ID:

CLINT中断属性

为了帮助提高保存和恢复上下文的效率,可以将中断属性应用于用于中断处理的函数。

void __attribute__((interrupt))
software_handler (void) {
// handler code
}

此属性将保存和恢复处理程序中使用的寄存器,并在处理程序的末尾插入一条 mret 指令。

CLINT内存映射

下图是U54 内核上 CLINT 的内存映射:

注意,在 CLINT 内存映射中没有用于特定中断的启用位,因为这些中断的启用位于每个中断的 mie CSRmstatus.mie CSR 位中,它全局启用所有机器中断.

相关寄存器

MSIP Registers

机器模式软件中断是通过写入内存映射控制寄存器 msip 来生成的。

msip 寄存器是一个 32 位宽的 WARL 寄存器,其中高 31 位绑定为 0。最低有效位反映在 mip CSR 的 MSIP 位中。msip 寄存器中的其他位被硬连线为零。复位时,每个 msip 寄存器都清零。

软件中断对于多 hart 系统中的处理器间通信最有用,因为 harts 可能会写入彼此的 msip 位以影响处理器间中断。

软件中断其实更多的用于多核之间,也就是所谓的核间通信。

Timer Registers

与timer有关的寄存器主要是两个:mtimemtimecmp

mtime 是一个 64 位读写寄存器,包含从 rtc_toggle 信号计数的周期数。

只要 mtime 大于或等于 mtimecmp 寄存器中的值,定时器中断就会挂起。定时器中断反映在 mip 寄存器的 mtip 位中。

复位时,mtime 清零。mtimecmp 不会重置。

特权模式委托

默认情况下,所有中断都会陷入机器模式,包括定时器和软件中断。

为了让定时器和软件中断直接进入管理员模式,定时器中断和软件中断必须首先委托给管理员模式

end

猜你喜欢:

RISC-V SiFive U54内核——中断和异常详解
系统明明有很多内存,却无法分配出一片大块内存?
实战 | RISC-V Linux入口地址2M预留内存优化
RISC-V Linux启动之页表创建分析
RISC-V Linux汇编启动过程分析
写给新手的MMU工作原理

OpenSBI三种固件的区别

教你在QEMU上运行RISC-V Linux

内核调试之devmem直接读写寄存器

相关文章
|
6月前
|
安全 Linux 虚拟化
minos 2.1 中断虚拟化——ARMv8 异常处理
越往后,交叉的越多,大多都绕不开 ARMv8 的异常处理,所以必须得先了解了解 ARMv8 的异常处理流程 先说一下术语,从手册中的用词来看,在 x86 平台,一般将异常和中断统称为中断,在 ARM 平台,一般将中断和异常统称为异常
126 3
minos 2.1 中断虚拟化——ARMv8 异常处理
|
6月前
|
Linux 虚拟化
minos 2.4 中断虚拟化——中断子系统
前面讲述了 minos 对 GICv2 的一些配置和管理,这一节再往上走一走,看看 minos 的中断子系统
59 3
|
6月前
|
安全 调度 KVM
minos 4.6 中断虚拟化——虚拟中断子系统
Hypervisor 需要对每个虚机的虚拟中断进行管理,这其中涉及的一系列数据结构和操作就是虚拟中断子系统
106 5
|
7月前
|
芯片 索引
可编程中断控制器
可编程中断控制器
231 0
|
7月前
|
编译器 C语言 芯片
内核里的中断
内核里的中断
62 0
|
7月前
|
Linux 虚拟化 芯片
Linux 中断子系统中GIC 中断控制器基本分析
Linux 中断子系统中GIC 中断控制器基本分析
209 0
|
存储 Linux
RISC-V SiFive U54内核——PLIC平台级中断控制器
RISC-V SiFive U54内核——PLIC平台级中断控制器
|
存储 缓存 Linux
RISC-V SiFive U54内核——中断和异常详解
RISC-V SiFive U54内核——中断和异常详解
|
存储 负载均衡 安全
MIPS架构深入理解6-异常和中断
MIPS架构深入理解6-异常和中断
|
虚拟化 芯片
CORTEX-A7芯片中断系统基本原理与控制方法
CORTEX-A7芯片中断系统基本原理与控制方法
417 0
CORTEX-A7芯片中断系统基本原理与控制方法