【ARM】初识ARM——硬件理论基础
时间:2022-09-10 01:30:00
- 逻辑1和0 :用高低电平表示数字电路的逻辑1和0
- 二极管具有单向导电性 :正向导通,反向截止
三极管具有开关特性
NPN类型:电压方向C->E 高电平时基极CE导通
PNP类型:电压方向E->C 低电平时基极CE导通电路图
- 如何找到一个元件:
- 搜索丝印
- 通过目录
- 电路图中网络标号相同的节点在电气上连接在一起
- 如何找到一个元件:
位操作
unsigned int a; a为32位无符号整形 a的第三位置1 其他位不变00000000 00000000 00000000 00001000 a = a | 0x00000008; a = a | (1 << 3);
unsigned int a; a为32位无符号整形 将a的第三位置0. 其他位不变
11111111 11111111 11111111 11110111 a = a & 0xFFFFFFF7; a = a & (~(1 << 3));
位域操作
unsigned int a; a为32位无符号整形 将a的第[7:4]改为0101 其他位不变先清零
a = a & (~(0xF << 4));
再置位
a = a | (0x5 << 4);
=> a = a & (~(0xF << 4)) | (0x5 << 4);
练习:
unsigned int a; a为32位无符号整形 将a的第[28:23]改为101010 其他位不变a = a & (~(0x3F << 23)) | (0x2A << 23);
计算机组成:
计算机由输入设备、输出设备、存储器、计算器和控制器组成,
运算器和控制器共同组成CPU输入设备:
输入设备的任务是将人们编写的程序和原始数据发送到计算机上
并将其转换为计算机内部能够识别和接受的信息模式
键盘、鼠标、扫描仪等。输出设备:
输出设备的任务是以人或其他设备可接受的形式发送计算机的处理结果
常用的有显示器、打印机、绘图仪等。存储器:
存储器是存储程序和数据的部件,也是计算机实现存储程序控制的基础三级存储结构:
- 高速缓存:
速度最快,价格最贵,容量最小,断电数据丢失,cpu可直接访问
存储当前程序中的活跃部分,以快速方向CPU提供指令和数据 - 主存储器:
高速缓存与辅助存储之间的速度、价格和容量
cpu可直接访问存储当前正在执行的程序和数据 - 辅助存储器:
速度最慢,价格最低,容量最大,断电数据不丢失,cpu不能直接访问
用于存储暂时不参与操作的程序和数据,必要时传输到主存
地址空间:处理器可访问的内存空间的大小
N位置地址总线的处理器可以访问2n次方- 高速缓存:
运算器:
CPU算术操作和逻辑操作是信息处理和操作的部件,其核心是算术逻辑单元ALU控制器:是整个计算机的指挥中心
指令(机器代码)的执行通常分为三个阶段:- 取址:根据PC读取相应内存地址中的指令(机器代码)CPU
- 译码:指令译码器识别指令,将指令(机器码)翻译成具体的操作
- 执行:执行指令并将结果写回寄存器
处理器内部处理器每次完成取址后PC自增值使其指向下一个指令的地址
编译原理:
处理器能识别的语言是机器代码,处理器能识别哪些机器代码是由处理器的硬件决定的
所以不同的机器码代表不同的运算,同样不同的处理器机器码是不兼容的即不可以移植
汇编语言是机器码的符号化,即汇编就是使用符号代替机器码,所以不同的处理器汇编也不一样,汇编语言不可以移植
C当语言编译时,我们可以使用不同的编译器将C编译成不同的汇编和机器代码,因此C不能依赖硬件
总线:
能够服务多个部件的公共信息传输线,能够分时发送和接收各部件的信息
根据传输的信息类型,总线可分为数据总线、地址总线和控制总线DMA:直接内存操作(Direct Memory Access)
使用DMA总线不能通过CPU数据交换直接在内存和内存之间进行RISC(Reduced Instruction Set Computer)
RISC:精简指令集处理器,
RISC结构简单,选择使用频率高的简单指令,指令长度固定,多为单周期指令
在功耗、体积、价格等方面有很大的优势,主要用于嵌入式领域
CISC:复杂指令集处理器
注重硬件执行指令的功能性,CISC处理器的硬件结构复杂
CISC指令复杂,长度和周期不固定,在处理能力上有优势SoC:(System on Chip)片上系统
将一个系统中所需要的全部部件集成在一个芯片上,在体积、功耗、价格上有很大优势ARM11以后的产品改用Cortex命名,并分成A、R、M三个分支,旨在为各种不同的市场提供服务
Cortex-A: 面向尖端的基于虚拟内存的操作系统和用户应用
Cortex-R: 实时处理器为要求可靠性、容错功能和实时响应的嵌入式系统提供高性能解决方案
Cortex-M: 针对成本和功耗敏感的MCU和终端应用,一般不跑操作系统ARM Cortex-A9处理器为32位架构,能够单次对32位数据进行处理
ARM 约定:
Byte:8bits(1byte)
Halfword:16bits(2byte)
Word:32bits(4byte)大部分ARM支持ARM指令集与Thumb指令集
ARM指令集32bit,即每条指令占用32为的存储空间
Thumb指令集16bit当处理器运行ARM指令时
所有指令必须word对齐
pc值由其[31:2]决定,[1:0]位未定义,因为指令存储的起始地址必须为4的整数倍ARM中指令本身是多少位在内存存储时就应该多少位对其
多字节数据的存储
小端对齐:低地址放低有效位,高地址放高有效位
大端对齐:低地址放高有效位,高地址放低有效位
ARM默认是小端对其ARM Cortex-A处理器有8个基本工作模式:
User: 非特权模式,一般在执行上层的应用程序时处理器处于该模式
FIQ: 当一个高优先级的中断产生时处理器将自动进入这种模式
IRQ: 当一个低优先级(normal) 中断产生时将会进入这种模式
SVC: 当复位或软中断指令执行时将会进入这种模式
Abort: 当存取异常时将会进入这种模式
Undef: 当执行未定义指令时会进入这种模式
System: 使用和User模式相同寄存器集的特权模式
Cortex-A处理器特有模式:
Monitor:为了安全而扩展出的用于执行安全监控代码的模式模式的分类:
1)除User模式外其他七种模式都是特权模式 - 权限比较高
2)FIQ、IRQ、SVC、Abort、Undef异常模式 - 产生异常时进入这几种模式
特定的模式下执行特定的代码,完成特定的功能,拥有特定的权限寄存器:处理器内部的存储器
处理器留给用户的接口
寄存器处于CPU内部,没有地址
每个模式只能使用本模式下可以使用的寄存器,一个模式下特有的寄存器其他模式下不可访问- r13 (stack pointer, sp)
栈指针,指向当前模式下的栈顶,保存的是栈顶的地址 - r14 (link register, lr)
连接寄存器,当程序跳转时处理器自动将当前指令下一条指令的地址保存到r14,
程序返回时将LR寄存器的值赋给PC就实现了程序的返回 - r15 (program counter, pc)
程序计数器,存储了当前取址指令的地址
- r13 (stack pointer, sp)
寄存器:CPU内部的存储器
CPSR(current program status register)当前程序状态寄存器
bit[4:0]处理器模式位:
决定当前处理器所处的模式中断禁止位:
I=1:禁止IRQ中断
F=1:禁止FIQ中断状态位:
T=0:处理器处于ARM状态
T=1:处理器处于Thumb状态条件位:
N:ALU中产生了负数的结果
Z:ALU中运算结果产生了0
C:加法时产生了进位C自动置1否则为0,减法时产生了借位C位自动置0否则为1
0xFFFFFFFE + 5 1 - 2
V:对于有符号数符号位发生变化时自动置1
[31:24]条件域F表示[23:16]状态域S表示[15:8]预留域X表示[8:0]控制域C表示
ARM Cortex-A处理器的异常处理
当处理器遇到异常后会暂停当前的程序转而去执行异常处理程序对异常进行处理
处理完成后返回到被异常打断的代码的代码处继续执行异常源:导致产生异常的事件
FIQ、IRQ、Reset、软中断、DataAbort、PrefetchAbort、Undef异常产生时ARM处理器的动作(自动完成):
- 拷贝CPSR到SPSR_
- 修改CPSR:
- 改变处理器状态进入ARM状态
- 改变处理器模式进入相应的异常模式
- 设置中断禁止位禁止相应中断(如果需要)
- 保存返回地址到LR_
- 设置PC为相应的异常向量(跳转到异常向量表中对应的位置)
异常处理完成后,返回时需要(用户自己完成)
- 从SPSR_恢复CPSR,使处理器恢复到异常前的状态
- 从LR_恢复PC,程序返回到被异常打断的位置继续执行
注:CPSR中保存的永远是当前程序运行状态,SPSR只是异常时对CPSR进行备份
7种异常源,异常发生时进入对应的异常模式
异常源 FIQ IRQ Reset/软中断 DataAbort/PrefetchAbort Undef 异常模式 FIQ IRQ SVC Abort Undef 异常向量表
异常发生时,ARM完成保护现场后自动将PC指向异常向量中对应的位置
异常向量表是处于内存中的一段空间
在异常向量表中为每个异常源分配了四个字节的存储空间
一般情况下我们在异常向量表对应的位置写一条跳转指令使其跳转到异常处理程序入口异常响应优先级
Reset、Data Abort、FIQ、IRQ、Prefetch Abort、SWI、Undefined instructionFIQ的响应速度比IRQ快的原因:
- FIQ位于异常向量表的最末
可以直接把异常处理程序写在异常向量表之后,省去了程序跳转的时间 - FIQ模式有5个私有寄存器 (r8-r12)
执行中断处理程序前无需压栈保存现场,可直接处理中断 - FIQ的优先级高于IRQ
当两个异常同时发生时先响应FIQ
FIQ可以中断RIQ,但RIQ不能中断FIQ
- FIQ位于异常向量表的最末
指令流水线
指令执行过程中取址、译码、执行三个阶段使用的硬件电路相互独立
当对N地址中的指令进行取址时译码器可以对N-4地址的指令进行译码
运算器可以对N-8地址中的指令进行执行,从而形成了三级流水线结构
这种结构降低了指令执行的平均周期。
ARM处理器中当前取指的指令由PC决定,所以当前执行的指令的地址是PC-8
不管多少级流水线PC指向的永远是当前取址的指令,当前执行的指令是PC-8地址处的指令