nvic嵌套向量中断控制器工作原理

合集下载

LPC1700 第6章 嵌套向量中断控制器

LPC1700 第6章 嵌套向量中断控制器

目录
第6章嵌套向量中断控制器 (1)
6.1特性 (1)
6.2描述 (1)
6.3中断源 (1)
第6章嵌套向量中断控制器
6.1特性
?ARM Cortex-M3内部包含有嵌套向量中断控制器;
?与内核紧密联系的中断控制器,可支持低中断延时;
?可对系统异常和外设中断进行控制;
?支持33个嵌套向量中断;
?32个可编程的中断优先级;
?硬件优先级屏蔽;
?可重定位的向量表;
?不可屏蔽中断;
?软件中断功能。

6.2描述
嵌套向量中断控制器(NVIC)是Cortex-M3的一个内部器件。

与CPU紧密结合,降低了中断延时,让新进中断可以得到高效处理。

可参考《ARM®Cortex TM-M3技术参考指南》来获取NVIC操作的详细描述。

6.3中断源
表6.1列出了每一个外设功能所对应的中断源。

每一个外围设备可以有一条或几条中断线连接到向量中断控制器。

多个中断源也可以共用一条中断线。

除过ARM内核指定的某些标准外,哪一条中断线连接到哪一个中断源是无关紧要的或没有优先级的。

表6.1连接到向量中断控制器(VIC)的中断源。

nvic中断控制原理

nvic中断控制原理

nvic中断控制原理
NVIC,全称为嵌套向量中断控制器,是ARMCortex-M微控制器中的核心组件之一。

它的工作原理如下:
1.中断优先级:每个中断都有一个固定的优先级。

优先级高的中断在发生时可以立即打断正在执行的指令序列。

ARMCortex-M微控制器支持动态优先级,可以在运行时改变中断的优先级。

2.中断向量表:NVIC使用一个特殊的存储区域来保存中断向量表(InterruptVectorTable)。

中断向量表是一个数组,其中每个元素都是一个指向中断处理程序的地址。

当中断发生时,NVIC将比较新中断与当前中断的优先级,如果新中断优先级高,则立即处理新中断。

3.中断屏蔽:NVIC具有可编程的中断屏蔽寄存器,用于控制哪些中断被允许或禁止。

通过设置这些寄存器的值,可以控制哪些中断信号可以触发中断事件。

4.自动保存和恢复处理器状态:在ISR(中断服务程序)结束时,NVIC将从栈中恢复相关寄存器的值,进行正常操作,因此花费少量且确定的时间处理中断请求。

总之,NVIC通过优先级管理、向量表、屏蔽寄存器和自动保存恢复处理器状态等功能,实现了对微控制器中断的全面控制和管理。

NVIC 库函数(嵌套向量中断控制器)

NVIC 库函数(嵌套向量中断控制器)

嵌套向量中断控制器(NVIC)NVIC 驱动有多种用途:例如使能或者失能I RQ 中断,使能或者失能单独的I RQ 通道,改变I RQ 通道的优先级等等。

