06ARM異常中斷處理及程序設(shè)計_第1頁
06ARM異常中斷處理及程序設(shè)計_第2頁
06ARM異常中斷處理及程序設(shè)計_第3頁
06ARM異常中斷處理及程序設(shè)計_第4頁
06ARM異常中斷處理及程序設(shè)計_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式ARM系統(tǒng)原理與實例開發(fā)北京大學(xué)出版社出版9/9/20221北京大學(xué)出版社出版12ARM中斷類型及中斷向量 安裝ARM中斷處理程序 第6章ARM異常中斷處理及程序設(shè)計 3IRQ中斷處理過程及處理 3SWI中斷處理原理及應(yīng)用程序開發(fā) 9/9/20222北京大學(xué)出版社出版異常的概念異常將導(dǎo)致處理器停止當(dāng)前事務(wù)處理,轉(zhuǎn)而處理一個突發(fā)事件(這個突發(fā)事件包括外部或者內(nèi)部引起的)。例如一個外部中斷或者試圖執(zhí)行一個未定義的指令。在處理異常之前,為了在異常處理完成后能夠很好的返回到中斷處理之前的狀態(tài),在編寫程序的時候有必要將處理器當(dāng)前的狀態(tài)保護(hù)起來,另外,在同一時刻有可能出現(xiàn)多個異常中斷請求。9/9/2

2、0223北京大學(xué)出版社出版ARM異常類型 如果發(fā)生中斷及異常,以下信息需要進(jìn)行保護(hù):(1) 當(dāng)前程序的狀態(tài),即CPU信息,存儲在CPSR寄存器中;(2) 當(dāng)前程序的位置,以便于從異常及中斷中返回,即當(dāng)前PC寄存器信息;(3) 臨時數(shù)據(jù)信息,即當(dāng)前R0R12數(shù)據(jù)。ARM處理器在執(zhí)行中斷服務(wù)程序之前,都將這些信息進(jìn)行了有效的保護(hù):(1)LR(R14)寄存器用來保存當(dāng)前CPU寄存器的值,即程序的返回地址;(2)SPSR寄存器用來保護(hù)當(dāng)前程序的狀態(tài),即CPU信息;(3) 臨時數(shù)據(jù)使用棧來保存,當(dāng)中斷發(fā)生后,系統(tǒng)將開辟一段內(nèi)存空間,將R0R12的數(shù)據(jù)依次壓入棧中,用R13來存儲該??臻g的入口地址。經(jīng)過以

3、上機(jī)制,ARM處理器能夠很好的支持中斷和中斷嵌套。 9/9/20224北京大學(xué)出版社出版ARM異常類型 9/9/20225北京大學(xué)出版社出版ARM中斷響應(yīng)過程 9/9/20226北京大學(xué)出版社出版Reset異常及處理 當(dāng)系統(tǒng)復(fù)位信號產(chǎn)生后,ARM處理器當(dāng)立即中斷當(dāng)前正在執(zhí)行的指令。進(jìn)入復(fù)位處理時,處理器將進(jìn)行以下操作:R14_svc = UNPREDICTABLE value/R14_svc不可知SPSR_svc = UNPREDICTABLE value/SPSR_svc不可知CPSR4:0 = 0b10011/處理器進(jìn)入svc模式CPSR5 = 0 /執(zhí)行ARM狀態(tài)CPSR6 = 1/禁止

4、FIQCPSR7 = 1 /禁止IRQif high vectors configured then/指向復(fù)位向量地址PC = 0 xFFFF0000elsePC = 0 x00000000當(dāng)復(fù)位后,ARM處理器PC指針將立刻指向0 x00000000或0 xFFFF0000地址,禁止所有外部中斷,運行于SVC模式。9/9/20227北京大學(xué)出版社出版未定義指令異常及處理 當(dāng)試圖執(zhí)行一個ARM處理器及其協(xié)處理器都無法識別的指令時將產(chǎn)生一個未定義指令異常。在沒有實際硬件支持時,未定義指令異??梢员挥脕磉M(jìn)行一個協(xié)處理器的軟件仿真,或者其它軟件仿真功能。9/9/20228北京大學(xué)出版社出版未定義指令

5、異常處理步驟R14_und = address of next instruction after the undefined instruction/R14_und為下一指令地址SPSR_und = CPSR/存儲CPSR狀態(tài)CPSR4:0 = 0b11011 /進(jìn)入未定義模式CPSR5 = 0/執(zhí)行ARM執(zhí)行/CPSR6 is unchanged,允許FIQCPSR7 = 1 /禁止IRQif high vectors configured then/指向未定義中斷向量PC = 0 xFFFF0004elsePC = 0 x000000049/9/20229北京大學(xué)出版社出版軟中斷異常及處

6、理 軟中斷異常是由SWI指令產(chǎn)生的,其將進(jìn)入使CPU進(jìn)入SVC模式,執(zhí)行以下操作:R14_svc = address of next instruction after the SWI instruction/R14_svc指向SWI下一條要執(zhí)行指令SPSR_svc = CPSR/備份CPSRCPSR4:0 = 0b10011 /進(jìn)入SVC模式CPSR5 = 0/執(zhí)行ARM狀態(tài)指令/* CPSR6 is unchanged */CPSR7 = 1/禁止IRQif high vectors configured then/進(jìn)入異常處理PC = 0 xFFFF0008elsePC = 0 x000

