【ARM汇编】第二章:ARM微处理器

嵌入式系统概述

基本概念

嵌入式系统:以应用为中心,以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统git

嵌入式系统的重要特征:web

  • 系统内核小:由于系统资源有限,内核不能太大
  • 专用性强:针对具体应用场景,作软硬件剪裁
  • 系统精简:通常没有系统软件和应用软件之分,所有为应用服务
  • 多任务操做系统:要保证程序的实时性、可靠性
  • 专用的开发工具和环境:须要主机作开发,程序烧到目标板

嵌入式系统的发展

发展历史

70年代的单片机,51单片机,跑操做系统的单片机,RTOS算法

发展趋势

  • 嵌入式开发称为一项系统工程,除了软硬件自己,还须要开发环境支持
  • 网络化、信息化,产品功能再也不单一,产品要适应网络发展
  • 精简系统内核、算法,下降功耗和成本
  • 友好的人机界面

组成结构

通常分4个部分:处理器、存储器、IO、软件
在这里插入图片描述编程

设备驱动层

使用任何外部设备都须要有响应的驱动程序支持,它为上层提供设备的操做接口
驱动层通常包括硬件抽象层HAL、板级支持包BSP、设备驱动程序网络

硬件抽象层HAL

  • 硬件抽象层HAL(hardware abstraction layer)是位于操做系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化
  • 这样使得设备驱动程序与硬件设备无关,从而大大提升系统的可移植性
  • 抽象层通常应包括相关硬件的初始化、数据的输入/输出操做、硬件设备的配置操做等功能

板级支持包BSP

  • 板级支持包BSP(board support package)是介于主板硬件和操做系统中驱动程序之间的一层,通常认为它属于操做系统的一部分,主要是实现对操做系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之可以更好地运行于硬件主板
  • BSP是相对于OS而言的,不一样的OS有不一样形式定义的BSP
  • BSP实现的功能大致有两个方面:
    1. 系统启动时,完成硬件的初始化(系统内存、寄存器、中断等)
    2. 为驱动程序提供访问硬件的函数

设备驱动程序

驱动程序为上层软件提供设备的操做接口,上层软件只需调用驱动提供的接口,而不用理会设备内部的操做app

实时操做系统RTOS

OS通常之内核映像的形式下载到目标系统中dom

OS的应用程序接口API

API(application programming interface)是一系列复杂的函数、消息、结构的结合体
OS中提供的标准API函数,能够加快应用程序的开发,便于移植和升级svg

应用程序APP

应用程序完成用户自定义的任务,任务之间的协调依赖于系统的消息队列函数

嵌入式处理器

微处理器

micro processor unit,MPU,由通用计算机中的CPU演化而来
具备体积小、重量轻、成本低、可靠性高的优势工具

微控制器

microcontroller unit,MCU,典型表明是单片机
和MPU相比,它的特色是单片化,片上外设丰富,适合于作控制

DSP

digital signal processor,DSP处理器专门用于信号处理方面,其系统结构和指令算法方面作了特殊设计,具备很高的编译效率和指令的执行速度,在数字滤波、傅里叶变换、频谱分析等各类仪器上大规模应用

SOC

system on chip,片上系统,追求产品系统最大包容的集成器件,最大的特色是实现了软硬件的无缝结合,直接在处理器片内嵌入操做系统的代码模块,大部分SOC都是专用的

典型嵌入式处理器介绍

MIPS处理器

无内部互锁流水级的处理器(microprocessor without interlockd piped stages),目前使用量仅次于ARM处理器

Power PC处理器

特色是可伸缩性好、方便灵活

Sparc处理器

SUN公司的s系列

ARM处理器

advanced RISC machines(ARM)公司的产品,采用IP受权的方式容许半导体公司生产基于ARM内核的处理器

ARM概述

计算机体系结构的分类

冯洛伊曼结构

  • 将数据和指令,存放在一个存储器中
  • 这种结构的计算机由一个CPU和一个存储器组成

哈弗结构

  • 数据和指令分开存储,有各自独立的存储器

ARM技术的发展过程

略,不一样指令集的发展史

ARM内核的特色

RISC技术

CISC:(complex instruction set computer,复杂指令集计算机),随着计算机技术的发展而不断引入新的复杂的指令集,体系结构原来越复杂,部分指令会反复使用,大部分指令不怎么使用,所以结构不合理

RISC:(reduced instruction set computer,精简指令集计算机),选择使用频率最高的简单指令,避免复杂指令,将指令长度固定,指令格式和寻址方式种类减小

