您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > arm cortex m3 嵌入式 交大 PPT
嵌入式系统上海交通大学2010.6第8章嵌入式系统和Cortex‐M38.1嵌入式系统8.1.1定义嵌入式系统是用来实现一种或多种功能并且常常带有实时计算要求的计算机系统。它作为一个完整设备的嵌入部分。一般用途的计算机,比如个人电脑(PC),常常设计的很灵活并且能满足最终用户的广泛需求。8.1.2历史在20世纪30年代到40年代,计算机某些时候常常只致力于完成一个任务,但是它太大又太贵。阿波罗导航电脑属于第一批被承认的现代嵌入式系统,由麻省理工的CharlesStarkDraper发明。Intel4004是第一个微处理器,针对计算器和其他小型系统设计。到了20世纪80年代中期,大部分以前共同的外部系统组件已经被集成到了同样的芯片上。微控制器的集成增加了传统计算机不会有的应用。8.1.3特征1.嵌入式系统被设计用来做一些特殊的任务。一些嵌入式系统有必须达到的实时性能要求;另一些嵌入式系统在实时性能方面的要求会低些或者没有要求。2.许多嵌入式系统由在一个大设备里提供通用功能的小电脑零件组成。3.为嵌入式系统所写的程序指令被称为固件,被存储在只读存储器或者Flash存储器芯片内。8.1.4应用嵌入式系统跨越现代生活的各个方面,其使用也有许多例子。电信系统在网络到移动电话最终使用者的电话交换机上应用了很多嵌入式系统。消费类电子产品包括个人数字助理(PDAs),mp3播放器,移动电话,和视频游戏机。交通系统中从飞机到汽车越来越多地使用嵌入式系统。新飞机中包含的先进航空电子设备如惯性导航系统和GPS接收机也有相当高的安全要求。各种电动马达—无刷直流电动机,感应电机和直流电动机—正在使用电动/电子马达控制器。8.1.5嵌入式系统中的处理器嵌入式处理器可以分为两大类:普通的微处理器(μP)和微控制器(μC)。1.相当大数目的基本CPU架构被使用。冯•诺依曼和哈佛架构。RISC以及non-RISC和VLIW.2.字长从4位变化到64位及以后(主要是在DSP处理器中)。3.大多数架构从大量的不同变种和样式中来。ARMARM,是一个以AdvancedRISCMachine为人所知的公司,和在此之前的theAcornRISCMachine。截至2007年,每年销量达十几亿的手机中有大约98%至少使用了一个ARM处理器。截至2009年,ARM处理器大约占所有嵌入式32位RISC处理器的大约90%。ARM处理器广泛用于消费类电子产品,包括掌上电脑,移动电话,数字媒体和音乐播放器。ARM公司的业务一直是出售IP核。最成功的ARM7TDMI已经有亿万售出。现在或先前ARM授权的公司包括:Alcatel-Lucent,AppleInc.,Atmel,Broadcom,Freescale,Intel,Samsung,TI,ect.ARM控股的ARM处理器家庭的突出例子包括ARM7,ARM9,ARM11andCortex.8.2Cortex-M3概述Cortex-M3的简化视图1.32-bit微处理器:32-bit数据路径,32-bit寄存器组,32-bit存储器接口。2.哈佛架构:独立的指令总线和数据总线。这允许指令和数据在同一时间产生。3.存储空间:8GB。4.寄存器:寄存器(R0到R15)和特殊寄存器。5.运行模式:线程模式和处理模式;特权级和用户级。6.中断和异常:内置在嵌套向量中断控制器;支持11种系统异常外加240种外部IRQ。7.总线接口:若干总线接口允许Cortex-M3同时取指令和取数据。8.MPU:一个可选的存储器保护单元允许对特权访问和用户程序访问制定访问规则。9.指令集:Thumb-2指令集;允许32-位指令和16-位指令被同时使用。10.固定的内部调试组件:提供调试操作支持和像断点调试这样的功能。8.3Cortex-M3基础8.3.1寄存器8.3.1.1通用寄存器1.R0~R7(低寄存器):可以被所有16-bitThumb指令和所有32-bitThumb-2指令访问。2.R8~R12(高寄存器):可以被所有Thumb-2指令但不能被所有16-bitThumb指令访问。Cortex-M3中的寄存器8.3.1.2堆栈指针R13是堆栈指针。两个堆栈指针是库存的所以在同一时间只有一个可见。堆栈指针的最低两位总是0,这意味着他们总是字对齐。两个堆栈指针是:1.主堆栈指针(MSP):这是默认的堆栈指针。2.进程堆栈指针(PSP):被基本级别的应用程序代码所使用。堆栈指针用来进行堆栈存储器操作比如PUSH和POP。堆栈存储器的基本概念汇编语言的语法:PUSH{R0};R13R13-4,thenMemory[R13]R0POP{R0};R0Memory[R13],thenR13R13+4你可以在一条指令中PUSH或POP多个寄存器:subroutine_1PUSH{R0-R7,R12,R14};Saveregisters…;DoyourprocessingPOP{R0-R7,R12,R14};RestoreregistersBXR14;Returntocallingfunction8.3.1.3链接寄存器R14是链接寄存器(LR).当一个子程序或函数被调用时,LR用来存储返回的程序计数器。当你使用BL(branchandlink)指令时:main;Mainprogram…BLfunction1;Callfunction1usingBranchwithLink;instruction.;PC=function1and;LR=thenextinstructioninmain…function1…;Programcodeforfunction1BXLR;Return8.3.1.4程序计数器R15是程序计数器。你可以在汇编语言中通过R15或PC访问它。当你读这个寄存器时,你会发现它的值和执行指令位置的值相差4。Example:0x1000:MOVR0,PC;R0=0x10048.3.2特殊寄存器在Cortex-M3处理器中的特殊寄存器包括:1.程序状态寄存器(PSRs)2.中断屏蔽寄存器(PRIMASK,FAULTMASK,andBASEPRI)3.控制寄存器(CONTROL)Cortex-M3中的特殊寄存器8.3.2.1程序状态寄存器(PSRs)程序状态寄存器可以分为三个状态寄存器:1.应用PSR(APSR)2.中断PSR(IPSR)3.执行PSR(EPSR)313029282726:252423:2019:1615:10987654:0xPSRNZCVQICI/ITTICI/ITExceptionNumberCortex-M3中的结合程序状态寄存器Cortex-M3中的程序状态寄存器(PSRs)313029282726:252423:2019:1615:10987654:0APSRNZCVQIPSRExceptionNumberEPSRICI/ITTICI/ITEPSR和IPSR是只读的:MRSr0,APSR;ReadFlagstateintoR0MRSr0,IPSR;ReadException/InterruptstateMRSr0,EPSR;ReadExecutionstateMSRAPSR,r0;WriteFlagstateBitDescriptionN负Z零C进位/借位V溢出Q置顶饱和标记ICI/IT中断可持续指令(ICI)位,IF-THEN指令状态位TThumb状态,总是1;试图清除此位将导致错误异常异常号指出处理器正在处理哪一个异常Cortex-M3中程序状态寄存器的位域8.3.2.2PRIMASK,FAULTMASK和BASEPRI寄存器PRIMASK,FAULTMASK,和BASEPRI寄存器被用来禁用异常。Cortex-M3中断屏蔽寄存器寄存器名描述PRIMASK一个1-bit寄存器。当置位时,它允许NMI和硬件默认异常;所有其他的中断和异常将被屏蔽。FAULTMASK一个1-bit寄存器。当置位时,它只允许NMI,所有中断和默认异常处理被忽略。BASEPRI一个9位寄存器。它定义了屏蔽优先级。当它置位时,所有同级的或低级的中断被忽略。当访问PRIMASK,FAULTMASK,和BASEPRI寄存器时,MRS和MSR指令被使用.Example:MRSr0,BASEPRI;ReadBASEPRIregisterintoR0MRSr0,PRIMASK;ReadPRIMASKregisterintoR0MRSr0,FAULTMASK;ReadFAULTMASKregisterintoR0MSRBASEPRI,r0;WriteR0intoBASEPRIregisterMSRPRIMASK,r0;WriteR0intoPRIMASKregisterMSRFAULTMASK,r0;WriteR0intoFAULTMASKregister在用户访问级,PRIMASK,FAULTMASK,和BASEPRI寄存器不能被置位。8.3.2.3控制寄存器控制寄存器被用来定义特权级和堆栈指针的选择。这个寄存器有两位。Cortex-M3控制寄存器BitFunctionCONTROL[1]堆栈状态:(当访问级别改变时自动改变)1=进程堆栈(PSP)被使用(针对用户级)0=默认堆栈(MSP)被使用(针对特权级)CONTROL[0]指定的访问级别:0=特权的线程模式1=用户状态的线程模式CONTROL[1]在Cortex-M3中,在处理模式中CONTROL[1]位总是0(MSP)。但是,在线程或基本级别,它可以为0或1。CONTROL[0]CONTRL[0]位只在特权状态可写。使用MRS和MSR指令来访问控制寄存器:MRSr0,CONTROL;ReadCONTROLregisterintoR0MSRCONTROL,r0;WriteR0intoCONTROLregister8.3.3操作模式两种模式和两种全线级别。操作模式决定处理器运行正常程序或运行异常处理程序。特权用户当运行一个异常处理器模式当运行主程序线程模式线程模式在Cortex-M3中的操作模式和权限级别特权级别提供了一种机制来保障访问存储器的关键区域,同时还提供了一个基本的安全模式。通过写Controlregister[0]=1,软件在特权访问级别可以使程序转换到用户访问级别。用户程序不能够通过写控制寄存器直接变回特权状态。它要经过一个异常处理程序设置Controlregister[0]=0使得处理器切换回特权访问级别。通过控制寄存器或异常来切换操作模式由控制寄存器来定义处理器的模式和访问级别。当Controlregister[0]=0,异常发生时只有处理器的模式发生了变化。访问级别始终停留在特权状态。在中断时改变处理器模式Stacking对于用户级别程序转换到特权状态,需要在处理程序产生一个中断(例如,SVC,或呼叫系统服务)和写CONTROL[0]=0。在中断时切换处理器模式和权限级别Stacking8.3.4向量表向量表是字数据的一个队列。当使用PUSH/POP指令时,堆栈指针自动地增加/减少。例如:复位是异常类型1。复位向量的地址是1乘4,等于0x00000004,NMI向量(类型2)位于2*4=0x00000008地址0x00000000被用作MSP的开始值。复位后的向量表定义异常类型偏移地址异常向量150x3CSYSTICK140x38PendSV130x34保留120x30调试监视110x2CSVC7-100x1C-0x28保留60x18使用故障50x14总线故障40x10存储器管理故障30x0C硬件故障20x08NMI10x04复位00x00MSP的开始值8.3.5栈内存操作8.3.5.1栈的基本操作在寄存器中的数据可以通过PUSH操作保存到栈内存并且通过POP操作在稍后恢复到寄存器.主程序...;R0=X,R1=Y,R2=ZBLfunction1function1PUSH{R0};storeR0tostack&adjustSPPUSH{R1};storeR1tostack&adj
本文标题:arm cortex m3 嵌入式 交大 PPT
链接地址:https://www.777doc.com/doc-6126577 .html