7、000089/9/202210北京大學(xué)出版社出版預(yù)取指異常及處理 存儲異常是由存儲系統(tǒng)產(chǎn)生的,當(dāng)試圖讀取一個不可用指令時,將產(chǎn)生一個存儲器異常信號來標(biāo)識所取指指令不可用。當(dāng)試圖執(zhí)行該指令時將產(chǎn)生一個預(yù)取異常,如果該指令并沒有被執(zhí)行(例如在管理操作時執(zhí)行分支指令)則不會產(chǎn)生一個預(yù)取異常。在ARM v5及以上版本,執(zhí)行BKPT指令也會產(chǎn)生一個預(yù)取異常。 9/9/202211北京大學(xué)出版社出版預(yù)取指異常及處理預(yù)取指異常處理指令如下:R14_abt = address of the aborted instruction + 4/R14_abt存儲abt指令4位置SPSR_abt = CPSR/保存C

8、PSRCPSR4:0 = 0b10111 /進(jìn)入SVC模式CPSR5 = 0 /執(zhí)行ARM狀態(tài)指令/* CPSR6 is unchanged */CPSR7 = 1 /禁止IRQif high vectors configured then/進(jìn)入異常處理PC = 0 xFFFF000CelsePC = 0 x0000000C9/9/202212北京大學(xué)出版社出版IRQ異常及處理 當(dāng)外部普通中斷異常請求管腳發(fā)送中斷信號時,將產(chǎn)生一個普通IRQ,因其優(yōu)先級低于FIQ,因此,當(dāng)產(chǎn)生一個FIQ時將屏蔽掉IRQ請求。另外,當(dāng)置位了CPSR的I位后(只有在特殊模式下才能修改I位),IRQ將被屏蔽。IRQ中

9、斷請求響應(yīng)后將指令以下操作:R14_irq = address of next instruction to be executed + 4/R14_irq存儲當(dāng)前指令4位置SPSR_irq = CPSR/保存CPSRCPSR4:0 = 0b10010 /進(jìn)入IRQ模式CPSR5 = 0 /執(zhí)行ARM狀態(tài)指令/* CPSR6 is unchanged */CPSR7 = 1 /禁止IRQif high vectors configured then/進(jìn)入異常處理PC = 0 xFFFF0018elsePC = 0 x000000189/9/202213北京大學(xué)出版社出版FIQ異常及處理 當(dāng)外部

10、快速中斷異常請求管腳發(fā)送中斷信號時,將產(chǎn)生一個FIQ,F(xiàn)IQ被設(shè)置來實現(xiàn)高速數(shù)據(jù)傳輸和通道處理,其有充足的私有寄存從而減少上下文切換時保存寄存器數(shù)據(jù)的時間。當(dāng)CPSR的F位被置位時將禁止FIQ請求(只有在特殊模式下才能修改F位)。9/9/202214北京大學(xué)出版社出版FIQ中斷處理當(dāng)FIQ中斷處理之前將進(jìn)行以下操作:R14_fiq = address of next instruction to be executed + 4/R14_irq存儲當(dāng)前指令4位置SPSR_fiq = CPSR/保存CPSRCPSR4:0 = 0b10001 /進(jìn)入FIQ模式CPSR5 = 0 /執(zhí)行ARM狀態(tài)指令

11、CPSR6 = 1 /禁止FIQCPSR7 = 1 /禁止IRQif high vectors configured then/進(jìn)入異常處理PC = 0 xFFFF001CelsePC = 0 x0000001C9/9/202215北京大學(xué)出版社出版12ARM中斷類型及中斷向量 安裝ARM中斷處理程序 第6章ARM異常中斷處理及程序設(shè)計 3IRQ中斷處理過程及處理 3SWI中斷處理原理及應(yīng)用程序開發(fā) 9/9/202216北京大學(xué)出版社出版兩種方式來裝載中斷處理程序 使用跳轉(zhuǎn)指令。這是最簡單的跳轉(zhuǎn)到中斷異常處理程序(每一個中斷向量入口表中包括一個跳轉(zhuǎn)指令到相應(yīng)的中斷服務(wù)程序),但這種方式會受到跳

12、轉(zhuǎn)指令的限制,即ARM跳轉(zhuǎn)指令只能有+/-32 MB的相對尋址能力。加載PC寄存器。采用這種方式,PC寄存器將被強(qiáng)制指向中斷處理程序地址。存儲中斷處理程序的地址與當(dāng)前PC值為一個相對地址 (4KB范圍內(nèi))。9/9/202217北京大學(xué)出版社出版在復(fù)位時使用匯編語言裝載中斷處理程序 9/9/202218北京大學(xué)出版社出版使用C語言程序安裝中斷處理程序地址 B/ BL指令編碼格式 9/9/202219北京大學(xué)出版社出版利用跳轉(zhuǎn)指令利用跳轉(zhuǎn)指令的二進(jìn)制編譯方式,使用C語言程序裝載中斷處理程序可以使用以下執(zhí)行步驟如下:(1) 獲取中斷異常處理函數(shù)地址;(2) 在該地址值上減去相應(yīng)中斷向量表地址值,因為

