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