STM32の割り込み解析

割り込み定義とその実行処理

割り込みとは、メインプログラムの実行中に、特定の割り込み要因(割り込み要因)が発生し、CPUが実行中のプログラムを中断し、割り込みプログラムの処理に移り、処理が完了すると元に戻ることをいいます。吊り下げられた状態で走り続けます。
STM32 マイクロコントローラには、68 個のマスカブル割り込みチャネル (EXTI、TIM、ADC、USART、SPI、I2C、RTC、その他のペリフェラルを含む) と 16 個のプログラム可能な優先順位レベル (4 ビット割り込み優先順位を使用) があります。
ここで「マスカブル割り込み」と「優先レベル」という 2 つの言葉について説明する必要があります。
割り込みはマスクの可否により、ノンマスカブル割り込みと周波数遮断割り込みの2つに分類されます。ノンマスカブル割り込みとは、割り込みが発生すると CPU が無条件に応答しなければならないことを意味し、マスカブル割り込みとは、割り込みが発生した後、CPU が割り込みに応答するかどうかを選択できることを意味します。
優先レベルとは、CPU が割り込みに応答する順序を指します。2 つの割り込みが同時にトリガされた場合、CPU は優先レベルに従って順番に割り込みに応答します。最初に高い優先レベルに応答し、次に高い優先レベルに応答します。低い優先レベルに応答します。ネストされたプロセスが存在する可能性があります 割り込みプログラムの実行中に、より優先度の高い新しい割り込み要因が割り込みを申請します CPU は現在の割り込みプログラムを再度一時停止し、新しい割り込みプログラムの処理に移ります 処理が完了すると、CPU は新しい割り込みプログラムの処理を開始します順次進み、戻ります。割り込み実行処理は以下のとおりです。
ここに画像の説明を挿入

ネストされたベクトル割り込みコントローラー NVIC

STM32 マイクロコントローラの割り込み応答と割り込み優先順位の設定は NVIC によって制御されます。NVIC は割り込みのネストをサポートしています。つまり、優先順位の高い割り込みが優先順位の低い割り込みを優先して、優先順位の低い割り込みがハングする可能性があります。サスペンドとは一時停止を指します。進行中の割り込みは、より高いレベルまたは同等のレベルの割り込みに切り替えられます。例えば、割り込み実行処理図の右側の最初の割り込みが保留されます。
ここに画像の説明を挿入
NVIC の構造は図に示されており、すべての割り込みは CPU に到達する前に NVIC によって処理され、CPU がどの割り込みに最初に応答するかは NVIC によって決まります。したがって、プログラムの書き込み中に割り込みを使用する場合は、NVIC を設定する必要があります。NVIC を使用して割り込みを均一に管理 各割り込みチャネルには 16 のプログラム可能な優先レベルがあり、グループ化してプリエンプション優先順位と応答優先順位をさらに設定できます。
ここに画像の説明を挿入
図に示すように、STM32 には 5 つの割り込み優先順位の割り当て方法があります。グループ化方法が異なると、プリエンプション優先度と応答優先度の桁と値の範囲が異なります。プリエンプション優先度が高いものはネストに割り込むことができ、応答優先度が高いものは最初にキューに入れられ、プリエンプション優先度と応答優先度が同じものは割り込み番号に従ってキューに入れられます。簡単に言うと、高いプリエンプション優先度を持つものは、低いプリエンプション優先度の割り込み応答に割り込むことができ、同じプリエンプション優先度の下にある応答優先度はその優先度に従ってキューに入れられますが、進行中の割り込みは割り込むことができません。

外部割り込み/イベント コントローラー (EXTI)

