收藏 分销(赏)

2ARM体系结构.pptx

上传人:a199****6536 文档编号:4841891 上传时间:2024-10-14 格式:PPTX 页数:83 大小:1.60MB
下载 相关 举报
2ARM体系结构.pptx_第1页
第1页 / 共83页
2ARM体系结构.pptx_第2页
第2页 / 共83页
点击查看更多>>
资源描述
第2章ARM体系结构v帮助初学者深入了解CPU的运作机制及其性能;v本章着眼于Cortex-M3内核,处理器状态与模式,内部寄存器,特殊功能寄存器,异常、中断及其向量表和存储系统,为成为一名应用工程师打下基础。本章导读目录目录v2.1ARM体系结构的特点体系结构的特点v2.2各各ARM体系结构版本体系结构版本v2.3Cortex-M3处理器模式处理器模式v2.4Cortex-M3内部寄存器内部寄存器v2.5Cortex-M3处理器异常处理器异常v2.6STM32存储器组织存储器组织v2.7调试接口简介调试接口简介v作业作业目录目录v2.1ARM体系结构的特点体系结构的特点v2.2各各ARM体系结构版本体系结构版本v2.3Cortex-M3处理器模式处理器模式v2.4Cortex-M3内部寄存器内部寄存器v2.5Cortex-M3处理器异常处理器异常v2.6STM32存储器组织存储器组织v2.7调试接口简介调试接口简介v作业作业2.1ARM体系结构的特点ARM处理器为RISC芯片,其简单的结构使ARM内核非常小,这使得器件的功耗也非常低,它具有以下经典RISC的特点:v大的、统一的寄存器文件;v装载/保存结构,数据处理操作只针对寄存器的内容,而不直接对存储器进行操作;v简单的寻址模式;v通用和固定长度的指令域,简化了指令的译码;v每条数据处理指令可同时包含算术逻辑单元(ALU)的运算和移位处理,实现ALU和移位器的最大利用;v使用地址自增和自减的寻址方式,优化程序循环;v多寄存器装载和存储指令实现最大数据吞吐量;v大多数指令的条件执行,实现最快速的代码执行。目录目录v2.1ARM体系结构的特点体系结构的特点v2.2各各ARM体系结构版本体系结构版本v2.3Cortex-M3处理器模式处理器模式v2.4Cortex-M3内部寄存器内部寄存器v2.5Cortex-M3处理器异常处理器异常v2.6STM32存储器组织存储器组织v2.7调试接口简介调试接口简介v作业作业2.2各ARM体系结构版本v为了清楚地表达每个ARM应用实例所使用的指令集,ARM公司定义了8种主要的ARM指令集体系结构版本,以版本号V1V8表示。ARM处理器架构进化史处理器架构进化史性能性能指令集演进图指令集演进图从从V7架构(架构(Cortex系列)开始,内核架构首次从单一款式系列)开始,内核架构首次从单一款式变为三种款式。变为三种款式。ARMV7架构:架构:vCortex-A系列(系列(V7-A):设计用于高性能的):设计用于高性能的“开放应用平开放应用平台台”越来越接近电脑。越来越接近电脑。Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A15、Cortex-A17;vCortex-R系列(系列(V7-R):用于高端的嵌入式系统,尤其是):用于高端的嵌入式系统,尤其是那些带有实时要求的那些带有实时要求的又要快又要实时。又要快又要实时。Cortex-R4、Cortex-R5、Cortex-R7、Cortex-R8;vCortex-M系列(系列(V7-M):用于深度嵌入到单片机风格的系):用于深度嵌入到单片机风格的系统中。统中。Cortex-M0(M0+)、)、Cortex-M1、Cortex-M3(本(本课程的主角)、课程的主角)、Cortex-M4。ARMV8架构架构vV8-A:将64位架构支持引入ARM架构中,其中包括:64位通用寄存器、SP(堆栈指针)和PC(程序计数器)64位数据处理和扩展的虚拟寻址。两种主要执行状态:AArch64-64位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持AArch32-32位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持支持三个主要指令集:A32、T32、A64成员有:成员有:Cortex-A32(32位)、位)、Cortex-A35、Cortex-A53、Cortex-A57、Cortex-A72、Cortex-A73。vV8-R:暂无:暂无vV8-M:Cortex-M7目录目录v2.1ARM体系结构的特点体系结构的特点v2.2各各ARM体系结构版本体系结构版本v2.3Cortex-M3处理器模式处理器模式v2.4Cortex-M3内部寄存器内部寄存器v2.5Cortex-M3处理器异常处理器异常v2.6STM32存储器组织存储器组织v2.7调试接口简介调试接口简介v作业作业v提示:接下来的提示:接下来的3节内容与课本内容不一致,将介绍节内容与课本内容不一致,将介绍CM3的内核原理。下图为的内核原理。下图为CM3的组成框图。的组成框图。2.3Cortex-M3处理器模式v传统的传统的ARMARM处理器支持处理器支持7 7种模式,见课本表种模式,见课本表2.12.1,较为复杂。,较为复杂。vCortex-M3Cortex-M3处理器支持处理器支持2 2种工作模式:种工作模式:处理模式处理模式(Handler Handler ModeMode)和)和线程模式线程模式(Thread ModeThread Mode)。)。v在复位时处理器进入线程模式,异常返回时也会进入该模式。在复位时处理器进入线程模式,异常返回时也会进入该模式。特权和用户(非特权)级代码能够在线程模式下运行。特权和用户(非特权)级代码能够在线程模式下运行。v出现异常时,处理器进入处理模式,在处理模式中,所有代出现异常时,处理器进入处理模式,在处理模式中,所有代码都是特权访问的。码都是特权访问的。v引入两个模式的本意,是用于区别普通应用程序的代码和异引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码常服务例程的代码包括中断服务例程的代码。包括中断服务例程的代码。1.工作模式(工作模式(ProcessorMode)vCortex-M3处理器有处理器有2种工作状态:种工作状态:vThumb状态状态:这是:这是16位和位和32位半字对齐位半字对齐Thumb和和Thumb-2指令的正常执行状态;指令的正常执行状态;v调试状态调试状态:当处理器停机调试时进入该状态。:当处理器停机调试时进入该状态。vCM3处理器不支持处理器不支持ARM指令,没有指令,没有ARM状态。状态。2.工作状态工作状态vCortex-M3处理器支持两种特权分级:处理器支持两种特权分级:特权级特权级(Privileged)和和非特权级(非特权级(Unprivileged,也叫用户级),也叫用户级)。v代码可以是特权执行或非特权执行,非特权执行时对有些资代码可以是特权执行或非特权执行,非特权执行时对有些资源的访问受到限制或不允许访问,特权执行可访问所有资源。源的访问受到限制或不允许访问,特权执行可访问所有资源。v通过引入特权级和用户级,就能够在硬件水平上限制某些不通过引入特权级和用户级,就能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存器,因而系统的可靠性得到了提高。进一步地,及要害的寄存器,因而系统的可靠性得到了提高。进一步地,如果配了如果配了MPU(存储器保护单元),它还可以作为特权机(存储器保护单元),它还可以作为特权机制的补充制的补充保护关键的存储区域不被破坏,这些区域通常保护关键的存储区域不被破坏,这些区域通常是操作系统的区域。是操作系统的区域。v举例来说,操作系统的内核通常都在特权级下执行,所有没举例来说,操作系统的内核通常都在特权级下执行,所有没有被有被MPU禁掉的存储器都可以访问。在操作系统开启了一禁掉的存储器都可以访问。在操作系统开启了一个用户程序后,通常都会让它在用户级下执行,从而使系统个用户程序后,通常都会让它在用户级下执行,从而使系统不会因某个程序的崩溃或恶意破坏而受损。不会因某个程序的崩溃或恶意破坏而受损。3.特权分级(特权分级(PrivilegeLevels)v在特权级下的程序可以为所欲为,但也可能会把自己给玩进在特权级下的程序可以为所欲为,但也可能会把自己给玩进去去切换到用户级。一旦进入用户级,再想回来就得走切换到用户级。一旦进入用户级,再想回来就得走“法律程序法律程序”了了用户级的程序不能简简单单地试图改写用户级的程序不能简简单单地试图改写CONTROL寄存器就回到特权级,它必须先寄存器就回到特权级,它必须先“申诉申诉”:执行:执行一条系统调用指令一条系统调用指令(SVC)。这会触发。这会触发SVC异常,然后由异异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改进入,则异常服务例程修改CONTROL寄存器,才能在用户寄存器,才能在用户级的线程模式下重新进入特权级。级的线程模式下重新进入特权级。v事实上,从用户级到特权级的唯一途径就是异常:如果在程事实上,从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状态(也并且在异常服务例程执行完毕退出时,返回先前的状态(也可以手工指定返回的状态)。可以手工指定返回的状态)。合法的工作模式和特权级别转换图合法的工作模式和特权级别转换图目录目录v2.1ARM体系结构的特点体系结构的特点v2.2各各ARM体系结构版本体系结构版本v2.3Cortex-M3处理器模式处理器模式v2.4Cortex-M3内部寄存器内部寄存器v2.5Cortex-M3处理器异常处理器异常v2.6STM32存储器组织存储器组织v2.7调试接口简介调试接口简介v作业作业2.4Cortex-M3内部寄存器vCortex-M3有通用寄存器R0R15,以及一些特殊功能寄存器。v其中R0R12是最“通用”的,但绝大多数16位指令只能使用R0R7(低组寄存器),而32位Thumb-2则可以访问所有通用寄存器。v特殊功能寄存器必须在特权级下访问(APSR除外),且必须通过专门的指令(MSR和MRS)访问。Cortex-M3处理器的寄存器及其分组情况处理器的寄存器及其分组情况v寄存器寄存器R13用作堆栈指针用作堆栈指针SP,SP忽略写入位忽略写入位1:0的值,的值,SP的最低两位总是的最低两位总是0(事实上(事实上R13的最低的最低2位被硬件连接到位被硬件连接到0),),故堆栈操作是字对齐的。故堆栈操作是字对齐的。vSP有两个分组版本:有两个分组版本:MSP(MainStackPointer,或写作,或写作SP_main)主堆栈指针和)主堆栈指针和PSP(ProcessStackPointer,或写作或写作SP_process)进程堆栈指针;)进程堆栈指针;vMSP由由OS内核、异常服务程序以及所有需要特权访问的应内核、异常服务程序以及所有需要特权访问的应用程序使用;用程序使用;vPSP用于常规的应用程序代码(不处于异常服务程序中)。用于常规的应用程序代码(不处于异常服务程序中)。用户应用程序代码可以使用用户应用程序代码可以使用PSP(CONTROL1=1),也),也可以使用可以使用MSP(CONTROL1=0)。v若要指明访问若要指明访问PSP或或MSP则必须通过专门的指令(则必须通过专门的指令(MSR和和MRS)访问。)访问。vCM3处理器使用处理器使用FD(FullDescending满递减)堆栈,即入满递减)堆栈,即入栈操作为:栈操作为:SP先减先减4,数据再入栈,数据再入栈,SP总是指向最后一个入总是指向最后一个入栈的数据,而传统的栈的数据,而传统的ARM有有FD、ED、FA、EA四种堆栈。四种堆栈。1.堆栈指针堆栈指针SP(R13)v在调用子程序(即执行带链接的分支指令在调用子程序(即执行带链接的分支指令BL或带链接和状态或带链接和状态切换的分支指令切换的分支指令BLX)时,)时,LR用于保存返回地址(即用于保存返回地址(即BL/BLX的下一条指令的地址),用于子程序返回。的下一条指令的地址),用于子程序返回。LR也用也用于异常返回。其他任何时候都可以将于异常返回。其他任何时候都可以将R14作为一个通用寄存作为一个通用寄存器。器。2.链接寄存器链接寄存器LR(R14)程序BLable 程序A执行过程中调用程序B;1 程序B执行完后,将R14寄存器的内容放入PC,返回程序A。3 程序跳转至标号Lable,执行程序B,同时硬件将“BL Lable”指令的下一条指令所在地址存入R14;2程序A地址ABLLable?MOVPC,LRR14R14(地址A)vR14与子程序调用与子程序调用v在进入异常服务程序后,在进入异常服务程序后,LR的值被自动更新为特殊的的值被自动更新为特殊的EXC_RETURN,这是一个高,这是一个高28位全为位全为1的值,只有的值,只有3:0的的值有特殊含义,如下表所示。当异常服务例程把这个值送往值有特殊含义,如下表所示。当异常服务例程把这个值送往PC时,就会启动处理器的中断返回序列。时,就会启动处理器的中断返回序列。v合法的合法的EXC_RETURN值共值共3个,如下表所示。个,如下表所示。vR15用作程序计数器,因为CM3内部使用了指令流水线,读PC时返回的值是当前指令的地址+4。vCM3中的指令至少是半字对齐的,所以PC的LSB总是读回0。如果向PC中写数据,就会引起一次程序的跳转,无论是直接写PC值还是使用分支指令进行跳转,都必须保证加载到PC的值的LSB为1,这是因为CM3只能在Thumb状态下执行,若LSB写入了0,则视为企图转入ARM状态,CM3将产生一个fault异常。v与传统的ARM或其他处理器不同,CM3复位后,将复位向量0 x00000004地址处的值直接载入PC中,因此在这个地址应定义复位后第一条执行的指令的地址(用DCD指令)。地址0处提供MSP的初始值,该值为堆栈起始单元地址(最大地址)+1(思考为什么要加1),之后是向量表,其中第一个为复位向量,向量表中直接是32位地址,而不是转移指令,注意这些地址的LSB必须为1,即CM3必须在Thumb状态下运行。3.程序计数器程序计数器PC(R15)分为3个子状态寄存器:vAPSR(应用PSR):可读/写vIPSR(中断PSR):只读vEPSR(执行PSR):只读4.程序状态寄存器程序状态寄存器xPSR合体后的程序状态寄存器合体后的程序状态寄存器CM3中的程序状态寄存器中的程序状态寄存器v可访问3个程序状态寄存器中的单个(APSR、EPSR、IPSR)或任意两个(IEPSR、IAPSR、EAPSR)或全部(PSR)。vEPSR不可直接访问,读EPSR总是返回0,写无效,要修改ESPR需发生以下两个条件之一:在执行LDM或STM时产生一次中断;执行IT指令。PSR的位定义:的位定义:vN(Negative):负数或小于标志;):负数或小于标志;vZ(Zero):零结果标志;):零结果标志;vC(Carry):进位):进位/借位标志;借位标志;vV(oVerflow):溢出标志;):溢出标志;vQ(stickysaturation):粘着饱和标志,此位不做条件转移):粘着饱和标志,此位不做条件转移的依据;的依据;vICI(Interruptible-ContinuableInstruction,可中断,可中断-可继可继续指令):是用于被打断的续指令):是用于被打断的LDM/STM指令,指令,LDM/STM操作操作是可中断的,是可中断的,EPSR的的ICI区用来保存从产生中断的点继续执区用来保存从产生中断的点继续执行行LDM/STM操作时所必须的信息,记录下一个即将传送的寄操作时所必须的信息,记录下一个即将传送的寄存器是哪一个(存器是哪一个(LDM/STM在汇编时,都把寄存器号升序排序)在汇编时,都把寄存器号升序排序)。此机制可加快中断的处理,但是注意到。此机制可加快中断的处理,但是注意到ICI和和IT是重叠的,是重叠的,所以,如果在所以,如果在IT中使用了中使用了LDM/STM,则不再记录,则不再记录LDM/STM的执行进度。但尽管如此,及时响应中断依然是首要任务。的执行进度。但尽管如此,及时响应中断依然是首要任务。此时只好把此时只好把LDM/STM取消,待中断返回后继续执行。取消,待中断返回后继续执行。vIT(If-Then):该区包含IT指令的执行状态。16位IT指令后的IT块中可最多有4条指令,这些指令都是条件执行的。vT:Thumb状态位,总是设置为1。vExceptionNumber:当前处于激活状态(正在处理但未处理完)的异常的ISR编号。取值范围0255。v中断屏蔽寄存器组包括PRIMASK(仅最低位有效)、FAULTMASK(仅最低位有效)、和BASEPRI(仅低8位有效)三个寄存器,用于控制异常的禁止和使能。5.中断屏蔽寄存器组中断屏蔽寄存器组对于时间-关键任务而言,PRIMASK和BASEPRI对于暂时关闭中断是非常重要的。而FAULTMASK则可以被OS用于暂时关闭fault处理机能,这种处理在某个任务崩溃时可能需要。因为在任务崩溃时,常常伴随着一大堆faults。在系统料理“后事”时,通常不再需要响应这些fault人死帐清。总之FAULTMASK就是专门留给OS用的。要访问PRIMASK,FAULTMASK以及BASEPRI,同样要使用MRS/MSR指令,如:MRSR0,BASEPRI;读取BASEPRI到R0中MRSR0,FAULTMASK;似上MRSR0,PRIMASK;似上MSRBASEPRI,R0;写入R0到BASEPRI中MSRFAULTMASK,R0;似上MSRPRIMASK,R0;似上v只有在特权级下,才允许访问这3个寄存器。v其实,为了快速地开关中断,CM3还专门设置了一条CPS指令,有4种用法:CPSIDI;PRIMASK=1,;关中断CPSIEI;PRIMASK=0,;开中断CPSIDF;FAULTMASK=1,;关异常CPSIEF;FAULTMASK=0;开异常v控制寄存器用于定义特权级别,还用于选择当前使用哪个堆栈指针。其位定义如下:6.控制寄存器控制寄存器CONTROLvCONTROL1:在Cortex-M3的处理模式中,CONTROL1总是0。在线程模式中则可以为0或1。仅当处于特权级的线程模式下,此位才可写,其它场合下禁止写此位。改变处理器的模式也有其它的方式:在异常返回时,通过修改LR的位2,也能实现模式切换。vCONTROL0:仅当在特权级下操作时才允许写该位。一旦进入了用户级,唯一返回特权级的途径,就是触发一个(软)中断,再由服务例程改写该位。CONTROL寄存器也是通过MRS和MSR指令来操作的:MRSR0,CONTROLMSRCONTROL,R0目录目录v2.1ARM体系结构的特点体系结构的特点v2.2各各ARM体系结构版本体系结构版本v2.3Cortex-M3处理器模式处理器模式v2.4Cortex-M3内部寄存器内部寄存器v2.5Cortex-M3处理器异常处理器异常v2.6STM32存储器组织存储器组织v2.7调试接口简介调试接口简介v作业作业2.5Cortex-M3处理器异常v只要正常的程序流被暂时中止,处理器就进入异常只要正常的程序流被暂时中止,处理器就进入异常(ExceptionException)。)。vCortex-M3Cortex-M3支持大量异常,包括支持大量异常,包括1111个系统异常(个系统异常(NMINMI、硬故障、硬故障(faultfault)、总线故障等,异常编号)、总线故障等,异常编号1 115 15)和最多)和最多240240个外部个外部中断(中断(IRQ 0IRQ 0239239,异常编号,异常编号1616255255),除了个别异常的优),除了个别异常的优先级是固定的,其他异常的优先级都是可编程的。先级是固定的,其他异常的优先级都是可编程的。vCortex-M3Cortex-M3处理器和处理器和NVICNVIC对所有的异常按优先级进行排序处理。对所有的异常按优先级进行排序处理。所有的异常都在处理模式中操作。出现异常时,处理器状态会所有的异常都在处理模式中操作。出现异常时,处理器状态会自动保存到堆栈中(硬件实现),并在中断服务程序自动保存到堆栈中(硬件实现),并在中断服务程序ISRISR结束结束时自动从堆栈中恢复。在状态保存的同时取出向量快速地进入时自动从堆栈中恢复。在状态保存的同时取出向量快速地进入中断。中断。v处理器支持末尾连锁(处理器支持末尾连锁(Tail-chainingTail-chaining,也叫咬尾)中断技术,也叫咬尾)中断技术,它能够在没有多余的状态保存和恢复指令的情况下执行背对背它能够在没有多余的状态保存和恢复指令的情况下执行背对背中断(中断(Back-to-back interruptBack-to-back interrupt)。)。1.CM3异常概述异常概述异常类型异常编号优先级异常向量地址 描述保留0-线程模式,无异常,复位值复位1-3(最高)0 x00000004在上电和热复位时调用,在第一条指令上优先级下降到最低(线程模式)。是异步的。NMI2-20 x00000008非屏蔽中断,不能被除复位之外的任何异常停止或抢占。是异步的。硬故障3-10 x0000000C是由于优先级的原因或可配置的故障处理被禁止而导致不能将故障激活时的所有类型故障。是同步的。存储器管理故障4可编程0 x00000010表现为MPU不匹配,包括违反访问规范以及不匹配。是同步的。即使MPU被禁止或不存在,也可以用它来支持默认的存储器映射到XN(eXecutableNever)区域。总线故障5可编程0 x00000014包括预取指故障和存储器访问故障以及其他相关的地址/存储故障。精确时是同步的,不精确时是异步的。2.CM3异常列表异常列表异常类型异常编号优先级异常向量地址描述用法故障6可编程0 x00000018未定义指令或非法状态(例如试图切换到ARM状态)保留710-0 x0000001C0 x0000002B保留SVC调用11可编程0 x0000002C利用SVC调用系统服务。是同步的。调试监控12可编程0 x00000030调试监控中处理器没有停止时出现。是同步的。但只有在使能时是有效的。如果它的优先级比当前有效的异常的优先级低,则不能被激活。保留13-0 x00000034保留PendSV14可编程0 x00000038可挂起的系统服务请求。是异步的。只能由软件来实现挂起。系统时钟15可编程0 x0000003C系统节拍定时器已启动。是异步的。外设中断IRQ0IRQ23916255可编程0 x000000400 x000003ff由内核的外部产生。通过NVIC输入。都是异步的。每种异常总是处于以下几种状态之一:v未激活异常没有激活也没有挂起v挂起(Pending)异常正在等待处理器的服务,一旦外设或软件中断请求发生,会将对应的中断状态修改为挂起v激活(Active)异常正在被处理但是还没有处理完v激活和挂起异常正在被处理,这时出现了挂起的同一个异常3.CM3异常的状态异常的状态 Cortex-M3处理器的中断延迟是从发出中断信号到执行ISR的第一条指令所需的时间,包括:v检测中断;v对背对背或迟到中断进行最佳处理;v提取向量地址;v将需要保护的寄存器入栈;v跳转到ISR。这些任务在硬件中执行,并且包含在Cortex-M3处理器报出的中断响应周期时间中。在其他许多体系结构中,这些任务必须由软件执行,从而引起延迟并使得过程十分复杂。4.CM3中断响应时间(中断延迟)中断响应时间(中断延迟)CM3CM3的以下特性可使能高效的低延时异常处理:的以下特性可使能高效的低延时异常处理:v自动的状态保存和恢复,进入异常服务例程时,自动压栈了自动的状态保存和恢复,进入异常服务例程时,自动压栈了 R0-R3,R0-R3,R12,R12,LR,LR,PSRPSR和和PCPC,恢复时自动出栈;,恢复时自动出栈;v自动读取代码存储器或自动读取代码存储器或SRAMSRAM中包含中包含ISRISR地址的向量表入口,地址的向量表入口,此操作与状态保存同时执行;此操作与状态保存同时执行;v支持末尾连锁;支持末尾连锁;v中断优先级可动态重新设置;中断优先级可动态重新设置;vCortex-M3Cortex-M3与与NVICNVIC之间采用紧耦合接口,通过该接口可以及之间采用紧耦合接口,通过该接口可以及早地对中断和高优先级的迟来中断(早地对中断和高优先级的迟来中断(Late-arrivingLate-arriving)进行)进行处理;处理;v中断数目可配置为中断数目可配置为1 1240240;v中断优先级的位数可配置为中断优先级的位数可配置为3 38 8位(位(8 8256256级);级);v处理模式和线程模式具有独立的堆栈和特权等级;处理模式和线程模式具有独立的堆栈和特权等级;v使用使用C/C+C/C+标准的调用规范,标准的调用规范,ARMARM架构的过程调用标准架构的过程调用标准(PCSAAPCSAA)执行)执行ISRISR控制传输;控制传输;v优先级屏蔽支持临界区。优先级屏蔽支持临界区。v在CM3中,若存储器系统够快,且总线系统允许入栈与取指同时进行,同时该中断可以立即响应,则中断延迟是雷打不动的12周期(满足硬实时所要求的确定性)。在与时间赛跑的这12个周期里,处理器内部一直开足马力,进行了入栈、取向量、更新寄存器以及服务例程取指等一系列操作。但若存储器太慢以至于引入等待周期,或者还有其它因素,则会引入额外的延时。反正CM3内核是决不会拖后腿的。v当处理咬尾中断时,省去了堆栈操作,因此切入新异常服务例程的耗时可以短至6周期(传统的ARM需要16(POP)+26(PUSH)=42个周期)。v有些指令需要较多的周期才能完成。它们是除法指令,双字传送指令LDRD/STRD以及多重数据传送指令(LDM/STM)。对于前两者,CM3将为了保证中断及时响应而取消它们的执行,待返回后重新开始这牺牲了一点性能,以及某些子程序的一点个人利益,但换来了对意外事件的更快救援。对于LDM/STM,则有另外的处理方式。(见前面ICI的介绍)当CM3开始响应一个中断时,将自动执行下列三件事情:v入栈:把8个寄存器的值压入栈v取向量:从向量表中找出对应的服务程序入口地址v更新寄存器:选择堆栈指针MSP/PSP,更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC5.进入异常进入异常v入栈入栈v响应异常的第一个行动,就是自动保存现场的必要部分:响应异常的第一个行动,就是自动保存现场的必要部分:依次把依次把xPSR,PC,LR,R12以及以及R3 R0由硬件自动压入适当由硬件自动压入适当的堆栈中:如果当响应异常时,当前的代码正在使用的堆栈中:如果当响应异常时,当前的代码正在使用PSP,则压入则压入PSP,即使用线程堆栈;否则压入,即使用线程堆栈;否则压入MSP,使用主堆栈。,使用主堆栈。一旦进入了服务例程,就将一直使用主堆栈。一旦进入了服务例程,就将一直使用主堆栈。v假设入栈开始时,假设入栈开始时,SP的值为的值为N,则在入栈后,堆栈内部的变,则在入栈后,堆栈内部的变化如右表。又因为化如右表。又因为AHB接口上接口上的流水线操作本质,地址和数的流水线操作本质,地址和数据都在经过一个流水线周期之据都在经过一个流水线周期之后才进入。另外,这种入栈在后才进入。另外,这种入栈在机器的内部,并不是严格按堆机器的内部,并不是严格按堆栈操作的顺序的栈操作的顺序的但是机器但是机器会保证:正确的寄存器将被保会保证:正确的寄存器将被保存到正确的位置,如右图所示。存到正确的位置,如右图所示。入栈顺序以及入栈后堆栈中的内容v取向量取向量当数据总线(系统总线)正在为入栈操作而忙当数据总线(系统总线)正在为入栈操作而忙得团团转时,指令总线(得团团转时,指令总线(I Code总线)可不是凉快总线)可不是凉快地坐着看热闹地坐着看热闹它正在为响应中断紧张有序地执它正在为响应中断紧张有序地执行另一项重要的任务:从向量表中找出正确的异常行另一项重要的任务:从向量表中找出正确的异常向量,然后在服务程序的入口处预取指。由此可以向量,然后在服务程序的入口处预取指。由此可以看到各自都有专用总线的好处:入栈与取指这两个看到各自都有专用总线的好处:入栈与取指这两个工作能同时进行。工作能同时进行。v更新寄存器更新寄存器在入栈和取向量的工作都完毕之后,执行服务例程之前,在入栈和取向量的工作都完毕之后,执行服务例程之前,还要更新一系列的寄存器:还要更新一系列的寄存器:vSP:在入栈中会把堆栈指针(:在入栈中会把堆栈指针(PSP或或MSP)更新到新的位)更新到新的位置。在执行服务例程后,将由置。在执行服务例程后,将由MSP负责对堆栈的访问。负责对堆栈的访问。vPSR:IPSR位段(地处位段(地处PSR的最低部分)会被更新为新响的最低部分)会被更新为新响应的异常编号。应的异常编号。vPC:在向量取出完毕后,:在向量取出完毕后,PC将指向服务例程的入口地址,将指向服务例程的入口地址,vLR:LR的用法将被重新解释,其值也被更新成一种特殊的的用法将被重新解释,其值也被更新成一种特殊的值,称为值,称为“EXC_RETURN”,并且在异常返回时使用。,并且在异常返回时使用。EXC_RETURN的二进制值除了最低的二进制值除了最低4位外全为位外全为1,而其最低,而其最低4位则有另外的含义。位则有另外的含义。以上是在响应异常时通用寄存器的变化。另一方面,在以上是在响应异常时通用寄存器的变化。另一方面,在NVIC中,也伴随着更新了与之相关的若干寄存器。例如,中,也伴随着更新了与之相关的若干寄存器。例如,新响应异常的悬起位将被清除,同时其活动位将被置位。新响应异常的悬起位将被清除,同时其活动位将被置位。v当异常服务例程执行完毕后,需要很正式地做一个当异常服务例程执行完毕后,需要很正式地做一个“异常返回异常返回”动作序列,从而恢复先前的系统状态,动作序列,从而恢复先前的系统状态,才能使被中断的程序得以继续执行。从形式上看,才能使被中断的程序得以继续执行。从形式上看,有有3种途径可以触发异常返回序列,如下表所示;种途径可以触发异常返回序列,如下表所示;不管使用哪一种,都需要用到先前存储的不管使用哪一种,都需要用到先前存储的LR的值。的值。触发异常返回的指令6.异常返回异常返回v有些处理器使用特殊的返回指令来标示中断返回,例如8051就使用reti。但是在CM3中,是通过把把EXC_RETURN往往PC里写来识别返回动作的里写来识别返回动作的。因此,可以使用上述的常规返回指令,从而为使用C语言编写服务例程扫清了最后的障碍(无需特殊的编译器命令,如_interrupt)。v在启动了中断返回序列后,下述的处理就将进行:v1)出栈:先前压入栈中的寄存器在这里恢复。内部的出栈顺序与入栈时的相对应,堆栈指针的值也改回去。v2)更新NVIC寄存器:伴随着异常的返回,它的活动位也被硬件清除。对于外部中断,倘若中断输入再次被置为有效,悬起位也将再次置位,新一次的中断响应序列也可随之再次开始。vCM3总结:Cortex-M3性能评价性能评价Cortex-M3好在哪?好在哪?1)高性能)高性能v许多指令都是单周期的许多指令都是单周期的包括乘法相关指令。并且从整体包括乘法相关指令。并且从整体性能上,性能上,Cortex-M3比得过绝大多数其它的架构。比得过绝大多数其它的架构。v指令总线和数据总线被分开,取指和访内可以并行不悖指令总线和数据总线被分开,取指和访内可以并行不悖。vThumb-2的到来告别了状态切换的旧世代,再也不需要花的到来告别了状态切换的旧世代,再也不需要花时间来切换于时间来切换于32位位ARM状态和状态和16位位Thumb状态之间了。状态之间了。这简化了软件开发和代码维护,使产品面市更快。这简化了软件开发和代码维护,使产品面市更快。vThumb-2指令集为编程带来了更多的灵活性。许多数据操指令集为编程带来了更多的灵活性。许多数据操作现在能用更短的代码搞定,这意味着作现在能用更短的代码搞定,这意味着Cortex-M3的代码的代码密度更高,也就对存储器的需求更少。密度更高,也就对存储器的需求更少。v取指都按取指都按32位处理。同一周期最多可以取出两条指令,留位处理。同一周期最多可以取出两条指令,留下了更多的带宽给数据传输。下了更多的带宽给数据传输。vCortex-M3的设计允许单片机高频运行(现代半导体制造技的设计允许单片机高频运行(现代半导体制造技术能保证术能保证100MHz以上的速度)。即使在相同的速度下运行,以上的速度)。即使在相同的速度下运行,CM3的每指令周期数的每指令周期数(CPI)也更低,于是同样的也更低,于是同样的MHz下可下可以做更多的工作;另一方面,也使同一个应用在以做更多的工作;另一方面,也使同一个应用在CM3上需上需要更低的主频。要更低的主频。2)先进的中断处理功能)先进的中断处理功能v内建的嵌套向量中断控制器支持多达内建的嵌套向量中断控制器支持多达240条外部中断输入。向量化的中条外部中断输入。向量化的中断功能剧烈地缩短了中断延迟,因为不再需要软件去判断中断源。中断断功能剧烈地缩短了中断延迟,因为不再需要软件去判断中断源。中断的嵌套也是在硬件水平上实现的,不需要软件代码来实现。的嵌套也是在硬件水平上实现的,不需要软件代码来实现。vCortex-M3在进入异常服务例程时,自动压栈了在进入异常服务例程时,自动压栈了R0-R3,R12,LR,PSR和和PC,并且在返回时自动弹出它们,这多清爽!既加速了中断的响应,并且在返回时自动弹出它们,这多清爽!既加速了中断的响应,也再不需要汇编语言代码了。也再不需要汇编语言代码了。vNVIC支持对每一路中断设置不同的优先级,使得中断管理极富弹性。最支持对每一路中断设置不同的优先级,使得中断管理极富弹性。最粗线条的实现也至少要支持粗线条的实现也至少要支持8级优先级,而且还能动态地被修改。级优先级,而且还能动态地被修改。v优化中断响应还有两招,它们分别是优化中断响应还有两招,它们分别是“咬尾中断机制咬尾中断机制”和和“晚到中断机晚到中断机制制”。v有些需要较多周期才能执行完的指令,是可以被中断继续的有些需要较多周期才能执行完的指令,是可以被中断继续的就好就好比它们是一串指令一样。这些指令包括加载多个寄存器(比它们是一串指令一样。这些指令包括加载多个寄存器(LDM),存储,存储多个寄存器(多个寄存器(STM),多个寄存器参与的,多个寄存器参与的PUSH,以及多个寄存器参与,以及多个寄存器参与的的POP。v除非系统被彻底地锁定,除非系统被彻底地锁定,NMI(不可屏蔽中断)会在收到请求的第一时(不可屏蔽中断)会在收到请求的第一时间予以响应。对于很多安全间予以响应。对于很多安全-关键关键(safety-critical)的应用,的应用,NMI都是必不都是必不可少的(如化学反应即将失控时的紧急停机)。可少的(如化学反应即将失控时的紧急停机)。3)低功耗)低功耗vCortex M3需要的逻辑门数少,所以先天就适合低功耗要求需要的逻辑门数少,所以先天就适合低功耗要求的应用(功率低于的应用(功率低于0.19mW/MHz););v在内核水平上支持节能模式(在内核水平上支持节能模式(SLEEPIG和和SLEEPDEEP位)位)。通过使用。通过使用“等待中断指令(等待中断指令(WFI)”和和“等待事件指令等待事件指令(WFE)”,内核可以进入睡眠模式,并且以不同的方式,内核可以进入睡眠模式,并且以不同的方式唤醒。另外,模块的时钟是尽可能地分开供应的,所以在睡唤醒。另外,模块的时钟是尽可能地分开供应的,所以在睡眠时可以把眠时可以把CM3的大多数的大多数“官能团官能团”给停掉;给停掉;vCM3的设计是全静态的、同步的、可综合的。任何低功耗的设计是全静态的、同步的、可综合的
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服