Table 266. NVIC 库函数函数名描述NVIC_DeInit 将外设N VIC 寄存器重设为缺省值NVIC_SCBDeInit 将外设S CB 寄存器重设为缺省值NVIC_PriorityGroupConfig 设置优先级分组:先占优先级和从优先级NVIC_Init 根据N VIC_InitStruct 中指定的参数初始化外设N VIC 寄存器NVIC_StructInit 把N VIC_InitStruct 中的每一个参数按缺省值填入NVIC_SETPRIMASK 使能P RIMASK 优先级:提升执行优先级至0NVIC_RESETPRIMASK 失能P RIMASK 优先级NVIC_SETFAULTMASK 使能F AULTMASK 优先级:提升执行优先级至-1NVIC_RESETFAULTMASK 失能F AULTMASK 优先级NVIC_BASEPRICONFIG 改变执行优先级从N(最低可设置优先级)提升至1NVIC_GetBASEPRI 返回B ASEPRI 屏蔽值NVIC_GetCurrentPendingIRQChannel 返回当前待处理I RQ 标识符NVIC_GetIRQChannelPendingBitStatus 检查指定的I RQ 通道待处理位设置与否NVIC_SetIRQChannelPendingBit设置指定的I RQ 通道待处理位NVIC_ClearIRQChannelPendingBit清除指定的I RQ 通道待处理位NVIC_GetCurrentActiveHandler 返回当前活动的H andler(IRQ 通道和系统H andler)的标识符NVIC_GetIRQChannelActiveBitStatus 检查指定的I RQ 通道活动位设置与否NVIC_GetCPUID 返回I D 号码,Cortex-M3 内核的版本号和实现细节NVIC_SetVectorTable 设置向量表的位置和偏移NVIC_GenerateSystemReset 产生一个系统复位NVIC_GenerateCoreReset 产生一个内核(内核+NVIC)复位NVIC_SystemLPConfig 选择系统进入低功耗模式的条件NVIC_SystemHandlerConfig 使能或者失能指定的系统H andlerNVIC_SystemHandlerPriorityConfig 设置指定的系统H andler 优先级NVIC_GetSystemHandlerPendingBitStatus 检查指定的系统H andler 待处理位设置与否NVIC_SetSystemHandlerPendingBit 设置系统H andler 待处理位NVIC_ClearSystemHandlerPendingBit 清除系统H andler 待处理位NVIC_GetSystemHandlerActiveBitStatus 检查系统H andler 活动位设置与否NVIC_GetFaultHandlerSources 返回表示出错的系统H andler 源NVIC_GetFaultAddress 返回产生表示出错的系统H andler 所在位置的地址函数NVIC_SystemHandlerPriorityConfig函数名NVIC_SystemHandlerPriorityConfig函数原形void NVIC_SystemHandlerPriorityConfig(u32 SystemHandler, u8SystemHandlerPreemptionPriority, u8 SystemHandlerSubPriority) 功能描述设置指定的系统H andler 优先级输入参数1SystemHandler:待使能或者失能的指定系统H andler参阅S ection:SystemHandler 查阅更多该参数允许取值范围输入参数2SystemHandlerPreemptionPriority:指定系统H andler 的新组优先级参阅S ection:SystemHandlerPreemptionPriority 查阅更多该参数允许取值范围输入参数3SystemHandlerSubPriority:指定系统H andler 的新从优先级参阅S ection:SystemHandlerSubPriority 查阅更多该参数允许取值范围输出参数无返回值无先决条件无被调用函数无SystemHandler 类型该参数指定了待设置的系统HandlerNVIC_ VectTab 描述SystemHandler_MemoryManage 存储器管理H andlerSystemHandler_BusFault 总线错误H andlerSystemHandler_UsageFault 使用错误H andlerSystemHandler_SVCall SVCall HandlerSystemHandler_DebugMonitor 除错监控H andlerSystemHandler_PSV PSV HandlerSystemHandler_SysTick 系统滴答定时器H andler例:/* Enable the Memory Manage Handler */NVIC_SystemHandlerPriorityConfig(SystemHandler_MemoryManage, 2, 8);函数N VIC_PriorityGroupConfig函数名NVIC_PriorityGroupConfig函数原形void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)功能描述设置优先级分组:先占优先级和从优先级输入参数NVIC_PriorityGroup:优先级分组位长度参阅S ection:NVIC_PriorityGroup 查阅更多该参数允许取值范围输出参数无返回值无先决条件优先级分组只能设置一次被调用函数无NVIC_PriorityGroup 值,该参数设置优先级分组位长度NVIC_PriorityGroup 描述NVIC_PriorityGroup_0 先占优先级 0 位从优先级 4 位NVIC_PriorityGroup_1 先占优先级1位从优先级3位NVIC_PriorityGroup_2 先占优先级2位(值:0-3)从优先级2位(值:0-3)NVIC_PriorityGroup_3 先占优先级3位从优先级1位NVIC_PriorityGroup_4 先占优先级4位从优先级0位例:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);函数N VIC_Init函数名NVIC_Init函数原形void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)功能描述根据N VIC_InitStruct 中指定的参数初始化外设N VIC 寄存器输入参数NVIC_InitStruct:指向结构N VIC_InitTypeDef 的指针,包含了外设G PIO 的配置信息参阅S ection:NVIC_InitTypeDef 查阅更多该参数允许取值范围输出参数无返回值无先决条件无被调用函数无typedef struct{u8 NVIC_IRQChannel; //IRQ通道u8 NVIC_IRQChannelPreemptionPriority; //先占优先级取值u8 NVIC_IRQChannelSubPriority; //从优先级取值FunctionalState NVIC_IRQChannelCmd; //使能} NVIC_InitTypeDef;该参数设置了成员 N VIC_IRQChannel 中的先占优先级,Table. 273 列举了该参数的取值。

nvic中断控制原理 -回复

nvic中断控制原理 -回复

nvic中断控制原理-回复NVIC(Nested Vectored Interrupt Controller)中断控制器是一种硬件模块,用于管理微处理器上的中断信号。

在嵌入式系统中,中断是处理器根据外部事件或内部条件而自动触发的一种机制。

NVIC中断控制器的作用是将多个中断源连接到处理器,并根据中断的优先级和状态来控制中断的触发和处理顺序。

下面,我们将深入探讨NVIC中断控制器的工作原理,包括中断优先级、中断向量表和中断处理过程。

一. 中断优先级NVIC中断控制器可以管理多个中断源,每个中断源都有一个特定的优先级。

中断优先级决定了中断处理的顺序,优先级较高的中断将在优先级较低的中断之前处理。

1. 优先级分组中断优先级分组是指将中断源分成若干组,每个组都有自己的优先级范围。

优先级分组可以根据系统需求进行配置,常见的分组方式包括4位抢占优先级和4位响应优先级、3位抢占优先级和1位响应优先级等。

2. 中断优先级设置对于每个中断源,可以设置其优先级。

一般来说,数值较小的中断具有更高的优先级。

在NVIC中断控制器中,中断优先级由8位寄存器控制,例如NVIC_IPR[x],其中x表示中断源的编号。

通过设置寄存器的值,可以为每个中断源设置相应的优先级。

二. 中断向量表中断向量表是存储中断服务程序入口地址的表格,用于快速定位和处理中断。

在ARM Cortex-M系列处理器中,中断向量表是一个存储在内存中的固定地址。

当发生中断时,处理器会根据中断号从中断向量表中获取相应的中断服务程序入口地址。

1. 中断向量表的结构中断向量表通常由一系列指令地址组成,每个中断对应一个指令地址。

在ARM Cortex-M系列处理器中,中断向量表的起始地址存储在向量表偏移寄存器(VTOR)中,处理器会根据该地址偏移获取实际的中断服务程序入口地址。

2. 中断服务程序中断服务程序是为每个中断源编写的处理程序,用于处理中断事件。

每个中断源可能有一个或多个相关的中断服务程序。

NVIC与中断控制

NVIC与中断控制

示例汇编代码如下: LDR R0, =0xE000ED0C ; 应用程序中断及复位控制寄存器 LDR R1, =0x05FA0500 ; 使用优先级组5 (2/6) STR R1, [R0] ; 设置优先级组 。。。。。 MOV R4, #8 ; ROM 中的向量表 LDR R5, =(NEW_VECT_TABLE+8) LDMIA R4!, {R0-R1} ; 读取NMI 和硬fault 的向量 STMIA R5!, {R0-R1} ; 拷贝它们的向量到新表中 ... LDR R0, =0xE000ED08 ; 向量表偏移量寄存器的地址 LDR R1, =NEW_VECT_TABLE STR R1, [R0] ; 把向量表重定位
... LDR R0, =IRQ7_Handler ; 取得IRQ #7 服务例程的入口地址 LDR R1, =0xE000ED08 ; 向量表偏移量寄存器的地址 LDR R1, [R1] ADD R1, R1,#(4*(7+16)) ; 计算IRQ #7 服务例程的入口地址 STR R0, [R1] ; 在向量表中写入IRQ #7 服务例程的入口地址 ... LDR R0, =0xE000E400 ; 外部中断优先级寄存器阵列的基地址 MOV R1, #0xC0 STRB R1, [R0,#7] ; 把IRQ #7 的优先级设置为0xC0 ... LDR R0, =0xE000E100 ; SETEN 寄存器的地址 MOV R1, #(1<<7) ; 置位IRQ #7 的使能位 STR R1, [R0] ; 使能IRQ #7
中断的使能与除能
中断的使能与除能分别使用各自的寄存器来控制——这与传统的,使用单
一比特的两个状态来表达使能与除能是不同的。CM3 中可以有240 对使能位/ 除能位,每个中断拥有一对。这240 个对子分布在8 对32 位寄存器中(最后一 对没有用完)。欲使能一个中断,你需要写1 到对应SETENA 的位中;欲除能 一个中断,你需要写1 到对应的CLRENA 位中;如果往它们中写0,不会有任 何效果。通过这种方式,使能/除能中断时只需把“当事位”写成1,其它的 位可以全部为零。再也不用像以前那样,害怕有些位被写入0 而破坏其对应的 中断设置(写0 没有效果),从而实现每个中断都可以自顾地设置,而互不侵 犯——只需单一的写指令,不再需要读‐改‐写。

STM32中NVIC(嵌套向量中断控制)的理解

STM32中NVIC(嵌套向量中断控制)的理解

STM32中NVIC(嵌套向量中断控制)的理解NVIC,中文名嵌套中断向量控制器,是Cortex-M3 系列控制器内部独有集成单元,与CPU 结合紧密,降低中断延迟时间并且能更加高效处理后续中断。

举个例子,比如火车站买票,那些火车站的规章制度就是NVIC,规定学生和军人有比一般人更高优先级,它们则给你单独安排个窗口,同学与同学之间也有区别,那就是你也得排队,也就是你的组别(抢断优先级)和你的排队序号(响应优先级)决定你何时能买到票。

抢断优先级,顾名思义,能再别人中断是抢占别人中断,实现中断嵌套。

响应优先级则只能排队,不能抢在前面插别人的对,即不能嵌套。

STM32 中指定优先级的寄存器为4 位,其定义如下:第0 组:所有4 位用于指定响应优先级第1 组:最高1 位用于指定抢占式优先级,最低3 位用于指定响应优先级第2 组:最高2 位用于指定抢占式优先级,最低2 位用于指定响应优先级第3 组:最高3 位用于指定抢占式优先级,最低1 位用于指定响应优先级第4 组:所有4 位用于指定抢占式优先级以上定义也称作中断优先级分组,相关内容在STM32 固件库的misc.h 文件中有详细定义。

基础了解了就可以对中断进行操作了。

第一步:使用void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)函数对优先级分组配置。

