主板——核心板+擴(kuò)展電路+接口
核心板——cpu+外圍電路+接口
arm體系結(jié)構(gòu)知識(shí)點(diǎn):
核心(內(nèi)核)編程方法
接口(外圍模塊)技術(shù)
芯片價(jià)格:摩爾定律,十八個(gè)月翻一倍。十八個(gè)月之后價(jià)格降一半。
現(xiàn)在芯片電路:用硬件描述語(yǔ)言設(shè)計(jì)。
芯片生產(chǎn)商:買的arm公司的芯片的硬件描述語(yǔ)言的程序設(shè)計(jì)的內(nèi)核,加一些外圍模塊。
內(nèi)核是統(tǒng)一的,外圍是各自為戰(zhàn)。
arm:Advanced RISC Machines
arm公司網(wǎng)址:http://www.arm.com
arm不僅是一家公司還是一類微處理器的統(tǒng)稱,基于arm內(nèi)核的芯片統(tǒng)稱為arm芯片。
------------------------------------------------------------------------------------------------------------------
arm體系結(jié)構(gòu)
------------------------------------------------------
arm體系結(jié)構(gòu)特點(diǎn):
arm指令都是32位定長(zhǎng)的;
大量的寄存器(37個(gè)寄存器);
Load/Store體系結(jié)構(gòu);
多寄存器的Load/Store指令;
指令的條件執(zhí)行;
在單時(shí)鐘周期執(zhí)行的單條指令中完成數(shù)據(jù)移位操作和ALU操作;
通過(guò)變種和協(xié)處理來(lái)擴(kuò)展ARM處理器的功能;
擴(kuò)展了16位的Thumb指令來(lái)提高代碼密度。
-------------------------------------------------------
arm系列的命名:
ARM1系列:
架構(gòu):ARMv1(內(nèi)核ARM1)
ARM2系列:
架構(gòu):ARMv2(內(nèi)核ARM2)
ARMv2a系列:
架構(gòu):ARM250
ARM3系列:
架構(gòu):ARMv2a(內(nèi)核ARM2a)
ARM6系列:
架構(gòu):ARMv3(內(nèi)核ARM610)
----------------
ARM7TDMI系列:三級(jí)流水
架構(gòu):ARMv4T
ARM9TDMI系列:五級(jí)流水
架構(gòu):ARMv4T
-------------------
ARM9E系列:
架構(gòu):ARMv5
ARM10E系列:六級(jí)流水
架構(gòu):ARMv5
XScale系列:
架構(gòu):ARMv5TE
------------------
ARM11系列:八級(jí)流水
架構(gòu):ARMv6(內(nèi)核:ARM1136J(F)-S);
架構(gòu):ARMv6T2(內(nèi)核:ARM1156T2(F)-S);
架構(gòu):ARMv6KZ(內(nèi)核:ARM1176JZ(F)-S);
架構(gòu):ARMv6K(內(nèi)核:ARM11MPCore);
------------------
Cortex系列:13級(jí)流水
架構(gòu):ARMv7-A(Application)(內(nèi)核:Cortex-A8):面向使用復(fù)雜操作系統(tǒng)及用戶應(yīng)用的應(yīng)用處理器。
架構(gòu):ARMv7-R(Real-time)(內(nèi)核:Cortex-R4(F)):適用于實(shí)時(shí)系統(tǒng)的嵌入式處理器。
架構(gòu):ARMv7-M(Microcontroller)(內(nèi)核:Cortex-M3):為對(duì)成本和功耗敏感的嵌入式應(yīng)用而設(shè)計(jì)的,目標(biāo)是以8位單片機(jī)的價(jià)格實(shí)現(xiàn)32位的高性能。
arm體系結(jié)構(gòu)的變種:
Thumb指令集(T變種):指令長(zhǎng)度16位。
長(zhǎng)乘法指令(M變種):
增強(qiáng)型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沒(méi)有
z:0:標(biāo)準(zhǔn)cache,2:減小的cache, 6可變的cache
T:處理器支持Thumb指令集
D:支持JTAG調(diào)試器
M:支持長(zhǎng)乘法指令
I:有嵌入式跟蹤宏單元
E:支持增強(qiáng)指令(基于TDMI)
J:支持JAVA硬件加速(Jazelle)
F:支持向量浮點(diǎn)單元
S:可綜合版本
-------------------------------------------------------
arm指令流水:
取指Fetch:微處理器取指單元從存儲(chǔ)器中取得要執(zhí)行的指令,存儲(chǔ)到指令寄存器中。
譯碼Decode:對(duì)指令寄存器中的指令進(jìn)行分析,確定要進(jìn)行什么操作。
執(zhí)行Execute:執(zhí)行指令規(guī)定的操作,并按指令的要求保存操作結(jié)果。
馮諾依曼結(jié)構(gòu):指令存儲(chǔ)器地址和數(shù)據(jù)存儲(chǔ)器地址指向同一個(gè)存儲(chǔ)器的不同物理位置。因此指令和數(shù)據(jù)使用同一條數(shù)據(jù)總線,同一時(shí)刻只能取指或取數(shù)據(jù)。
哈佛結(jié)構(gòu):指令總線和數(shù)據(jù)總線分開(kāi),可以同時(shí)訪問(wèn),其寬度可也可以不同。
三級(jí)流水:fetch decode execute
五級(jí)流水:fetch decode execute memory write
五級(jí)流水的流水線級(jí):
取指(fetch)
譯碼(decode)
執(zhí)行(excute)
緩沖/數(shù)據(jù)(buffer/data):如果需要?jiǎng)t訪問(wèn)數(shù)據(jù)存儲(chǔ)器,否則ALU只是簡(jiǎn)單的緩沖一個(gè)時(shí)鐘周期,以便使所有的指令具有同樣的流水線流程。
回寫(write-back):將指令的結(jié)果回寫到寄存器堆,包括任何從寄存器讀出的數(shù)據(jù)。
------------------------------------------------------------
arm存儲(chǔ)系統(tǒng)
arm存儲(chǔ)有兩種方式:大端,小端。
大端格式:字的最低有效字節(jié)存放在存儲(chǔ)器的高地址。
小端字節(jié):字的最低有效字節(jié)存放在存儲(chǔ)器的低地址。
arm默認(rèn)小端模式。
注意:數(shù)據(jù)和代碼在存儲(chǔ)器中的存儲(chǔ)格式要和處理器采用的格式一致。
arm存儲(chǔ)器層次:
寄存器組;
片上ram;
片上cache;
主存儲(chǔ)器。
arm體系結(jié)構(gòu)中可以使用的存儲(chǔ)管理策略包括:
多類型存儲(chǔ)單元;
cache;
寫緩存;
虛擬內(nèi)存地址。
實(shí)現(xiàn)存儲(chǔ)系統(tǒng)管理的方法:
使能cache,加快存儲(chǔ)器的訪問(wèn)速度;
啟動(dòng)虛擬地址到物理地址的映射;
使用“域管理”策略,對(duì)存儲(chǔ)單元的訪問(wèn)進(jìn)行保護(hù);
對(duì)i/o映射地址空間的訪問(wèn)加以限制;
協(xié)處理器cp15。
arm微處理器有37個(gè)32位的寄存器。
------------------------------------------------------------------
arm芯片選型
芯片自身性能與集成度方面的因素:
有無(wú)MMU;
芯片效率;
內(nèi)部存儲(chǔ)器容量;
USB接口;
GPIO數(shù)量;
中斷控制器;
IIS(Integrate Interface of Sound);
nWAIT信號(hào);
RTC(Real Time Clock);
LCD控制器;
PWM輸出;
ADC/DAC;
擴(kuò)展總線;
UART和IrDA;
多核考慮(ARM+DSP)(ARM+ARM);
內(nèi)置FPGA;
時(shí)鐘計(jì)數(shù)器和看門狗;
電源管理;
DMA控制器;
芯片穩(wěn)定性;
芯片供應(yīng)商的技術(shù)支持能力;
芯片的供貨的穩(wěn)定性和采購(gòu)的方便性;
---------------------------------------------------------------------------------------------------------------------
arm編程模型(內(nèi)核編程)
----------------------------------------------------------
arm的數(shù)據(jù)類型:
arm支持以下三種數(shù)據(jù)類型:
字節(jié):8位
半字:16位
字 :32位
-------------------------------------------------------
arm的工作模式:
arm有七種工作模式:
兩個(gè)正常模式:
用戶模式(User):普通程序執(zhí)行模式,大部分程序執(zhí)行在這種模式下。
系統(tǒng)模式(System):使用和User模式相同寄存器集的特權(quán)模式。
五個(gè)異常模式:
快速中斷模式(FIQ):當(dāng)一個(gè)高優(yōu)先級(jí)(fast)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式。
外部中斷模式(IRQ):當(dāng)一個(gè)低優(yōu)先級(jí)(normal)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式。
管理模式(Supervisor):當(dāng)復(fù)位或軟中斷(SWI)指令執(zhí)行時(shí)進(jìn)入這種模式。
數(shù)據(jù)訪問(wèn)終止模式(Abort):當(dāng)存取異常時(shí)將會(huì)進(jìn)入這種模式,用于虛擬存儲(chǔ)或存儲(chǔ)保護(hù)。
未定義模式(Undef):當(dāng)執(zhí)行未定義指令時(shí)進(jìn)入這種模式,有時(shí)用于通過(guò)軟件仿真協(xié)處理器硬件的工作模式。
一個(gè)非特權(quán)模式:
用戶模式(User)
六個(gè)特權(quán)模式:
系統(tǒng)模式(System)
快速中斷模式(FIQ)
外部中斷模式(IRQ)
管理模式(Supervisor)
數(shù)據(jù)訪問(wèn)終止模式(Abort)
未定義模式(Undef)
------------------------------------------------------
arm運(yùn)行狀態(tài)
arm處理器有兩種工作狀態(tài):
ARM狀態(tài):arm狀態(tài)執(zhí)行arm指令,pc值字對(duì)齊(32位)。
Thumb狀態(tài):thumb狀態(tài)下執(zhí)行thumb指令,pc值半字對(duì)齊(16位)。
工作狀態(tài)的切換:
使用指令切換
BX Rm
Rm[0] = 0 ARM狀態(tài)
Rm[0] = 1 Thumb狀態(tài)
處理器自動(dòng)切換
處理器進(jìn)行異常處理,若在Thumb狀態(tài),則進(jìn)入ARM狀態(tài),異常處理返回后進(jìn)入Thumb狀態(tài)。
--------------------------------------------------------------
arm寄存器
ARM處理器有37個(gè)32位長(zhǎng)的寄存器;
31個(gè)通用寄存器(16個(gè)公共+15個(gè)私有);
6個(gè)狀態(tài)寄存器;
不同模式下能訪問(wèn)的寄存器是不一樣的。
----------------
通用寄存器:參與運(yùn)算或保存運(yùn)算的結(jié)果。
以下有16個(gè)公共寄存器:
usr/system:R0——R12,R13,R14,R15.(在用戶模式和系統(tǒng)模式下有16個(gè)公用寄存器)。
有特殊用途的通用寄存器(除了做通用寄存器,還有以下功能):
R13:堆棧指針寄存器SP。
R14:鏈接寄存器LR。一般用來(lái)表示程序的出口。
R15:程序計(jì)數(shù)器PC,永遠(yuǎn)指向取指的指令地址。一般用來(lái)表示程序的入口。
以下有15個(gè)私有寄存器:
irq:R0......R12,R15.(外部中斷模式有兩個(gè)私有的寄存器)
R13_irq
R14_irq
svc:R0......R12,R15.(管理模式有兩個(gè)私有的寄存器)
R13_svc
R14_svc
abt:R0......R12,R15.(數(shù)據(jù)訪問(wèn)終止模式有兩個(gè)私有的寄存器)
R13_abt
R14_abt
und:R0......R12,R15.(未定義模式有兩個(gè)私有的寄存器)
R13_und
R14_und
fiq:R0-R7,R15.(快速中斷模式有七個(gè)私有的寄存器)
R8_fiq
R9_fiq
R10_fiq
R11_fiq
R12_fiq
R13_fiq
R14_fiq
---------------------
狀態(tài)寄存器psr:
一個(gè):
cpsr:當(dāng)前程序狀態(tài)寄存器。(七種模式都能訪問(wèn))。
五個(gè):
spsr:保存程序狀態(tài)寄存器。(只有對(duì)應(yīng)模式才能訪問(wèn))。
spsr_irq
spsr_svc
spsr_fiq
spsr_abt
spsr_und
cpsr/spsr寄存器格式:
條件代碼標(biāo)識(shí)
31 30 29 28 7 6 5 4-0
N Z C V I F T mode
高四位:
N=1:負(fù)數(shù)或小于(negtive)
Z=1:等于零(zero)
C=1:有進(jìn)位或借位擴(kuò)展
V=1:有溢出
后八位:
I=1:IRQ禁止interrupt
F=1:FIQ禁止fast
T=1/0:Thumb/Arm狀態(tài)位
mode后五位表示七種模式:
0b10000:用戶模式
0b10001:fiq模式
0b10010:irq模式
0b10011:管理模式
0b10111:中止模式
0b11011:未定義模式
0b11111:系統(tǒng)模式
------------------------------------------------------------------
arm異常處理
arm微處理器通過(guò)異常來(lái)響應(yīng)程序正常執(zhí)行過(guò)程中發(fā)生的意外事件。
arm微處理器有七種類型的異常:
復(fù)位異常(Reset)
未定義異常(Undefined)
軟件中斷(SWI)
預(yù)取異常(Prefetch Abort)
數(shù)據(jù)異常(Data Abort)
外部中斷異常(IRQ)
快速中斷異常(FIQ)
當(dāng)異常發(fā)生時(shí),arm微處理器會(huì)把pc設(shè)置為一個(gè)特定的存儲(chǔ)器地址,然后從這個(gè)地址取指令并執(zhí)行。這個(gè)特定的地址稱為異常向量,所有的異常向量地址構(gòu)成了異常向量表。
按優(yōu)先級(jí)從高到低:
復(fù)位異常:1,管理模式(SVC),當(dāng)處理器的復(fù)位引腳被加上有效服務(wù)信號(hào)時(shí),產(chǎn)生復(fù)位異常。
數(shù)據(jù)異常:2,數(shù)據(jù)訪問(wèn)中止模式(Abort),處理器數(shù)據(jù)訪問(wèn)時(shí),如果目標(biāo)地址不存在或相應(yīng)的地址空間沒(méi)有訪問(wèn)權(quán)限則產(chǎn)生數(shù)據(jù)訪問(wèn)中止異常。
快速中斷異常:3,快速中斷模式(FIQ),處理器外部快速中斷清求引腳有效且CPSR寄存器的F位為0,處理器產(chǎn)生快速中斷請(qǐng)求。
正常中斷異常:4,正常中斷模式(IRQ),處理器外部正常中斷請(qǐng)求引腳有效且CPSR寄存器的I位為0時(shí),處理器產(chǎn)生正常中斷請(qǐng)求。
預(yù)取異常:5,數(shù)據(jù)訪問(wèn)中止模式(Abort),當(dāng)一個(gè)指令被從內(nèi)存中預(yù)取時(shí),由于某種原因而失敗,如果它能到達(dá)執(zhí)行狀態(tài)這個(gè)異常才會(huì)產(chǎn)生。
未定義指令異常:6,未定義指令中止模式(Udef),當(dāng)arm處理器或協(xié)處理器執(zhí)行未定義的指令碼時(shí),產(chǎn)生未定義指令異常。
軟中斷異常:6,管理模式(SVC),當(dāng)arm處理器或協(xié)處理器執(zhí)行未定義的指令碼時(shí),產(chǎn)生未定義指令異常。
arm異常相應(yīng)過(guò)程:
將當(dāng)前程序狀態(tài)寄存器CPSR的值保存到將要執(zhí)行的異常對(duì)應(yīng)的處理器工作模式的SPSR寄存器。
修改當(dāng)前程序狀態(tài)寄存器CPSR的相應(yīng)位。
把將要執(zhí)行的異常所對(duì)應(yīng)的工作模式的LR寄存器設(shè)置成異常返回地址。
將程序寄存器PC的值設(shè)置成該異常的向量地址,并從該地址取指令執(zhí)行。