13、跳轉(zhuǎn)指令是相對尋址;(3) 減去0 x8以允許預(yù)取地址值,因為在執(zhí)行異常向量表處的指令時,由于流水線的原因,PC的值實際指向中斷向量地址+8處;(4) 將結(jié)果值右移兩位以實現(xiàn)字對齊,根據(jù)前面跳轉(zhuǎn)指令的編碼規(guī)則。(5) 檢測最高8位是否為0,以確保結(jié)果只有24位(因為跳轉(zhuǎn)指令受24位尋址限制);(6) 與0 xEA000000(無條件指令跳轉(zhuǎn)指令的操作碼,條件域為1110,指令為1010)進(jìn)行邏輯或(OR)操作以獲得保存在中斷向量表中的值。9/9/202220北京大學(xué)出版社出版利用跳轉(zhuǎn)指令安裝中斷的c代碼9/9/202221北京大學(xué)出版社出版12ARM中斷類型及中斷向量 安裝ARM中斷處理程序

14、第6章ARM異常中斷處理及程序設(shè)計 3IRQ中斷處理過程及處理 3SWI中斷處理原理及應(yīng)用程序開發(fā) 9/9/202222北京大學(xué)出版社出版S3C2410處理器中斷管理辦法S3C2410處理器中斷管理硬件結(jié)構(gòu)圖 9/9/202223北京大學(xué)出版社出版S3C2410中斷處理辦法 (1)是否屏蔽該中斷。根據(jù)是否屬于二級中斷源,即設(shè)置寄存器INTMSK和INTSUBMSK寄存器對應(yīng)位;(2)設(shè)置某類中斷為普通中斷還是快速中斷,即設(shè)置中斷類型寄存器INTMOD對應(yīng)位;(3)如果是IRQ中斷,設(shè)置該中斷的優(yōu)先級。即設(shè)置寄存器PRIORITY以決定其優(yōu)先級。(4)更重要的是,針對該中斷,CPU接收到該硬件請

15、求后,執(zhí)行怎么樣的操作,即執(zhí)行什么代碼 9/9/202224北京大學(xué)出版社出版ISR中斷處理過程 (1)中斷發(fā)生,IRQ管腳向CPU產(chǎn)生中中斷請求信號;(2)系統(tǒng)進(jìn)行必要的數(shù)據(jù)保護(hù)后(將程序位置存儲在LR寄存器,存儲CPSR寄存器值在SPSR后,設(shè)置CPSR寄存器中斷屏蔽位,切換到IRQ模式),PC指針跳轉(zhuǎn)到IRQ的中斷向量0 x0000,0018地址;(3)CPU根據(jù)內(nèi)存0 x0000,0018位置的代碼執(zhí)行IRQ_Handler位置的代碼,在IRQ_Handler中進(jìn)行現(xiàn)場保護(hù),將LR寄存器,SPSR寄存器,R0-R12通用寄存器的數(shù)據(jù)存入到IRQ棧中,然后執(zhí)行ISR_IrqHandler

16、()函數(shù)(在IRQ_Handler代碼中有跳轉(zhuǎn)指令,見上面說明)。(4)ISR_IrqHandler()函數(shù)完成中斷源判斷(具體是什么中斷),執(zhí)行中斷處理函數(shù)(在安裝中斷時已經(jīng)指定)。(5)中斷返回。9/9/202225北京大學(xué)出版社出版中斷處理代碼9/9/202226北京大學(xué)出版社出版12ARM中斷類型及中斷向量 安裝ARM中斷處理程序 第6章ARM異常中斷處理及程序設(shè)計 3IRQ中斷處理過程及處理 3SWI中斷處理原理及應(yīng)用程序開發(fā) 9/9/202227北京大學(xué)出版社出版SWI中斷處理基本概念 SWI中斷指令 9/9/202228北京大學(xué)出版社出版示例代碼 9/9/202229北京大學(xué)出版社出版使用匯編程序?qū)崿F(xiàn)SWI中斷處理示例 示例代碼見教材。9/9/202230北京大學(xué)出版社出版使用C程序?qū)崿F(xiàn)SWI中斷處理示例 示例代碼見教材。9/9/202231北京大學(xué)出版社出版演講完畢,謝謝觀看!內(nèi)容總結(jié)嵌入式ARM系統(tǒng)原理與實例開發(fā)。4/18/2022。4/18/2022。4/18/2022。例如一個外部中斷或者試圖執(zhí)行一個未定義的指令。(3) 臨時數(shù)據(jù)信息,即當(dāng)前R0R12數(shù)據(jù)。(2)SPSR寄存器用來保護(hù)當(dāng)前程序的狀態(tài),即CPU信息。當(dāng)系統(tǒng)復(fù)位信號產(chǎn)生后,ARM處理器當(dāng)立即中斷

溫馨提示

  • 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

提交評論