wfi

wfi

RISC-V アセンブリ 参考

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