ARM七種運(yùn)行模式_第1頁
ARM七種運(yùn)行模式_第2頁
ARM七種運(yùn)行模式_第3頁
ARM七種運(yùn)行模式_第4頁
ARM七種運(yùn)行模式_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、s3c2440中斷體系構(gòu)造:如何用中斷?1 .中斷發(fā)生:保存別人的狀態(tài)如何中斷可以事先設(shè)置,對程序初始化,使能中斷。中斷發(fā)生后,進(jìn)入中斷模式2 .中斷處理分辨中斷源進(jìn)展不同的處理清理工作3 .恢復(fù)別人的狀態(tài)過程:外界信號上升沿、下降沿,高電平、低電平都可以設(shè)置成信號引腳設(shè)置,再進(jìn)入狀態(tài)存放器。狀態(tài)存放器連接屏蔽存放器進(jìn)入第二個狀態(tài)存放器,儲存各種中斷,可以儲存多個中斷進(jìn)入優(yōu)先級存放器,判斷中斷運(yùn)行順序再進(jìn)入屏蔽使能存放器和模式存放器進(jìn)入優(yōu)先級存放器進(jìn)入 cpu 處理cpu 的處理:進(jìn)入入口地址b handleIRQ計算返回地址,被中斷處地址保存現(xiàn)場,即各存放器狀態(tài)調(diào)用處理函數(shù)函數(shù)運(yùn)行完后恢復(fù)現(xiàn)

2、場函數(shù)的處理:分辨終端處理中斷去除數(shù)據(jù),即去除中斷1.中斷存放器arm 的七種模式1 .usr 用戶模式r0-r152 .fiq 快中斷模式r0-r7專用存放器r8-r15,3 .svc 管理模式專用存放器r13-r14,4 .abt 數(shù)據(jù)訪問終止模式5 .sys 系統(tǒng)模式6.und 未定義指令終止模式7.irq 中斷模式幾種模式的區(qū)別:.word.zl.嵌入式的中斷:a不同的存放器b.不同的權(quán)限c觸發(fā)條件不一樣何時使用幾種模式:usr 用戶模式: arm 處理器正常的程序執(zhí)行狀態(tài)fiq 快中斷模式:高速數(shù)據(jù)傳輸和通道處理svc 管理模式:操作系統(tǒng)使用的保護(hù)模式abt 數(shù)據(jù)訪問終止模式:數(shù)據(jù)或

3、者指令終止時進(jìn)入,用于虛擬存儲或者存儲保護(hù)sys 系統(tǒng)模式:運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)und 未定義指令終止模式:未定義的指令執(zhí)行時進(jìn)入該模式,用于支持硬件處理器的軟件仿真.irq 中斷模式:用于通用的中斷處理后六種是特權(quán)模式,用于處理中斷、異常和特殊權(quán)限處理用戶模式是最常見的模式2.中斷中的異常中斷是一種異常。當(dāng)發(fā)生中斷時,cpu 進(jìn)入中斷模式cpu 進(jìn)入異常入口,異常入口是硬件規(guī)定的一個地址運(yùn)行模式ARM920T 支持 7 種運(yùn)行模式: 用戶 usr :正常 ARM 程序執(zhí)行狀態(tài) 快中斷fiq :為支持?jǐn)?shù)據(jù)傳輸或通道處理設(shè)計 中斷irq :用于一般用途的中斷處理 管理svc :操作系統(tǒng)保護(hù)

4、模式 中止abt : 數(shù)據(jù)或指令預(yù)取中止后進(jìn)入 系統(tǒng)sys :操作系統(tǒng)的特權(quán)用戶模式 未定義und:執(zhí)行了一個未定義指令時進(jìn)入模式的改變可由軟件控制,或者由外部中斷或進(jìn)入異常引起。大局部應(yīng)用程序都將在用戶模式執(zhí)行。被稱為特權(quán)模式的非用戶模式,都將進(jìn)入到中斷效勞或異常中去,或者訪問受保護(hù)的資源。部存放器ARM920T 總共有 37 個存放器,其中 31 通用 32 位存放器和6 個狀態(tài)存放器,但不能在同一時刻對所有的存放器可見。處理器狀態(tài)和運(yùn)行模式?jīng)Q定了哪些存放器對程序員可見。ARM 狀態(tài)時部存放器集在ARM 狀態(tài), 16 個通用存放器和一個狀態(tài)存放器在任意時刻都可見。在特權(quán)非用戶模式下,將切換

