NMI(ノンマスカブル割り込み)って何?:Q&Aで学ぶマイコン講座(51)(3/4 ページ)
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。51回目は、初心者の方からよく質問される「NMI(Non-maskable interrupt/ノンマスカブル割り込み)って何?」についてです。
【1】マイコンの仕様上で決められた割り込み要因に割り当ててある場合
STM32F4のコア(CPU:Central Processing Unit)は、Cortex-M4です。Cortex-M4では、内蔵されているNVIC(Nested Vectored Interrupt Controller:統合ネスト型ベクター割り込みコントローラー)が全ての割り込みを制御していて、NMIの入力信号を受けると割り込みハンドラを起動します。マイコンメーカーは、このNMIの入力信号にどの割り込み要因を割り当てるかを検討し、マイコンの仕様を決めます。STM32F4シリーズの場合は、CSSを割り当てています(図3(a))
CSSはマイコンのシステムクロックの障害を検知するシステムです。外部からのクロック入力(HSE:High Speed External Clock Signal)の障害を検知して、内蔵発振回路(HSI:High Speed Internal Clock Signal)のクロックに切り替え、同時にNMIハンドラを起動する機能です。マイコンではシステムクロックの障害は致命的な障害なので、NMIを割り当てています。
一方、NVICのNMI入力信号はマイコンメーカーが自由に割り当てできるため、各マイコンで最も致命的な障害を何と考えるかで、割り当て項目が変わってきます。例えば、ウォッチドッグタイマー*3)のオーバーフローを割り当てているマイコンもあります。ウォッチドッグタイマーは、マイコンの暴走を監視するタイマーなので、これも致命的な要因と言えます。マイコンの暴走をウォッチドッグタイマーで検知して、NMIを起動し、データのバックアップとプログラムの初期化などを行います。(図3(b))
ちなみに、STM32F4シリーズのウォッチドッグタイマーは、NMIよりも優先順位の高い例外処理のリセットに割り当てられています。マイコンによってはウォッチドッグタイマーのオーバーフローをNMIに割り当てるかリセットに割り当てるかを選択できるものもあります。
*3)参考記事:Q&Aで学ぶマイコン講座(19):ウォッチドッグタイマーって何?
【2】NMIが外部端子に割り当てられていて、ユーザーが割り込み要因をハードウェアで選択できる場合
NMIを外部割り込みに割り当てて、端子から割り込み要因を入力するマイコンもあります。この場合、ユーザーがNMIの要因をハードウェアで決めることになります。一般的なマイコンもCortex-M4のNVICと同じような割り込みコントローラーを内蔵していて、端子からNMIの割り込み要因を入力する場合には、端子と割り込みコントローラーをつなげ、NMIの入力信号を割り込みコントローラーが処理する構成になります(図4)
使用例として、「タンパ検知」が挙げられます。マイコンの機能に「タンパ検知」がない場合、NMIを使うことができます。「タンパ検知」もシステムにとって致命的な障害ですので、他のエラーや割り込みよりも優先して受け付けられなければなりません。また、ソフトの暴走によってマスクされてしまうことを防げるため、NMIは「タンパ検知」の割り込みに適しています。
*4)参考記事:Q&Aで学ぶマイコン講座(43):「タンパ検知」「耐タンパ」とは?
(a)NMI端子が専用端子の場合
NMIの性質上、一般的にNMI端子は専用端子に割り当てられており、他の機能と兼用されていません(図4(a))
(b)NMI端子が汎用IOとの兼用端子の場合
マイコンによっては端子の使用範囲を広くするために、NMI端子が汎用IOとの兼用端子になっている場合があり、ユーザーがNMI端子に設定しているつもりでも、何かの間違いで汎用IO端子になってしまうことがあります。この場合、NMIを受け付けない状態になり、致命的な障害を検知することができないため、必ず端子がNMIになっていることを確認してください。
また、端子の初期値の機能もチェックする必要があります。初期値が汎用IOになっている場合は、ソフトウェアでNMIに切り替える必要があります。この場合、端子機能が切り替わるまではNMIは使えません。
Copyright © ITmedia, Inc. All Rights Reserved.