3.15.嵌套中断,咬尾中断,晚到异常与中断延迟(1)
nvic嵌套向量中断控制器工作原理

一、引言Nvic嵌套向量中断控制器(Nested Vectored Interrupt Controller)是一种常见的中断控制器,它在嵌入式系统中扮演着重要的角色。
本文将介绍Nvic的工作原理,帮助读者更好地理解这一关键的硬件组件。
二、Nvic的基本概念Nvic是一种硬件组件,用于管理和分发系统中的中断请求。
在嵌入式系统中,当发生外部事件或者特定的处理器状态发生变化时,需要立即中断当前的程序执行,执行特定的中断服务程序。
而Nvic就是用来协调这些中断请求的,确保它们按照优先级和顺序得到正确的处理。
三、中断控制器的作用1.管理中断请求中断是在嵌入式系统中的一种重要的事件响应机制。
当外部设备(如传感器、通信接口等)产生需要处理的事件时,会向处理器发送中断请求。
而中断控制器就是负责接收、管理和分发这些中断请求的硬件组件。
2.中断优先级在一个嵌入式系统中,可能同时出现多个中断请求,此时中断控制器需要根据中断请求的优先级决定哪个中断将被优先处理。
Nvic通过优先级编码的方式,能够准确地确定中断的优先级,确保高优先级的中断能够得到及时处理。
四、Nvic的工作原理1.中断向量表Nvic通过中断向量表来实现对中断请求的管理。
中断向量表是一张表格,每个中断都有一个特定的中断向量号。
当中断控制器接收到中断请求时,根据中断向量号可以迅速定位到对应的中断服务程序的入口位置区域,从而进行中断处理。
2.中断优先级编码Nvic使用中断优先级编码的方式来确定中断的优先级。
在Nvic中,中断请求会按照其具体的中断向量号进行编码,从而确定其优先级。
当多个中断请求同时到达时,Nvic会根据优先级编码来决定哪个中断会被优先处理。
3.嵌套中断Nvic支持嵌套中断的机制,即在一个中断服务程序的执行过程中,如果遇到了更高优先级的中断请求,Nvic可以暂停当前中断服务程序的执行,转而处理更高优先级的中断请求。
这种机制可以确保高优先级的中断能够得到及时处理,提高系统的响应速度。
Cortex-M3咬尾中断与晚到中断

Cortex-M3咬尾中断与晚到中断【咬尾中断】在处理器在响应某些异常时,如果⼜发⽣其他异常,但它们优先级不够⾼,则它们会被阻塞。
那么,在当前的异常执⾏返回后,系统处理悬起的异常时,倘若还是先POP,然后⼜把POP处理的内容PUSH回去,那么就⽩⽩浪费CPU 时间了。
因此,Cortex-M3不会再POP这些寄存器,⽽是继续使⽤上⼀个异常已经PUSH好的结果,消除POP和PUSH操作的耗时。
这么⼀来,看上去好像后⼀个异常把前⼀个的尾巴要掉了,前前后后只执⾏了⼀次PUSH/POP操作。
于是,这两个异常之间的“时间沟”就变窄了很多,如图所⽰:和常规中断处理(ARM7)的⽐较:【晚到中断】Cortex-M3的中断处理还有另⼀个机制,它强调了优先级的作⽤,这就是“晚到的异常处理”。
当Cortex-M3对某异常的响应序列还处在早期:⼊栈的阶段,尚未执⾏其他服务程序时。
如果此时收到了更⾼优先级异常的请求,则本次⼊栈就成了⾼优先级中断做的了。
⼊栈后,将执⾏⾼优先级的异常服务程序。
可见,⾼优先级的异常虽然来晚了,却因为优先级⾼使得服务程序可以被先处理,低优先级异常的⼊栈操作则变成了为⾼优先级异常的⼊栈。
⽐如,若在响应某低优先级异常#1的早起,检测到了⾼优先级异常#2,则只要#2没有太晚,就能以“晚到中断”的⽅式处理,在⼊栈完毕后执⾏ISR#2。
如图所⽰:如果异常#2来得太晚,以⾄于已经执⾏了ISR#1的指令,则按普通的抢占处理,这会需要更多的处理器时间和额外32字节的堆栈空间。
在ISR#2执⾏完毕后,则以“咬尾中断”的⽅式来启动ISR#1的执⾏。
参考摘录:《Cortex-M内核系列和STM32-讲座2教程.pdf》《ARM Cortex-M3权威指南.pdf》。
关于单片机中断嵌套总结

