www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于ARM9芯片S3C2410異常中斷程序設(shè)計

摘要:驗證的代碼詳細分析了基于ARM嵌入式系統(tǒng)的異常處理流程。然后闡明關(guān)鍵字“-irq”的作用,設(shè)計出中斷處理函數(shù)。最后,通過設(shè)置中斷控制寄存器,設(shè)計外部中斷EINT3的初始化程序,并給出主程序流程圖。實踐證明程序運行穩(wěn)定可靠。
關(guān)鍵字:S3C2410 異常 –irq 中斷

引言

計算機體系結(jié)構(gòu)中,異?;蛘咧袛嗍翘幚硐到y(tǒng)中突發(fā)事件的一種機制,幾乎所有的處理器都提供這種機制。異常主要是從處理器被動接受的角度出發(fā)的一種描述,指意外操作引起的異常。而中斷則帶有向處理器主動申請的意味。但這兩種情況具有一定的共性,都是請求處理器打斷正常的程序執(zhí)行流程,進入特定程序的一種機制。若無特別說明,對“異?!焙汀爸袛唷倍疾蛔鲊栏竦膮^(qū)分。本文結(jié)合經(jīng)過實際驗證的代碼對ARM9中斷處理流程進行分析,并設(shè)計出基于S3C2410芯片的外部中斷處理程序。

1.異常中斷響應(yīng)和返回

系統(tǒng)運行時,異常可能會隨時發(fā)生。當(dāng)一個異常出現(xiàn)以后,ARM微處理器會執(zhí)行以下幾步操作:

1)        將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時能從正確的位置重新開始執(zhí)行。

2)        將CPSR復(fù)制到相應(yīng)的SPSR中。

3)        根據(jù)異常類型,強制設(shè)置CPSR的運行模式位。

4)        強制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。

這些工作是由ARM 內(nèi)核完成的,不需要用戶程序參與。異常處理完畢之后,ARM微處理器會執(zhí)行以下幾步操作從異常返回:

1)        將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。

2)        將SPSR復(fù)制回CPSR中。

3)        若在進入異常處理時設(shè)置了中斷禁止位,要在此清除。

這些工作必須由用戶在中斷處理函數(shù)中實現(xiàn)。為保證在ARM處理器發(fā)生異常時不至于處于未知狀態(tài),在應(yīng)用程序的設(shè)計中,首先要進行異常處理。采用的方式是在異常向量表中的特定位置放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到異常處理程序。當(dāng)ARM處理器發(fā)生異常時,程序計數(shù)器PC會被強制設(shè)置為對應(yīng)的異常向量,從而跳轉(zhuǎn)到異常處理程序。當(dāng)異常處理完成以后,返回到主程序繼續(xù)執(zhí)行。可以認為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行的,因此復(fù)位異常處理程序不需要返回。

2.異常處理程序設(shè)計

2.1   異常響應(yīng)流程

由于向量表的限制,只能有一條指令B完成32MB范圍內(nèi)的跳轉(zhuǎn),并不能保證所有的異常處理函數(shù)都位于32MB范圍內(nèi)。為了擴展跳轉(zhuǎn)范圍,需要二次跳轉(zhuǎn)才能把異常處理函數(shù)的地址傳送給PC。異常處理調(diào)用關(guān)系如圖1所示。

三星公司網(wǎng)站提供了test2410_r11軟件包,其中2410init.s有如下代碼:

HandlerXXX

sub    sp,sp,#4   ;減少sp,保存跳轉(zhuǎn)地址

stmfd  sp!,{r0}    ;將工作寄存器壓入堆棧

ldr   r0,=HandleXXX ;將HandleXXX地址放入r0

ldr     r0,[r0]   ;將中斷程序入口地址放入r0

