ARM微處理器的編程模型(二)_第1頁(yè)
ARM微處理器的編程模型(二)_第2頁(yè)
ARM微處理器的編程模型(二)_第3頁(yè)
ARM微處理器的編程模型(二)_第4頁(yè)
ARM微處理器的編程模型(二)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1第五講ARM微處理器的編程模型(二)

2023/2/42023/2/42主要內(nèi)容3.1引言3.2嵌入式處理器的特點(diǎn)3.3嵌入式處理器的分類(lèi)3.4嵌入式處理器的發(fā)展趨勢(shì)3.5嵌入式處理器的選擇原則3.6ARM微處理器概述3.7ARM微處理器的編程模型3.8ARM微處理器的指令系統(tǒng)實(shí)驗(yàn)時(shí)間(實(shí)驗(yàn)樓0912)28號(hào)補(bǔ)6號(hào)的課(4班下午實(shí)驗(yàn))(第4周周日)9號(hào)(2班下午1:00實(shí)驗(yàn))(第5周周四)10號(hào)(3班下午1:00實(shí)驗(yàn))(第5周周五)11號(hào)補(bǔ)7號(hào)的課(1班下午1:00實(shí)驗(yàn))(第5周周六)2023/2/432023/2/443.7ARM微處理器的編程模型3.7.1ARM微處理器的工作模式3.7.2ARM微處理器的工作狀態(tài)3.7.3ARM體系結(jié)構(gòu)的寄存器組織3.7.4ARM微處理器的數(shù)據(jù)類(lèi)型3.7.5ARM微處理器的異常狀態(tài)2023/2/453.7.4ARM微處理器的數(shù)據(jù)類(lèi)型字、半字、字節(jié)字(Word):字的長(zhǎng)度為32位半字(Half-Word):半字的長(zhǎng)度為16位字節(jié)(Byte):字節(jié)的長(zhǎng)度為8位ARM微處理器要求自然對(duì)界字需要4字節(jié)對(duì)齊地址的低兩位為0半字需要2字節(jié)對(duì)齊地址的最低位為0字節(jié)則是任意地址對(duì)齊

2023/2/463.7.4ARM微處理器的數(shù)據(jù)類(lèi)型(續(xù))邊界對(duì)齊(數(shù)據(jù)存儲(chǔ))如果一個(gè)數(shù)據(jù)是從偶地址開(kāi)始的連續(xù)存儲(chǔ),那么它就是半字對(duì)齊如果一個(gè)數(shù)據(jù)是以能被4整除的地址開(kāi)始的連續(xù)存儲(chǔ),那么它就是字對(duì)齊方式半字對(duì)齊字對(duì)齊地址0x000000000x000000020x00000004……0x000000000x000000040x00000008……特征Bit0=0Bit1=0,Bit0=02023/2/473.7.4ARM微處理器的數(shù)據(jù)類(lèi)型(續(xù))ARM體系結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu)(編址以字節(jié)為單位)從零字節(jié)到三字節(jié)放置第一個(gè)存儲(chǔ)的字?jǐn)?shù)據(jù),從第四個(gè)字節(jié)到第七個(gè)字節(jié)放置第二個(gè)存儲(chǔ)的字?jǐn)?shù)據(jù),依次排列。那么,字內(nèi)數(shù)據(jù)如何存儲(chǔ)?作為32位的微處理器,ARM體系結(jié)構(gòu)所支持的最大尋址空間為4GB(232字節(jié))受到物理地址線(xiàn)的限制,一般實(shí)際嵌入式處理器最大尋址空間為幾百兆2023/2/483.7.4ARM微處理器的數(shù)據(jù)類(lèi)型(續(xù))ARM體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù)大端格式(Bigendian)(8051)字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中字?jǐn)?shù)據(jù)的低字節(jié)存放在高地址中小端格式(Littleendian)(X86)與大端存儲(chǔ)格式相反低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié)高地址中存放的是字?jǐn)?shù)據(jù)的高字節(jié)2023/2/49大端格式(Bigendian)2023/2/410小端格式(Littleendian)2023/2/411舉例1程序LDRR0,

=0x11223344LDRR1,=0x00000100STRR0,[R1]LDRBR2,[R1]R2=?答案小端模式:R2=0x44大端模式:R2=0x11LDR偽指令,使用以下項(xiàng)之一加載寄存器:一個(gè)32位常數(shù)值一個(gè)地址LDR偽指令的形式:LDR

Rn,=expr;=而非#2023/2/412舉例2structx{

chara;

intb;

charc;

