RISC-V的全局中断标志是在mstatus的MIE字段中。所以对全局中断进行操作时,配置MIE字段即可。
禁止中断
#define disable_irq() do {asm volatile ("csrr mstatus, 0x0");} while(0)
使能中断:
0x8表示mstatus的第3bit,即MIE字段,设置为1表示使能全局中断
#define enable_irq() do {asm volatile ("csrr mstatus, 0x8");} while(0)
不过这种简单粗暴的方法,把MIE之外的其它字段的值也修改了,比如CPU模式等。在支持多种CPU模式的系统中可能存在问题。由于我们目前仅仅支持机器模式(不支持特权模式和用户模式),所以问题倒是不大。MPIE等字段也不受影响。
但是有时候程序进入一段代码的时候我们希望它要关闭中断,但是退出的时候不不希望直接开启中断,而是希望保持之前的状态。比如进入这段程序之前中断是关闭的,进入这段