6 ARM中断机制

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

Cortex-M3中断机制
例如:如果只是使用了3个位来表达优先级,则优先级配置寄 存器的结构如下图所示:
图中,[4:0]没有被实现,所以读它们总是返回0,写它们则 忽略写入值。对于3个位的情况,能够使用的8个优先级分 别为:0x00(最高),0x20, 0x40, 0x60, 0x80, 0xA0, 0xC0以及0xE0。
在处理器进入服务例程后对中断活跃状态的设置
Cortex-M3中断机制
如果中断源咬住请求信号不放,该中断就会在其上次服务例程返回后再次被 置为悬起状态,如图所示:
一直维持的中断请求导致服务例程返回后再次悬起该中断
Cortex-M3中断机制
另一方面,如果某个中断在得到响应之前,其请求信号以若干的脉冲的方式呈现, 则被视为只有一次中断请求,多出的请求脉冲全部错失这是中断请求太快,以致 于超出处理器反应限度的情况,如图所示:
Cortex-M3中断机制
Cortex-M3中断机制
抢占优先级决定了抢占行为:当系统正在响应某中断L时,如果来了抢占 优先级更高的中断H,则H可以抢占L。子优先级则用于发生在同时具有相同 抢占优先级的中断之间,首先响应子优先级高的中断。 这种优先级分组有如下规定:子优先级至少是1个位,因此抢占优先级最 多为7位,这就解释了为什么256级可编程中断,最多只有128个抢占优先级。 Cortex-M3允许从MSB(7比特)处分组,此时所有的位均表达子优先级, 没有任何表达抢占优先级。
中断在得到处理器响应之前被清除悬起状态:
Cortex-M3中断机制
当某中断的服务例程开始执行时,就称此中断进入了“活跃”状态,并且其悬 起位会被硬件自动清除,如下图所示。在一个中断活跃后,直到其服务例程执行完 毕,并且中断返回后,才能对该中断的新请求予以响应。当然,新请求在得到响应 时,亦是由硬件自动清零其悬起标志位。中断服务例程也可以在执行过程中把自己 对应的中断重新悬起。
中断的基本概念
外 设
wk.baidu.com
发申请
中断服务程序
发申请 中断服务程序
中断的基本概念
中断源
能够引起中断的原因,或能够发出中断请求信号的外设。 外部设备通过电信号的变化来产生中断成为硬中断或者外 部中断。 由软件本身产生,称为软中断或内部中断。
外部中断 (硬中断) 内部中断
可屏蔽中断
EXIT线 NMI
不可屏蔽中断 异常中断 软中断
NVIC
Cortex-M3支持包括16-4-1=11个系统异常, 和最多240个外部中断。具体使用这240个中断 源中的多少个,则由芯片制造商决定。由外设 产生的中断信号,除了SysTick的之外,全部连 接到NVIC的中断输入信号线。下表列出了 Cortex-M3可以支持的所有异常和中断。
Cortex-M3中的异常类型:
(时间随机, 与正在执行的 程序无关)
(Reset、故障中断) SVC指令(与函数功能类似)
(软中断)
(因执行指令而引起)
中断的基本概念
中断的处理流程
① 完成当前的指令
② 将当前微处理器状态和即将执行的指令地址保存(有的用 堆栈,有的用寄存器) ③ 关中断 ④ 根据中断类型取出相应的中断处理程序地址 ⑤ 执行中断处理程序:先进行现场保护,再执行中断处理操 作,最后恢复现场。 ⑥ 中断处理程序结束时,执行返回指令,将微处理器状态恢 复到进入中断前的值,并将程序执行的地址变更为进入中 断时保存的指令地址,使当前工作继续进行
NVIC
目录
中断的基本概念
NVIC
Cotex-M3中断机制
中断系统设置
STM32F103中断演示实例
Cortex-M3中断机制
优先级: 在Cortex-M3中,优先级对于中断来说很关键,它决定一 个中断是否能被掩蔽,以及在未掩蔽的情况下何时可以响 应。优先级的数值越小,则优先级越高。Cortex-M3支持中 断嵌套,使得高优先级中断会抢占低优先级中断。有3个系 统异常,有固定的优先级,并且它们的优先级是负数,从 而高于其它所有异常和中断。所有其它异常和中断的优先 级都是可编程的。 原则上, Cortex-M3支持3个固定的高优先级和多达256 级的可编程优先级,并且支持128级抢占。但是,绝大多数 Cortex-M3芯片都会精简设计,以致实际上支持的优先级数 会更少。通过裁掉表达优先级的几个低端有效位,以减少 优先级的级数。
Cortex-M3在内核水平上搭载了一颗中断控制器-嵌套向量中断控制器NVIC(Nested Vectored Interrupt Controller)。其与内核是紧耦合的,提供如下功能 : • 可嵌套的中断支持 • 向量中断支持 • 动态优先级调整支持 • 中断延迟大大缩短 • 中断可屏蔽
NVIC
可嵌套中断支持: 可嵌套中断支持覆盖了所有的外部中断和绝大多数的系 统异常。这些中断可以赋予不同的优先级。当前的优先级 被存储在xPSR的专用字段中。当一个中断发生时,硬件会 自动比较该中断的优先级是否比当前的优先级更高。如果 发现更高优先级的中断到来,处理器就会中断当前的ISR, 来响应新来的中断。 向量中断支持: 当开始响应一个中断后,Cortex-M3会自动定位一张向量 表,并且根据中断号从表中找出ISR的入口地址,然后跳转 执行。不需要像以前的ARM由软件来分辨到底是哪个中断发 生了,也无需半导体厂商提供私有的中断控制器。中断延 迟时间大为缩短。
Cortex-M3中断机制
入栈: 响应中断的第一个步骤,就是自动保存现场:依次把xPSR, PC, LR, R12以及R3-R0由硬件自动压入适当的堆栈中:如果当响 应中断时,当前的代码正在使用PSP,则压入PSP,也就是使用 进程堆栈;否则就压入MSP,使用主堆栈。一旦进入了服务例 程,就将一直使用主堆栈。
中断请求过快导致一部分请求错失的情况
Cortex-M3中断机制
如果在服务例程执行时,中断请求释放了,但是在服务例程返回前又重新被置 为有效,则CM3会记住此动作,重新悬起该中断,如图所示:
在执行ISR时中断悬起再次发生
Cortex-M3中断机制
中断响应序列:
当Cortex-M3开始响应一个中断时,会依次进行以下三个 步骤: 入栈: 将8个寄存器的值压入栈 取向量: 从向量表中找出对应的中断服务程序入口地址 选择堆栈指针MSP/PSP, 更新堆栈指针SP,更新链接寄存器 LR,更新程序计数器PC。
Cortex-M3中断机制
在计算抢占优先级和子优先级的有效位数时,必须先求出以下列值: 芯片实际使用了多少位来表达优先级。 优先级组是如何划分的。 例如:如果只使用3个位来表达优先级([7:5]),并且优先级组的值是5(从 5比特处分组),则得到4级抢占优先级,且在每个抢占优先级的内部有2个 子优先级,如下图所示:
由于地址0处应该存储引导代码,因此它通常映射到Flash或者是ROM器件, 并且它们的值不得在运行时改变。然而,为了支持动态重分发中断,CortexM3允许向量表重定位—从其它地址处开始定位各异常中断向量。这些地址对 应的区域可以是代码区,但更多的是在RAM区。在RAM区就可以修改向量的 入口地址。为了实现这个功能,NVIC中有一个寄存器,称为向量表偏移量寄 存器(VTOR),通过修改它的值就可以重定位向量表。
Cortex-M3中断机制
中断输入及悬起:
当中断输入脚被置为有效(assert)后,该中断就被悬起。即使后来中断源撤 消了中断请求,已经被标记成悬起的中断也被记录下来。到了系统中它的优先级最 高的时候,就会得到响应。 如下图所示:
中断悬起示意图
Cortex-M3中断机制
但是,如果在某个中断得到响应之前,其悬起状态被清除了(例如,在PRIMASK 或FAULTMASK置位的时候软件清除了悬起状态标志),则中断被取消,如下图所 示:
中断的基本概念
中断的处理流程
• 中断响应: CPU暂停当前工作而转向执行相应的事件处理程序称为中断 响应。 • 中断处理程序: 其相应的事件处理程序称为中断处理程序或中断服务程序。 • 断点 当前工作的暂停之处称为断点。 • 现场: 当前处理器所处的状态称为现场。 • 中断返回: 当CPU处理完中断处理程序后将返回断点,继续当前的工作, 这称为中断返回。
Cortex-M3中断机制
抢占优先级和子优先级: Cortex-M3将256级优先级按位分成高低两段,分别称为 抢占优先级和子优先级。 NVIC中有一个寄存器是应用程序中断和复位控制寄存器 (AIRCR),其中有一个位段名为“优先级组”。该位段的 值对每一个优先级可配置的中断和异常都有影响—将其优 先级分为2个位段:MSB所在位段对应抢占优先级,而LSB所 在位段对应子优先级。下图为控制寄存器(AIRCR)和优先 级表达位数和分组的关系。
如果优先级完全相同的多个中断同时悬起,则先响应中断编号最小的那一个。 例如, 当IRQ #3的优先级与IRQ #5的优先级相同时,IRQ #3会比IRQ #5先得到 响应。
Cortex-M3中断机制
向量表:
当发生了中断并且要响应它时,Cortex-M3需要定位其服务程序的入口地 址。这些入口地址均在向量表中。默认情况下,Cortex-M3认为该表位于0地 址处,且各向量占用4字节。如下表所示:
Lecture 07: Cortex-M3中断控制系统
目录
中断的基本概念
NVIC
Cotex-M3中断机制
中断系统设置
STM32F103中断演示实例
中断的基本概念
定义
中断是指CPU在正常执行程序的过程中,由于 内部/外部事件或由程序的预先安排,引起CPU暂时 中断当前程序的运行而转去执行为内部/外部事件 或预先安排的事件服务的子程序,待中断服务子程 序执行完毕后,CPU再返回到暂停处(断点)继续 执行原来的程序。 微处理器的中断功能是微处理器本身功能的外 部逻辑。 实现中断功能的控制逻辑称为中断机构或中断 系统。
NVIC
动态优先级调整支持: 软件可以在运行的时期更改中断的优先级。 中断延迟大大缩短: Cortex-M3为了缩短中断延迟,引入了好几个新特性。包 括自动的现场保护和恢复,以及其他的措施(“咬尾中断 ( Tail-Chaining Interrupts ) ” 和 “ 晚 到 中 断 (Late Arrival Interrupts)”),用于缩短中断嵌套时的 ISR 间 延迟。
中断为了解决事件的优先级问题,对中断也采用优先级处 理策略
高优先级的中断可以暂停正在进行的低优先级中断的中断 处理程序
只有高优先级的中断完成后,低优先级中断的处理程序才 能继续进行
目录
中断的基本概念
NVIC
Cotex-M3中断机制
中断系统设置
STM32F103中断演示实例
NVIC
Cortex-M3中断机制
向量表偏移量寄存器(VTOR)定义如下图所示:
注意:向量表的起始地址是有要求的:必须先求出系统中共有多少个向量, 然后把这个数字向上“圆整”到2的整次幂,而起始地址必须对齐到后者的 边界上。 例如:如果一共有32个中断,则共有32+16(系统异常)=48个向量,向上圆 整到2的整次幂后值为64,因此向量表重定位的地址必须能被64*4=256整除, 从而合法的起始地址可以是:0x0, 0x100, 0x200等。 如果需要动态地更改向量表,则对于任何器件来说,向量表的起始处都必 须包含以下向量: • 主堆栈(MSP)的初始值 • 复位向量 • NMI • 硬fault服务例程
中断的基本概念
中断的处理流程
• • • • • • •
中断请求 中断响应 断点保护 现场保护 中断处理 现场恢复 中断返回(断点恢复)
中断的基本概念
中断的嵌套
中断系统正在执行一个中断服务时,有另一个优先级更高 的中断提出中断请求,这时会暂时终止当前正在执行的级别 较低的中断源的服务程序,去处理级别更高的中断源,待处 理完毕,再返回到被中断了的中断服务程序继续执行,这个 过程就是中断嵌套。
Cortex-M3中断机制
假设入栈开始时,SP的值为N,则在入栈后,堆栈内部的变化如下表所示。又 因为AHB接口上的流水线操作本性,地址和数据都在经过一个流水线周期之后才进 入。另外,在自动入栈的过程中,把寄存器写入堆栈内存的时间顺序,并不是与 写入的空间顺序相对应的。但是机器会保证:正确的寄存器将被保存到正确的位 置,如下图所示。
相关文档
最新文档