分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
arm920t核心有兩個中斷:irq中斷和快速中斷fiq
fiq和irq是兩種不同型別的中斷,arm為了支援這兩種不同的中斷,提供了對應的叫做fiq和irq處理器模式(arm有7種處理模式)。
一般的中斷控制器裡我們可以配置與控制器相連的某個中斷輸入是fiq還是irq,所以乙個中斷是可以指定為fiq或者irq的,為了合理,要求系統更快響應,自身處理所耗時間也很短的中斷設定為fiq,否則就設定了irq。
如果該中斷設定為了irq,那麼當該中斷產生的時候,中斷處理器通過irq請求線告訴arm,arm就知道有個irq中斷來了,然後arm切換到irq模式執行。類似的如果該中斷設定為fiq,那麼當該中斷產生的時候,中斷處理器通過fiq請求線告訴arm,arm就知道有個fiq中斷來了,然後切換到fiq模式執行。
簡單的對比的話就是fiq比irq快,為什麼快呢?
1:arm的fiq模式提供了更多的banked暫存器,r8到r14還有spsr,而irq模式就沒有那麼多,r8,r9,r10,r11,r12對應的banked的暫存器就沒有,這就意味著在arm的irq模式下,中斷處理程式自己要儲存r8到r12這幾個暫存器,然後退出中斷處理時程式要恢復這幾個暫存器,而fiq模式由於這幾個暫存器都有banked暫存器,模式切換時cpu自動儲存這些值到banked暫存器,退出fiq模式時自動恢復,所以這個過程fiq比irq快。
2:fiq比irq有更高優先順序,如果fiq和irq同時產生,那麼fiq先處理。
3:fiq的中斷向量位址在0x0000001c,而irq的在0x00000018。(也有的在ffff001c以及ffff0018),寫過完整彙編系統的都比較明白這點的差別,18只能放一條指令,為了不與1c處的fiq衝突,這個地方只能跳轉,而fiq不一樣,1c以後沒有任何中斷向量表了,這樣可以直接在1c處放fiq的中斷處理程式,由於跳轉的範圍限制,至少少了一條跳轉指令。
4:irq和fiq的響應延遲有區別
irq的響應並不及時,irq會延遲幾個指令週期才跳轉到中斷向量處,看起來像是在等預取的指令執行完。fiq的響應不清楚,也許比irq快。
中斷延遲:從外部中斷請求訊號發出到執行對應的中斷服務程式isr的第一條指令所需要的時間。通過軟體程式設計來縮短中斷延遲的方法有:中斷優先順序和中斷巢狀。
中斷體系結構主要由中斷源和控制暫存器兩大部分構成,其暫存器主要有4種:模式、遮蔽、優先順序、掛起(標誌)暫存器等
1控制暫存器
1.1模式:
fiq/irq(預設irq)
1.2遮蔽:
中斷是否允許,
1 表示被遮蔽
1.3優先順序:
多個中斷源同時來臨時處理的順序
2狀態:-=> 掛起/標誌
讀該暫存器檢視中斷狀態,
讀到1中斷來臨
寫1清除中斷標誌,寫1有效, 寫0無效,
中斷相關的暫存器
中斷源掛起暫存器 srcpnd
中斷掛起暫存器 intpnd
中斷源遮蔽暫存器 intmsk
中斷模式暫存器 intmod
子中斷源掛起暫存器 subsrcpnd
子中斷源遮蔽暫存器 subintmsk
外部中斷相關暫存器
外部中斷源掛起暫存器 eintpend
外部中斷源遮蔽暫存器 eintmask
外部中斷控制 exitintx
程式狀態暫存器(psr)的f 位和i 位
如果arm920t cpu 中的psr 的f 位被置位為1,cpu 不會接受來自中斷控制器的快中斷請求(fiq)。同樣的如果psr 的i 位被置位為1,cpu 不會接受來自中斷控制器的中斷請求(irq)。因此,中斷控制器可以通過清除psr 的f 位和i 位為0 並且設定intmsk 的相應位為0 來接收中斷。
arm920t 有兩種中斷模式的型別:fiq 或irq。所有中斷源在中斷請求時決定使用哪種型別。
s3c2440a 有兩個中斷掛起暫存器:源掛起暫存器(srcpnd)和中斷掛起暫存器(intpnd)。這些掛起暫存器表明乙個中斷請求是否為掛起。當中斷源請求中斷服務,srcpnd 暫存器的相應位被置位為1,並且同時在仲裁步驟後intpnd 暫存器僅有1 位自動置位為1。如果遮蔽了中斷,則srcpnd 暫存器的相應位被置位為1。這並不會引起intpnd 暫存器的位的改變。當intpnd 暫存器的掛起位為置位,每當i 標誌或f 標誌被清除為0 中斷服務程式將開始。srcpnd 和intpnd 暫存器可以被讀取和寫入,因此服務程式必須首先通過寫1 到srcpnd暫存器的相應位來清除掛起狀態並且通過相同方法來清除intpnd 暫存器中掛起狀態。
此暫存器表明如果中斷相應的遮蔽位被置位為1 則禁止該中斷。如果某個intmsk 的中斷遮蔽位為0,將正常服務中斷。如果intmsk 的中斷遮蔽位為1 並且產生了中斷,將置位源掛起位。
此處中斷控制器中有5 個控制暫存器:源掛起暫存器、中斷模式暫存器、遮蔽暫存器、優先順序暫存器和中斷掛起暫存器。
所有來自中斷源的中斷請求首先被記錄到源掛起暫存器中。基於中斷模式暫存器,它們被分配到2 個組中,包括快中斷請求(fiq)和中斷請求(irq)。irq 的多仲裁過程是基於優先順序暫存器。
srcpnd 暫存器由32 位組成,其每一位都涉及乙個中斷源。如果中斷源產生了中斷則相應的位被設定為1並且等待中斷服務。因此此暫存器指示出是哪個中斷源正在等待請求服務。注意srcpnd 暫存器的每一位都是由中斷源自動置位,其不顧intmask 暫存器中的遮蔽位。另外srcpnd 暫存器不受中斷控制器的優先順序邏輯的影響。
在指定中斷源的中斷服務程式中,必須通過清除srcpnd 暫存器的相應位來正確的獲得來自相同源的中斷請求。如果從isr 中返回並且未清除相應位,則中斷控制器的操作就好像其它中斷請求已經從同乙個源進入了。換句話說,如果srcpnd 暫存器的指定位被設定為1,其通常被認作乙個有效中斷請求正在等待服務。
清除相應位的時間依賴於使用者的需要。如果希望收到來自相同冤源的其它有效請求,則應該首先清除相應位,並且接著使能中斷。
可以通過寫入乙個資料到此暫存器來清除srcpnd 暫存器的指定位。其只清除那些資料中被設定為1 的相應位置的srcpnd 位。那些資料中被設定為0 的相應位置的位保持不變。
此暫存器由32 位組成,其每一位都都涉及乙個中斷源。如果某個指定為被設定為1,則在fiq(快中斷)模式中處理相應中斷。否則則在irq 模式中處理。特別注意,只能有乙個中斷設定為快速中斷模式。
此暫存器由32 位組成,其每一位都都涉及乙個中斷源。如果某個指定為被設定為1,則cpu 不會去服務來自相應中斷源(請注意即使在這種情況中,srcpnd 暫存器的相應位也設定為1)的中斷請求。如果遮蔽位為0,則
可以服務中斷請求。
中斷掛起暫存器中32 位的每一位都表明了是否相應未遮蔽並且正在等待中斷服務的中斷請求具有最高的優先順序。當intpnd 暫存器在優先順序邏輯後被定位了,只有1 位可以設定為1 並且產生中斷請求irq 給cpu。irq 的
中斷服務程式中可以讀取此暫存器來決定服務32 個中斷源的哪個源。
就如srcpnd 暫存器,必須在中斷服務程式中清除了srcpnd 暫存器後清除此暫存器。可以通過寫入資料到此暫存器中來清除intpnd 暫存器的指定位。只會清除資料中設定為1 的相應intpnd 暫存器位的位置。資料
中設定為0 的相應位的位置則保持不變。特別注意:在清除源掛起暫存器和中斷掛起暫存器時,是向暫存器中的相應位寫1,不是寫0,這是由暫存器的硬體結構決定的。
次級源掛起(subsrcpnd)暫存器可以通過寫入資料到此暫存器來清除subsrcpnd 暫存器的指定位。只有資料中那些被設定為1 的相應
subsrcpnd 暫存器的位的位置才能被清除。資料中那些被設定為0 的相應位的位置則保持不變。
此暫存器有11 位,其每一位都與乙個中斷源相聯絡。如果某個指定位被設定為1,則相應中斷源的中斷請求
不會被cpu 所服務(請注意即使在這種情況中,srcpnd 暫存器的相應位也設定為1)。如果遮蔽位為0,則可以
還有就是清除中斷時有子中斷的要先清除子中斷位,再清除中斷位,有子中斷的要設定子中斷遮蔽暫存器開啟子中斷。
設定步驟:
0.相應引腳對應成外部中斷功能
1. 設定觸發方式:上公升沿、下降沿、高電平、
低電平、雙沿觸發
2. 清中斷源掛起暫存器(狀態暫存器)、中斷
服務暫存器(可選、防止原有中斷干擾)
3. 設定中斷模式(irq或fiq可選,預設為irq)
4. 設定中斷優先順序(可選,一般預設即可)
5. 開啟外部中斷遮蔽(允許中斷)
6. 設定中斷服務入口程式
進入中斷:
1、執行中斷服務程式
2、清中斷源掛起暫存器
給我老師的人工智慧教程打call!
ARM9 S3C2440 定時器中斷
在講解之前,先介紹一下s3c2440時鐘系統。一般來說,mcu的主時鐘源主要是外部晶振或外部時鐘,而用的最多的是外部晶振。在正確情況下,系統內所使用的時鐘都是外部時鐘源經過一定的處理得到的。由於外部時鐘源的頻率一般不能滿足系統所需要的高頻條件,所以往往需要pll 鎖相環 進行倍頻處理。在s3c244...
ARM裸機學習一 S3C2440的時鐘體系
s3c2440的系統時鐘圖如下 s3c2440a的主時鐘源由外部時鐘 extclk 或者外部晶振 xtipll 提供,輸入時鐘源由模式控制引腳om3和om2控制選擇,在復位訊號的上公升沿參考om3和om2的引腳將om 3 2 的狀態在內部鎖定 大致過程是 經過om3和om2引腳選擇的外部時鐘進入mp...
基於S3C2440的ARM9基礎程式設計及分析
define led1 off 1 5 define led2 off 1 6 define led3 off 1 7 define led4 off 1 8 led初始化函式,設定gpbcon為輸出埠,並往埠送資料,使所有led處於滅的狀態 void ledinit led輪流閃亮函式,先點亮對應...