中断处理机制(RISC-V)
睡不醒的鲤鱼 2021-05-22 操作系统 uCore
# 一、概述
建立中断机制的流程为:
- 让 CPU 能响应中断
- 建立中断服务例程
- 响应并处理中断
- 保存与恢复现场
下面详细介绍每个步骤的实现。
# 二、让 CPU 能响应中断
# 2.1 硬件设置
sstatus
:保存全局中断使能位;sie
:指出 CPU 目前能处理 | 忽略的中断;stvec
:记录中断入口地址(中断向量表)。
# 2.2 初始化操作
- 设置
sie
的TI
使能STIE
位; - 设置
sstatus
的使能中断SIE
位; - 实现中断服务总控函数;
- 设置
stvec
指向中断服务总控函数的入口地址。
# 三、建立中断服务例程
- 初始化:设置时钟中断触发次数;
- 初始化:设置
sie
的TI
使能STIE
位; - 服务例程:调用 OpenSBI 提供的接口设置下次时钟中断触发时间。
# 四、保存与恢复现场
# 4.1 硬件设置
sepc
:保存中断的指令地址pc
:设置为stvec
scause
:设置中断的来源sstatus
:SIE
位置零以禁用中断stval
:保存了中断相关的附加信息
# 4.2 软件保存
x[0–31]
:通用寄存器pc
:设置为stvec
scause
:设置中断的来源sstatus
:SIE
位置零以禁用中断stval
:保存了中断相关的附加信息
# 4.3 总结
产生中断后的流程如下:
- 硬件设置
- 软件保存被打断现场
- 执行软件实现的中断服务例程
- 软件恢复被打断现场
- 继续执行
# 五、中断嵌套
硬件中断服务例程可被打断,不同硬件中断源可能在硬件中断处理时出现。
中断嵌套是指中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断服务例程,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务例程继续执行的过程。