




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開發(fā)——ARM與C/OS-Ⅱ第三講ARM微處理器體系結(jié)構(gòu)嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開發(fā)本節(jié)要求
操作系統(tǒng)移植和系統(tǒng)初始化需要了解ARM體系結(jié)構(gòu)與匯編語言。學(xué)習(xí)ARM微處理器的體系結(jié)構(gòu);掌握ARM匯編語言的基本使用方法。本節(jié)要求操作系統(tǒng)移植和系統(tǒng)初始化需要了解ARM體系結(jié)構(gòu)與精品資料精品資料你怎么稱呼老師?如果老師最后沒有總結(jié)一節(jié)課的重點(diǎn)的難點(diǎn),你是否會(huì)認(rèn)為老師的教學(xué)方法需要改進(jìn)?你所經(jīng)歷的課堂,是講座式還是討論式?教師的教鞭“不怕太陽曬,也不怕那風(fēng)雨狂,只怕先生罵我笨,沒有學(xué)問無顏見爹娘……”“太陽當(dāng)空照,花兒對(duì)我笑,小鳥說早早早……”嵌入式微處理器體系結(jié)構(gòu)--ppt課件本節(jié)提要1324ARM體系結(jié)構(gòu)概覽ARMJTAG調(diào)試接口ARM編程模型ARM指令集本節(jié)提要1324ARM體系結(jié)構(gòu)概覽ARMJTAG調(diào)試接口AARMLtd成立于1990年11月;前身為Acorn計(jì)算機(jī)公司;AdvanceRISCMachine(ARM);主要設(shè)計(jì)ARM系列RISC處理器內(nèi)核;授權(quán)ARM內(nèi)核給生產(chǎn)和銷售半導(dǎo)體的合作伙伴;ARM公司不生產(chǎn)芯片;IP(IntelligenceProperty);另外也提供基于ARM架構(gòu)的開發(fā)設(shè)計(jì)技術(shù);軟件工具,評(píng)估板,調(diào)試工具,應(yīng)用軟件,
總線架構(gòu),外圍設(shè)備單元等。ARMLtd成立于1990年11月;ARM即AdvancedRISCMachines的縮寫。1985年4月26日,第一個(gè)ARM原型在英國劍橋的Acorn計(jì)算機(jī)有限公司誕生,由美國加州SanJoseVLSI技術(shù)公司制造。20世紀(jì)80年代后期,ARM很快開發(fā)成Acorn的臺(tái)式機(jī)產(chǎn)品,形成英國的計(jì)算機(jī)教育基礎(chǔ)。1990年成立了AdvancedRISCMachinesLimited。20世紀(jì)90年代,ARM32位嵌人式RISC(ReducedInstructionSetComputer)處理器擴(kuò)展到世界范圍,占據(jù)了低功耗、低成本和高性能的嵌入式系統(tǒng)應(yīng)用領(lǐng)域的領(lǐng)先地位。32位RISC處理器受到青睞,領(lǐng)先的是ARM嵌入式微處理器系列。ARM公司雖然只成立10多年,但在1999年因移動(dòng)電話火爆市場,其32位RISC處理器占市場份額超過了50%,2001年初,ARM公司的32位RISC處理器市場占有率超過了75%。ARM公司是知識(shí)產(chǎn)權(quán)供應(yīng)商,是設(shè)計(jì)公司。由合作伙伴公司來生產(chǎn)各具特色的芯片。
ARM的發(fā)展歷程-1ARM即AdvancedRISCMachines的縮寫。ARM公司商業(yè)模式的強(qiáng)大之處在于其價(jià)格合理,全世界范圍有超過100個(gè)合作伙伴--包括半導(dǎo)體工業(yè)的著名公司。ARM公司專注于設(shè)計(jì),其內(nèi)核耗電少、成本低、功能強(qiáng),特有16/32位雙指令集。ARM已成為移動(dòng)通信、手持計(jì)算、多媒體數(shù)字消費(fèi)等嵌入式解決方案的RISC標(biāo)準(zhǔn)。
在所有ARM處理器系列中,ARM7處理器系列應(yīng)用最廣,采用ARM7處理器作為內(nèi)核生產(chǎn)芯片的公司最多。ARM公司商業(yè)模式的強(qiáng)大之處在于其價(jià)格合理,全世界范圍有超過ARM的發(fā)展歷程-21991年--ARM推出第一款RISC嵌入式微處理器核ARM6。1993年--ARM推出
ARM7核。1995年--ARM的Thumb擴(kuò)展指令集結(jié)構(gòu)為16位系統(tǒng)增加了32位的性能,提供業(yè)界領(lǐng)先的代碼密度。ARM的發(fā)展歷程-21991年--ARM推出第一款RIARM的發(fā)展歷程-3ARM的發(fā)展歷程-3ARM處理器的3大特點(diǎn)如下:小體積、低功耗、成本低、高性能;16位/32位雙指令集;全球眾多的合作伙伴。當(dāng)前ARM體系結(jié)構(gòu)的擴(kuò)充包括:Thumb:16位指令集,用以改善代碼密度;DSP:用于DSP應(yīng)用的算術(shù)運(yùn)算指令集;Jazeller:允許直接執(zhí)行Java代碼的擴(kuò)充。ARM處理器系列提供的解決方案包括:在無線、消費(fèi)電子和圖像應(yīng)用方面的開放平臺(tái);存儲(chǔ)、自動(dòng)化、工業(yè)和網(wǎng)絡(luò)應(yīng)用的嵌入式實(shí)時(shí)系統(tǒng);智能卡和SIM卡的安全應(yīng)用。ARM處理器的特點(diǎn)ARM處理器的3大特點(diǎn)如下:ARM處理器的特點(diǎn)ARM授權(quán)費(fèi)IPARM創(chuàng)造和設(shè)計(jì)IPPartner產(chǎn)品,例如:芯片Partner把ARMIP和其他IP集成進(jìn)產(chǎn)品OEMCustomer版權(quán)費(fèi)單價(jià)OEM用來自ARMPartner的芯片設(shè)計(jì)制造最終用戶產(chǎn)品業(yè)務(wù)拓展/市場格局ARM的業(yè)務(wù)模型ARM授權(quán)費(fèi)IPARM創(chuàng)造和Partner產(chǎn)品,例如:芯片ARM微處理器微處理器核:ARM6,ARM7,ARM9,ARM10,ARM11。擴(kuò)展:Thumb,DSP,SIMD,Jazelleetc。其他IP核:UART,GPIO,memorycontrollers,etc。ARM微處理器微處理器核:ARM6,ARM7,ARMARM體系結(jié)構(gòu)版本
-1Version1(obsolete)基本數(shù)據(jù)處理;字節(jié)、字以及多字load/store;軟件中斷;26bit地址總線。Version2(obsolete)Multiply&Multiply-accumulate;支持協(xié)處理器;支持線程同步;26bit地址總線。ARM體系結(jié)構(gòu)版本-1Version1(obsoleARM體系結(jié)構(gòu)版本
-2V3版本推出32位尋址能力,結(jié)構(gòu)擴(kuò)展變化為:T---16位壓縮指令集;M---增強(qiáng)型乘法器,產(chǎn)生全64位結(jié)果(32X3264or32X32+6464)。V4版本增加了半字load和store指令。V5版本改進(jìn)了ARM和Thumb之間的交互,結(jié)構(gòu)擴(kuò)展變化為:E---增強(qiáng)型DSP指令集,包括全部算法操作和16位乘法操作;J---支持新的JAVA,提供字節(jié)代碼執(zhí)行的硬件和優(yōu)化軟件加速功能。ARM體系結(jié)構(gòu)版本-2V3版本推出32位尋址能力,結(jié)構(gòu)擴(kuò)ARM體系結(jié)構(gòu)更新ARM體系結(jié)構(gòu)更新體系結(jié)構(gòu)變化
–1*THUMB指令集
(“T”)THUMB指令集:32位ARM指令集的子集,按16位指令重新編碼。代碼尺寸小
(upto40%compression)。簡化設(shè)計(jì)。體系結(jié)構(gòu)變化–1*THUMB指令集(“T”)體系結(jié)構(gòu)變化
-2長乘法指令
(‘M’)32x32=64bit.提供全64位結(jié)果。增強(qiáng)DSP指令集
(‘E’)可附加在ARM中的DSP指令。64bit轉(zhuǎn)換。在v5版本中第一次推出。處理器內(nèi)核的變化D:在片調(diào)試.處理器可響應(yīng)調(diào)試暫停請(qǐng)求。I:EmbeddedICE.支持片上斷點(diǎn)調(diào)試。體系結(jié)構(gòu)變化-2長乘法指令(‘M’)體系結(jié)構(gòu)變化
-3ARMDSP指令集對(duì)于音頻DSP應(yīng)用提供高達(dá)70%的處理速度。Jazelle提供比基于軟件的JAVA虛擬機(jī)(JVM)更高的性能。
與非JAVA加速核相比,提供8倍JAVA加速性能和降低80%的功耗。139字節(jié)碼直接在硬件上執(zhí)行,88個(gè)字節(jié)碼在軟件上執(zhí)行。體系結(jié)構(gòu)變化-3ARMDSP指令集本節(jié)提要1324ARM體系結(jié)構(gòu)概覽ARMJTAG調(diào)試接口ARM編程模型ARM指令集本節(jié)提要1324ARM體系結(jié)構(gòu)概覽ARMJTAG調(diào)試接口A指令流水線為增加處理器指令流的速度,ARM7系列使用3級(jí)流水線允許多個(gè)操作同時(shí)處理,比逐條指令執(zhí)行要快
PC指向正被取指的指令,而非正在執(zhí)行的指令FetchDecodeExecute從存儲(chǔ)器中讀取指令解碼指令寄存器讀(從寄存器Bank)移位及ALU操作寄存器寫(到寄存器Bank)PC PCPC+4PC+2PC+8PC+4ARM Thumb指令流水線為增加處理器指令流的速度,ARM7系列使用3級(jí)流處理器的工作狀態(tài)ARM7TDMI處理器有兩種工作狀態(tài):ARM——32bit,按字排列的ARM指令集。Thumb——16bit,
按半字排列的Thumb指令集。ARM7TDMI核的操作狀態(tài)可以通過BX指令(分支和交換指令)在ARM狀態(tài)和Thumb狀態(tài)之間切換。例:從ARM狀態(tài)切換到Thumb狀態(tài):
LDRR0,=Label+1BXR0從Thumb狀態(tài)切換到ARM狀態(tài):
LDRR0,=LabelBXR0處理器的工作狀態(tài)ARM7TDMI處理器有兩種工作狀態(tài):例:存儲(chǔ)器模式*大端模式字?jǐn)?shù)據(jù)的高位字節(jié)存放在低地址中。字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中。小端模式低地址中存放字?jǐn)?shù)據(jù)的低字節(jié)。高地址中存放字?jǐn)?shù)據(jù)的高字節(jié)。3124
2316
158
70字地址11109887654432100
低地址
高地址3124
2316
158
70
字地址89101184567401230
低地址
高地址存儲(chǔ)器模式*大端模式3124231615870字地址1數(shù)據(jù)和指令類型ARM采用的是32位架構(gòu)ARM約定:Byte: 8bits;Halfword:16bits(2byte);Word: 32bits(4byte)。大部分ARMcore提供:ARM指令集(32bits);Thumb指令集(T變種)(16bits)。Jazellecores支持Javabytecode(J變種,4TEJ)。數(shù)據(jù)和指令類型ARM采用的是32位架構(gòu)處理器工作模式(1)ARM有7個(gè)基本工作模式:1.User:非特權(quán)模式,大部分任務(wù)執(zhí)行在這種模式正常程序執(zhí)行的模式2.FIQ:當(dāng)一個(gè)高優(yōu)先級(jí)(fast)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式高速數(shù)據(jù)傳輸和通道處理3.IRQ:當(dāng)一個(gè)低優(yōu)先級(jí)(normal)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式通常的中斷處理4.Supervisor:當(dāng)復(fù)位或軟中斷指令執(zhí)行時(shí)將會(huì)進(jìn)入這種模式供操作系統(tǒng)使用的一種保護(hù)模式5.Abort:當(dāng)存取異常時(shí)將會(huì)進(jìn)入這種模式虛擬存儲(chǔ)及存儲(chǔ)保護(hù)6.Undef:當(dāng)執(zhí)行未定義指令時(shí)會(huì)進(jìn)入這種模式軟件仿真硬件協(xié)處理器7.System:使用和User模式相同寄存器集的特權(quán)模式特權(quán)級(jí)的操作系統(tǒng)任務(wù)處理器工作模式(1)ARM有7個(gè)基本工作模式:處理器工作模式(2)除用戶模式和系統(tǒng)模式外,其他都稱為異常模式。其中大多數(shù)程序運(yùn)行在用戶模式下,這時(shí)應(yīng)用程序不能訪問一些受操作系統(tǒng)保護(hù)的系統(tǒng)資源,也不能直接進(jìn)行處理器模式的切換。當(dāng)需要進(jìn)行模式切換時(shí),應(yīng)用程序可以產(chǎn)生異常處理,在異常處理過程中切換處理器的運(yùn)行模式。這種體系結(jié)構(gòu)的優(yōu)點(diǎn)是操作系統(tǒng)可以控制整個(gè)系統(tǒng)的資源。當(dāng)應(yīng)用程序發(fā)生異常中斷時(shí),處理器進(jìn)入相應(yīng)的異常模式,每種異常模式下都有相應(yīng)的一組寄存器,以供相應(yīng)的異常處理程序使用,這樣可以保證進(jìn)入異常模式后,用戶模式下的寄存器(保存了程序狀態(tài))不會(huì)被破壞。處理器工作模式(2)除用戶模式和系統(tǒng)模式外,其他都稱為異常模寄存器組織
–1*寄存器組織–1*寄存器
-237寄存器31個(gè)通用32位寄存器,包括程序計(jì)數(shù)器PC:未分組寄器R0-R7;分組寄存器R8-R14;程序計(jì)數(shù)器PC(R15);6個(gè)狀態(tài)寄存器;15通用寄存器
(R0toR14),以及1或者2個(gè)狀態(tài)寄存器和程序計(jì)數(shù)器在任何時(shí)候都是可以訪問的??稍L問的寄存器取決于處理器的模式其他寄存器(thebankedregisters)的狀態(tài)在支持IRQ,FIQ,管理員,中止和未定義模式處理時(shí)被切換寄存器-237寄存器寄存器
-3R0到R15可以直接訪問;R0到R14是通用寄存器;R13:堆棧指針
(sp)(通常)每種處理器模式都有單獨(dú)的堆棧;R14:鏈接寄存器(lr);R15包含程序計(jì)數(shù)器
(PC);CPSR當(dāng)前程序狀態(tài)寄存器,包括代碼標(biāo)志狀態(tài)和當(dāng)前模式位;5個(gè)SPSRs:程序狀態(tài)保存寄存器,當(dāng)異常發(fā)生時(shí)保存CPSR狀態(tài)。寄存器-3R0到R15可以直接訪問;棧指針寄存器——R13R13通常作為棧指針使用,每一種異常模式都有自己的R13,程序初始化的時(shí)候,使R13指向該異常模式專用的棧地址;當(dāng)進(jìn)入異常時(shí),可以把需要保存的寄存器保存在R13所指向的棧中;當(dāng)退出異常時(shí),再將保存在R13所指向的棧中的寄存器彈出來,這樣就使異常處理程序不會(huì)破壞其中斷程序的運(yùn)行現(xiàn)場。棧指針寄存器——R13R13通常作為棧指針使用,每一種異常鏈接寄存器——R141)每一種處理器模式自己的物理R14中存放當(dāng)前子程序的返回地址,當(dāng)通過BL指令調(diào)用子程序時(shí),R14被設(shè)置成該子程序的返回地址,在子程序中,當(dāng)把R14的值復(fù)制到程序計(jì)數(shù)器PC中時(shí),子程序返回。可以通過下面兩種方式實(shí)現(xiàn)這種子程序的返回操作:MOVPC,LRBXLR
或者在子程序入口使用下面的指令將PC保存到棧中:STMFDSP!,{<registers>,LR}LDMFDSP!,{<registers>,PC}2)當(dāng)異常中斷發(fā)生時(shí),該異常模式特定的物理R14被設(shè)置成該異常模式將要返回的地址,對(duì)于有些異常模式,R14的值可能與將返回的地址有一個(gè)常數(shù)的偏移量。鏈接寄存器——R141)每一種處理器模式自己的物理R14中存程序計(jì)數(shù)器——R15
程序計(jì)數(shù)器R15又稱為PC,由于ARM采用流水線機(jī)制,當(dāng)正確讀取了PC的值時(shí),該值為當(dāng)前指令地址值加8個(gè)字節(jié),也就是說,對(duì)于ARM指令集來說,PC指向當(dāng)前指令的下兩條指令的地址,由于ARM指令是字對(duì)齊的,PC值的第0、1位總為1。程序計(jì)數(shù)器——R15程序計(jì)數(shù)器R15又稱為PC,由于AR程序狀態(tài)寄存器
-1ARM7TDMI包含當(dāng)前程序狀態(tài)寄存器
(CPSR),加上5個(gè)程序狀態(tài)保存寄存器SPSR,當(dāng)異常發(fā)生時(shí),用于保存CPSR的狀態(tài)。這些寄存器的功能是:保存ALU當(dāng)前操作信息;控制允許和禁止中斷;設(shè)置處理器操作模式。程序狀態(tài)寄存器-1ARM7TDMI包含當(dāng)前程序狀態(tài)寄存程序狀態(tài)寄存器
條件位:N=1-結(jié)果為負(fù),0-結(jié)果為正或0Z=1-結(jié)果為0,0-結(jié)果不為0C=1-進(jìn)位,0-借位V=1-結(jié)果溢出,0結(jié)果沒溢出Q位:僅ARM5TE/J架構(gòu)支持指示增強(qiáng)型DSP指令是否溢出J位僅ARM5TE/J架構(gòu)支持J=1:處理器處于Jazelle狀態(tài)中斷禁止位:I=1:禁止IRQ.F=1:禁止FIQ.TBit僅ARMxT架構(gòu)支持T=0:處理器處于ARM狀態(tài)T=1:處理器處于Thumb狀態(tài)Mode位(處理器模式位):0b10000 User0b10001 FIQ0b10010 IRQ0b10011 Supervisor0b10111 Abort0b11011 Undefined0b11111 System2731NZCVQ2867IFTmode1623
815
54024fsxc
UndefinedJ程序狀態(tài)寄存器條件位:中斷禁止位:2731NZCV程序狀態(tài)寄存器PSR的模式位程序狀態(tài)寄存器PSR的模式位當(dāng)處理器執(zhí)行在ARM狀態(tài):所有指令32bits寬;所有指令必須word對(duì)齊;所以pc值由bits[31:2]決定,bits[1:0]未定義(所以指令不能halfword/byte對(duì)齊)。當(dāng)處理器執(zhí)行在Thumb狀態(tài):所有指令16bits寬;所有指令必須halfword對(duì)齊;所以pc值由bits[31:1]決定,bits[0]未定義(所以指令不能byte對(duì)齊)。當(dāng)處理器執(zhí)行在Jazelle狀態(tài):所有指令8bits寬;處理器執(zhí)行word存取一次取4條指令。程序指針PC(r15)當(dāng)處理器執(zhí)行在ARM狀態(tài):程序指針PC(r15)異常
-1異?!獌?nèi)部或外部中斷源產(chǎn)生并引起處理器處理一個(gè)事件,如外部中斷或試圖執(zhí)行未定義指令都會(huì)引起異常。處理異常之前必須保留處理器的狀態(tài)。異常類型FIQ;IRQ(InterruptReQuest);未定義指令;預(yù)取中止;數(shù)據(jù)中止;復(fù)位;軟件中斷Softwareinterrupt:通過軟件中斷產(chǎn)生;從管理員模式中獲得;通常要求特殊的管理功能,如操作系統(tǒng)支持。異常-1異常——內(nèi)部或外部中斷源產(chǎn)生并引起處理器處理一個(gè)異常
-2異常類型未定義的指令陷井:當(dāng)ARM接受到一條不能處理的指令,ARM把這條指令提供給任何一個(gè)協(xié)處理器執(zhí)行;如果協(xié)處理器可以執(zhí)行這條指令但此時(shí)協(xié)處理器忙,ARM將等待直到協(xié)處理器準(zhǔn)備好或中斷發(fā)生;如果沒有協(xié)處理器處理這條指令,那么ARM將處理未定義的指令陷井。異常優(yōu)先級(jí)(1)Reset(highestpriority);(2)Dataabort;(3)FIQ;(4)IRQ;(5)Prefetchabort;(6)未定義指令,Softwareinterrupt(最低優(yōu)先級(jí))。異常-2異常類型異常
-3只要產(chǎn)生異常就會(huì)導(dǎo)致正常和程序流程被臨時(shí)停止,例如外圍中斷服務(wù)程序。在異常被處理前,當(dāng)前的處理器狀態(tài)必須被保存,以便處理程序完成后,最后的程序可以被恢復(fù)。異常-3只要產(chǎn)生異常就會(huì)導(dǎo)致正常和程序流程被臨時(shí)停止,例異常定義(1)復(fù)位(Reset):當(dāng)處理器復(fù)位引腳有效時(shí),系統(tǒng)產(chǎn)生復(fù)位異常中斷,程序跳轉(zhuǎn)到復(fù)位異常中斷處理程序處執(zhí)行,復(fù)位異常中斷一般在下面三種情況下產(chǎn)生:系統(tǒng)上電、系統(tǒng)復(fù)位、跳轉(zhuǎn)到復(fù)位中斷向量處執(zhí)行,軟復(fù)位。未定義的指令(undefinedinstruction):當(dāng)ARM處理器或者協(xié)處理器認(rèn)為當(dāng)前指令未定義時(shí),產(chǎn)生未定義的指令異常中斷。軟件中斷(softwareinterrupt,SWI):由用戶定義的異常中斷??捎糜谟脩裟J较碌某绦蛘{(diào)用特權(quán)操作指令,在實(shí)時(shí)操作系統(tǒng)中可以通過該機(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用。異常定義(1)復(fù)位(Reset):當(dāng)處理器復(fù)位引腳有效時(shí),系異常定義(2)指令預(yù)取中止(PrefetchAbort):如果處理器預(yù)取的指令的地址不存在,或者該地址不允許當(dāng)前指令訪問,當(dāng)該被預(yù)取的指令執(zhí)行時(shí),處理器產(chǎn)生指令預(yù)取中止異常中斷。數(shù)據(jù)訪問中止(DataAbort):如果數(shù)據(jù)訪問指令的目標(biāo)地址不存在,或者該地址不允許當(dāng)前指令訪問,處理器產(chǎn)生數(shù)據(jù)訪問中止異常中斷。外部中斷請(qǐng)求(IRQ):當(dāng)處理器的外部中斷請(qǐng)求引腳有效,而且CPSR寄存器的I控制位被清除時(shí),處理器產(chǎn)生外部中斷請(qǐng)求(IRQ)異常中斷。系統(tǒng)中各外設(shè)通常通過該異常中斷請(qǐng)求處理器服務(wù)??焖僦袛嗾?qǐng)求(FIQ):當(dāng)處理器的外部中斷請(qǐng)求引腳有效,而且CPSR寄存器的F控制位被清除時(shí),處理器產(chǎn)生外部中斷請(qǐng)求(FIQ)異常中斷。異常定義(2)指令預(yù)取中止(PrefetchAbort):異常向量異常向量VectorTable異常處理當(dāng)異常產(chǎn)生時(shí),ARMcore:復(fù)制CPSR到SPSR_<mode>;設(shè)置適當(dāng)?shù)腃PSR位:改變處理器狀態(tài)進(jìn)入ARM態(tài);改變處理器模式進(jìn)入相應(yīng)的異常模式;設(shè)置中斷禁止位禁止相應(yīng)中斷(如需要);保存返回地址到LR_<mode>;設(shè)置PC為相應(yīng)的異常向量。返回時(shí),異常處理需要:從SPSR_<mode>恢復(fù)CPSR;從LR_<mode>恢復(fù)PC;Note:這些操作只能在ARM態(tài)執(zhí)行。Vectortablecanbeat
0xFFFF0000onARM720T
andonARM9/10familydevicesFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x00VectorTable異常處理當(dāng)異常產(chǎn)生時(shí),ARMco進(jìn)入異常的操作-2R14_<Exception_Mode>=ReturnLinkSPSR_<Exception_Mode>=CPSRCPSR[4:0]=ExceptionModeNumberCPSR[5]=0;當(dāng)運(yùn)行于ARM狀態(tài)時(shí)IF<Exception_Mode>==ResetorFIQthen;當(dāng)響應(yīng)FIQ異常時(shí),禁止新的FIQ異常
CPSR[6]=1;
CPSR[7]=1;PC=ExceptionVectorAddress進(jìn)入異常的操作-2R14_<Exception_Mode>=例子:用戶模式到
FIQ模式*spsr_fiqcpsrr7r4r5r2r1r0r3r6r15(pc)r14_fiqr13_fiqr12_fiqr10_fiqr11_fiqr9_fiqr8_fiqr14(lr)r13(sp)r12r10r11r9r8用戶模式CPSR復(fù)制到
FIQ模式
SPSRcpsrr15(pc)r14(lr)r13(sp)r12r10r11r9r8r7r4r5r2r1r0r3r6r14_fiqr13_fiqr12_fiqr10_fiqr11_fiqr9_fiqr8_fiq返回一個(gè)從用戶模式計(jì)算的地址,PC值存儲(chǔ)在FIQ模式RegistersinuseRegistersinuse異常用戶模式FIQ模式spsr_fiq例子:用戶模式到FIQ模式*spsr_fiqcpsrr7進(jìn)入/退出異常概述進(jìn)入/退出異常概述異常返回地址ARM狀態(tài):在異常產(chǎn)生的時(shí)候內(nèi)核設(shè)置LR_mode=PC–4;處理程序需要調(diào)整LR_mode(取決于是哪一個(gè)異常發(fā)生了),以便返回到正確的地址。Thumb狀態(tài):處理器根據(jù)發(fā)生的異常自動(dòng)修改存在LR_mode中的地址;不論異常產(chǎn)生時(shí)的狀態(tài)如何,處理器確保處理程序的ARM返回指令能返回到正確的地址(和正確的狀態(tài))。異常返回地址ARM狀態(tài):從SWIs和未定義指令返回從SWIs和未定義指令返回從FIQs和IRQs返回從FIQs和IRQs返回從預(yù)取異常返回從預(yù)取異常返回從數(shù)據(jù)異常返回從數(shù)據(jù)異常返回本節(jié)提要1324ARM體系結(jié)構(gòu)概覽ARMJTAG調(diào)試接口ARM編程模型ARM指令集本節(jié)提要1324ARM體系結(jié)構(gòu)概覽ARMJTAG調(diào)試接口AARM指令集Load-store結(jié)構(gòu)*在通用寄存器中操作;load/store---從存儲(chǔ)器中讀某個(gè)值,操作完后再將其放回存儲(chǔ)器中。指令分類數(shù)據(jù)處理指令
–--使用和改變寄存器的值;數(shù)據(jù)傳送指令
–--把存儲(chǔ)器的值復(fù)制到寄存器中
(load)或把寄存器中的值復(fù)制到存儲(chǔ)器中(store)。控制流指令
分支;分支和鏈接,保存返回的地址,以恢復(fù)最先的次序;陷入系統(tǒng)代碼。ARM指令集Load-store結(jié)構(gòu)*指令格式指令格式3地址指令格式,在ARM狀態(tài)中使用2地址指令格式,在ARM和THUMB狀態(tài)下使用指令格式指令格式ARM指令編碼格式說明:Cond指令執(zhí)行的條件編碼Opcode指令操作符編碼s決定指令的操作是否影響CPSR的值Rd操作目標(biāo)寄存器編碼Rn包含第一操作數(shù)的寄存器編碼Shifter_operand表示第二操作數(shù)cond001opcodesRnRdShifter_operand31 2827
2524212019 16151211870ARM指令編碼格式cond001opcodesRnRdShiARM指令集ARM指令集數(shù)據(jù)處理指令
-1數(shù)據(jù)處理指令的類別:算術(shù)操作;按位邏輯操作;寄存器移位操作;比較操作。操作數(shù):32bits寬,有3種指定操作數(shù)的方式:來自寄存器;第二操作數(shù)可以是常數(shù)(立即數(shù));移位寄存器操作數(shù)。結(jié)果:32bits寬,放在寄存器中:長乘法產(chǎn)生64位結(jié)果。數(shù)據(jù)處理指令-1數(shù)據(jù)處理指令的類別:數(shù)據(jù)處理指令
–2*cond00operand2#opcodeSRnRd312827262524212019161512110目的寄存器第一操作寄存器設(shè)置操作碼算術(shù)/邏輯功能8-bit立即數(shù)12511870#rotRm11765430#shiftRm025118765430RsSh010Shimmediatealignmentimmediateshiftlengthshifttypesecondoperandregister移位寄存器長度數(shù)據(jù)處理指令–2*cond00operand2#op數(shù)據(jù)處理指令
-3數(shù)據(jù)處理指令-3數(shù)據(jù)處理指令
-4ADDr0,r1,r2r0:=r1+r2ADCr0,r1,r2r0:=r1+r2+CSUBr0,r1,r2r0:=r1-r2SBCr0,r1,r2r0:=r1-r2+C-1RSBr0,r1,r2r0:=r2–r1RSCr0,r1,r2r0:=r2–r1+C-1算術(shù)操作按位邏輯操作ANDr0,r1,r2r0:=r1andr2ORRr0,r1,r2r0:=r1orr2EORr0,r1,r2r0:=r1xorr2BICr0,r1,r2r0:=r1and(not)r2寄存器移位MOVr0,r2r0:=r2MVNr0,r2r0:=notr2比較操作CMPr1,r2setcconr1-r2CMNr1,r2setcconr1+r2TSTr1,r2setcconr1andr2TEQr1,r2setcconr1xorr2數(shù)據(jù)處理指令-4ADDr0,r1,r2r0:=數(shù)據(jù)處理指令
-5立即數(shù)操作
立即數(shù)操作
=(0->255)x22n,0<=n<=12移位寄存器操作數(shù)第二個(gè)操作數(shù)在與第一個(gè)操作數(shù)合成之前,是服從于移位操作的ADDr3,r2,r1,LSL#3r3:=r2+8xr1ADDr5,r5,r3,LSLr2r5:=r5+2r2xr3ADDr3,r3,#3r3:=r3+3ANDr8,r7,#&ffr8:=r7[7:0],&forhex數(shù)據(jù)處理指令-5立即數(shù)操作
立即數(shù)操作=(0->25數(shù)據(jù)處理指令
-6移位操作在任何數(shù)據(jù)處理指令中,第二個(gè)寄存器操作數(shù)可以有應(yīng)用該操作數(shù)的移位操作。邏輯移位。LSL:邏輯左移字的最小位空位清零。LSR:邏輯右移字的最大位空位清零。數(shù)據(jù)處理指令-6移位操作數(shù)據(jù)處理指令
-7移位操作
(cont’d)算術(shù)移位;ASR:=LSR;ASL:算術(shù)左移;循環(huán)移位:ROR,RRX。數(shù)據(jù)處理指令-7移位操作(cont’d)條件碼標(biāo)志任何數(shù)據(jù)處理指令都可以設(shè)置條件碼
(N,Z,V,andC)適用于除比較操作外的所有數(shù)據(jù)處理指令。特殊的請(qǐng)求必須在匯編語言中實(shí)現(xiàn),這種請(qǐng)求是通過把”S”增加到選擇代碼中指定的。算術(shù)操作設(shè)置所有的標(biāo)志位(N,Z,C,andV)邏輯和移位操作設(shè)置NandZ當(dāng)無移位操作時(shí),保存V和V,或根據(jù)移位操作設(shè)置。ADDSr2,r2,r0;carryouttoC條件碼標(biāo)志任何數(shù)據(jù)處理指令都可以設(shè)置條件碼(N,Z,V乘法指令集在寄存器產(chǎn)生32位值乘法指令集乘法例子
(乘法,乘法累加器)注意最低
32-bits置于結(jié)果寄存器中,其余被忽略;
不支持第二立即操作數(shù);結(jié)果寄存器與源寄存器必須不同;
if`S`bitissettheVispreservedand
theCisrenderedmeaningless。MULr4,r3,r2r4:=[r3xr2]<31:0>MLAr4,r3,r2,r1r4:=[r3xr2+r1]<31:0>乘法例子(乘法,乘法累加器)MULr4,r3,r2數(shù)據(jù)傳送指令
-1單指令傳送
(LDR,STR)單字(32bit),半字(6bit)以及字節(jié)(8bit)傳送;尋址寄存器偏移地址
=基址
寄存器偏移;立即數(shù)偏移地址=基址
立即數(shù)常數(shù);后變址Post-indexing:modifyaddressafteruse;前變址Pre-indexing:modifyaddressbeforeuse;回寫如果可能,更新基址寄存器。數(shù)據(jù)傳送指令-1單指令傳送(LDR,STR)數(shù)據(jù)傳送指令
-2多數(shù)據(jù)傳送指令
(LDM,STM)load(LDM)或store(STM)當(dāng)前可訪問寄存器的任意子集;
使用堆棧:maintainingfulloremptystackswhichcangrowupordownmemory;上下文切換:保存或重新存儲(chǔ)工作寄存器;塊拷貝:在主存儲(chǔ)器中移動(dòng)大數(shù)據(jù)塊;尋址Pre/Postindexing;Autoincrementordecrement;回寫到基址寄存器Writebackthebaseregister。數(shù)據(jù)傳送指令-2多數(shù)據(jù)傳送指令(LDM,STM)數(shù)據(jù)傳送指令
-3單數(shù)據(jù)交換
(SWAP)在寄存器和外部存儲(chǔ)器之間交換字節(jié)或字;讀存儲(chǔ)器和寫存儲(chǔ)器是放在一起的;原子指令;執(zhí)行時(shí)不能中斷;當(dāng)‘LOCK’信號(hào)輸出操作時(shí),外部存儲(chǔ)器管理單元被鎖定,當(dāng)多線程操作時(shí)使程序同步(OS支持);鎖定;信號(hào)量。數(shù)據(jù)傳送指令-3單數(shù)據(jù)交換(SWAP)數(shù)據(jù)傳送指令-4LDRr0,[r1]r0:=mem32[r1]STRr0,[r1]mem32[r1]:=r0Note:r1keepsawordaddress(2LSBsare0)LDRr0,[r1,#4]r0:=mem32[r1+4]寄存器間接尋址基址+偏移量尋址
(offsetofupto4Kbytes)LDRr0,[r1,#4]!r0:=mem32[r1+4]
r1:=r1+4自動(dòng)變址尋址LDRr0,[r1],#4r0:=mem32[r1]
r1:=r1+4后變址尋址LDRBr0,[r1]r0:=mem8[r1]Note:norestrictionsforr1單寄存器
loadandstore數(shù)據(jù)傳送指令-4LDRr0,[r1]r0:=me數(shù)據(jù)傳送指令
-5COPY: ADRr1,TABLE1 ;r1pointstoTABLE1 ADRr2,TABLE2 ;r2pointstoTABLE2LOOP: LDRr0,[r1] STRr0,[r2] ADDr1,r1,#4 ADDr2,r2,#4 ...TABLE1: ...TABLE2:...COPY: ADRr1,TABLE1 ;r1pointstoTABLE1 ADRr2,TABLE2 ;r2pointstoTABLE2LOOP: LDRr0,[r1],#4 STRr0,[r2],#4 ...TABLE1: ...TABLE2:...數(shù)據(jù)傳送指令-5COPY: ADRr1,TABLE1數(shù)據(jù)傳送指令-6塊拷貝數(shù)據(jù)被存儲(chǔ)在基本寄存器的上面地址或下面地址
地址增加或減少是在存儲(chǔ)第一個(gè)值之前或之后開始的LDMIAr1,{r0,r2,r5}r0:=mem32[r1]
r2:=mem32[r1+4]
r5:=mem32[r1+8]Note:寄存器的部分或全部都可以用單指令傳送Note:在表中的寄存器順序并不重要Note:在表中包括r15i將造成控制流的改變多寄存器數(shù)據(jù)傳送
[IncrementAfter]數(shù)據(jù)傳送指令-6塊拷貝LDMIAr1,{r0,r2多寄存器傳送尋址模式r5r1r9’r0r9STMIAr9!,{r0,r1,r5}100016100c16101816r1r5r9STMDAr9!,{r0,r1,r5}r0r9’100016100c16101816r5r9STMDBr9!,{r0,r1,r5}r1r0r9’100016100c16101816r5r1r0r9’r9STMIBr9!,{r0,r1,r5}100016100c16101816多寄存器傳送尋址模式r5r1r9’r0r9STMIAr9!條件執(zhí)行所有的ARM指令都可以條件執(zhí)行指令的執(zhí)行與否取決于CPSR寄存器的N,Z,CandV標(biāo)志位所有的Thumb指令都可以解壓成全部條件指令ConditionFieldininstruction0000=EQ-Zset(equal)0001=NE-Zclear(notequal)0010=CS-Cset(unsignedhigherorsame)0011=CC-Cclear(unsignedlower)0100=MI-Nset(negative)0101=PL-Nclear(positiveorzero)0110=VS-Vset(overflow)0111=VC-Vclear(nooverflow)1000=HI-CsetandZclear(unsignedhigher)1001=LS-CclearorZset(unsignedlowerorsame)1010=GE-NsetandVset,orNclearandVclear(greaterorequal)1011=LT-NsetandVclear,orNclearandVset(lessthan)1100=GT-Zclear,andeitherNsetandVset,orNclearandVclear(greaterthan)1101=LE-Zset,orNsetandVclear,orNclearandVset(lessthanorequal)1110=AL-always1111=NV-never條件執(zhí)行所有的ARM指令都可以條件執(zhí)行控制流指令控制流指令條件執(zhí)行條件執(zhí)行避免使用分支指令Example
CMPr0,#5 ; BEQBYPASS ;if(r0!=5){ ADDr1,r1,r0 ;r1:=r1+r0-r2 SUBr1,r1,r2 ;}BYPASS: ...
CMPr0,#5 ; ADDNEr1,r1,r0 ; SUBNEr1,r1,r2 ; ...使用條件執(zhí)行Note:add2–letterconditionafterthe3-letteropcode;if((a==b)&&(c==d))e++;CMPr0,r1CMPEQr2,r3ADDEQr4,r4,#1條件執(zhí)行條件執(zhí)行避免使用分支指令 CMPr0,#5 ;控制和分支指令控制指令分支和分支連接跳到希望的指令中;保存當(dāng)前的PC并返回(with‘L’bit)。分支和交換跳到期望的指令中與指令集交換Rm[0]==1:Subsequentinst.areTHUMB;Rm[0]==0:Subsequentinst.areARM.condRm0001001011111111111100312827654301L控制和分支指令控制指令condRm0001001PSR指令程序狀態(tài)寄存器訪問指令(MRS,MSR)MRS程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令;MSR通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令。PSR指令程序狀態(tài)寄存器訪問指令(MRS,MSR)ARM系統(tǒng)初始化過程簡介包括:中斷向量表;初始化存儲(chǔ)器系統(tǒng);初始化堆棧;初始化有特殊要求的端口、設(shè)備;初始化應(yīng)用程序執(zhí)行環(huán)境;改變處理器模式;CALL主應(yīng)用程序。ARM系統(tǒng)初始化過程簡介包括:1.中斷向量表FIQ0x1C外部快速中斷IRQ0x18一般外部中斷(Reserved)0x14保留DataAbort0x10數(shù)據(jù)異常FrefetchAbort0x0C預(yù)取指異常Softwareint0x08軟件中斷Undef0x04未定義指令中斷Reset0x00復(fù)位中斷1.中斷向量表FIQ0x1C外部快速中斷IRQ0x18一般中斷向量表的程序AREABoot,CODE,READONLYENTRYBReset_handlerBUndef_HandlerBSWI_HandlerBPreAbort_HandlerB.;forreservedinterrupt,stophereBIRQ_handlerBFIQ_handler中斷向量表的程序AREABoot,CODE,READONL2.初始化存儲(chǔ)器系統(tǒng)存儲(chǔ)器的類型和時(shí)序配置。存儲(chǔ)器的地址分布。2.初始化存儲(chǔ)器系統(tǒng)存儲(chǔ)器的類型和時(shí)序配置。ROM地址的重映射(remap)0x0200(bootcode)0x0100(Reset_handler)……BReset_Handler0x0000Flash(remap)0x0204(bootcode)0x0200(Reset_handler)BReset_Handler0x0000RAMROM地址的重映射(remap)0x0200(bootco3.初始化堆棧ARM有7種執(zhí)行狀態(tài),每一種狀態(tài)堆棧指針寄存器(SP)都是獨(dú)立的。對(duì)每一種模式都要定義SP寄存器的堆棧地址。3.初始化堆棧ARM有7種執(zhí)行狀態(tài),每一種狀態(tài)堆棧指針寄存4.初始化有特殊要求的端口、設(shè)備如驅(qū)動(dòng)指示系統(tǒng)運(yùn)行狀態(tài)的一些簡單的輸出設(shè)備,如LED,蜂鳴器等。一般外設(shè)初始化可以在系統(tǒng)初始化之后進(jìn)行。4.初始化有特殊要求的端口、設(shè)備如驅(qū)動(dòng)指示系統(tǒng)運(yùn)行狀態(tài)的一5.初始化應(yīng)用程序執(zhí)行環(huán)境完成必要的從ROM到RAM的數(shù)據(jù)傳輸。5.初始化應(yīng)用程序執(zhí)行環(huán)境完成必要的從ROM到RAM的數(shù)據(jù)6.改變處理器模式管理員模式多種特權(quán)模式用戶運(yùn)行模式復(fù)位后默認(rèn)模式堆棧初始化
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 23595.1-2025LED用稀土熒光粉試驗(yàn)方法第1部分:光譜的測定
- 包裝回收合同范例
- 北京合伙合同范本培訓(xùn)
- 中介代辦合同范例
- 個(gè)人汽車置換合同范本
- 辦公住宿出租合同范本
- 出租鋪面合同范本
- 三方合伙范本合同范本
- 履約反擔(dān)保合同范本
- 單位職工租房合同范例
- 高中校長在2025春季開學(xué)典禮上的講話
- 2025年六年級(jí)數(shù)學(xué)下冊(cè)春季開學(xué)第一課(人教版) 2024-2025學(xué)年 典型例題系列(2025版)六年級(jí)數(shù)學(xué)下冊(cè)(人教版) 課件
- 2025年浙江省臺(tái)州機(jī)場管理有限公司招聘筆試參考題庫含答案解析
- 高教版2023年中職教科書《語文》(基礎(chǔ)模塊)上冊(cè)教案全冊(cè)
- 存款代持協(xié)議書范文模板
- 2023年部編人教版三年級(jí)《道德與法治》下冊(cè)全冊(cè)課件【全套】
- 基礎(chǔ)模塊下冊(cè)《中國人民站起來了》2
- 光伏項(xiàng)目施工總進(jìn)度計(jì)劃表(含三級(jí))
- DB32-T 4757-2024 連棟塑料薄膜溫室建造技術(shù)規(guī)范
- 2024年云上貴州大數(shù)據(jù)(集團(tuán))有限公司招聘筆試沖刺題(帶答案解析)
- 部編版小學(xué)語文四年級(jí)下冊(cè)教師教學(xué)用書(教學(xué)參考)完整版
評(píng)論
0/150
提交評(píng)論