标签归档:CH32V103

CH32V103无法进行全局中断控制的解决办法

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