《ARMCortexA9多核嵌入式系統(tǒng)開發(fā)教程》課件第七章_第1頁
《ARMCortexA9多核嵌入式系統(tǒng)開發(fā)教程》課件第七章_第2頁
《ARMCortexA9多核嵌入式系統(tǒng)開發(fā)教程》課件第七章_第3頁
《ARMCortexA9多核嵌入式系統(tǒng)開發(fā)教程》課件第七章_第4頁
《ARMCortexA9多核嵌入式系統(tǒng)開發(fā)教程》課件第七章_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Exynos4412中斷系統(tǒng)7Exynos4412的中斷系統(tǒng)概述

Exynos4412中斷機(jī)制分析中斷控制相關(guān)寄存器中斷處理程序?qū)嵗?章Exynos4412中斷系統(tǒng)7.1中斷系統(tǒng)概述Exynos4412采用了通用中斷控制器(GenericInterruptController,GICPL390)對(duì)其中斷系統(tǒng)進(jìn)行控制和管理。Exynos4412共支持160個(gè)中斷,其中包括16個(gè)軟件生成的中斷、16個(gè)CPU核的私有外設(shè)中斷、128個(gè)CPU核共享的外設(shè)中斷。其中,軟件生成的中斷通過寫一個(gè)專用寄存器(ICDSGIR)生成,通常被用于內(nèi)部處理器之間的通信。7.1.1中斷相關(guān)術(shù)語1、中斷狀態(tài)每個(gè)中斷可以被認(rèn)為處于以下4個(gè)狀態(tài)之一:(1)未激活(Inactive),中斷尚未激活或未掛起;(2)掛起(Pending),中斷已經(jīng)由硬件或者軟件產(chǎn)生,正等待目標(biāo)CPU響應(yīng);(3)激活(Active),CPU已經(jīng)應(yīng)答(Acknowledge)來自GIC的中斷,該中斷正在被CPU處理但尚未完成;(4)激活并掛起(Active&Pending),CPU正在處理該中斷,此時(shí)GIC又收到來自該中斷源的更高優(yōu)先級(jí)的中斷。第7章Exynos4412中斷系統(tǒng)2、中斷類型(1)軟件生成的中斷(SGIs):是通過向軟件生成中斷寄存器寫入SGI中斷號(hào)生成的。SGI一般被用作核間中斷,用于核間通信。(2)私有外設(shè)中斷(PPI),由一個(gè)單獨(dú)的處理器私有的外設(shè)生成。(2)私有外設(shè)中斷,由一個(gè)單獨(dú)的處理器私有的外設(shè)生成。第7章Exynos4412中斷系統(tǒng)3、中斷處理模型在多核處理器架構(gòu)中,有兩種處理中斷的模型,分別是:(1)

1-N模型,只有一個(gè)CPU處理該中斷。系統(tǒng)需要通過一種機(jī)制決定哪個(gè)CPU處理該中斷。(2)

N-N模型,所有的CPU都收到該中斷。當(dāng)一個(gè)處理器應(yīng)答該中斷時(shí),只是當(dāng)前CPU上的該中斷掛起狀態(tài)被清除,其他CPU上的中斷掛起狀態(tài)仍然保持。第7章Exynos4412中斷系統(tǒng)4、偽中斷

可能存在GIC通知一個(gè)處理器,這個(gè)中斷不再需要的情況。在這種情況下,處理器應(yīng)答該中斷時(shí),GIC返回一個(gè)特殊的中斷號(hào),我們稱之為偽中斷??赡馨l(fā)生這種情況的原因如下:在處理器應(yīng)答該中斷之前,軟件改變了該中斷的優(yōu)先級(jí)、軟件禁用該中斷或者改變了目標(biāo)處理器。1-N中斷也是產(chǎn)生偽中斷的一種情況。第7章Exynos4412中斷系統(tǒng)5、中斷分組

在多處理器系統(tǒng)中,對(duì)于PPI和SGI類型的中斷,GIC將多個(gè)中斷使用同一個(gè)中斷號(hào)。這樣的中斷稱為bankedinterrupt(被分組的中斷)。該類中斷通過中斷號(hào)和相關(guān)聯(lián)的CPU接口可以唯一標(biāo)示。第7章Exynos4412中斷系統(tǒng)7.1.2通用中斷控制器架構(gòu)GIC架構(gòu)定義了一個(gè)通用中斷控制器,它由單核或多核系統(tǒng)中管理中斷的硬件資源集組成。GIC提供內(nèi)存映射寄存器,用于管理中斷源及其行為,并且在多核系統(tǒng)中路由中斷到單獨(dú)的處理器。它使得軟件能夠屏蔽、使能和禁止來自獨(dú)立源的中斷,優(yōu)先響應(yīng)硬件上單源的中斷,生成軟件中斷。第7章Exynos4412中斷系統(tǒng)圖7.1GIC工作原理第7章Exynos4412中斷系統(tǒng)由圖7.1的GIC工作原理,可知:

一個(gè)GIC包括兩個(gè)主要的功能模塊,分別是位于左側(cè)的分配器(Distributor)和位于右側(cè)的CPU接口(CPUInterface)。分配器用來收集所有的中斷信息,主要包括PPI和SPI兩種類型的中斷及相關(guān)信息。CPU接口是每個(gè)處理器處理中斷的私有通道,接受來自分配器配置好的最高優(yōu)先級(jí)的中斷或可繼承的nfiq_cn和nirq_cn異常中斷。第7章Exynos4412中斷系統(tǒng)1、分配器:

分配器主要完成中斷優(yōu)先級(jí)處理設(shè)置和分配中斷到相應(yīng)的CPU接口。具體地說,分配器提供如下編程接口:(1)使能掛起中斷是否傳遞到CPU接口,是中斷總開關(guān),通過設(shè)置ICDDCR實(shí)現(xiàn);(2)使能和禁用任意中斷,通過設(shè)置ICDISERn/ICDICERn實(shí)現(xiàn);(3)設(shè)定任意中斷優(yōu)先級(jí),通過設(shè)置ICDIPRn實(shí)現(xiàn);第7章Exynos4412中斷系統(tǒng)(4)設(shè)置任意中斷的目標(biāo)處理器,通過設(shè)置ICDIPTRn實(shí)現(xiàn);(5)設(shè)置中斷為電平或邊沿觸發(fā),通過設(shè)置ICDICFRn實(shí)現(xiàn);(6)傳遞任意SGI到一個(gè)或者多個(gè)目標(biāo)處理器,通過設(shè)置ICDSGIR實(shí)現(xiàn);(7)查看任意中斷的狀態(tài),通過讀取ICDISERn/ICDICERn實(shí)現(xiàn);(8)提供軟件方式設(shè)置或清除任意外設(shè)中斷(PI)的掛起狀態(tài),通過設(shè)置ICDISPRn/?ICDICPRn實(shí)現(xiàn)。第7章Exynos4412中斷系統(tǒng)2、CPU接口:CPU接口主要完成中斷優(yōu)先級(jí)屏蔽(prioritymasking)和搶占處理(preemptionhandling)。每個(gè)CPU接口為連接到GIC上的一個(gè)處理器提供接口。具體地說,每個(gè)CPU接口提供如下編程接口:(1)使能通知處理器中斷請(qǐng)求,通過設(shè)置ICCICR_CPUn實(shí)現(xiàn);(2)應(yīng)答中斷,通過設(shè)置ICCIAR_CPUn實(shí)現(xiàn);第7章Exynos4412中斷系統(tǒng)(3)指示中斷處理完成,通過設(shè)置ICCEOIR_CPUn實(shí)現(xiàn);(4)設(shè)置處理器的中斷優(yōu)先級(jí)屏蔽,通過設(shè)置ICCPMR_CPUn實(shí)現(xiàn);(5)定義處理器中斷搶占策略;(6)為處理器決定最高優(yōu)先級(jí)的掛起中斷,通過設(shè)置ICCHPIR_CPUn實(shí)現(xiàn)。CPU接口根據(jù)中斷優(yōu)先級(jí)屏蔽和中斷搶占策略決定將最高優(yōu)先級(jí)的掛起中斷請(qǐng)求發(fā)給處理器。第7章Exynos4412中斷系統(tǒng)7.1.3GIC中斷分組表

所有的中斷源都可以使用唯一的ID號(hào)來確認(rèn)。GIC為不同類型的中斷指定不同范圍的ID值。GIC將ID0~I(xiàn)D1019分為以下幾組:(1)?16個(gè)SGI中斷號(hào)(ID0~I(xiàn)D15),一般被用來作為核間中斷(Inter-ProcessorInterrupt,IPI);(2)

16個(gè)PPI中斷號(hào)被分配為ID16~I(xiàn)D31;(3)