关于单片机中断嵌套总结
什幺是单片机嵌套中断
所谓中断是处理事件的一个过程,这一过程一般是由计算机内部或外部某件紧急事件引起并向主机发出请求处理的信号,主机在允许的情况下响应请求,暂停正在执行的程序,保存好断点处的现场,转去执行中断处理程序,处理完中断服务程序后自动返回原断点处,继续执行原程序,这一处理过程称为中断。
以AT89S52为例,中断系统含有8个中断源,共有6个中断矢量:定时/计数器0、1、2,INT0、INT1和UART。
两级中断优先级,可实现两级中断嵌套。
用户可以很方便的通过软件实现对中断的控制。
既然系统含有8个中断源,就有可能出现数个中断源同时提出中断请求的情况,这样,设计人员必须事先根据它们的轻重缓急来为每个中断源确定CPU对其的响应顺序。
然而,对于中断优先级寄存器IP来说,只可能设定两级优先,即控制位为1时对应的中断源为高级中断,反之,控制位为0时对应的为低级中断。
LinkedIn下图为一声光报警电路,当按下S1时,蜂鸣器发音;当按下S2时,停止发音,但LED发光。
1、利用中断工作方式编写完整的单片机汇编语言程序。
嵌入式-中断实验

嵌入式-中断实验
嵌入式中断实验是一种用来测试和学习嵌入式系统中断功能的实验。
中断是嵌入式系统中常用的一种机制,用于处理紧急事件或高优先级任务。
通过中断,系统可以立即响应外部事件,中断当前正在执行的任务,执行与中断事件相关的代码,然后返回到原来的任务中继续执行。
在进行中断实验时,通常需要以下步骤:
1. 确定中断源:确定要模拟的中断事件,比如外部输入的触发事件、定时器到达时间等。
2. 配置中断控制器:根据硬件平台和实验要求,配置中断控制器的相应寄存器,使其能够正确地处理中断信号。
3. 编写中断服务程序(ISR):定义一个中断服务程序,用于
处理中断事件。
ISR应当对事件进行必要的处理,然后返回到
原来的任务中。
4. 测试和调试:连接硬件平台,运行实验程序,并进行测试和调试,确保中断功能正常工作。
5. 扩展和优化:根据需要,可以进一步扩展和优化中断功能,比如增加多个中断源,实现优先级控制,提高系统响应速度等。
通过嵌入式中断实验,可以深入了解中断机制的工作原理和应用方法,提高对嵌入式系统的理解和能力。
STM32中断嵌套方法

STM32中断嵌套方法先说明: 所有中断要放在同一个组里, 因为只有组确定了, 4位描述占先式优先级和副优先级的位数才可以确定.以上是总结, 下面是理解NVIC, 来自WWW~~~~~STM32-----NVIC(2012-05-13 14:45:56)转载▼NVIC——N ested V ectored I nterrupt C ontroller(嵌套中断向量控制器)STM32有43个channel的settable的中断源:AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4bits。
这4个bits用于分配pre-emption优先级和sub优先级,在STM32的固件库中定义如下://-------------------------------Preemption Priority Group ------------------------------------------------#define NVIC_PriorityGroup_0 ((u32)0x700) //0 bits for pre-emption priority 4 bits for subpriority#define NVIC_PriorityGroup_1 ((u32)0x600) //1 bits for pre-emption priority 3 bits for subpriority#define NVIC_PriorityGroup_2 ((u32)0x500) //2 bits for pre-emption priority 2 bits for subpriority#define NVIC_PriorityGroup_3 ((u32)0x400) // 3 bits for pre-emption priority 1 bits for subpriority#define NVIC_PriorityGroup_4 ((u32)0x300) //4 bits for pre-emption priority 0 bits for subpriority形象化的理解是:你是上帝,造了43个人,这么多人要分社会阶级和社会阶层了;因为“阶级”的词性比较重;“阶层”比较中性,所以pre-emption优先级->阶级;每个阶级内部,有一些阶层,sub优先级->阶层;如果按照NVIC_PriorityGroup_4这么分,就分为了16个阶级每个阶级有0个阶层;阶级高的人,可以打断阶级低的正在做事的人(嵌套),最多可以完成1个中断和15级嵌套。
嵌入式系统基础第7章中断和异常