5、到指定模式的分組banked存放器。圖 2-3顯示了哪些存放器在各模式下是可見的:.word.zl.分組存放器被標(biāo)記了陰影三角形。ARM狀態(tài)時存放器被設(shè)為包含16個直接可以訪問的存放器:R0到R15。除了 R15,其他全部存放器都為通用存放器,如可能用于保存數(shù)據(jù)或地址值。除此之外,還有第17個存放器用于存儲狀態(tài)信息。此寄存器被用作干酮的犍接專存器.當(dāng)執(zhí)行克#嗨接(0L)指令時該寄存器接收R15的箭份.其余時司也可作為通用寄存器處理.相對施的分組寄存器Rl4_svc , RU_irq . Rl4_fiq , Rl4_ab| 和R14_und也鬢成用于中斷或異常發(fā)生時R15的返回倡,或者在中斷或異

6、常例程中執(zhí)行了分支和 短接中斷. 此寄存器存放程彝f®圄PG )1在ARM狀態(tài)印5的圓1;0都為Q屈明。的PC鼠在Thumb 狀態(tài),只有因0為0.位團(tuán)1 為PC值.哥審its I 1CT存制名CPSR(當(dāng)前程麗欣寄寺用1它包含條件碼際志位和當(dāng)前模式位.FIQ模式包含7個分組存放器,分別映射到R8-14R8_fiq-R14_fiq。在ARM狀態(tài),有很多不需要保存存放器的FIQ處理程序。用戶,IRQ,管理中止和未定義模式都包含兩個分組存放器映射到R13和R14,允許這些模式都都包含私有堆棧指針和存放器。ARM狀態(tài)時的通用寄存器和程序計數(shù)器系統(tǒng)和用戶快中斷管理中止中斷未定義r ro fcO

7、r ro RORORORlRlRlRlRlRlr R2 1R2r R2 nR2r rsR2RaRSR3R3R3R3R4R4R4R4R4R4R5fcSRSR5RSRSR6R6R6R6R6R6 1R7R7R7R7R7R7RS、RUqR8R8R8R8R9、風(fēng)fiqR9R9R9R9RIO _RLOiqRIORIOP RIORICRllXRLLfiqr KuRllfillrii nR12R12R12R12R12R13"R13_SVCR13_abt工 Ri,gXRlS.undR14、RL£fiqR14_svcR14_abtrXR14_irqXR14_undR15 儼 0RLS(PC)R

8、15(PC)R15(PC)R151PC)R15P。ARM狀態(tài)時的程序狀益昭據(jù)| CPSR |CPSRCP5R gpsrCPSRCPSRCPSR、SP 浪 fiqsPSR_abt、5FSRUqsPSR_und.word.zl.Ds二分組寄存器Thumb 狀態(tài)時部 存放器集Thumb狀態(tài)時的存放器集為 ARM狀態(tài)時的存放器的分配的一個子集。程序員能夠直接訪問8個通用存放器R0至R7,還有程序計數(shù)器PC,一個堆棧指針存放器SP,一個存放器LR和CPSR各自特權(quán)模式還分別有分組堆棧指針,存放器和進(jìn)程保存狀態(tài)存放器 (SPSR)如圖2-4所示。ARM狀態(tài)Thumb狀態(tài)R0IkR0RIR1R2R2R3R3

9、R4R4RSR5WR6R6R7R7R8r一R9R10RUR12堆棧指針(SP )堆柱指針(R13);菇接富存器1 lr )辯接寄存器(R14 程序計數(shù)器(PC ) CPSR程序計數(shù)器(RL5 )CPSRASPSRSPSR.魔性K包 誨博睡3 2-5. Ttiumb狀態(tài)的寄存器在ARM狀態(tài)的寄存器上的B慝:Thumb 狀態(tài)訪問高存放器Hi-Registers在Thumb狀態(tài),存放器 R8-R15“Hi registers"不是標(biāo)準(zhǔn)的存放器集的一局部。然 而,匯編語言程序員可以受限的對它們的進(jìn)展訪問,可以將它們用于快速暫存。使用MOV指令的特殊變量可以將一個值從R0-R7"Lo

10、 register"圍的存放器傳送到高存放器或從高存放器到第低存放器。使用 CMP和ADD指令也可以對高存放器的值與 存放器的值進(jìn)展比擬以或相加。更多容請參考表 3-34。程序狀態(tài)存放器.word.zl.ARM920T 包含了一個 當(dāng)前程序狀態(tài)存放器Current Program Status Register-CPSR ,還有5個用于異常程序處理的 程序狀態(tài)保存存放器Saved Program Status Registers-SPSR這些存放器的功能為: 保存最近已處理的 ALU操作的信息 控制中斷的使能與制止 設(shè)置處理器的運(yùn)行模式 2-6顯示了各位的編排條用七碼標(biāo)芯位IIF31

11、30 29 28 27 26 25 24C滑出班位,倡勵農(nóng)展事負(fù)小于(保忸)控制也慌硒舊口禁止至12名程序狀態(tài)寄存器格式狀態(tài)代碼標(biāo)志位N, Z, C和V位為狀態(tài)代碼標(biāo)志位。算術(shù)或邏輯操作結(jié)果可能會改變這些位,并檢 驗以決定是否應(yīng)該執(zhí)行某條指令。在ARM狀態(tài),所有指令都可能為條件執(zhí)行:詳情見表3-2。在Thumb狀態(tài),只有分支指令才能條件執(zhí)行:詳情見表3-46??刂莆籔SR包含I, F, T和M4:0)的末端8位,統(tǒng)稱為控制位。當(dāng)發(fā)生異常時將會改變這 些位。如果處理器運(yùn)行在特權(quán)模式,它們也可由軟件控制。T位該位反映了運(yùn)行者的狀態(tài).當(dāng)此位被首位處理需的執(zhí)行在Thumb狀否下,否則在ARM狀態(tài).此

