版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第五章中斷及中斷處理北京航空航天大學(xué)電工電子中心2025年3月提綱中斷響應(yīng)及優(yōu)先級ARM的通用中斷控制器GIC寄存器及應(yīng)用舉例ARM中的異常中斷處理概述進(jìn)入和退出異常中斷的過程在應(yīng)用程序中安排異常中斷處理程序SWI異常、FIQ和IRQ異常中斷處理程序CPU與外部設(shè)備之間的數(shù)據(jù)交換,可以采用無條件傳送,查詢傳送,也可以采用中斷方式。當(dāng)CPU正常運(yùn)行程序時(shí),由于微處理器內(nèi)部事件或外部請求,引起CPU中斷真在運(yùn)行的程序,轉(zhuǎn)去執(zhí)行請求中斷的外設(shè)(或內(nèi)部事件)的中斷服務(wù)子程序,中斷程序執(zhí)行完畢,再返回被終止的程序,這個(gè)過程被稱為中斷。利用中斷可以避免不斷檢測外部設(shè)備狀態(tài),提高CPU的利用率。中斷概念中斷的例子
某人正在做家務(wù),如果沒有“中斷”的話,他會一直做下去,直到把家務(wù)做完。突然出現(xiàn)了電話“中斷”,現(xiàn)在必須去接電話,電話剛剛接通,突然有人敲門,“中斷”的過程被新的“中斷”嵌套。現(xiàn)在必須去開門,門開了,進(jìn)來一個(gè)工人師傅,他是一個(gè)抄水表工,抄完水表,把他送出門。需要繼續(xù)接電話,接完電話,他繼續(xù)做家務(wù)。這是一個(gè)二級中斷系統(tǒng)的例子。包括主函數(shù)、中斷服務(wù)函數(shù)1和中斷服務(wù)函數(shù)2,函數(shù)1被函數(shù)2中斷的過程也常常被稱為中斷嵌套。如果有更高級別的中斷申請,CPU將保護(hù)斷點(diǎn)2的位置(該指令后面一條運(yùn)行指令的位置)和保護(hù)現(xiàn)場。響應(yīng)更高級別的中斷,將中斷服務(wù)函數(shù)2的地址送給程序計(jì)數(shù)器(PC),CPU開始執(zhí)行中斷服務(wù)函數(shù)2的程序,執(zhí)行完該程序,中斷返回。先是恢復(fù)現(xiàn)場(包括相關(guān)的寄存器、計(jì)數(shù)器和相關(guān)的變量和數(shù)據(jù)結(jié)構(gòu)),然后是中斷返回,返回地址是在斷點(diǎn)2壓入堆棧的斷點(diǎn)地址,繼續(xù)執(zhí)行中斷服務(wù)函數(shù)1,執(zhí)行完中斷服務(wù)函數(shù)1。恢復(fù)斷點(diǎn)1處的現(xiàn)場,接著中斷返回到斷點(diǎn)1處執(zhí)行主函數(shù)。至此,二級中斷系統(tǒng)執(zhí)行完畢。二級中斷系統(tǒng)CPU對中斷的響應(yīng)中斷的響應(yīng)關(guān)中斷保留斷點(diǎn)保護(hù)現(xiàn)場給出中斷入口,轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序恢復(fù)現(xiàn)場與返回鏈?zhǔn)絻?yōu)先權(quán)排隊(duì)電路在鏈?zhǔn)诫娐分?,排在鏈的最前面的中斷具有最高的?yōu)先權(quán),即中斷輸入1具有最高的優(yōu)先權(quán),然后是中斷輸入2,然后是中斷輸入3,……。F/F是觸發(fā)器,用于保存中斷觸發(fā)信號,中斷輸入信號是“1”有效,“0”無效,中斷響應(yīng)后,該位自動清零。在鏈?zhǔn)浇Y(jié)構(gòu)的優(yōu)先權(quán)排隊(duì)電路中,當(dāng)有兩個(gè)或者以上的中斷源排隊(duì)的時(shí)候,響應(yīng)高優(yōu)先權(quán)的中斷,低優(yōu)先級的中斷被屏蔽。當(dāng)高優(yōu)先級的中斷執(zhí)行完畢,接下來執(zhí)行低優(yōu)先級中斷。編碼器和譯碼器的優(yōu)先權(quán)排隊(duì)電路這是有一個(gè)3位二進(jìn)制的比較器,參與比較的數(shù)據(jù)是A2A1A0與B2B1B0。正在運(yùn)行的中斷源的編號放在優(yōu)先權(quán)寄存器里,輸出在比較器的B2B1B0端。只有當(dāng)A2A1A0>B2B1B0時(shí),“A>B”端輸出高電平,打開與門1,將中斷請求信號送至CPU的INTR端,CPU就去中斷正在進(jìn)行的中斷處理程序,轉(zhuǎn)去執(zhí)行更高級的中斷。提綱中斷響應(yīng)及優(yōu)先級ARM的通用中斷控制器GIC寄存器及應(yīng)用舉例ARM中的異常中斷處理概述進(jìn)入和退出異常中斷的過程在應(yīng)用程序中安排異常中斷處理程序SWI異常、FIQ和IRQ異常中斷處理程序通用中斷控制器(GIC)邏輯分區(qū)GIC(通用中斷控制器)是外設(shè)中斷和CPU之間的接口電路,目的是把中斷源送給CPU。它在硬件結(jié)構(gòu)上分為兩個(gè)大的邏輯塊:Distributor(分發(fā)器)和CPUInterface(CPU接口電路)。圖中,CFGSDISABLE是一個(gè)控制信號,當(dāng)該位為“1”時(shí),不能修改使能信號“EnableNon-secure”的值。分發(fā)器是多輸入、多輸出電路,輸入信號是中斷源,輸出信號連接到CPUinterface0或者CPUinterface1。分發(fā)器收集所有的中斷源,執(zhí)行中斷優(yōu)先級排序,它將優(yōu)先級最高的中斷事件發(fā)送到CPU接口端,同時(shí)選擇是哪一個(gè)CPU接口端,以進(jìn)行優(yōu)先級屏蔽和搶占處理。分發(fā)器寄存器由GICD_前綴標(biāo)識。模塊功能如下:全局中斷使能控制;控制每一個(gè)中斷的使能或者關(guān)閉;設(shè)置每個(gè)中斷的優(yōu)先級;設(shè)置每個(gè)中斷的目標(biāo)處理器列表;設(shè)置每個(gè)外部中斷的觸發(fā)模式:電平觸發(fā)或邊沿觸發(fā);設(shè)置每個(gè)中斷屬于組0還是組1;每個(gè)中斷狀態(tài)的可見;軟件可以設(shè)置或清除外設(shè)中斷掛起狀態(tài)。Distributori.MX6Solo/6DL共160個(gè)中斷源,可分為三類:SPIs:共享中斷。ID159~ID32,這128個(gè)ID分配給SPIs。這是由外設(shè)產(chǎn)生,可以發(fā)送給一個(gè)或多個(gè)核心處理的中斷源。PPIs:專用外設(shè)中斷。ID31~ID16,這16個(gè)ID分配給PPIs。這是由外設(shè)產(chǎn)生,是專由特定核心處理的中斷。SGI:軟件中斷。ID15~ID0,這16個(gè)ID分配給SGI。軟件中斷的產(chǎn)生是通過軟件寫入到一個(gè)專門的寄存器:軟中斷產(chǎn)生中斷寄存器(ICDSGIR)。它常用在核間通信。軟中斷能以所有核心為目標(biāo)或選中一組系統(tǒng)中的核心為目標(biāo)。常見的中斷源有:數(shù)據(jù)輸入/輸出外設(shè)請求中斷、定時(shí)時(shí)間到申請中斷、滿足規(guī)定狀態(tài)申請中斷、電源掉電申請中斷、故障報(bào)警申請中斷、程序調(diào)試申請中斷等。ARM的中斷源CPUInterfaces和CPUCore相連接的,因此每個(gè)CPUCore都可以在GIC中找到一個(gè)與之對應(yīng)的CPUInterface。CPUInterface是Distributor和CPUCore之間的橋梁。執(zhí)行優(yōu)先屏蔽和搶占處理系統(tǒng)中連接的處理器。CPU接口是有時(shí)稱為物理CPU接口,以避免可能與虛擬CPU接口混淆。CPU接口塊寄存器由GICC_前綴標(biāo)識。模塊功能如下:使能或者關(guān)閉發(fā)送到CPUCore的中斷請求信號;設(shè)置優(yōu)先級掩碼,通過掩碼來設(shè)置哪些中斷不需要上報(bào)給CPUCore;當(dāng)多個(gè)中斷到來的時(shí)候,選擇優(yōu)先級最高的中斷通知給CPUCore;定義搶占策略;應(yīng)答中斷;通知中斷處理完成。CPUInterfaces中斷狀態(tài)轉(zhuǎn)換圖無效。
中斷沒有發(fā)生。掛起。發(fā)生了中斷,但又沒運(yùn)行的狀態(tài)。此時(shí)的中斷等待CPU的控制權(quán),拿到控制權(quán)的中斷通過C或D去運(yùn)行。掛起的中斷也可被取消,通過B1進(jìn)入無效。運(yùn)行。正在運(yùn)行的中斷被高優(yōu)先級中斷剝奪CPU的控制權(quán)后,通過A2進(jìn)入“運(yùn)行或掛起”態(tài),等待再次獲得CPU的控制權(quán)后繼續(xù)運(yùn)行。運(yùn)行或掛起。這是一個(gè)運(yùn)行或者掛起的中間態(tài),叫“運(yùn)行和掛起”。它有兩條到達(dá)路徑:A2或者D。GIC中斷處理流程1)當(dāng)ARM內(nèi)核收到中斷時(shí),它會跳轉(zhuǎn)到異常向量表中,PC寄存器獲得對應(yīng)的異常向量并開始執(zhí)行中斷處理程序。2)在中斷處理函數(shù)中,先讀取GIC控制器CPU接口模塊內(nèi)的中斷響應(yīng)寄存器,一方面獲取需要處理的中斷ID號,進(jìn)行相應(yīng)的中斷處理,另一方面作為ARM核心對GIC發(fā)來中斷信號的應(yīng)答,GIC接收到應(yīng)答信號,GIC分配器會把對應(yīng)的中斷源的狀態(tài)設(shè)置為運(yùn)行狀態(tài)。3)當(dāng)中斷處理程序執(zhí)行結(jié)束后,中斷處理函數(shù)需要寫入相同的中斷ID號到GIC控制器CPU接口模塊內(nèi)的中斷結(jié)束寄存器(ICCEOIR),作為給GIC控制器的中斷處理結(jié)束信號。GIC分配器會把對應(yīng)中斷源的狀態(tài)由“運(yùn)行”設(shè)置為“無效”(如果中斷運(yùn)行的過程中被更高優(yōu)先級中斷搶占,退回到“運(yùn)行或掛起”狀態(tài))。同時(shí)GIC控制器CPU接口模塊就可以繼續(xù)提交一個(gè)優(yōu)先級最高的狀態(tài)為“掛起”的中斷到ARM內(nèi)核進(jìn)行中斷處理。一次完整的中斷處理到此完成。提綱中斷響應(yīng)及優(yōu)先級ARM的通用中斷控制器GIC寄存器及應(yīng)用舉例ARM中的異常中斷處理概述進(jìn)入和退出異常中斷的過程在應(yīng)用程序中安排異常中斷處理程序SWI異常、FIQ和IRQ異常中斷處理程序GIC寄存器ICDISRn是中斷安全狀態(tài)寄存器,分為8段,每段長度為32位。ICDISERn是中斷使能寄存器。ICDICERn是中斷清除使能寄存器,讀取對應(yīng)位的值為1,該寄存器寫無效。ICDISPRn是設(shè)置等待狀態(tài),防止多個(gè)CPU處理同一個(gè)中斷。ICDICPRn是清除等待狀態(tài),設(shè)置對應(yīng)位的中斷取消等待狀態(tài)。ICDABRn是活性位寄存器。ICDIPRn是中斷優(yōu)先級寄存器,偏移量為中斷號值。ICDIPTR是中斷處理器目標(biāo)寄存器,偏移量為中斷號值。ICDICFRn是中斷控制寄存器,SGI模式是只讀的。GICC_PMR寄存器只有低8位有效,這8位最多可以設(shè)置256個(gè)優(yōu)先級。11111111256個(gè)優(yōu)先級 11111110128個(gè)優(yōu)先級1111110064個(gè)優(yōu)先級 1111100032個(gè)優(yōu)先級1111000016個(gè)優(yōu)先級i.MX6Solo/6DL最多支持32個(gè)優(yōu)先級,所以GICC_PMR要設(shè)置為8b11111000。設(shè)置搶占優(yōu)先級和子優(yōu)先級。GICC_BPR寄存器決定搶占優(yōu)先級和子優(yōu)先級的比例,寄存器GICC_BPR只有低3位有效。000:7級搶占優(yōu)先級,1級子優(yōu)先級。 001:6級搶占優(yōu)先級,2級子優(yōu)先級。010:5級搶占優(yōu)先級,3級子優(yōu)先級。 011:4級搶占優(yōu)先級,4級子優(yōu)先級。100:3級搶占優(yōu)先級,5級子優(yōu)先級。 101:2級搶占優(yōu)先級,6級子優(yōu)先級。110:1級搶占優(yōu)先級,7級子優(yōu)先級。 111:0級搶占優(yōu)先級,8級子優(yōu)先級。設(shè)置中斷優(yōu)先級GIC應(yīng)用舉例編寫一個(gè)軟件中斷程序,在超級終端上顯示“SGIwashandled”。軟件中斷的實(shí)現(xiàn),需要5個(gè)函數(shù)。首先,需要使用register_interrupt_routine()函數(shù)注冊中斷處理程序,其中的參數(shù)3表示中斷號,gic_sgi_test_handler表示一個(gè)中斷處理程序。該函數(shù)將中斷處理程序的地址存放到中斷處理程序數(shù)組中,當(dāng)對應(yīng)中斷號的中斷產(chǎn)生時(shí),就會執(zhí)行對應(yīng)的處理程序。(1)register_interrupt_routine(SW_INTERRUPT_3,gic_sgi_test_handler,intn);mx6_enable_interrupt函數(shù)的功能是設(shè)置處理該中斷的CPU和優(yōu)先級,這里設(shè)置處理中斷號SW_INTERRUPT_3的CPU為CPU_0,優(yōu)先級為0(最高)。(2)voidmx6_enable_interrupt(uint32_tirq_id,uint32_tcpu_id,uint32_tpriority){MX6_ICDIPR3=priority&0xff; /*setirqpriority*/MX6_ICDISR0&=~(1<<irq_id); /*setIRQassecure*/MX6_ICDIPTR3|=(cpu_id&0xff); /*setcputarget*/}gic_send_sgi()函數(shù)是通過軟件方式觸發(fā)一個(gè)中斷,中斷號是SW_INTERRUPT_3,第二個(gè)參數(shù)表示目標(biāo)處理進(jìn)程,kGicSgiFilter_ΜSeTargetList表示使用目標(biāo)列表。gic_send_sgi()函數(shù)是向指定目標(biāo)發(fā)送一個(gè)中斷,當(dāng)目標(biāo)接收到中斷后就會執(zhí)行中斷處理函數(shù)。(3)gic_send_sgi(SW_INTERRUPT_3,1,kGicSgiFilter_ΜSeTargetList);編寫一個(gè)中斷處理函數(shù),在產(chǎn)生中斷后,程序會直接執(zhí)行此處的代碼。這段代碼的功能是打印出一句話,并且將一個(gè)全局變量gicTestDone設(shè)置為0。(4)voidgic_sgi_test_handler(void){printf("Ingic_sgi_test_handler()\n");gicTestDone=0; //testcomplete}測試程序主要是通過軟中斷方式觸發(fā)中斷,產(chǎn)生中斷后會將變量gicTestDone設(shè)置為0,如果沒有產(chǎn)生中斷程序會一直處于While循環(huán)中。(5)voidgic_test(void){printf("StartingGICSGItest\n");register_interrupt_routine(3,gic_sgi_test_handler);/*registersgi_irq_id=3*/mx6_enable_interrupt(3,0,0); /*enableinterrupt*/gicTestDone=1; /*interruptflag*/printf("SendingSGI\n");MX6_ICDSGIR=(0<<24)|(1<<16)|(3&0xf);/*sendsgi*/printf("Waiting\n");while(gicTestDone); /*waitinginterrupt*/printf("SGIwashandled\n");}(6)實(shí)驗(yàn)結(jié)果,測試GIC中斷,成功輸出“SGIwashandled”,如圖5.8所示。提綱中斷響應(yīng)及優(yōu)先級ARM的通用中斷控制器GIC寄存器及應(yīng)用舉例ARM中的異常中斷處理概述進(jìn)入和退出異常中斷的過程在應(yīng)用程序中安排異常中斷處理程序SWI異常、FIQ和IRQ異常中斷處理程序ARM體系控制程序的執(zhí)行流程1.在正常程序執(zhí)行過程中,每執(zhí)行一條ARM指令,程序計(jì)數(shù)器(PC)的值增加4個(gè)字節(jié);每執(zhí)行一條Thumb指令,PC的值加兩個(gè)字節(jié)。整個(gè)過程是順序執(zhí)行的;2.通過跳轉(zhuǎn)指令,程序可以跳轉(zhuǎn)到特定的地址標(biāo)號處執(zhí)行,或者跳轉(zhuǎn)到特定的子程序處執(zhí)行。其中,B指令用于執(zhí)行跳轉(zhuǎn)操作;BL指令在執(zhí)行跳轉(zhuǎn)操作的同時(shí),保存子程序的返回地址;BX指令在執(zhí)行跳轉(zhuǎn)操作的同時(shí),根據(jù)目標(biāo)地址最低位,可以將程序切換到Thumb狀態(tài);3.當(dāng)異常中斷發(fā)生時(shí),系統(tǒng)執(zhí)行當(dāng)前指令后,將跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。當(dāng)異常中斷處理程序執(zhí)行完成后,程序返回到發(fā)生中斷的指令的下一條指令處執(zhí)行。在進(jìn)入異常中斷處理程序時(shí),要保存被中斷的程序的執(zhí)行現(xiàn)場,在從異常中斷處理程序退出時(shí),要恢復(fù)被中斷的程序的執(zhí)行現(xiàn)場。ARM體系中的異常中斷種類各異常中斷的中斷向置地址以及中斷的處理優(yōu)先級中斷向量表中指定了各異常中斷及其處理程序的對應(yīng)關(guān)系。它通常存放在存儲地址的低端。存ARM體系中,異常中斷向量表的大小為32字節(jié)。其中,每個(gè)異常中斷占據(jù)4個(gè)字節(jié)大小,保留了4個(gè)字節(jié)空間。每個(gè)異常中斷對應(yīng)的中斷向量表中的4個(gè)字節(jié)的空間中存放了一個(gè)跳轉(zhuǎn)指令或者一個(gè)向程序計(jì)數(shù)器(PC)中賦值的數(shù)據(jù)訪問指令。通過這兩種指令,程序?qū)⑻D(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。異常中斷使用的寄存器提綱中斷響應(yīng)及優(yōu)先級ARM的通用中斷控制器GIC寄存器及應(yīng)用舉例ARM中的異常中斷處理概述進(jìn)入和退出異常中斷的過程在應(yīng)用程序中安排異常中斷處理程序SWI異常、FIQ和IRQ異常中斷處理程序1.保存存儲器當(dāng)前狀態(tài)、中斷屏蔽位以及各條件標(biāo)志位。通過將CPSR的內(nèi)容保存到將要執(zhí)行的的SPSR寄存器中實(shí)現(xiàn)的。各異常中斷有自己的SPSR寄存器。2.設(shè)置當(dāng)前程序狀態(tài)寄存器CPSR中相應(yīng)的位。包括設(shè)置CPSR中的位,使處理器進(jìn)入相應(yīng)的執(zhí)行模式;設(shè)置CPSR中的位,禁止IRQ中斷,當(dāng)進(jìn)入FIQ模式時(shí),禁止FIQ中斷。3.將寄存器lr_mode設(shè)置成返回地址。4.將程序計(jì)數(shù)器值(PC)設(shè)置成該異常中斷的中斷向量地址,從而跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。ARM處理器對異常中斷的響應(yīng)過程響應(yīng)復(fù)位異常中斷當(dāng)處理器的復(fù)位引腳有效時(shí),處理器終止當(dāng)前指令。當(dāng)處理器的復(fù)位引腳變成無效時(shí),處理器開始執(zhí)行下面的操作:響應(yīng)未定義指令異常中斷處理器響應(yīng)未定義指令異常中斷時(shí)的處理過程如下面的偽代碼所示:響應(yīng)SWI異常中斷處理器響應(yīng)SWI異常中斷時(shí)的處理過程如下面的偽代碼所示:響應(yīng)指令預(yù)取終止異常中斷處理器響應(yīng)指令預(yù)取終止異常中斷時(shí)的處理過程如下面的偽代碼所示:響應(yīng)數(shù)據(jù)訪問終止異常中斷處理器響應(yīng)數(shù)據(jù)訪問終止異常中斷時(shí)的處理過程如下面的偽代碼所示:響應(yīng)IRQ異常中斷處理器響應(yīng)IRQ異常中斷時(shí)的處理過程如下面的偽代碼所示:響應(yīng)FIQ異常中斷處理器響應(yīng)FIQ異常中斷時(shí)的處理過程如下面的偽代碼所示:從異常中斷處理程序中返回從異常中斷處理程序中返回包括下面兩個(gè)基本操作:1.恢復(fù)被中斷的程序的處理器狀態(tài),即把SPSR_mode寄存器內(nèi)容復(fù)制到當(dāng)前程序狀態(tài)寄存器CPSR中;2.返回到發(fā)生異常中斷的指令的下一條指令處執(zhí)行,即把lr_mode寄存器的內(nèi)容復(fù)制到程序計(jì)數(shù)器PC中。復(fù)位異常中斷處理程序不需要返回。整個(gè)應(yīng)用系統(tǒng)是從復(fù)位異常中斷處理程序開始執(zhí)行的,因而它不需要返回。SWI和未定義指令異常中斷處理程序的返回如下:MOV PC,LRSTMFD sp!,{reglist,lr};…LDMFD sp!,{reglist,pc}^上述指令中,reglist是異常中斷處理程序中使用的寄存器列表。標(biāo)識符^指示將SPSR_mode寄存器的內(nèi)容復(fù)制到當(dāng)前程序狀態(tài)寄存器CPSR中。該指令只能在特權(quán)模式下使用。提綱中斷響應(yīng)及優(yōu)先級ARM的通用中斷控制器GIC寄存器及應(yīng)用舉例ARM中的異常中斷處理概述進(jìn)入和退出異常中斷的過程在應(yīng)用程序中安排異常中斷處理程序SWI異常、FIQ和IRQ異常中斷處理程序通常有兩種方法將異常中斷處理程序注冊到異常中斷向量表中。一種是使用跳轉(zhuǎn)指令,另一種是使用數(shù)據(jù)讀取指令LDR。1.使用跳轉(zhuǎn)指令的方法比較簡單,可以在異常中斷對應(yīng)的向量表中的特定位置放一條跳轉(zhuǎn)指令,直接跳轉(zhuǎn)到該異常中斷的處理程序。這種方法有一個(gè)缺點(diǎn),即跳轉(zhuǎn)指令只能在32MB的空間范圍內(nèi)跳轉(zhuǎn)。2.使用數(shù)據(jù)讀取指令LDR向程序計(jì)數(shù)器PC中直接賦值。這種方法分為兩步:先將異常中斷處理程序的絕對地址存放在距離向量表4KB的范圍之內(nèi)的一個(gè)存儲單元中;再使用數(shù)據(jù)讀取指令LDR將該單元的內(nèi)容讀取到程序計(jì)數(shù)器PC中。異常中斷處理程序注冊到異常中斷向量表中的方法地址0x0處為ROM系統(tǒng)復(fù)位時(shí)安排異常中斷處理程序當(dāng)?shù)刂?x0處為ROM時(shí),在異常中斷向量表中,可以使用數(shù)據(jù)讀取指令LDR直接向程序計(jì)數(shù)器PC中賦值,也可以直接使用跳轉(zhuǎn)指令跳轉(zhuǎn)到異常中斷處理程序。地址0x0處為RAM系統(tǒng)復(fù)位時(shí)安排異常中斷處理程序當(dāng)?shù)刂?x0處為RAM時(shí),中斷向量表必須使用數(shù)據(jù)讀取指令直接向PC中賦值的形式。而且必須使用下面的代碼把中斷向量表從只讀ROM中復(fù)制到RAM的地址0x0開始處的存儲空間中。提綱中斷響應(yīng)及優(yōu)先級ARM的通用中斷控制器GIC寄存器及應(yīng)用舉例ARM中的異常中斷處理概述進(jìn)入和退出異常中斷的過程在應(yīng)用程序中安排異常中斷處理程序SWI異常、FIQ和IRQ異常中斷處理程序SWI異常中斷處理程序的實(shí)現(xiàn)通常SWI異常中斷處理程序分為兩級:第1級SWI異常中斷處理程序?yàn)閰R編程序,用于確定SWI指令中的24位的立即數(shù);第2級SWI異常中斷處理程序具體實(shí)現(xiàn)SWI的各個(gè)功能,它可以是匯編程序,也可以是C程序。1.第1級SWI異常中斷處理程序2.使用匯編程序的第2級SWI異常中斷處理程序可以使用跳轉(zhuǎn)指令,根據(jù)由第1級中斷處理程序得到的SWI指令中的立即數(shù)的值,直接跳轉(zhuǎn)到實(shí)現(xiàn)相應(yīng)SWI功能的處理程序。下例中的代碼實(shí)現(xiàn)了這種跳轉(zhuǎn)功能。這種第2級的SWI異常中斷處理程序?yàn)閰R編語言程序。3.使用C程序的第2級SWI異常中斷處理程序第2級SWI異常中斷處理程序也可以為C程序。這時(shí),利用從第1級SWI異常中斷處理程序得到的SWI指令中的24位立即數(shù)來跳轉(zhuǎn)到相應(yīng)的處理程序。下例是一個(gè)C程序的第2級SWI異常中斷處理程序模板。其中,參數(shù)number是從第1級SWI異常中斷處理程序得到的SWI指令中的24位立即數(shù)。IRQ/FIQ異常中斷處理程序的實(shí)現(xiàn)ARM提供的FIQ和IRQ異常中斷用于外部設(shè)備向CPU請求中斷服務(wù)。這兩個(gè)異常中斷的引腳都是低電平有效的。當(dāng)前程序狀態(tài)寄存器CPSR的I控制位可以屏蔽這兩個(gè)異常中斷請求:當(dāng)程序狀態(tài)寄存器CPSR中的I控制位為1時(shí),F(xiàn)IQ和IRQ異常中斷被屏蔽;程序狀態(tài)寄存器CPSR中的I控制位為0時(shí),CPU正常響應(yīng)FIQ和IRQ異常中斷請求。FIQ異常中斷為快速異常中斷,它比IRQ異常中斷優(yōu)先級高,這主要表現(xiàn)在如下兩個(gè)方面:1.當(dāng)FIQ和IRQ異常中斷同時(shí)產(chǎn)生時(shí),CPU先處理FIQ異常中斷;2.在FIQ異常中斷處理程序中,IRQ異常中斷被禁止。由于FIQ異常
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年帶電作業(yè)技術(shù)會議:配網(wǎng)低壓不停電作業(yè)的“機(jī)智”升級
- 2025年電解鋁行業(yè)運(yùn)行研究報(bào)告
- 2025年MODULE-COG檢測系統(tǒng)項(xiàng)目合作計(jì)劃書
- 術(shù)后并發(fā)癥管理護(hù)理查房
- 低血糖的飲食建議
- 2025年血橙提取物化妝品項(xiàng)目發(fā)展計(jì)劃
- 護(hù)理隨訪流程與規(guī)范
- 咯血介入治療患者的營養(yǎng)支持護(hù)理
- 護(hù)理中的護(hù)理風(fēng)險(xiǎn)管理與不良事件處理
- 母嬰護(hù)理基礎(chǔ)知識和技巧大全
- 教學(xué)查房課件-強(qiáng)直性脊柱炎
- 傳染病報(bào)告卡
- 句法成分課件(共18張)統(tǒng)編版語文八年級上冊
- 2023版中國近現(xiàn)代史綱要課件:07第七專題 星星之火可以燎原
- 通知書產(chǎn)品升級通知怎么寫
- 氣管插管術(shù) 氣管插管術(shù)
- 大學(xué)《實(shí)驗(yàn)診斷學(xué)》實(shí)驗(yàn)八:病例分析培訓(xùn)課件
- GB/T 28400-2012釹鎂合金
- 多維閱讀第8級Moon Mouse 明星老鼠的秘密
- 骨髓增生異常綜合癥課件整理
- 心肌梗死院前急救課件
評論
0/150
提交評論