wfi

wfi

Ensamblador RISC-V Referencia

lyszt.net cubre wfi y otras instrucciones RISC-V con más detalle.

Descripción

wfi detiene el programa hasta que llega una interrupción. Las letras significan wait for interrupt (esperar interrupción). Un programa que no tiene nada que hacer permanece inactivo aquí en lugar de girar en bucle ejecutando instrucciones. No toma operandos.

wfi

El procesador se detiene en wfi y se reanuda cuando hay una interrupción pendiente y su bit de habilitación en mie está activado. En este simulador, eso ocurre cuando se pulsa un botón y la interrupción del botón está habilitada. El simulador muestra el estado de espera de interrupción y no ejecuta ninguna instrucción durante ese tiempo.

Lo que ocurre después depende de mstatus. Si el bit de habilitación global de interrupciones está activado, el procesador atiende la interrupción en cuanto se despierta. La trampa escribe la dirección de la instrucción siguiente a wfi en mepc, se ejecuta el manejador y mret regresa a la instrucción siguiente a wfi. Si el bit de habilitación global está desactivado, el procesador se despierta y continúa con la instrucción siguiente a wfi sin ejecutar ningún manejador.

Un programa que permanece inactivo entre pulsaciones de botón configura mtvec, mie y mstatus, y luego repite wfi en un bucle.

loop:
wfi
j loop

Sin ninguna interrupción habilitada, wfi espera para siempre, así que habilita la interrupción antes de llegar a ella. csrs activa los bits de habilitación, y mret regresa desde el manejador.

Ejemplo

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