この章では、NVIC(統合ネスト型ベクタ割り込みコントローラ)が持っている制御用レジスタを説明します。SysTick関係のレジスタもNVICレジスタに含まれますが、それらは「第20回:SysTick、電力管理」で詳しく説明します。
各レジスタの説明
割り込みイネーブルセットレジスタ
割り込みイネーブルセットレジスタは、「割り込みの許可」、「現在許可されている割り込みの判別」に使用します。各ビットが、32個の割り込みのうちの1つに対応し、対応するビットをセットすることで、割り込み許可を行います。
割り込みイネーブルクリアレジスタ
割り込みイネーブルクリアレジスタは、「割り込みの禁止」、「現在禁止されている割り込みの判別」に使用します。各ビットが、32個の割り込みのうちの1つに対応し、対応するビットをセットすることで、割り込みが禁止されます。
割り込み保留セットレジスタ
割り込み保留セットレジスタは、「割り込みの保留」、「現在保留されている割り込みの判別」に使用されます。各ビットが、32個の割り込みのうちの1つに対応し、対応するビットをセットすることで、割り込みが保留されます。
割り込み保留クリアレジスタ
割り込み保留クリアレジスタは、「保留中の割り込みのクリア」、「現在保留されている割り込みの判別」に使用されます。各ビットが、32個の割り込みのうちの1つに対応し、対応するビットをセットすることで、保留中の割り込みは非アクティブの状態になります。
アクティブビット レジスタ
アクティブビット レジスタを読み出すと、アクティブな割り込みを判別できます。レジスタの各フラグは、32個の割り込みのうちの1つと対応します。
割り込みコントローラタイプレジスタ
割り込みコントローラタイプレジスタを読むと、NVICがサポートしている割り込み線の数を知ることができます。
CPU IDベースレジスタ
CPU IDベースレジスタには「コアのID番号」、「コアのバージョン番号」と「コアの実装の詳細」が格納されています。
割り込み制御状態レジスタ
割り込み制御状態レジスタは「保留中のNMIのセット」、「保留中のSVCのセット・クリア」、「保留中のSysTickのセット・クリア」、「保留中の例外のチェック」、「最も優先度が高い保留中の例外のベクタ番号のチェック」、「アクティブな例外のベクタ番号のチェック」に使用します。
ベクタテーブル オフセットレジスタ
ベクタテーブル オフセットレジスタで、ベクタテーブルのオフセットを設定します。また、ベクタテーブルがRAMまたはコードメモリにあるかどうかをチェックできます。
アプリケーション割り込みおよびリセット制御レジスタ
アプリケーション割り込みおよびリセット制御レジスタは「データのエンディアン形式の判別」、「デバッグまたはハードウェア障害から復帰する際のアクティブな情報のクリア」、「システムリセット」、「優先度のグループ分けの変更」に使用します。
システム制御レジスタ
システム制御レジスタは、プロセッサの電力管理のために使用します。
構成制御レジスタ
構成制御レジスタは、「NMI、ハードフォールト、FAULTMASKのバスフォールト無視の許可」、「0による除算およびアンアラインドアクセスのトラップ」、「ソフトウェアトリガ例外レジスタへのユーザアクセスの許可」、「スレッドモードへのエントリ制御」に使用します。
システムハンドラ制御および状態レジスタ
システムハンドラ制御および状態レジスタは、「システムハンドラを許可または禁止」、「バスフォールト、メモリ管理フォールト、SVCの保留ステータスの判定」、「システムハンドラのアクティブステータスの判定」に使用します。
システムハンドラ優先度レジスタ
システムハンドラ優先度レジスタは、「メモリ管理」、「バスフォールト」、「用法フォールト」、「デバッグモニタ」、「SVC」、「SysTick」、「PendSV」のシステムハンドラの優先度付けに使用します。
構成可能フォールトステータス レジスタ
構成可能フォールトステータス レジスタは3つあります。
- メモリ管理フォールトステータス レジスタ
- バスフォールトステータス レジスタ
- 用法フォールトステータス レジスタ
これらには、ローカルフォールトに関する情報が格納されています。
デバッグフォールトステータス レジスタ
デバッグフォールトステータス レジスタを使って、「外部デバッグ要求」、「ベクタキャッチ」、「データウォッチポイント一致」、「BKPT命令の実行」、「HALT要求の内容」をモニタします。
ハードフォールトステータス レジスタ
ハードフォールトステータス レジスタは、ハードフォールトハンドラをアクティブにするイベントの制御に使用します。
メモリ管理フォールトアドレス レジスタ
メモリ管理フォールトアドレス レジスタは、メモリ管理フォールトの原因のアドレスが格納されます。
バスフォールトアドレス レジスタ
バスフォールトアドレス レジスタは、バスフォールトが発生したアドレスが格納されます。
補助フォールトステータス レジスタ
補助フォールトステータス レジスタは、追加のシステムフォールト情報の判定に使用します。
ソフトウェアトリガ割り込みレジスタ
ソフトウェアトリガ割り込みレジスタは、トリガを行う割り込みを保留します。
こちらも是非
“もっと見る” Cortex-M編
SysTick、電力管理
SysTick機能を有効にするには、SysTick制御およびステータスレジスタを使用します。このレジスタのENABLEビットを1にすると、カウンタは動作をはじめます。つまり、カウンタにリロード値がロードされてから、カウントダウンが開始されます。
メモリマップ
Cortex-M3のメモリマップには、一般的なマイコンのメモリマップと若干異なる特徴があります。一般的なマイコンでは、メモリ領域を変更できるものもあります。しかし、Cortex-M3のメモリマップは定義されたメモリマップになっており、アドレス領域のマッピングは固定です。
ベクタテーブル
Cortex-M3のベクタテーブルは0番地から始まります。一般的なマイコンは、ベクタテーブルの最小アドレス部(0番地)にはリセットベクタが割り当てられていますが、Cortex-M3ではメインスタック(SP_main)の初期値が割り当てられています。