环境:MounRiver Studio v1.91
开发板:CH32V307V-EVT-R0
代码:基于用串口打印 mcause 和 mtval
#include "debug.h" #include "core_riscv.h" int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); SystemCoreClockUpdate(); Delay_Init(); USART_Printf_Init(115200); printf("SystemClk:%d\r\n",SystemCoreClock); printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() ); while(1) { printf("mcause %08x\r\n", __get_MCAUSE()); printf("mtval %08x\r\n", __get_MTVAL()); Delay_Ms(500); } }
为了能读取 mcause 和 mtval, 在 startup_ch32v30x_D8.S 改成机器模式(原来是 0x6088):
/* Enable floating point and interrupt */ li t0, 0x7888 csrs mstatus, t0
用MRS Download,会有 mcause 00000001
用开发板上的开关 reset或拔掉电源,结果不相同:
试了 Debug,启动的时候就有 mcause = 2
是不是需要自己清零 mcause ?