为减少延时,ARM在快中断中采取了 两个措施: (1)专门为快中断FIQ设置了一个FIQ模式, 并为这个模式配置了较多的私有寄存器, 从而可使中断服务程序有足够的寄存
器来使用,而不必与被中断服务程序使用 同一组寄存器,这样就免去了因寄存器冲 突而必需的保护及恢复现场工作。
(2)ARM把FIQ的中断向量放在了中断 (异常)向量表末尾0X0000001C处,因此 它后面没有其它中断向量,允许用户将中 断服务车工许程序直接放在这里。
除了外部设备可以发出可以发出中断 请求之后,处理器内部也会有一些事件可 以发出中断请求,例如读取指令出错或在 进行除法运算时除数为零等。为了与外部 事件引起的中断相区别,人们把这种由内 部事件引起的中断叫做异常。
7.1.2
中断请求信号的屏蔽
处理器中用来屏蔽中断的积存器和开 关如下:
1、可屏ห้องสมุดไป่ตู้中断
1、低端和高端向量表
ARM有低端和高端两种向量表,用户可 以根据需要选用其中一种,如下所示:
ARM中断(异常)的各个向量在向量表 中的分配如下:
中断(异常) 复位(RESET) 未定义指令(UNDEF) 向量在低端向量表的地址 0x00000000 0x00000004 向量在高端向量表的地址 0xFFFF0000 0xFFFF0004
一般情况下,这个优先排队机构可能 在处理器中有一套,在中断控制器中也有 一套,甚至在借口电路中也会有一套。
(2)软件实现方法
就是把所有中断源的中断请求信号分 成两路,其中一路经“或”逻辑送到处理 器的中断请求输入端,而另一路则送入中 断接口电路经数据总线送入处理器。
中断源的软件查询法电路的接线如下 图所示:
异常/中断 复位(RESET) 未定义指令(UNDEF) 软中断(SWI) 地址 LR LR 说明 指向未定义指令的下一条指令 指向SWI指令的下一条指令
Cortex-M0微控制器概述及性能分析

