環(huán)境:MounRiver Studio??v1.91
開發(fā)板: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 改成機(jī)器模式(原來是 0x6088):
/*?Enable?floating?point?and?interrupt?*/ ????li?t0,?0x7888 ????csrs?mstatus,?t0
用MRS Download,會有 mcause 00000001
用開發(fā)板上的開關(guān) reset或拔掉電源,結(jié)果不相同:
試了 Debug,啟動的時候就有 mcause = 2
是不是需要自己清零 mcause ?