vic是處於晶元外設和arm核心之間的乙個模組,對晶元所有外設中斷進行管理,決定哪些中斷源可以產生中斷、產生哪種型別的中斷以及中斷後執行哪段服務程式。
arm處理器核心具有兩個中斷輸入:向量中斷請求(irq)和快速中斷請求(fiq)。向量中斷控制器使用32個中斷請求輸入,可將其程式設計分配為fiq或向量irq型別。可程式設計分配機制意味著外設中斷的優先順序可動態分配和調整。
快速中斷請求具有最高優先順序。
向量irq具有可程式設計的中斷優先順序。
*arm primecell向量中斷控制器
*對映到ahb位址空間以高速訪問
*支援32個向量irq
*16個可程式設計的中斷優先順序
*在每個可程式設計優先順序內的硬體優先順序固定
*硬體優先順序遮蔽
*任何中斷都可分配為fiq
*軟體中斷功能
中斷源分配表位31
3029
2827
2625
24符號
i2si2c2
uart3
uart2
timer3
timer2
gpdma
sd/mmc位23
2221
2019
1817
16符號
can1&2
usbethernet
bodi2c1
ad0eint3
eint2
lcd位
1514
1312
111098
符號eint1
eint0
rtcpll
ssp1
spi/ssp0
i2c0
pwm0&1位7
6543
210符號
uart1
uart0
timer1
timer0
armcore1
armcore0
-wdt
(1)中斷選擇暫存器 vicintselect 將32個中斷請求分配為fiq和irq
(31:0) 0: 該位對應的中斷請求分配為irq
1: 該位對應的中斷請求分配為fiq
vicintselect=1<(2)中斷使能暫存器 vicintenable 控制32個中斷請求的使能
(3)中斷使能清零暫存器 vicintenclear 允許軟體將中斷使能暫存器中的乙個或多個位清零
(4)軟體中斷暫存器 vicsoftint 該暫存器的內容與32個不同外設功能的中斷請求「相或」
寫0時該位無效,寫1時強制產生與該位相關的中斷請求。
(5)軟體中斷清零暫存器 vicsoftintclear 允許軟體將軟體中斷暫存器中的乙個或多個位清零
寫0時該位無效,寫1時則軟體中斷暫存器中對應位被清除。
(6)軟體優先順序遮蔽暫存器 vicswprioritymask 允許在任何組合中遮蔽單個中斷優先順序(1)向量位址暫存器0-31 vicvectaddr0-31
(2)向量位址暫存器 vicvectaddr
(3)向量優先順序暫存器0-31 vicvectpriority0-31(1)irq狀態暫存器 vicirqstatus
(2)fiq狀態暫存器 vicfiqstatus
(3)原始中斷狀態暫存器 vicrawintr 該唯讀暫存器讀取所有32個中斷請求和軟體中斷的狀態,
0 對應位的中斷請求或軟體中斷未宣告
1 對應位的中斷請求或軟體中斷宣告
vic保護使能暫存器 vicprotection**確定該中斷分配為fiq還是irq中斷
**若分配為fiq,則進行相關的初始化;若分配為irq,再進行相關設定
**清除相應中斷標誌,並使能相應中斷
**編寫中斷服務程式
巢狀向量中斷控制器(NVIC)詳解
在平時的工作中,我們經常會遇到這樣的情況 有人來找你做一些事情,而且這些事情要比手頭的工作更重要。那現在就需要停下手中的工作,先去完成突然到來的這部分工作。這樣的情況也類似於圖論中的關鍵路徑中,突然在當前事件之前插入了乙個新的事件,那我們不得不先去完成之前的那個任務,才能繼續完成後面的工作。上述情況...
巢狀的向量式中斷控制器 NVIC
幾個基本概念 1.arm cortex m3 核心支援 256 個中斷 16 個核心 240 外部 和可程式設計 256 級中斷優先順序的設定,與其相關的中斷控制和中斷優先順序控制暫存器 nvic systick 等 也都屬於cortex m3 核心的部分。其中,stm32 目前支援的中斷共為 84...
linux zynq 中斷控制器
一 zynq中斷說明 uart e0001000 第二個引數是中斷號。傳遞的過程中會區分是否為spi中斷,如果是spi中斷則加16,非spi則加32 所以在devicetree中的生成的中斷號是實際中斷號減去32 二 實際使用過程 pl端配置中斷控制in9 這樣我們在配置裝置樹需 pl int 這裡...