ARM の Event と Interrupt の違い

ARM (Coretex-M4とか) の基本命令に wfi と wfe というのがある、いずれもCPUを省電力モードにして、 Hardware から wakeされるのを待つ命令であるが、wfiはWait For Interrupt (割り込み待ち)wfe はWait ForEvent で それぞれ、Interrupt と Event という別の概念を参照するのだが、それらはどう違うのか・・・・というのを 検索すると、(英語で「私には違うようにしか見えないから説明しないよ」的な)まともでない説明ばかりに ヒットするのに気づいたので書いておく。

 Event は、 WFE命令でCPUが省電力モード(要するにスリープ)しているときだけに意味がある。 ハードウェアから電気的にトリガされたら、省電力モードから復帰するだけのしくみである。 電気的にトリガされたら、なんの信号でWakeさせるのかは、SoC の設計しだいなので、ARM じゃなくて実装メーカのDatasheetを確認。

 Interrupt はスリープ中だろうが、通常状態だろうが、ハードウェアから電気的にトリガされたら指定のプログラム を実行するしくみ。 そのInterrupt ついでにWake してしまえというのがWFIという命令。