ARM架构---Cortex系列寄存器,重要内部模块,工作模式,异常处理等

ARM架构---Cortex系列寄存器,重要内部模块,工作模式,异常处理等
一. ARM简介1.1 ARM1、ARM是一家公司的名字成立于1990年11月主要设计ARM系列RISC处理器内核授权ARM内核给生产和销售半导体的合作伙伴2、ARM公司不生产芯片3、另外也提供基于ARM架构的开发设计技术4、ARM架构全称Advanced RISC Machine是一套精简指令集 RISC 处理器标准1.2 计算机指令集CPU的指令集其实就是用指令对计算机实现控制和计算的指令集合指令集的分类RISCreduced instruction set computer精简指令集优点芯片设计简单成本低体积小功耗小egARM精简CISCcomplex instruction set computer复杂指令集eg电脑的x86架构优点性能强缺点芯片复杂成本高体积大功耗大28效应80%情况下只能用到指令集中20%的功能1.3 ARM处理器版本1、最早的处理器版本ARM1一直到 ARM7、 ARM8、 ARM9之后以Cortex命名egs3c2440内核arm920t使用armv4t指令集2、之后便出现了Cortex内核1.3.1 Cortex内核基于 ARM 架构规范设计的具体 CPU 核心分为A/R/M三大系列1、CortexA系列application应用领域消费电子CortexA7 CortexA8 CortexA97egIMX6ull使用的Cortex-A7内核(支持armv7指令集)NXP公司生产egEnvoy 4412使用Cortex-A9内核2、CortexR系列real-time实时性要求高领域eg导弹汽车3、CortexM系列micro微控制领域egstm32f103使用的Cortex-M3内核芯片由意法ST半导体制造1.3.2 ARM架构的发展内核版本最新CortexA97指令集版本最新ARMv8egimx6ull开发板内核版本Cortex-A7--支持ARMv7指令集s3c2440内核Arm920T---使用ARMv4t指令集1.4 片上系统 Soc一个能够实现一定功能的电路系统由多个模块构成 如处理器、接口、存储器、模数转换器等等。 这些功能模块可以由分立的器件来实现然后在印刷电路板PCB上组合起来 最终形成片上系统System-on-a-Board。 片上系统的示意图如下所示SOC与MCU的区别(1) MCU架构核心组件CPUARM Cortex-M、RISC-V、8051等。内存Flash程序存储、SRAM数据存储。外设GPIO、UART、I2C、SPI、ADC、PWM等。特点高度集成适合独立运行。通常不运行操作系统或运行轻量级RTOS如FreeRTOS、RT-Thread。(2) SoC架构核心组件CPUARM Cortex-A、x86等高性能处理器。GPU用于图形处理。内存控制器支持外部DRAM。外设USB、Ethernet、PCIe等高性能接口。通信模块Wi-Fi、蓝牙、4G/5G等。特点高度集成支持复杂操作系统如Linux、Android。通常需要外部内存和存储设备如DRAM、Flash。特性MCU单片机SoC片上系统定义将CPU、内存RAM/ROM、外设GPIO、UART、ADC等集成在一个芯片上专为嵌入式应用设计。将CPU、GPU、内存控制器、外设、甚至射频模块等集成在一个芯片上支持复杂系统功能。集成度中等主要集成CPU、内存和基本外设。高集成CPU、GPU、内存控制器、外设、通信模块等。性能低到中等适合实时控制和简单计算任务。高适合复杂计算和多任务处理如运行操作系统。功耗低功耗设计适合电池供电设备。功耗较高但通过优化可支持移动设备。成本低成本适合大批量生产。成本较高但功能强大适合高性能应用。应用场景家电控制、工业自动化、物联网设备等。智能手机、平板电脑、智能电视、汽车电子等。1.5 计算机总线结构计算机的总线结构AHBadvanced high bus先进高速总线速度快的外设usb,网口ramAPBadvanced peripheral bus先进外设总线定时器GPIO串口等图中的DMA是RAM直接和外设进行通信的总线跨过CPU速度更快二. Cortex-A7内核寄存器Cortex-A7是一个32位架构ARM 架构提供了16 个 32 位通用寄存器R0 - R15供软件使用。其中的 15 个寄存器(R0 到 R14)可用于一般数据存储而 R15 则是程序计数器其值会随着核心执行指令而改变。软件对 R15 的明确写入会改变程序流程。软件还可以访问 CPSR控制程序状态寄存器并且可以访问之前执行模式下保存的 CPSR 的副本即所谓的“保存程序状态寄存器”SPSR2.1 通用寄存器通用寄存器可以有多种用途数量较多需要频繁使用。16个32位通用寄存器编号为R0~R15也称为寄存器组(Bank)。2.1.1 R0 - R151、其中R0 ~ R12是真正意义上的通用寄存器低8个寄存器R0~R7也称为低端(Low)寄存器16位和32位指令都可以访问2、R8~R12称为高端(High)寄存器32位指令和少数16位指令可以使用因为部分16位Thumb指令只能使用低端8个寄存器。2.1.2 R13:SP 栈指针stack pointer栈指针寄存器用于管理栈区空间保护现场栈先进后出压栈sp值减小将数据存入到sp指向的新位置弹栈sp值增大从sp指向的位置取出数据指向新的栈顶2.1.3 R14:LR 连接寄存器link register用于保存函数或子程序的返回地址。2.1.4 R15:PC 程序计数器programmer counter程序计数器本质上是一个指针指向代码正在执行的当前指令的下一条指令ARM架构指令的执行使用三级流水线结构PC取指令---译码器译码---内核执行2.2 特殊功能寄存器2.2.1 CPSR 程序状态寄存器current programmer status register当前程序状态寄存器存放程序运行到某一步时相关的状态比如溢出进位。借位等条件标志位(31 - 27)NNegative运算结果为负数置 1ZZero运算结果为0置1CCarry无符号运算进位 / 借位、移位溢出置 1VOverflow有符号加减超出范围置 1QSaturationNEON/VFP 饱和运算溢出时置 1软件手动清零仅ARM v5TE-J架构支持24 J:指示内核是否处于 Jazelle 状态仅ARM v5TE-J架构支持T0;J 1 处理器处于Jazelle状态也可以和其他位组合23 - 20保留GE 19:16:大于或等于(当执行SIMD指令时有效)IT 15:10这是 Thumb 指令集专属 ITIf-Then条件块执行状态标记位IF….THEN….指令执行状态位E大小端控制位字节序执行状态位。用于控制数据访问时的加载和存储字节序0 表示小端字节序操作1 表示大端字节序操作。A禁止不精确的数据异常A1 禁止不精确的数据异常IIQR屏蔽位0 未屏蔽异常。1 已屏蔽异常。FFQR屏蔽位0 未屏蔽异常。1 已屏蔽异常。TT 0;J0;处理器处于 ARM 状态 --- 异常处理中会使用到T 1;J0 处理器处于 Thumb 状态T 1;J1 处理器处于 ThumbEE 状态M(4 - 0)处理器模式位。此字段决定了处理器当前的工作模式。M[40] 的其他所有值均被保留。将 M[40] 设置为保留值的效果是不可预测的。处理器模式简称编码 (M [4:0])特权等级是否标配实现安全域状态用户模式User10000PL0用户态最低权限永久标配安全 / 非安全均可使用快速中断模式FIQ10001PL1内核特权态永久标配安全 / 非安全均可使用普通中断模式IRQ10010PL1内核特权态永久标配安全 / 非安全均可使用管理模式SVC10011PL1内核特权态永久标配安全 / 非安全均可使用监控模式Monitor10110PL1内核特权态仅开启 TrustZone 安全扩展时具备仅安全可用中止异常模式Abort10111PL1内核特权态永久标配安全 / 非安全均可使用虚拟化超级管理员模式Hyp11010PL2虚拟机特权层仅开启虚拟化扩展时具备仅非安全可用未定义指令异常模式Und11011PL1内核特权态永久标配安全 / 非安全均可使用系统模式System11111PL1内核特权态永久标配安全 / 非安全均可使用2.2.2 SPSR 保存程序状态寄存器作用保存程序状态寄存器当异常发射时保存CPSR寄存器中的值eg中断时保护现场将CPSR拷贝一份到SPSR三. Cortex-A7内核重要模块3.1 MMU 内存管理单元作用将程序中的虚拟内存空间映射到实际的物理内存空间提高物理内存利用率egIMX6ull的RAM只有512MB一个进程需要4G虚拟地址空间故一个芯片若有MMU则适合跑Linux操作系统在裸机学习阶段需要关闭MMU不然操作地址时会和实际地址不一样被MMU映射3.2 Cache 高速缓存作用提高CPU访问数据的速度分类DCachedata数据缓存裸机阶段打开ICache关闭DCache不需要数据缓存每一次都从内存中访问数据ICacheinstruction指令缓存是一种哈佛架构计算机两种架构冯.诺依曼架构指令和数据放到一起存放指令和数据共享同一块数据空间哈佛架构指令和数据用于独立的存储空间x86等大多计算机采用哈佛架构3.2.1 ROM与RAM1、RAMRAM随机存取存储器运行内存断电数据全部丢失只能通电时临时存程序、变量CPU 实时读写速度极快。RAM的分类SRAM(static ram) 静态用晶体管存储0、 1。 速度快 成本高 存储密度低DRAM(dynamic ram) 动态用电容充放电存储0 1。 功耗大 需要外接刷新电路 读写速度低于sram。 成本低 存储密度大。SDRAM(synchronous dram) 同步增加了同步电路 提高dram的数据读写速度DDR RAM(全称double data rate sdram)为sdram的下一代目前已发展到ddr5IRAM(internal ram)iram并非是真正意义上的某种ram 通常iram就是sram 它通常存在于Soc内部 所以被称为iram2、ROMROM只读存储器广义含 Flash存储内存断电永久保存数据用来存放固件、程序代码正常运行只能读擦写很慢。ROM非易失性存储器最早的rom在出场时写入数据之后无法更改。ROM的分类PROM(programmnable rom)可编程rom出场后能够让用户写入一次数据例如cdromEPROM(erasable prom)可擦写prom出场后可以擦除数据再次写入但需要特殊的设备。如紫外光等。EEPROM(electicallye prom)电可擦写可编程无需专用设备就可以擦写编程。flash闪存新一代非易失性存储器。flash又被分为了两种NOR flash 或非每一个字节都是可以被寻址的带有地址总线和数据总线数据访问时可以像RAM一样(单片机)NAND flash 与非无数据里面存放的是块设备数据通常以512byte去访问(电脑imx6ull、soc芯片)eMMC---SD卡通常以芯片形式出现四. ARM 的工作模式4.1 ARM处理器的工作模式ARM有七个基本的工作模式4.1.1 七个基本工作模式User非特权模式大部分任务执行在这种模式使用的寄存器最少FIQ当一个高优先级(fast)中断产生时将会进入这种模式IRQ快速中断请求模式IRQ当一个低优先级(normal)中断产生时将会进入这种模式普通中断模式SupervisorSVC当复位或软中断指令执行时将会进入这种模式SVC模式Abort当存取异常时将会进入这种模式Undef当执行未定义指令时会进入这种模式System使用和User模式相同寄存器集的特权模式User的特权模式除了七种基本工作模式还有另外两种Cortex-A特有模式:用于调试Monitor:是为了安全而扩展出的用于执行安全监控代码的模式也是一种特权模式4.1.2 不同工作模式下的寄存器组织当前处理器的模式决定着哪组寄存器可操作任何模式都可以存取:1、相应的 R0-R12 寄存器2、R15 (the program counter, pc)R13 (the stack pointer, sp) and R14 (the link register, Ir)3、相应CPSR(current program status register, cpsr)4、特权模式(除system模式)还可以存取相应 SPSR(saved program status register)4.1.2 ARM 寄存器个数ARM9 系列每种模式都有自己独立的SPSR寄存器都有自己独立的SP寄存器等等ARM有37个32-Bits长的寄存器1个用作PC(program counter)1个用作CPSR(current program status register)5个用SPSR(saved program status registers)每种工作模式不同30个通用寄存器Cortex-A系列Cortex-A多出3个寄存器Monitor 模式 R13_monR14_mon,SPSR_mon故Cortex体系结构下有40个32-Bits长的寄存器五. ARM 异常处理5.1 异常处理流程当异常产生时ARM core 的处理流程1、拷贝CPSR到SPSR_mode---(mode代表不同模式的名称)2、设置适当的CPSR位:改变处理器状态进入ARM态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断(如果需要3、保存返回地址到LR_mode4、设置PC为相应的异常向量返回时, 异常处理需要:1、从 SPSR_mode恢复CPSR2、从LR_mode恢复PCNote:这些操作只能在 ARM 态执行5.2 异常向量与异常向量表中断向量标号根据向量找到中断向量表中的中断服务函数中断向量表数组数组中存放的是中断服务函数的入口地址异常向量跳转到异常服务函数指令的地址异常向量表数组数组中存放的是跳转到对应异常服务函数的指令egb reset_handlerARM中一共7中异常类型如下