RTOSにおけるCortex-M割り込みの適用と注意事項

+スターの公開アカウントをフォローして、エキサイティングなコンテンツを見逃さないようにしましょう

e4385337b3b191282f99120784cc5aba.gif

著者 | 黃強

WeChat パブリック アカウント | 埋め込み列

CPU が割り込みをしなかったらどうなるか想像できますか?

これは単なる while ループであり、現在の RTOS はもちろん、タイムリーなタスクの処理を中断することはできません (RTOS には割り込みの実装も必要です)。

RTOSにおけるCortex-M割り込みの応用例と注意点についてお話します。

Cortex-Mプロセッサについて

ここではまず Cortex-M プロセッサに関する内容を紹介しますが、この記事では Cortex-M3 をコアとする STM32 と合わせて説明します。

STM32 は、STM32F1 データ Cortex-M3、STM32F7 データ Cortex-M7 など、ARM の Cortex-M シリーズ プロセッサに属します

088839f87b0f4f7c87e32bf0238ec0db.jpeg

ARM プロセッサの種類については、以前に共有した記事「Cortex-M から Cortex-A までの ARM プロセッサを理解する」を参照してください。

この記事では主にCortex-M3のSTM32F1シリーズプロセッサを例に、割り込み制御の関連内容を説明します。他の Cortex-M シリーズ、または他の STM32 シリーズにも、割り込みに関する同様の内容があります。

Cortex-M3 は STM32F1 のコアにすぎません。一方、STM32F1 は、Cortex-M3 をベースにいくつかのペリフェラル (USART、AD など) を追加したチップです。

Cortex-M 割り込み制御

NVIC : Nested Vectored Interrupt Controller、つまりネストされたベクトル割り込みコントローラー。

STM32 の NVIC についてはよく知っているため、プログラミングの際には割り込みを使用して NVIC を設定します。

STM32F1のNVIC はCortex-M3 の一部であり、STM32 によって追加されたペリフェラルではありません。

NVIC ベクトル割り込みコントローラーは Cortex-M3 の切り離せない部分であり、CM3 コアのロジックと密接に結合しており、一部は統合されています。

したがって、NVIC 関連のレジスタは Cortex-M マニュアルに記載されていますSTM32 の割り込み制御について話すには、Cortex-M3 の NVIC から始めなければなりません。

1. 割り込み入力ベクタテーブル

Cortex-M3 の NVIC は、STM32 の xxxIRQ などの 1 ~ 240 の割り込み入力をサポートしています (割り込みベクトル テーブル)。特定の値は、チップの設計時にチップ メーカーによって決定されます。

たとえば、STM32F1 の割り込みおよび例外ベクタ テーブルは次のとおりです。

889fe6bf01209af843c911ce63b3fe91.jpeg

c9ca13b84c9026316d42c89ac267aad4.jpeg

2. 割り込みと例外の違い

割り込みとは何か知らない初心者も多いのではないでしょうか?例外とは何ですか? 割り込みと例外を総称して「割り込み」と呼ぶ人もいます。

割り込みと例外は実際には異なり、関連しています。私たちがよく話題にする割り込みには、実際には例外が含まれます。例外は、MCU またはプログラムが何らかの異常な状態にあると理解できます。

上のスケールで見ると、背景が灰色の上部が異常、背景が白い下部が障害となっています

例外は Cortex-M3 コアの一部であり、割り込みは MCU (STM32) の一部です (製造元によって決定されます)。

それで:

1. Cortex-M3 コアの観点から見ると、STM32 の USART などの割り込みは外部割り込みです。

2. STM32 の観点からは、EXTI 外部ピン割り込みは割り込みです。

3.優先順位

Cortex-M3 の場合、各外部割り込みには対応する優先順位レジスタがあります。

各レジスタは 8 ビットを占有しますが、使用できるのは上位 3 ビットのみで、上位 4 ビットは STM32F1 で使用されます。(つまり、16の優先順位に分けることができます)

優先度は、プリエンプション優先度とサブ (応答) 優先度の高と低の 2 つのセグメントに分けることができます

b3385145fa57c50d3c5c89e514ed4e78.jpeg

ヒント:

1. STM32 割り込み優先順位の値が小さいほど、優先順位は高くなります

2.優先順位のグループ化: Cortex-M3 および M4 にはグループ化機能があります。つまり、以下に示すように、プリエンプション優先順位と応答優先順位があります。

6f1503659fee845cfd4efc0c817bd4a8.jpeg

Cortex-M0 など、一部のコアにはこれがありません。

3.参考資料

「Cortex-M3 決定版ガイド」を参照してください。

STM32 カーネル プログラミング マニュアル:

http://www.st.com/stonline/products/literature/pm/15491.pdf

RTOS 割り込み優先順位の設定

このセクションでは、FreeRTOSConfig.h 構成ファイルにある FreeRTOS 最大割り込み優先順位構成の問題について説明します。

configMAX_SYSCALL_INTERRUPT_PRIORITY

0e062df57698138cc1bcb3f98e25026d.jpeg

設定値の意味を知っていますか? これは、NVIC 関連のコンテンツと併せて理解する必要があります。

前述したように、STM32 では NVIC 優先度の上位 4 ビットが使用され、設定時に上位 4 ビットを設定する必要があります (下位 4 ビットは使用されません)。

5e94c2585018982ffd31fd81c192f7ee.jpeg

上の図を見て、わかりますか? 上の値は 95 ですが、優先度 5 を表しています。

この設定値の意味は、大まかに言うと、コードで使用される割り込み (USART1_IRQn など)の優先順位が、実現可能であるために 5 より大きい必要があることを意味します。

以下の設定のように、優先度が 2 の場合は機能しません (もちろん、グループ化にはグループ化の問題も伴います)。

23c4520a67dfb8689c671879ac123089.jpeg

FreeRTOS の最大優先度構成については、以下を参照してください。

https://www.freertos.org/RTOS-Cortex-M3-M4.html

最後に、もう 1 つの注意点を示します。

FreeRTOS のタスク優先度は値が大きいほど優先度が高く、CM3 割り込み優先度とは区別する必要があります。

------------ 終了 ------------

4b6ce888fb12e413477dbdbf7c14caba.gif

●コラム「組み込みツール

●コラム「組込み開発」

●コラム「Keilチュートリアル」

●埋め込み列選択チュートリアル

公式アカウントをフォローして「グループを追加」と返信するとルールに従って技術交流グループに参加でき、「1024」と返信するとさらにコンテンツが閲覧できます。

513fa1d209566b982039b3d52da6327c.jpeg

58fd2dae4096c76b79a721d6e795c770.png

さらに共有を表示するには、元のテキストを読む」をクリックしてください。

おすすめ

転載: blog.csdn.net/ybhuangfugui/article/details/133285299