wfi

wfi

RISC-V 汇编 参考

lyszt.net 更详细地介绍了 wfi 和其他 RISC-V 指令。

描述

wfi 会暂停程序,直到有中断到来。这几个字母代表 wait for interrupt(等待中断)。无事可做的程序会在这里空闲,而不是在循环中空转指令。它不接受操作数。

wfi

处理器在 wfi 处停止,当有中断挂起且其在 mie 中的使能位被置位时重新启动。在此模拟器中,这发生在按下按钮且该按钮的中断被使能时。模拟器会显示等待中断状态,在此期间不执行任何指令。

接下来发生什么取决于 mstatus。如果全局中断使能位被置位,处理器一被唤醒就立即接受中断。陷阱会把 wfi 之后那条指令的地址写入 mepc,处理程序运行,然后 mret 返回到 wfi 之后的指令。如果全局使能位被清除,处理器会醒来并直接继续执行 wfi 之后的指令,而不运行处理程序。

在按钮按下之间空闲的程序会配置 mtvec、mie 和 mstatus,然后在循环中重复执行 wfi。

loop:
wfi
j loop

如果没有使能任何中断,wfi 会永远等待,因此在到达它之前要先使能中断。csrs 会打开使能位,而 mret 会从处理程序返回。

示例

csrsi mstatus, 8   # allow interrupts
wfi                # idles here until the button is pressed