Cortex-M0微控制器概述及性能分析目录•NXP 微控制器介绍•Cortex-M0介绍•LPC111x系列产品介绍•LPC111x微控制器性能分析•开发工具NXP 微控制器介绍NXP微控制器所有的微控制器都是不同的ARM公司提供了同样的物理IP–处理器核、内部总线和中断控制器等–但最终的结果是不一样的架构选择、实现、性能优化及电源管理等带来很大的不同–微控制器厂商的实现将会影响到芯片的性能、功耗和应用难度等例如:–Flash存储器性能–外设稳定性–集成度–调试功能改变微控制器世界Cortex-M0介绍ARM Cortex-M0处理器32为ARM RISC处理器–16位Thumb指令集功耗与面积高度优化–设计专用于低成本、低功耗场合中断现场自动保存–极低的进入与退出中断的软件开销确定的指令执行时间–指令总是同时执行Thumb指令集32位的操作码,16位的指令系统–应用于ARM7TDMI(‘T’代表Thumb)–自ARM处理器问世以来都支持Thumb指令集–更小的代码规模Thumb2指令集–处理器所有的操作都能在Thumb状态下完成–16位指令与32位指令并存–Cortex系列处理器都能支持指令集系统基于ARM7TDMI的16位Thumb指令系统–仅56条指令,且指令执行时间都是确定的–完成8、16或32位的数据传输只需一条指令Dhrystone –0.9DMIPS/MHz内部寄存器所有的寄存器都是32位的–特殊指令能够支持对8/16/32位数据的处理13个通用寄存器(R0 ~ R12)–R0–R7(低位寄存器)–R8 –R12(高位寄存器)3个特殊功能寄存器(R13 ~ R15)–堆栈指针R13(SP)–连接寄存器R14(LR)–程序计数器R15(PC)程序状态寄存器组(xPSR)指令行为绝大多数指令占用2字节的存储空间指令执行占用确定的时间–数据处理(例如加,移位,逻辑或)1个时钟周期内完成–数据传送(例如加载,存储)需2个时钟周期–分支转移指令只需3个时钟周期指令都是基于32位的数值操作–处理器的寄存器和算术逻辑单元(ALU)都是32位宽的!示例:16位乘法下面以对一个设备的10位模数转换器(ADC)操作处理的来作比较–转换数据基本的滤除处理操作需一次16位的乘法操作–对16位乘法操作对比如下嵌套向量中断控制器(NVIC)NVIC更有效地处理异常中断–集成于处理器内部,与CPU 内核紧密耦合–高效处理系统异常(Exceptions)和中断(Interrupts)NVIC具有以下特性–异常优先级设置–“咬尾中断”机制和晚到异常处理完全确定的异常处理时间–异常处理花销的周期总是保持一定–16个时钟周期的固定开销–特定寄存器用来消除不确定延迟只要会C就能编写程序中断具体行为当中断发生时,硬件自动将相关寄存器的值压入堆栈中断处理程序可完全用C语言编写–堆栈内容支持ARM架构C/C++函数调用标准复位后初始堆栈指针指向0x00处中断处理程序的编写传统途径异常向量表–分支取指顶级处理–异常重入处理中断处理程序的编写ARM Cortex-M体系NVIC自动处理–保存相关寄存器–中断优先级–中断嵌套中断服务程序(ISR)可直接用C语言编写–完全支持C语言指针向量–ISR就是一个C函数快速中断响应–软件开销更小等待中断(WFI),执行该指令退出睡眠模式软件控制睡眠模式ARM Cortex-M系列具很好的睡眠模式控制–极低的待机功耗–非常适用于电池便携设备–包含一个唤醒中断控制器(WIC)Sleep(睡眠)–内核时钟停止–NVIC继续对中断有效软件控制睡眠模式Deep sleep(深度睡眠)–WIC对指定中断有效–Cortex-M0可进入状态保持WIC唤醒信号传递给PMU(电源管理单元)–内核立即被唤醒–立即响应关键事件指令集比较LPC111x系列产品介绍LPC111x的特点电源效率高性能优越应用简单LPC111x Cortex-M0的配置单周期乘法器小端模式操作系统扩展–24位系统节拍–堆栈指针寄存器–高级访问指令调试–支持串行调试(SWD),–不支持串行线跟踪输出(SWO)–支持4个断点,2个观察点LPC111x系列芯片信息LPC111x的系统框图存储系统M0核具有零延迟的32位接口Thumb指令集(16位)Flash总线宽度和系统总线宽度匹配–使用自定义时间的读时序–相比两次16位读取操作,一次32位读取消耗的电流更小–增强处理器性能串行接口UART(通用异步收发器)–用于控制波特率的小数分频器,并具赖以实现软件或硬件流控制的自动波特率检测能力–16字节的接收和发送FIFO可配置触发点–支持EIA-485/RS-485的9位模式·同时支持9位模式的软件地址检测和自动地址检测·自动方向控制–完全支持Modem控制串行接口I2C接口(Inter-Integrated Circuit)–可配置为主机、从机或主/从机–主、从机之间双向数据传输–支持快速模式Plus,符合I2C总线规范(运行速度高达1MHz)–可编程时钟允许I2C可以在不同的传输速率下运行–支持监控模式–能同时响应多个I2C从机地址I2C输出端衰减特性串行接口SSP控制器(Synchronous Serial Communication)–8帧收发FIFO–每帧4 ~ 16位–兼容多种总线协议·SPI总线(Motorola)·SSI总线(TI)·Microwire总线(National)–最大速率·25Mbits/s(主机模式)·6Mbits/s(从机模式)定时器/计数器2个通用32位可编程定时器/计数器–具有捕获输入、比较输出功能–可配置为作计数器或定时器模式–匹配输出可执行翻转电平、输出高电平、输出低电平或不执行任何操作–PWM模式2个通用16位可编程定时器/计数器定时器/计数器系统节拍定时器(系统内置)32位WDT(看门狗定时器)–若未周期性重载则复位芯片–支持调试模式–用作系统时钟源(看门狗振荡器、内部RC振荡器、主振荡器)LPC111x时钟发送模块框图LPC111x时钟特征输出外部时钟–任何一个内部时钟均可作为输出外部时钟源–集成时钟分频器通用输入输出口(GPIO)多达42个高速GPIO(LQFP48)14个可产生中断的数字端口所有引脚都可配置为使能/禁止的上拉/下拉功能14个可产生中断的数字端口支持总线保持模式特定端口支持大电流输出5V电压下仍能正常工作A/D转换器(ADC)10位逐次逼近式模数转换器8个引脚复用为A/D输入脚具有掉电模式测量范围为0V ~ VDD(3V3)10位转换时间大于等于2.44us一个或多个输入的Burst转换模式可选择由输入跳变或定时器匹配信号触发转换每个通道都有各自的转换结果寄存器,大大减小中断开销复位源RESETN引脚复位看门狗(WDT)复位上电复位(POR)掉电检测复位(BOD)–4级电压监测–BOD触发产生有效中断信号,发到NVIC –BOD触发复位信号功率控制睡眠模式–内核时钟停止–复位或者中断都会将CPU内核唤醒–外设在CPU睡眠模式期间继续运转深度睡眠模式–所有时钟停止(状态被保存)–多种功率选择深度掉电模式–整个芯片电源被关闭(状态丢失)–时钟域寄存器组保持不变。
ARMCortex-M3权威指南-基础(1)

