wfi

wfi

Assembly RISC-V Riferimento

lyszt.net tratta wfi e altre istruzioni RISC-V in modo più dettagliato.

Descrizione

wfi arresta il programma finché non arriva un interrupt. Le lettere stanno per wait for interrupt (attendi interrupt). Un programma che non ha nulla da fare resta inattivo qui invece di girare in un ciclo di istruzioni. Non accetta operandi.

wfi

Il processore si ferma a wfi e riparte quando un interrupt è in attesa e il suo bit di abilitazione in mie è impostato. In questo simulatore, ciò avviene quando viene premuto un pulsante e l'interrupt del pulsante è abilitato. Il simulatore mostra lo stato di attesa dell'interrupt e non esegue alcuna istruzione durante quel tempo.

Ciò che accade dopo dipende da mstatus. Se il bit di abilitazione globale degli interrupt è impostato, il processore prende l'interrupt non appena si risveglia. Il trap scrive l'indirizzo dell'istruzione dopo wfi in mepc, l'handler viene eseguito, e mret ritorna all'istruzione dopo wfi. Se il bit di abilitazione globale è azzerato, il processore si risveglia e procede all'istruzione dopo wfi senza eseguire un handler.

Un programma che resta inattivo tra le pressioni dei pulsanti configura mtvec, mie e mstatus, poi ripete wfi in un ciclo.

loop:
wfi
j loop

Senza alcun interrupt abilitato, wfi attende per sempre, quindi abilita l'interrupt prima di raggiungerla. csrs attiva i bit di abilitazione, e mret ritorna dall'handler.

Esempio

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