主板——核心板+扩展电路+接口
核心板——cpu+外围电路+接口
arm体系结构知识点:
核心(内核)编程方法
接口(外围模块)技术
芯片价格:摩尔定律,十八个月翻一倍。十八个月之后价格降一半。
现在芯片电路:用硬件描述语言设计。
芯片生产商:买的arm公司的芯片的硬件描述语言的程序设计的内核,加一些外围模块。
内核是统一的,外围是各自为战。
arm:Advanced RISC Machines
arm公司网址:http://www.arm.com
arm不仅是一家公司还是一类微处理器的统称,基于arm内核的芯片统称为arm芯片。
------------------------------------------------------------------------------------------------------------------
arm体系结构
------------------------------------------------------
arm体系结构特点:
arm指令都是32位定长的;
大量的寄存器(37个寄存器);
Load/Store体系结构;
多寄存器的Load/Store指令;
指令的条件执行;
在单时钟周期执行的单条指令中完成数据移位操作和ALU操作;
通过变种和协处理来扩展ARM处理器的功能;
扩展了16位的Thumb指令来提高代码密度。
-------------------------------------------------------
arm系列的命名:
ARM1系列:
架构:ARMv1(内核ARM1)
ARM2系列:
架构:ARMv2(内核ARM2)
ARMv2a系列:
架构:ARM250
ARM3系列:
架构:ARMv2a(内核ARM2a)
ARM6系列:
架构:ARMv3(内核ARM610)
----------------
ARM7TDMI系列:三级流水
架构:ARMv4T
ARM9TDMI系列:五级流水
架构:ARMv4T
-------------------
ARM9E系列:
架构:ARMv5
ARM10E系列:六级流水
架构:ARMv5
XScale系列:
架构:ARMv5TE
------------------
ARM11系列:八级流水
架构:ARMv6(内核:ARM1136J(F)-S);
架构:ARMv6T2(内核:ARM1156T2(F)-S);
架构:ARMv6KZ(内核:ARM1176JZ(F)-S);
架构:ARMv6K(内核:ARM11MPCore);
------------------
Cortex系列:13级流水
架构:ARMv7-A(Application)(内核:Cortex-A8):面向使用复杂操作系统及用户应用的应用处理器。
架构:ARMv7-R(Real-time)(内核:Cortex-R4(F)):适用于实时系统的嵌入式处理器。
架构:ARMv7-M(Microcontroller)(内核:Cortex-M3):为对成本和功耗敏感的嵌入式应用而设计的,目标是以8位单片机的价格实现32位的高性能。
arm体系结构的变种:
Thumb指令集(T变种):指令长度16位。
长乘法指令(M变种):
增强型DSP指令(E变种):
Java加速器Jazelle(J变种):
arm处理器命名格式:
ARM x y z T D M I E J F -S
x:序列
y:2:带MMU, 4带MPU,6没有
z:0:标准cache,2:减小的cache, 6可变的cache
T:处理器支持Thumb指令集
D:支持JTAG调试器
M:支持长乘法指令
I:有嵌入式跟踪宏单元
E:支持增强指令(基于TDMI)
J:支持JAVA硬件加速(Jazelle)
F:支持向量浮点单元
S:可综合版本
-------------------------------------------------------
arm指令流水:
取指Fetch:微处理器取指单元从存储器中取得要执行的指令,存储到指令寄存器中。
译码Decode:对指令寄存器中的指令进行分析,确定要进行什么操作。
执行Execute:执行指令规定的操作,并按指令的要求保存操作结果。
冯诺依曼结构:指令存储器地址和数据存储器地址指向同一个存储器的不同物理位置。因此指令和数据使用同一条数据总线,同一时刻只能取指或取数据。
哈佛结构:指令总线和数据总线分开,可以同时访问,其宽度可也可以不同。
三级流水:fetch decode execute
五级流水:fetch decode execute memory write
五级流水的流水线级:
取指(fetch)
译码(decode)
执行(excute)
缓冲/数据(buffer/data):如果需要则访问数据存储器,否则ALU只是简单的缓冲一个时钟周期,以便使所有的指令具有同样的流水线流程。
回写(write-back):将指令的结果回写到寄存器堆,包括任何从寄存器读出的数据。
------------------------------------------------------------
arm存储系统
arm存储有两种方式:大端,小端。
大端格式:字的最低有效字节存放在存储器的高地址。
小端字节:字的最低有效字节存放在存储器的低地址。
arm默认小端模式。
注意:数据和代码在存储器中的存储格式要和处理器采用的格式一致。
arm存储器层次:
寄存器组;
片上ram;
片上cache;
主存储器。
arm体系结构中可以使用的存储管理策略包括:
多类型存储单元;
cache;
写缓存;
虚拟内存地址。
实现存储系统管理的方法:
使能cache,加快存储器的访问速度;
启动虚拟地址到物理地址的映射;
使用“域管理”策略,对存储单元的访问进行保护;
对i/o映射地址空间的访问加以限制;
协处理器cp15。
arm微处理器有37个32位的寄存器。
------------------------------------------------------------------
arm芯片选型
芯片自身性能与集成度方面的因素:
有无MMU;
芯片效率;
内部存储器容量;
USB接口;
GPIO数量;
中断控制器;
IIS(Integrate Interface of Sound);
nWAIT信号;
RTC(Real Time Clock);
LCD控制器;
PWM输出;
ADC/DAC;
扩展总线;
UART和IrDA;
多核考虑(ARM+DSP)(ARM+ARM);
内置FPGA;
时钟计数器和看门狗;
电源管理;
DMA控制器;
芯片稳定性;
芯片供应商的技术支持能力;
芯片的供货的稳定性和采购的方便性;
---------------------------------------------------------------------------------------------------------------------
arm编程模型(内核编程)
----------------------------------------------------------
arm的数据类型:
arm支持以下三种数据类型:
字节:8位
半字:16位
字 :32位
-------------------------------------------------------
arm的工作模式:
arm有七种工作模式:
两个正常模式:
用户模式(User):普通程序执行模式,大部分程序执行在这种模式下。
系统模式(System):使用和User模式相同寄存器集的特权模式。
五个异常模式:
快速中断模式(FIQ):当一个高优先级(fast)中断产生时将会进入这种模式。
外部中断模式(IRQ):当一个低优先级(normal)中断产生时将会进入这种模式。
管理模式(Supervisor):当复位或软中断(SWI)指令执行时进入这种模式。
数据访问终止模式(Abort):当存取异常时将会进入这种模式,用于虚拟存储或存储保护。
未定义模式(Undef):当执行未定义指令时进入这种模式,有时用于通过软件仿真协处理器硬件的工作模式。
一个非特权模式:
用户模式(User)
六个特权模式:
系统模式(System)
快速中断模式(FIQ)
外部中断模式(IRQ)
管理模式(Supervisor)
数据访问终止模式(Abort)
未定义模式(Undef)
------------------------------------------------------
arm运行状态
arm处理器有两种工作状态:
ARM状态:arm状态执行arm指令,pc值字对齐(32位)。
Thumb状态:thumb状态下执行thumb指令,pc值半字对齐(16位)。
工作状态的切换:
使用指令切换
BX Rm
Rm[0] = 0 ARM状态
Rm[0] = 1 Thumb状态
处理器自动切换
处理器进行异常处理,若在Thumb状态,则进入ARM状态,异常处理返回后进入Thumb状态。
--------------------------------------------------------------
arm寄存器
ARM处理器有37个32位长的寄存器;
31个通用寄存器(16个公共+15个私有);
6个状态寄存器;
不同模式下能访问的寄存器是不一样的。
----------------
通用寄存器:参与运算或保存运算的结果。
以下有16个公共寄存器:
usr/system:R0——R12,R13,R14,R15.(在用户模式和系统模式下有16个公用寄存器)。
有特殊用途的通用寄存器(除了做通用寄存器,还有以下功能):
R13:堆栈指针寄存器SP。
R14:链接寄存器LR。一般用来表示程序的出口。
R15:程序计数器PC,永远指向取指的指令地址。一般用来表示程序的入口。
以下有15个私有寄存器:
irq:R0......R12,R15.(外部中断模式有两个私有的寄存器)
R13_irq
R14_irq
svc:R0......R12,R15.(管理模式有两个私有的寄存器)
R13_svc
R14_svc
abt:R0......R12,R15.(数据访问终止模式有两个私有的寄存器)
R13_abt
R14_abt
und:R0......R12,R15.(未定义模式有两个私有的寄存器)
R13_und
R14_und
fiq:R0-R7,R15.(快速中断模式有七个私有的寄存器)
R8_fiq
R9_fiq
R10_fiq
R11_fiq
R12_fiq
R13_fiq
R14_fiq
---------------------
状态寄存器psr:
一个:
cpsr:当前程序状态寄存器。(七种模式都能访问)。
五个:
spsr:保存程序状态寄存器。(只有对应模式才能访问)。
spsr_irq
spsr_svc
spsr_fiq
spsr_abt
spsr_und
cpsr/spsr寄存器格式:
条件代码标识
31 30 29 28 7 6 5 4-0
N Z C V I F T mode
高四位:
N=1:负数或小于(negtive)
Z=1:等于零(zero)
C=1:有进位或借位扩展
V=1:有溢出
后八位:
I=1:IRQ禁止interrupt
F=1:FIQ禁止fast
T=1/0:Thumb/Arm状态位
mode后五位表示七种模式:
0b10000:用户模式
0b10001:fiq模式
0b10010:irq模式
0b10011:管理模式
0b10111:中止模式
0b11011:未定义模式
0b11111:系统模式
------------------------------------------------------------------
arm异常处理
arm微处理器通过异常来响应程序正常执行过程中发生的意外事件。
arm微处理器有七种类型的异常:
复位异常(Reset)
未定义异常(Undefined)
软件中断(SWI)
预取异常(Prefetch Abort)
数据异常(Data Abort)
外部中断异常(IRQ)
快速中断异常(FIQ)
当异常发生时,arm微处理器会把pc设置为一个特定的存储器地址,然后从这个地址取指令并执行。这个特定的地址称为异常向量,所有的异常向量地址构成了异常向量表。
按优先级从高到低:
复位异常:1,管理模式(SVC),当处理器的复位引脚被加上有效服务信号时,产生复位异常。
数据异常:2,数据访问中止模式(Abort),处理器数据访问时,如果目标地址不存在或相应的地址空间没有访问权限则产生数据访问中止异常。
快速中断异常:3,快速中断模式(FIQ),处理器外部快速中断清求引脚有效且CPSR寄存器的F位为0,处理器产生快速中断请求。
正常中断异常:4,正常中断模式(IRQ),处理器外部正常中断请求引脚有效且CPSR寄存器的I位为0时,处理器产生正常中断请求。
预取异常:5,数据访问中止模式(Abort),当一个指令被从内存中预取时,由于某种原因而失败,如果它能到达执行状态这个异常才会产生。
未定义指令异常:6,未定义指令中止模式(Udef),当arm处理器或协处理器执行未定义的指令码时,产生未定义指令异常。
软中断异常:6,管理模式(SVC),当arm处理器或协处理器执行未定义的指令码时,产生未定义指令异常。
arm异常相应过程:
将当前程序状态寄存器CPSR的值保存到将要执行的异常对应的处理器工作模式的SPSR寄存器。
修改当前程序状态寄存器CPSR的相应位。
把将要执行的异常所对应的工作模式的LR寄存器设置成异常返回地址。
将程序寄存器PC的值设置成该异常的向量地址,并从该地址取指令执行。