wfi
lyszt.net behandelt wfi und andere RISC-V-Befehle ausführlicher.
Beschreibung
wfi hält das Programm an, bis ein Interrupt eintrifft. Die Buchstaben stehen für wait for interrupt (auf Interrupt warten). Ein Programm, das nichts zu tun hat, wartet hier im Leerlauf, anstatt in einer Schleife durch Anweisungen zu rotieren. Sie nimmt keine Operanden.
wfi
Der Prozessor hält bei wfi an und startet wieder, wenn ein Interrupt ansteht und sein Enable-Bit in mie gesetzt ist. In diesem Simulator geschieht das, wenn eine Taste gedrückt wird und der Interrupt der Taste aktiviert ist. Der Simulator zeigt den Zustand des Wartens auf einen Interrupt an und führt während dieser Zeit keine Anweisungen aus.
Was als Nächstes passiert, hängt von mstatus ab. Wenn das globale Interrupt-Enable-Bit gesetzt ist, nimmt der Prozessor den Interrupt an, sobald er aufwacht. Die Trap schreibt die Adresse der Anweisung nach wfi nach mepc, der Handler wird ausgeführt, und mret kehrt zur Anweisung nach wfi zurück. Wenn das globale Enable-Bit gelöscht ist, wacht der Prozessor auf und fährt mit der Anweisung nach wfi fort, ohne einen Handler auszuführen.
Ein Programm, das zwischen Tastendrücken im Leerlauf wartet, konfiguriert mtvec, mie und mstatus und wiederholt dann wfi in einer Schleife.
loop: wfi j loop
Ohne aktivierten Interrupt wartet wfi für immer, also aktiviere den Interrupt, bevor du ihn erreichst. csrs schaltet die Enable-Bits ein, und mret kehrt aus dem Handler zurück.
Beispiel
csrsi mstatus, 8 # allow interrupts wfi # idles here until the button is pressed
