CH32V103默认无法使用全局中断。需要替换core_riscv.h和startup_ch32v10x.S两个文件。
core_riscv.h文件位于工程目录的Core文件夹下。
startup_ch32v10x.S文件位于工程目录的Startup文件夹下。
core_riscv.h文件中修改的内容
core_riscv.h中新增了关于全局中断控制函数的定义,具体新增的代码片段如下:
RV_STATIC_INLINE void __enable_irq()
{
__asm volatile ("csrw mstatus, %0" : : "r" (0x1888) );
}
RV_STATIC_INLINE void __disable_irq()
{
__asm volatile ("csrw mstatus, %0" : : "r" (0x1800) );
}
startup_ch32v10x.S文件中修改的内容
startup_ch32v10x.S文件修改的内容主要是mstatus寄存器的赋值变化,原赋值为0x88,更改为0x1888。
原代码片段如下:
/* enable all interrupt */
li t0, 0x88
csrs mstatus, t0
la t0, _vector_base
ori t0, t0, 1
csrw mtvec, t0
修改后的代码片段如下:
/* enable all interrupt */
li t0, 0x1888
csrs mstatus, t0
la t0, _vector_base
ori t0, t0, 1
csrw mtvec, t0