<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          S3C2440系統(tǒng)中斷

          作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏

          1.1S3C2440系統(tǒng)中斷

          CPU和外設(shè)構(gòu)成了計(jì)算機(jī)系統(tǒng),CPU和外設(shè)之間通過(guò)總線進(jìn)行連接,用于數(shù)據(jù)通信和控制,CPU管理監(jiān)視計(jì)算機(jī)系統(tǒng)中所有硬件,通常以兩種方式來(lái)對(duì)硬件進(jìn)行管理監(jiān)視:
          l查詢方式:CPU不停的去查詢每一個(gè)硬件的當(dāng)前狀態(tài),根據(jù)硬件的狀態(tài)決定處理與否。好比是工廠里的檢查員,不停的檢查各個(gè)崗位工作狀態(tài),發(fā)現(xiàn)情況及時(shí)處理。這種方式實(shí)現(xiàn)起來(lái)簡(jiǎn)單,通常用在只有少量外設(shè)硬件的系統(tǒng)中,如果一個(gè)計(jì)算機(jī)系統(tǒng)中有很多硬件,這種方式無(wú)疑是耗時(shí),低效的,同時(shí)還大量占用CPU資源,并且對(duì)多任務(wù)系統(tǒng)反應(yīng)遲鈍。
          l中斷方式:當(dāng)某個(gè)硬件產(chǎn)生需要CPU處理的事件時(shí),主動(dòng)通過(guò)一根信號(hào)線“告知”CPU,同時(shí)設(shè)置某個(gè)寄存器里對(duì)應(yīng)的位,CPU一旦發(fā)現(xiàn)這根信號(hào)線上的電平有變化,就會(huì)中斷當(dāng)前程序,然后去處理發(fā)出該中斷請(qǐng)求。這就像是醫(yī)院重危病房,病房每張病床床頭有一個(gè)應(yīng)急按鈕,該按鈕連接到病房監(jiān)控室里控制臺(tái)一盞指示燈,只要該張病床出現(xiàn)緊急情況病人按下按鈕,病房監(jiān)控室里電鈴會(huì)響起,通知醫(yī)護(hù)人員有緊急情況,醫(yī)護(hù)人員這時(shí)查看控制臺(tái)上的指示燈,找出具體病房,病床號(hào),直接過(guò)去處理緊急情況。中斷處理方式相對(duì)查詢方式要復(fù)雜的多,并且需要硬件的支持,但是它處理的實(shí)時(shí)性更高,嵌入式系統(tǒng)里基本上都使用這種方式來(lái)處理。
          系統(tǒng)中斷是嵌入式硬件實(shí)時(shí)地處理內(nèi)部或外部事件的一種機(jī)制。對(duì)于不同CPU而言,中斷的處理只是細(xì)節(jié)不同,大體處理流程都一樣,S3C2440A的中斷控制器結(jié)構(gòu)如下圖所示:


          圖3-3S3C2440中斷控制器
          中斷請(qǐng)求由硬件產(chǎn)生,根據(jù)中斷源類(lèi)型分別將中斷信號(hào)送到SUBSRCPND(SubSourcePending)和SRCPND(SourcePending)寄存器,SUBSRCPND是子中斷源暫存寄存器,用來(lái)保存子中斷源信號(hào),SRCPND是中斷源暫存寄存器,用來(lái)保存中斷源信號(hào)。中斷信號(hào)可通過(guò)編程方式屏蔽掉,SUBMASK是子中斷源屏蔽寄存器,可以屏蔽指定的子中斷信號(hào),MASK功能同SUBMASK用來(lái)屏蔽中斷源信號(hào)。中斷分為兩種模式:一般中斷的和快速中斷,MODE是中斷模式判斷寄存器,用來(lái)判斷當(dāng)前中斷是否為快速中斷,如果為快速中斷直接將快速中斷信號(hào)送給ARM內(nèi)核,如果不是快速中斷,還要將中斷信號(hào)進(jìn)行仲裁選擇。S3C2440A支持多達(dá)60種中斷,很有可能多個(gè)硬件同時(shí)產(chǎn)生中斷請(qǐng)求,這時(shí)要求中斷控制器做出裁決,Priority是中斷源優(yōu)先級(jí)仲裁選擇器,當(dāng)多個(gè)中斷產(chǎn)生時(shí),選擇出優(yōu)先級(jí)最高的中斷源進(jìn)行處理,INTPND是中斷源結(jié)果寄存器,里面存放優(yōu)先級(jí)仲裁出的唯一中斷源。
          1中斷的產(chǎn)生-中斷源

          S3C2440A支持60種中斷源,基本上滿足了開(kāi)發(fā)板內(nèi)部,外部設(shè)備等對(duì)中斷的需求。其中每一個(gè)中斷源對(duì)應(yīng)寄存器中的一位,顯然要支持60種中斷至少需要二個(gè)32位寄存器,SUBSRCPND和SRCPND分別保存中斷源信號(hào)。S3C2440A對(duì)60種中斷源的管理是按層級(jí)分的。如圖3-4所示:



          圖3-4中斷源信號(hào)復(fù)合示意圖
          S3C2440A將中斷源分為兩級(jí):中斷源和子中斷源,中斷源里包含單一中斷源和復(fù)合中斷源,復(fù)合中斷源是子中斷源的復(fù)合信號(hào)。如實(shí)時(shí)時(shí)鐘中斷,該硬件只會(huì)產(chǎn)生一種中斷,它是單一中斷源,直接將其中斷信號(hào)線連接到中斷源寄存器上。對(duì)于復(fù)合中斷源,以UART串口為例進(jìn)行說(shuō)明,S3C2440A可以支持3個(gè)UART串口,每個(gè)串口對(duì)應(yīng)一個(gè)復(fù)合中斷源信號(hào)INT_UARTn,每個(gè)串口可以產(chǎn)生三種中斷,也就是三個(gè)子中斷:接收數(shù)據(jù)中斷INT_RXDn,發(fā)送數(shù)據(jù)中斷INT_TXDn,數(shù)據(jù)錯(cuò)誤中斷INT_ERRn,這三個(gè)子中斷信號(hào)在中斷源寄存器復(fù)合為一個(gè)中斷信號(hào),三種中斷任何一個(gè)產(chǎn)生都會(huì)將中斷信號(hào)傳遞給對(duì)應(yīng)的中斷源INT_UARTn,然后通過(guò)中斷信號(hào)線傳遞給ARM內(nèi)核。



          圖3-5UART串口中斷源信號(hào)復(fù)合示意圖
          總中斷源詳下面表中列出了S3C2440A部分中斷源,它分別對(duì)應(yīng)中斷源寄存器里某個(gè)位:詳細(xì)中斷源請(qǐng)查看S3C2440A硬件手冊(cè)。
          表3-5部分中斷源信號(hào)

          中斷源描述優(yōu)先級(jí)仲裁分組
          INT_ADC數(shù)模轉(zhuǎn)換觸摸屏中斷ARB5
          INT_RTC實(shí)時(shí)時(shí)鐘中斷ARB5
          INT_UART0UART0中斷(包含子中斷)ARB5
          INT_NFCONNandFlash控制中斷ARB4
          INT_WDT_AC97看門(mén)狗中斷ARB1
          EINT8-23外部中斷8~23(包含外部子中斷)ARB1
          EINT4-7外部中斷4~7(包含外部子中斷)ARB1
          EINT3外部中斷3ARB0
          EINT2外部中斷2ARB0
          EINT1外部中斷1ARB0
          EINT 0外部中斷0ARB0

          中斷信號(hào)除上述分法之外,還可以按照硬件位置分為:外部中斷源和內(nèi)部中斷源。
          l內(nèi)部中斷源:它是嵌入式系統(tǒng)中常見(jiàn)硬件產(chǎn)生的中斷信號(hào),比如:UART串口中斷源,時(shí)鐘Timer中斷源,看門(mén)狗中斷源等
          l外部中斷源:有時(shí)嵌入式系統(tǒng)里要在外部接口上掛載一些外部設(shè)備,這些設(shè)備并不是一個(gè)通用嵌入式系統(tǒng)里必備硬件,比如:藍(lán)牙模塊,各種傳感器,WIFI無(wú)線通信模塊,這些硬件也要產(chǎn)生中斷讓CPU來(lái)處理數(shù)據(jù),因此這些外設(shè)硬件通過(guò)中斷信號(hào)線連接到中斷控制器上,它們產(chǎn)生的中斷叫做外部中斷信號(hào)。它們有著和內(nèi)部中斷一樣的處理機(jī)制,只不過(guò),它沒(méi)有一個(gè)固定的中斷號(hào)與之對(duì)應(yīng),硬件與嵌入式系統(tǒng)的連接方式與中斷處理完全由系統(tǒng)硬件與軟件設(shè)計(jì)者實(shí)現(xiàn)。
          外設(shè)硬件通過(guò)輸入輸出接口I/O Ports掛接到嵌入式系統(tǒng)上,I/O Ports向外設(shè)提供外部中斷信號(hào)線,輸出電源,頻率時(shí)鐘和輸入輸出信號(hào)線,外部硬件根據(jù)自己需要連接到I/O Ports上,產(chǎn)生中斷時(shí)向外部中斷信號(hào)線上送出中斷信號(hào),通過(guò)外部中斷信號(hào)線傳遞到中斷控制器。
          按鍵Key可以認(rèn)為最為簡(jiǎn)單的一種硬件設(shè)備了,如下圖所示:



          圖3-6按鍵硬件接線原理圖
          它功能很簡(jiǎn)單,可以將電路接通,按鍵K1~K6一端接地為低電平,另外一端接電源正極為高電平,EINT8,EINT11,EINT13,EINT14,EINT15,EINT19六根中斷信號(hào)線分別和高電平端按鍵相連,當(dāng)按鍵按下時(shí)電路接通,整個(gè)電路變成低電平,中斷信號(hào)線上電壓產(chǎn)生變化,通過(guò)設(shè)置中斷觸發(fā)方式,產(chǎn)生外部中斷請(qǐng)求,輸入到CPU內(nèi)部,從而實(shí)現(xiàn)按鍵中斷控制。
          S3C2440A可以支持EINT0~EINT23共24種外部中斷,完全可以滿足小型嵌入式設(shè)備外設(shè)硬件的需求。
          外部中斷源也分為外部中斷源和外部子中斷源,其處理方式和內(nèi)部中斷源基本一樣。


          1.1.1中斷優(yōu)先級(jí)



          S3C2440A支持60種中斷,多個(gè)硬件可能同時(shí)產(chǎn)生中斷請(qǐng)求,由于CPU只能處理一個(gè)中斷,中斷控制器怎么選擇出一個(gè)最佳的中斷,交給ARM內(nèi)核進(jìn)行處理呢?中斷控制器采用優(yōu)先級(jí)仲裁比較的方式進(jìn)行選擇,找出優(yōu)先級(jí)最高的中斷源。中斷控制器將60種中斷源分成7組,如下圖所示,它類(lèi)似體育賽事里的比賽方式,所有參賽選手在小組賽PK,選擇出小組賽最優(yōu)秀選手,然后進(jìn)入決賽階段和其它小組最優(yōu)先選擇再PK,最后優(yōu)勝者就是總冠軍。其中ARBITER0~ARBITER5為“小組賽”階段,中斷源信號(hào)在各自小組里進(jìn)行優(yōu)先級(jí)仲裁,選擇出最高優(yōu)先級(jí)中斷信號(hào),每小組選出的中斷信號(hào)送到ARBITER6,也就是決賽階段,選擇出最高優(yōu)先級(jí)中斷信號(hào),交給ARM內(nèi)核。


          圖3-7S3C2440優(yōu)先級(jí)仲裁示意圖
          中斷信號(hào)在7個(gè)分組里PK時(shí)的優(yōu)先級(jí)是可編程的,通過(guò)PRIORITY寄存器進(jìn)行優(yōu)先級(jí)設(shè)置。如下表(只列出PRIORITY寄存器部分位):
          表3-6中斷優(yōu)先級(jí)控制寄存器(PRIORITY)

          寄存器名地址是否讀寫(xiě)描述復(fù)位默認(rèn)值
          PRIORITY0x4A00000CR/W中斷優(yōu)先級(jí)控制寄存器0x7F



          PRIORITY描述初始值
          ARB_SEL6[20:19]仲裁組6優(yōu)先級(jí)排序方式
          00 = REQ 0-1-2-3-4-5
          01 = REQ 0-2-3-4-1-5
          10 = REQ 0-3-4-1-2-5
          11 = REQ 0-4-1-2-3-5
          0x00
          ARB_SEL5[18:17]仲裁組5優(yōu)先級(jí)排序
          00 = REQ 1-2-3-4
          01 = REQ 2-3-4-1
          10 = REQ 3-4-1-2
          11 = REQ 4-1-2-3
          00
          ARB_MODE6[6]仲裁組6優(yōu)先級(jí)是否輪轉(zhuǎn):
          0 =不輪轉(zhuǎn),1 =輪轉(zhuǎn)
          1
          ARB_MODE5[5]仲裁組5優(yōu)先級(jí)是否輪轉(zhuǎn):
          0 =不輪轉(zhuǎn),1 =輪轉(zhuǎn)
          1

          通過(guò)設(shè)置仲裁組n優(yōu)先級(jí)排序方式位,設(shè)置每個(gè)仲裁組內(nèi)中斷信號(hào)的優(yōu)先級(jí)順序,比如:ARB_SEL5分組時(shí)包含四個(gè)中斷信號(hào):REQ1 INT_UART0, REQ2 INT_SPI1, REQ3 INT_RTC, REQ4 INT_ADC,ARB_SEL5位采用默認(rèn)值:00,當(dāng)INT_UART0和INT_RTC中斷信號(hào)同時(shí)產(chǎn)生時(shí),INT_UART0會(huì)被選出,通過(guò)可編程方式改變優(yōu)先級(jí)排序方式來(lái)改變中斷信號(hào)優(yōu)先級(jí)。
          ARB_MODE0~ ARB_MODE6為每個(gè)仲裁分組的優(yōu)先級(jí)輪轉(zhuǎn)設(shè)置位,采用默認(rèn)值時(shí),當(dāng)前中斷信號(hào)被選擇處理之后,再次產(chǎn)生中斷請(qǐng)求時(shí),它的優(yōu)先級(jí)自動(dòng)輪轉(zhuǎn)到該組最低,這樣可以保證優(yōu)先級(jí)低的中斷信號(hào)可以被及時(shí)處理,不至于出現(xiàn)優(yōu)先級(jí)高且中斷請(qǐng)求頻繁的中斷每次都被優(yōu)先處理,而優(yōu)先級(jí)低的被“餓死”的情況。顯然,這種方式更民主,實(shí)時(shí)性更佳。

          2中斷控制器相關(guān)寄存器

          (1)SUBSRCPND子中斷源暫存寄存器
          表3-7子中斷源暫存寄存器(SUBSRCPND)

          寄存器名地址是否讀寫(xiě)描述復(fù)位默認(rèn)值
          SUBSRCPND0x4A000018R/W子中斷源暫存寄存器,保存中斷請(qǐng)求狀態(tài):
          0:沒(méi)有中斷請(qǐng)求信號(hào)
          1:中斷請(qǐng)求信號(hào)產(chǎn)生
          0x00000000



          SUBSRCPND對(duì)應(yīng)SRCPND描述初始值
          Reserved無(wú)[31:15]未使用0
          INT_AC97INT_WDT_AC97[14]0 =未產(chǎn)生中斷1 =產(chǎn)生中斷0
          INT_RXD0INT_UART0[0]0 =未產(chǎn)生中斷1 =產(chǎn)生中斷0

          該寄存器用來(lái)標(biāo)識(shí)保存子中斷源信號(hào),當(dāng)某個(gè)子中斷信號(hào)產(chǎn)生之后,SUBSRCPND對(duì)應(yīng)位被自動(dòng)置1,該位會(huì)一直保持被置位,只到中斷處理程序?qū)⑵淝宄秊橹?,需要注意一下,清除中斷是通過(guò)向?qū)?yīng)位寫(xiě)入1來(lái)清除,而不是寫(xiě)入0,寫(xiě)入0無(wú)效。
          (2)INTSUBMSK子中斷源屏蔽寄存器
          表3-8子中斷源屏蔽寄存器(INTSUBMSK)

          寄存器名地址是否讀寫(xiě)描述復(fù)位默認(rèn)值
          INTSUBMSK0x4A00001CR/W子中斷源信號(hào)屏蔽存寄存器,設(shè)置相應(yīng)位來(lái)屏蔽中斷信號(hào):
          0:未屏蔽,中斷可用
          1:屏蔽中斷信號(hào)
          0xFFFF



          INTSUBMSK描述初始值
          Reserved[31:15]未使用0
          INT_AC97[14]0 =未屏蔽1 =屏蔽中斷1
          INT_RXD0[0]0 =未屏蔽1 =屏蔽中斷1

          該寄存器用來(lái)屏蔽子中斷源信號(hào),默認(rèn)值為全部子中斷都被屏蔽掉,因此要想處理某個(gè)硬件中斷,必須要打開(kāi)中斷屏蔽位,通過(guò)寫(xiě)入0來(lái)取消屏蔽中斷。
          (3)SRCPND中斷源暫存寄存器
          表3-9中斷源暫存寄存器(SRCPND)

          寄存器名地址是否讀寫(xiě)描述復(fù)位默認(rèn)值
          SRCPND0x4A000000R/W中斷源暫存寄存器,保存中斷請(qǐng)求狀態(tài):
          0:沒(méi)有中斷請(qǐng)求信號(hào)
          1:中斷請(qǐng)求信號(hào)產(chǎn)生
          0x00000000



          SRCPND描述初始值
          INT_ADC[31]0 =未產(chǎn)生中斷1 =產(chǎn)生中斷0
          EINT0[0]0 =未產(chǎn)生中斷1 =產(chǎn)生中斷0

          該寄存器用來(lái)保存中斷源信號(hào),當(dāng)某個(gè)中斷信號(hào)產(chǎn)生之后,SRCPND對(duì)應(yīng)位被自動(dòng)置1,該位會(huì)一直保持被置位,只到中斷處理程序?qū)⑵淝宄秊橹?,需要注意一下,清除中斷是通過(guò)向?qū)?yīng)位寫(xiě)入1來(lái)清除,而不是寫(xiě)入0,寫(xiě)入0無(wú)效。
          (4)INTMSK中斷源屏蔽寄存器
          表3-10中斷源屏蔽寄存器(INTMSK)

          寄存器名地址是否讀寫(xiě)描述復(fù)位默認(rèn)值
          INTMSK0x4A000008R/W中斷源信號(hào)屏蔽存寄存器,設(shè)置相應(yīng)位來(lái)屏蔽中斷信號(hào):
          0:未屏蔽,中斷可用
          1:屏蔽中斷信號(hào)
          0xFFFFFFFF



          INTMSK描述初始值
          INT_ADC[31]0 =未屏蔽1 =屏蔽中斷1
          EINT0[0]0 =未屏蔽1 =屏蔽中斷1

          該寄存器用來(lái)屏蔽中斷源信號(hào),默認(rèn)值為全部中斷都被屏蔽掉,因此要想處理某個(gè)硬件中斷,必須要打開(kāi)中斷屏蔽位,通過(guò)寫(xiě)入0來(lái)取消屏蔽中斷。
          (5)INTPND最高優(yōu)先級(jí)中斷暫存寄存器
          表3-11最高優(yōu)先級(jí)中斷暫存寄存器(INTPND)

          寄存器名地址是否讀寫(xiě)描述復(fù)位默認(rèn)值
          INTPND0x4A000010R/W最高優(yōu)先級(jí)中斷暫存寄存器里面保存有經(jīng)過(guò)優(yōu)先級(jí)仲裁的結(jié)果:
          0:沒(méi)有中斷請(qǐng)求信號(hào)
          1:中斷請(qǐng)求信號(hào)產(chǎn)生
          0x00000000



          INTPND描述初始值
          INT_ADC[31]0 =未產(chǎn)生中斷1 =產(chǎn)生中斷0
          EINT0[0]0 =未產(chǎn)生中斷1 =產(chǎn)生中斷0

          該寄存器保存了經(jīng)過(guò)優(yōu)先級(jí)仲裁出的中斷信號(hào)位,它是所有當(dāng)前中斷請(qǐng)求里優(yōu)先級(jí)別最高的中斷,因此該寄存器里的值最多有一位被置1,通常中斷處理程序中會(huì)通過(guò)讀取該寄存器的值來(lái)獲得當(dāng)前正在處理的中斷請(qǐng)求。中斷處理完成之后,通過(guò)寫(xiě)入1來(lái)清除中斷。
          (6)INTOFFSET中斷號(hào)偏移量寄存器
          表3-12中斷號(hào)偏移量寄存器(INTOFFSET)

          寄存器名地址是否讀寫(xiě)描述復(fù)位默認(rèn)值
          INTOFFSET0x4A000014R中斷號(hào)偏移量寄存器,用來(lái)保存當(dāng)前處理的中斷號(hào)0x0000000

          該寄存器里存放的是經(jīng)過(guò)優(yōu)先級(jí)仲裁出的中斷信號(hào)對(duì)應(yīng)的中斷號(hào),是一個(gè)0~31之間的整數(shù),其實(shí)它就是INTPND里對(duì)應(yīng)的位號(hào),比如:INT_UART0產(chǎn)生了中斷,INTPND里第28位置1,INTOFFSET里保存的整數(shù)就是28,多出來(lái)這個(gè)寄存器的目的主要是方便中斷處理程序查詢中斷源,清除中斷源:

          #define TIMER0_IRQ_OFT10//時(shí)鐘0定時(shí)中斷
          #define EINT0_IRQ_OFT0//開(kāi)發(fā)板K1按鍵1對(duì)應(yīng)外部中斷EINT0
          voidhandle_irq()
          {
          unsigned long irqOffSet = INTOFFSET;//取得中斷號(hào)
          switch(irqOffSet)
          {
          case TIMER0_IRQ_OFT://當(dāng)前中斷為定時(shí)器0中斷
          do_timer();//跳入定時(shí)器0處理程序
          break;
          case EINT0_IRQ_OFT://當(dāng)前中斷為K1按鍵觸發(fā)
          do_key1_pressed();//處理K1按下事件
          break;
          }

          SRCPND &= (1<INTPND = INTPND;//清除最高優(yōu)先級(jí)中斷暫存寄存器中斷
          }

          (7)INTMOD中斷模式寄存器
          表3-13中斷模式寄存器(INTMOD)

          寄存器名地址是否讀寫(xiě)描述復(fù)位默認(rèn)值
          INTMOD0x4A000004R/W中斷模式寄存器,指定對(duì)應(yīng)中斷模式:
          0 = IRQ一般中斷模式
          1 = FIQ快速中斷模式
          0x0000000



          INTMOD描述初始值
          INT_ADC[31]0 = IRQ 1 = FIQ0
          EINT0[0]0 = IRQ 1 = FIQ0

          通過(guò)設(shè)置ARM內(nèi)核產(chǎn)生中斷。需要注意的是,快速中斷不存在優(yōu)先級(jí)仲裁,只能有一位被設(shè)置為FIQ模式。


          關(guān)鍵詞: S3C2440系統(tǒng)中

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();