《朱老師物聯網大講堂》學習筆記
學習位址:www.zhulaoshi.org
中斷相關的寄存器
VICnINTENABLE
也就是interrupt enable,負責相應中斷的使能,
VICnINTENCLEAR
也就是interrupt enable clear,負責相應中斷的禁止。
有些CPU上面兩個功能是用一個寄存器實作的,
這樣的話中斷使能要小心,
對它們的操作,要像操作cp15寄存器一樣,
通過讀,改,寫來完成。

VICnINTSELECT
設定為irq或者fiq,一般設定為irq。
irq和fiq有什麼差別?
irq是普通中斷,fiq是快速中斷,
fiq有更快的中斷響應通道,但是隻能有一個被設定為fiq。
CPU如何保證fiq比irq快啊?
1.fiq模式有專用的r8~r12,可以直接使用,不像其它模式,還要儲存寄存器,
2.fiq的中斷處理程式直接在異常向量表中,因為它是異常向量表中最後一個異常。
VICnIRQSTATUS和VICnFIQSTATUS
中斷狀态寄存器,是隻讀的,當發生中斷時,硬體會自動将該位的寄存器置為1,表示中斷發生,
軟體在處理第二階段第一階段适時,就是靠查詢這個寄存器來得到中斷編号的。
VICnVECTPRIORITY0~VICnVECTPRIORITY31
中斷優先級設定寄存器,設定多個中斷同時發生時先處理誰後處理誰得問題,
一般來說高優先級的中斷,可以打斷低優先級的中斷,進而嵌套中斷,
不過也可以設定不支援嵌套中斷。
VICnVECTADDR0~VICnVECTADDR31,VICnADDR
一共有32*4+4個寄存器,
210的尋找isr的機制,就是通過這些寄存器來實作的,
每一個中斷源都有一個VECTADDR寄存器,把中斷ISR位址直接放入這個寄存器接口即可,
VICnADDR這個寄存器是隻讀的,隻需要讀的,裡面的内容是由硬體自動設定的,
當發生了相應的中斷時,硬體會自動識别中斷編号,并且會自動找到這個中斷的VECTADDR寄存器,
然後将其讀出複制到VICnADDR中,我們直接讀出使用即可。
通過硬體實作,避免了軟體查找中斷源和ISR,提高了響應速度。