歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 關於ARM的中斷--向量與非向量的區別

關於ARM的中斷--向量與非向量的區別

日期:2017/3/1 10:37:36   编辑:Linux編程

向量中斷就是不同的中斷有不同的入口地址,非向量中斷就只有一個入口地址,進去了在判斷中斷標志來識別具體是哪個中斷。向量中斷實時性好,非向量中斷簡單

向量中斷控制器VIC具有32個中斷請求輸入,可將其編程分為3類,FIQ,向量IRQ和非向量IRQ。

FIQ(fast interrpt request)快速中斷請求要求具有最高優先級。如果分配給FIQ的請求多於一個,VIC將中斷請求相或後向ARM處理器產生FIQ信號。當只有一個中斷被分配為FIQ時可實現最短的FIQ等待,但如果分配給IFIQ級的中斷多於1個,FIQ服務程序需要讀取FIQ狀態寄存器來識別產生中斷請求的FIQ中斷源!

向量IRQ具有中等優先級。該級別可分別32個請求中斷的16個。32個請求種的任意一個都可分配到16個向量IRQ slot中的任意一個,其中slot0具有最高優先級

非向量IRQ的優先級最低

1. 中斷優先級不同: 非向量中斷比向量中斷要低(向量中斷則比FIQ優先級低);

2. 兩者的設置方式不同:非向量中斷只需要通過VICDefVectAddr來設置ISR地址,然後在VIC控制器中使能外設中斷即可;而向量中斷配置時,先選擇為IRQ中斷,然後分配中斷通道(即優先級。此為IRQ內部的優先級,不同於FIQ、IRQ與非向量中斷三者的優先級意義),再在VICVectAddrx 中設置ISR地址,最後使能向量中斷。

3. 中斷響應異同:響應過程兩者皆是由VIC硬件來控制,用戶軟件不用干預。共同點是,當中斷產生,處理器進入IRQ模式,並將對應的ISR地址保存寄存器的值,復制到VICVectAddr寄存器中,PC根據此地址進行跳轉,執行相應ISR程序。而區別如下:

a. 非向量中斷:ISR地址由VICDefVectAddr復制到VICVectAddr,如果有多路非向量中斷,在確定是哪路中斷產生時,要通過VICIRQStatus寄存器來查詢;

b. 向量中斷:ISR地址由VICVectAddrx復制到VICVectAddr,如果有多路向量中斷,在同時產生中斷時,處理器響應的是具有最高優先級的IRQ中斷。

4. 中斷服務程序編寫:兩者沒有差異。中斷處理完畢後,皆要先清除中斷標志,再對VICVectAddr執行寫操作,以更新中斷優先級,正常響應下一次中斷。

Copyright © Linux教程網 All Rights Reserved