NVIC_PriorityGroup 可以配置为NVIC_PriorityGroup_0 => 选择第0 组NVIC_PriorityGroup_1 => 选择第1 组NVIC_PriorityGroup_2 => 选择第2 组NVIC_PriorityGroup_3 => 选择第3 组NVIC_PriorityGroup_4 => 选择第4 组例如:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0)配置为0 组。

nvic_init函数解读 -回复

nvic_init函数解读 -回复

nvic_init函数解读-回复题:nvic_init函数解读导言:在嵌入式系统开发中,中断是一种常用的事件触发机制,可用于处理实时性要求较高的任务。

nvic_init函数是在ARM架构下的嵌入式系统中用于初始化中断控制器(NVIC)的函数。

本文将深入探讨nvic_init函数的工作原理和使用方法,并逐步分析其具体实现细节。

第一部分:中断控制器简介1.1 中断的概念和作用中断是计算机中的一种事件响应机制,可以打断CPU当前操作的执行,转而处理预先定义好的中断事件。

它可以是硬件触发的,如外部设备的中断请求信号;也可以是软件触发的,如软件中断或异常。

中断机制的主要作用是提高系统的响应速度和实时性。

当系统接收到中断请求时,会立即保存当前的现场状态,然后跳转到中断服务程序中执行相关的处理,待处理完成后,再恢复先前的现场状态,继续执行之前的任务。