流水线技术

简单的三级流水线以下:

  • 取指级:完成程序存储器中指令的读取,并放入指令流水线中
  • 译码级:对指令进行译码,为下一周期准备数据路径须要的控制信号,这一级指令“占有”译码逻辑,而不“占有”数据路径
  • 执行级:指令“占有”数据路径,寄存器堆栈被读取,操做数在桶形移位器重被移位,ALU产生相应的运算结果并写会目的寄存器,ALU结果根据指令需求更改状态寄存器中的条件位

每一个时钟周期,某一级流水线完成一条指令
一条指令须要3个时钟周期的执行时间,可是由于有了三级流水线,因此吞吐率(throughput)是每一个周期一条指令

超标量技术

经过重复设置多套指令执行部件,同时处理并完成多条指令,实现并行操做来达到提升处理速度的目的
在一个时钟周期内,同时执行多条指令,所以CPU的效率大大提升

基于ARM的微处理器

基于ARM核的硬件结构

各大厂商从ARM公司买其设计的ARM微处理器核,根据不一样的应用,加入适当的外围电路,造成本身的ARM微处理器芯片
在这里插入图片描述

这个器件能够分为4个部分

  • ARM处理器:控制整个器件,包含内核、外围部件
  • 控制器:协调系统的重要功能模块,最多见的是中断控制器和存储器控制器
  • 外设接口部件:提供芯片与外部的输入输出
  • 总线:用在器件不一样部件之间进行通讯,包含高性能总线AHB,链接高性能的片内外设,外设总线APB链接较慢的片内外设,还有一条总线用于链接片外外设,它须要一个特殊的桥,用于和AHB总线链接

ARM核的数据流模型

load指令,存储器 -> 寄存器
store指令,寄存器 -> 存储器
典型的源寄存器Rn、Rm,目的寄存器Rd

工做模式

  • 用户模式(usr):正常的程序执行状态
  • 快速中断模式(fiq):用于高速数据传输或通道处理
  • 外部中断模式(irq):用于通用的中断处理
  • 管理模式(svc):操做系统使用的保护模式
  • 终止模式(abt):当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护
  • 未定义指令模式(und):当未定义的指令执行时进入该模式,用于支持硬件协处理器的软件仿真
  • 系统模式(sys):运行具备特权的操做系统任务

除用户模式和系统模式,其他5种称为异常模式,经常使用语处理中断异常或访问受保护的资源

工做状态

ARM状态:执行32位的ARM指令集
Thumb状态:执行16位的Thumb指令集

在开始执行时,只能是ARM状态,执行过程当中,可与切换

ARM寄存器

  • 分为通用寄存器和状态寄存器,一共37个
  • 通用寄存器保存数据和地址,有31个
  • 状态寄存器用以标识或设置处理器的工做模式、状态,有6个
  • 这37个寄存器不能被同时访问,最多有18个活动的寄存器,16个数据寄存器,2个处理器状态寄存器

通用寄存器

用以保存数据和地址,用字母R为前缀,加该寄存器的序号来标识
例如寄存器0,标识为R0,范围是R0-R15
能够分为三类

未分组寄存器

包括R0 - R7,在全部工做模式下,未分组寄存器都指向同一个物理寄存器
在中断或异常处理时,由于使用相同的物理寄存器,可能形成数据破坏

分组寄存器

包括R8 - R14,它们每一次访问的物理寄存器与当前的工做模式有关
采用标记来区分不一样的物理寄存器,如 R13

在这里插入图片描述

R13通常用做堆栈指针
R14称做子程序链接寄存器(subroutine link register)或链接寄存器LR
当执行BL子程序调用指令时,R14中获得R15(程序计数器PC)的备份

程序计数器

R15用做程序计数器(PC),用于控制程序中指令的执行顺序
正常状况下,PC指向CPU运行的下一条指令,每次执行后,PC的值会自动修改
当程序执行顺序改变,则PC也须要改变

状态寄存器

包含一个当前程序状态寄存器CPSR,和5个备份的程序状态寄存器SPSRs
CSPR能够在任何工做模式下被访问,用来保存ALU中的当前操做信息、容许/禁止中断、设置处理器的工做模式
备份寄存器用来进行异常处理

在这里插入图片描述

条件码标志

N Z C V 均为条件码标志位,他们的内容能够被算术或逻辑运算的结果改变,而且能够决定某条指令是否被执行

  • N:Negative,正负标志位,N=1结果为负数,N=1结果为非负数
  • Z:Zero,零标志,Z=1结果为0,Z=0结果非零
  • C:CarryBorrow,进位、借位标志,加法C=1进位,减法C=0借位
  • V:Overflow,V=1溢出,V=0未溢出

