wfi
lyszt.net couvre wfi et d'autres instructions RISC-V plus en détail.
Description
wfi arrête le programme jusqu'à l'arrivée d'une interruption. Ces lettres signifient wait for interrupt (attendre une interruption). Un programme qui n'a rien à faire reste inactif ici plutôt que de tourner en boucle sur des instructions. Elle ne prend aucun opérande.
wfi
Le processeur s'arrête à wfi et redémarre lorsqu'une interruption est en attente et que son bit d'activation dans mie est défini. Dans ce simulateur, cela se produit lorsqu'un bouton est pressé et que l'interruption du bouton est activée. Le simulateur affiche l'état d'attente d'interruption et n'exécute aucune instruction pendant ce temps.
Ce qui se passe ensuite dépend de mstatus. Si le bit d'activation global des interruptions est défini, le processeur prend l'interruption dès qu'il se réveille. Le trap écrit l'adresse de l'instruction après wfi dans mepc, le gestionnaire s'exécute, et mret revient à l'instruction après wfi. Si le bit d'activation global est effacé, le processeur se réveille et passe à l'instruction après wfi sans exécuter de gestionnaire.
Un programme qui reste inactif entre les pressions de bouton configure mtvec, mie et mstatus, puis répète wfi dans une boucle.
loop: wfi j loop
Sans interruption activée, wfi attend indéfiniment, donc activez l'interruption avant de l'atteindre. csrs active les bits d'activation, et mret revient du gestionnaire.
Exemple
csrsi mstatus, 8 # allow interrupts wfi # idles here until the button is pressed