1.2 中断控制器的作用和结构中断控制器是一种用于管理和响应中断事件的硬件设备。

它负责接收和识别中断请求,并将对应的中断信号发送给CPU。

中断控制器通常由多个中断源和中断优先级判定逻辑组成。

ARM架构下的nvic_init函数用于初始化中断控制器(NVIC),主要完成中断优先级的设置和中断使能的配置。

第二部分:nvic_init函数的实现2.1 函数原型和参数说明- 原型:void nvic_init(void)- 参数:无2.2 函数的作用和工作原理nvic_init函数主要用于初始化中断控制器(NVIC)。

它会根据用户给定的中断优先级、中断使能状态等配置信息,对相应的中断源进行初始化设置。

具体工作流程如下:- 读取用户配置的中断优先级和中断使能状态;- 根据配置信息,设置中断向量表基地址、中断优先级和中断使能状态;- 将配置信息写入对应的中断控制寄存器,完成中断控制器的初始化设置。

2.3 中断优先级的设置中断优先级是中断处理的重要参考标准,用于区分不同中断的紧急程度。

计算机原理实验-外部中断实验

计算机原理实验-外部中断实验

计算机原理与应用实验实验名称:外部中断实验学院:信息与通信工程学院班级:2017211113姓名:***学号:**********同组成员姓名:李凝同组成员学号:**********一、实验目的1. 掌握NVIC 中断优先级配置。

2. 学会外部中断配置。

二、实验原理及内容(一)实验原理电路结构如图3.1 所示1. NVIC 中断优先级NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。

但是各个芯片厂商在设计芯片的时候会对Cortex-M4 内核里面的NVIC 进行裁剪,把不需要的部分去掉,所以说STM32 的NVIC 是Cortex-M4 的NVIC 的一个子集。

CM4 内核可以支持256个中断,包括16个内核中断和240个外部中断,256 级的可编程中断设置。

对于STM32F4 没有用到CM4 内核的所有东西,只是用到了一部分,对于STM32F40 和41 系列共有92个中断,其中有10个内核中断和82个可屏蔽中断,常用的为82个可屏蔽中断。

ISER[8]—中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82 个可屏蔽的中断,因此利用ISER[0~2]这三个32 位寄存器就够了。

一下的几个寄存器同理。

ICER[8]—中断除能寄存器组,用来消除中断。

ISPR[8]—中断挂起控制寄存器组,用来挂起中断。

ICPR[8]—中断解挂控制寄存器组,用来解除挂起。

IABR[8]—中断激活标志寄存器组,对应位如果为1 则表示中断正在被执行。

IP[240]—中断优先级控制寄存器组,它是用来设置中断优先级的。

我们只用到了IP[0]~IP[81],每个寄存器只用到了高4 位,这4 位又用来设置抢占优先级和响应优先级(有关抢占优先级和响应优先级后面会介绍到),而对于抢占优先级和响应优先级各占多少位则由AIRCR 寄存器控制,相关设置如表 3.1 所示。

K60芯片NVIC模块中断相关寄存器配置以及应用举例

K60芯片NVIC模块中断相关寄存器配置以及应用举例
case 0x2: NVICICPR2 = 1 << (irq_num %32); NVICISER2 = 1 << (irq_num %32); break;
} }
如果需要使能 LPTMR 的中断,直接调用 enable_irq (85) 即可。
如果要在 NVIC 中关闭某个中断源,只需对中断使能清除寄存器中的对应位置位即可, 实现代码如下。
}
另外,对于一个完整的中断程序代码,用户还需编写中断服务程序代码以及定义中断 服务函数,并在 Vector.h 文件中声明自定义的中断服务函数,并将中断向量表中的宏定义 修改为此中断服务程序的函数名,指定中断服务程序的入口地址。
void default_isr(void); //默认的中断服务程序 extern void lptmr_isr(void); //自定义的终端服务程序
对于非优先级中断寄存器,如上面提到的 NVICISERx、NVICICERx、NVICSPRx、 NVICCPRx 以及 NVICABRx,组号的计算公式为 IRQ / 32,所以可以得到 LPTMR 的 NVIC 非优先级中断寄存器的组号为 85 / 32 = 2,从而得到 LPTMR 需要使用的非优先级中 断寄存器为 NVICISER2、 NVICICER2、 NVICISPR2、NVICICPR2、NVICIABR2。这些 寄存器都是 32 位的,所以对应于 LPTMR 的位号计算公式为 IRQ % 32,得到 85 % 32 = 21。 确定完了组号和位号,便得到了需要设置的 LPTMR 的非优先级中断控制寄存器及相应的 位为:NVICISER2[21]、 NVICICER2[21]、 NVICISPR2[21]、NVICICPR2[21]、 NVICIABR2[21]。

nvic中断的工作原理和使用方法 -回复

nvic中断的工作原理和使用方法 -回复

nvic中断的工作原理和使用方法-回复NVIC(Nested Vectored Interrupt Controller)中断控制器是一种常见于嵌入式系统中的硬件模块,用于管理和分配系统中断。

在本文中,我们将详细介绍NVIC中断的工作原理和使用方法。

1. 中断的概念和作用:在嵌入式系统中,中断是一种重要的机制,用于处理来自外部设备或软件的异步事件。

中断可以让处理器立即暂停当前任务,转而处理更为紧急的事件,提高系统的响应能力和实时性。

NVIC中断控制器负责管理和分配中断,使系统能够有效地响应和处理中断事件。

