当前位置: 首页 > news >正文

riscv中断处理软硬件流程总结

trap相关csr

在这里插入图片描述

trap初始化

需要在程序里先设置好mtvec,如果需要中断委托的话还需要设置mideleg、medeleg。

硬件处理过程

硬件先去关中断

  • 设置mstatus.xPIE为trap发生时xIE的值。
  • 设置mstatus.xIE为0。
  • 设置mepc为 当前指令(异常)或下一条指令的地址(中断)。
    指令触发同步异常后,处理程序处理后再重新执行一次这个指令。例如:缺页异常。
    如果是中断的话,在这个指令执行末尾才会跳异常处理程序,所以返回时直接跑下一条指令就可以。
  • 设置pc为mtvec设定的值。
  • 设置mcause为trap发生的原因(exception code)。
  • 设置mtval为该异常的附加信息。
  • 设置mstatus.xPP为trap发生时的权限级别值。

在这里插入图片描述

软件处理过程

  • 保存当前控制流的上下文信息(通用寄存器x1-x31),利用mscratch。
    mscratch中保存当前上下文信息的内存地址,没法直接使用,需要先用csr指令读出来放到一个通用寄存器里。比如:可以用x31(t6)寄存器,使用csrrw t6, mscratch, t6 交换寄存器的数据,然后就可以用sw指令来将信息保存进t6里的地址处了。
  • trap handler
  • 从trap handler返回,mepc可以调整。
  • 恢复上下文的信息。
  • 执行MRET返回到trap之前。

xRET后硬件处理流程

  • 将当前hart的特权等级改为mstatus.MPP的值。
  • 将mstatus.MPIE的值恢复到mstatus.MIE。
  • mstatus.MPIE更新为1。
  • 将pc设置为mepc。
http://www.xdnf.cn/news/1315837.html

相关文章:

  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day6
  • Vue3 中的 ref、模板引用和 defineExpose 详解
  • 安卓14系统应用收不到开机广播
  • 【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略
  • 大模型算法岗面试准备经验分享
  • (机器学习)监督学习 vs 非监督学习
  • 智能制造——解读37页 案例分享灯塔工厂解决方案【附全文阅读】
  • 电子电气架构 --- 自动驾驶汽车的下一步发展是什么?
  • LeetCode 分类刷题:2962. 统计最大元素出现至少 K 次的子数组
  • 零墨云A4mini打印机设置电脑通过局域网络进行打印
  • 详解flink java基础(一)
  • Flink作业执行的第一步:DataFlow graph的构建
  • nodejs 错误处理
  • Gradle快速入门学习
  • 数据结构初阶(19)外排序·文件归并排序的实现
  • 机器学习案例——对好评和差评进行预测
  • error #include<cuda_runtime_api.h>解决方案
  • Java基础 8.17
  • 2023年全国研究生数学建模竞赛华为杯F题强对流降水临近预报求解全过程文档及程序
  • RAG 分块中表格填补简明示例:Markdown、HTML、Excel、Doc
  • 机器学习--数据清洗
  • 北京JAVA基础面试30天打卡12
  • STM32CUBEMX配置stm32工程
  • 五、redis入门 之 客户端连接redis
  • Go语言并发编程 ------ 临界区
  • 批次号规则
  • Mac(四)自定义按键工具 Hammerspoon 的安装和使用
  • FX10/20 (CYUSB401X)开发笔记5 固件架构
  • 基于DSP+ARM+FPGA架构的储能协调控制器解决方案,支持全国产化
  • 【完整源码+数据集+部署教程】无人机航拍视角洪水检测与受灾房屋识别图像分割救援指导系统源码和数据集:改进yolo11-DCNV2