Exception E21 RISCV处理器中的mret从ISR返回后获取异常(存储故障访问)

Exception E21 RISCV处理器中的mret从ISR返回后获取异常(存储故障访问),exception,cpu,interrupt,riscv,Exception,Cpu,Interrupt,Riscv,当从中断返回时执行mret指令时,下一个写操作CPU确实会导致异常excode as 7(存储访问故障) 然后mstats.MPP值更改为00(用户模式)。不过,处理器以前进入机器模式。根据RISCV规范,这很好。我已将中断配置为CLIC矢量模式 我找不到CPU陷入异常的原因。但是,如果我在执行任何写入操作之前将mstatus.MPP的值强制更改为machine,那么一切都会正常工作。这种情况也不例外。这种行为是意外的 我会很感激一些解决这个问题的建议 更多的见解将有助于发现问题。比如,您运行的

当从中断返回时执行mret指令时,下一个写操作CPU确实会导致异常excode as 7(存储访问故障)

然后mstats.MPP值更改为00(用户模式)。不过,处理器以前进入机器模式。根据RISCV规范,这很好。我已将中断配置为CLIC矢量模式

我找不到CPU陷入异常的原因。但是,如果我在执行任何写入操作之前将mstatus.MPP的值强制更改为machine,那么一切都会正常工作。这种情况也不例外。这种行为是意外的


我会很感激一些解决这个问题的建议

更多的见解将有助于发现问题。比如,您运行的是一个只打算在M模式下运行的裸机/rtos程序,还是一个打算在M模式下运行内核、在用户模式下运行应用程序的rtos或GPO。如果它是一个纯金属应用程序,甚至是一个RTOS,打算只在M模式下运行,那么很可能您没有正确初始化mstatus csr。您需要在引导时体系结构特定的配置中将MPP位设置为11。您好,我也遇到了这个问题。任何帮助都将不胜感激。