【文档说明】CM嵌入式系统体系结构课件.ppt,共(89)页,3.127 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-92594.html
以下为本文档部分文字说明:
第2章ARMCortex-M3体系结构Cortex-M3内核的主要特点功耗低-2uw内核的门数少,具有优异的性价比中断延迟短调试成本低具有嵌套向量中断控制器(NVIC)处理器采用ARMv7-M架构具有可裁减的存储器保护单元(MPU)总线接口2.1ARMCortex-M3处理器内核
CM3处理器内核是ARMv7-M体系结构:1.CPU中央处理器(32位)2.先进的系统外设3.中断控制4.内存保护5.系统调试与跟踪功能6.传统Thumb和新型Thumb2指令译码器7.特殊功能寄存器STM32F103系列内部框图2.2处理器工作模式和状态不同的应用会有不同的
模式不同的模式解决不同的问题模式代表解决特定的应用或某类问题的解决方案(手机有正常模式和飞行模式)。CM3的模式用于区别:(1)普通应用程序的代码与异常(2)中断服务例程的代码CM3的操作模式CM3具有存储器访问的保护机制,它使得普通用户程序代码不能意外地或恶意地执行涉及要害
的操作。支持线程和处理者操作模式。(程序类型)CM3的操作模式处理器2种操作模式:处理模式和线程模式程序执行设置2种权限:用户级和特权级。特权级可以访问任意资源,用户级对有些资源的访问有限制或不允许访问。操作模式状态转换1、CM3运行主应用程
序时(线程模式),可使用特权级或用户级2、处理异常服务例程必须使用特权模式。3、复位后,CM3默认进入线程模式,特权级访问4、从特权模式切换到用户级,修改CONTROL寄存器即可5、用户级切换回特权级
,必须执行一条系统调用指令SVC,触发SVC异常,在异常服务例程中修改CONTROL才能回到特权级支持2种模式和2种访问1.工作模式与访问权限的关系非私模式私有模式私有模式HandlerThread特权访问和用户访问2.特权访问
和用户访问之间的相互转换线程模式特权访问处理模式特权访问线程模式用户访问复位异常异常退出MSR指令置位CONTROL[0]=1CONTROL[0]=1CONTROL[0]=0异常Cortex-M3与ARM7的性能比较Cortex-M3的寄存器集
13个通用寄存器:r0~r12分组的堆栈指针r13,别名为SP_process和SP_main链接寄存器r14程序计数器r151个程序状态寄存器xPSRCortex-M3的寄存器集r0r1r2
r3r4r5r8r7r9r6r12r11r10r13(SP)r14(LR)r15(PC)xPSR程序状态寄存器r13(SP)高寄存器低寄存器SP_processSP_mainCM3采用双堆栈结构通用寄存器低组寄存器r0-r
7高组寄存器r8-r12堆栈指针寄存器r13链接寄存器(LR)r14程序计数器寄存器r15堆栈指针R13CM3支持2个堆栈,都指向R13主堆栈MSP:默认堆栈指针,系统内核、异常、特权访问时使用。进程堆栈PSP:可在线程模式使用处
理模式线程模式可用MSP始终使用MSP也可用PSP处理器模式线程模式主堆栈线程模式线程堆栈处理模式主堆栈复位产生异常异常退出产生异常EXC_RETURN[3:0]=0b1001EXC_RETURN[3:0]=0b1101链接寄存器R14
(LR)LR用于在调用子程序时存储返回地址,也用于异常返回。PC的最低位LSB始终为0,但LR的LSB可读/写。在这之前,由LR的第0位来指示ARM/Thumb状态,因为有些ARM芯片同时支持ARM状态和Thumb状态。为方便程序移植,CM3需要允许L
R的LSB位可读/可写。程序计数器R15(PC)CM3内部使用了三级指令流水线,读PC时返回值是当前指令的地址+4若向PC写入一个数据,就会引起程序分支CM3中的指令时半字节对齐的,所以PC得最低有效位总是读回
0.程序状态寄存器内部分为三个子状态寄存器:1、应用程序PSR(APSR)2、中断状态PSR(IPSR)3、执行状态PSR(EPSR)通过MRS/MSR指令,这三个PSRs可单向访问,也可组合访问。使用三合一访问时的名称为xPSR或PSR。寄存器位域名称APSR各位定义1、应用状态寄存器(A
PSR)包含条件代码标志。2、在进入异常之前,Cortex-M3处理器将APSR中的条件代码标志保存在堆栈内(硬件压栈)。3、访问APSR可以使用MSR(2)和MRS(2)指令来。APSR的位分配1:结果为负数或小于0:结果为正数或大于1:结果为00:结果为非01:进位或借位0:没有进位或
借位1:溢出0:没有溢出(stickysaturation)标志,某变量值达到上限/下限时被置1313029282726----0NZCVQ保留进位/借位标志:溢出标志:零标志:负数或小于标志:置顶饱和标志:中断状态寄存器(IPSR)中断状态寄存器(IPSR)包含当前激
活的异常的ISR编号。IPSR的位分配ISRNUMBER基础级别=0Reset=1NMI=2SVCall=11......31----98--0保留中断号执行状态寄存器(EPSR)为什么需要执行状态寄存器EPSR?LDM、STM和If-t
hen指令,为多周期指令,如果在执行以上多周期指令时发生异常,处理器会暂时停止以上指令的操作,进入异常,这时需要保护现场。LDM指令STEP1STEP2STEP3STEP4异常异常程序执行状态寄存器PSR(EPSR)
包含两个重叠的区域:可中断-可继续指令(ICI)区多寄存器加载(LDM)和存储(STM)操作是可中断的。EPSR的ICI区用来保存从产生中断的点继续执行多寄存器加载和存储操作时所必需的信息。If-then状态区EPSR的IT区包含了If-Then指令的执行状态位。注:ICI区和IT区是
重叠的,因此,If-Then模块内的多寄存器加载或存储操作不具有可中断-可继续功能。EPSR的位分配可中断-可继续的指令位。如果在执行LDM或STM操作时产生一次中断,则LDM或STM操作暂停,EPSR使用位[15:12]来保存该操作
中下一个寄存器操作数的编号。在中断响应之后,处理器返回由[15:12]指向的寄存器并恢复操作。如果ICI区指向的寄存器不在指令的寄存器列表中,则处理器对列表中的下一个寄存器(如果有)继续执行LDM/STM操作。31
272625242316151090保留ICI/ITT保留ICI/IT保留ICIEPSR的位分配If-Then位。它们是If-Then指令的执行状态位。包含If-Then模块的指令数目和它们的执行条件。3127262524231615109
0保留ICI/ITT保留ICI/IT保留ITEPSR的位分配用于指示处理器当前是ARM状态还是Thumb状态。由于ARMv7-M架构仅仅支出Thumb指令,所以T位一直为1。操作EPSR寄存器时必须注意,不能清零T位,否则会引起INVSTATE异常。312726252423161
51090保留ICI/ITT保留ICI/IT保留不能直接访问EPSR,若想修改EPSR必须发生以下两个事件之一:在执行LDM或STM指令时产生一次中断执行If-Then指令如果出现下列情况,LDM/STM操作重新开始而不是继续执行:
LDM/STM错误LDM/STM指令位于IT内EPSR访问特殊功能寄存器1中断屏蔽寄存器(PRIMASK)相当于中断总开关,为1,所有中断被屏蔽;为0,中断能正常响应。只有最低位有效。PRIMASK所有中断被屏蔽中断屏蔽寄存器(只有1位)中断能正常响应10特殊功能寄存器2异
常关闭寄存器(FaultMASK)相当于异常总开关,为1,除NMI外所有异常被屏蔽;为0,异常能正常响应。只有最低位有效。FaultMASK除NMI外所有异常被屏蔽异常关闭寄存器(只有1位)异常能正常响应10特殊功能寄存器3BASEPRI(最多有9位)定义
屏蔽优先级的阀值优先级号大于/等于阀值的中断被屏蔽。例如,把BASEPRI设置为2,则2和2以上优先级的中断都被屏蔽,只有0和1优先级的中断不会被屏蔽。注:BASEPRI与优先级分组有关,stellaris系列处理器使用高3位来配置。BASEPRI2优先级0优先
级1优先级2优先级3优先级4….中断被屏蔽中断可响应BASEPRI与BASEPRI_MAX为同一寄存器1、BASEPRI可任意设置新的优先级阀值2、BASEPRI_MAX只允许新的阀值比原来的数字更小。也就是说,修改BASEPRI
_MAX时,只能一次次地扩大屏蔽范围。特殊功能寄存器4控制寄存器(CONTROL)CONTROL寄存器由两个状态位组成:CONTROL[0]CONTROL[1]0特权模式主堆栈1用户模式进程堆栈功能作用:定义特权级别,选择堆栈指针CM3工作模式、堆栈、控制寄存器关系CM3寄存器(特殊功能寄存
器)CM3总线接口片上总线标准众多ARM公司开发的AMBA总线规范成为现在的主流AMBA总线规范包括:1、AHB(AdvancedHighpreformanceBus)系统总线,使用于高速设备连接2、APB(AdvancedpreformanceBus)外设总线,使用
于低速设备连接包含5个总线接口:1、Icode存储器接口(32位AHB,可访程存空间00000000-1fffffffH)2、Dcode存储器接口(32位AHB,可访程存空间00000000-1fffffffH)3
、系统接口(32位AHB,对系存空间20000000-dfffffffH和e010000-ffffffffH的指令、向量、数据和调试访问)4、外部专用外设接口(32位APB,可访外设空间e0040000-1e00ffffH)5、
内部专用外设接口(用于访问NVIC、DWT、FPB、MPU)CM3总线接口CM3内部功能描述内核采用ARMv7-M架构—32位CPUNVIC--嵌套向量中断控制器总线矩阵---32位系统总线AHB、外设总线APBFPB--实现硬件断点和代码空间到系
统空间的修补访问DWT--实现数据观察断点ITM----指令跟踪宏单元MPU---存储器保护单元ETM---嵌入式跟踪宏单元TPIU---跟踪端口接口单元SW/JTAG-DP---DP接口模块(先把外部信号转换成一个通用的32位调试总线信号。SWJ-DP支持SW
与JTAG两种协议,而SW-DP则只支持SW)另外,在CoreSight产品中还可使用一种JTAG-DP,它只支持JTAG协议。DAP总线上的地址是32的,其中高8位用于选择访问哪一个设备,由此可见最多可以在DAP总线上面挂256个设备。在CM3处
理器的内部,用去1个设备的地址,剩下的255个都可以用于连接访问端口(AP)到DAP总线上。数据类型Cortex-M3处理器支持以下数据类型32位字16位半字8位字节存储器格式小端数据格式(数据高位存入高地址)地址F的字
节33124162315870地址E的字节2地址D的字节1地址C的字节0地址E的半字1地址C的半字0地址C的字地址B的字节3地址A的字节2地址9的字节1地址8的字节0地址A的半字1地址8的半字0地址7的字节3地址6的字节2地址5的字节1地址4的字节0地址6的半字1地
址4的半字0地址3的字节3地址2的字节2地址1的字节1地址0的字节0地址2的半字1地址0的半字0地址4的字地址8的字地址0的字存储器格式大端数据格式(数据高位存入低地址)地址F的字节03124162315870地址E的字节1地址D的字节2地址C的字节3地址E的0地址C的半字
1地址C的字地址B的字节0地址A的字节1地址9的字节2地址8的字节3地址A的半字0地址8的半字1地址7的字节0地址6的字节1地址5的字节2地址4的字节3地址6的半字0地址4的半字1地址3的字节0地址2的字节1地址1的字节2地址
0的字节3地址2的半字0地址0的半字1地址4的字地址8的字地址0的字存储器格式例如:存储一个数据12345678H时,按大端数据格式存储:按小端数据格式存储:78H56H34H12H高位地址低位地址12H34H56H78H高位地址低位地址CM3存储器存储器层次结构寄存
器组内核板卡级芯片级外设TCMCache写缓存SRAMDRAMFlash和其他非易失级缓存硬盘、磁带和网络存储速度存储量CM3存储器组织CM3存储区的有效范围CM3存储器映射ROM表外部PPBETMTPIU保留NVIC保留FPBDWTITM0xE00FFFFF0xE00FF0
000xE00420000xE00410000xE00400000xE003FFFF0xE000F0000xE000E0000xE00030000xE00020000xE00010000xE00000000x43FFFFFF0x420000000x41FFFFFF0x40100000
0x400000000x23FFFFFF0x220000000x21FFFFFF0x201000000x200000001MBbitband区域31MB32MBbitband别名1MBbitband区域31MB32MBbitband别名特定厂商专用外设总线-外部专用外设
总线-内部外部设备外部RAM外设SRAM代码1.0GB1.0GB0.5GB0.5GB0.5GB0xFFFFFFFF0xE01000000xE00FFFFF0xE00400000xE003FFFF0xE00000000xDFFFFFFF0xA00000000x9FF
FFFFF0x600000000x5FFFFFFF0x400000000x3FFFFFFF0x200000000x1FFFFFFF0x00000000别名区和bit_band区的对应关系SRAM1MBbit_band区域SRAM32MB别名区域外设存储区1MBbit_band区域外设存储区3
2MB别名区域公式公式通过转换公式计算1MBbit_band区=8Mbit位位在首地址:片上SRAM:20000000H片上外设区:40000000H别名首地址:片上SRAM:22000000H片上外设区:42000000H位带别名区=32MB位操作类似8051单片机例如对P1.2、P1.
5置位,对P1.0、P1.3清0有位地址比较方便(采用“读—改—写”)但对内部一些单元的某位做清0/置1操作时,需要屏蔽其他位CM3位绑定操作CM3支持位绑定操作:把一个地址的32位变量中的每1位,通过一个简单的地址换算,映射到另一个地址空间,每1位占用1个字地址(字
地址低位有效)。这样:操作别名地址就是读/写位地址采用直接读/写CM3位绑定操作CM3位绑定操作可简化跳转程序:以前判断:读取寄存器掩蔽不需要的位比较跳转。有位绑定判断:从位绑定别名区读取位直接比较判断,并且其他总
线活动不能中断位绑定操作。CM3位带写操作假设:要把位带地址20000000H.2置1:无位带操作方式用位带操作方式CM3位带读操作假设:要读出位带地址20000000H.2:无位带操作方式用位带操作方
式CM3位带区位带区操作中,有一个地址映射过程CM3位带区地址范围位带区每个bit位映射到别名区的1个字对应的两个位带别名区的地址范围:0x22000000~0x23FFFFFF(SRAM区中32MB)0x42000000~0x43FFFFFF(片上外设区中32MB)CM3位带
地址换算公式对SRAM位带地址的bit位,设其所在的字节地址为A,位序号n,则该bit在别名区的字地址为:对片上外设的位带地址换算为别名地址公式:位带地址偏移量位带地址偏移量CM3位带地址别名地址转换例证例如1:
对SRAM中20000204H.3位带地址,换算出对应的别名地址。则A=20000204H,n=3计算位带偏移量为:20000204H-20000000H则别名地址=22000000H+204H*32+3*4=22000000H+4
080H+0CH=2200408CHCM3别名地址位带地址转换例证例如1:对SRAM中220003A8H别名地址,换算出对应的位带地址。1、计算别名地址偏移量为:03A8H2、求位带地址偏移量:[别名地址偏移量/32]得到整数和余数,整数即是位带地址偏移量3、求位序号:[余数/4]
得到位序号4、求位带地址:整合计算数据得到:位带首地址+偏移量+位序号例如1:对SRAM中220003A8H别名地址,换算出对应的位带地址。1、别名地址偏移量=03A8H2、位带地址偏移量:[别名地址偏移量/32]=1DH…8得到整数=1DH和余数=83、位序号:[8/4]=24、位带地址=2
0000000H+1DH+.2=2000001DH.2CM3的ROM存储器表(内部外设)指令集指令是CPU的执行命令,是程序编写的语言计算机编程语言是软件的载体软件和硬件是通过指令联系的指令集是计算机硬件与软件
的接口ARM指令集ARM处理器是加载/存储型32位指令集:1、即指令集只能处理寄存器的数据,处理结果放回到寄存器中2、且对系统存储器的访问应通过专门的加载/存储指令ARM指令系统是RISC指令集,指令选取使用频率高、有用又不复杂、长度固定、指令格式种类少、寻址
方式少、存储器存取、寄存器间操作、1机器周期指令、以硬布线控制逻辑为主。ARM指令分类ARM采用长乘法指令、增强的DSP指令,集合了RISC与CISC的优势,中断响应快速,支持虚拟存储系统和高级语言等。ARM指令集分为:1、跳转指令2、数据处理指令3、程序状态寄存器(PSR)
处理指令4、加载/存储指令5、协处理器指令6、异常产生指令MRS指令结构MRSEQ.WR0,PSPMRS<c><q><Rd><<spec_reg>通用寄存器(R0-R15)特殊功能寄存器指令码条件执行指示是16位还
是32位指令<Instruction>[S][Rd],[Rn],[Rm]指令操作码更新CPSR目的寄存器源操作数Thumb指令集Thumb是ARM指令集的一个子集,允许指令编码长度为16位,可节省系统存储空间。所有Thumb
指令都对应ARM指令,只要遵循原则,它们的子程序可以互相调用。处理器执行ARM程序段时处于ARM工作状态,执行Thumb程序段时,处于Thumb工作状态。Thumb舍弃了ARM指令集的一些特性,但操作数仍是32位的,时间效率和空间效率有变化。T
humb-2指令集Thumb-2强大、易用、高效,支持16位和32位指令集,是一种突破性指令集,是16位Thumb指令集的一个超集。Thumb-2把16位Thumb指令和32位ARM指令并存,处理器执行程序没有切换的额外开销、可节省执行时间和指令空间;不需要把
源代码分成按ARM和Thumb编译,软件开发管理减负,无需反复求证和测试状态何时切换,程序效率高,软件开发容易。ThumbInstructions(16bit)Cortex-M3Thumb-2InstructionSet(32b
itand16bit)Thumb-2与Thumb指令集的关系CM3的三级指令流水线指令执行步骤:1、CM3处理器从内存读取指令(Fetch)2、解码(Decode)3、执行(Execute)InstructionNFetchDecodeExecuteFet
chDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteInstructionN+1InstructionN+2InstructionN+3CM3的三级流水线32bitCM3处理器的异常异
常:当内核产生复位、存取失败、遇到未定义指令时,正常执行的程序暂停,转到相应的处理程序执行称为异常。每个异常对应一个异常处理程序。异常程序执行完后,返回当前程序继续执行CM3允许多个异常同时发生,并按固定的优先级进行处理。中断与异常中断:当CM3内核的外部发生某一事件,产生触发信号,引起
CPU暂停当前执行的程序,转到相应的事件中断处理程序去执行。执行完后返回。异常与中断的区别:中断对CM3内核来说是意外突发事件,请求信号来自外部;异常时CM3内核产生的,即在执行指令或存取中产生的。中断与
异常名称、概念相似,如不特别说明,按中断性质处理。CM3处理器的异常处理自动的状态保存和恢复自动读取代码存储器或SRAM中包含ISR地址的向量表入口支持末尾连锁中断优先级可动态重新设置中断数目可配置为1~240中断优先级的数目可配置为1~8位使用C/C++标准的
调用规范优先级屏蔽支持临界区CM3处理器的异常类型复位-3不可屏蔽中断NMI-2硬故障Fault-1存储器管理总线故障使用故障SVCall调试监控器PendSVSysTick外部中断优先级由高到低优先级为负数优先级不可调整优先级可调整(范围0~256)实际只用了0~15嵌套向量
中断控制器NVICNVIC基本功能:支持向量中断、可屏蔽中断、嵌套中断、很短中断延时和动态优先级调整。中断挂起:不能被立即响应的中断。中断挂起的原因:有高优先级中断在执行,或相关屏蔽位被置位。被挂起的中断,对应有一个挂起寄存器保存其中断请求,等到该中
断能响应时执行服务程序。传统ARM由产生中断的设备保存住请求信号,CM3由NVIC挂起寄存器来保存。NVIC支持内置睡眠模式的电源管理,调用WFI或WFE指令则进入睡眠,发生中断退出睡眠。Systick定时器:NVIC集成了1个24位Systick定时器,产生时间片,可用于操作系统或预订服务
。进入ISR之前,CM3处理器采取的步骤8个寄存器压栈(xPSR、PC、LR、R12、R3、R2、R1、R0压栈)读中断向量表从中断向量表中读SP更新PC加载流水线更新LR中断、异常过程硬件压栈读向量表从高向量表中读SP更新PC加载流水线更新LR在所选的堆栈上把xP
SR、PC、LR、R12、R3、R2、R1、R0压栈读存储器中向量表,地址=向量表基址+(异常号)*4,中断函数入口在复位时,将SP更新为向量表中第1个字的值利用向量表读出的位置更新PC,直到第1条指令开始执行时,才能出来迟来异常从向量表指向的位置加载指令,
它与寄存器压栈操作同时执行LR设置为EXC_RETURN,以便从异常中退出(LR的值并非进入异常程序的地址)。CM3处理器的异常优先级优先级优先级分组在一个系统中,通常有5种分组,由32位AIRC寄存器的[10:8]
这3位决定使用那一组7654321076543210PRI_N占先区次优先区异常占先示意图用户程序中断1中断2优先级3优先级2中断1中断2压栈压栈出栈出栈抢占之后堆栈中的内容末尾连锁示意图用户程序中断1中断2优先级3优先级2中断1中断2如果此时中断
1已经完成,不出栈也不压栈,直接跳至中断2程序压栈出栈中断1结束异常迟来示意图用户程序中断1中断2优先级3优先级2中断1中断2压栈出栈继续压栈执行末尾连锁不需出栈压栈完成异常返回如果激活异常的优先级比所有被压栈的异常的优先级都高,则处理器会
末尾连锁到一个激活异常如果没有激活异常,或者如果被压栈的异常的最高优先级比激活异常的最高优先级还要高,则处理器返回到上一个被压栈的ISR如果没有激活中断或被压栈的异常,则处理器返回线程模式异常退出8个寄存器出栈:如果没有被抢占,则将PC,
xPSR,r0,r1,r2,r3,r12,LR从所选的堆栈中出栈(堆栈由EXC_RETURN选择),并调整SP加载当前激活的中断号:加载来自被压栈的IPSR的位[8:0]中的当前激活的中断号选择SP:如果返回到异常,SP为SP_main,如果返
回到线程模式,则SP为SP_main或SP_process异常退出流程图将PC、xPSR、r0、r1、r2、r3、r12、LR从所选堆栈中出栈加载来自压栈的xPSR的位[8:0]加载当前激活的中断号IPSR的位[8:0]是否为0?进入另一个异常
中断设置EXC_RETURN[3:0]选择堆栈返回线程模式主堆栈返回线程模式进程堆栈是=0b1001否=0b1101STM32微控制器1、STM32命名2、STM32内部资源(1)4个驱动单元:CM3内核的Icode总线(I-bus),
Dcode总线(D-bus),系统总线(S-bus),通用DMA1、DMA2与以太网DMA(2)4个被动单元:内部SRAM,内部Flash,FSMC,AHB到APB的桥(连接所有APB设备)2、STM32内部资源系统结构3、STM32F103内部模
块框图STM32F103R8T6内部资源1、内核:32位CM3,72MHz,1.25DMPIS/MHz2、存储器:128KB--Flash,20KB—SRAM3、时钟、复位和电源管理:4、低功耗:5、I/O口:5组16位多功能双向5V
兼容端口,可映像到外部中断(PA,PB,PC,PC,PD,PE)6、DMA控制器:支持定时器、ADC、SPI、I2C和USART7、A/D转换器:2个12位、1us速度8、通信接口:3个USART+2个I2C+2个SPI+1个CAN+1个USB2.0+9、定时器:2个高级+4个通
用+2个基本+1个RTC+2个WDG+1个SysTick10、调试模式:串行线调试SWD和JATG4、STM32微控制器引脚图课堂作业:1、ARM的大端存储格式与小端存储格式有什么区别?2、已知地址范围0074700H
~3F7FFFFH,计算其存储空间的大小。3、已知位带地址位200001FFH.7,求对应的别名地址。4、已知别名地址为22001020H,求对应的位带地址。第2章END