控制位

CPSR 的低8位(I,F,T,M[4:0])称为控制位,当发生异常时,这些位能够被改变

中断禁止位

包括I、F,用来禁止或容许IRQ和FIQ两类中断

  • I :I=1表示禁止IRQ中断
  • F :F=1表示禁止FIQ中断

T标志位

T标志位用来标识/设置处理器的工做状态
对于ARM体系结构v4及以上版本的T系列处理器,该位为1时,程序运行于Thumb状态,该位为0时,运行于ARM状态
ARM指令集和Thumb指令集均有切换处理器状态的指令,能够修改T位

工做模式位

M [4:0] 用来标识或设置处理器的工做模式,经常使用的是系统模式和用户模式
在这里插入图片描述

注意,不能使用无效的模式,不然不可恢复

保留位

不要使用保留位保存数据

每一种工做模式下,有一个专门的物理状态寄存器,称为SPSR(saved program status register)
当发生异常时,SPSR保存CPSR的值,恢复时,用来恢复CPSR
用户模式和系统模式不属于异常模式,没有SPSR

Thumb寄存器

Thumb状态下的寄存器集,是ARM状态下寄存器集的一个子集,程序能够直接访问8个通用寄存器(R0~R7)、程序计数器(PC)、堆栈指针(SP)、链接寄存器(LR)、状态寄存器(CPSR),同时,在每一种特权模式下都有一组SP、LR、SPSR

Thumb状态下的寄存器组织与ARM状态下的寄存器组织的关系

  • Thumb状态下和ARM状态下的R0-R7是相同的
  • Thumb状态下和ARM状态下的CPSR和全部的SPSR是相同的
  • Thumb状态下的SP对应于ARM状态下的R13
  • Thumb状态下的LR对应于ARM状态下的R14
  • Thumb状态下的PC对应于ARM状态下的R15

ARM的存储系统简介

存储器Memory是计算机用来存放二进制数据和程序的部件
通常分为RAM和ROM

  • 随机存取存储器:RAM(random access memory)
    1. 静态随机存储器:SRAM
    2. 动态随机存储器:DRAM
    3. 双倍速率随机存储器:DDRAM
  • 只读存储器:ROM(read only memory)
    掩膜ROM、PROM、EPROM、EEPROM、Flash memory

存储器的层次结构

在这里插入图片描述

通常状况下,基于ARM的嵌入式系统用到的芯片以下

  • ROM:只读存储器,通常状况再也不次编程,通常用来放启动代码
  • Flash:可读可写,可是速度较慢,所以不适合动态数据,通常用来存放断电后须要保存的数据
  • DRAM:在RAM里价格低,可是动态刷新,所以使用前要先设置好DRAM控制器
  • SRAM:比DRAM快,并且不须要刷新,价格高容量小,通常用于高速存储器和cache
  • SDRAM:使用时钟,频率与CPU总线同步,传输效率较高

数据类型与存储器格式

地址空间

ARM体系结构将存储器看做是零地址开始字节的线性组合
32位处理器支持的最大寻址空间为4gb
每执行一条ARM指令,PC增长4,执行一条Thumb指令,PC增长2

数据类型

ARM处理器的指令长度是32位(ARM指令),也能够是16位(Thumb指令)
支持8位、16位、32位数据

存储格式

大端格式

数据的高字节存储在低地址中,低字节存储在高地址中

例如:0x1234,在以下的地址存放
在这里插入图片描述

小端格式

与大端模式相反,数据的高字节存储在高地址中,低字节存储在低地址中
ARM处理器能够配置为任意一种模式,可是小端模式是默认格式

例如:0x1234,在以下地址存放
在这里插入图片描述

非对齐的存储器访问

所谓非对齐的存储访问操做,是指:

  • 位于ARM状态期间,访问地址的低二位不为00
  • 位于Thumb期间,访问地址的最低位不为0
    非对齐的指令预取操做和数据访问操做的约定以下

非对齐指令预取操做

若是写入寄存器PC的值是非对齐的,要么执行结果不可预知,要么地址中响应的位被忽略
是否要忽略,由系统决定

非对齐数据访问操做

对于laod/store操做,若是出现非对齐的数据访问操做,有两种可能

  • 执行结果不可预知
  • 忽略数据地址的低2位或者最后一位