STM32WB - NVIC
ネスト化されたベクタ割込みコントローラ

1.0 版

STM32 ネスト化されたベクタ割込みコントローラ（NVIC）のプレゼンテーションにようこそ。このコントローラの機能についてご紹介します。

1

概要

2

• NVIC は Cortex®-M4 CPU に内蔵：
• 63 本のマスカブル割込みチャネル• 16 段階のプログラム可能な優先順位レベル• 遅延時間の少ない例外および割込み処理• 電源管理制御

アプリケーション側の利点•

動的制御可能な優先順位レベルに対応•

割込みリクエストへの高速応答•再配置可能なベクタテーブル

割込みコントローラは Cortex-M4 CPU に属しており、プロセッサコアとの密接なカップリングを可能とします。
主な機能：• 63 種類の割込みソース• 16 段階のプログラム可能な優先順位レベル• 遅延時間の少ない例外および割込み処理• 自動ネスティング• 電源管理制御
アプリケーションは、割込みレベルの動的優先順位付け、低遅延応答によるリクエストへの高速応答、テールチェインに加えて、ベクタテーブルの再配置による便益を受けます。

2

主な機能3• 割込みリクエストへの高速応答• NVIC の割込みリクエストエントリ数は 63 です。ただし、STM32WB には 63 種類を超える割込みが実装されています。
• 割込みイベントの数が 63 を超過しているため、一部の NVIC ベクタは複数の割込みに接続されています。
• ユーザソフトウェアは、ペリフェラル割込みレジスタを読み出すことで、割込みをリクエストしているペリフェラルを識別可能です。

• 割込みの動的な再優先度付け• 割込みベクタテーブルの動的再配置

ネスト化されたベクタ割込みコントローラによって、割込みリクエストへの高速応答が可能となりますので、アプリケーションは受信イベントに迅速に対応できます。
STM32WB には 63 種類を超える割込みが実装されています。一部の割込みは、同一のネスト化されたベクタ割込みコントローラに集約されています。ペリフェラル割込みレジスタを読み出すことで、ソフトウェアは割込みをリクエストしたペリフェラルを識別できます。
各割込みリクエストに割り当てられた優先順位はプログラム可能であり、動的な変更が可能です。
また、割込みベクタテーブルは再配置可能であり、システム設計者は、割込みサービスルーチンの配置をアプリケーションのメモリレイアウトに適応させることができます。たとえば、ベクタテーブルは RAM に再配置できます。

3優先順位処理

4• Cortex-M CPU の例外管理では、値が小さいほど優先順位は高くなります。

例外ソース
リセット
ノンマスカブル割込み（NMI）
ハードフォルト

優先順位レベル-3-2-1

その他の例外：- ペリフェラル割込み- ソフトウェア例外

0～15 のプログラム可能な値

ハードコードされた固定優
先順位

ソフトウェアは、それぞれの割り込みはもとより、リセットを除くすべての例外ソース、ノンマスカブル割込み、ハードフォルトに対する優先順位レベルの割当てを管理します。
スーパーバイザコール命令の実行と同時にペリフェラル割込
みがリクエストされた場合には必ず、これらのハードウェアとソフトウェアの例外の相対的優先順位によって、どれが最初に処理されるかが決定されます。
STM32WB マイクロコントローラでは、ノンマスカブル割込み（NMI）は、SRAM2 パリティエラー、Flash ダブル ECC エラー、クロック障害のいずれかの原因により発生します。
63 種類のペリフェラル割込みリクエストのいずれかの優先順
位は、Cortex-M4 ネスト化されたベクタ割込みコントローラレジスタの中にある専用の優先順位フィールドにプログラム可能です。

4

テールチェインとネスティング

5• テールチェインとネスティングのメカニズムを説明するため、以下のペリフェラル割り込みソースについて検討しましょう。
割込みソース

優先順位レベル

IRQ_A

0

IRQ_B

1

• プリエンプションと割込みネスティング
コンテキスト格納

コンテキスト復元

IRQ_A
IRQ_B
メイン

IRQ_B
メイン

IRQ_A
IRQ_B

ネスト化されたベクタ割込みコントローラによって、例外の効率的処理のためのいくつかの機能が提供されます。
割込みの処理中にそれよりも優先順位の高い新規のリクエストが到着した場合、新しい例外が現在の例外をプリエンプトできます。この処理は、ネスト化された例外処理と呼ばれます。優先順位が高い方の例外が処理された後に、その前の例外ハンドラが実行を再開します。
Cortex-M4 の中に存在するマイクロコードによって、自動的にコンテキストが現在のスタックにプッシュされ、割込みからの復帰時に復元されます。

5

例外の開始と復帰

6• テールチェイン• 例外ハンドラの完了時に割込みがペンディングされている場合、コンテキスト格納がスキップされて、前のハンドラが完了すると、制御は新しい例外ハンドラに直ちに転送されます。

コンテキスト格納

コンテキスト復元

IRQ_A
メイン

