导言
Cortex—M3是ARM公司第一款根据 ARMv7一M的微操控器内核,在指令履行、反常操控、时钟办理、盯梢调试和存储维护等方面相关于ARM7有很大的差异。尤其在反常处理机制方面有很大的改善,其反常呼应只需要12个时钟周期。NVIC(Nested Vectored Inteirupt Contmller,嵌套向量中止操控器)是Cortex—M3处理器的一个紧耦合部件,能够装备1~240个带有256个优先级、8级抢占优先权的物理中止,为处理器供给超卓的反常处理才干。一起,抢占(pre-emption)、尾链(tail—chaining)、迟到(1ate— arriving)技能的运用,大大缩短了反常事情的呼应时刻。
反常或许中止是处理器呼应体系中突发事情的一种机制。当反常产生时,Cortex—M3经过硬件主动将编程计数器(PC)、编程状况寄存器(XPSR)、链接寄存器(LR)和R0~R3、R12等寄存器压进仓库。在Dbus(数据总线)保存处理器状况的一起,处理器经过Ibus(指令总线)从一个能够从头定位的向量表中识别出反常向量,并获取ISR函数的地址,也便是维护现场与取反常向量是并行处理的。一旦压栈和取指令完结,中止服务程序或毛病处理程序就开端履行。履行完ISR,硬件进行出栈操作,中止前的程序康复正常履行。图1为Cortex—M3处理器的反常处理流程。
1 Cortex—M3反常类型
同ARM7比较,Cortex—M3在反常的分类和优先级上有很大的差异,如表1所列。
Cortex—M3将反常分为复位、不行屏蔽中止、硬毛病、存储办理、总线毛病和使用毛病、SVcall、调试监督反常、PendSV、SysTick以及外部中止等。Cortex—M3选用向量表来确认反常的进口地址。与大多数其他ARM内核不同,Cortex—M3向量表中包括反常处理程序和ISR的地址,而不是指令。复位处理程序的初始仓库指针和地址有必要别离坐落0xO和Ox4。这些值在随后的复位中被加载到恰当的CPU寄存器中。向量表偏移操控寄存器将向量表定位在CODE(Flash)或SRAM中。复位时,默许状况下为CODE形式,但能够从头定位。反常被承受后,处理器经过Ibus查表获取地址,履行反常处理程序。
在Cortex—M3的优先级分配中,较低的优先级值具有较高的优先级。NVIC将反常的优先级分红两部分:抢占优先级(pre—emption priority)部分和子优先级(sub—priority)部分,能够经过中止请求/复位操控寄存器来确认两个部分所占的份额。抢占优先级和子优先级一起效果确认了反常的优先级。抢占优先级用于决议是否产生抢占,一个反常只要在抢占优先级高于另一个反常的抢占优先级时才干产生抢占。当多个挂起反常具有相同的抢占优先级时,子优先级起效果。经过NVIC设置的优先级权限高于硬件默许优先级。当有多个反常具有相同的优先级时,则比较反常号的巨细,反常号小的被优先激活。
2 Cortex—M3反常处理
2.1 反常的进入
当一个反常呈现今后,Cortex一M3处理器由硬件经过Dbus保存处理器状况,一起经过Ibus读取向量表中的SP,更新PC和LR,履行中止服务子程序。
为了应对仓库操作阶段到来后的更高优先级反常,Cortex—M3支撑迟到和抢占机制,以便对各种或许事情做出确认性的呼应。
抢占是一种对更高优先级反常的呼应机制。Cortex—M3反常抢占的处理进程如图2所示。当新的更高优先级反常到来时,处理器打断当时的流程,履行更高优先级的反常操作,这样就产生了反常嵌套。迟到是处理器用来加快抢占的一种机制。假如一个具有更高优先级的反常在上一个反常履行压栈期间抵达,则处理器保存状况的操作持续履行,由于被保存的状况关于两个反常都是相同的。可是,NV%&&&&&%立刻获取的是更高优先级的反常向量地址。这样在处理器状况保存完结后,开端履行高优先级反常的ISR。