2. NVIC中断控制器的组成:NVIC中断控制器由多个寄存器组成,其中包括以下几个重要的寄存器:- ISER(Interrupt Set Enable Register):用于设置或清除中断的使能位。

当某个中断使能位被设置时,表示该中断已经被使能,可以触发中断服务程序的执行。

- ICER(Interrupt Clear Enable Register):用于清除中断的使能位。

当某个中断使能位被清除时,表示该中断已经被禁止,不会触发中断服务程序的执行。

- ISPR(Interrupt Set Pending Register):用于设置中断的挂起位。

当某个中断挂起位被设置时,表示该中断已经被挂起,正在等待中断服务程序的执行。

- IPR(Interrupt Priority Register):用于设置中断的优先级。

不同中断的优先级不同,高优先级的中断会在低优先级中断之前得到响应和处理。

- IPSR(Interrupt Program Status Register):用于记录当前正在处理的中断号。

3. NVIC中断的工作原理:当外部设备或软件触发一个中断事件时,NVIC中断控制器会根据中断的优先级和使能状态来决定是否响应该中断。

若中断被使能且优先级高于当前正在处理的中断,NVIC中断控制器将触发中断,并根据中断号跳转到对应的中断服务程序(Interrupt Service Routine,ISR)。

STM32NVIC嵌套向量中断控制器函数分析

STM32NVIC嵌套向量中断控制器函数分析

STM32 NVIC嵌套向量中断控制器函数分析中断管理函数CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。

但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。

STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。

而我们常用的就是这60个可屏蔽中断,所以我们就只针对这60个可屏蔽中断进行介绍。