12、位蜘擅TBIT外部信琴跳注意:決不察區(qū)田用軟件改變CPSR內(nèi)成TBIT狀忠t加果發(fā)生這種情況.如里曾將進(jìn)人不可演評 的狀態(tài)!中斷禁止位1和F位為中斷禁止位口如果段位1將分別禁止IRQ和FIQ中斷.模式位M4 , M3,M2 , M1和M0位(列比叫為模式位,這要酶定了處理器的運(yùn)行*試d如表2-1所示. 并不是所有的模式位組合都定義了fW效的處理器皿只有那些有明確描述的姐合才能使用.用戶必須注意是否有任何不合法的值楨編程到橫式位列4叨,否則處理器將進(jìn)入不可1颯的狀態(tài)1 如果忠現(xiàn)了,使用復(fù)位.保留位PSR劇余的位保留.當(dāng)改變T PSR的標(biāo)志位或控制位時,你必叁保證沒有改變這些未使用的也 同樣你的程

13、序不依賴于包含特定值的保留位,因為將來的處理器也許將它1 口設(shè)置為1或0.word.zl.表2-1 PSR隆式位值MdiOW3C可見的Thumb狀態(tài)寄存器可見的ARM狀態(tài)寄存胃10000用戶R7-R0, LR. SP PC. CPSRR14-R0,PCR10001快中斷R7-R0,LR_fiq, SP_fiqPC, CPSR, SPSR frqR7-R0dR14_fiq-R0_fiq.PC CPSR. SPSR f»q10010中斷 /R7-RQ.LR ircjj $P_Frq PCCPSRrSPSR irqR12-R0,R14Jrq.RI? irqpPC. CPSR. SPSR i

14、rq10011管理R7-RD.LR svcF SP_svc.PC CPSR. SFSR_sycR12-R。7Ri3HVG, PC. CPSR. SPSR sve10111中0R7-R0LR abt. SP a 崛PC CPSR. SPSR 曲 1R12R 5R14_abt. R13 abt.PC, CPSR. SPSR abt11011U-ill_i 112 JiR7-RG.LR undt SP uncljPCCPSR, SPSR 皿R12R0,R14 undf R13 undr PC CPSR11111系統(tǒng)R7-R0, LR, SP PC. CPSRR14-R0.PC. CPSR異常:程序暫

15、時停頓當(dāng)正常程序流程被暫時停頓發(fā)生異常,例如響應(yīng)一個來自外設(shè)的中斷。在處理異常前, 必須保護(hù)當(dāng)前的處理器狀態(tài),以便在完成處理程序后能恢復(fù)到原來的程序。如果同時發(fā)生好幾個異常,將會按照固定的順序來分配,見 P2-13的異常優(yōu)先級。進(jìn)入異常行為當(dāng)處理一個異常時, ARM920T將會進(jìn)展以下活動:1 .相應(yīng)存放器保存下條指令的地址。如果在 ARM狀態(tài)進(jìn)入異常,下條指令的地址將 會復(fù)制到存放器當(dāng)前PC+4或PC+8,由異常決定。詳情見表 2-2中。如果在Thumb狀態(tài)進(jìn)入異常,寫入存放器的值那么為當(dāng)前 PC偏移一個值,這樣異 常返回后程序能從正確的位置恢復(fù)。這意味著異常處理不需要確定異常是從什么狀態(tài)進(jìn)

16、入的。例如,在SWI的情況,無論是在 ARM 狀態(tài)還是 Thumb狀態(tài)執(zhí)行 SWI, MOVS PC,R14_svc語句都將返回到下一條指 令。2 .復(fù)制 CPSR的容到相應(yīng) SPSR中。3 .根據(jù)異常類型強(qiáng)制將 CPSR模式位設(shè)為某一個值。4 .強(qiáng)制PC從相關(guān)異常向量處取下條指令。通常也會置位中斷制止標(biāo)志位,以防止不同的難處理的異常嵌套。如果一個異常發(fā)生時處理器處于Thumb狀態(tài),當(dāng)裝載異常向量地址到 PC時會自動切換到ARM狀態(tài)。離開異常行為:當(dāng)異常完畢,異常處理程序?qū)? .將存放器適當(dāng)減去一個偏移量并放入到PC中。偏移量由異常類型決定2 .復(fù)制SPSR的容返回給 CPSR中。3 .如