EXTI は外部割り込み/イベント コントローラであり、指定された GPIO ポートのレベル信号を監視できます。指定された GPIO ポートのレベルが変化すると、EXTI は直ちに割り込みアプリケーションを NVIC に送信し、CPU メイン プログラムを中断できます。 NVIC が と判断した後、CPU は EXTI に対応する割り込みプログラムを実行します。
サポートされているトリガー方法: 立ち上がりエッジ、立ち下がりエッジ、ダブルエッジ、ソフトウェア トリガー。
サポートされる GPIO ポート: すべての GPIO ポート、ただし同じピンで同時に割り込みをトリガーすることはできません (対応する割り込みラインが同じであるため) トリガー応答モード :
割り込み応答/イベント応答
ここに画像の説明を挿入
EXTI はすべての I/O トリガー割り込みをサポートしますが、I/O ○ ポート数が多く、各 I/O ポートが割り込み線を使用すると割り込み線の数が多くなるため、STM32 では管理を容易にするため、I/O ポートと割り込み線のマッピング方式を採用し、割り込み線の数を減らしています。中断行: 中断行の数。
上に示すように、PA0、PB0、PC0...PG0 はすべて EXTI0 割り込みラインにマッピングされ、PA1、PB1、PC1...PG1 はすべて EXTI1 割り込みラインにマッピングされ、後続のイメージは EXTI15 に推定されます。したがって、1 つの割り込みラインは 1 つのポートにのみマップできるため、同じピンで同時に割り込みをトリガーすることはできません。たとえば、PA0 が EXTI0 の外部割り込み入力として使用されている場合、PB0、PC0...PG0 は割り込みをトリガーできません。 EXTI0の外部割り込み入力として使用します。ただし、プログラミングの際、 EXTI0~EXTI4 割り込みラインには独自の独立した入力チャネルがありますが、EXTI5~EXTI15 割り込みラインには独自の独立したチャネルがなく、EXTI5~EXTI9 のチャネルは EXTI9_5、EXTI10~にマージされることに注意してください。EXTI15 チャネルは EXTI15_10 にマージされており、フラグ ビットによってどの割り込みラインが割り込まれているかを区別する必要があります。
ここに画像の説明を挿入
EXTI 構造のブロック図を図に示します。外部割り込み信号は右下から入力ラインを通ってエッジ検出回路に到達し、エッジ検出回路は立ち上がりエッジトリガ選択レジスタと立ち下がりエッジトリガ選択レジスタで制御されます。これら 2 つのレジスタのビット、立ち上がりエッジ トリガー、立ち下がりエッジ トリガー、およびダブル エッジ トリガー。後エッジ検出回路は OR ゲートであり、OR ゲートの 2 つの入力はソフトウェア割り込みイベント レジスタ信号とエッジ検出回路信号、つまりEXTI トリガ モードのエッジ トリガとイベント トリガです。OR ゲート以降は 2 つの経路に分かれており、リクエスト保留レジスタを上に入力すると割り込み応答に入り、AND ゲートに直接入力するとイベント応答に入ります。この 2 つの経路が割り込み応答です。EXTI トリガ応答モードでのイベント応答。どの応答モードに入るかは、リクエスト保留レジスタとイベントマスクレジスタの応答ビットによって制御されます。割り込み応答の場合、信号は OR ゲートを通って出力され、リクエスト一時停止レジスタと割り込みマスク レジスタの対応するビットを通過して NVIC 割り込みコントローラに到達し、NVIC によって処理されます。処理のために CPU に渡され、パルス ジェネレータはイベント マスク レジスタの対応するビット設定が有効になった後にアクティブになり、パルス ジェネレータはパルスを生成して、対応する内蔵ペリフェラルが動作できるようにします。
ブロック図の上部の APB バスはペリフェラル インターフェイスに接続され、さらにペリフェラル インターフェイスは各レジスタに接続されます。つまり、CPU は APB バスを介して各レジスタにアクセスし、レジスタ上で対応する操作を実行できます。
EXTI の構造ブロック図から、EXTI のトリガー モードとトリガー応答がわかります。
注: 外部割り込みを使用する場合は、AFIO クロックを有効にする必要があります。AFIO クロックは、EXTI 外部割り込みに GPIO を使用する場合、またはリマップ機能を使用する場合にのみ使用されます。

要約する

割り込みは STM32 の重要なアプリケーションであり、割り込みのプロセスと設定方法を明確にすることは、その後のシステム学習に役立ちます。
ここに画像の説明を挿入
STM32 の割り込み処理は大まかに図に示すと、各割り込み要因が NVIC に割り込み信号を送って処理し、その後 CPU に送り、CPU が各割り込み要因に応答します。

おすすめ

転載: blog.csdn.net/Tao_9/article/details/129927831