一種基于A(yíng)RM處理器的異常處理設計與實(shí)現
摘要 嵌入式系統要求對異常及中斷處理器能快速響應。文中分析了ARM體系結構下異常處理特點(diǎn),提出一種基于ARM處理器的高效異常處理解決方案,以L(fǎng)PC3250硬件平臺為基礎,對該方案進(jìn)行了設計與實(shí)現。測試結果表明,該方案的異常處理更為高效。
本文引用地址:http://dyxdggzs.com/article/201609/304718.htm在航空航天、工業(yè)控制及醫療等領(lǐng)域中,嵌入式系統的安全性、可靠性以及高效性作用顯著(zhù),而異常是系統在運行過(guò)程中的突發(fā)事件,異常處理是否高效將直接影響整個(gè)系統的工作效率。為了確保嵌入式系統高效安全的運行,對處理器非正常模式下高效的異常處理機制的研究具有重要意義。
1 異常概述
嵌入式系統中異常/中斷是指由處理器內部或外部源產(chǎn)生并引起系統處理的一個(gè)事件。根據事件源的不同將異常分為“異常”和“中斷”兩種,異常指由處理器內部源所引起的事件,如非法指令執行異常,地址訪(fǎng)問(wèn)異常等;中斷指由處理器外部中斷源引起的事件。嵌入式處理器對外部中斷源一般由中斷控制器進(jìn)行統一管理并上報處理器。對于嵌入式系統,異常/中斷均會(huì )導致處理器打斷正常的程序執行流程,進(jìn)入特定模式進(jìn)行相應的異常處理。因此,對“異常”和“中斷”一般不作嚴格區分。
作為嵌入式處理器,為了確保系統的實(shí)時(shí)性和程序執行的穩定性,ARM處理器支持完整的異常處理機制。ARM處理器共有7種異常類(lèi)型,每種異常都有自己固定的異常向量地址,且在異常產(chǎn)生后,處理器會(huì )切換至相應的異常中斷模式,具體描述如表1所示。

ARM支持多中斷嵌套,因此各異常有固定的優(yōu)先級,依次為:復位、數據中止、FIQ、IRQ、預取指中止、未定義指令和SWI。各異常向量之間只有4 bit的空間,因此向量表中只能放置跳轉指令。通常異常處理結構如圖1所示。

2 異常的響應和返回過(guò)程
2.1 異常的響應
當7種異常中的任何一個(gè)在允許響應的前提下發(fā)生時(shí),處理器會(huì )進(jìn)行必要的預處理,其動(dòng)作如下:
(1)前程序狀態(tài)字(Thc Current Program Status Register,CPSR)到各異常對應的備份程序狀態(tài)字(The Saved Program Status Regis ter,SPSR)中。
(2)PSR中的控制位,使處理器進(jìn)入相應的異常中斷模式,同時(shí)切換程序狀態(tài)為ARM狀態(tài),禁止IRQ中斷,若異常響應為復位異?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/FIQ">FIQ異常,則還要禁止FIQ中斷。
(3)回地址,并保存到相應的LR寄存器中。
(4)量地址入PC,跳轉并執行中斷服務(wù)程序。
2.2 異常的返回
異常返回在異常服務(wù)程序完成后執行,內核需要用戶(hù)自行完成以下返回動(dòng)作:(1)PSR寄存器的內容返還給CPSR寄存器。(2)R寄存器的值賦給PC。(3)入中斷服務(wù)程序時(shí)保存了部分通用寄存器的值,此時(shí)需恢復這些被保存的通用寄存器的值,且在清除中斷禁止位。
3 異常服務(wù)程序的設計
LPC3250硬件平臺,板上集成兩級中斷控制,共支持74路中斷源。其中一級中斷控制器可接收32路外部中斷請求,所有中斷通過(guò)FIQ或IRQ中斷信號通知ARM核,因此需中斷控制器管理所有外部中斷源。
中斷控制器中,ATR(Activation Type Register)寄存器用于設置中斷的觸發(fā)方式,外部中斷支持沿觸發(fā)和電平觸發(fā);APR(Activation Polarity Register)寄存器用于確定中斷類(lèi)型,支持高電位有效和低電位有效;ITR(Interrupt Type Register)寄存器用于設置中斷方式,包括FIQ和IRQ兩種,其中FIQ的響應速度和優(yōu)先級高于IRQ,支持數據傳輸或信道處理,通過(guò)獨有的寄存器來(lái)減少占用其他寄存器,通常嵌入式系統將所有外部中斷采用IRQ異常中斷模式管理;IER(InterruptEnable Register)寄存器用于對外部中斷進(jìn)行屏蔽或使能;RSR(Raw Stat us Register)寄存器用于描述當前所有中斷源狀態(tài)。
中斷源產(chǎn)生中斷時(shí),處理器從IRQ或FIQ異常入口開(kāi)始執行處理例程。通常嵌入式系統根據中斷源的差異存在不同的中斷服務(wù)程序,為了正確判斷出具體的中斷源,設計在異常向量表之外,系統維護關(guān)聯(lián)中斷控制器的中斷向量表,結構如表2所示。

中斷向量表,用于存放具體中斷源對應的中斷服務(wù)程序的入口地址。當響應外設中斷請求時(shí),進(jìn)入中斷服務(wù)程序通過(guò)中斷控制器識別中斷源,并根據中斷向量表執行處理例程。
LPC3250平臺設計,不通過(guò)中斷控制器進(jìn)行中斷源的優(yōu)先級控制,通過(guò)RSR寄存器獲取中斷源狀態(tài)后,由系統軟件進(jìn)行中斷源優(yōu)先級配置。中斷處理中由系統選擇當前最高優(yōu)先級中斷,并進(jìn)入對應中斷源的中斷處理例程,中斷處理過(guò)程如圖2所示。

4 異常服務(wù)程序的實(shí)現
嵌入式實(shí)時(shí)操作系統中,無(wú)論是實(shí)時(shí)響應并處理來(lái)自各個(gè)被控對象的實(shí)時(shí)信息,還是對任務(wù)執行時(shí)間的管理、資源的限時(shí)等待等,均需要時(shí)鐘的參與。因此,準確且具有足夠精度的時(shí)鐘對于實(shí)時(shí)系統必不可少。
每次時(shí)鐘中斷發(fā)生,時(shí)鐘中斷服務(wù)程序都會(huì )被執行。因此時(shí)鐘中斷服務(wù)程序執行的頻率很高,每個(gè)系統周期都會(huì )被執行,這要求程序的處理高效、簡(jiǎn)潔。
由于A(yíng)RM處理器中FIQ的響應速度和優(yōu)先級均高于IRQ,因此采用FIQ方式實(shí)現對處理器時(shí)鐘中斷的處理,其他外部中斷由IRQ異常統一管理,異常處理結構圖如圖3所示。

評論