03-注:LPC1788-NVIC

ネスト型ベクタ割り込みコントローラ(NVIC)

簡単な紹介

ネスト型ベクタ割り込みコントローラ(NVIC)CPUコアに近いある内部デバイスのCortex-M3プロセッサ、です
割り込み処理の最新の発生を効率よく得ることができるように、割り込みへの応答を完了するために一緒に結合され、割り込みレイテンシが低減されます。
NVICメモリは、外部割込み制御レジスタと制御論理を含むことに加えて、アクセスするようにレジスタにマッピングされ
NVICものSysTickタイマおよびデバッグ制御モジュールが含まれています。
LPC178x / 177xシリーズのCortex-M3プロセッサ41と、プログラム可能な割り込み優先割り込みベクタネスト32を支持します。
また、NVICはまた、マスク不可能割り込み(NMI)入力をサポートしています。
NVICのアクセスアドレスが0xE000 E000で、すべてのNVIC割り込み制御/ステータス・レジスタは、唯一の下で特権ことができます
アクセス。ソフトウェア割り込みレジスタは、ユーザレベルでのソフトウェア割り込みを生成するためにアクセスすることができますトリガ - しかし、一つの例外があります。全部で
押してもOFF制御/ステータスワードレジスタ/ハーフワード/バイトアクセスモードでは、唯一の特殊機能によってMRS、MSRを登録します
アクセスするには、またはCPS命令。

プロパティ

次のようにLPC178x / 177xシリーズNVICのCortex-M3プロセッサ・モジュール特性は次のとおりです。
ネスト型ベクタ割り込みコントローラは、ARMのCortex-M3は、一体の部材です。
密接に低レイテンシの割り込みをサポートしているカーネルの割り込みコントローラとリンク。
システム異常周辺割り込みを制御することができます。
NVICのLPC178x / 177xは、41の割り込みベクタをサポートしています。
32プログラマブル割り込み優先度を、優先度ハードウェア・シールドを有します。
ベクタテーブルの繰り返し可能な位置決めを。
マスク不可能割り込み。
ソフトウェア割り込み機能。

割り込み要因

表4.61リストは、各周辺割り込み要因に対応します。各周辺装置は、1つ以上に接続された複数のラインを有していてもよいです
NVICは、割り込み要因複数の共通の割込みラインを共有してもよいです。
さらに、NVICはまた、マスク不可能割り込み(NMI)を処理します。外部NMIからの操作信号を作るために、
NMIは、機能的に関連するデバイスピン(P2 [10] / EINT0n / NMI)に接続されなければなりません。場合は、ロジックへのアクセスピン
1、NMI動作します。

レジスタの説明

割り込み信号はNVIC、送信、周辺割り込みと例外システムの2つのタイプに分けることができます
メインメモリは設定/クリアレジスタを一時停止し、グループ制御レジスタ、ステータス・レジスタを備えて/無効化レジスタ、優先順位を有効にします
レジスタ、ステータスレジスタ、およびアクティブな特殊機能レジスタを設定します。