在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体:typedef struct{vu32 ISER[2];u32 RESERVED0[30];vu32 ICER[2];u32 RSERVED1[30];vu32 ISPR[2];u32 RESERVED2[30];vu32 ICPR[2];u32 RESERVED3[30];vu32 IABR[2];u32 RESERVED4[62];vu32 IPR[15];} NVIC_TypeDef;ISER[2]:Interrupt set enable registers中断使能寄存器组ICER[2]:interrupt clear enable registers 中断除能寄存器组ISPR[2]:interrupt set pending registers 中断挂起寄存器组ICPR[2]: interrupt clear pending registers 中断解挂寄存器组IABR[2]:interrupt active bit registers 中断激活标志寄存器组主要分析IPR[15]:interrupt priority registers 中断优先级控制寄存器组使用函数实现中断分组: 可选分组0--4MY_NVIC_PriorityGroupConfig(u8 NVIC_Group) {u32 temp,temp1;//设置中转变量temp1=(~NVIC_Group)&0x07; //取后3位temp1;AIRCR; //读取先前设置temp&=0x0000F8FF; //清空先前设置temp|=0x05FA0000; //插入密钥temp|=temp1; //分组设置赋值进SCB->;AIRCB=temp; //设置完的值赋值给中断分组寄存器}语句解读:temp1=(~NVIC_Group)&0x07; 由于所以组号取反与111 即得到分组所需寄存器值temp|=0x05FA0000;密钥使用函数实现中断优先级设置:void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group) {u32 temp;u8 IPRADDR=NVIC_Channel/4; //每组只能存4个得到组地址u8 IPROFFSET=NVIC_Channel%4; //得到组内偏移地址IPROFFSET=IPROFFSET*8+4; //得到确切地址MY_NVIC_PriorityGroupConfig(NVIC_Group); //设置分组temp=NVIC_Preemptionpriority;>;NVIC_Group); //设置响应优先级temp&=0xf; //取低4位if(NVIC_Channel;ISER[0]|=1;ISER[1]|=1;IPR[IPRADDR ]|=temptemp=NVIC_Preemptionpriority;>;NVIC_Group); //响应优先级在右边,根据响应位多少进行右移temp&=0xf; //得到分组值外部中断配置函数:STM32的EXTI控制器支持19个外部中断/事件请求。

项目6 NVIC和外部中断原理及应用

项目6 NVIC和外部中断原理及应用

14
2023/4/12
EXTI功能框图
15
2023/4/12
STM32的中断控制器支持20个外部中断、事件请 求(也就是20条外部中断线),每个中断设有状态位, 每个中断/ 事件都有独立的触发和屏蔽设置。STM32 的20个外部中断对应着20路中断线,分别是 EXTI_Line0-EXTI_Line19。 线0~15:对应外部I/O口的输入中断; 线16:连接到PVD输出; 线17:连接到RTC闹钟事件; 线18:连接到USB唤醒事件; 线19:连接到以太网唤醒事件(只适用于互联型产品)。
▪ 编号3电路实际就是一个或门电路,它一个输入来自编号2电路,另外一个输入来
自软件中断事件寄存器(EXTI_SWIER)。EXTI_SWIER 允许我们通过程序控制就可 以启动中断/事件线,这在某些地方非常有用。我们知道或门的作用就是有“1” 就为“1”,所以这两个输入随便一个有效信号“1”就可以输出“1”给编号4 和编号6电路。
▪ 每一个中断都要在NVIC中挂号,NVIC收到外设的中断请求,会将
其中断请求发送给内核,内核收到NVIC的中断通知之后,就会去 判断是哪个中断发生,然后查找FLASH中断向量表去获取相应的 中断处理函数。
10
2023/4/12
11
2023/4/12
12
2023/4/12
▪ Cortex-M3内核支持256个中断,其中包含了16个内核中断(异常
▪ 无论任何时刻,响应优先级都不会造成
中断嵌套,也就是说中断嵌套完全由占 先式优先级决定的。
7
2023/4/12
优先级分组
▪ STM32为了适应不同的优先级组合,设置了
GROUP的概念,组是一个大的框架,在组下分 别分配了占先优先级与副优先级。每一个中断 都有一个专门的寄存器(Interrupt Priority Registers)来描述该中断的占先式优先级及 副优先级。在这个寄存器中STM32使用4个二进 制位描述优先级(Cortex-M3 定义了8位,但 STM32只使用了4位)。NVIC优先级分组见表61。组别优先顺序(第0组优先级最强,第4组 优先级最弱)。整个系统执行过程中,只设置 一次中断分组,若随意改变会导致中断管理混 乱。

NVIC中断简介

NVIC中断简介

NVIC中断简介
NVIC称之为嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC)
STM32F4系列包含90多个可屏蔽中断。

STM32中有两个优先级的概念—抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。

具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中。

当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。

如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

这里需要注意两点:
第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。

而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。

《Cortex-M0权威指南》之体系结构---嵌套中断控制器(NVIC)

《Cortex-M0权威指南》之体系结构---嵌套中断控制器(NVIC)

《Cortex-M0权威指南》之体系结构---嵌套中断控制器
(NVIC)
为了管理中断请求的优先级并处理其他异常,Cortex-M0处理器内置了嵌套中断控制器(NVIC)。

NVIC的一些可编程控制器控制着中断管理功能,这些寄存器被映射到系统地址空间里,它们所处的区域被称为系统控制空间(SCS)。

NVIC有以下特性:
灵活的中断管理;
支持嵌套中断;
向量化的异常入口
中断屏蔽
灵活的中断管理
Cortex-M0处理器中,每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。

处理器的中断可以是信号级的(在中断服务程序清除中断请求以前,外设的请求会一直保持),也可以是脉冲形式的(最小一个始终周期),这样中断控制器就可以处理任何中断源。

支持嵌套中断
Cortex-M0处理器的任何中断都有一个固定或者可编程的中断优先级。

当外部中断之类的异常发生时,NVIC将该异常的优先级与当前的优先级进行比较,如果新的优先级更高,当前的任务会被暂定,一些寄存器的值被压栈处理,然后处理器开始处理新的异常程序,这个过程也被称为“抢占”。

高优先级的中断完成后,异常返回就会执行,处理器自动进行出栈操作恢复刚才寄存器的值,并继续运行刚才的任务。

这种机制并没有带来软件开销。

NVIC与中断控制

NVIC与中断控制

如上所述,SETENA 位和CLRENA 位可以有240 对,对应的32 位寄存器
可以有8 对,因此使用数字后缀来区分这些寄存器,如SETENA0,
SETENA1…SETENA7,如表8.1 所示。但是在特定的芯片中,只有该芯片实
现的中断,其对应的位才有意义。因此,如果你使用的芯片支持32 个中断,
到的“特殊功能寄存器”,只能通过MRS/MSR及CPS 来访问。
中断配置基础
每个外部中断都在NVIC 的下列寄存器中“挂号”:


使能与除能寄存器


悬起与“解悬”寄存器


优先级寄存器


活动状态寄存器
另外,下列寄存器也对中断处理有重大影响


异常掩蔽寄存器(PRIMASK, FAULTMASK 以及BASEPRI)
MPU的控制寄存器、SysTick 定时器以及调试控制。本章中,我们将体检
NVIC 的中断处理控制逻辑。MPU 与调试控制逻辑在后续章节中讨论。
NVIC 共支持1 至240 个外部中断输入(通常外部中断写作IRQs)。
具体的数值由芯片厂商在设计芯片时决定。此外,NVIC 还支持一个
“永垂不朽”的不可屏蔽中断(NMI)输入。NMI 的实际功能亦由芯片
一个中断,你需要写1 到对应的CLRENA 位中;如果往它们中写0,不会有任
何效果。通过这种方式,使能/除能中断时只需把“当事位”写成1,其它的
位可以全部为零。再也不用像以前那样,害怕有些位被写入0 而破坏其对应的
中断设置(写0 没有效果),从而实现每个中断都可以自顾地设置,而互不侵
犯——只需单一的写指令,不再需要读‐改‐写。
器码不一样,从而硬件的行为也不同:使用BASEPRI时,可以任意设置新

嵌套向量中断控制器(NVIC)详解

嵌套向量中断控制器(NVIC)详解

嵌套向量中断控制器(NVIC)详解引⾔在平时的⼯作中,我们经常会遇到这样的情况:有⼈来找你做⼀些事情,⽽且这些事情要⽐⼿头的⼯作更重要。

那现在就需要停下⼿中的⼯作,先去完成突然到来的这部分⼯作。

这样的情况也类似于图论中的关键路径中,突然在当前事件之前插⼊了⼀个新的事件,那我们不得不先去完成之前的那个任务,才能继续完成后⾯的⼯作。

上述情况是⾮常常见的,那在STM32中,我们如果遇到了⽐当前任务更紧急的事情需要去处理,我们应该怎么办呢?这个时候,我们需要通过中断来完成这样的任务。

在现实⽣活中,突然出现的任务⼀定有轻重缓急之分。

如果同时出现许多的临时任务,我们⼀定会⾸先评估他们谁更需要先被处理掉,然后再依次进⾏处理。

在STM32中,我们也需要这样的功能,多个中断来临的时候,我们需要⾸先判断这个中断紧不紧急,然后再考虑处理的先后顺序。

那我们是由什么来控制这样的顺序的呢?毫⽆疑问,这就是通过嵌套向量中断控制器(NVIC)完成的。

NVIC简介CM3内核⽀持256个中断,包括16个内核中断和250个外部中断,同时具有256级的可编程中断设置。

⽽STM32只使⽤了⼀部分。

STM32拥有84个中断,包括16个内核中断和68个可屏蔽中断(STM32F107系列才使⽤了68个可屏蔽中断),还拥有16级可编程的中断优先级。

STM32F103系列只使⽤了60个可屏蔽中断。

STM32中控制中断优先级的寄存器组是IP[240]。

是由240个8bit的寄存器组成的。

⽽STM32F103只⽤了前六⼗个(0 ~ 59)。

在STM32F103系列单⽚机中,这8bit也没有全部使⽤,⽽是只使⽤了其⾼四位(4 ~ 7位)。

下图是中断分组的分配情况。

优先级分组抢占优先级响应优先级⾼四位描述00级0 ~ 15级0bit⽤于抢占优先级4bit⽤于响应优先级10 ~ 1级0 ~ 7级1bit⽤于抢占优先级3bit⽤于响应优先级20 ~ 3级0 ~ 3级2bit⽤于抢占优先级2bit⽤于响应优先级30 ~ 7级0 ~ 1级3bit⽤于抢占优先级1bit⽤于响应优先级40 ~ 15级0级4bit⽤于抢占优先级0bit⽤于响应优先级响应优先级⼜称为⼦优先级。

简述中断嵌套机制的原理。

简述中断嵌套机制的原理。

简述中断嵌套机制的原理。

中断嵌套机制是指将中断服务程序(ISP)的响应过程分为多个层次,逐级地调用中断处理程序(ISP)来完成中断的处理。

在计算机系统中,通常有多个中断源,每个中断源都对应着一个中断服务程序,它们之间通过中断嵌套机制进行通信和协作。

中断嵌套机制的原理可以简单地概括为:当系统需要执行某个中断服务程序时,首先向该中断服务程序发送中断请求信号,该中断服务程序接收到信号后开始执行;然后,系统将中断请求信号发送给中断服务程序的上级中断处理程序,该上级中断处理程序接收到信号后开始执行;接着,系统再将中断请求信号发送给上级中断处理程序的上级中断处理程序,以此类推,直到最上级中断处理程序接收到信号并响应为止。

在中断嵌套机制中,每个中断服务程序都对应着一个独立的中断源,每个中断源的中断请求信号都存储在相应的中断寄存器中。

当系统接收到一个中断请求信号时,首先根据该中断寄存器中存储的中断源信息来确定需要执行的中断服务程序,然后执行该中断服务程序,并将响应结果存储在相应的中断寄存器中。

当中断服务程序执行完毕后,系统会根据中断寄存器中存储的响应结果来继续执行下一个中断服务程序,直到所有中断服务程序执行完毕。

在这个过程中,中断嵌套机制起到了协调不同中断源之间的通信和协作的作用,使得系统能够高效地完成各种中断处理任务。

除了中断嵌套机制外,计算机系统中还有其他各种中断处理机制,如中断向量机制和中断控制寄存器机制等。

这些机制都能够实现不同层次的中断服务程序和中断源之间的协作,从而提高计算机系统的性能。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、引言
Nvic嵌套向量中断控制器(Nested Vectored Interrupt Controller)是一种常见的中断控制器,它在嵌入式系统中扮演着重要的角色。


文将介绍Nvic的工作原理,帮助读者更好地理解这一关键的硬件组件。

二、Nvic的基本概念
Nvic是一种硬件组件,用于管理和分发系统中的中断请求。

在嵌入式
系统中,当发生外部事件或者特定的处理器状态发生变化时,需要立
即中断当前的程序执行,执行特定的中断服务程序。

而Nvic就是用来协调这些中断请求的,确保它们按照优先级和顺序得到正确的处理。

三、中断控制器的作用
1.管理中断请求
中断是在嵌入式系统中的一种重要的事件响应机制。

当外部设备(如
传感器、通信接口等)产生需要处理的事件时,会向处理器发送中断
请求。

而中断控制器就是负责接收、管理和分发这些中断请求的硬件
组件。

2.中断优先级
在一个嵌入式系统中,可能同时出现多个中断请求,此时中断控制器
需要根据中断请求的优先级决定哪个中断将被优先处理。

Nvic通过优
先级编码的方式,能够准确地确定中断的优先级,确保高优先级的中
断能够得到及时处理。

四、Nvic的工作原理
1.中断向量表
Nvic通过中断向量表来实现对中断请求的管理。

中断向量表是一张表格,每个中断都有一个特定的中断向量号。

当中断控制器接收到中断请求时,根据中断向量号可以迅速定位到对应的中断服务程序的入口位置区域,从而进行中断处理。

2.中断优先级编码
Nvic使用中断优先级编码的方式来确定中断的优先级。

在Nvic中,中断请求会按照其具体的中断向量号进行编码,从而确定其优先级。

当多个中断请求同时到达时,Nvic会根据优先级编码来决定哪个中断会被优先处理。

3.嵌套中断
Nvic支持嵌套中断的机制,即在一个中断服务程序的执行过程中,如果遇到了更高优先级的中断请求,Nvic可以暂停当前中断服务程序的执行,转而处理更高优先级的中断请求。

这种机制可以确保高优先级的中断能够得到及时处理,提高系统的响应速度。

五、Nvic的优点
1.快速响应
由于Nvic能够快速地定位到中断服务程序的入口位置区域,从而可以
快速响应中断请求,降低中断处理的延迟。

2.灵活性
Nvic支持嵌套中断的机制,能够有效地处理多个中断请求,提高系统的灵活性和实时性。

3.可编程性
Nvic可以根据系统的需求进行配置,包括中断优先级的设置、中断向量表的定义等,提供了较高的可编程性。

六、Nvic的应用
Nvic广泛应用于各种嵌入式系统中,包括工业控制、通信设备、消费电子产品等领域。

在嵌入式实时操作系统中,Nvic可以确保各个任务的及时响应和调度,提高系统的稳定性和实时性。

七、总结
Nvic作为一种重要的中断控制器,对于嵌入式系统的稳定性和实时性起着至关重要的作用。

通过本文的介绍,读者可以更清楚地了解Nvic 的工作原理和应用,从而更好地应用于实际的系统设计中。

希望本文能够帮助读者更好地理解Nvic,提高嵌入式系统的设计水平和实际应用能力。

八、Nvic在实际系统中的应用
1. 嵌入式系统的中断管理
在嵌入式系统中,各种外部设备比如传感器、通信接口、定时器等可
能会产生中断请求,而Nvic能够根据设备的优先级和中断请求进行快速的管理和分发。

在工业控制系统中,各种传感器和执行器的动作需
要及时响应和处理,Nvic能够确保这些中断得到及时处理,提高系统
的实时性和可靠性。

2. 实时操作系统的任务调度
在实时操作系统中,任务调度是一项重要的功能。

Nvic能够确保各个
任务的及时响应和调度,提高系统的稳定性和实时性。

一个具有多个
优先级任务的实时操作系统,Nvic可以根据任务的优先级来确定中断
的处理顺序,确保高优先级任务得到及时的调度和执行。

3. 通信设备和网络设备的中断处理
在通信设备和网络设备中,可能会有各种网络事件和通信中断需要处理。

Nvic能够快速响应这些中断请求,确保数据的及时传输和处理。

在网络设备中,例如路由器和交换机等,Nvic能够协调各种中断请求,确保设备的稳定和高效运行。

4. 消费电子产品的响应和交互
在消费电子产品中,用户的交互和响应速度对于产品的体验至关重要。

智能手机、平板电脑等产品,可能会有各种用户输入和触摸事件需要
及时响应。

Nvic能够快速分发这些中断请求,确保用户的操作得到及
时的反馈,提高产品的交互性和用户体验。

九、Nvic的进一步发展和应用
1. 互联网物联网的应用
随着互联网物联网技术的发展,各种智能设备和传感器的数量正在快
速增长,这些设备需要实时监控和响应。

Nvic在这样的环境下发挥着
更加重要的作用,它能够协调和管理各种设备的中断请求,确保系统
的稳定和高效运行。

2. 自动驾驶和智能交通系统的应用
在自动驾驶和智能交通系统中,各种传感器和控制设备需要及时响应
和交互。

Nvic能够协调这些设备的中断请求,确保系统的高效和安全
运行。

在自动驾驶汽车中,各种传感器需要及时的监测和响应道路状
况和车辆状态,Nvic能够确保这些中断请求得到及时的处理和反馈。

3. 医疗设备和生命科学领域的应用
在医疗设备和生命科学领域,各种传感器和监测设备需要及时响应和
处理生理参数和监测数据。

Nvic能够确保这些中断请求得到及时的处
理和反馈,提高医疗设备的可靠性和精度。

4. 工业自动化和机器人领域的应用
在工业自动化和机器人领域,各种传感器和执行器需要实时的监测和
控制。

Nvic能够协调这些设备的中断请求,确保系统的稳定和高效运行。

在工业生产线上,各种传感器和控制设备需要及时的监测和反馈,Nvic能够确保这些中断请求得到及时的处理和响应。

十、未来Nvic的发展趋势
随着嵌入式系统和实时系统的不断发展,Nvic也在不断地进行优化和
改进。

未来Nvic的发展趋势包括但不限于以下几个方面:
1. 更高的中断处理速度
随着处理器和硬件的不断进步,未来Nvic将实现更高的中断处理速度,确保系统的高效和实时性。

2. 更灵活的中断处理机制
未来Nvic将实现更灵活的中断处理机制,包括更灵活的中断优先级配置、更智能的嵌套中断处理等,以满足不同领域的需求。

3. 更广泛的应用场景
未来Nvic将在更广泛的领域得到应用,包括但不限于智能化领域、医疗健康领域、智能制造领域等,为各种智能物联设备和系统提供稳定的中断处理和管理。

4. 更高的稳定性和可靠性
随着Nvic的不断优化和改进,未来Nvic将实现更高的稳定性和可靠性,确保系统的稳定和安全运行。

十一、总结
Nvic作为一种重要的中断控制器,在嵌入式系统和实时系统中发挥着重要的作用。

通过本文的介绍,读者可以更清楚地了解Nvic的工作原理、应用场景和未来的发展趋势。

希望本文能够帮助读者更加全面地了解Nvic,提高在实际系统设计和应用中的理解和能力。

期待Nvic 在未来的发展中不断创新和完善,为各种嵌入式系统和实时系统提供更加稳定和高效的中断处理和管理。

相关文档
最新文档