指令和存储总线:有两条代码存储区总线负责对代码存储区的访问,分别是 I-Code 总线和 D-Code 总线。前者用于取指,后者用于查 表等操作,它们按最佳执行速度进行优化。 系统总线:用于访问内存和外设,覆盖的区域包括 SRAM,片上外设,片外 RAM,片外扩展设备,以及系统级存储区的部分空间。 私有外设总线:负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。
2. CONTROL[0]:仅当在特权级下操作时才允许写该位。一旦进入了用户级,唯一返回特权级的途径,就是触发一个(软)中断,再由 服务例程改写该位。
操作模式和特权级别
操作模式:处理者模式(handler mode)和线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服 务例程的代码——包括中断服务例程的代码。 特权分级:特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及 到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。
特权级和用户级区别:在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特 权级下执行。复位后,处理器默认进入线程模式,特权极访问。在特权级下,程序可以访问所有范围的存储器并且可以执行所有指 令。
特权级和用户级切换:在特权级下的程序可以为所欲为,但也可能会把自己给玩进去——切换到用户级。一旦进入用户级,再想回来 就得走“法律程序”了——用户级的程序不能简简单单地试图改写 CONTROL 寄存器就回到特权级,它必须先“申诉”:执行一条系统调用 指令(SVC)。这会触发 SVC 异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改 CONTROL 寄存器,才能在用户级的线程模式下重新进入特权级。事实上,从用户级到特权级的唯一途径就是异常:如果在程序执行 过程中触发了一个异常,处理器总是先切换入特权级, 并且在异常服务例程执行完毕退出时,返回先前的状态。 引入特权级和用户级目的:能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存 器,因而系统的可靠性得到了提高。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CM3中断的嵌套、尾链、晚到与延迟
用户程序
优先级3 中断1
优先级2 中断2
继续压栈
中断1
压栈
中 断
中断2
1的
入
迟来
出栈
口 地
出
址
栈
CM3中断的嵌套、尾链、晚到与延迟
中断延迟 从检测到某中断请求,到执行了其服务例程的第一条指令时,所经
➢ 对于除法指令和双字传送指令( LDRD/STRD ),CM3将为了保证中断及时 响应而取消它们的执行,待返回后重新开始;
➢ 对于多寄存器传送指令(LDM/STM) ,为了加速中断的响应,CM3支持指令 执行的中止和继续。
感谢
谢谢,精品课件
资料搜集
ARM Cortex-M3 的STM32系列 嵌套中断,咬尾中断,晚到异常与中断延迟(1)
CM3中断的嵌套、尾链、晚到与延迟
中断嵌套 在Cortex-M3内核以及NVIC,已经内建了对中断嵌套的支持:➢ NVIC会排出优先级解码的顺序; ➢ 自动的硬件入栈和出栈。
注意:使用中断嵌套时,必须仔细计算主堆栈容量,避免堆栈溢出。
过的时间。 在CM3中,若存储器系统够快,且总线系统允许入栈与取指同时进行,
同时该中断可以立即响应,则中断延迟是固定的12周期。 处理尾链中断时,省去了堆栈操作,因此切入新异常服务例程的延迟可
以缩短至6周期。
CM3中断的嵌套、尾链、晚到与延迟
为了不影响中断延迟,对于需要较多的周期才能完成的指令,CM3采用了 以下两种处理方法:
CM3中断的嵌套、尾链、晚到与延迟
尾链中断
当上一个异常处理返回, Cortex-M3响应挂起的异常时,为了 避免浪费CPU时间,继续使用上一个异常已经入栈好的寄存器数据。两 个异常只执行了一次入栈/出栈操作。
Cortex-M3利用“尾链中断”缩短了挂起中断的延迟时间,提高 中断响应速度。
CM3中断的嵌套、尾链、晚到与延迟
用户程序
优先级2 中断1
优先级3 中断2
压栈
无压栈
中断1
中断2
中断1 结束
出栈
如果此时中断1 已经 完成,不出栈也不压 栈,直接跳至中断2 程序
尾链中断也叫咬尾中 断
CM3中断的嵌套、尾链、晚到与延迟
晚到的异常处理
当异常产生时,处理器会接受异常请求并开始入栈操作。若在入栈操 作期间产生了另外一个更高优先级的异常,则后到的高优先级异常会首先得 到服务。