版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章ARM体系结构帮助初学者深入了解CPU的运作机制及其性能;本章着眼于Cortex-M3内核,处理器状态与模式,内部寄存器,特殊功能寄存器,异常、中断及其向量表和存储系统,为成为一名应用工程师打下基础。本章导读目录2.1ARM体系结构的特点2.2各ARM体系结构版本2.3Cortex-M3处理器模式2.4Cortex-M3内部寄存器2.5Cortex-M3处理器异常2.6STM32存储器组织2.7调试接口简介作业2.1ARM体系结构的特点ARM处理器为RISC芯片,其简单的结构使ARM内核非常小,这使得器件的功耗也非常低,它具有以下经典RISC的特点:大的、统一的寄存器文件;装载/保存结构,数据处理操作只针对寄存器的内容,而不直接对存储器进行操作;简单的寻址模式;通用和固定长度的指令域,简化了指令的译码;每条数据处理指令可同时包含算术逻辑单元(ALU)的运算和移位处理,实现ALU和移位器的最大利用;使用地址自增和自减的寻址方式,优化程序循环;多寄存器装载和存储指令实现最大数据吞吐量;大多数指令的条件执行,实现最快速的代码执行。目录2.1ARM体系结构的特点2.2各ARM体系结构版本2.3Cortex-M3处理器模式2.4Cortex-M3内部寄存器2.5Cortex-M3处理器异常2.6STM32存储器组织2.7调试接口简介作业2.2各ARM体系结构版本为了清楚地表达每个ARM应用实例所使用的指令集,ARM公司定义了8种主要的ARM指令集体系结构版本,以版本号V1~V8表示。ARM处理器架构进化史性能指令集演进图ARMV8架构V8-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。V8-R:暂无V8-M:Cortex-M7提示:接下来的3节内容与课本内容不一致,将介绍CM3的内核原理。下图为CM3的组成框图。Cortex-M3处理器有2种工作状态:Thumb状态:这是16位和32位半字对齐Thumb和Thumb-2指令的正常执行状态;调试状态:当处理器停机调试时进入该状态。CM3处理器不支持ARM指令,没有ARM状态。2.工作状态Cortex-M3处理器支持两种特权分级:特权级(Privileged)和非特权级(Unprivileged,也叫用户级)。代码可以是特权执行或非特权执行,非特权执行时对有些资源的访问受到限制或不允许访问,特权执行可访问所有资源。通过引入特权级和用户级,就能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存器,因而系统的可靠性得到了提高。进一步地,如果配了MPU(存储器保护单元),它还可以作为特权机制的补充——保护关键的存储区域不被破坏,这些区域通常是操作系统的区域。
举例来说,操作系统的内核通常都在特权级下执行,所有没有被MPU禁掉的存储器都可以访问。在操作系统开启了一个用户程序后,通常都会让它在用户级下执行,从而使系统不会因某个程序的崩溃或恶意破坏而受损。3.特权分级(PrivilegeLevels)在特权级下的程序可以为所欲为,但也可能会把自己给玩进去——切换到用户级。一旦进入用户级,再想回来就得走“法律程序”了——用户级的程序不能简简单单地试图改写CONTROL寄存器就回到特权级,它必须先“申诉”:执行一条系统调用指令(SVC)。这会触发SVC异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改CONTROL寄存器,才能在用户级的线程模式下重新进入特权级。事实上,从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状态(也可以手工指定返回的状态)。合法的工作模式和特权级别转换图目录2.1ARM体系结构的特点2.2各ARM体系结构版本2.3Cortex-M3处理器模式2.4Cortex-M3内部寄存器2.5Cortex-M3处理器异常2.6STM32存储器组织2.7调试接口简介作业Cortex-M3处理器的寄存器及其分组情况寄存器R13用作堆栈指针SP,SP忽略写入位[1:0]的值,SP的最低两位总是0(事实上R13的最低2位被硬件连接到0),故堆栈操作是字对齐的。SP有两个分组版本:MSP(MainStackPointer,或写作SP_main)主堆栈指针和PSP(ProcessStackPointer,或写作SP_process)进程堆栈指针;MSP由OS内核、异常服务程序以及所有需要特权访问的应用程序使用;PSP用于常规的应用程序代码(不处于异常服务程序中)。用户应用程序代码可以使用PSP(CONTROL[1]=1),也可以使用MSP(CONTROL[1]=0)。若要指明访问PSP或MSP则必须通过专门的指令(MSR和MRS)访问。CM3处理器使用FD(FullDescending满递减)堆栈,即入栈操作为:SP先减4,数据再入栈,SP总是指向最后一个入栈的数据,而传统的ARM有FD、ED、FA、EA四种堆栈。1.堆栈指针SP(R13)在进入异常服务程序后,LR的值被自动更新为特殊的EXC_RETURN,这是一个高28位全为1的值,只有[3:0]的值有特殊含义,如下表所示。当异常服务例程把这个值送往PC时,就会启动处理器的中断返回序列。合法的EXC_RETURN值共3个,如下表所示。
R15用作程序计数器,因为CM3内部使用了指令流水线,读PC时返回的值是当前指令的地址+4。CM3中的指令至少是半字对齐的,所以PC的LSB总是读回0。如果向PC中写数据,就会引起一次程序的跳转,无论是直接写PC值还是使用分支指令进行跳转,都必须保证加载到PC的值的LSB为1,这是因为CM3只能在Thumb状态下执行,若LSB写入了0,则视为企图转入ARM状态,CM3将产生一个fault异常。与传统的ARM或其他处理器不同,CM3复位后,将复位向量0x00000004地址处的值直接载入PC中,因此在这个地址应定义复位后第一条执行的指令的地址(用DCD指令)。地址0处提供MSP的初始值,该值为堆栈起始单元地址(最大地址)+1(思考为什么要加1),之后是向量表,其中第一个为复位向量,向量表中直接是32位地址,而不是转移指令,注意这些地址的LSB必须为1,即CM3必须在Thumb状态下运行。3.程序计数器PC(R15)可访问3个程序状态寄存器中的单个(APSR、EPSR、IPSR)或任意两个(IEPSR、IAPSR、EAPSR)或全部(PSR)。EPSR不可直接访问,读EPSR总是返回0,写无效,要修改ESPR需发生以下两个条件之一:在执行LDM或STM时产生一次中断;执行IT指令。PSR的位定义:N(Negative):负数或小于标志;Z(Zero):零结果标志;C(Carry):进位/借位标志;V(oVerflow):溢出标志;Q(stickysaturation):粘着饱和标志,此位不做条件转移的依据;ICI(Interruptible-ContinuableInstruction,可中断-可继续指令):是用于被打断的LDM/STM指令,LDM/STM操作是可中断的,EPSR的ICI区用来保存从产生中断的点继续执行LDM/STM操作时所必须的信息,记录下一个即将传送的寄存器是哪一个(LDM/STM在汇编时,都把寄存器号升序排序)。此机制可加快中断的处理,但是注意到ICI和IT是重叠的,所以,如果在IT中使用了LDM/STM,则不再记录LDM/STM的执行进度。但尽管如此,及时响应中断依然是首要任务。此时只好把LDM/STM取消,待中断返回后继续执行。IT(If-Then):该区包含IT指令的执行状态。16位IT指令后的IT块中可最多有4条指令,这些指令都是条件执行的。T:Thumb状态位,总是设置为1。ExceptionNumber:当前处于激活状态(正在处理但未处理完)的异常的ISR编号。取值范围0~255。对于时间-关键任务而言,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;似上只有在特权级下,才允许访问这3个寄存器。
其实,为了快速地开关中断,CM3还专门设置了一条CPS指令,有4种用法:CPSIDI;PRIMASK=1,;关中断CPSIEI;PRIMASK=0,;开中断CPSIDF;FAULTMASK=1,;关异常CPSIEF;FAULTMASK=0;开异常控制寄存器用于定义特权级别,还用于选择当前使用哪个堆栈指针。其位定义如下:6.控制寄存器CONTROLCONTROL[1]: 在Cortex-M3的处理模式中,CONTROL[1]总是0。在线程模式中则可以为0或1。仅当处于特权级的线程模式下,此位才可写,其它场合下禁止写此位。改变处理器的模式也有其它的方式:在异常返回时,通过修改LR的位2,也能实现模式切换。CONTROL[0]: 仅当在特权级下操作时才允许写该位。一旦进入了用户级,唯一返回特权级的途径,就是触发一个(软)中断,再由服务例程改写该位。
CONTROL寄存器也是通过MRS和MSR指令来操作的:
MRSR0,CONTROL MSRCONTROL,R0目录2.1ARM体系结构的特点2.2各ARM体系结构版本2.3Cortex-M3处理器模式2.4Cortex-M3内部寄存器2.5Cortex-M3处理器异常
2.6STM32存储器组织2.7调试接口简介作业2.5Cortex-M3处理器异常
只要正常的程序流被暂时中止,处理器就进入异常(Exception)。Cortex-M3支持大量异常,包括11个系统异常(NMI、硬故障(fault)、总线故障等,异常编号1~15)和最多240个外部中断(IRQ0~239,异常编号16~255),除了个别异常的优先级是固定的,其他异常的优先级都是可编程的。Cortex-M3处理器和NVIC对所有的异常按优先级进行排序处理。所有的异常都在处理模式中操作。出现异常时,处理器状态会自动保存到堆栈中(硬件实现),并在中断服务程序ISR结束时自动从堆栈中恢复。在状态保存的同时取出向量快速地进入中断。处理器支持末尾连锁(Tail-chaining,也叫咬尾)中断技术,它能够在没有多余的状态保存和恢复指令的情况下执行背对背中断(Back-to-backinterrupt)。1.CM3异常概述异常类型异常编号优先级异常向量地址描述保留0--线程模式,无异常,复位值复位1-3(最高)0x00000004在上电和热复位时调用,在第一条指令上优先级下降到最低(线程模式)。是异步的。NMI2-20x00000008非屏蔽中断,不能被除复位之外的任何异常停止或抢占。是异步的。硬故障3-10x0000000C是由于优先级的原因或可配置的故障处理被禁止而导致不能将故障激活时的所有类型故障。是同步的。存储器管理故障4可编程0x00000010表现为MPU不匹配,包括违反访问规范以及不匹配。是同步的。即使MPU被禁止或不存在,也可以用它来支持默认的存储器映射到XN(eXecutableNever)区域。总线故障5可编程0x00000014包括预取指故障和存储器访问故障以及其他相关的地址/存储故障。精确时是同步的,不精确时是异步的。2.CM3异常列表异常类型异常编号优先级异常向量地址描述用法故障6可编程0x00000018未定义指令或非法状态(例如试图切换到ARM状态)保留7~10-0x0000001C~0x0000002B保留SVC调用11可编程0x0000002C利用SVC调用系统服务。是同步的。调试监控12可编程0x00000030调试监控中处理器没有停止时出现。是同步的。但只有在使能时是有效的。如果它的优先级比当前有效的异常的优先级低,则不能被激活。保留13-0x00000034保留PendSV14可编程0x00000038可挂起的系统服务请求。是异步的。只能由软件来实现挂起。系统时钟15可编程0x0000003C系统节拍定时器已启动。是异步的。外设中断IRQ0~IRQ23916~255可编程0x00000040~0x000003ff由内核的外部产生。通过NVIC输入。都是异步的。每种异常总是处于以下几种状态之一:未激活——异常没有激活也没有挂起挂起(Pending)——异常正在等待处理器的服务,一旦外设或软件中断请求发生,会将对应的中断状态修改为挂起激活(Active)——异常正在被处理但是还没有处理完激活和挂起——异常正在被处理,这时出现了挂起的同一个异常3.CM3异常的状态Cortex-M3处理器的中断延迟是从发出中断信号到执行ISR的第一条指令所需的时间,包括:检测中断;对背对背或迟到中断进行最佳处理;提取向量地址;将需要保护的寄存器入栈;跳转到ISR。这些任务在硬件中执行,并且包含在Cortex-M3处理器报出的中断响应周期时间中。在其他许多体系结构中,这些任务必须由软件执行,从而引起延迟并使得过程十分复杂。4.CM3中断响应时间(中断延迟)CM3的以下特性可使能高效的低延时异常处理:自动的状态保存和恢复,进入异常服务例程时,自动压栈了R0-R3,
R12,
LR,
PSR和PC,恢复时自动出栈;自动读取代码存储器或SRAM中包含ISR地址的向量表入口,此操作与状态保存同时执行;支持末尾连锁;中断优先级可动态重新设置;Cortex-M3与NVIC之间采用紧耦合接口,通过该接口可以及早地对中断和高优先级的迟来中断(Late-arriving)进行处理;中断数目可配置为1~240;中断优先级的位数可配置为3~8位(8~256级);处理模式和线程模式具有独立的堆栈和特权等级;使用C/C++标准的调用规范,ARM架构的过程调用标准(PCSAA)执行ISR控制传输;优先级屏蔽支持临界区。在CM3中,若存储器系统够快,且总线系统允许入栈与取指同时进行,同时该中断可以立即响应,则中断延迟是雷打不动的12周期(满足硬实时所要求的确定性)。在与时间赛跑的这12个周期里,处理器内部一直开足马力,进行了入栈、取向量、更新寄存器以及服务例程取指等一系列操作。但若存储器太慢以至于引入等待周期,或者还有其它因素,则会引入额外的延时。反正CM3内核是决不会拖后腿的。
当处理咬尾中断时,省去了堆栈操作,因此切入新异常服务例程的耗时可以短至6周期(传统的ARM需要16(POP)+26(PUSH)=42个周期)。有些指令需要较多的周期才能完成。它们是除法指令,双字传送指令LDRD/STRD以及多重数据传送指令(LDM/STM)。
对于前两者,CM3将为了保证中断及时响应而取消它们的执行,待返回后重新开始——这牺牲了一点性能,以及某些子程序的一点个人利益,但换来了对意外事件的更快救援。对于LDM/STM,则有另外的处理方式。(见前面ICI的介绍)当CM3开始响应一个中断时,将自动执行下列三件事情:
入栈:
把8个寄存器的值压入栈
取向量:从向量表中找出对应的服务程序入口地址
更新寄存器:选择堆栈指针MSP/PSP,更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC
5.进入异常①入栈
响应异常的第一个行动,就是自动保存现场的必要部分:依次把xPSR,
PC,
LR,
R12以及R3‐R0由硬件自动压入适当的堆栈中:如果当响应异常时,当前的代码正在使用PSP,则压入PSP,即使用线程堆栈;否则压入MSP,使用主堆栈。一旦进入了服务例程,就将一直使用主堆栈。假设入栈开始时,SP的值为N,则在入栈后,堆栈内部的变化如右表。又因为AHB接口上的流水线操作本质,地址和数据都在经过一个流水线周期之后才进入。另外,这种入栈在机器的内部,并不是严格按堆栈操作的顺序的——但是机器会保证:正确的寄存器将被保存到正确的位置,如右图所示。入栈顺序以及入栈后堆栈中的内容②取向量
当数据总线(系统总线)正在为入栈操作而忙得团团转时,指令总线(I‐Code总线)可不是凉快地坐着看热闹——它正在为响应中断紧张有序地执行另一项重要的任务:从向量表中找出正确的异常向量,然后在服务程序的入口处预取指。由此可以看到各自都有专用总线的好处:入栈与取指这两个工作能同时进行。③更新寄存器在入栈和取向量的工作都完毕之后,执行服务例程之前,还要更新一系列的寄存器:
SP:在入栈中会把堆栈指针(PSP或MSP)更新到新的位置。在执行服务例程后,将由MSP负责对堆栈的访问。
PSR:IPSR位段(地处PSR的最低部分)会被更新为新响应的异常编号。
PC:在向量取出完毕后,PC将指向服务例程的入口地址,
LR:LR的用法将被重新解释,其值也被更新成一种特殊的值,称为“EXC_RETURN”,并且在异常返回时使用。EXC_RETURN的二进制值除了最低4位外全为1,而其最低4位则有另外的含义。以上是在响应异常时通用寄存器的变化。另一方面,在NVIC中,也伴随着更新了与之相关的若干寄存器。例如,新响应异常的悬起位将被清除,同时其活动位将被置位。当异常服务例程执行完毕后,需要很正式地做一个“异常返回”动作序列,从而恢复先前的系统状态,才能使被中断的程序得以继续执行。从形式上看,有3种途径可以触发异常返回序列,如下表所示;不管使用哪一种,都需要用到先前存储的LR的值。触发异常返回的指令6.异常返回有些处理器使用特殊的返回指令来标示中断返回,例如8051就使用reti。但是在CM3中,是通过把EXC_RETURN往PC里写来识别返回动作的。因此,可以使用上述的常规返回指令,从而为使用C语言编写服务例程扫清了最后的障碍(无需特殊的编译器命令,如__interrupt)。
在启动了中断返回序列后,下述的处理就将进行:
1)出栈:先前压入栈中的寄存器在这里恢复。内部的出栈顺序与入栈时的相对应,堆栈指针的值也改回去。
2)更新NVIC寄存器:伴随着异常的返回,它的活动位也被硬件清除。对于外部中断,倘若中断输入再次被置为有效,悬起位也将再次置位,新一次的中断响应序列也可随之再次开始。CM3总结:Cortex-M3性能评价——Cortex-M3好在哪?1)高性能许多指令都是单周期的——包括乘法相关指令。并且从整体性能上,Cortex-M3比得过绝大多数其它的架构。
指令总线和数据总线被分开,取指和访内可以并行不悖
。Thumb-2的到来告别了状态切换的旧世代,再也不需要花时间来切换于32位ARM状态和16位Thumb状态之间了。这简化了软件开发和代码维护,使产品面市更快。
Thumb-2指令集为编程带来了更多的灵活性。许多数据操作现在能用更短的代码搞定,这意味着Cortex-M3的代码密度更高,也就对存储器的需求更少。
取指都按32位处理。同一周期最多可以取出两条指令,留下了更多的带宽给数据传输。
Cortex-M3的设计允许单片机高频运行(现代半导体制造技术能保证100MHz以上的速度)。即使在相同的速度下运行,CM3的每指令周期数(CPI)也更低,于是同样的MHz下可以做更多的工作;另一方面,也使同一个应用在CM3上需要更低的主频。2)先进的中断处理功能
内建的嵌套向量中断控制器支持多达240条外部中断输入。向量化的中断功能剧烈地缩短了中断延迟,因为不再需要软件去判断中断源。中断的嵌套也是在硬件水平上实现的,不需要软件代码来实现。
Cortex-M3在进入异常服务例程时,自动压栈了R0-R3,
R12,
LR,
PSR和PC,并且在返回时自动弹出它们,这多清爽!既加速了中断的响应,也再不需要汇编语言代码了。
NVIC支持对每一路中断设置不同的优先级,使得中断管理极富弹性。最粗线条的实现也至少要支持8级优先级,而且还能动态地被修改。
优化中断响应还有两招,它们分别是“咬尾中断机制”和“晚到中断机制”。
有些需要较多周期才能执行完的指令,是可以被中断-继续的——就好比它们是一串指令一样。这些指令包括加载多个寄存器(LDM),存储多个寄存器(STM),多个寄存器参与的PUSH,以及多个寄存器参与的POP。
除非系统被彻底地锁定,NMI(不可屏蔽中断)会在收到请求的第一时间予以响应。对于很多安全-关键(safety-critical)的应用,NMI都是必不可少的(如化学反应即将失控时的紧急停机)。3)低功耗
Cortex‐M3需要的逻辑门数少,所以先天就适合低功耗要求的应用(功率低于0.19mW/MHz);在内核水平上支持节能模式(SLEEPIG和SLEEPDEEP位)。通过使用“等待中断指令(WFI)”和“等待事件指令(WFE)”,内核可以进入睡眠模式,并且以不同的方式唤醒。另外,模块的时钟是尽可能地分开供应的,所以在睡眠时可以把CM3的大多数“官能团”给停掉;
CM3的设计是全静态的、同步的、可综合的。任何低功耗的或是标准的半导体工艺均可放心应用。4)系统特性
系统支持“位寻址带”(bit-band)操作(8051位寻址机制的“威力大幅加强版”),字节不变的大端模式,并且支持非对齐的数据访问。
拥有先进的fault处理机制,支持多种类型的异常和faults,使故障诊断更容易。
通过引入banked堆栈指针机制,把系统程序使用的堆栈和用户程序使用的堆栈划清界线。如果再配上可选的MPU,处理器就能彻底满足对软件健壮性和可靠性有严格要求的应用。
5)调试支持在支持传统的JTAG基础上,还支持更新更好的串行线调试接口。
基于CoreSight调试解决方案,使得处理器哪怕是在运行时,也能访问处理器状态和存储器内容。
内建了对多达6个断点和4个数据观察点的支持。
可以选配一个ETM(嵌入式跟踪宏单元),用于指令跟踪。数据的跟踪可以使用DWT(数据观察点单元)。在调试方面还加入了以下的新特性,包括fault状态寄存器,新的fault异常,以及闪存修补
(patch)操作,使得调试大幅简化。
可选ITM(指令跟踪宏单元)模块,测试代码可以通过它输出调试信息,而且“拎包即可入住”般地方便使用。CM3处理器与经典ARM7处理器的性能比较比较项目ARM7CM3架构ARMV4T(冯.诺依曼),指令和数据总线共用,会出现瓶颈ARMV7-M(哈佛),指令和数据总线分开,无瓶颈指令集32位ARM指令+16位Thumb指令,两套指令之间需要进行状态切换Thumb/Thumb-2指令集,16位和32位指令可直接混写,无须状态切换,Thumb-2以Thumb代码密度提高ARM性能流水线3级流水线,若出现转移则需要刷新流水线,损失惨重3级流水线+分支预测,出现转移时无须刷新,几乎无损失性能0.95DMIPS/MHz(ARM状态)1.25DMIPS/MHz功耗0.28mW/MHz0.19mW/MHz低功耗模式无内置电源管理,无低功耗模式基于架构的睡眠模式支持,内置三种睡眠模式:立即睡眠、退出时睡眠和深度睡眠,内置WIC比较项目ARM7CM3面积0.62mm2(内核)0.86mm2(内核+外设)中断无标准中断控制器,普通中断IRQ和快速中断FIQ太少,大量外设不得不复用中断集成的嵌套向量中断控制器NVIC,不可屏蔽中断NMI+240个物理中断,每个外设都可以独占一个中断,效率高中断延迟24-42个时钟周期,缓慢12个时钟周期,最快只需6个存储器保护无8段存储器保护单元(MPU)内核寄存器寄存器分为多组,结构复杂,占核面积多寄存器不分组(SP除外),结构简单工作模式7种工作模式,比较复杂只有线程模式和处理模式两种,简单乘除法指令多周期乘法指令,无除法指令单周期乘法指令,2~12周期除法指令位操作无访问外设寄存器,需分“读-改-写”三步走先进的Bit-Band位操作技术,可直接访问外设寄存器的某个位CM3处理器与经典ARM7处理器的性能比较比较项目ARM7CM3系统节拍无内置系统节拍定时器,有利于操作系统移植调试端口JTAGSW-DP/SWJ-DP代码编写需要汇编代码(对于ISR等),缺少标准化,制约了应用移植不需要汇编器代码,用C语言编写所有代码,NVIC、SysTick与内存映射定义兼容的CMSIS(Cortex微控制器软件接口标准),简化了软件开发过程,降低了项目成本,缩短了开发时间CM3处理器与经典ARM7处理器的性能比较目录2.1ARM体系结构的特点2.2各ARM体系结构版本2.3Cortex-M3处理器模式2.4Cortex-M3内部寄存器2.5Cortex-M3处理器异常2.6STM32存储器组织2.7调试接口简介作业2.5STM32存储器组织Cortex-M3支持4GB存储空间,被划分成若干个区域。程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。Cortex-M3的存储器映射代码区片内外设(如看门狗、ADC、UART、定时器、IIC,等等)片内SRAM片外存储器片外外设CM3内核内部的系统外设(如NVIC、MPU、SCB、STK等)STM32F103xC/D/E存储器映射STM32系列处理器存储器映射1.Code区Code区(512MB)0x000000000x1FFFFFFF保留0x000000000x1FFFFFFF0x07FFFFFF保留0x08000000?系统存储器(2KB)?+10x1FFFEFFF选择字节0x1FFFF80F保留0x1FFFF810片内Flash存储器,容量16K~512KB0x1FFFF8000x1FFFF7FF0x1FFFF000根据BOOT引脚设置到Flash或系统存储器0x000800000x0007FFFF2.片内SRAMSRAM区(512MB)0x200000000x3FFFFFFFSRAM(6~64KB)0x20000000?0x3FFFFFFF保留?+13.片内外设(总512MB)1)APB1外设总64KB,每个外设1KB地址范围外设低速APB外设Fmax=24/36MHzAPB:AdvancedPeripheralBus2)APB2外设总32KB,每个外设1KB高速APB外设Fmax=48/72MHz3)AHB外设Fmax=48/72MHzAHB:AdvancedHigh-performanceBus4.Systemlevel(总512MB)Systemlevel(512MB)0xE00000000xFFFFFFFF内核外设(1MB)0xE00000000xE00FFFFF0xE01000000xFFFFFFFF511MB0xE00000000xE000EF000xE00FFFFF0xE000EF030xE000ED900xE000ED3F0xE000E1000xE000ED930xE000ED000xE000E4EF0xE000001F0xE0000010STK主NVICSCBMPUNVIC保留目录2.1ARM体系结构的特点2.2各ARM体系结构版本2.3Cortex-M3处理器模式2.4Cortex-M3内部寄存器2.5Cortex-M3处理器异常2.6STM32存储器组织2.7调试接口简介作业作业1.简要说明ARMCortex内核处理器分为哪几个系列?各有什么特点?2.ARMCortex-M3处理器有哪些优势符合嵌入式操作系统的要求?1.存储器的存储方式如果一个数据是从偶地址开始的连续存储,那么它就是半字对齐,否则就是非半字对齐;如果一个数据是以能被4整除的地址开始的连续存储,那么它就是字对齐,否则就是非字对齐。方式半字对齐字对齐地址……0x40020x4004…………0x40040x4008……特征Bit0=0其他位为任意值Bit1=0,Bit0=0其他位为任意值其他相关知识2.三级流水线采用哈佛总线体系结构的芯片内部程序空间和数据空间是分开的,这就允许同时取指和存/取数据,由于取指和存/取数据分别经由不同的存储空间和不同的总线,使得各条指令可以重叠执行,实现流水线操作。Cortex-M3的流水线分3级,分别为:取指译码执行取指译码执行处理指令并将结果写回寄存器识别将要被执行的指令从存储器装载一条指令正常操作过程中,在执行一条指令的同时对下一条(第二条)指令进行译码,并将第三条指令从存储器中取出。三级流水线结构的指令执行顺序PC指令1指令2指令3指令4…………程序存储器PC-4PC-8PC+4周期1周期2周期3周期4周期5周期6取指译码执行取指译码执行取指译码执行取指译码执行在第1个周期,PC指向指令1,此时指令1进入三级流水线的取指阶段。1在第2个周期,PC指向指令2,此时指令1进入三级流水线的译码阶段,同时取出指令2。2在第3个周期,PC指向指令3,此时指令1进入三级流水线的执行阶段,指令2进入译码阶段,取出指令3。3在第4个周期,指令1执行完成,指令2和指令3流水线推进一级,同时开始指令4的取指处理。4处理器执行一条指令的三个阶段分支预测:当遇到分支指令时,译码阶段也包含预测的指令取指,这提高了执行的速度。处理器在译码阶段自行对分支指令的目的地址进行取值。在稍后的执行过程中,处理完分支指令后便知道下一条要执行的指令。如果分支不跳转,那么紧跟着的下一条指令随时可供使用。如果分支跳转,那么在跳转的同时分支指令可供使用,空闲时间限制为一个周期。堆栈是内存中划分出的一段存储空间,这个存储空间就像一个数据仓,用于暂存数据。堆栈操作通常发生在子程序调用、异常发生,用于确保原有程序状态不被破坏;另外,堆栈操作还发生在程序运行过程中寄存器数量不够时,用于暂时存储,需要时再提取处理。3.堆栈堆栈结构与弹匣结构匣中子弹剩余容量子弹出入口栈中数据剩余堆栈空间存储器空间堆栈空间堆栈数据出入口出入口固定不变栈顶移动栈底固定不变簧栓位置移动堆栈指针SP指向的位置5.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业管理师岗前操作水平考核试卷含答案
- 水解酵母分离工岗中合规化考核试卷含答案
- 上海顶管沉井施工工艺流程
- 人教版2026-2027学年九年级物理上册教学工作计划(及进度表)
- 储水、供水设备供货及安装施工方案
- 2026年机械员模拟考试题库带答案详解(突破训练)
- 2026年人工智能考试及答案
- ESG评级体系纳入不锈钢园林工具项目融资成本的量化影响评估
- 2026山西省住院医师规范化培训结业理论考核(耳鼻喉科)历年参考题库含答案详解
- 2026导游资格证-导游业务考试历年参考题库含答案详解
- JGJT178-2009 补偿收缩混凝土应用技术规程
- 空调维保投标方案(技术标)
- 数学史全套课件
- 汝瓷营销策划方案
- 第一单元整体教学设计 统编版语文八年级上册
- 河北2023年邢台银行笔试考试参考题库含答案详解
- 石氏伤科理论与当代伤科疾病的防治
- 大学新生入学教育-课件
- 《电子制造技术-电子封装》配套教学课件
- 2023版北京协和医院重症医学科诊疗常规
- 新HSK五级写作-详全
评论
0/150
提交评论