我正在寻找有关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 架构的信息。
mstatus
的mie
还是mie
CSR? 另外,您介意写出mret
的功能吗? - Charles Lohrmie
而不是mstatus.mie
。mret
用于恢复被中断的线程的执行(不一定是立即被中断的线程),包括将pc设置为mepc并恢复中断状态以及模式(用户或超级用户)。尝试使用RARS编写一个异常处理程序,其中仅执行mret
和一些用户代码,以引发异常(例如通过ecall
或对错误地址的lw
操作)。 - Erik Eidt