SPI的中斷號(hào)被分配為ID32~I(xiàn)D1019,Exynos4412僅使用了前128個(gè)(ID32~I(xiàn)D159)。第7章Exynos4412中斷系統(tǒng)表7.1列出了128個(gè)SPI中斷的分組情況。表7.1SPI中斷分組第7章Exynos4412中斷系統(tǒng)7.2中斷機(jī)制分析7.2.1GIC中斷識(shí)別GIC識(shí)別中斷的過程如下:讀寄存器ICDICTR的值。GIC根據(jù)寄存器ICDISER中的值來使能和區(qū)分中斷源。寫0到ICDDCR的某位,則禁止將相應(yīng)的中斷傳遞給CPU接口。對(duì)于每一個(gè)ICDISER,寫0xFFFFFFFF到ICDISER,然后讀其中的各位,為1的位標(biāo)示相應(yīng)的中斷ID。通過讀取ICDICER來獲取相應(yīng)的中斷信息。第7章Exynos4412中斷系統(tǒng)7.2.2GIC中斷控制1、中斷使能對(duì)于一個(gè)外設(shè)中斷(PI),可以通過如下方法使能和清除中斷:(1)寫1到ICDISER寄存器的相應(yīng)位使能一個(gè)中斷;(2)寫1到ICDICER的相應(yīng)位禁用一個(gè)中斷。第7章Exynos4412中斷系統(tǒng)設(shè)置和清除中斷的掛起狀態(tài),需通過如下方式:(1)對(duì)于外設(shè)中斷,可以通過如下方式控制:①寫1到ICDISPR寄存器相應(yīng)位,即可將相應(yīng)中斷設(shè)置為掛起狀態(tài);②寫1到ICDICPRn寄存器相應(yīng)位,即可清除相應(yīng)中斷的掛起狀態(tài)。(2)對(duì)于SGI,GIC忽略對(duì)ICDISPR和ICDICPRn的寫操作。第7章Exynos4412中斷系統(tǒng)2、找到激活或掛起狀態(tài)的中斷通過讀ICDISPR或者ICDICPR寄存器中的相應(yīng)位,處理器可以找到掛起的中斷;通過讀ICDABRn寄存器相應(yīng)位,可以獲得激活狀態(tài)的中斷。當(dāng)中斷為掛起或者激活狀態(tài)時(shí),ICDISPR或ICDICPR的相應(yīng)位為1;如果中斷處于激活并且掛起狀態(tài),那么這兩個(gè)寄存器的相應(yīng)位都為1。對(duì)于SGI,相應(yīng)的ICDISPR和ICDICPR寄存器的位為1。第7章Exynos4412中斷系統(tǒng)7.2.3中斷優(yōu)先級(jí)1、搶占在一個(gè)激活中斷被處理完之前,CPU接口支持更高優(yōu)先級(jí)的中斷送達(dá)并占用目標(biāo)處理器,但需滿足如下兩個(gè)條件:(1)該中斷的優(yōu)先級(jí)高于當(dāng)前CPU接口被屏蔽中斷的優(yōu)先級(jí);(2)該中斷的組優(yōu)先級(jí)高于正在當(dāng)前CPU接口處理的中斷優(yōu)先級(jí)。第7章Exynos4412中斷系統(tǒng)2、優(yōu)先級(jí)屏蔽

寄存器ICCPMR中定義了目標(biāo)處理器的優(yōu)先級(jí)閾值。GIC僅上報(bào)那些優(yōu)先級(jí)高于這個(gè)閾值的掛起中斷。初始值為0,會(huì)屏蔽所有的中斷,因此初始化程序里面需要重新設(shè)置該值。第7章Exynos4412中斷系統(tǒng)3、優(yōu)先級(jí)分組

為了增強(qiáng)系統(tǒng)控制中斷的能力,GIC支持優(yōu)先級(jí)分組,將中斷優(yōu)先級(jí)寄存器入口分為兩個(gè)子區(qū)域:組優(yōu)先級(jí)區(qū)域和組內(nèi)子優(yōu)先級(jí)區(qū)域。結(jié)論:(1)組優(yōu)先級(jí)高的(數(shù)值越小,反而優(yōu)先級(jí)越高)才能搶占組優(yōu)先級(jí)低的中斷異常;(2)組優(yōu)先級(jí)相同的中斷異常之間不能相互搶占;(3)組內(nèi)優(yōu)先級(jí)由子優(yōu)先級(jí)決定。第7章Exynos4412中斷系統(tǒng)7.2.4通用中斷處理