shortd;};問(wèn):在缺?。ㄗ匀粚?duì)界)情況下,上述結(jié)構(gòu)需要多少存儲(chǔ)空間(小端格式)?12個(gè)字節(jié)強(qiáng)制對(duì)界編譯控制:匯編align(1/2/4/8)unalignC語(yǔ)言#pragmapack(1/2/4/8)2023/2/4133.7.5ARM微處理器的異常狀態(tài)當(dāng)正常的程序執(zhí)行流程發(fā)生暫時(shí)的停止時(shí),稱(chēng)之為異常(Exception)例如處理一個(gè)外部的中斷請(qǐng)求在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成之后,當(dāng)前程序可以繼續(xù)執(zhí)行處理器允許多個(gè)異常同時(shí)發(fā)生,它們將會(huì)按固定的優(yōu)先級(jí)進(jìn)行處理中斷優(yōu)先級(jí)中斷嵌套(可能導(dǎo)致堆棧溢出)2023/2/414異常類(lèi)型具體含義復(fù)位當(dāng)處理器的復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行未定義指令當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常。可使用該異常機(jī)制進(jìn)行軟件仿真軟件中斷該異常由執(zhí)行SWI指令產(chǎn)生,可用于用戶(hù)模式下的程序調(diào)用特權(quán)操作指令??墒褂迷摦惓C(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用指令預(yù)取中止若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪(fǎng)問(wèn),存儲(chǔ)器會(huì)向處理器發(fā)出中止信號(hào),但當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會(huì)產(chǎn)生指令預(yù)取中止異常數(shù)據(jù)中止若處理器數(shù)據(jù)訪(fǎng)問(wèn)的地址不存在,或該地址不允許當(dāng)前指令訪(fǎng)問(wèn)時(shí),產(chǎn)生數(shù)據(jù)中止異常IRQ(外部中斷請(qǐng)求)當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過(guò)該異常請(qǐng)求中斷服務(wù)FIQ(快速中斷請(qǐng)求)當(dāng)處理器的快速中斷請(qǐng)求引腳有效,且CPSR中的F位為0時(shí),產(chǎn)生FIQ異常2023/2/4153.7.5ARM微處理器的異常狀態(tài)(續(xù))1對(duì)異常的響應(yīng)2從異常返回3各類(lèi)異常的具體描述4異常向量5異常優(yōu)先級(jí)(CPU內(nèi)部)6應(yīng)用程序中的異常處理2023/2/4161對(duì)異常的響應(yīng)當(dāng)出現(xiàn)異常后,ARM處理器會(huì)執(zhí)行以下操作1將CPSR復(fù)制到相應(yīng)的SPSR中2對(duì)CPSR進(jìn)行設(shè)置根據(jù)異常類(lèi)型,強(qiáng)制設(shè)置CPSR的工作模式位設(shè)置中斷禁止位,以禁止中斷發(fā)生如果處理器處于Thumb狀態(tài),則切換到ARM狀態(tài)3將下一條指令的地址存入相應(yīng)鏈接寄存器LRLR中保存的是下一條要取指令的地址(一般情況下,當(dāng)前執(zhí)行指令地址+4)4強(qiáng)制PC從相關(guān)的異常向量地址取一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處LDRPC,IRQ_Address2023/2/4171對(duì)異常的響應(yīng)(續(xù))ARM處理器對(duì)異常的響應(yīng)過(guò)程用偽碼描述為SPSR_<Exception_Mode>=CPSRCPSR[4:0]=ExceptionModeNumberCPSR[5]=0 ;切換到ARM工作狀態(tài)If<Exception_Mode>==ResetorFIQthen

CPSR[6]=1 ;禁止新的FIQ異常

CPSR[7]=1 ;禁止新的IRQ異常R14_<Exception_Mode>=ReturnLinkPC=ExceptionVectorAddress

CPU自動(dòng)完成2023/2/418程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組程序在系統(tǒng)模式下運(yùn)行用戶(hù)程序,假定當(dāng)前處理器狀態(tài)為T(mén)humb狀態(tài)、允許IRQ中斷用戶(hù)程序運(yùn)行時(shí)發(fā)生IRQ中斷,硬件完成以下動(dòng)作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中斷)清零T位(進(jìn)入ARM狀態(tài))設(shè)置MOD位,切換處理器模式至IRQ模式將下一條指令的地址存入IRQ模式的LR寄存器將CPSR寄存器內(nèi)容存入IRQ模式的SPSR寄存器將跳轉(zhuǎn)地址存入PC,實(shí)現(xiàn)跳轉(zhuǎn)IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示對(duì)該位不關(guān)心2023/2/4192從異常返回異常處理完畢之后,ARM微處理器會(huì)執(zhí)行以下幾步操作從異常返回1、將SPSR復(fù)制回CPSR中2、將鏈接寄存器LR的值送到PC中注意復(fù)位異常處理程序不需要返回編程(指令)完成2023/2/420在異常處理結(jié)束后,異常處理程序完成以下動(dòng)作:程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV將SPSR寄存器的值復(fù)制回CPSR寄存器;將LR寄存的值減去一個(gè)常量后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶(hù)程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?”表示對(duì)該位不關(guān)心2023/2/4213各類(lèi)異常的具體描述復(fù)位的響應(yīng)過(guò)程SPSR_svc=CPSR(無(wú)意義)CPSR[4:0]=0b10011;管理模式CPSR[5]=0 ;切換到ARM工作狀態(tài)CPSR[6]=1 ;禁止新的FIQ異常

