新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM體系結(jié)構(gòu)知識(shí)點(diǎn)

ARM體系結(jié)構(gòu)知識(shí)點(diǎn)

作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
一、ARM存儲(chǔ)器

1. 數(shù)據(jù)類型:字節(jié)、半字、字
2. 地址空間:最大可尋址空間位4GB(2的32次方字節(jié))
3. 大小端格式:
大端格式是字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,低字節(jié)存在高地址中
小端格式是低地址中寸的是子數(shù)據(jù)的低字節(jié),高地址存放的是子數(shù)據(jù)的高字節(jié)

本文引用地址:http://2s4d.com/article/201611/316879.htm

二、處理器模式

ARM處理器共有7種工作模式,除用戶(user)模式之外的其他6種處理模式統(tǒng)稱為特權(quán)模式(Privileged Modes)。在這些模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意切換處理器模式。特權(quán)模式中除系統(tǒng)(system)模式之外的其他5種模式又統(tǒng)稱為異常模式。

處理器模式可以通過軟件控制進(jìn)行切換,也可以通過外部中斷或內(nèi)部異常處理過程進(jìn)行切換。運(yùn)行在用戶模式下的程序不能訪問一些受操作系統(tǒng)保護(hù)的系統(tǒng)資源,也不能直接進(jìn)行處理器模式切換,如果要想進(jìn)行模式切換,可以產(chǎn)生異常處理,在異常處理過程中進(jìn)行處理器模式的切換,這種體系架構(gòu)可以使操作系統(tǒng)控制整個(gè)系統(tǒng)資源。

每一種異常模式中都有一組寄存器供異常處理程序使用,這樣可以保證在進(jìn)入異常模式時(shí),用戶模式下的寄存器不被破壞。

系統(tǒng)模式不是通過異常過程進(jìn)入的,它和用戶模式具有完全相同的寄存器。系統(tǒng)模式屬于特權(quán)模式,可以訪問所有系統(tǒng)資源,也可以直接進(jìn)行處理器模式切換,主要供操作系統(tǒng)內(nèi)核進(jìn)程使用;通常操作系統(tǒng)內(nèi)核進(jìn)程需要訪問所有的系統(tǒng)資源,同時(shí)該進(jìn)程仍然使用用戶模式下的寄存器組,而不是異常模式下的寄存器組,這樣可以保證當(dāng)異常發(fā)生時(shí)內(nèi)核進(jìn)程狀態(tài)不被破壞。

ARM處理器的7種工作模式如下表所示:

處理器工作模式

說明

用戶(user,usr)模式

正常程序運(yùn)行模式

快速中斷(FIQ,fiq)模式

異常

模式

特權(quán)模式

privileged modes

快速中斷處理

外部中斷(IRQ,irq)模式

普通中斷處理

超級(jí)用戶(supervisor,svc)模式

提供操作系統(tǒng)使用的一種保護(hù)模式,swi命令狀態(tài)

數(shù)據(jù)訪問終止(abort,abt)模式

用于虛擬存儲(chǔ)和存儲(chǔ)保護(hù)

未定義指令終止(undefined,und)模式

用于支持通過軟件仿真硬件的協(xié)處理

系統(tǒng)(system,sys)模式

用于運(yùn)行特權(quán)級(jí)的操作系統(tǒng)任務(wù)

對(duì)應(yīng)于以上7種模式,ARM處理器有7組通用寄存器,如下表所示:

usr模式

sys模式

svc模式

abt模式

und模式

irq模式

fiq模式

R0

R0

R0

R0

R0

R0

R0

R1

R1

R1

R1

R1

R1

R1

R2

R2

R2

R2

R2

R2

R2

R3

R3

R3

R3

R3

R3

R3

R4

R4

R4

R4

R4

R4

R4

R5

R5

R5

R5

R5

R5

R5

R6

R6

R6

R6

R6

R6

R6

R7

R7

R7

R7

R7

R7

R7

R8

R8

R8

R8

R8

R8

R8_fiq

R9

R9

R9

R9

R9

R9

R9_fiq

R10

R10

R10

R10

R10

R10

R10_fiq

R11

R11

R11

R11

R11

R11

R11_fiq

R12

R12

R12

R12

R12

R12

R12_fiq

R13

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

R14

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

PC

PC

PC

PC

PC

PC

PC

CPSR

CPSR

CPSR

CPSR

CPSR

CPSR

CPSR

SPSR_svc

SPSR_abt

SPSR_und

SPSR_irq

SPSR_fiq

