版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、異常的響應異常的響應/ /返回:返回:PCPC、LRLR偏移量的計算偏移量的計算2/106項目項目ARM7ARM9ARM10ARM11流水線流水線3568典型頻率典型頻率MHz80150260335功耗功耗mW/MHz0.060.19(+cache)0.5(+cache)0.4(+cache)性能性能MIPS/MHz0.971.11.31.2架構架構馮馮 諾伊曼諾伊曼哈佛哈佛哈佛哈佛哈佛哈佛ARM處理器(核)比較處理器(核)比較3-Stage Pipeline 3-Stage Pipeline vs 5-Stage Pipeline 4InstructionFetch Shift + ALUM
2、emoryAccessRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARM9TDMIARM or ThumbInst DecodeReg SelectRegReadShiftALURegWriteThumbARMdecompressARM decodeInstructionFetchFETCHDECODEEXECUTEARM7TDMIARMARM處理器內(nèi)核流水線工作流程處理器內(nèi)核流水線工作流程5ARM的編程模型的編程模型p所謂ARM的編程模型,就是決定ARM程序組織形式的硬件架構,ARM的編程模型主要包括:ARMARM微處理器的微處理
3、器的工作狀態(tài)工作狀態(tài)ARMARM體系結構的體系結構的存儲器模式存儲器模式ARMARM微處理器的微處理器的運行(操作)模式運行(操作)模式ARMARM體系結構的體系結構的寄存器組織寄存器組織ARMARM微處理器的微處理器的異常狀態(tài)異常狀態(tài)6ARM Processor Core Registers7ARMARM支持的數(shù)據(jù)類型支持的數(shù)據(jù)類型字節(jié):字節(jié):8 8位位半字:半字:1616位(必須分配為占用位(必須分配為占用2 2個字節(jié))個字節(jié))字:字:3232位(必須分配為占用位(必須分配為占用4 4個字節(jié))個字節(jié))注意:注意:1 1)半字存儲單元地址最低位為)半字存儲單元地址最低位為0 0 2 2)字存
4、儲單元地址最低兩位為)字存儲單元地址最低兩位為0 0N N位無符號數(shù):位無符號數(shù): 二進制格式表示范圍為二進制格式表示范圍為0202N-1N-1的非負整數(shù);的非負整數(shù);N N位有符號數(shù)時,位有符號數(shù)時,N N位數(shù)據(jù)值使用位數(shù)據(jù)值使用2 2的補碼格式表示范圍為的補碼格式表示范圍為-2-2N-1N-1+2+2N-1N-1-1-1的整數(shù)的整數(shù)1112342數(shù)據(jù)存儲格式數(shù)據(jù)存儲格式 ARMARM體系結構所支持的最大尋址空間為體系結構所支持的最大尋址空間為4GB4GB(2 23232字節(jié))字節(jié)) ARMARM體系結構將存儲器看成是以字節(jié)為單位的線性組合,存體系結構將存儲器看成是以字節(jié)為單位的線性組合,存
5、儲單元地址從儲單元地址從0 x000000000 x00000000開始編址開始編址 ARMARM可按大端格式和小端格式兩種方式存儲字數(shù)據(jù)可按大端格式和小端格式兩種方式存儲字數(shù)據(jù) 地址地址 大端格式大端格式 0 x00000000 0 x12 0 x00000001 0 x34 0 x00000002 0 x56 0 x00000003 0 x78 地址地址 小端格式小端格式 0 x00000000 0 x78 0 x00000001 0 x56 0 x00000002 0 x34 0 x00000003 0 x12字數(shù)據(jù)字數(shù)據(jù)0 x12345678 一個基于一個基于ARMARM內(nèi)核的芯片可以
6、只支持大端模式或小端模式,也可以兩內(nèi)核的芯片可以只支持大端模式或小端模式,也可以兩者都支持。通常,小端模式是者都支持。通常,小端模式是ARMARM處理器的默認形式。處理器的默認形式。 在在ARMARM指令集中不包含任何直接選擇大小端的指令,但是一個同時支指令集中不包含任何直接選擇大小端的指令,但是一個同時支持大小端模式的持大小端模式的ARMARM芯片可以通過硬件配置(一般使用芯片的引腳來配置)芯片可以通過硬件配置(一般使用芯片的引腳來配置)來匹配存儲器系統(tǒng)所使用的規(guī)則。來匹配存儲器系統(tǒng)所使用的規(guī)則。ARM微處理器支持微處理器支持7種運行模式種運行模式 用戶模式用戶模式(usrusr):): A
7、RMARM處理器處理器正常的程序執(zhí)行正常的程序執(zhí)行狀態(tài)狀態(tài) 快速中斷模式快速中斷模式(fiqfiq):): 用于高速數(shù)據(jù)傳輸或通道處理用于高速數(shù)據(jù)傳輸或通道處理 外部中斷模式外部中斷模式(irqirq):): 用于通用的中斷處理用于通用的中斷處理 管理模式管理模式(svcsvc):): 操作系統(tǒng)使用的保護模式操作系統(tǒng)使用的保護模式 數(shù)據(jù)訪問中止模式數(shù)據(jù)訪問中止模式( (abtabt) ): 訪問存儲器失敗訪問存儲器失敗,當數(shù)據(jù)或,當數(shù)據(jù)或指令預取中止時進入該模式,可用于虛擬存儲及存儲保護。指令預取中止時進入該模式,可用于虛擬存儲及存儲保護。 系統(tǒng)模式系統(tǒng)模式(syssys):): 運行具有特權
8、的操作系統(tǒng)任務。運行具有特權的操作系統(tǒng)任務。 未定義指令中止模式未定義指令中止模式(undund):當未定義的指令執(zhí)行時):當未定義的指令執(zhí)行時進入該模式,可用于支持硬件協(xié)處理器的軟件仿真。進入該模式,可用于支持硬件協(xié)處理器的軟件仿真。 ARMARM微處理器的微處理器的運行模式可以通過軟件改變運行模式可以通過軟件改變,也可以通過,也可以通過外外部中斷或異常處理改變部中斷或異常處理改變。 大多數(shù)的應用程序運行在用戶模式下,當處理器運行在用大多數(shù)的應用程序運行在用戶模式下,當處理器運行在用戶模式下時,某些被保護的系統(tǒng)資源是不能被訪問的戶模式下時,某些被保護的系統(tǒng)資源是不能被訪問的10ARM的運行模
9、式:的運行模式:if u, as u11異常異常exceptionexception異常指正常執(zhí)行的程序流因故被暫時中止;異常指正常執(zhí)行的程序流因故被暫時中止;ARM支持支持7種異常類型、種異常類型、5種處理器異常工作模式種處理器異常工作模式若同時發(fā)生多個異常,將按優(yōu)先級順序處理;若同時發(fā)生多個異常,將按優(yōu)先級順序處理;異常類型對應異常模式優(yōu)先級復位Supervisor1(最高優(yōu)先級)數(shù)據(jù)中止Abort2FIQFIQ3IRQIRQ4指令預取中止Abort5未定義指令Undefined6SWISupervisor7(最低優(yōu)先級)優(yōu)先級降低12異常(異常(exception)的進入和返回)的進入和
10、返回異常向量(表)向量地址異常類型進入時模式進入時I狀態(tài) 進入時F狀態(tài)0 x0000 0000復位管理禁止禁止0 x0000 0004未定義指令未定義IF0 x0000 0008軟件中斷(SWI)管理禁止F0 x0000 000C 預取中止(指令)中止IF0 x0000 0010數(shù)據(jù)中止中止IF0 x0000 0014保留保留0 x0000 0018IRQ中斷禁止F0 x0000 001CFIQ快中斷禁止禁止注:表中的I和F表示不對該位有影響異常發(fā)生時處理器將PC值強制設置為對應的異常向量; 異常向量處通常只存放一條跳轉(zhuǎn)指令,指向真正的異常處理程序;異常向量表的后面一般緊跟著存放FIQ的異常處
11、理程序,這樣可以減少一次跳轉(zhuǎn),提高FIQ的響應速度;14異常響應過程異常響應過程在在LRLR中保存返回地址信息;中保存返回地址信息; ARMARM狀態(tài)下將當前指令地址加狀態(tài)下將當前指令地址加4 4或加或加8 8復制到復制到LRLR ThumbThumb狀態(tài)下將當前指令地址加狀態(tài)下將當前指令地址加2 2、4 4或加或加8 8 復制到復制到LRLR將將CPSRCPSR復制到適當?shù)膹椭频竭m當?shù)腟PSRSPSR中;中;將將CPSRCPSR模式位強制設置為與異常類型相對應的模式位強制設置為與異常類型相對應的值;值;強制強制PCPC從相關的異常向量處取指;從相關的異常向量處取指;注注1 1:中斷異常時置位
12、中斷禁止標志可以防止不受控制的異常嵌套:中斷異常時置位中斷禁止標志可以防止不受控制的異常嵌套 2 2:異??偸窃冢寒惓?偸窃贏RMARM狀態(tài)中處理。若處理器處于狀態(tài)中處理。若處理器處于ThumbThumb狀態(tài)時發(fā)生狀態(tài)時發(fā)生異常,則異常向量地址裝入異常,則異常向量地址裝入PCPC時會自動切換到時會自動切換到ARMARM狀態(tài)。狀態(tài)。取決于異常類型取決于異常類型異常返回(退出)過程異常返回(退出)過程將LR( R14 )中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;將SPSR的值復制回CPSR;清零在入口置位的中斷禁止標志;注:恢復CPSR的動作會將T、F和I位自動恢復為異常發(fā)生前的
13、值。異常異常exception異常指正常執(zhí)行的程序流因故被暫時中止;ARM支持7種異常類型、5種處理器異常工作模式若同時發(fā)生多個異常,將按優(yōu)先級順序處理;異常類型對應異常模式優(yōu)先級復位Supervisor1(最高優(yōu)先級)數(shù)據(jù)中止Abort2FIQFIQ3IRQIRQ4指令預取中止Abort5未定義指令Undefined6SWISupervisor7(最低優(yōu)先級)優(yōu)先級降低17復位異常復位異常Reset 微處理器剛開始上電,其實就算進入了復位狀態(tài)。后面執(zhí)行時,如果發(fā)生了不可恢復的異常,也會強制進入復位異常,復位操作包括:p1)停止當前指令操作,PC寫入:0 x0000_0000。p2) CPSR
14、寄存器做出如下改變 (CPSR7:0 = 8b110_10011): 禁止IRQ中斷, 禁止FIQ中斷; 進入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進入管理模式。18未定義指令異常(未定義指令異常(UND)當ARM處理器在取到一條指令時,發(fā)現(xiàn)該指令不是一條有效指令,或者識別是一條協(xié)處理器指令,但是沒有應答時,進入的異常模式將進行如下操作:p1)停止當前指令操作,停止當前指令操作,PC寫入:寫入:Ox0000_0004。p2)下一條指令的存放地址寫入下一條指令的存放地址寫入R14_und。p3) CPSR寫入SPSR_und。p4) CPSR寄存器做出如下改變(CPSR7:0=8b1x0_11011)禁止I
15、RQ中斷;進入ARM指令執(zhí)行狀態(tài);系統(tǒng)進入未定義指令異常模式(UND)。由于這條指令屬于未定義指令,因此這條指令并不執(zhí)行。當前狀態(tài)寄存器CPSR會自動保存入SPSR_und,下一條指令地址保存入R14_und。未定義指令異常處理完畢后,它可以把PSR_und送回CPSR,可以把R14_und寫回PC,這樣就可跳過未定義指令繼續(xù)執(zhí)行。如果未定義指令已經(jīng)被排除,可以用R14_und-4替代R14 und寫回PC,則可從未定義指令處執(zhí)行程序。軟件中斷異常軟件中斷異常(SWI)軟件中斷異常是由微處理器執(zhí)行SWI指令時觸發(fā)的。軟件中斷異常和未定義指令異常一樣,不是由外界的中斷引起的,而是由指令執(zhí)行引起的
16、。未定義指令異常是由非法指令引起的,軟件中斷異常是由合法的“中斷”指令引起的。SWI指令將進行如下操作:p 1)對對PC寫入寫入Ox0000 0008。p 2)下一條指令的地址寫入下一條指令的地址寫入R14_svc。p 3) CPSR寫入SPSR_svc。p 4) CPSR寄存器做出如下改變 (CPSR7:0 = 8blx0_10011): 禁止IRQ中斷; 進入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進入管理模式(SVC)。在軟件中斷后,可以輕松返回,它只需把SPSR_svc寫回CPSR,把R14_svc寫回PC,則可以繼續(xù)從SWI的下一條指令開始執(zhí)行。20取指令異常(取指令異常(abort)取指令異常是
17、在向指令池取指令時,指令池發(fā)出該次取指令操作異常的信號,而微處理器會進入的一種中斷異常。如果觸發(fā)取指令異常,則微處理器會進行如下操作:p 1)當前指令發(fā)生異常,并不執(zhí)行,當前指令發(fā)生異常,并不執(zhí)行,PC寫入寫入0 x0000_000C。p 2)下一條指令地址寫入下一條指令地址寫入R14_abt。p 3) CPSR寫入SPSR_abt。p 4) CPSR寄存器做出如下改變(CPSR7:0 =8blx0_10111): 禁止IRQ中斷; 進入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進入數(shù)據(jù)訪問異常模式(ABT)。l 取指令異常引導微處理器進入排除異常的中斷服務程序。在排除異常完畢后,可能會再次取該條指令,則可以
18、通過把R14_abt 4寫入PC來實現(xiàn)。21數(shù)據(jù)處理異常(數(shù)據(jù)處理異常(abort)向數(shù)據(jù)池進行數(shù)據(jù)處理操作時,數(shù)據(jù)池也會發(fā)出異常信號,這時的異常稱為數(shù)據(jù)處理異常。在發(fā)生數(shù)據(jù)處理異常時,數(shù)據(jù)處理指令已經(jīng)執(zhí)行完畢,它在發(fā)生數(shù)據(jù)處理異常時,數(shù)據(jù)處理指令已經(jīng)執(zhí)行完畢,它的的下一條指令正在執(zhí)行,當然由于發(fā)生了異常,它的下一條指令必須放棄執(zhí)下一條指令正在執(zhí)行,當然由于發(fā)生了異常,它的下一條指令必須放棄執(zhí)行行。發(fā)生數(shù)據(jù)處理異常時,微處理器會進行如下操作:p 1)下一條指令放棄執(zhí)行,PC寫入0 x0000_0010。p 2)下一條指令的下一條的地址,也就是數(shù)據(jù)異常對應執(zhí)行指令的地址+8,寫入R14_abt。
19、p 3) CPSR寫入SPSR_abt。 ;p 4) CPSR寄存器做出如下改變(CPSR7:0 = 8blx0_10111): 禁止IRQ中斷; 進入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進入數(shù)據(jù)訪問異常模式(ABT)。n 數(shù)據(jù)處理異常發(fā)生時,正處于下一條指令執(zhí)行的時刻,因此,對處理現(xiàn)數(shù)據(jù)處理異常發(fā)生時,正處于下一條指令執(zhí)行的時刻,因此,對處理現(xiàn)場的保留都是基于下一條指令的。如果我們需薯重新執(zhí)行發(fā)生數(shù)據(jù)處理場的保留都是基于下一條指令的。如果我們需薯重新執(zhí)行發(fā)生數(shù)據(jù)處理異常的指令,則應該對異常的指令,則應該對R14_abt減去減去8,這才是發(fā)生數(shù)據(jù)處理異常的指令。,這才是發(fā)生數(shù)據(jù)處理異常的指令。22IRQ
20、中斷異常中斷異常IRQ中斷由外部中斷輸入引起,是由輸入端口irq為一個周期的高電平觸發(fā)的,當IRQ中斷生效,則會進行下列操作:p 1)當前指令放棄執(zhí)行,當前指令放棄執(zhí)行,PC寫入寫入Ox0000_0018。p 2)下一條指令的地址寫入下一條指令的地址寫入R14_irq。p 3) CPSRTs入SPSR_irq。p 4) CPSR寄存器做出如下改變(CPSR7:0 = 8blx0_10010): 禁止IRQ中斷; 進入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進入外部中斷模式(IRQ)。n 一旦進入IRQ模式,首先是對cpsr_i置位,避免新的IRQ中斷對其影響,形成IRQ中斷嵌套,但是并能不禁止FIQ中斷,因
21、為FIQ中斷具有較高的優(yōu)先級。需要返回現(xiàn)場時,將執(zhí)行發(fā)生需要返回現(xiàn)場時,將執(zhí)行發(fā)生IRQ中斷放棄執(zhí)行的指令,則可以執(zhí)行中斷放棄執(zhí)行的指令,則可以執(zhí)行指令指令SUBS PC R14,#4。它不僅對PC寫入放棄執(zhí)行的那條指令的地址,而且同時還會把SPSR_irq寫回CPSR。23FIQ中斷異常中斷異常FIQ中斷異常和IRQ中斷類似,都是由外部輸入端口觸發(fā)的。也可由cpsr_f來禁止它生效。在cpsr_f為低電平,外部生成FIQ中斷時,會進行下列操作:p 1)當前指令放棄執(zhí)行,當前指令放棄執(zhí)行,PC寫入寫入0 x0000_00IC。p 2)下一條指令的地址寫入下一條指令的地址寫入R14_fiq。p
22、3) CPSRs入SPSR_fiq。p 4) CPSR寄存器做出如下改變(CPSR7:0 = 8b110_10001): 禁止IRQ中斷;禁止FIQ中斷;進入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進入快速中斷模式(FIQ)。與IRQ中斷異常不同,F(xiàn)IQ中斷異常會禁用cpsr_f,這樣會避免進入FIQ中斷嵌套。FIQ中斷有專有的寄存器R8-R14。因此進入FIQ中斷,對于R8-R14來說,不用保存然后導入這個過程。把FIQ中斷的入口放在所有中斷的入口的最后,可以不用在0 x0000_00IC中放置跳轉(zhuǎn)指令令,而是可以直接放置執(zhí)行程序,從0 x0000_00IC繼續(xù)執(zhí)行下去。這樣,F(xiàn)IQ中斷執(zhí)行可以發(fā)揮更高的
23、效率。24寄存器寄存器類別類別寄存器在匯編寄存器在匯編中的名稱中的名稱各模式下實際訪問的寄存器各模式下實際訪問的寄存器用戶用戶系統(tǒng)系統(tǒng)管理管理中止中止未定義未定義中斷中斷快中斷快中斷通用寄通用寄存器和存器和程序計程序計數(shù)器數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_
24、irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄狀態(tài)寄存器存器CPSRCPSRSPSR無無SPSR_svc SPSR_abtSPSR_und SPSR_irq SPSR_fiq無無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用戶用戶無無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系統(tǒng)系統(tǒng)SPSR_svcCPSRR15R14_svcR13_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理管理SPSR_abtCP
25、SRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止中止SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定義未定義SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中斷中斷SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中斷快中斷FIQ中斷有專用的寄存器中斷有專用的寄存器R8-R1425異常excepti
26、on的操作異常類型操作復位停止當前指令操作,PC寫入:0 x0000_0000。數(shù)據(jù)中止下一條指令放棄執(zhí)行,PC寫入0 x0000_0010。下一條指令的下一條的地址,也就是數(shù)據(jù)異常對應執(zhí)行指令的地址+8,寫入R14_abt。FIQ當前指令放棄執(zhí)行,PC寫入x0000_00IC。下一條指令的地址寫入R14_fiq。IRQ當前指令放棄執(zhí)行,PC寫入x0000_0018。下一條指令的地址寫入R14_irq。指令預取中止當前指令發(fā)生異常,并不執(zhí)行,PC寫入0 x0000_000C。下一條指令地址寫入R14_abt。未定義指令停止當前指令操作,PC寫入:Ox0000_0004。下一條指令的存放地址寫入
27、R14_und。SWI對PC寫入Ox0000 0008,下一條指令的地址寫入R14_svc。27/106Lable程序程序1程序程序2R14R14(LR)寄存器與子程序調(diào)用BL Lable地址地址A?MOV PC,LRR14(地址地址A)Lable?1. 1.程序程序1 1執(zhí)行過程中執(zhí)行過程中調(diào)用程序調(diào)用程序2 2;2.2.程序跳轉(zhuǎn)至標號程序跳轉(zhuǎn)至標號LableLable,執(zhí)行程序,執(zhí)行程序2 2。3.3.同時硬件將同時硬件將“BL BL LableLable” 的下一條指令的下一條指令所在地址存入所在地址存入R14R14(LRLR););3.3.程序程序2 2執(zhí)行完后,將執(zhí)行完后,將R14R
28、14 (LRLR)寄存器的內(nèi)容放入)寄存器的內(nèi)容放入PCPC,返回程序,返回程序1 1繼續(xù)執(zhí)行;繼續(xù)執(zhí)行;28/1061. 1.異常返回地址的處理與子程序調(diào)用類似,都是由硬件異常返回地址的處理與子程序調(diào)用類似,都是由硬件自動完成。區(qū)別在于有些異常有一個小自動完成。區(qū)別在于有些異常有一個小常量偏移常量偏移。2.2.當發(fā)生異常嵌套時,這些異常之間可能會發(fā)生沖突。當發(fā)生異常嵌套時,這些異常之間可能會發(fā)生沖突。如用戶模式下發(fā)生如用戶模式下發(fā)生IRQIRQ中斷嵌套中斷嵌套時,時,R14_irqR14_irq中低級中中低級中斷返回主程序的地址將被高級中斷的返回地址所覆蓋;斷返回主程序的地址將被高級中斷的返
29、回地址所覆蓋;R14(LR)寄存器與異常處理R14R14_irq用戶模式下的程序用戶模式下的程序0IRQ模式下的程序模式下的程序1指令指令m+1.指令指令m+n指令指令m地址地址A地址地址A未被破壞未被破壞IRQ模式下的程序模式下的程序2return指令指令j+1.指令指令j+k指令指令j地址地址B地址地址BR14_irq 被破壞被破壞returnreturn1. 1.執(zhí)行用戶模式執(zhí)行用戶模式下的程序下的程序0 0;2.2.發(fā)生發(fā)生IRQIRQ中斷中斷后,硬件將帶后,硬件將帶偏移的返回地偏移的返回地址存入址存入IRQIRQ模式模式下的下的R14_irqR14_irq寄寄存器,存器,用戶模用戶模
30、式下的式下的R14R14沒有沒有被破壞被破壞;3. IRQ3. IRQ服務程服務程序序1 1執(zhí)行完后,執(zhí)行完后,可將可將R14_irqR14_irq寄寄存器的內(nèi)容減存器的內(nèi)容減去偏移量后存去偏移量后存入入PCPC,返回之,返回之前被中斷的程前被中斷的程序;序;4. 4. 如果在如果在IRQIRQ處理程序中打處理程序中打開開IRQIRQ中斷,并中斷,并且再次發(fā)生且再次發(fā)生IRQIRQ中斷;中斷;5. 5. 硬件將返回硬件將返回地址保存在地址保存在R14_irqR14_irq寄存器寄存器中,中,原來保存原來保存的返回地址信的返回地址信息將被覆蓋,息將被覆蓋,造成錯誤造成錯誤;6. 6. 在程序在程
31、序2 2返回返回到程序到程序1 1,然后,然后在返回到用戶在返回到用戶模式下被中斷模式下被中斷的程序時,發(fā)的程序時,發(fā)生錯誤,將不生錯誤,將不能正確返回;能正確返回; 解決辦法是確解決辦法是確保保R14R14的對應版本的對應版本在發(fā)生中斷嵌套在發(fā)生中斷嵌套時不再保存任何時不再保存任何有意義的值(將有意義的值(將R14R14入棧),或者入棧),或者切換到其它處理切換到其它處理器模式下。器模式下。R15(PC)寄存器的讀操作)寄存器的讀操作l ARM指令以字為單位,因此R15的最低兩位總是為0;l R15的值是處理器正在取指的指令地址。因為有流水線,它與當前正在執(zhí)行指令的地址之間存在一個偏移(對于
32、確定的ARM芯片該值為常量)。l 當使用指令STR/STM保存R15時,不同芯片中(可能是三級流水或五級流水)PC偏移量可能是8或12,因此需事先計算出該芯片的PC偏移量。30/1061. 1. 寫入寫入R15 R15 的值被當作指令地址,程序?qū)倪@個的值被當作指令地址,程序?qū)倪@個地址處繼續(xù)執(zhí)行(相當于執(zhí)行地址處繼續(xù)執(zhí)行(相當于執(zhí)行無條件跳轉(zhuǎn)無條件跳轉(zhuǎn)););2.2. 由于由于ARMARM指令以字為邊界,因此寫入指令以字為邊界,因此寫入R15R15的值的值最低兩位通常為最低兩位通常為0b000b00。具體的規(guī)則取決于內(nèi)核。具體的規(guī)則取決于內(nèi)核結構的版本:結構的版本: 在在V3V3及以下版本中
33、,寫入及以下版本中,寫入R15R15的值的最低兩位的值的最低兩位被忽略,因此跳轉(zhuǎn)地址由指令的實際目標地址被忽略,因此跳轉(zhuǎn)地址由指令的實際目標地址(寫入(寫入R15R15的值)和的值)和0 xFFFFFFFC0 xFFFFFFFC相與得到;相與得到; 在在V4V4及以上版本中,寫入及以上版本中,寫入R15R15的值的最低兩位的值的最低兩位如果不為如果不為0 0,結果將不可預測。,結果將不可預測。R15(PC)寄存器的寫操作31/106異常響應過程異常響應過程在在LRLR中保存返回地址信息;中保存返回地址信息; ARMARM狀態(tài)下將當前指令地址加狀態(tài)下將當前指令地址加4 4或加或加8 8復制到復制
34、到LRLR ThumbThumb狀態(tài)下將當前指令地址加狀態(tài)下將當前指令地址加2 2、4 4或加或加8 8 復制到復制到LRLR將將CPSRCPSR復制到適當?shù)膹椭频竭m當?shù)腟PSRSPSR中;中;將將CPSRCPSR模式位模式位強制設置為與異常類型相對應強制設置為與異常類型相對應的值;的值;強制強制PCPC從相關的從相關的異常向量異常向量處取指;處取指;注注1 1:中斷異常時置位:中斷異常時置位中斷禁止中斷禁止標志可以防止不受控制的異常嵌套標志可以防止不受控制的異常嵌套 2 2:異??偸窃冢寒惓?偸窃贏RMARM狀態(tài)狀態(tài)中處理。若處理器處于中處理。若處理器處于ThumbThumb狀態(tài)時狀態(tài)時發(fā)生
35、異常,則異常向量地址裝入發(fā)生異常,則異常向量地址裝入PCPC時會自動切換到時會自動切換到ARMARM狀態(tài)狀態(tài)。取決于異常類型取決于異常類型32/106程序AIRQ服務程序系統(tǒng)模式IRQ模式程序寄存器組異常響應(進入)過程異常響應(進入)過程1. 1. 程序運行用戶程序,假定當前處程序運行用戶程序,假定當前處理器狀態(tài)為理器狀態(tài)為ThumbThumb狀態(tài)、允許狀態(tài)、允許IRQIRQ中斷;中斷;2. 2. 用戶程序運行時發(fā)生用戶程序運行時發(fā)生IRQIRQ中斷,中斷,硬件硬件完成以下動作:完成以下動作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?
36、MODTFI. . .N Z C V置位置位I I位(禁止位(禁止IRQIRQ中斷)中斷)清零清零T T位(進入位(進入ARMARM狀態(tài))狀態(tài)) 設置設置MODMOD位,切換處理器模位,切換處理器模式至式至IRQIRQ模式模式將返回地址信息存入將返回地址信息存入IRQIRQ模式的模式的LRLR寄存器寄存器將將CPSRCPSR寄存器內(nèi)容存入寄存器內(nèi)容存入IRQIRQ模式的模式的SPSRSPSR寄存器寄存器將跳轉(zhuǎn)地址存入將跳轉(zhuǎn)地址存入PCPC,實現(xiàn)跳轉(zhuǎn),實現(xiàn)跳轉(zhuǎn)IRQ0?1. . .? ? ? ?BackAddrJumpAddrJumpSYS1?0. . .?“?”表示對該位不關心表示對該位不關心
37、33/106異常返回(退出)過程異常返回(退出)過程 將將LRLR( R14 R14 )中的值減去偏移量后)中的值減去偏移量后存入存入PCPC,偏移量根據(jù)異常的類型而,偏移量根據(jù)異常的類型而有所不同;有所不同; 將將SPSRSPSR的值復制回的值復制回CPSRCPSR; 清零在入口置位的清零在入口置位的中斷禁止標志中斷禁止標志;注:恢復注:恢復CPSRCPSR的動作會將的動作會將T T、F F和和I I位自動恢復位自動恢復為異常發(fā)生前的值。為異常發(fā)生前的值。34/106在異常處理結束后,在異常處理結束后,異常處理程序異常處理程序完成以完成以下動作:下動作:程序AIRQ服務程序系統(tǒng)模式IRQ模式程序寄存器組異常返回(退出)過程異常返回(退出)過程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度汽車銷售與租賃合同
- 2024車輛租用協(xié)議條款
- 2024年廢鋼供應與物流服務協(xié)議
- 2024年志愿者服務合同協(xié)議
- 2024年商業(yè)大廈輕質(zhì)磚隔墻工程合同
- 2024年工程機械機手分成協(xié)議
- 2024年成品倉庫租用協(xié)議
- 2024年度云計算平臺運營維護服務合同
- 2024年建筑材料購買合同樣本
- 2024年企業(yè)合規(guī)管理與審計合同
- 化學實驗室安全智慧樹知到期末考試答案2024年
- 經(jīng)典房地產(chǎn)營銷策劃培訓(全)
- 工人入場安全教育課件
- 【川教版】《生命 生態(tài) 安全》二年級上冊第12課 少點兒馬虎 多點兒收獲 課件
- 人教版數(shù)學四年級上冊第五單元 《平行四邊形和梯形》 大單元作業(yè)設計
- 靜配中心差錯預防
- 送教上門體育、健康教案教學內(nèi)容
- 高夫品牌市場分析報告
- 職業(yè)規(guī)劃書-數(shù)字化設計與制造技術
- 國家臨床重點專科建設項目申報書
- 成語故事一葉障目
評論
0/150
提交評論