NVICについて
NVICは、ネストされたベクタ割り込みコントローラであり、密カーネルと結合され、チップ全体に関連する機能は、内周コアであるコントロールを中断します。STM32 NVIC NVICは皮質-M4のサブセットであるようしかし、様々なチップ製造業者は、カット、不要な部分を除去し、チップの設計においてNVIC内部のCortex-M4コアを有します。
NVICレジスタの概要
core_cm4.h:ファームウェアライブラリのヘッダファイルからコード17 NVIC構造が定義されています、
typedef struct {
__IO uint32_t ISER[8]; // 中断使能寄存器
uint32_t RESERVED0[24];
__IO uint32_t ICER[8]; // 中断清除寄存器
uint32_t RSERVED1[24];
__IO uint32_t ISPR[8]; // 中断使能悬起寄存器
uint32_t RESERVED2[24];
__IO uint32_t ICPR[8]; // 中断清除悬起寄存器
uint32_t RESERVED3[24];
__IO uint32_t IABR[8]; // 中断有效位寄存器
uint32_t RESERVED4[56];
__IO uint8_t IP[240]; // 中断优先级寄存器(8Bit wide)
uint32_t RESERVED5[644];
__O uint32_t STIR; // 软件触发中断寄存器
} NVIC_Type;
我々は一般的にのみISER、ICERとIPすることにより、これらの3つのレジスタを中断した構成で、ISERが割り込みを有効にするには、割り込みを無効にするICER、IPは、割り込み優先順位を設定するために使用されます
NVIC割り込みの設定、ファームウェアのライブラリ
NVICライブラリ関数 | 説明 |
---|---|
空NVIC_EnableIRQ(IRQn_TypeでIRQn) | 割り込みを有効にします |
空NVIC_DisableIRQ(IRQn_TypeでIRQn) | 割り込みを無効にします |
空NVIC_SetPendingIRQ(IRQn_TypeでIRQn) | ビットからぶら下がって割り込みを設定 |
空NVIC_ClearPendingIRQ(IRQn_TypeでIRQn) | ビットからぶら下がって割り込みをクリア |
uint32_t NVIC_GetPendingIRQ(IRQn_TypeでIRQn) | 割り込み番号からぶら下がって取得します |
空NVIC_SetPriority(IRQn_Type IRQnと、のuint32_t優先) | 割り込み優先順位を設定します |
uint32_t NVIC_GetPriority(IRQn_TypeでIRQn) | 割り込み優先順位を取得します。 |
空NVIC_SystemReset(無効) | システムリセット |
優先度定義
NVIC内の専用レジスタを有している:割り込み優先順位は、(F429で、X = 0 ... 90)の優先順位を設定するには、外部割り込みのIPR幅は8ビット、原理的には、各設定の優先順位外部割り込みNVIC_IPRxレジスタ0から255までのレベル値が小さいほど、優先順位が高いです。次のようにしかしCM4チップの大半は、実際には高4ビットを使用して、F429で、その優先順位をサポート減らす設計を合理化されます。
この4ビットの発現のための優先順位は、プリエンプションの優先度とサブ優先度をグループ化されています。同じ先取り優先ならば、高い優先度は、実装するための優先順位の低い先制優先順位を先取りしますつかむために、複数の割り込み応答がある場合、それはより多くの子の優先順位です。先取り優先順位と子が同じ優先順位を持っている場合は、より彼らのハードウェア割り込み番号、少ない数、高い優先順位です。
優先度のグループ化
[10:8]カーネルと周辺SCBレジスタリセット制御PRIGROUP AIRCRのアプリケーションによる割り込み優先パケット次のようにビットが決定は、F429は、5つのグループに分け:=マスタ優先先取り優先順位。
ライブラリ関数NVIC_PriorityGroupConfig()のライブラリファイルmisc.cとmisc.hで関連NVIC割り込み関連のライブラリ関数を実装を呼び出すことができ、優先度グループを設定します。
割り込みプログラミング
プログラムは、一般的に3つの主なポイントを持っている場合、それぞれの構成で中断:
各周辺割り込みの特定に関連する1、割り込みが有効になっている周辺機器は、イネーブルビット。シリアルポート割り込みが送信、受信完了割込みが完了したような、2つの割り込み制御レジスタによって関連するシリアルポート割り込みイネーブル・ビット。
図2は、割り込み優先パケットを配置NVIC_InitTypeDef構造の初期化、およびサブ組優先先取り優先順位は、割り込み要求を可能にしました。
初期化コード構造19 NVIC
typedef struct {
uint8_t NVIC_IRQChannel; // 中断源
uint8_t NVIC_IRQChannelPreemptionPriority; // 抢占优先级
uint8_t NVIC_IRQChannelSubPriority; // 子优先级
FunctionalState NVIC_IRQChannelCmd; // 中断使能或者失能
} NVIC_InitTypeDef;
関係する初期構造NVICたち1が説明メンバー:
NVIC_IROChannel 1):割り込みソースを設定するために使用され、異なる割り込み源は同じではなく、間違ったプログラムが文句を言わない場合であっても、間違っていることができない、唯一の不要な中断につながることができます。コンフィギュレーション構造の特定のメンバーが内部stm32f4xx.hヘッダをIRQn_Typeを参照して定義され、この構造は、割り込み要因のすべてを含みます。
割り込みソースコード構造20 IRQn_Type
typedef enum IRQn {
//Cortex-M4 处理器异常编号
NonMaskableInt_IRQn = -14,
MemoryManagement_IRQn = -12,
BusFault_IRQn = -11,
UsageFault_IRQn = -10,
SVCall_IRQn = -5,
DebugMonitor_IRQn = -4,
PendSV_IRQn = -2,
SysTick_IRQn = -1,
//STM32 外部中断编号
WWDG_IRQn = 0,
PVD_IRQn = 1,
TAMP_STAMP_IRQn = 2,
// 限于篇幅,中间部分代码省略,具体的可查看库文件 stm32f4xx.h
SPI4_IRQn = 84,
SPI5_IRQn = 85,
SPI6_IRQn = 86,
SAI1_IRQn = 87,
LTDC_IRQn = 88,
LTDC_ER_IRQn = 89,
DMA2D_IRQn = 90
} IRQn_Type;
2)NVIC_IRQChannelPreemptionPriority:先取り優先順位、優先パケットに応じて、特に表16優先パケットの真理値表を参照して、決定される特定の値。
3)NVIC_IRQChannelSubPriority:子の優先順位、特定の値は、表16、優先度パケットの真理値表を特に参照して、優先パケットに応じて決定されます。
4)NVIC_IRQChannelCmd:)DISABLE(有効(ENABLE)または無効割り込み。そして、操作は、これら二つのレジスタNVIC_ISER NVIC_ICERです。
3、プログラム割り込みサービスルーチン
当社で起動ファイルstartup_stm32f429_439xx.sでは、各割込みサービスルーチンを中断するために事前に書かれたが、ちょうど割り込みベクタテーブルを初期化するために、これらの機能は、空の割り込みです。実際の割り込みサービスルーチンは、当社の統一stm32f4xx_it.cこのライブラリファイルに割り込みサービスルーチンを記述し、再書き込みするために私たちを必要とします。
割り込みサービスルーチンの関数名は、プリセット起動ファイルが続かなければならないように、間違っている場合、システムは、割り込みベクタテーブルエントリ割り込みサービス機能で見つける空の関数内で事前に書かれた文書の先頭に直接ジャンプすることはできませんその中の無限ループ、中断を達成することはできません。