新聞中心

        ARM中斷VIC/GIC

        作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
        1. CPSR定義

        31 30 29 28 27 7 6 5 4 3 2 1 0

        本文引用地址:http://www.104case.com/article/201611/317193.htm

        N Z C V Q I F T M4 M3 M2 M1 M0

        N:當(dāng)前指令運(yùn)算結(jié)果的31位數(shù)值,當(dāng)有符號(hào)數(shù)運(yùn)算時(shí)候,N=1表示結(jié)果為負(fù)數(shù),N=0表示為零或者正數(shù);

        Z:Z=1表示運(yùn)算結(jié)果為0;cmp指令執(zhí)行的時(shí)候,Z=1表示比較的兩個(gè)數(shù)相等;

        C:溢出指示……

        I:I=1 禁止IRQ中斷

        F:F=1 禁止FIQ中斷;

        T:T=1 thumb;指示正在執(zhí)行的是arm or thumb

        M4-M0:控制處理區(qū)所處的模式,七種模式之一

        =============================
        VIC : Vectored Interrupt Controller
        1. ARM Core有2個(gè)中斷輸入: IRQ / FIQ
        VIC負(fù)責(zé)管理外設(shè)部件的中斷信號(hào),是外設(shè)中斷源和ARM CPU之間的Bridge.

        VIC具有32個(gè)中斷請(qǐng)求輸入,可將其編程分為3類:

        (1) FIQ,

        FIQ(fast interrpt request)快速中斷請(qǐng)求要求具有最高優(yōu)先級(jí)。如果分配給FIQ的請(qǐng)求多于一個(gè),VIC將中斷請(qǐng)求相或后向ARM處

        理器產(chǎn)生FIQ信號(hào)。當(dāng)只有一個(gè)中斷被分配為FIQ時(shí)可實(shí)現(xiàn)最短的FIQ等待,但如果分配給IFIQ級(jí)的中斷多于1個(gè),F(xiàn)IQ服務(wù)程序需

        要讀取FIQ狀態(tài)寄存器來(lái)識(shí)別產(chǎn)生中斷請(qǐng)求的FIQ中斷源!

        (2) 向量IRQ

        向量IRQ具有中等優(yōu)先級(jí)。該級(jí)別可分別32個(gè)請(qǐng)求中斷的16個(gè)。32個(gè)請(qǐng)求種的任意一個(gè)都可分配到16個(gè)向量IRQ slot中的任意一

        個(gè),其中slot0具有最高優(yōu)先級(jí)

        (3) 非向量IRQ。
        非向量IRQ的優(yōu)先級(jí)最低

        2. 向量中斷、非向量中斷

        (1) 向量中斷就是不同的中斷有不同的入口地址,

        向量中斷實(shí)時(shí)性好,非向量中斷簡(jiǎn)單。向量者,矢量也,即指方向,門路。
        向量中斷------由硬件提供中斷服務(wù)程序入口地址;

        VIC的vecaddr中存放的就是真正的中斷服務(wù)程序的地址,直接取出來(lái)跳過(guò)去執(zhí)行就可以了。所以向量中斷較快。

        向量中斷模式用于RESET、NMI、異常處理。

        當(dāng)向量中斷產(chǎn)生時(shí),控制器直接將PC賦值,如跳劌x0000000d處,而在0x0000000d地址處通常放置

        ISR服務(wù)程序地址LDR PC, =ISR_HANDLER


        (2) 非向量中斷就只有一個(gè)入口地址,進(jìn)去了在判斷中斷標(biāo)志來(lái)識(shí)別具體是哪個(gè)中斷。

        非向量中斷------由軟件件提供中斷服務(wù)程序入口地址


        非向量中斷發(fā)生后,VIC中的vecaddr中會(huì)存放一個(gè)默認(rèn)中斷服務(wù)程序的地址,這個(gè)程序是被所有的非向量中斷公用的,

        他執(zhí)行的作用就是判斷究竟是發(fā)生了那個(gè)非向量中斷,然后再轉(zhuǎn)向真正要被執(zhí)行的中斷服務(wù)程序。

        其實(shí),所有的非向量中斷可以看成是一個(gè)向量中斷。

        非向量中斷模式,有一個(gè)寄存器標(biāo)識(shí)位,跳轉(zhuǎn)到統(tǒng)一的函數(shù)地址,此函數(shù)通過(guò)判別寄存器標(biāo)識(shí)位和優(yōu)

        先級(jí)關(guān)系進(jìn)行中斷處理
        快速中斷FIQ也可以看作是一個(gè)向量中斷,只不過(guò)不需要從VIC的vecaddr中取地址,而是直接跳到相應(yīng)地址執(zhí)行,

        可以看作是一個(gè)指定了向量地址的中斷。

        非向量中斷模式處理方式是一種傳統(tǒng)的中斷處理方法,當(dāng)系統(tǒng)產(chǎn)生中斷的時(shí)候,系統(tǒng)將INTPND寄存器

        中對(duì)應(yīng)標(biāo)志位置位,然后跳轉(zhuǎn)到位于x18處的統(tǒng)一中斷函數(shù)中;該函數(shù)通過(guò)讀取INTPND寄存器中對(duì)應(yīng)

        標(biāo)志位來(lái)判斷中斷源,并根據(jù)優(yōu)先級(jí)關(guān)系再跳到對(duì)應(yīng)中斷源的處理代碼中處理中斷


        3. 為什么會(huì)有向量IRQ和非向量IRQ?

        44B0X 是基于ARM7TDMI的芯片。ARM系列內(nèi)核對(duì)于IRQ中斷的處理就是通過(guò)查詢中斷標(biāo)志寄存器來(lái)確

        定中斷源,并執(zhí)行對(duì)應(yīng)的中斷服務(wù)程序,這也就是非向量中斷處理方法了?

        4B0X的廠家三星為了加快IRQ中斷的響應(yīng)速度,在此基礎(chǔ)上添加了另外一種方法,其實(shí)也就是單片機(jī)

        都采用的固定中斷向量地址的辦法,很明顯這種方法減少了中斷響應(yīng)的時(shí)間?

        向量中斷模式是當(dāng)CPU讀取位于0x18處的IRQ中斷指令的時(shí)候,系統(tǒng)自動(dòng)讀取對(duì)應(yīng)于該中斷源確定地址上的指令取代0x18處的指令,通過(guò)跳轉(zhuǎn)令系統(tǒng)直接跳轉(zhuǎn)到對(duì)應(yīng)地址函數(shù)中,節(jié)省了中斷處理時(shí)間提高了中斷處理速度。



        關(guān)鍵詞: ARM中斷VICGI

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 平乡县| 饶河县| 夏邑县| 六枝特区| 繁昌县| 溧水县| 呼伦贝尔市| 塘沽区| 郑州市| 襄樊市| 青神县| 同心县| 正安县| 罗甸县| 石泉县| 弥渡县| 深圳市| 石屏县| 桂平市| 施甸县| 夏邑县| 河曲县| 绥德县| 赫章县| 南京市| 湖南省| 灵寿县| 上思县| 遂昌县| 陈巴尔虎旗| 雷山县| 营口市| 新郑市| 杂多县| 太谷县| 宁国市| 双江| 阜阳市| 江陵县| 娄底市| 和田市|