CPSR[7]=1 ;禁止新的IRQ異常R14_svc=ReturnLink(無(wú)意義)PC=0x00000000

LDRPC,HandleReset2023/2/4223各類(lèi)異常的具體描述(續(xù))UndefinedInstruction(未定義指令)當(dāng)ARM處理器遇到不能處理的指令時(shí),會(huì)產(chǎn)生未定義指令異常采用這種機(jī)制,可以通過(guò)軟件仿真擴(kuò)展ARM或Thumb指令集(程序跑飛)在未定義指令處理程序中執(zhí)行以下指令返回MOVSPC,R14_und恢復(fù)PC(從R14_und)和CPSR(從SPSR_und)的值,并返回到未定義指令后的下一條指令指令加后綴“S”且目的寄存器為PC,則自動(dòng)復(fù)制。

2023/2/4233各類(lèi)異常的具體描述(續(xù))未定義指令異常的響應(yīng)過(guò)程SPSR_und=CPSRCPSR[4:0]=0b11011CPSR[5]=0 ;切換到ARM工作狀態(tài)//

CPSR[6]保持不變

CPSR[7]=1 ;禁止新的IRQ異常R14_und=ReturnLinkPC=0x00000004LDRPC,Undef_Address2023/2/4243各類(lèi)異常的具體描述(續(xù))SoftwareInterrupt(軟件中斷)軟件中斷指令(SWI)用于進(jìn)入管理模式,常用于請(qǐng)求執(zhí)行特定的管理功能使用SWI來(lái)為編程者提供各種例程在軟件中斷處理程序中執(zhí)行以下指令返回MOVS

PC,R14_svc恢復(fù)PC(從R14_svc)和CPSR(從SPSR_svc)的值,并返回到SWI的下一條指令2023/2/4253各類(lèi)異常的具體描述(續(xù))SWI的響應(yīng)過(guò)程SPSR_svc=CPSRCPSR[4:0]=0b10011CPSR[5]=0 ;切換到ARM工作狀態(tài)//

CPSR[6]保持不變

CPSR[7]=1 ;禁止新的IRQ異常R14_svc=ReturnLinkPC=0x00000008

LDRPC,SWI_Address2023/2/4263各類(lèi)異常的具體描述(續(xù))ABORT(中止)產(chǎn)生中止異常意味著對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)失敗中止異常包括兩種類(lèi)型:指令預(yù)取中止:發(fā)生在指令預(yù)取時(shí)數(shù)據(jù)中止:發(fā)生在數(shù)據(jù)訪(fǎng)問(wèn)時(shí)當(dāng)確定中止原因后,Abort處理程序執(zhí)行以下指令返回SUBSPC,R14_abt,#4 ;指令預(yù)取中止SUBSPC,R14_abt,#8 ;數(shù)據(jù)中止恢復(fù)PC(從R14_abt)和CPSR(從SPSR_abt)的值,并重新執(zhí)行產(chǎn)生中止的指令(返回當(dāng)前指令)2023/2/4273各類(lèi)異常的具體描述(續(xù))中止異常的響應(yīng)過(guò)程SPSR_abt=CPSRCPSR[4:0]=0b10111CPSR[5]=0 ;切換到ARM工作狀態(tài)//

CPSR[6]保持不變

CPSR[7]=1 ;禁止新的IRQ異常R14_abt=ReturnLinkPC=0x0000000c/0x00000010

LDRPC,PAbt_Address

LDRPC,DAbt_Address2023/2/4283各類(lèi)異常的具體描述(續(xù))IRQ(InterruptRequest)IRQ異常屬于正常的中斷請(qǐng)求,IRQ優(yōu)先級(jí)低于FIQ若CPSR的I位置1,則禁止IRQ中斷,若CPSR的I位清零,處理器會(huì)在指令執(zhí)行完之前檢查IRQ的輸入注意只有在特權(quán)模式下才能改變I位的狀態(tài)IRQ處理程序執(zhí)行以下指令返回SUBSPC,R14_irq,#4該指令將寄存器R14_irq的值減去4后,復(fù)制到程序計(jì)數(shù)器PC中,同時(shí)將SPSR_irq寄存器的內(nèi)容復(fù)制到CPSR中,并返回到引起中斷的下一條指令2023/2/4293各類(lèi)異常的具體描述(續(xù))IRQ的響應(yīng)過(guò)程SPSR_irq=CPSRCPSR[4:0]=0b10010CPSR[5]=0 ;切換到ARM工作狀態(tài)//

