【ARM】初识ARM——硬件理论基础
在数字电路中采用高电平表示逻辑1而低电平代表逻辑0。
二极管呈现单向导电特性,在正向偏置时电流主要从阳极端流向阴极端,在反向偏置时电流基本不流动。
三极管具备开关特性:NPN型晶体管当基极输入高电平时允许基极与集电极之间的路径导通;而PNP型晶体管则当基极输入低电平时允许基极与集电极之间的路径导通。
- 电路图
1. 如何让查找一个元器件:
- 搜索丝印
* 利用导航系统进行丝印搜索
2. 电路图中网络标号相同的节点在电路中是电气相连的
5. 位操作
unsigned integer a(占用32位)表示一个无符号整数类型变量a。操作要求将该变量a的第3位设为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访问
* 主存储器:
性能介于高速缓存与辅助存储之间,在程序运行中用于存放当前正在执行的代码及其相关数据
* 辅助存储器:
运行速度最慢且成本最低但容量极大,在程序运行中负责暂时不参与操作的数据存放,并需调送至主存使用地址空间:一个处理器能够直接访问的最大内存空间大小
采用N位地址总线的处理器能够寻址的空间大小为2^N字节
- 运算器:
负责完成信息处理与运算功能的CPU组件通常会执行算术运算与逻辑运算操作,并且其中主要组成部分是算术逻辑单元ALU。
控制器:是整个计算机系统的中央处理器
一条指令(机器码)的执行一般情况下遵循以下三个步骤:
- 指令解析阶段:解析指令并识别其操作类型
- 操作码生成与控制流建立阶段:生成相应的操作码并设置控制流
- 操作执行阶段:根据控制流进行相应的操作
- 取址:CPU根据当前PC寄存器的值来读取对应内存地址处的机器码指令
- 译码:执行单位通过解码指令的机器码信息来确定具体的运算操作
- 执行:完成运算后将计算结果返回至寄存器中
每次完成取址操作后,处理器的PC寄存器会自增1位以指向下一条指令
编译原理:
处理器所识别的语言属于机器码范畴,在当前技术条件下不同处理器所识别的指令由其硬件配置所决定
每一种独特的机器指令对应特定的操作行为,并且由于架构差异导致不同处理器之间的指令系统无法完全兼容
汇编程序通过符号替代底层操作编码实现程序流程的具体描述,在不同系统间难以直接迁移应用
汇编语言作为一个中间层编程方式不具备跨平台特性因而无法实现移植性应用
现代编程中采用多种优化器将高级语言转换为高效底层代码这一过程使得同一源代码在不同平台间运行效率产生显著差异
- 总线:
能够服务于多个部件的公共信息传输线路
能够按时间分段传输给各个部件的信息
根据传递信息的不同, 总线可以分为数据总线, 地址总线和控制总线
DMA:实现直接进行内存操作(Direct Memory Access)
采用DMA总线可以在不经过CPU的情况下完成内存与内存之间的直接数据交换。
RISC型处理器(Reduced Instruction Set Computer)是一种精简指令集架构设备。
其特点在于专注于高频使用的简洁指令,并保证指令长度固定且周期单一。
这种设计在功耗控制、体积缩减以及价格优化方面具有显著优势,
广泛应用于嵌入式系统开发中。
相比之下,
CISC型处理器(Complex Instruction Set Computer)则注重硬件执行功能的全面性。
其复杂的指令架构能够提升处理器的实际处理能力,
尽管硬件结构相对复杂,
但在通用计算性能方面表现更为突出。
System-on- CHIP(SoC)架构是一种集成多个电子组件于单个芯片的技术。通过将系统的各个核心组件在一块芯片内进行整合,可以显著减少占用空间的同时降低功耗,并且成本效益较高。
ARM 11 之后的产品开始采用新的 Cortex 命名体系,并将其划分为 A、R 和 M 三大类以便满足不同市场的需求
-
ARM Cortex-A9处理器为32位架构,能够单次对32位数据进行处理
-
ARM 约定:
Byte:8bits(1byte)
Halfword:16bits(2byte)
Word:32bits(4byte)
大部分 ARM 涵盖了 ARM 指令集与 Tribal 指令集。 ARM 指令集 32-bit 即每条指令 占据 32 位 的存储区域。 Tribal 指令集 16-bit
当处理器执行ARM指令时,
所有操作必须按单词对齐排列,
pc寄存器由其[31:2]字段确定,
其中[1:0]位未指定,
因为指令存储的起始地址必须是一个4的整数倍。
- ARM中指令本身是多少位在内存存储时就应该多少位对其
多字节数据的存储方案中涉及两种常见的内存对齐方式:小端对齐和大端对齐。在小端对齐方式下,低位地址处放置低位有效位的数据块内容物信息,在高位地址处放置高位有效位的数据块内容物信息;而大端对齐方式则相反,在低位地址放置高位的有效内容,在高位地址放置低位的有效内容;ARM处理器通常采用小端方式进行内存对齐操作。
ARM Cortex-A系列微控制器具备八个基础运行状态。非特权状态:主要用于执行常规应用程序;高优先级中断触发后会立即切换至FIQ状态;在常规中断检测到后则会切换至IRQ状态;复位或软件中断发生会导致系统切换至SVC状态;一旦发生存取异常操作,则会触发Abort状态;无法执行合法指令会导致系统切换至Undef状态;采用与非特权模块相同的寄存器配置的专用控制模态是System状态下特有的特性;特别功能模块——Monitor负责安全监控功能。
模式的分类如下:
1)除了User模式之外的其余七种均属于特权级别 - 权限较为丰富
2)FIQ(故障注入)、IRQ(中断响应)、SVC(服务)、Abort(终止)及Undef(无效化)等特殊异常处理机制 - 这些机制会在发生相应问题时自动触发
在各自设定的具体场景中运行对应的代码逻辑,并赋予相应的操作权限
-
寄存器是处理器内部的数据临时存储区域;
处理器向用户提供的一组功能接口;
在CPU内部运行时寻址的存储区域;
不同模式之间共享一组专用的寄存器资源;同一模式下的特定寄存器仅限于该模式使用- r13 (stack pointer, sp)
栈指针,指向当前模式下的栈顶,保存的是栈顶的地址
- r13 (stack pointer, sp)
-
r14 (link register, lr)
链接寄存器,在程序跳转的过程中处理器会自动将当前指令下一条指令的地址存储到r14中;
在程序执行完毕后,在进入下一个阶段之前需要确保系统能够正确地进行状态转移操作,在这种情况下通常的做法是通过设置相应的指针来实现数据的有效传递和处理流程;
在此过程中特别需要注意的是,在处理复杂的多线程任务时需要确保各个线程之间的同步协调以避免潜在的问题。- r15 (program counter, pc)
程序计数器,存储了当前取址指令的地址
- r15 (program counter, pc)
-
寄存器: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结果为零的情况发生
C:在加法操作中产生进位的情况下自动置1;在减法操作中产生借位的情况下自动置0
0xFFFFFFFE + 51 - 2可表示为32位二进制数之间的运算并反映其数值特性
V:该运算导致ALU符号位发生变化的情况发生
[31:24]条件域F表示[23:16]状态域S表示[15:8]预留域X表示[8:0]控制域C表示
- ARM Cortex-A处理器的异常处理
当processing unit encounters an anomaly, it temporarily suspends the current task and redirects execution to an error-handling routine to address the anomaly. Once processing is complete, execution resumes at the point where it was interrupted.
异常触发源:引发异常事件
2. 异常产生时ARM处理器的动作(自动完成):
拷贝CPSR到SPSR_
修改CPSR:
- 将处理器的状态切换至ARM模式
- 将处理器的运行模式转换为对应异常处理模式
- 根据需求设置中断禁止位以阻止特定中断的发生。
- 将返回地址存储至LR寄存器中
- 根据预设的异常处理路径配置CPU的程序计数器PC值,并引导其指向对应的异常向量表中的具体位置。
- 当完成所有异常处理后,请自行完成返回操作。
通过让SPSR_达到CPSR状态, 使处理器回复至故障前的工作状态
注释:在CPSR中存储的是始终记录着当前程序的状态运行情况,在发生异常时则会将这些信息通过SPSR进行备份
4. 7种异常源,异常发生时进入对应的异常模式
| 异常源 | FIQ | IRQ | Reset/软中断 | DataAbort/PrefetchAbort | Undef |
|---|---|---|---|---|---|
| 异常模式 | FIQ | IRQ | SVC | Abort | Undef |
当出现异常时,在ARM完成保护现场之后自动地将程序计数器PC指向了相应的异常向量位置。此外这一段存储结构作为一个内存中的特定区域存在并且为每一个来源型态预先预留了四字节的空间用于存储相关信息。通常在设置完成后会在该处插入一条指令来引导程序直接进入相应的处理逻辑从而实现了对错误情况的有效响应机制
-
异常响应优先级 重置机制(Reset mechanism)、数据崩溃处理(Data Abort handling)、函数异常响应机制(FIQ mechanism)、中断响应队列(IRQ queue)、预取异常终止处理(Prefetch Abort handling)、软件中断处理(SWI processing)以及未定义指令处理(Undefined instruction handling)。
- FIQ的响应速度比IRQ快的原因:
FIQ位于异常向量表的末端可以直接将异常处理程序写入异常向量表之后从而节省了程序跳转的时间
FIQ模式包含5个私有寄存器(r8至r12)。
在执行中断处理程序之前无需压栈以保留现场状态,并可以直接处理中断事件。
- FIQ在优先级上胜过 IRQ。
在两个异常同时发生时应首先响应 FIQ。
FIQ能够中断 RIQ的行为;而RIQ无法中断 FIQ的行为。
- 流水式指令系统