分配器負(fù)責(zé)維護(hù)CPU接口上四種類型的中斷(未激活中斷、掛起中斷、激活中斷、激活并且掛起中斷)。當(dāng)一個(gè)處理器獲取到一個(gè)中斷異常時(shí),分配器讀取中斷應(yīng)答寄存器(InterruptAcknowledgeRegister,ICCIAR)來應(yīng)答中斷。這個(gè)讀取返回一個(gè)中斷ID,該ID被用于選擇正確的中斷處理程序。當(dāng)GIC識(shí)別這個(gè)讀取后,將終端的狀態(tài)從掛起切換到激活或激活并掛起狀態(tài)。如果當(dāng)前沒有中斷掛起,一個(gè)為假中斷的預(yù)定義ID被返回。第7章Exynos4412中斷系統(tǒng)圖7.2中斷處理流程第7章Exynos4412中斷系統(tǒng)GIC中斷處理的流程:(1)當(dāng)GIC識(shí)別出一個(gè)中斷請(qǐng)求,GIC決定該中斷是否被使能,若沒有被使能,則對(duì)GIC沒有影響。(2)對(duì)于每個(gè)被使能的掛起中斷,由分配器決定目標(biāo)處理器分配給一個(gè)或者多個(gè)處理器。(3)對(duì)于每個(gè)處理器,分配器依據(jù)每個(gè)中斷優(yōu)先級(jí)信息決定最高優(yōu)先級(jí)的掛起中斷,并將該中斷傳遞給目標(biāo)CPU接口。第7章Exynos4412中斷系統(tǒng)(4)?CPU接口將收到的中斷的優(yōu)先級(jí)與處理器中執(zhí)行的中斷優(yōu)先級(jí)進(jìn)行比較。(5)當(dāng)處理器收到異常中斷請(qǐng)求后,讀取其CPU接口中的ICCIAR寄存器來應(yīng)答該中斷。(6)當(dāng)處理器完成中斷處理后,通過寫ICCEOIR通知GIC處理已經(jīng)完成。GIC將為相應(yīng)的CPU接口改變?cè)撝袛嗟臓顟B(tài):從激活變?yōu)槲醇せ睿蛘邚募せ畈⑶覓炱鹱優(yōu)閽炱馉顟B(tài)。第7章Exynos4412中斷系統(tǒng)7.3中斷控制相關(guān)寄存器7.3.1分配器、CPU接口配置寄存器1、CPU接口控制寄存器ICCICR_CPUn表7.2CPU接口控制寄存器ICCICR_CPUn(n?=?0~3)第7章Exynos4412中斷系統(tǒng)2.

CPU接口應(yīng)答寄存器ICCIAR_CPUn表7.3CPU接口應(yīng)答寄存器ICCIAR_CPUn(n?=?0~3)第7章Exynos4412中斷系統(tǒng)3.中斷輸出寄存器INTERRUPT_OUT_CPUn表7.4中斷輸出寄存器INTERRUPT_OUT_CPUn(n?=?0~3)第7章Exynos4412中斷系統(tǒng)4.處理器目標(biāo)寄存器ICDIPTR_CPU表7.5處理器目標(biāo)寄存器ICDIPTR_CPU第7章Exynos4412中斷系統(tǒng)5.中斷觸發(fā)方式標(biāo)示或設(shè)置寄存器ICDICFR_CPU表7.6中斷觸發(fā)方式標(biāo)示或設(shè)置寄存器ICDICFR_CPU第7章Exynos4412中斷系統(tǒng)6.分配器控制寄存器ICDDCR表7.7分配器控制寄存器ICDDCR第7章Exynos4412中斷系統(tǒng)7.3.2中斷配置寄存器1、中斷使能寄存器ICDISER_CPUn表7.8中斷使能寄存器ICDISER_CPUn(n=0~3)第7章Exynos4412中斷系統(tǒng)2、中斷清除寄存器ICDICER_CPUn表7.9中斷清除寄存器ICDICER_CPUn(n=0~3)第7章Exynos4412中斷系統(tǒng)3、中斷掛起狀態(tài)使能類寄存器ICDISPR_CPUn表7.10中斷掛起狀態(tài)使能類寄存器ICDISPR_CPUn(n=0~3)第7章Exynos4412中斷系統(tǒng)4、中斷掛起狀態(tài)清除寄存器ICDICPR_CPUn表7.11中斷掛起狀態(tài)清除寄存器ICDICPR_CPUn(n=0~3)第7章Exynos4412中斷系統(tǒng)5、中斷激活寄存器ICDABR_CPUn表7.12中斷激活寄存器ICDABR_CPUn第7章Exynos4412中斷系統(tǒng)6、中斷結(jié)束寄存器ICCEOIR_CPUn表7.13中斷結(jié)束寄存器ICCEOIR_CPUn(n=0~3)第7章Exynos4412中斷系統(tǒng)7.3.4中斷狀態(tài)查詢寄存器1、?PPI狀態(tài)寄存器PPI_STATUS_CPU表7.19PPI狀態(tài)寄存器PPI_STATUS_CPUn(n=0~3)第7章Exynos4412中斷系統(tǒng)2、SPI狀態(tài)寄存器SPI_STATUSn表7.20SPI狀態(tài)寄存器SPI_STATUSn(n=0~3)第7章Exynos4412中斷系統(tǒng)7.3.5軟件中斷產(chǎn)生寄存器表7.21軟件中斷產(chǎn)生寄存器ICDSGIR第7章Exynos4412中斷系統(tǒng)7.4中斷處理程序?qū)嵗?/p>

