购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.9 嵌套中断向量控制器

可配置程度较高的NVIC是Cortex-M3处理器中一个重要组成部分,能够为处理器提供出色的中断处理能力。进行NVIC的标准实现过程中,它提供一个非屏蔽中断(NMI)和32个通用物理中断,这些中断带有8级的抢占优先权。NVIC可以通过简单的综合选择配置为1~240个物理中断中的任何一个,并带有多达256个优先级。

Cortex-M3处理器使用一个可以重复定位的向量表,表中包含了将要执行的函数的地址,可供具体的中断处理器使用。中断被接收之后,处理器通过指令总线接口从向量表中获取地址。向量表复位时指向零,编程控制寄存器可以使向量表重新定位。为了减少门计数并提高系统的灵活性,Cortex-M3已从ARM7处理器的分组映像寄存器异常模型升级到了基于堆栈的异常模型。当异常发生时,编程计数器、编程状态寄存器、链接寄存器和R0~R3、R12等通用寄存器将被压进堆栈。

在数据总线对寄存器压栈的同时,指令总线从向量表中识别出异常向量,并获取异常代码的第一条指令。一旦压栈和取指完成,中断服务程序或故障处理程序就开始执行,随后寄存器自动恢复,中断了的程序也因此恢复正常的执行。由于可以在硬件中处理堆栈操作,Cortex-M3处理器免去了在传统的C语言中断服务程序中为了完成堆栈处理所要编写的汇编程序包,这使应用程序的开发变得更加简单。

NVIC支持中断嵌套(压栈),允许通过提高中断的优先级对中断进行提前处理。它还支持中断的动态优先权重置。优先权级别可以在运行期间通过软件进行修改。正在处理的中断会防止被进一步激活,直到中断服务程序完成,所以在改变它们的优先级的同时,也避免了意外重新进入中断的风险。

在背对背中断情况中,传统的系统将重复状态保存和状态恢复的过程两次,导致了延迟的增加。Cortex-M3处理器在NVIC硬件中使用末尾连锁(Tail-chain)技术简化了激活的和未决的中断之间的移动。末尾连锁技术把通常需要用30个时钟周期才能完成的连续的堆栈弹出和压入操作替换为6个周期就能完成的指令取指,实现了延迟的降低。处理器状态在进入中断时自动保存,在退出中断时自动恢复,比软件执行用时更少,大大提高了频率为100MHz的子系统的性能。

NVIC还采用了支持集成睡眠模式的Cortex-M3处理器的电源管理方案。立即睡眠(Sleep-now)模式被等待中断(WFI)或等待事件(WFE)指令调用,即可以使内核立即进入低功耗模式,异常被挂起。退出睡眠(Sleep-on-exit)模式在系统退出最低优先级的中断服务程序时使其进入低功耗模式。内核保持睡眠状态直到遇上另一个异常。由于只有一个中断可以退出该模式,所以系统状态不会被恢复。系统控制寄存器中的SLEEPDEEP位如果被置位,则该位可以用来通过时钟门控制内核及其他系统部件,以获得最理想的节电方案。

NVIC还集成了一个递减计数的24位系统嘀哒(SysTick)定时器,可定时产生中断,提供理想的时钟来驱动实时操作系统或其他预定的任务。

NVIC的使用将在异常与中断处理一章详细讲解。 29t9m7iIYuS0uzHTDswOMdC9BrKy1G6Gz1WycnH3l6YbZQHlGPg9VNVmHHiZHAfZ

点击中间区域
呼出菜单
上一章
目录
下一章
×