RISC-V架构的处理器在进入和退出中断处理模式时没有硬件自动保存和恢复上下文(通用寄存器)的操作,因此需要软件明确地使用(汇编语言编写的)指令进行上下文的保存和恢复。根据中断是向量处理模式还是非向量处理模式,上下文的保存和恢复涉及到的内容会有所差异,请参见《Nuclei_N级别指令架构手册》第5.13节了解更多详细介绍。
当然需要。
如果你用的是非向量中断的话,中断之后首先就会进入MTVT2这个寄存器保存的地址开始执行代码,可以参考5.13.1.1;
这时你就需要手动保存上下文,切换栈指针等等。然后通过csrrw ra, CSR_JALMNXTI, ra,进入对应的中断服务函数处理中断;
中断服务函数执行完之后,会返回,然后恢复上下文,最后调用mret回到终端前执行的地方。
有一些内核会自动保存上下文的,这个是内核特性决定的,RISCV不会自动保存