S3C4480X平臺上μC/OS-Ⅱ的中斷系統(tǒng)設(shè)計
嵌入式實時系統(tǒng)要求系統(tǒng)有很好的實時性,能夠及時處理各種異常事件,因此中斷系統(tǒng)是嵌入式實時系統(tǒng)的重要組成部分,其時間和空間性能對嵌入式實時系統(tǒng)性能的影響至關(guān)重要。要想縮短嵌入式實時系統(tǒng)的中斷響應(yīng)時間并提高系統(tǒng)中斷處理效率,合理地設(shè)計中斷系統(tǒng)非常關(guān)鍵。S3C44BOX是三星公司基于ARM7TDMI內(nèi)核的微處理器,支持IRQ和FIQ中斷請求,同時還支持向量中斷,以縮短中斷響應(yīng)時間。嵌入式實時操作系統(tǒng)μC/OS-II提供了簡單的中斷管理機制對系統(tǒng)中斷進行統(tǒng)一管理,但是對于不同的微處理器沒有給出具體的中斷處理方法。本文在深入分析S3C448OX中斷控制系統(tǒng)和μC/OS-II中斷管理機制的基礎(chǔ)上,進行中斷系統(tǒng)設(shè)計,使之能更好地滿足實際應(yīng)用的需求。
1 S3C4480X中斷系統(tǒng)
圖1所示為S3C44BOX的中斷系統(tǒng)結(jié)構(gòu)框圖。中斷控制器的任務(wù)是在片內(nèi)外圍和片外中斷源組成的多重中斷發(fā)生時,經(jīng)過優(yōu)先級判斷、選擇其中一個中斷;通過IRQ或FIQ向ARM7內(nèi)核發(fā)出IRQ或FIQ中斷請求,ARM7內(nèi)核從中斷控制器中獲取中斷信息,然后對中斷進行處理,控制中斷設(shè)備的操作過程。
當ARM7內(nèi)核接收到中斷控制器的中斷請求時會自動執(zhí)行以下幾步操作,以實現(xiàn)中斷環(huán)境保護和程序跳轉(zhuǎn):
①將程序狀態(tài)寄存器CPSR的內(nèi)容保存到將要執(zhí)行的中斷模式的程序狀態(tài)保存寄存器SPSR中,以實現(xiàn)對處理器當前狀態(tài)、中斷屏蔽位和各條件標志位的保存。
②設(shè)置當前CPSR中的相應(yīng)位,屏蔽相應(yīng)中斷并切換處理器模式。
③將引起中斷指令的下一條指令的地址(斷點地址)保存到中斷模式的子程序鏈接寄存器LR中,使中斷服務(wù)程序執(zhí)行完后能正確返回原程序。
④給程序計數(shù)器PC強制賦值,使程序從相應(yīng)的向量地址開始執(zhí)行中斷服務(wù)程序。
當中斷服務(wù)程序執(zhí)行完后,需要執(zhí)行以下幾步操作從中斷服務(wù)程序中返回:
①從中斷模式堆棧中恢復所有修改過的通用寄存器(RO~R12)。
②將中斷模式SPSR寄存器的內(nèi)容復制到CPSR中,恢復被中斷模式程序的工作狀態(tài)。
③將LR的內(nèi)容賦給PC,使PC返回到相應(yīng)的指令處。
④清除CPSR中的中斷禁止標志位。
在中斷返回的過程中,②和③需要同時完成。
2 μC/OS-II中斷處理過程
μC/OS-II提供了函數(shù)OSIntEnter()和OSIntExit(),用于中斷處理。函數(shù)OSIntEnter()通知操作系統(tǒng)進入中斷服務(wù)程序,函數(shù)OSIntExit()在中斷服務(wù)程序返回時進行相應(yīng)的處理。μC/OS-II的中斷響應(yīng)過程如圖2所示。進入中斷服務(wù)程序時,首先將全部CPU寄存器存入當前任務(wù)棧,然后調(diào)用函數(shù)OSIntEnter(),或者將中斷嵌套層數(shù)計數(shù)器,即全局變量OSIntNesting直接加1,通知μC/OS-II進入中斷服務(wù)程序,執(zhí)行用戶代碼進行中斷服務(wù)。中斷服務(wù)完成后調(diào)用函數(shù)OSIntExit(),將變量
OSIntNesting減1。當OSIntNesting減到O時,所有中斷執(zhí)行完畢,此時μC/OS-II要判斷是否有優(yōu)先級較高的任務(wù)被中斷服務(wù)程序喚醒。如果有優(yōu)先級高的任務(wù)進入就緒態(tài),μC/OS-II就返回到優(yōu)先級高的任務(wù)執(zhí)行;否則,返回到當前任務(wù)繼續(xù)執(zhí)行。
通過對μC/OS-II中斷處理過程的分析可知,μC/OS-II只是提供了簡單的中斷管理機制,對于中斷進入時的中斷環(huán)境保護、中斷退出時的中斷環(huán)境恢復、中斷嵌套處理和堆棧分配等問題沒有給出具體的處理方法。另外,對于不同的處理器,其中斷處理的方法也不一樣,所以在不同的處理器上移植μC/OS-II后,要根據(jù)處理器的具體特點,進行中斷系統(tǒng)的設(shè)計。
3 中斷系統(tǒng)設(shè)計
在中斷系統(tǒng)設(shè)計過程中,所有的IRQ中斷納入操作系統(tǒng)的管理范圍,由操作系統(tǒng)統(tǒng)一管理;FIQ中斷獨立于操作系統(tǒng)之外,不受操作系統(tǒng)管理。因此,中斷系統(tǒng)的設(shè)計包括兩部分:IRQ中斷和FIQ中斷。
3.1 中斷系統(tǒng)結(jié)構(gòu)
S3C44BOX提供了IRQ和FIQ兩種中斷方式。ARM中設(shè)計FIQ中斷是為了在快速處理的場合使用,但是進入操作系統(tǒng)進行管理的任何中斷都需做一些同樣的前期準備工作和后期結(jié)束工作,包括為被中斷的任務(wù)保存環(huán)境等。如果把FIQ中斷納入操作系統(tǒng)進行管理,則FIQ中斷的優(yōu)勢并不明顯,因此,在中斷系統(tǒng)的設(shè)計過程中沒有將FIQ中斷納入操作系統(tǒng)的管理范圍,而是由用戶單獨進行FIQ中斷服務(wù)程序的設(shè)計。
S3C4480X針對IRQ中斷方式,提供了向量中斷方式,這樣在中斷發(fā)生時可以減少中斷程序的跳轉(zhuǎn)次數(shù),進而縮短中斷響應(yīng)時間;但是μC/OS-II移植到S3C44B0X處理器上之后,所有的IRQ中斷都要由操作系統(tǒng)進行統(tǒng)一的管理,即在中斷發(fā)生時程序都要跳轉(zhuǎn)到統(tǒng)一的入口處進行中斷環(huán)境保護,然后執(zhí)行中斷服務(wù)程序。如果采用向量中斷,不但不能縮短中斷的響應(yīng)時間,反而在中斷發(fā)生時由于程序要跳轉(zhuǎn)到統(tǒng)一的入口處而延長中斷的響應(yīng)時間。
由上面的分析可知,中斷系統(tǒng)的設(shè)計中沒有將FIQ中斷納入操作系統(tǒng)的管理范圍,而是由用戶自己根據(jù)實際情況進行設(shè)計。一方面可以提供快速的中斷反應(yīng),另一方面增強了系統(tǒng)的靈活性;同時,由于向量中斷用于操作系統(tǒng)不能加快中斷的反應(yīng)速度,所以在中斷系統(tǒng)的設(shè)計中也沒有使用向量中斷方式。中斷系統(tǒng)的結(jié)構(gòu)如圖3所示。當發(fā)生IRQ中斷時,處理器會從地址Ox18處取指令,執(zhí)行0x18處的跳轉(zhuǎn)指令,跳轉(zhuǎn)到統(tǒng)一的中斷人口,進行中斷分發(fā)和環(huán)境保護后執(zhí)行具體的中斷服務(wù)程序。IRQ中斷處理的過程由操作系統(tǒng)統(tǒng)一管理。與IRQ中斷相比,F(xiàn)IQ中斷處理過程比較簡單,當發(fā)生FIQ中斷時,處理器會執(zhí)行地址0x20處的跳轉(zhuǎn)指令直接轉(zhuǎn)到具體的中斷服務(wù)程序。
3.2 ARM處理器運行模式
ARM處理器有7種運行模式:用戶模式(USR)、系統(tǒng)模式(SYS)、管理模式(SVC)、中止模式(ABT)、未定義模式(UND)、普通中斷模式(IRQ)和快速中斷模式(FIQ)。處理器在不同的情況下處于不同的模式中。在中斷系統(tǒng)的設(shè)計中,主要涉及SVC、UND、IRQ和FIQ四種模式。
在ARM處理器中,SVC模式通常是操作系統(tǒng)內(nèi)核代碼的運行模式,μC/OS-II內(nèi)核中主要代碼在SVC模式下運行,系統(tǒng)任務(wù)代碼運行在SVC模式下。
IRQ/FIQ模式是在發(fā)生IRQ/FIQ中斷后處理器強制進入的模式,用于中斷處理。ARM處理器在發(fā)生IRQ/FIQ中斷時自動改寫IRQ/FIQ模式中的LR寄存器,LR保存被中斷模式的返回地址(進入中斷前的PC值),以便中斷退出時能夠正確返回到被中斷模式;同時,LR也是每個模式下函數(shù)調(diào)用的返回地址寄存器。也就是說,LR寄存器具有保存函數(shù)返回地址和中斷返回地址兩種功能,LR的雙重功能在中斷嵌套程序設(shè)計中會發(fā)生沖突。
如果用IRQ/FIQ模式嵌套中斷自身,則本模式的LR被改寫后,本模式下原有的函數(shù)返回地址就無法還原。因此,應(yīng)該在關(guān)閉中斷的條件下,在IRQ/FIQ模式中進行基本的環(huán)境保護后,將中斷服務(wù)程序切換到SYS模式下運行。這種處理方式能夠保證產(chǎn)生中斷嵌套時,被中斷的模式是SYS模式而不是IRQ/FIQ模式自身,IRQ/FIQ模式中的LR保存著回到SYS模式的返回地址,SYS模式中的LR未被破壞,保存著函數(shù)返回地址。在移植中使用UND模式替代SYS模式作為中斷服務(wù)的運行模式,這樣可以實現(xiàn)中斷嵌套的功能。
3.3 中斷嵌套方式
嵌套應(yīng)該采用半嵌套方式,并不需要完全嵌套方式?!鞍肭短住笔侵覆煌O(shè)備中斷之間可以嵌套,但是同一設(shè)備中斷不能嵌套。這樣設(shè)計既照顧了系統(tǒng)實時性的要求,又能讓系統(tǒng)具有更明確和穩(wěn)定的行為;否則,如果開發(fā)完全嵌套,中斷服務(wù)的堆??臻g就存在不確定性,甚至中斷響應(yīng)時間上限也存在不確定性,這些顯然不能滿足嵌入式實時系統(tǒng)的需求。
通過設(shè)置CPSR寄存器的中斷屏蔽位F/I來屏蔽系統(tǒng)的中斷,這樣的保護稱為“硬保護”;通過設(shè)置中斷屏蔽寄存器中的相應(yīng)位以屏蔽某一具體的中斷,這樣的保護稱為“設(shè)備保護”。要實現(xiàn)半嵌套方式,需要在中斷進入和退出時,在適當?shù)臅r候進行兩種保護方式的切換:
①在進入設(shè)備保護后還沒有讀取數(shù)據(jù)時退出硬保護。
②在即將退出ISR,使能設(shè)備中斷位之前,再次恢復系統(tǒng)的硬保護。
具體的實現(xiàn)過程如圖4所示。
3.4 IRQ中斷設(shè)計
IRQ中斷處理過程中涉及中斷環(huán)境保護、處理器運行模式切換和中斷環(huán)境恢復等過程。中斷處理過程如下:
中斷入口條件:IRQ中斷屏蔽,LR是被中斷模式的PC值,SPSR是被中斷模式的當前處理器狀態(tài)值,SP是IRQ模式的當前堆棧指針值。
①在IRQ模式下保存環(huán)境。
②判斷是否為第一層中斷,如果不是程序跳轉(zhuǎn)到④。
③設(shè)置中斷嵌套層數(shù)變量OSIntNesting值為1,切換到SVC模式以便將IRQ模式堆棧中保存的中斷環(huán)境保存到任務(wù)堆棧中,當前任務(wù)SP指針保存到任務(wù)控制塊中;然后切換到UND模式準備執(zhí)行中斷服務(wù)程序ISR,程序跳轉(zhuǎn)到⑤。
④中斷嵌套層數(shù)變量OSIntNesting加1,切換到UND模式,將保存在IRQ模式下的任務(wù)環(huán)境拷貝到ISR的堆棧中,即UND模式堆棧中。
⑤調(diào)用IRQ中斷處理函數(shù),執(zhí)行中斷服務(wù)程序。
⑥中斷結(jié)束處理。屏蔽中斷,遞減中斷嵌套計數(shù),判斷是否為最后一層。如果不是,繼續(xù)執(zhí)行中斷服務(wù);否則,執(zhí)行任務(wù)調(diào)度,使優(yōu)先級最高的任務(wù)運行。
⑦恢復上一層中斷服務(wù)程序ISR的環(huán)境,執(zhí)行上一層的中斷服務(wù)程序。
具體的中斷服務(wù)程序執(zhí)行流程如圖5所示。
3.5 FIQ中斷設(shè)計
μC/OS-II移植到S3C4480X之后,μC/OS-II沒有對FIQ中斷進行管理,這樣可以為系統(tǒng)保留一個快速響應(yīng)的中斷源。如果在系統(tǒng)的設(shè)計過程中多個中斷源都配置為FIQ中斷,就要在中斷入口處進行中斷的分發(fā),然后進入相應(yīng)的中斷服務(wù)程序中。這樣會增加中斷的響應(yīng)時間,因此在系統(tǒng)設(shè)計中應(yīng)該為FIQ中斷設(shè)置單獨的中斷源。由于μC/OS-II沒有對FIQ進行管理,所以FIQ中斷程序需由用戶單獨設(shè)計。FIQ中斷服務(wù)程序的執(zhí)行流程如圖6所示,發(fā)生FIQ中斷后系統(tǒng)進入FIQ模式進行簡單的環(huán)境保護,然后執(zhí)行中斷服務(wù)程序,最后恢復中斷環(huán)境返回。所有這些工作都是在FIQ模式下完成的。
4 系統(tǒng)測試
系統(tǒng)測試環(huán)境為北京恒豐銳科公司開發(fā)的hf44b0A三星ARM7開發(fā)板和μC/OS-II v2.61版本。系統(tǒng)測試包括3個部分:定時器中斷測試、IRQ中斷測試和FIQ中斷測試。首先對每一部分單獨進行測試,然后進行系統(tǒng)的總體測試。
(1)定時器中斷測試
μC/OS-II要求提供一個時鐘節(jié)拍(周期性定時中斷),來實現(xiàn)時間的延遲和超時功能。時鐘節(jié)拍每秒發(fā)生10~100次。本設(shè)計選用S3C44BOX的Timer0定時器產(chǎn)生系統(tǒng)的時鐘節(jié)拍,時鐘頻率為50 Hz。建立Task_main、Task_test和Task_led三個任務(wù)在每個任務(wù)中調(diào)用μC/OS-II系統(tǒng)延時函數(shù)OSTimeDly()實現(xiàn)不同時間長度的延時,通過串口輸出信號可以觀察到任務(wù)能夠按照預(yù)定的設(shè)置進行延時和調(diào)度。
(2)IRQ中斷測試
在定時器中斷測試過程中,Timer0中斷設(shè)置為IRQ中斷。在此基礎(chǔ)上再添加一個IRQ中斷,將S3C44B0X的外部中斷EINT4/5/6/7設(shè)置為按鍵中斷添加到系統(tǒng)中,當按鍵按下時點亮對應(yīng)的LED燈,同時通過串口輸出按鍵信息。程序運行時,Timer0定時器按照固定的時間間隔發(fā)生中斷,在程序運行的過程中隨機按下任意按鍵,按鍵中斷能夠及時得到響應(yīng)和準確返回。
(3)FIQ中斷測試
由于FIQ中斷不受操作系統(tǒng)管理,中斷響應(yīng)速度快,因此將S3C44B0X的Timer2作為FIQ中斷。另外Tim-er2的中斷頻率較快(測試中設(shè)置為Timer0的10倍),通過串口輸出中斷信息,F(xiàn)IQ中斷能夠正常響應(yīng)和返回。
在系統(tǒng)中同時設(shè)置上面的3種中斷,系統(tǒng)能夠穩(wěn)定地運行。
5 結(jié) 論
在嵌入式領(lǐng)域有各種類型的微處理器和操作系統(tǒng),將不同的微處理器和操作系統(tǒng)進行組合構(gòu)成嵌入式系統(tǒng)后,就要根據(jù)兩者的特點進行中斷系統(tǒng)設(shè)計。針對S3C4480X和μC/OS-II進行中斷系統(tǒng)的設(shè)計,使μC/OS-II移植到S3C4480X系統(tǒng)后可以對中斷進行有效的管理,提高系統(tǒng)的執(zhí)行效率,其設(shè)計思想也可以應(yīng)用到其他嵌入式中斷系統(tǒng)的設(shè)計中。但是,由于μC/OS-II本身的結(jié)構(gòu)問題,所以在實際的應(yīng)用中還需要進行具體的分析。
評論