IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 8.7 自制操作系统: risc-v Machine寄存器mscratch/mepc/mcause/mtval -> 正文阅读

[嵌入式]8.7 自制操作系统: risc-v Machine寄存器mscratch/mepc/mcause/mtval

  • mscratch

全称: Machine Scratch Register,不晓得这里scratch该如何翻译,姑且就翻译成机器模式临时存储寄存器。

mscratch寄存器是专用于机器模式的mxlen位读/写寄存器。通常,它用于保存指向机器模式hart-本地上下文空间的指针,并在进入m模式trap处理程序时与用户寄存器进行交换。

  • mepc

全称:机器模式异常程序计数器( Machine Exception Program Counter)

mepc是一个MAXLEN-bit?的读写寄存器,格式如下:

mepc[0]?总是为0的。在仅仅支持IALIGN=32的时候,mepc[1:0]?总是为0.

如果实现允许 IALIGN 为 16 或 32(例如,通过更改 CSR misa),则每当 IALIGN=32 时,位 mepc[1] 在读取时被屏蔽,使其看起来为 0。这种屏蔽也发生在 MRET 指令的隐式读取。 虽然被屏蔽,但当 IALIGN=32 时,mepc[1] 仍然可写.

mepc 是一个 WARL 寄存器,它必须能够保存所有有效的虚拟地址。 它不需要能够保存所有可能的无效地址。 在编写 mepc 之前,实现可能会将无效地址转换为 mepc 能够保存的其他一些无效地址。

当地址转换无效时,虚拟地址和物理地址是相等的。因此mepc必须能够表示一个物理地址的集合,这个集合能被用作有效的pc地址和有效地址。

当trap进入 M 模式时,mepc 被写入被中断或遇到异常的指令的虚拟地址。 否则,mepc 永远不会由实现编写,尽管它可能由软件显式编写。

  • mcause

全称:Machine Cause Register

mcause寄存器是一个MXLEN-bit?读写寄存器,格式如下:

当一个trap发生,陷入M-mode时,mcause将记录发生trap的原因。否则,mcause永远不会由实现编写,尽管它可能由软件显式编写。

如果trap是中断引起,则mcause寄存器被写入中断bit。一个异常编码字段包含最后一次异常或中断的识别码。

下图列出了machine-level的异常编码。异常代码是一个 WLRL 字段,因此只能保证包含支持的异常代码。

注意:load和load-reserved指令生成load异常,store、store-conditional和AMO指令生成store/AMO异常。

中断和异常可以通过mcause的最高位来区分。

如果一个指令可能引发多个同步异常,优先级处理顺序如下:

  • mtval

全称: Machine Trap Value Register

mtval寄存器是一个MXLEN-bit?读写寄存器,格式如下:

当一个trap进入m模式时,mtval要么被设置为零,要么被写入异常特定的信息,以帮助软件处理该trap。否则,mtval永远不会由实现编写,尽管它可能由软件显式编写。硬件平台将指定哪些异常必须详细地设置mtval,哪些异常可以无条件地将其设置为零。如果硬件平台指定没有异常将mtval设置为非零值,则mtval为只读零。??

在fetch/load/store指令触发breakpoint, address-misaligned, access-fault或page-fault异常时,mtval被写入一个非0值,mtval将保存出错时的虚拟地址。

如果当一个不对齐的load或store导致访问错误或页面错误异常时,mtval被写入一个非零值,那么mtval将包含导致错误的访问部分的虚拟地址。

If mtval is written with a nonzero value when an instruction access-fault or page-fault exception

occurs on a system with variable-length instructions, then mtval will contain the virtual address of

the portion of the instruction that caused the fault, while mepc will point to the beginning of the

instruction.

如果指令 access-fault?或page-fault异常发生在一个变长指令系统上,mtval将保存造成fault的一部分指令的虚拟地址,同时mepc将指向指令的开头。

The mtval register can optionally also be used to return the faulting instruction bits on an illegal?instruction exception (mepc points to the faulting instruction in memory). If mtval is written with?a nonzero value when an illegal-instruction exception occurs, then mtval will contain the shortest of:

mtval寄存器也可以选择用在非法指令异常返回错误指令位上(mepc指向内存中的错误指令)。如果在发送非法指令异常时使用非零值写入mtval,则mtval将包含:

? the actual faulting instruction

? the first ILEN bits of the faulting instruction

? the first MXLEN bits of the faulting instruction

非法指令异常时加载到mtval中的值是右对齐的,所有未使用的上层位被清除为零。

对于其他陷阱,mtval被设置为零,但是未来的标准可以为其他陷阱重新定义mtval的设置。

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:27:28  更:2022-04-04 12:29:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:29:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码