wfi
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
