我正在寻找一个RISC-V处理器如何处理中断请求.
我看了网上的指令集手册和信息。重点在于准确地解释标题集:指令集。在我看来,如何处理中断是一个被称为处理器的“程序员模型”的问题。由于中断处理的部分不是用指令表示的,所以它不清楚地适合于有关指令集的文档。显然,跳入ISR并不是程序代码中任何地方显示的指令。指令集手册提供了对mret和mstatus的描述,但没有提供一个整体的视图。
对于假设的体系结构,中断处理可以这样描述:
If the IRQ line is high and the I-bit in the status register is set,
the processor executes the following steps atomically:
- Push the PC of the next instruction onto the stack.
- Push the status register onto the stack.
- Clear the I-bit in the status register.
- The PC is set to the location specified in the INTHNDLR register.这是我正在寻找的RISC-V架构的信息类型。
发布于 2020-05-20 14:53:10
从根本上说,处理器有一些额外的寄存器,称为“控制和状态寄存器”( Control & Status registers,简称CSR),用于保存某些关键状态,如中断的pc、中断的特权级别、中断的原因等。此外,CSR保存中断配置,其中一种状态是中断向量表的地址,以及当前的权限级别,更多的情况是它是否在32位模式或更大的模式下运行。
在中断时,处理器所做的一切都是
将中断的pc捕获到称为mepc
mcause
mtval保存故障地址
mtvec
。
使RISC V中的事情变得更复杂的是特权规范中的可选内容的数量。其中有3家CSR银行(CSR名称的第一个字母不同)--与允许的3种特权级别U、S、M--大部分是可选的(实际上只有M是必需的)--松散地关联在一起。(也是可选的,例如,64位或更大(128),然后以32位模式、多处理器、浮点等方式运行的能力.)
CSR银行和特权级别是存在的,这样一个完整的实现可以为管理程序/虚拟机、操作系统和应用程序提供良好的支持。对于一个简单的应用程序,例如,在嵌入式处理器上,实际上只需要一个CSR银行和一个特权级别。
如果您熟悉MIPS中断处理,您会发现RISC V虽然比较复杂,但还是有点熟悉。然而,从根本上说,这些处理器使用额外的寄存器(在MIPS上它们处于“协处理器0")而不是堆栈来存储中断状态。而MIPS专用的2个通用处理器寄存器(整数$k0,$k1)用于中断处理,而RISC则没有。但是,与MIPS不同,RISC为中断处理程序提供了一个额外的CSR,称为mscratch,该中断处理程序可用于临时保存(中断线程的)常规寄存器中的值,以便ISR正常工作,或者,由于受到保护,可以将其设置为指向当前运行的线程控制块的指针,在该指针中可以保存中断线程的CPU寄存器。
RARS模拟器提供两种模式,U和M,并且有M组CSR,它允许您将中断处理程序作为一个小型操作系统来为应用程序服务。
如果您想要更多的信息,请从学习MRET指令开始,因为这在某种程度上逆转了/取消中断。否则,请查看RARS模拟器,您可以在其中实际编写中断处理程序。
https://stackoverflow.com/questions/61913210
复制相似问题