保存M模式下的中断开关,并关闭M模式下的中断,即将mstatus中的mie保存到mpie,并将mie置0。 保存异常前的处理器模式,即将当前处理器模式保存到mstatus中的mpp中。 设置处理器模式为M模式。 将当前指令的PC保存到mepc中用于后续异常的返回地址。 将异常的原因保存到mcause寄存器中。 将产生异常的虚拟地址写入mtval(...
mstatus 寄存器:提供全局中断使能控制,通过 MIE 位来启用或禁用所有机器模式的中断。 mie 寄存器:提供具体类型的中断使能控制,通过各个位来启用或禁用特定类型的中断。 Xie寄存器 mstatus 寄存器位的描述 xIE 开启之后,可以响应中断,比如 M模式下可以响应中断的话,就开启MIE UIE (User Interrupt Enable) 位:总开关 ...
把控制状态寄存器 mstatus 中的 MIE 位置零以禁用中断,并把先前的 MIE 值保 留到 MPIE 中。 发生异常之前的权限模式保留在 mstatus 的 MPP 域中,再把权限模式更改为 M。图 10.5 显示了 MPP 域的编码(如果处理器仅实现 M 模式,则有效地跳过这 个步骤)。 为避免覆盖整数寄存器中的内容,中断处理程序先在最...
应首先通过将mstatus.MIE写入 0(默认复位值)来全局禁用中断。 将机器模式异常处理程序的基地址写入mtvec CSR。这是任何引导流程中的必需步骤。 将mstatus.MPP写入 0 以将之前的模式设置为 User,这允许我们返回到该模式。 设置物理内存保护 (PMP) 区域以将所需区域授予用户和主管模式,并可选择从机器模式撤消权限。
将mstatus中的MIE位置置零以禁用中断,并把先前的MIE值保留到MPIE中。 发生异常之前的权限模式保留在mstatus的MPP域中,再把权限模式更改为M。(如果处理器仅实现 M 模式,则有效地跳过这个步骤)。 处理中 为避免覆盖整数寄存器中的内容,异常/中断处理程序先在最开始用mscratch和整数寄存器(例如a0)中的值交换。通常...
Machine Status Register (mstatus)机器模式状态寄存器该寄存器记录了 m 模式下的状态。其中,MPP 记录了进入异常处理之前的模式,也是 mret 返回后要切换的模式,可以通过修改该位域改变接下来程序执行的模式。FS 域 是浮点状态和开关。MIE 为中断使能位。 当异常发生时 当异常发生时,处理器会做如下处理(用户模式下)...
mstatus Machine Status Register (mstatus) 机器模式状态寄存器 该寄存器记录了 m 模式下的状态。 其中,MPP 记录了进入异常处理之前的模式,也是 mret 返回后要切换的模式,可以通过修改该位域改变接下来程序执行的模式。 FS 域 是浮点状态和开关。 MIE 为中断使能位。
除了上述的寄存器,移植还要关心的是几个csr寄存器mstatus,mepc。正常情况下大部分csr只能在机器模式下操作(WCH的v3和v4内核支持机器模式和用户模式)。mstatus中,MIE为中断使能,当进中断时MPIE更新为MIE,返回时MIE更新为MPIE。MPP用于保存进中断之前的特权模式,如果我们设置其为MPP=0b11,那么将一直处于机器模式...
将特权模式的状态设置到mstatus.MPP 将mstatus.MPIE的数据拷贝到mstatus.MIE中 从mepc中取值放到pc中 最后执行eret恢复到程序正常运行的状态。 对于CLINT来说,有Software Interrupt和Timer Interrupt,可以直接在寄存器中控制。 而PLIC实际上可以理解为arm的中断控制器,存在其map地址。
在进入异常时,mstatus.MPP的值曾经被更新为异常发生前的Privilege Mode,而在执行mret指令后,处理器的Privilege Mode被恢复为mstatus.MPP的值,通过这个机制,保证了处理器回到了异常发生前的处理器的Privilege Mode。5.7.4. 更新Machine Sub-ModeN级别处理器内核的Machine Sub-Mode实时反映在CSR寄存器msubm.TYP域中。