ノンマスカブル割込み(NMI:Non-Maskable Interrupt)は、通常のマスカブル割込み用の許可・禁止制御では、受付を禁止されない割込みです。重大な異常の通知などに使われますが、どの装置から発生するか、受けた後に何をするかはシステムの設計によって異なります。
まずは「通常のマスクが効かない」と覚え、その意味を「どんな状態でも必ず動作・復旧する」と広げないことが大切です。比較表と確認問題で整理し、末尾のnote教材では割込み全体の基礎を復習できます。
マスカブル割込みと何が違う?
| 観点 | マスカブル割込み | NMI |
|---|---|---|
| 通常の割込み制御 | 受付を一時的に制限できる | 通常のマスカブル割込み用の制御では禁止されない |
| 代表的な用途 | 入出力装置からの通知など | 重大な異常の通知など |
| 制御の注意 | CPU側の許可状態や装置別マスクを考える | 発生源の設定、受付条件、処理内容は対象の仕様を確認 |
| 処理後の動作 | 原因とOSの処理に従う | 記録・停止・復帰・リセットなど、設計に従う |
通常の受付制御については、マスカブル割込みの記事で、マスクと要求の保留の違いも確認できます。
「禁止できない」の範囲を正しく理解する
NMIは通常の割込み禁止中にも対応するための仕組みです。ただし、発生源を有効にする設定や、NMIの入力経路の設定が別に存在するシステムもあります。「ソフトウェアや設定は一切関係しない」という意味ではありません。
また、NMIには高い優先度が与えられますが、リセットとの関係、NMI処理中に同じ要求が来た場合の扱いなどはCPUの仕様で決まります。すべての事象に対して最優先で、いつでも即時に処理されると一般化しないようにしましょう。
CPUが動作できないほどの故障や電源喪失まで、NMIだけで解決できるわけではありません。割込みはCPUが処理する仕組みなので、実行に必要な電源や動作条件が必要です。
用途の例:発生源と処理を分けて考える
| 例 | 考え方と条件 |
|---|---|
| クロックなどの異常通知 | 監視機能が異常を検出し、NMIへ接続される設計がある。すべてのクロック異常が必ずNMIになるわけではない |
| ウォッチドッグ | 一定時間内の更新が途絶えた場合などに異常を検出。NMIを経由する製品も、直接リセットする製品もある |
| 電源異常の早期検出 | 電圧低下の予告を受けて処理する設計がある。ただし電源保持時間などの条件が必要 |
| タンパなどの異常検出 | NMIを発生させるか、通常の割込み・リセットなどにするかは製品と設定に依存する |
ウォッチドッグを「プログラムがリセット信号を出さなくなったことを検知するもの」とだけ覚えると混乱します。一般にはプログラムが所定の更新操作を行い、その更新が間に合わないことなどを検出します。タイムアウト後の動作は製品ごとに確認します。
電源異常時のデータ保存も、NMIが発生すれば必ず成功するわけではありません。不揮発メモリへの書込みに必要な電圧と時間が確保できるかなど、電源回路と保存手順を含む設計が必要です。
NMIとリセットは同じではない
NMIは対応するハンドラへCPUの制御を移す仕組みです。一方、リセットはCPUや周辺回路を所定の初期状態へ戻す仕組みで、両者は別です。NMIハンドラで状態を記録した後にリセットを要求する設計もありますが、NMI自体が必ず再起動を行うわけではありません。
処理を続けられるか、停止すべきか、再起動するかは異常の内容と設計によって決まります。「NMIがあれば必ず元のプログラムへ戻れる」という説明も避けましょう。
内部・外部の分類とは別の観点
内部・外部は主に発生原因による分類、マスカブル・ノンマスカブルは通常のマスクによる受付制御の可否という分類です。「内部割込みはすべてNMI」「外部割込みはすべてマスカブル」と対応付けないことがポイントです。
NMI専用の入力端子を備えるCPUもありますが、すべてのNMIが専用の外部端子だけから発生するわけではありません。SoC内部の異常監視機能から接続される構成などもあり、具体的な経路は仕様に従います。
確認問題:通常の割込みを禁止したらNMIも止まる?
通常のマスカブル割込みを禁止したとき、NMIも同じ制御によって禁止されるでしょうか? また、NMIが発生すれば必ずリセットして正常に復旧する、と言えるでしょうか?
解答・解説を見る
通常のマスカブル割込み用の禁止制御では、NMIは禁止されません。ただし受付の詳細や発生源の設定は対象の仕様に従います。また、NMIはリセットや正常復旧を保証しません。ハンドラで何を行うか、処理を続けられるかは原因と設計によって異なります。
noteで割込み全体の基礎を復習する
NMIと通常の割込み制御を区別できたら、内部・外部割込みの違いとCPUの処理の流れを復習しましょう。関連noteは、ゼロ除算や入出力完了の分類など、割込み全体の基礎を扱っています。NMI専用の製品解説ではなく、全体像を整理する教材として使えます。
教材の公開範囲・価格はnoteの表示をご確認ください。ほかの教材はIT資格攻略chのnote一覧から探せます。
まとめ
NMIは通常のマスカブル割込み用の制御では禁止されません。重大な異常の通知などに使われますが、発生源・受付条件・処理後の動作はシステムごとに異なります。マスクの可否と、リセット・データ保存・復旧の成否は分けて考えましょう。
参考:Infineon掲載 CMSIS-Core:Core Register Access(英語)。特定の実装の参考例であり、すべてのCPUに同じ動作を当てはめるものではありません。確認問題は本記事のオリジナルです。


コメント