mstatus 寄存器:提供全局中断使能控制,通过 MIE 位来启用或禁用所有机器模式的中断。 mie 寄存器:提供具体类型的中断使能控制,通过各个位来启用或禁用特定类型的中断。 Xie寄存器 mstatus 寄存器位的描述 xIE 开启之后,可以响应中断,比如 M模式下可以响应中断的话,就开启MIE UIE (User Interrupt Enable) 位:总开关 ...
6. mstatus(硬件线程状态寄存器) mstatus 寄存器用来标识和控制 HART 的操作状态,其各位完整的定义可以在 RISC-V 官方标准中找到。对于只支持单个 HART 和机器模式的处理器来说,需要 注意表16 中的两个位。 表16 硬件线程状态寄存器 7. mscratch(草稿寄存器) 在RV32 下,这是一个 32 位的读写寄存器。除了被...
应首先通过将mstatus.MIE写入 0(默认复位值)来全局禁用中断。 将机器模式异常处理程序的基地址写入mtvec CSR。这是任何引导流程中的必需步骤。 将mstatus.MPP写入 0 以将之前的模式设置为 User,这允许我们返回到该模式。 设置物理内存保护 (PMP) 区域以将所需区域授予用户和主管模式,并可选择从机器模式撤消权限。
不过在CSR中也不是完全没有特权等级的身影。在mstatus寄存器(具体字段见下图)中,有xPP字段(包括MPP, SPP和UPP,其中PP的全称文档中没有明确说明,我认为是Previous Privilege),它记录的是进入trap之前处理器所处的状态,当程序从trap中返回时,处理器返回对应字段中记录的特权等级。在RISC-V中,MRET、SRET和URET分别用...
mstatus(Machine Status)它保存全局中断使能,以及许多其他的状态 mstatus mstatus.MIE置 1 时才会产生中断。 mstatus.PMIE它在异常/中断发生后保存MIE的旧值 mie 每个中断在控制状态寄存器 mie 中都有自己的使能位。这些位在 mie 中的位置对应于图[[RISC-V 异常和中断的原因.png]]。例如,mie[7]=1对应于 ...
mstatus.TVM (Trap Virtual Memory)位支持拦截监控虚拟内存管理操作。当TVM=1时,在S模式下执行时尝试读取或写入satp CSR,或执行SFENCE.VMA指令会引发非法指令异常。当TVM=0时,这些操作在监控模式下是允许的。当不支持监控模式时,TVM被固定为0。TVM机制通过允许客户操作系统在监控模式下执行,而不是在用户模式下传统...
- 处理器停止执行当前的程序流,转而跳转 mtvec 寄存器定义的 PC 地址开始执行; - 处理器切换到机器模式; - 将异常原因记录到 mcause 寄存器中; - 将发生异常的指令地址写入 mepc 寄存器中; - 将异常发生时的存储器访问地址或者指令编码保存到 mtval 寄存器中; - 更新 mstatus 状态寄存器; 异常处理 当异常...
首先mstatus的MIE域被拷贝到mstatus的MPIE,然后mstatus的MIE域被清除。此时全局中断disable。 程序当前的pc值被拷贝到mepc寄存器中,然后pc值会根据mtvec的值设置其值。如果向量中断被使能,pc值会变成mtvec.BASE+4xexception处的代码。 从mstatus.MPP中取出特权模式的状态 ...
2.2.3 DM状态寄存器(dmstatus,0x11) dmstatus寄存器是一个只读寄存器,每一位含义如图10所示。 图10 dmstatus寄存器 impebreak:1表示执行完progbuf的指令后自动插入一条ebreak指令,这样就可以节省一个progbuf。当progbufsize的值为1时,此值必须为1。
中断处理的第一条指令地址存储在mtvec中,mie寄存器(不是mstatus寄存器中的mie位)控制哪些中断可以被触发,只有对应位置置一的中断号的中断会触发。 中断处理完成之后需要返回,从机器模式的中断返回需要调用mret指令,它会 将 PC 设置为 mepc,通过将 mstatus 的 MPIE 域复制到MIE 来恢复之前的中断使能设置,并将权限...