通過前面的章節(jié),我們學(xué)會(huì)了Exynos4412中斷工作機(jī)制和相關(guān)寄存器的配置方法。本節(jié)通過一個(gè)簡單的實(shí)例說明Exynos4412中斷的具體應(yīng)用方法。

本實(shí)例設(shè)置K1和K2兩個(gè)按鍵以及Led1和Led2兩個(gè)燈。將利用中斷實(shí)現(xiàn):K1按鍵控制Led1亮滅,K2按鍵控制Led2亮滅。第7章Exynos4412中斷系統(tǒng)7.4.1電路連接K1、K2按鍵分別連接Exynos4412的GPX1_0和GPX1_1引腳,Led1和Led2分別連接Exynos4412的GPM4_7、GPM4_8引腳。對(duì)于Led1燈來說,讀取GPX1_1狀態(tài):高電平時(shí)(K2斷開,常態(tài)),Led1燈滅;低電平時(shí)(K2閉合,按下),Led1燈亮。Led2燈的亮滅操作與Led1燈的設(shè)置方式完全一致。第7章Exynos4412中斷系統(tǒng)圖7.3外部中斷實(shí)例電路原理圖第7章Exynos4412中斷系統(tǒng)7.4.2中斷編程整個(gè)編程包含了四個(gè)方面,分別是:(1)打開中斷允許標(biāo)志位;(2)配置GPIO;(3)配置中斷控制器GIC;(4)編寫中斷處理函數(shù)。編寫的程序代碼如下:第7章Exynos4412中斷系統(tǒng)//step1:嵌入?yún)R編語句,清除CPSR的I位,允許IRQ

_asm__volatile_("mrsr0,cpsr\n""bicr0,r0,#0x80\n""msrcpsr,r0\n":::"r0");第7章Exynos4412中斷系統(tǒng)//step2:配置GPIOGPM4CON&=~((0xf<<24)|(0xf<<28));GPM4CON|=((0x1<<24)|(0x1<<28));GPX1PUD&=~(0xf<<0);//禁止上下拉,將GPX1_0、GPX1_1引腳配置成WAKEUP_INT1[0]//(EXT_INT41[0])、WAKEUP_INT1[1]

(EXT_

INT41[1])GPX1CON|=(0xff<<0);//設(shè)置中斷觸發(fā)方式,將兩個(gè)中斷配置為下降沿觸發(fā)EXT_INT41CON|=((0x2<<0)|(0x2<<4));//EXT_INT41_FLTCON0使能和配置濾波消抖(默認(rèn)打開,可以不設(shè)置)EXT_INT41_FLTCON0|=((0x1<<0)|(0x1<<6)|(0x1<<7)|(0x1<<8)|(0x1<<14)|(0x1<<15));//開中斷,寫0使能EXT_INT41_MASK&=~(0x3<<0);//EXT_INT41_PEND中斷狀態(tài)位,當(dāng)中斷發(fā)生時(shí)自動(dòng)置1,中斷完成后要手動(dòng)清零第7章Exynos4412中斷系統(tǒng)//step3:配置中斷控制器GICICDISER1|=((0x1<<24)|(0x1<<25));//設(shè)置ICDISER,CPU0使能SPI[24]、SPI[25]ICCICR_CPU0|=0x1;//使能CPU0中斷,以便中斷能從CPU接口轉(zhuǎn)達(dá)到相應(yīng)處理器I

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論