全局中断使能寄存器(gintenr) 该寄存器用于控制全局中断的使能与屏蔽,机器模式下全局中断的使能与屏蔽可以通过寄存器 mstatus 中的 MIE,MPIE 位控制,该寄存器用户模式下无法操作。而全局中断使能寄存器 gintenr 是 mstatus 中 MIE 和 MPIE 的映射,用户模式下可以通过操作 gintenr,用于 MIE 和 MPIE 的置位和清零。 

core_riscv.h 中定义:

RV_STATIC_INLINE void __enable_irq()

{

  __asm volatile ("csrw 0x800, %0" : : "r" (0x6088) );

}

RV_STATIC_INLINE void __disable_irq()

{

  __asm volatile ("csrw 0x800, %0" : : "r" (0x6000) );

}


操作gintenr 是不是只改动 mstatus 的 MIE,MPIE?

如是的话,下面这么写是一样效果吗?

RV_STATIC_INLINE void __enable_irq()

{

  __asm volatile ("csrw 0x800, %0" : : "r" (0xffff) );

}


RV_STATIC_INLINE void __disable_irq()

{

  __asm volatile ("csrw 0x800, %0" : : "r" (0x0000) );

}