新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于arm中的中斷處理

關(guān)于arm中的中斷處理

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
中斷處理的流程
1.cpu內(nèi)部的中斷控制器收集外部各個(gè)中斷,經(jīng)過(guò)一個(gè)的處理以后在報(bào)給cpu
2.然后cpu保存現(xiàn)場(chǎng),調(diào)用中斷服務(wù)程序(ISR)
3.用ISR去識(shí)別相應(yīng)的中斷,然后調(diào)用相應(yīng)的中斷處理程序
4.處理完以后就進(jìn)行清除中斷
5.恢復(fù)被中斷的程序


這就是中斷處理的流程,下面是對(duì)第一步的過(guò)程進(jìn)行詳細(xì)的介紹。
根據(jù)2440手冊(cè)上的介紹,把這一部分用一副圖進(jìn)行描述


request sources:中斷請(qǐng)求源.
這里的中斷請(qǐng)求源被分成了2個(gè)不同的類型,一個(gè)是有子中斷(with sub-register),一個(gè)是沒(méi)有子中斷的,從圖中可以得知不同的類型在中斷的處理過(guò)程也是不一樣的。


1.with sub-register 的處理過(guò)程
SUBSRCPND
這個(gè)寄存器的每一位都對(duì)應(yīng)著一個(gè)子中斷源,如果出現(xiàn)相應(yīng)的中斷,則會(huì)將相應(yīng)的位置位為"1",如果要清除這個(gè)中斷,則向相應(yīng)位置"1"就可以(我也很不明白,不過(guò)手冊(cè)上是這么寫(xiě)的)
SUBMASK
這個(gè)寄存器的作用是如果對(duì)應(yīng)位是1則就屏蔽這個(gè)中斷,如果是0的話就允許這個(gè)中斷往上去
SRCPND
這個(gè)寄存器與SUBSRCPND這個(gè)寄存器的作用差不多,不過(guò)區(qū)別在于是SUBSRCPND是指示子中斷,而SRCPND則是用來(lái)指示某一類的中斷,可以說(shuō)是一大類的。
MASK
這個(gè)也有寄存器的,就是INTMASK 這個(gè)寄存器的作用其實(shí)和SUMMASK的作用差不多,也是用來(lái)屏蔽SRCPND上報(bào)的幾個(gè)中斷,不過(guò)不一樣的是,如果中斷是FIQ的話是不可屏蔽的,RIQ是可以屏蔽的
MODE
這個(gè)寄存器是INTMODE,這個(gè)寄存器很簡(jiǎn)單的,他是用來(lái)對(duì)應(yīng)SRCPND中的中斷的,如果某一位置為”1“的話,那就說(shuō)明這個(gè)中斷是FIQ的,那cpu就會(huì)立即進(jìn)入FIQ模式的,不過(guò)這個(gè)通常是用在緊急的中斷的.從圖中也可以看出來(lái)這個(gè)關(guān)系


Priority(優(yōu)先級(jí))
不可能每一次都只有一個(gè)中斷會(huì)出現(xiàn),所以對(duì)于多中斷出來(lái)的時(shí)候應(yīng)該怎么處理....


這就是arm的中斷仲裁器
總共有7個(gè)仲裁器,每一個(gè)仲裁器都可以處理6個(gè)中斷源(REQ0,REQ1,REQ2,REQ3,REQ4,REQ5)
那關(guān)于優(yōu)先級(jí)又是怎么區(qū)別的?
Each arbiter can handle six interrupt requests based on the one bit arbiter mode control (ARB_MODE) and two
bits of selection control signals (ARB_SEL) as follows:
If ARB_SEL bits are 00b, the priority order is REQ0, REQ1, REQ2, REQ3, REQ4, and REQ5.
If ARB_SEL bits are 01b, the priority order is REQ0, REQ2, REQ3, REQ4, REQ1, and REQ5.
If ARB_SEL bits are 10b, the priority order is REQ0, REQ3, REQ4, REQ1, REQ2, and REQ5.
If ARB_SEL bits are 11b, the priority order is REQ0, REQ4, REQ1, REQ2, REQ3, and REQ5.
Note that REQ0 of an arbiter always has the highest priority, and REQ5 has the lowest one. In addition, by
changing the ARB_SEL bits, we can rotate the priority of REQ1 to REQ4.
Here, if ARB_MODE bit is set to 0, ARB_SEL bits doesn’t change automatically changed, making the arbiter to
operate in the fixed priority mode (note that even in this mode, we can reconfigure the priority by manually
changing the ARB_SEL bits). On the other hand, if ARB_MODE bit is 1, ARB_SEL bits are changed in rotation
fashion, e.g., if REQ1 is serviced, ARB_SEL bits are changed to 01b automatically so as to put REQ1 into the
lowest priority. The detailed rules of ARB_SEL change are as follows:
If REQ0 or REQ5 is serviced, ARB_SEL bits are not changed at all.
If REQ1 is serviced, ARB_SEL bits are changed to 01b.
If REQ2 is serviced, ARB_SEL bits are changed to 10b.
If REQ3 is serviced, ARB_SEL bits are changed to 11b.
If REQ4 is serviced, ARB_SEL bits are changed to 00b.


每一個(gè)仲裁器可以處理6個(gè)中斷請(qǐng)求,這些仲裁器是基于1位的(ARB_MODE)和2位的(ARB_SEL)
如果ARB_SEL是00,那么優(yōu)先級(jí)就是REQ0, REQ1, REQ2, REQ3, REQ4, and REQ5.
下面依次類推
不過(guò)我們發(fā)現(xiàn)REQ0 和REQ5是優(yōu)先級(jí)最高和最低是不變的。
關(guān)鍵是ARB_MODE這個(gè)值是有什么用的,關(guān)于這個(gè)值的主要的作用是優(yōu)先級(jí)是否會(huì)自動(dòng)變化,如果ARB_MODE是0的話,那么這個(gè)優(yōu)先級(jí)的不會(huì)自動(dòng)變化的,優(yōu)先級(jí)是你一開(kāi)始自己要設(shè)定要的,如果是1的話,那么這個(gè)優(yōu)先級(jí)是會(huì)自動(dòng)變化的,這個(gè)變化是循環(huán)的,讓ARB_SEL循環(huán)變化的
規(guī)則:
如果是REQ0 或者是REQ5的話,那么ARB_SEL則不變化
如果是REQ1服務(wù),那么ARB_SEL就會(huì)變成01,就這樣依次繼續(xù)。對(duì)于這個(gè)在寄存器PRIORITY這個(gè)寄存器中設(shè)置。


INTPND 這個(gè)是經(jīng)過(guò)來(lái)了中斷優(yōu)先級(jí)仲裁器優(yōu)先級(jí)選定過(guò)以后的中斷,讓這個(gè)寄存器是用來(lái)標(biāo)識(shí)這個(gè)中斷的,這樣cpu就可以知道有什么中斷了。不過(guò)這個(gè)寄存器很特殊就是同一個(gè)時(shí)間它只能一個(gè)位為1...


關(guān)鍵詞: arm中斷處

評(píng)論


技術(shù)專區(qū)

關(guān)閉