說明:
  1. ARM處理器共有37個(gè)寄存器,被分為若干個(gè)組(BANK),這些寄存器包括31個(gè)通用寄存器和6個(gè)狀態(tài)寄存器,其中通用寄存器包括程序計(jì)數(shù)器(PC指針)及所有寄存器(均為32位)。
  2. ARM處理器中有用戶模式、系統(tǒng)模式、特權(quán)模式、數(shù)據(jù)訪問終止模式、未定義指令終止模式、IRQ中斷模式、FIQ中斷模式7種工作模式,每種工作模式都有R0~R15及CPSR共17個(gè)通用寄存器,而在5種異常中斷(exception)模式中又各自擁有一個(gè)獨(dú)立的SPSR寄存器用于存放當(dāng)前狀態(tài)寄存器的值。這些通用寄存器對(duì)于各種工作模式或部分工作模式有些是公用的,如表7-2所示。
  3. R8~R12對(duì)于快速中斷FIQ模式之外的其他模式都是公用的,而FIQ模式另外有一套自己寄存器R8_fiq~R12_fiq,這樣是為了在處理FIQ中斷時(shí)不必保護(hù)R8~R12寄存器,從而提高響應(yīng)速度。
  4. R13和R14除了用戶模式和系統(tǒng)模式公用外,其他每種異常模式都有一套自己獨(dú)立的寄存器:R13_svc、R14_svc/R13_abt、R14_abt/R13_und、R14_und/R13_irq、R14_irq/R13_fiq、R14_fiq,即R13和R14有6套物理寄存器實(shí)現(xiàn)。
  5. R13/sp寄存器在ARM中除了可用作通用寄存器外還用作堆棧指針sp,而且每一種異常(exception)模式都有自己獨(dú)立的R13物理寄存器實(shí)現(xiàn)。在子程序中R13只能用作sp,sp在進(jìn)入子程序的值和退出子程序的值必須相等。
  6. R14/lr寄存器在ARM中除了可以用作通用寄存器外,還可用作連接寄存器lr,用來保存子程序的返回地址,如果子程序保存了返回地址,R14也可以用作其他用途。每一種異常(exception)模式都有自己獨(dú)立的R14/lr物理寄存器實(shí)現(xiàn)。
  7. R15寄存器在ARM中用作程序計(jì)數(shù)器pc,雖然R15也可以用作通用寄存器,但要注意有一些特殊限制,如果違反了這些限制,指令執(zhí)行的結(jié)果將是不可預(yù)料的。
  8. 子程序通過寄存器R0~R3來傳遞參數(shù),這時(shí),R0~R3可以記作A1~A4。如果參數(shù)超過4個(gè),可以將剩余的參數(shù)送到數(shù)據(jù)棧中,入棧的順序與參數(shù)的順序相反,即最后一個(gè)參數(shù)先入棧。
  9. 在子程序中用R4~R11來保存局部變量,這時(shí),R4~R11可以記作V1~V8;而在Thumb程序中,通常只能使用寄存器R4~R7。
  10. 寄存器R12用作子程序間的scratch寄存器,記作ip,在子程序間的連接代碼中常有這種使用規(guī)則

三、異常

當(dāng)正常的程序執(zhí)行流程發(fā)生暫時(shí)的停止時(shí),稱之為異常,例如處理一個(gè)外部的中斷請(qǐng)求。在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成之后,當(dāng)前程序可以繼續(xù)執(zhí)行。處理器允許多個(gè)異常同時(shí)發(fā)生,它們將會(huì)按固定的優(yōu)先級(jí)進(jìn)行處理。

當(dāng)一個(gè)異常出現(xiàn)以后,ARM微處理器會(huì)執(zhí)行以下幾步操作

1.將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時(shí)能從正確的位置重新開始執(zhí)行。

2.將CPSR復(fù)制到相應(yīng)的SPSR中。

3.根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位。

4.強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。

ARM體系結(jié)構(gòu)所支持的異常類型

1.復(fù)位:復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位處理程序處執(zhí)行

2.未定義指令:遇到不能處理的指令,定義未定義指令異常

3.軟件中斷:執(zhí)行SWI指令產(chǎn)生,用于用戶模式下的程序調(diào)用特權(quán)指令

4.指令預(yù)取中止:處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問

5.數(shù)據(jù)中止:處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當(dāng)前指令訪問

6.IRQ:外部中斷請(qǐng)求有效,且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常

7.FIQ:快速中斷請(qǐng)求引腳有效,且CPSR的F位為0時(shí),產(chǎn)生FIQ異常

ARM體系中斷向量表

優(yōu)先級(jí)

地址

異常原因

進(jìn)入模式

1

0x0000,0000

復(fù)位

管理模式

6

0x0000,0004

未定義指令

未定義模式

6

0x0000,0008

軟件中斷

管理模式

5

0x0000,000C

中止(預(yù)取指令錯(cuò)誤)

中止模式

2

0x0000,0010

中止(預(yù)取數(shù)據(jù)錯(cuò)誤)

中止模式

0x0000,0014

保留

保留

4

0x0000,0018

IRQ(外部中斷,且I允許)

IRQ

3

0x0000,001C

FIQ(外部中斷,且F允許)

FIQ




評(píng)論


技術(shù)專區(qū)

關(guān)閉