mstatus 寄存器:提供全局中断使能控制,通过 MIE 位来启用或禁用所有机器模式的中断。 mie 寄存器:提供具体类型的中断使能控制,通过各个位来启用或禁用特定类型的中断。 Xie寄存器 mstatus 寄存器位的描述 xIE 开启之后,可以响应中断,比如 M模式下可以响应中断的话,就开启MIE UIE (User Interrupt Enable) 位:总开关 ...
中断处理完成之后需要返回,从机器模式的中断返回需要调用mret指令,它会 将 PC 设置为 mepc,通过将 mstatus 的 MPIE 域复制到MIE 来恢复之前的中断使能设置,并将权限模式设置为 mstatus 的 MPP 域中的值。 对于中断模块设计,一种简单的方法就是当检测到中断(中断返回)信号时,先暂停整条流水线,设置跳转地址为...
If the floating-point unit status eld mstatus.FS is Off then any attempt to execute a vector floating-point instruction will raise an illegal instruction exception. Any vector floating-point instruction that modies any floating-point extension state (i.e., floating-point CSRs or f registers) ...
将mstatus.MPP写入 0 以将之前的模式设置为 User,这允许我们返回到该模式。 设置物理内存保护 (PMP) 区域以将所需区域授予用户和主管模式,并可选择从机器模式撤消权限。 用主管模式异常处理程序的基地址写入stvec CSR。 编写medeleg寄存器,将异常委托给主管模式。考虑ECALL和页面错误异常。 编写mstatus.FS以启用浮...
向量上下文状态字段VS, 添加于mstatus[10:9]字段并隐藏于sstatus[10:9]字段中(这点不同于 v0.8 )。VS的定义类似于浮点上下文状态字段的定义FS。 当VS字段被设置为 Off ,试图执行任何向量指令,或访问向量CSRs时,会引发非法指令异常。 当VS字段被设置为 Initial 或 Clean ,执行更改向量状态的指令,包括向量 CSR...
在进入异常时,mstatus.MPP的值曾经被更新为异常发生前的Privilege Mode,而在执行mret指令后,处理器的Privilege Mode被恢复为mstatus.MPP的值,通过这个机制,保证了处理器回到了异常发生前的处理器的Privilege Mode。5.7.4. 更新Machine Sub-ModeN级别处理器内核的Machine Sub-Mode实时反映在CSR寄存器msubm.TYP域中。
其中把线程的入口地址给了mepc,线程输入参数给a0,mstatus初始值(MPP、MPIE、FS、MIE),即强制机器模式,使能浮点,MPIE为1,MIE为0。如果不带硬件浮点,可将该值设置为0x1880。另外设置ra为线程的返回地址,一般情况下一个线程我们希望一直运行的,当需要返回时说明该线程不再需要运行,所以返回地址一般是一段将该线程...
li t0, MSTATUS_FS | MSTATUS_XS | (0x01800000) csrs mstatus, t0 在启动代码中,通过0x01800000设置mstatus开启V扩展支持。 3.编译选项支持V扩展 默认情况下,平头哥提供的交叉编译工具链已支持了V扩展的编译。只需要在编译选项中开启即可。 从传递给riscv 的gcc的选项来看,带有v扩展即可。
li t0, MSTATUS_FS | MSTATUS_XS | (0x01800000) csrs mstatus, t0 在启动代码中,通过0x01800000设置mstatus开启V扩展支持。 3.编译选项支持V扩展 默认情况下,平头哥提供的交叉编译工具链已支持了V扩展的编译。只需要在编译选项中开启即可。 从传递给riscv 的gcc的选项来看,带有v扩展即可。
/* 在源码中,这里有一个M模式处理的宏,这里没有用到,直接跳过*/ /* 加载全局指针gp */ .option push .option norelax la gp, __global_pointer$ .option pop /* 禁用 FPU 以检测内核空间中浮点的非法使用*/ li t0, SR_FS csrc CSR_STATUS, t0 ...