17、果在異常進(jìn)入時置位了中斷制止標(biāo)志位異常,去除中斷制止標(biāo)志位。注意:不需要在異常完畢時切換回Thumb狀態(tài),因為在異常前會立刻保存CPSR中T位的值到 SPSR中,并在退出異常時從SPSR恢復(fù)到CPSR中。.word.zl.異常進(jìn)入/退出總結(jié)表2-2總結(jié)了進(jìn)入異常時保存在相關(guān)R14中的PC值和被推薦的退出異常的指令。表22異常進(jìn)入/退出劈柳W恒強(qiáng)$先前狀總場ARM RI口THUMB RU_m帶撬接分支用彎口 LMOV PCt MPC +J1蚊件中斷SWIMOVS PCr EH svcPG * *汽HZ1組定義1聆U 口訐MOVSPC, RU_undPC +41快中野FIQSUSS PC,四PC

18、* 42中西IRQSUBS PC. RUJrq. 2PC* 4?C*42預(yù)職中止的竄TSUBS PC, Ri 4 sbt, UPC+ 41般據(jù)中止D總?cè)誘SUflS PC.&14_血 MPC + flrc + e3RESET無4注釋:1 .此處PC為含預(yù)取中止的 BL/SWI/未定義指令取指令的地址。2 .此處PC為由于FIQ或IRQ搶先而未執(zhí)行的指令地址。3 .此處PC為發(fā)生了數(shù)據(jù)中止的Load或Store指令的地址。4 .當(dāng)復(fù)位時保存在 R14_svc的值將是不可預(yù)測的??熘袛郌IQFIQ快中斷請求異常是為支持?jǐn)?shù)據(jù)傳輸或通道處理而設(shè)計的,在 ARM狀態(tài)擁有足 夠的私有存放器來消除對

19、存放器保存的需求這樣最小化了對上下文的切換的開銷。將nFIQ輸入端拉低可以實現(xiàn)外部產(chǎn)生FIQ。由ISYNC輸入信號端的狀態(tài)決定是同步還是異步傳輸。當(dāng)ISYNC為低電平,認(rèn)為 nFIQ和nIRQ為異步,中斷前會引起同步周期延遲并影 響處理器流程。無論是從 ARM 還是 Thumb狀態(tài)進(jìn)入的異常, FIQ 處理時執(zhí)行 SUBS PC,R14_fiq,#4 時,都應(yīng)該防止中斷。如果設(shè)置 CPSR的F標(biāo)志位,F(xiàn)IQ將會被制止但主義這不可能在用戶模式中發(fā)生 如果F標(biāo)志位為零,ARM920T將在每條指令末檢測FIQ同步發(fā)生器的輸出是否為低電平。中斷IRQIRQ中斷請求異常是一個由 nIRQ輸入端的低電平產(chǎn)

20、生白一個普通中斷。IRQ的優(yōu)先級低于 FIQ,當(dāng)進(jìn)入了相關(guān)的 FIQ,會屏蔽IRQ。除非是在特權(quán)(非用戶)模式,其他 任何時刻都制止設(shè)置 CPSR的I位。無論是從 ARM 還是 Thumb狀態(tài)進(jìn)入的異常,IRQ處理時執(zhí)行 SUBS PC,R14_fiq,#4 時,都應(yīng)該防止中斷。中止中止表示不能完成當(dāng)前對存儲器的訪問。通過外部ABORT輸入端指示的。ARM920T在存儲器訪問周期期間檢測中止異常。.word.zl.有兩種類型的中止: 預(yù)取中止Prefetch Abort :發(fā)生在指令預(yù)取期間 數(shù)據(jù)中止Date Abort :發(fā)生在數(shù)據(jù)訪問期間如果發(fā)生預(yù)取中止,將屏蔽預(yù)取指并為無效,但并不會立刻