str   r0,[sp,#4]  ;將中斷程序入口地址壓入堆棧

ldmfd   sp!,{r0,pc}  ;將工作寄存器和中斷程序入口地址彈出到r0和PC

圖1異常處理調(diào)用

并且在RAM中定義了存有中斷程序入口地址表_ISR_STARTADDRESS:

AREA RamData, DATA, READWRITE

        ^   _ISR_STARTADDRESS

HandleReset                 #   4

HandleUndef               #   4

HandleSWI                #   4

HandlePabort           #   4

HandleDabort           #   4

HandleReserved         #   4

HandleIRQ                #   4

HandleFIQ                #   4

通常HandlerXXX位于程序入口地址32MB范圍內(nèi),HandleXXX是以_ISR_STARTADDRESS為基地址的RAM中地址。該代碼主要實現(xiàn)跳轉(zhuǎn)功能,把異常處理程序地址HandleXXX送到PC中。例如產(chǎn)生IRQ中斷時,PC會被強制設(shè)置為0x18,執(zhí)行指令:b  HandlerIRQ

在HandlerIRQ程序段內(nèi),處理器做一些必要的處理,就會將_ISR_STARTADDRESS表中存放的IRQ入口地址送入PC,然后開始執(zhí)行相關(guān)中斷程序。由于_ISR_STARTADDRESS表存放在RAM中,后面的C語言程序可以方便地更改相關(guān)中斷服務(wù)程序的內(nèi)容。

2.2   異常分支

系統(tǒng)可能存在多個IRQ/FIQ的中斷處理程序。為了從向量表入口處的跳轉(zhuǎn)最終能找到正確的中斷處理程序,需要設(shè)計一套處理機制和方法來實現(xiàn)??梢栽贏RM的異常向量表之外,增加一張關(guān)聯(lián)中斷控制器的向量表,向量表中的內(nèi)容對應(yīng)每個具體的中斷源,可以協(xié)助跳轉(zhuǎn)到不同的中斷處理程序。

當(dāng)響應(yīng)外設(shè)的一個中斷請求時,首先觸發(fā)ARM核的中斷,進人中斷程序,再通過中斷控制器識別中斷源,使PC能夠自動獲得中斷處理程序的地址。有的芯片支持特殊的硬件分支功能,依據(jù)中斷源自動跳轉(zhuǎn)到向量表的相應(yīng)地址,多數(shù)情況下是用軟件來處理異常分支。

在S3C2410體系中,中斷的調(diào)用可以看成是經(jīng)歷了2次“中斷向量表”的查詢。2410init.s中的以下代碼完成功能就是查詢中斷偏移寄存器INTOFFSET,得到當(dāng)前中斷的中斷號,并根據(jù)中斷號再調(diào)用相關(guān)的中斷服務(wù)程序。

IsrIRQ

         sub    sp,sp,#4      

         stmfd         sp!,{r8-r9}      

         ldr     r9,=INTOFFSET

         ldr     r9,[r9]

         ldr     r8,=HandleEINT0

         add    r8,r8,r9,lsl #2

         ldr     r8,[r8]

         str     r8,[sp,#8]

         ldmfd         sp!,{r8-r9,pc}

為了方便C程序使用中斷,將IsrIRQ設(shè)為IRQ的中斷服務(wù)程序。

         ldr     r0,=HandleIRQ

         ldr     r1,=IsrIRQ

         str     r1,[r0]

其中HandleEINT0是用戶自己開辟的一塊存儲空間的起始地址,后面按次序存放中斷異常處理程序的地址,也可以理解為二級中斷向量表。IsrIRQ從中斷控制器處獲取中斷源信息,然后再從二級中斷向量表中的對應(yīng)地址單元得到異常中斷處理程序的入口地址,完成異常響應(yīng)的跳轉(zhuǎn)。二級中斷向量表一般位于HandleFIQ的后面,也就是以_ISR_STARTADDRESS+0x20為起始地址,這里定義了S3C2410處理器所有中斷源的相關(guān)中斷處理處理程序入口。這種方法的好處是用戶程序在運行過程中能夠動態(tài)改變異常向量。

2.3   中斷函數(shù)設(shè)計

為了方便高級語言設(shè)計中斷處理函數(shù),標準的ARM指令編譯器提供了一個用來聲明中斷處理函數(shù)的關(guān)鍵字-irq,使用此關(guān)鍵字聲明的函數(shù)可以被編譯器識別為中斷處理函數(shù)。編譯后的代碼在處理異常事件前保存現(xiàn)場信息,處理異常事件后對現(xiàn)場信息進行恢復(fù)。中斷函數(shù)設(shè)計如下:

static void __irq Eint3Int(void){

    ClearPending(BIT_EINT3);

Uart_Printf("EINT3 interrupt is occurred. ");

    num_int=3;設(shè)置標志位

}

定義中斷處理程序入口地址:#define pISR_EINT3     (*(unsigned *)(_ISR_STARTADDRESS+0x2c))

在初始化程序,引用代碼pISR_EINT3=(U32)Eint3Int,即可定義地址_ISR_STARTADDRESS+0x2c內(nèi)容是Eint3Int的地址,外部中斷3產(chǎn)生請求時即可調(diào)用中斷處理函數(shù)Eint3Int。

3.外中斷初始化程序設(shè)計

S3C2410X的中斷控制寄存器能接收來自56個中斷源的請求。內(nèi)部的外圍模塊和外部管腳產(chǎn)生的多個中斷請求通過中斷控制器沖裁后,向ARM920T核發(fā)出FIQ或者IRQ中斷。ARM內(nèi)核只有2個外部中斷輸入信號nIRQ和nFIQ,在具體嵌入式系統(tǒng)中,需要用中斷控制器管理多個外部中斷源,選擇其中一個中斷,通過nIRQ或nFIQ向ARM內(nèi)核發(fā)出中斷請求,如圖2所示。

圖2 FIQ/IRQ中斷處理過程

ARM920T內(nèi)核可以識別正常中斷請求和快速中斷請求兩種類型的外部中斷,中斷的行為模式由中斷控制器來設(shè)置。S3C2410X的中斷控制器包括6類寄存器:中斷源狀態(tài)寄存器、中斷模式寄存器、中斷屏蔽寄存器、優(yōu)先級寄存器、中斷狀態(tài)寄存器,以及中斷偏移寄存器。

在初始化程序中,需要選擇相應(yīng)管腳的功能,在此定義GPF3為EINT3模式,通過外部中斷控制寄存器EXTINT0設(shè)定EINT3是下降沿觸發(fā)方式,通過設(shè)置中斷源懸掛寄存器SRCPND、中斷懸掛寄存器INTPND和中斷屏蔽寄存器INTMSK開啟EINT3。中斷模式寄存器和中斷優(yōu)先級寄存器采用系統(tǒng)默認方式。具體代碼實現(xiàn)如下:

void Eint_Init(void){

rGPFCON = (rGPFCON & 0x3f0c)|(1<<7);

rEXTINT0 = (rEXTINT0 & ~(0x7<<12)) | 0x2<<12;   

pISR_EINT3=(U32)Eint3Int;   

 

圖3 主程序流程圖

rSRCPND = BIT_EINT3;

rINTPND = BIT_EINT3;

rINTMSK=~( BIT_EINT3);

}

如果采用EINT4~EINT23之間的中斷源,還需要設(shè)置外部中斷懸掛寄存器EINTPEND和外部中斷掩碼寄存器EINTMASK的相關(guān)位。

在C語言的Main()程序中調(diào)用Eint_Init()函數(shù),即可完成中斷處理的初始化操作。操作流程如圖3所示。

若外部下降沿信號接到GPF3管腳,就可以調(diào)用Eint3Int中斷處理函數(shù)。

5.結(jié)論

本文作者創(chuàng)新點在于采用的異常處理程序設(shè)計方式靈活可靠,可以在系統(tǒng)運行期間動態(tài)修改中斷向量表,利用C語言也可實現(xiàn)中斷處理函數(shù)的動態(tài)配置。在所設(shè)計的鍵盤處理程序中采用該方法,取得了很好地效果,該方法具有很強的通用性。

參考文獻

[1] 費浙平.基于ARM 的嵌入式系統(tǒng)程序開發(fā)要點(二).單片機與嵌入式系統(tǒng)應(yīng)用,2003,9:80~83

[2] 王波.ARM的三種中斷調(diào)試方法的探討.微計算機信息(嵌入式與SOC),2006,22:130~131

[3]甘泉,楊健,陳永泰.ARM處理器啟動代碼的分析與設(shè)計.2004年全國第五層嵌入式系統(tǒng)學(xué)術(shù)交流會論文集,2004:151~154

[4]張崙.嵌入式系統(tǒng)硬件設(shè)計與調(diào)試.北京:機械工業(yè)出版社.2005,7:279~294

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

在半導(dǎo)體制造中,《國際器件和系統(tǒng)路線圖》將5nm工藝定義為繼7nm節(jié)點之后的MOSFET 技術(shù)節(jié)點。截至2019年,三星電子和臺積電已開始5nm節(jié)點的有限風(fēng)險生產(chǎn),并計劃在2020年開始批量生產(chǎn)。

關(guān)鍵字: 芯片 華為 半導(dǎo)體

北京時間10月18日消息,富士康周二表示,希望有一天能夠為特斯拉公司生產(chǎn)汽車。眼下,富士康正在加大電動汽車的制造力度,以實現(xiàn)業(yè)務(wù)多元化。

關(guān)鍵字: 富士康 芯片 半導(dǎo)體 特斯拉

近日,中國工程院院士倪光南在數(shù)字世界??闹赋?,一直以來,我國芯片產(chǎn)業(yè)在“主流 CPU”架構(gòu)上受制于人,在數(shù)字經(jīng)濟時代,建議我國積極抓住時代機遇,聚焦開源RISC-V架構(gòu),以全球視野積極謀劃我國芯片產(chǎn)業(yè)發(fā)展。

關(guān)鍵字: 倪光南 RISC-V 半導(dǎo)體 芯片

新能源汽車市場在2022年有望達到600萬輛規(guī)模,為芯片產(chǎn)業(yè)帶來較大的發(fā)展機遇。2022年,我國芯片供應(yīng)比去年有所緩解,但仍緊張。中期來看,部分類別芯片存在較大結(jié)構(gòu)性短缺風(fēng)險,預(yù)計2022年芯片產(chǎn)能缺口仍難以彌補。這兩年...

關(guān)鍵字: 新能源 汽車 芯片

汽車芯片和半導(dǎo)體領(lǐng)域要深度地融合,不僅僅是簡單的供需關(guān)系,應(yīng)該是合作關(guān)系,把汽車芯片導(dǎo)入到整車廠的應(yīng)用。為緩解汽車產(chǎn)業(yè)“缺芯”,國內(nèi)汽車芯片產(chǎn)業(yè)正探索越來越多的方式完善生態(tài)。為了促進汽車半導(dǎo)體產(chǎn)業(yè)的快速發(fā)展,彌補國內(nèi)相關(guān)...

關(guān)鍵字: 智能化 汽車 芯片

汽車“缺芯”之下,國產(chǎn)芯片的未來是一片藍海。在過去很長一段時間內(nèi),“缺芯”“少魂”是我國汽車企業(yè)的短板弱項,車規(guī)級芯片、操作系統(tǒng)的自主可控程度不高。其中,我國車規(guī)級芯片自給率小于5%,且多以低端產(chǎn)品為主,關(guān)鍵芯片均受制于...

關(guān)鍵字: 智能化 汽車 芯片

之前,美國運營商AT&T曾宣布,今年年底推出5G網(wǎng)絡(luò),而隨著時間的推移,2019年會有越來越多的國家和地區(qū)商用5G網(wǎng)絡(luò),在這樣的大環(huán)境下,芯片廠商提前布局也就是情理之中的事情了。

關(guān)鍵字: 運營商 5G網(wǎng)絡(luò) 芯片

日本車用MCU大廠瑞薩電子發(fā)布公告稱,該公司將于8月31日完全關(guān)閉滋賀工廠,并將土地轉(zhuǎn)讓給日本大坂的ARK不動產(chǎn)株式會社。瑞薩電子曾在2018年6月宣布,滋賀工廠將在大約兩到三年內(nèi)關(guān)閉,該工廠的硅生產(chǎn)線已于2021年3月...

關(guān)鍵字: MCU ARK 芯片

目前,各式芯片自去年第4季起開始緊缺,帶動上游晶圓代工產(chǎn)能供不應(yīng)求,聯(lián)電、力積電、世界先進等代工廠早有不同程度的漲價,以聯(lián)電、力積電漲幅最大,再加上疫情影響,產(chǎn)品制造的各個環(huán)節(jié)都面臨著極為緊張的市場需求。推估今年全年漲幅...

關(guān)鍵字: 工廠 芯片 晶圓代工

伴隨新能源汽車、自動駕駛技術(shù)等的迅速發(fā)展,汽車芯片正成為業(yè)內(nèi)熱議的話題之一,要協(xié)調(diào)穩(wěn)定市場、確保芯片供應(yīng)。從供給上來看,要梳理關(guān)鍵領(lǐng)域芯片供需情況,引導(dǎo)國外汽車芯片企業(yè)來華投資,建立芯片及重要原材料應(yīng)急儲備機制。在穩(wěn)定市...

關(guān)鍵字: 新能源 汽車 芯片

嵌入式教程

6897 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