ARM Cortex M体系结构课件.ppt
第2章 ARM Cortex-M体系结构,2.1 ARM Cortex体系概述2.2 Cortex-M4内核基础2.3 存储器系统2.4异常和中断习题,2.1 ARM Cortex体系概述,2.1 ARM Cortex体系概述,ARM公司在经典处理器ARM11以后的产品都改用Cortex命名,主要分成A、R和M三类,旨在为各种不同的市场提供服务,A系列处理器面向尖端的基于虚拟内存的操作系统和用户应用;R系列处理器针对实时系统;M系列处理器针对微控制器。,2.1 ARM Cortex体系概述,指令的强弱是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。从现阶段的主流体系结构来讲,指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分。,2.1.1 CISC和RISC,1CISC机器CISC体系的指令特征为使用微代码,计算机性能的提高往往是通过增加硬件的复杂性来获得的。,优点:指令丰富,功能强大,寻址方式灵活,能够有效缩短新指令的微代码设计时间,允许设计师实现CISC体系机器的向上相容。缺点:指令集及晶片的设计比上一代产品更复杂,不同的指令需要不同的时钟周期来完成,执行较慢的指令,将影响整台机器的执行效率。,2.1 ARM Cortex体系概述,2.1.1 CISC和RISC,2RISC机器RISC体系的指令特征:RISC包含简单、基本的指令,这些简单、基本的指令可以组合成复杂指令。,优点:在使用相同的晶片技术和相同运行时钟下,RISC系统的运行速度是CISC系统的运行速度的24倍。由于RISC处理器的指令集是精简的,它的存储管理单元、浮点单元等都能设计在同一块芯片上。缺点:多指令的操作使得程式开发者必须小心地选用合适的编译器,而且编写的代码量会变得非常大。另外就是RISC处理器需要更快的存储器,并将其集成于处理器内部,如一级缓存(L1 Cache)。,2.1 ARM Cortex体系概述,2.1.1 CISC和RISC,3RISC和CISC比较,表2-1RISC和CISC特点对比,2.1 ARM Cortex体系概述,1985年,Roger Wilson和Steve Furber设计了第一代32位、6MHz的处理器,做出了一台RISC指令集的计算机,简称ARM(Acorn RISC Machine)ARM的由来。1990年,Acorn公司正式改组为ARM计算机公司。ARM公司生产的芯片,称为ARM芯片。ARM公司的业务一直是出售IP核。ARM控股的ARM处理器家庭的突出例子包括ARM7, ARM9, ARM11 and Cortex-M,Cortex-A系列 。,2.1.2 ARM架构发展史,ARM推出新款ARMv8架构。包括Cortex-A53、Cortex-A57、 Cortex-A73、 Cortex-A75 、 Cortex-A76等处理器。,ARM处理器架构发展进程,2.1 ARM系统概述,2.1.2 ARM架构发展史,2.1 ARM系统概述,2.1.3 ARM体系结构类型,ARM处理器分为6类:Cortex-A系列处理器、Cortex-R系列处理器、Cortex-M系列处理器、Machine Learning系列处理器、SecurCore系列处理器、Neoverse系列处理器。,表2-2Cortex系列处理器的主要特征,2.1 ARM系统概述,2.1.3 ARM体系结构类型,图2-1Cortex系列处理器发展历程简图,2.1 ARM系统概述,2.1.4 Cortex-M系列处理器,表2-2Cortex系列处理器的主要特征,2.1 ARM系统概述,2.1.4 Cortex-M系列处理器,表2-2Cortex系列处理器的主要特征-续,2.2 Cortex-M4内核基础,2.2 Cortex-M4内核基础,Cortex-M4处理器已设计具有适用于数字信号控制市场的多种高效信号处理功能。Cortex-M4处理器采用扩展的单周期MAC指令、优化的SIMD指令、饱和运算指令和一个可选的单精度浮点单元(FPU)。,表2-4Cortex-M4系列处理器数字信号处理功能,图2-2Cortex-M4系列微控制器内部构造,基于Cortex-M3/M4的微控制器芯片,2.2 Cortex-M4内核基础,2.2 Cortex-M4内核基础,32-bit微控制器: 32-bit 寄存器组、存储器接口。哈佛架构:独立的指令总线和数据总线。存储空间:4GB。寄存器:寄存器 (R0 到 R15) 和 特殊功能寄存器。运行模式:线程模式和处理模式;特权级和用户级。中断和异常:内置嵌套向量中断控制器;支持11 种系统异常外加240 种外部 IRQ。总线接口:若干总线接口允许 Cortex-M4 同时取指令和取数据。MPU:一个可选的存储器保护单元允许对特权访问和用户程序访问制定访问规则。指令集:Thumb-2 指令集;允许 32位指令和16位指令被同时使用。内部调试组件:提供在线调试功能,例如:断点、单步、变量查看。,2.2.1 寄存器组,r0r12 ,为13个通用目的寄存器,低组寄存器 , r0-r7可以被指定通用寄存器的所有指令访问,高组寄存器 , r8-r12可以被指定通用寄存器的所有32位指令访问 ,16位Thumb指令不能访问它们,32位的Thumb2指令则不受限制。,2.2 Cortex-M4内核基础,1、R0-R12,2、R13,两个堆栈指针,处理模式,线程模式,可用 MSP,始终使用主堆栈指针(MSP),也可用进程堆栈指针(PSP),2.2 Cortex-M4内核基础,主堆栈和进程堆栈,Cortex-M3内核有两个堆栈指针:MSP和PSP,结束复位后,所有代码都使用主堆栈,所有异常都使用主堆栈,异常处理程序(例如SVC)可以通过改变其在退出时使用的EXC_RETURN值来改变线程模式使用的堆栈。,在线程模式中,使用MSR指令对CONTROL1执行写操作也可以从主堆栈切换到进程堆栈。,堆栈指针r13是分组寄存器,在SP_main和SP_process之间切换。在任何时候,进程堆栈和主堆栈中只有一个是可见的,由r13指示。,2.2 Cortex-M4内核基础,2、R13,两个堆栈指针,堆栈与微控制器模式的对应关系,2.2 Cortex-M4内核基础,通过MSR指令修改CONTROL1进行堆栈切换,CONTROL1,1,0,控制寄存器的第1位,一般通过中断返回进行堆栈切换,MSR指令切换用的极少。,2、R13,两个堆栈指针,Control 1 = 0: 使用MSP,线程模式 handler模式 线程模式(使用MSP) (使用MSP) (使用MSP),线程模式 handler模式 线程模式(使用PSP) (使用MSP) (使用PSP),Control 1 = 1: 线程模式使用PSPHandler模式使用MSP,2.2 Cortex-M4内核基础,2、R13,两个堆栈指针,int main ( ) . delay( ); SetLED1( );void delay( ) .,BL delaydelay: . BX LR .,0X20F0,0X20F4,地址,0X10F4,0X10F4,执行BL指令,LR的值同时更新(0X20F4),2.2 Cortex-M4内核基础,3、链接寄存器(LR),C代码,汇编代码,程序计数器 (PC)程序计数器 总是指向正在取指的指令。该寄存器的位0始终为0,因此,指令始终与字或半字边界对齐。,2.2 Cortex-M4内核基础,4、 程序寄存器(PC),R15 是程序计数器。可以在汇编语言中通过R15或PC访问。,2.2 Cortex-M4内核基础,2.2.2 堆栈操作,1栈的作用(1)用于在正在执行的函数需要使用寄存器(寄存器组)进行数据处理时,临时存储数据的初始值,这些数据在函数结束时可以被恢复出来,以免调用函数的程序丢失数据。(2)用于函数或子程序中的信息传递。(3)用于存储局部变量。(4)用于在中断等异常产生时保存处理器状态和寄存器数值。, 满递减堆栈。 满递增堆栈。 空递增堆栈。 空递减堆栈。,四种类型:,2.2 Cortex-M4内核基础,默认:满递减堆栈,2、入栈,3、出栈,2.2.2 堆栈操作,链接寄存器 (LR) 在执行分支(branch)和链接(BL)指令或带有交换的分支和链接指令(BLX)时,LR用于保存PC的返回地址。 主要用于保存子程序的 返回地址。 LR也用于异常返回。,2.2 Cortex-M4内核基础,3、 链接寄存器(LR),2.2.3 特殊功能寄存器,2.2 Cortex-M4内核基础,在Cortex-M3/M4处理器中的特殊寄存器包括: 1. 程序状态寄存器 (PSRs)2. 中断屏蔽寄存器(PRIMASK, FAULTMASK, and BASEPRI)3. 控制寄存器 (CONTROL),1 程序状态寄存器 (PSRs),2.2 Cortex-M4内核基础,程序状态寄存器可以分为三个状态寄存器:1. 应用 PSR (APSR) 负、零、进/借、溢、饱和(用于饱和运算)2. 中断 PSR (IPSR)3. 执行 PSR (EPSR) ICI/IT: ICI指令/IT指令状态位;T总为1,2 中断屏蔽寄存器PRIMASK、FAULTMASK 和 BASEPRI用来开放/禁用异常,Cortex-M3/M4 中断屏蔽寄存器,2.2 Cortex-M4内核基础,3 控制寄存器,Cortex-M3/M4 控制寄存器,2.2 Cortex-M4内核基础,被用来定义特权级和堆栈指针的选择。这个寄存器有两位。,特权级用户级,主堆栈进程堆栈,2.3.4 操作模式两种模式和两种特权等级。操作模式决定控制器运行正常程序或运行异常处理程序。,在Cortex-M3/M4中的操作模式和权限级别,特权级别提供了一种机制来保障访问存储器的关键区域,同时还提供了一个基本的安全模式。通过写Control register0=1,软件在特权访问级别可以使程序转换到用户访问级别。 用户程序不能够通过写控制寄存器直接变回特权状态。它要经过一个异常处理程序设置Control register0=0使得处理器切换回特权访问级别。,2.2 Cortex-M4内核基础,特权级用户级,线程模式处理器模式,工作模式和特权级别,处理器模式,线程模式,特权级,用户级,始终特权级,工作模式用于区别普通应用程序的代码和异常服务例程的代码(包括中断服务例程的代码),特权级别可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。,2.2 Cortex-M4内核基础,2.3.4 操作模式,特权执行可以访问所有资源。 非特权执行时对有些资源的访问受到限制或不允许访问。,特权访问和用户访问(非特权访问)的区别,用户访问,特权访问,2.2 Cortex-M4内核基础,1 特权级别,线程模式,线程模式和处理器模式,处理器模式,在复位时控制器进入线程模式,异常返回时控制器进入线程模式,特权和用户(非特权)代码能够在线程模式下运行,出现异常时控制器进入处理器模式,在处理器模式中,所有代码都是特权访问的,2 工作模式,2.2 Cortex-M4内核基础,CONTROL0,1,0,控制寄存器的第0位,3 特权级和工作模式转换,2.2 Cortex-M4内核基础,工作模式状态转换,特权模式下通过MSR指令修改CONTROL0状态,3 特权级和工作模式转换,2.2 Cortex-M4内核基础,当CONTROL0=0 时,在异常处理的始末,只发生了工作模式的转换。,线程模式 handler模式 线程模式(特权级) (特权级) (特权级),线程模式 handler模式 线程模式(用户级) (特权级) (用户级),若CONTROL0=1(线程模式+用户级),则在中断响应的始末,工作模式和特权等极都要发生变化。,2.2 Cortex-M4内核基础,3 特权级和工作模式转换,2.3 存储器系统,2.3 存储器系统,Cortex-M4内核的存储器系统的主要特性如下:(1)可寻址4GB线性地址物理空间。(2)支持小端和大端的存储器系统。Cortex-M4处理器可以选择使用小端或者大端的存储器系统。(3)位段访问。(4)写缓冲。对可缓冲存储器区域写操作需要花费几个周期时间,Cortex-M4处理器的写缓冲可以把写操作缓存起来,因此处理器可以继续执行下一条指令,从而提高了程序的执行速度。(5)存储器保护单元(MPU)。MPU定义了各存储器区域的访问权限,且为可编程。Cortex-M4处理器中的MPU支持8个可编程区域,可在嵌入式操作系统中提高系统的健壮性。Cortex-M4处理器中的MPU是可选的。多数应用不会用到MPU,可以忽略。(6)非对齐传输支持。ARMv7-M架构的所有处理器(包括Cortex-M4处理器)支持非对齐传输。,2 存储器格式,Cortex-M4处理器支持以下数据类型:32位字、16位半字、8位字节。,2.3 存储器系统,2.3.1 数据类型,存储器介质:,RAM: SRAM和DRAMROM: ROM、PROM、EPROM、EEPROMFLASH: NOR FLASH、NAND FLASH,2 存储器格式,存储器介质,RAM SRAM和DRAMROM ROM、PROM、EPROM、EEPROMFLASH NOR FLASH、NAND FLASH,2.3 存储器系统,小端存储,0 x120 x340 x560 x78,0 x780 x560 x340 x12,2.3 存储器系统,大端存储,0 x12345678,存储器地址,存储器地址,2.3.2 存储形式,Cortex-M4 处理器有一个固定的存储映射。这一点极大地方便了软件在各种M4 微控制器间的移植。例:各款M4微控制器的NVIC 和MPU 都在相同的位置布设寄存器,使得它们变得通用。,2.3.3 存储器映射,2.3 存储器系统,Block0,Block1,Block2,Block3-4,Block5-6,Block7,Cortex-M4支持位带操作,可以使用普通的加载/存储指令来对单一的比特进行读写。在Cortex-M4中,有两个区中实现了位带:(1)SRAM区的最低1MB范围(0 x200000000 x20100000)。(2)片内外设区的最低1MB范围(0 x400000000 x40100000)。这两个区中的地址除了可以像普通的RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个32 位的字。(1)32MB SRAM位带别名区(0 x220000000 x23FFFFFF)。(2)32MB外设位带别名区(0 x420000000 x43FFFFFF)。它们可以通过一个单独的被称为bit-band alias的存储区域被访问。,2.3 存储器系统,2.3.4 位带区,位通过Bit-Band Alias访问Bit-Band Region,2.3 存储器系统,位带别名区,SRAM位带区,位带别名区中的字与位带区的位映射公式,bit_word_addr = bit_band_base + (byte_offset x 32) + bit_number 4,2.3 存储器系统,例如:SRAM 位带区中地址为 0 x20000300 的字节中的位 2 被映射到别名区中的地址为:0 x22006008(= 0 x22000000 + (0 x300*32) + (2*4))的字。,7,6,5,4,3,2,1,0,位带区,别名区,一个存储单元的8个位,一个字(4个字节),0 x20000300,0 x22006008,一个字(4个字节),0 x22006004,SRAM 区域的Bit-Band 地址重映射,外设存储区 Bit-Band 地址重映射,2.3 存储器系统,#define BITBAND(addr, bitnum) (addr &0 xF0000000)+0 x2000000+(addr &0 xFFFFF)5)+(bitnum2),#define MEM_ADDR(addr) *(volatile unsigned int*)(adr),MEM_ADDR(BITBAND(DEVICE_REG0,1) = 0 x1;,2.3 存储器系统,C语言中宏定义位带操作,位带操作定义:,位带操作定义:,#define DEVICE_REG0 0 x40000000,(将单元0 x40000000的1位置位),*(volatile unsigned int*) (0 x40000000) |= (0 x000000011);,普通操作(读修改写):,2.4 异常和中断,中断:请求信号来自于CM4内核外面,来自片上外设或外扩的外设;异常:是由于CM4内核的活动而产生的 。只要正常的程序被暂时中止,微控制器就进入处理器模式。包括复位、系统故障、中断等事件。,2.4 异常和中断,图2-15异常和中断程序状态切换图,异常和中断的作用是指示系统中的某个地方发生一些事件,需要引起处理器(包括正在执行的程序和任务)的注意。,当中断和异常发生时,典型的结果是迫使处理器将控制从当前正在执行的程序或任务转移到另一个例程或任务中,该例程叫作中断服务程序(ISR),或者异常处理程序。,2.4 异常和中断,2.4.1 向量表,表2-11异常类型表,2.4 异常和中断,2.4.1 向量表,表2-11异常类型表-续1,2.4 异常和中断,2.4.1 向量表,表2-11异常类型表-续2,2.4.2优先级,2.4 异常和中断,1优先级概述所有异常都有其相关的优先级,具有以下特点。(1)一个较低的优先级值,表示较高的优先级;(2)可配置的优先事项为除复位、硬件复位和NMI处的所有异常。,在处理器的异常模型中,优先级决定了处理器何时及怎样处理异常。优先级分两组,抢占优先级和响应优先级,程序能够指定中断的优先级。,NVIC支持由软件指定的优先级,可以将中断的优先级指定为0255。硬件优先级随着中断号的增加而降低,0优先级高,255优先级低。指定软件优先级后,硬件优先级无效。,2.4.2优先级,2.4 异常和中断,2优先级分组为了对具有大量中断的系统加强优先级控制,NVIC支持优先级分组机制,分为抢占优先级区和响应优先区。,表2-13抢占优先级和亚优先级的表达位数与分组位置的关系,2.4.2优先级,2.4 异常和中断,在大多数实际微控制器中只用到了部分优先级分组。例如,在STM32F429微控制器中对应于中断的8位优先级寄存器(IP)只用到高4位,而低4位保留。这样优先级分组的值只能设置为37。下面通过一个例子来加深对优先级分组的应用。,图2-16STM32F429微控制器抢占优先级和次优先级在优先级寄存器中的位数关系,假设将STM32F429微控制器优先级分组的值设置为4(从bit 4处分组,57位是占先优先级,04位是次优先级,但是03位保留不用),则可得到3级抢占优先级,且在每个抢占优先级的内部有1个次优先级。STM32F429微控制器抢占优先级和次优先级在优先级寄存器中的位数关系如图2-16所示。,2.4.3响应过程,注意:LR的值被从新定义并非进入异常程序的地址,2.4 异常和中断,1、 响应流程,2.4.3响应过程,2.4 异常和中断,2退出异常步骤,(1)根据EXC_RETURN指示的堆栈,弹出进入中断时被压栈的八个寄存器。(2)从刚出栈的IPSR寄存器8:0位检测恢复到哪个异常(此时为嵌套中断中),若为0则恢复到线程模式。(3)根据EXC_RETURN,选择使用相应堆栈指针。,2.4 异常和中断,在中断处理程序中,一个新的中断比当前的中断优先级更高,处理器打断当前的中断处理程序流程,去响应优先级更高的中断,此时产生抢占或中断嵌套。,3抢占,图2-17Cortex-M4处理器中断抢占状态转换,4末尾连锁,末尾连锁是处理器用来加速中断响应的一种机制。在一个ISR正在执行时,如果有另一个中断请求,其优先级低于正在执行的ISR,那么这个新的中断会被挂起。当前执行的ISR结束后,会跳过出栈操作,直接将控制权让给新的ISR。,2.4 异常和中断,图2-18非末尾连锁和末尾连锁技术之间的区别,5返回,在没有挂起异常或没有比被压栈的ISR优先级更高的挂起异常时,处理器执行出栈操作,并返回到被压栈的ISR或线程模式。在响应ISR之后,处理器通过出栈操作自动将处理器状态恢复为进入ISR之前的状态。如果在状态恢复过程中出现一个新的中断,并且该中断的优先级比正在返回的ISR或线程更高,则处理器放弃状态恢复操作并将新的中断作为末尾连锁来处理。,2.4 异常和中断,处理器复位后,它会从存储器中读取两个字:1.从地址 0 x0000 0000 处取出MSP 的初始值。2.从地址 0 x0000 0004 处取出PC 的初始值这个值是复位向量。然后从这个值所对应的地址处取指。,MSP 的初始值必须是堆栈内存的末地址加1。例:如果堆栈区域在0 x20007C000 x20007FFF之间,则MSP 的初始值就必须是0 x20008000。,2.4 异常和中断,2.4.4复位,初始MSP 及PC 初始化的一个范例,MSP =堆栈内存末地址+1PC 初始化=启动代码的首地址+1(CM3在Thumb状态执行),2.4 异常和中断,习题,习题,1列举出三家公司生产的Cortex-M3和Cortex-M4内核控制器。2列举Corte-M3/M4处理器使用的寄存器组,并说明R13、R14、R15的功能。3试说明Corte-M3/M4处理器堆栈操作。4试说明Corte-M3/M4处理器两种模式和两种特权的使用。5什么是大端模式和小端模式?6试说明存储器分类及其用途。7编写C语言,将存储空间0 x40000004单元的3位置位(普通方式和位带操作)。8试说明异常响应过程。9Corte-M3/M4处理器中断向量处存放的是对应中断的什么信息?,习题,10Corte-M3/M4处理器复位后执行的第一项操作是什么?第二项操作是什么? 11意法半导体STM32F0系列微控制器使用的内核是_,STM32F1系列微控制器使用的内核是_,STM32F4系列微控制器使用的内核是_。12意法半导体低功耗系列微控制器有_系列、_系列、_系列。13STM32F4系列微控制器主要应用于_。14进行STM32F4系列微控制器程序开发一般需要准备_、_、_。15常用ARM程序开发集成开发环境有_、_。16STM32F系列微控制器基于函数库的程序设计与直接寄存器操作程序设计有什么区别?,