NVIC内の各割り込みは、関連するレジスタの数を持っています:
有効にして、登録無効。
レジスタを設定し、クリア一時停止します。
優先レジスタ。
アクティブ・レジスタを。
また、以下のレジスタは、割り込み処理に何らかの影響を持っています:
例外マスクレジスタ(PRIMASK、FAULTMASKとBASEPRI)
ベクタテーブルオフセットレジスタ;
ソフトウェアトリガ割り込みレジスタ。
パケットの優先度レジスタ。
有効または無効に割り込み
Cortex-M3別個のレジスタを使用してコントロールを有効または無効に割り込みます。ISERに送信する割り込みを有効にした場合
登録は「1」を書き込むに相当し、割り込み禁止場合、ICERを登録し、対応するビットに「1」を記述する必要があります。ISER / ICERに送ります
「0」は無効である書き込みに登録します。
ISER / ICERレジスタに32ビットの読み取り/書き込みアクセスであり、割り込み制御の各ビットは、有効/無効。ビットの説明を登録
表4.62で説明したように。LPC178x / 177xシリーズのCortex-M3チップは、あなただけを使用する必要があり、41のネストされた割り込みをサポート
ISER0 / ICER0とISER1 / ICER1レジスタの2組。
第16の異常数は、システムの異常に割り当てられているので、したがって、初期の異常周辺割り込み番号が16です。
動作例
タイマ0と外部割り込み0は有効と無効の操作を中断します。ID TIMER0_IRQn = 1割り込みタイマ0、
外部割り込み0割り込みID EINT0_IRQnは18を=。
NVIC->ISER0 = (1 << ((uint32_t)(TIMER0_IRQn) & 0x1F)); /*  使能 Timer0 中断 */
NVIC->ISER0 = (1 << ((uint32_t)(EINT0_IRQn) & 0x1F));  /*  使能 EINT0 中断 */
NVIC->ICER0 = (1 << ((uint32_t)(TIMER0_IRQn) & 0x1F)); /*  除能 TIMER0 中断 */
NVIC->ICER0 = (1 << ((uint32_t)(EINT0_IRQn) & 0x1F));  /*  除能 EINT0 中断 */
1
NVIC - > ISER0  =1。 <<((のuint32_t)(TIMER0_IRQn 0x1Fの)); / *割り込みタイマ0を有効にします* /
2
NVIC - > ISER0  =1。 <<((のuint32_t)(EINT0_IRQn 0x1Fの));   / *割り込みEINT0を有効にします* /
3
NVIC - > ICER0  =1。 <<((のuint32_t)(TIMER0_IRQn 0x1Fの)); / *無効TIMER0割り込み* /
4
NVIC - > ICER0  =1  <<((のuint32_t)(EINT0_IRQn 0x1Fの));   / * EINT0割り込みを禁止* /
保留中の割り込みクリア
割り込みが発生すると一つ以上が発生した場合、割り込みはすぐに応答できない、中断されます。
プロセッサは、優先度の高い異常を処理しています。
プロセッサは、同じ優先度例外を処理しています。
割り込みがマスクされます。
保留中の割り込みは「保留レジスタ(ISPR)割り込み設定」と「未済割込みクリアレジスタ(ICPR)」することができます
アクセスするには。
ISPR / ICPR及び表4.63に記載されているISER / ICER同様のレジスタセット、8組の合計。その使用状況やISER / ICER
同じ登録します。あなたは、一時停止または保留中の割り込みをクリア中断するレジスタを変更することができます。
ユーザーは、ISPRを変更することができるレジスタは割り込み保留レジスタICPRを変更することでクリアすることができる保留中の割り込み。
動作例
外部割り込み0タイマ0割り込み、一時停止やクリア動作。
NVIC->ISPR0 = (1 << ((uint32_t)(TIMER0_IRQn) & 0x1F)); /*  手动挂起 Timer0 中断 */
NVIC->ISPR0 = (1 << ((uint32_t)(EINT0_IRQn) & 0x1F));  /*  手动挂起 EINT0 中断 */
NVIC->ICPR0 = (1 << ((uint32_t)(TIMER0_IRQn) & 0x1F)); /*  清除 TIMER0 中断挂起状态 */
NVIC->ICPR0 = (1 << ((uint32_t)(EINT0_IRQn) & 0x1F));  /*  清除 EINT0 中断挂起状态 */
1
NVIC - > ISPR0  =1  <<((のuint32_t)(TIMER0_IRQn 0x1Fの)); / *タイマ0割り込みペンディング手動/
2
NVIC - > ISPR0  =1  <<((のuint32_t)(EINT0_IRQn 0x1Fの));   / *マニュアルEINT0割込みペンディング* /
3
NVIC - > ICPR0  =1。 <<((のuint32_t)(TIMER0_IRQn 0x1Fの)); / *クリアTIMER0が保留状態に割り込みます* /
4
NVIC - > ICPR0  =1。 <<((のuint32_t)(EINT0_IRQn 0x1Fの));   / * / * EINT0保留中の割り込みをクリア
優先順位
割り込みプライオリティレジスタ。これらのレジスタは、各割り込みの優先順位を割り当てることができる、および割り込み優先順位フィールドが含まれています。
動作例
優先グループのうち、外部割り込み0設定 の優先順位を。
SCB->AIRCR = (0x05FA) | (0x05 << 8) ; /*  优先级在位 5 处分组 */
NVIC->IPR4 = ( 0x01<< 3) << 16 ; /*  外部中断 0 的优先级寄存器位于 IPR4[23:16] 字段 */
1
SCB > - AIRCR  =、0xFA05である|0x05の <<  8/;  *設定配置優先度ビット5 * /
2
NVIC->IPR4 = ( 0x01<< 3) << 16  /*  外部中断 0 的优先级寄存器位于 IPR4[23:16] 字段 */
LPC178x/177x 系列 Cortex-M3 芯片支持 41 个向量中断,IPR0~IPR10 为有效寄存器。
活动状态
每个外部中断对应在活动状态寄存器(IABR)都有一个状态位。处理器开始执行中断服务
例程,中断相关的活动位就被置“1”,中断退出该活动位被清“0”。若当前中断在执行服务例
程期间被高优先级的中断抢占,其活动状态也依然为“1”。
IABR 寄存器组描述如表 4.67 所列。IABR 寄存器为 32 位只读寄存器。LPC178x/177x 系列
Cortex-M3 芯片支持 41 个向量中断,IABR0~IABR1 为有效寄存器。
IABR0 寄存器是只读寄存器,可以读取前 32 个外设中断的有效状态。如表 4.68。IABR 的
位会在相应的中断服务程序正在执行时被置位。其它的中断可以通过 IABR1 寄存器来读取其有
效状态。
中断处理
中断建立完整过程如下:
① 系统启动后,设置优先级分组寄存器。缺省情况下分组位为 0,即 7 位抢占优先级、1
位子优先级。
② 如果需要重定位向量表,需要先将硬 fault 和 NMI 服务例程的入口地址写到新表项所在
的地址中。
③ 如果需要重定位向量表,配置向量表偏移量寄存器,使之指向新的向量表。
④ 建立中断向量,即从向量表中取出对应服务程序的入口地址。由于向量表可能进行重定
位,建议先读取向量表偏移量寄存器的值,再根据该中断在表中的位置,计算出服务例程入口
地址。若一直使用 ROM 中的向量表,则无需此步骤。
⑤ 为该中断设置优先级。
⑥ 使能中断。

如果将应用代码存储在 ROM 中,并且不需要修改异常服务程序,可将整个异常向量表存
储在 ROM 的起始区域(0x0000 0000)。在此情况下,向量表的地址偏移量一直为零,并且向
量表已经存在 ROM 中。此时,中断建立的过程可大大简化,只需三步:
① 系统启动后进行优先级分组。
② 设定中断优先级。
③ 使能中断。

由于优先级分组不当会产生不可预知的后果。一般情况下,建议使用默认分组即可,此时
中断建立仅需两步,如图 4.27 所示。其中阴影部分是需户进行软件设置,在软件设置完毕后,
一旦有中断请求信号,Cortex-M3 处理器硬件将自动响应,开始执行入栈、取向量、运行中断
服务函数以及中断退出等操作。







おすすめ

転載: www.cnblogs.com/bog-box/p/LPC1788-NVIC.html