当前位置: 首页 > 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.lryc.cn/news/623639.html

相关文章:

  • AOP配置类自动注入
  • 高级堆结构
  • 机器人经验学习1 杂记
  • Ansible 管理变量和事实
  • CW32L011_电机驱动器开发板试用
  • SpringCloud 06 服务容错 Sentinel
  • 云智智慧停充一体云-allnew全新体验-路内停车源码+路外停车源码+充电桩源码解决方案
  • 中国星网发展情况全面分析
  • python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
  • 3.逻辑回归:从分类到正则化
  • pyecharts可视化图表组合组件_Grid:打造专业数据仪表盘
  • 数据赋能(396)——大数据——抽象原则
  • tauri2项目WindowConfig配置中titleBarStyle样式区别,仅macOS有效
  • 【Jenkins】01 - Jenkins安装
  • 阶段二:7-上网行为安全概述
  • Kotlin集合概述
  • 《PEFLL: Personalized Federated Learning by Learning to Learn》——论文阅读
  • 【Android】Activity创建、显式和隐式跳转、清单文件声明
  • Android 对话框 - 基础对话框补充(不同的上下文创建 AlertDialog、AlertDialog 的三个按钮)
  • 飞算JavaAI结合Redis实现高性能存储:从数据瓶颈到极速读写的实战之旅
  • 关于虾的智能养殖系统的开发与实现(LW+源码+讲解+部署)
  • 数据结构(排序篇)——七大排序算法奇幻之旅:从扑克牌到百亿数据的魔法整理术
  • 三维重建-动手学计算机视觉19(完结)
  • SHAP分析!NRBO-Transformer-BiLSTM回归预测SHAP分析,深度学习可解释分析!
  • ReID/OSNet 算法模型量化转换实践
  • 牛客周赛 Round 105
  • Redis-plus-plus API使用指南:通用操作与数据类型接口介绍
  • EDMA(增强型直接内存访问)技术
  • [每周一更]-(第155期):Go 1.25 发布:新特性、技术思考与 Go vs Rust 竞争格局分析
  • 多线程—飞机大战(加入排行榜功能版本)