CPSR[6]保持不變

CPSR[7]=1 ;禁止新的IRQ異常R14_irq=ReturnLinkPC=0x00000018LDRPC,IRQ_Address2023/2/4303各類(lèi)異常的具體描述FIQ(FastInterruptRequest)FIQ異常是為了支持?jǐn)?shù)據(jù)傳輸或者通道處理而設(shè)計(jì)的若將CPSR的F位置1,則禁止FIQ中斷,若將CPSR的F位清零,處理器會(huì)在指令執(zhí)行時(shí)檢查FIQ的輸入注意只有在特權(quán)模式下才能改變F位的狀態(tài)FIQ處理程序執(zhí)行以下指令返回SUBSPC,R14_fiq,#4該指令將寄存器R14_fiq的值減去4后,復(fù)制到程序計(jì)數(shù)器PC中,同時(shí)將SPSR_fiq寄存器的內(nèi)容復(fù)制到CPSR中,并返回到引起中斷的下一條指令2023/2/4313各類(lèi)異常的具體描述(續(xù))FIQ的響應(yīng)過(guò)程SPSR_fiq=CPSRCPSR[4:0]=0b10001CPSR[5]=0 ;切換到ARM工作狀態(tài)CPSR[6]=1 ;禁止新的FIQ異常

CPSR[7]=1 ;禁止新的IRQ異常R14_fiq=ReturnLinkPC=0x0000001cLDRPC,FIQ_Address2023/2/4323各類(lèi)異常的具體描述(續(xù))返回指令R14_x先前的值BLMOVPC,R14下一條指令地址未定義指令MOVSPC,R14_und下一條指令地址SWIMOVSPC,R14_svc下一條指令地址指令預(yù)取SUBSPC,R14_abt,#4下一條指令地址數(shù)據(jù)預(yù)取SUBSPC,R14_abt,#8下一條指令地址+4IRQSUBSPC,R14_irq,#4下一條指令地址+4FIQSUBSPC,R14_fiq,#4下一條指令地址+4復(fù)位N/A-2023/2/4334異常向量(ExceptionVectors)地址異常進(jìn)入模式0x0000,0000復(fù)位管理模式0x0000,0004未定義指令未定義模式0x0000,0008軟件中斷管理模式0x0000,000C中止(預(yù)取指令)中止模式0x0000,0010中止(數(shù)據(jù))中止模式0x0000,0014保留保留0x0000,0018IRQIRQ0x0000,001CFIQFIQ2023/2/4344異常向量(續(xù));ExceptionVectors;MappedtoAddress0.VectorsLDRPC,Reset_Address

LDRPC,Undef_Address

LDRPC,SWI_Address

LDRPC,PAbt_Address

LDRPC,DAbt_Address

NOP

;ReservedVector

LDRPC,IRQ_Address

LDRPC,FIQ_Address2023/2/4355異常優(yōu)先級(jí)(ExceptionPriorities)優(yōu)先級(jí)異常1(最高)復(fù)位2數(shù)據(jù)中止3FIQ4IRQ5預(yù)取指令中止6(最低)未定義指令、SWI2023/2/4366應(yīng)用程序中的異常處理應(yīng)用程序首先要進(jìn)行異常處理當(dāng)系統(tǒng)運(yùn)行時(shí),異??赡軙?huì)隨時(shí)發(fā)生,因此要保證在發(fā)生異常時(shí)ARM處理器不至于處于未知狀態(tài)采用的方式是在異常向量表中的特定位置放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到異常處理程序異常處理過(guò)程當(dāng)發(fā)生異常時(shí),程序計(jì)數(shù)器PC會(huì)被強(qiáng)制(自動(dòng))設(shè)置為對(duì)應(yīng)的異常向量,從而(自動(dòng))跳轉(zhuǎn)到異常處理程序,當(dāng)異常處理完成以后,返回到主程序繼續(xù)執(zhí)行2023/2/437/***********************************************程序段說(shuō)明:以下函數(shù)為各異常模式服務(wù)子程序。設(shè)成死循環(huán)是為調(diào)試用,一旦發(fā)生此類(lèi)異常,程序便跳入異常模式服務(wù)子程序,終止程序運(yùn)行。*************************************************/voidHaltUndef(void) //未定義——程序跑飛{Uart_Printf(0,"theprogrammishaltUndefed");

while(1);}voidHaltSwi(void

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論