21、帶來異常,直到指令到達(dá)流水線的執(zhí)行階段才發(fā)生。假設(shè)未執(zhí)行該指令,將不會發(fā)生中止,因為流水線發(fā)生了分支。如果發(fā)生數(shù)據(jù)中止,由指令類型決定其行為: 單一的數(shù)據(jù)轉(zhuǎn)移指令LDR , STR回寫到被修改的基址存放器:中止處理程序必 須意識到這點。 交換指令SWP執(zhí)行失敗,就如同沒有被執(zhí)行。 塊數(shù)據(jù)轉(zhuǎn)移指令LDM , STM完成。如果設(shè)置了回寫,基址存放器將被更新。如果指令會覆蓋基址存放器數(shù)據(jù)轉(zhuǎn)移列表中包含基址,覆蓋將會被阻止。說明了中止后所有存放器的覆蓋都會被阻止,特別是R15通常是最后轉(zhuǎn)移的存放器在一個被中止的LDM 指令會被阻止覆蓋。中止機(jī)制使得分頁虛擬存儲器系統(tǒng)可以被實現(xiàn)。在這樣一個系統(tǒng)中允許處理

22、器產(chǎn)生任意地址。當(dāng)無法獲取某一地址上的數(shù)據(jù)時,存管理單元Memory Management Unit-MMU 將說明產(chǎn)生一個中止。中止處理程序必須緊接著找出中止原因,使得被請求的數(shù)據(jù)可用并重試被中止的指令。應(yīng)用程序并不需要了解可以使用的存總量,也不需要關(guān)心中止對其狀態(tài)以任何方式被影響。當(dāng)確定中止原因后,處理程序應(yīng)該不顧狀態(tài)ARM 或 Thumb 執(zhí)行以下語句:SUBS PC,R14_abt,#4 ; 預(yù)取中止SUBS PC,R14_abt,#8 ; 數(shù)據(jù)中止這將恢復(fù) PC和CPSR,并重試被中止的指令。軟件 中斷 SWI軟件中斷指令Software Interrupt Instruction-

23、SWI) 用于進(jìn)入管理模式,通常請求一個特定的管理功能。SWI處理程序應(yīng)當(dāng)在狀態(tài)ARM或Thumb過執(zhí)行以下指令返回:MOV PC,R14_svc這將恢復(fù) PC和CPSR,并返回到 SWI之后的指令。注意 : nFIQ, nIRQ, ISYNC, LOCK , BIGEND 和 ABORT 引腳只存在于ARM920TCPU 核之中。未定義指令當(dāng) ARM920T 遇到不能處理的指令時,將產(chǎn)生未定義指令陷阱。這個機(jī)制可以用于軟件仿真擴(kuò)展Thhumb 指令集或ARM 指令集。仿真了失敗指令后,陷阱處理程序應(yīng)該執(zhí)行在狀態(tài) ARM 或 Thumb 中執(zhí)行以下指令:MOVS PC,R14_und這將恢復(fù)C

24、PSR并返回到未定義指令之后的指令。異常向量.word.zl.卜表顯示了異常向量地址表23異常向量WB逃入槿式DkOOOMOOO宜位 A哲理握比0cOOOMNKM未定艮指令未定義模式OkOOO&OOM軟件中斷普理模五OxCOO&MJOC中止(預(yù)?。┲兄贵笫紻jcOOOOOOIO中止(數(shù)聒)中止糧式D?cQDO(XM)14現(xiàn)鑿OkOOOOOOIB中斷IRQ中斷模式OxOOO&OOIC快褶FIQ快中斷模式異常優(yōu)先級當(dāng)同時出現(xiàn)多個異常時,一個固定的優(yōu)先級系統(tǒng)將確定它們的處理順序:高優(yōu)先級:1 .復(fù)位2 .數(shù)據(jù)中止3 .快中斷FIQ4 .中斷IRQ5 .預(yù)取中止低優(yōu)先級:6 .未定義指令,軟件中斷并不是所有的異常都可以在同一時刻發(fā)生!未定義指令和軟件中斷異?;コ?,因為它們分別對應(yīng)于當(dāng)前指令的的特定 碼。如果發(fā)生數(shù)據(jù)中止的同時發(fā)生

溫馨提示

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

評論

0/150

提交評論