IRQ_B
メイン

IRQ_A

IRQ_B

ある割込みハンドラの実行中に優先順位がそれ以下か同一の割込みリクエストが立つと、そのリクエストはペンディング扱いとなります。現在の割込みハンドラが終了した時点で、割込みの遅延低減のために、コンテキストの保存と復元のプロセスはスキップされて、制御は新しい例外ハンドラに直接転送されます。
したがって、連続した優先順位が低い（優先順位値が大きい）割込みは、数クロックサイクルという非常に短い遅延で連鎖します。

6

例外の開始と復帰

7• 後着• 例外の状態を保存している途中で、それより優先順位の高い例外が発生した場合、プロセッサは優先順位の高い例外の処理に直ちに切り替えます。
コンテキスト格納

IRQ_A
メイン

IRQ_B
メイン

IRQ_A

• 復帰

IRQ_B

• 例外ハンドラが完了し、それ以外の例外がペンディングになっていない場合、プロセッサはスタックをポップして、割込み発生前のプログラム状態を復元します。

割込みが到着すると、プロセッサは、割込みハンドラを実行する前にプログラムをまず保存します。優先順位がより高い割込みが到着したときに、プロセッサがコンテキスト保存処理を実行中であった場合、プロセッサは、プログラムコンテキス
トの保存が完了すると、優先順位の高い方の割込みの処理に直接切り替えます。その後、IRQ_B 割込みサービスルーチンを実行する前に、テールチェインが用いられます。
すべての例外ハンドラの実行が終わって、それ以外の例外がペンディングになっていない場合、プロセッサは、前のコンテキストをスタックから復元して、通常のアプリケーション実行に復帰します。

7

NVIC のヒントとコツ

8• ソフトウェアが正しく整列されたレジスタアクセスを使用するようにします• 割込みは、無効であってもペンディング状態となることができます• 割込みを無効にすると、プロセッサが割込みを取得しなくなるだけです。

• ベクタテーブルを再配置する前に、すべての有効な割込みに対して新しいエントリが正しく設定されていることを確認します• この対象には、フォールトハンドラと NMI が含まれます。
• ベクタテーブルを再配置するために VTOR レジスタをプログラムする前に、これを行います。

ネスト化されたベクタ割込みコントローラレジスタを評価する
際には、自分のコードが正しく整列されたレジスタアクセスを使用していることを確認します。整列されていないアクセスには、ネスト化されたベクタ割込みコントローラレジスタも、Cortex-M4 の中にあるすべてのメモリマップされたレジスタも対応していません。
転送元がサービスを要求した場合、割込みがペンディングとなります。割込みを無効にすると、プロセッサが割込みを取得しなくなるだけです。割込みベクタを有効とする前に、関係する割り込みフラグがクリアされていることを確認します。
VTOR レジスタを用いてベクタテーブルを再配置する前に、フォールトハンドラ、ノンマスカブル割込み、すべての有効な割込みが新しい位置で正しく設定されていることを確認します。

8デュアルコア割込み共有

9• 一部のペリフェラル割込みは、ただ 1 つの Cortex-M4 NVIC 割込みベクタにマッピングされています• 個別の割込み制御を可能とするため、これらの割込みは SYSCFG ブロックの中にプリマスキングを備えています• 影響を受けるペリフェラル：• GPIO、EXTI• TIM1、TIM17、TIM16• PVM1、PVM3、PVD

Cortex-M4 アプリケーションコアと Cortex-M0+ 無線コアが搭載されているデュアルコア STM32WB MCU では、ペリフェラル割込みは両方のコアに接続されています。 不要な割込みを防止するため、Cortex-M4 のネスト化されたベクタ割込みコントローラにマッピングされていて、複数のペリフェラル割込みソースがある割込みは、システム設定コントローラ（SYSCFG）の中で事前にマスク可能です。SYSCFG 割込
みマスクレジスタによって、必要な割込みソースのみがCortex-M4 のネスト化されたベクタ割込みコントローラに転送されることが保証されます。影響を受けるペリフェラルがリストアップされています。

9

関連ペリフェラル

10• タイマにリンクされた以下のペリフェラルに関するトレーニング教材を参照してください。
• SYSCFG• 他の処理に加えて、NVIC の共有割込みリクエスト信号に接続された割込みソースのプリマスキングを管理します。

• Cortex-M4• CPU は、ソフトウェア例外とハードウェア例外両方の処理に用いられる例外メカニズムを実装します。

ネスト化されたベクタ割込みコントローラは、SYSCFG モ
ジュールと Cortex-M4 CPU にリンクされています。関連する
プレゼンテーションを参照してください。

10

参照

11

• 詳細については、以下の関連資料を参照してください。
• PM0214 STM32F3、F4、L4、L4+ シリーズプログラミングマニュアル• STM32WB リファレンスマニュアル

詳細については、STM32F3、F4、L4、L4+ シリーズのプログ
ラミングマニュアルと、STM32WB のリファレンスマニュアルも参照してください。

11