全局中断使能寄存器(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) );
}