RISC-V SiFive U54内核——CLINT中断控制器
目录
- 内核本地中断(CLINT)
- CLINT 优先级和抢占
- CLINT向量表
- CLINT 中断源
- CLINT中断属性
- CLINT内存映射
- 相关寄存器
- MSIP Registers
- Timer Registers
- 特权模式委托
RISC-V 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 CSR
和 mstatus.mie
CSR 位中,它全局启用所有机器中断.
相关寄存器
MSIP Registers
机器模式软件中断是通过写入内存映射控制寄存器 msip
来生成的。
msip
寄存器是一个 32 位宽的 WARL 寄存器,其中高 31 位绑定为 0。最低有效位反映在 mip CSR 的 MSIP
位中。 msip
寄存器中的其他位被硬连线为零。 复位时,每个 msip
寄存器都清零。
软件中断对于多 hart 系统中的处理器间通信最有用,因为 harts 可能会写入彼此的 msip 位以影响处理器间中断。
软件中断其实更多的用于多核之间,也就是所谓的核间通信。
Timer Registers
与timer有关的寄存器主要是两个:mtime
和mtimecmp
mtime
是一个 64 位读写寄存器,包含从 rtc_toggle
信号计数的周期数。
只要 mtime
大于或等于 mtimecmp
寄存器中的值,定时器中断就会挂起。 定时器中断反映在 mip 寄存器的 mtip 位中。
复位时,mtime
清零。 mtimecmp
不会重置。
特权模式委托
默认情况下,所有中断都会陷入机器模式,包括定时器和软件中断。
为了让定时器和软件中断直接进入管理员模式,定时器中断和软件中断必须首先委托给管理员模式。
RISC-V SiFive U54内核——CLINT中断控制器相关推荐
- RISC-V SiFive U54内核——中断和异常详解
目录 中断 中断优先级 异常 陷阱trap 本地中断 中断操作 中断进入和退出 中断控制和状态寄存器 Machine Status Register (mstatus) Machine Trap Ve ...
- RISC V (RV32+RV64) 架构 整体介绍
文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...
- 一文读懂多架构的中断控制器
在计算机中,中断控制器是一种集成电路,可帮助微处理器或CPU处理来自多个不同源(如外部I / O设备)的中断请求(Interrupt Request,以下简称IRQ),这些中断请求可能同时发生.中断控 ...
- 操作系统-ucore-lab1 Bootloader启动操作系统 A20 GDT全局描述符 使能和进入保护模式 ELF格式os 8259A中断控制器 8253定时器 函数调用堆栈跟踪函数
操作系统-ucore-lab1 本文详细地址 实验一:系统软件启动过程 参考 重要文件 调用顺序 1. boot/bootasm.S | bootasm.asm(修改了名字,以便于彩色显示)a. 开启 ...
- 基于qemu-riscv从0开始构建嵌入式linux系统ch3. 添加中断控制器、串口、pflash支持
基于qemu-riscv从0开始构建嵌入式linux系统ch3. 添加中断控制器.串口.pflash支持 添加串口支持 真实板卡的初期调试中,串口打印可谓神器,几乎所有的SOC都会带有串口这个外设,因 ...
- pci 中断冲突_Linux 内核PCI 中断
对于中断, PCI 是容易处理的. 在 Linux 启动时, 计算机的固件已经分配一个唯一的中 断号给设备, 并且驱动只需要使用它. 中断号被存储于配置寄存器 60 (PCI_INTERRUPT_LI ...
- STM32震动感应控制继电器(使用循环VS使用外部中断EXTI和中断控制器NVIC)
参考:stm32的外部中断 震动感应 控制 继电器 作者:点灯小哥 发布时间: 2021-03-05 22:37:01 网址:https://blog.csdn.net/weixin_46016743 ...
- 扩展中断控制器8259实验_「正点原子FPGA连载」第十三章双核AMP实验
1)摘自[正点原子]领航者 ZYNQ 之嵌入式开发指南 2)实验平台:正点原子领航者ZYNQ开发板 3)平台购买地址:https://item.taobao.com/item.htm?&id= ...
- 扩展中断控制器8259实验_PCIe的中断机制
出于向下兼容的需要,PCIe完全继承了PCI的所有的中断特性(包括INTx,MSI/MSIx).但是与PCI不同的是,PCIe使用串行总线尽量减少pin的使用,所以对于INTX类型的中断,它没有使用s ...
最新文章
- java流程控制图_Java流程控制
- Emscripten 单词_初一(上)掌握这 4 大类发音规律,英语记单词很轻松
- python 2/3 joblib.dump() 和 joblib.load()
- linux Hadoop HDFS NameNode进程重启脚本(linux进程通用)
- MATLAB机器学习系列-9:决策树和随机森林的原理及其例子代码实现
- 代码也浪漫:用Python放一场烟花秀!
- BZOJ 2668: [cqoi2012]交换棋子
- 平面设计师和ui设计师_游戏设计师的平面设计
- JavaSE——Java基础语法(二进制、变量、方法(函数)、运算符、转义字符)
- lcase和ucase_在SQL中使用UCASE(),LCASE()和MID()函数
- 什么是重绘repaint?什么是回流reflow?
- maven插件打包exec_Exec Maven插件–从Maven Build运行Java程序
- 作业要求 20181030-1 Alpha发布用户使用报告
- Cesium:添加按钮与原生按钮样式相同
- Mock 入门,分析stub . mock区别
- 科研学术论文搜索利器:Publish or Perish
- 图像特征提取(颜色,纹理,形状)
- 嵌入式OS的现状、智能的物联网与未来的机器人
- Windows 去除桌面烦人的小箭头
- 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 1 (“@xx“): 对于类型特定的元数据,数据类型 0x62 (sql_variant)的类型无效。