ARM:ARM技术和体系结构(哈弗、冯氏结构、总线和IO访问、处理器状态和处理机模式、ARM内部寄存器及SFR、异常处理、中断向量表、异常返回、存储系统)

第一部分

1、哈弗结构与冯氏结构

(1)区别:

是否有独立的存储架构和信号通道。

(2)举例:

8086:冯氏结构(相同的存储相同的通道)

STM32F103:哈弗结构(不同的存储、通道)

8051:改进的哈弗结构(不同的存储,相同的通道)

ARM9:改进的冯氏结构(相同的存储不同的通道)

高性能:单片机(冯氏结构)因为数据和程序都存储在cache中

单片机:哈弗结构,性能较低

2、总线和IO访问

总线:计算机各部件之间传递信息的公共干线,根据传递的信息的种类可以分为数据总线、控制总线、地址总线。

统一编址:从存储器地址空间中划出地址给IO端口

独立编址:IO端口地址空间和存储器的地址空间独立

3、处理机的状态

(1)ARM状态:

执行效率高。

(2)THUMB状态:

代码密度好(同一段代码,对于不同的单片机,编译之后占用的空间是不同)

4、处理机模式

(1)模式类型:

User(usr):一般的执行状态,不能切换到其他模式(只能通过中断和异常)

FIQ(fiq):快速中断,优先级较高

IRQ(irq):中断

Supervisor(svc):保护模式

Abort mode(abt):发生异常时进入

System(sys):用户安全模式

Undefined(und):未定义的指令

(2)目的:

提高响应速度

(3)ARM流水线

指令执行过程:

每条指令包括五个步骤:取指、译码、执行、访存、回写

单流水:

 ARM9(五级流水):

第二部分

1、ARM内部寄存器:设计在CPU内部

(1)特点:速度快

(2)数量:一共有37个:

6个状态寄存器;

31个通用寄存器(R0-R12)

R13(SP):栈指针,不同模式下栈空间是不一样的

R14(LR):链接寄存器(存放断点),硬件自动完成

R15(PC):程序指针,取指令的位置

在FIQ模式下是独立的与其他模式不同

R16  PSR--CPSR(当前状态寄存器) 

SPSR:程序状态寄存器

条件状态(NZCV)保留字 I  F  T 模式位(M4-M0)

SFR(Special Function Register)特殊功能寄存器

IO端口/寄存器,它属于外设的组成部分,ARM是采用与寄存器统一编址的方式

使用软件编程控制某一硬件,其实就是编程读写该硬件的寄存器

2、ARM异常处理

(1)模式与异常

异常的类型:

Reset:复位

undefined instruction:未定义

swi:软中断

prefect/bort

data/abort

Reserved

IRQ:中断

FIQ:快速中断

处理器的模式:每一个异常对应一种模式,但不是一一对应关系

(2)ARM异常处理的过程:

进入异常硬件完成下面动作:

(1)断点:放到LR里面,

(2)CPSR的值放到SPSR

(3)修改CPSR中的模式位

(4)PC跳到中断向量(异常向量)

软件完成下面的动作:

(1)中断散转,二级中断(由硬件完成,不需要手动代码)

(2)保护现场

(3)中断服务程序

(4)恢复现场(LR赋给PC,SPSR的值返回CPSR)

3、中断向量表

4、异常返回

(1) PC在不同的情况下含义不一样,例如:PC(excute执行地址)=PC(fetch取址地址)-8,程序进入异常时LR的值(LR=PC-4)

(2)异常会清除处理器的流水线

(3)每种异常发生的时期不一样,对于中断而言,指令还未被执行就产生了,对于BL/SWI/UNEF而言,指令是执行过了的,当发生预言终止,将预取的指令标记为无效,在指令达到流水线执行阶段执行才进入异常,如果指令在流水线中因为分支而没有执行,异常不会发生。

(4)PATH和DABT常结合MMU和OS来使用,abort的处理程序就必须找出异常的原因,使要求的数据可用,并重试被终止掉的指令

5、存储系统

(1)存储器与存储控制器

存储器单元:存放数据的位置,地址是挂在系统总线

存储控制器:初始化存储器器件,有对应的寄存器配置,寄存器是挂在系统总线上

(2)存储器存储数据格式

大端格式:8051 ARM处理器将最高位字节保存在最低地址,最低字节保存在最高地址

小端格式:ARM,X86 一个字当中最低地址的字节被看做是最低位字节,最高地址的字节被看做是最高位字节

(3)对齐访问与非对齐访问

PC中的bit[1:0]为0

0x4000 0000    0x4000 0001   0x4000 0002   0x4000 0003   0x3322 1100

0x00                 0x11                0x22                0x33

非对齐访问处理:

(1)不可预测

(2)忽略造成访问不对齐的低地址位

(3)先忽略最低两位,然后使用最低两位地址位控制装载数据循环右移(0x0033 2211)

知识点总结:

(1)PC(program counter:程序计数器):用于存放下一条指令所在单元的地址。

(2)LR(Link Register:连接寄存器)

作用有两种:

用来保存子程序返回地址;

当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2),因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。

原文地址:https://www.cnblogs.com/zhai1997/p/12426520.html