例外のタイプ

例外のタイプ

例外のタイプには、リセット、割り込み、フォールトなどがあります。例外処理は突如として発生しますので、命令の実行に対し非同期で起こります。しかし、フォールトだけは、命令の実行によってエラー条件が発生したことによる例外ですので、原因となった命令に同期して発生することが基本です。しかし、バスのアクセスエラーなどのハードウエアに起因するフォールト等は命令とは非同期で発生することもあります。下表に例外の種類を示します。

優先順位

下表で上に行けば行くほど優先順位が高くなります。最も高いのはリセットです。Cortex-M3がどんな状態でもリセットがかかれば、リセットベクタに示された処理を行います。リセットの優先順位は-3になっています。ここで、お気付きになったと思いますが、優先順は0が最も高いのではなく-3が最も高い設定になっています。次がNMIで-2、ハードフォールトが-1で、メモリ管理が0になります。

「NVICレジスタ(第17回参照)」の説明の際に、例外処理の優先順位をこの数字で表します。優先順を0に上げることのできるレジスタがありますが、最高優先順位になるわけではありませんので、勘違いなさらないようにお願いします。表の中で、「優先順位の種類」という欄があります。ここで、「固定」となっている例外処理は、優先順を変更することができませんが、「設定可能」となっている例外処理は、レジスタによって変更することができます。NVICの主な機能(第13回参照)の②で述べた割り込みの優先度の変更が、これにあたります。

主な例外処理

No1~15はCortex-M3に起因する例外処理です。どういう例外処理かは表中の内容欄に記載してあります。No16~255はCortex-M3から見ると外部例外です。すなわちマイコンの周辺機能、例えば、タイマーや通信機能(SP、I2C、UART等)、アナログ機能(DAC、ADC等)、等々の割り込み処理に割り当てられます。これらの例外は、搭載されている各々の周辺機能に対しマイコンベンダが割り当てることになります。

No. 例外の種類 優先順位 優先順位の種類 内容
1 リセット -3(Highest) 固定 リセット
2 NMI -2 固定 ノンマスカブル割り込み(マスクできない割り込みです)
3 ハード
フォールト
-1 固定 優先順位の関係、または他のハンドラが無効にされていて、実行できないときのデフォルト(すべて)のフォールト
4 メモリ管理 0 設定
可能
MPU違反(MPUの不整合)か不正な位置(アクセス違反や不一致)へのアクセス。
5 バスフォールト 1 設定
可能
AHBインターフェースのレシーバエラー。
プリフェッチフォールト、メモリアクセス フォールト、その他のアドレスやメモリ関連のフォールト。
6 用法フォールト 2 設定
可能
プログラムエラーによる例外。
例えば未定義命令の実行や不正な状態への遷移の試み。
7-10 予約 - -
11 SVCall
(スーパーバイザコール)
3 設定
可能
SVC命令によるシステムサービス呼び出し
12 デバッグ
モニター
4 設定
可能
ホールト中でないときのデバッグモニタ。
ブレイクポイント、ウォッチポイント、外部デバッグ
13 予約 - -
14 PendSV 5 設定
可能
システムサービスへの保留可能な要求
15 SYSTICK 6 設定
可能
システムタイマの報知
16 外部割り込み #0 7 設定
可能
外部割り込み #0
…… ………………… ………………… 設定
可能
…………………
255 外部割り込み #239 246 設定
可能
外部割り込み #239