ARM中斷處理及狀態機嵌套實現

1.ARM7提供兩種級別的中斷, FIQ(Fast Interrupt Request快中斷) 一般中斷低速反應中斷IRQ。
  所有的中斷請求一旦產生則中斷反應會經過三個步驟
  a.輸入階段這個邏輯可以根據中斷源被實現,需要0-2個時鐘週期
  b.EIC自身處理 2個時鐘週期
  c.ARM7的邏輯處理
2.EIC Enhanced Interrupt Controller增強型中斷控制器
  EIC硬件處理多路中斷,中斷優先運算和矢能。
  a.32路可屏蔽的中斷,映射到ARM 的CPU中斷請求總線
  b.每路16級可編程優先級映射IRQ
  c.硬件支持最大16箇中斷嵌套
  d.2路可屏蔽的中斷通過FIQ中斷請求總線
  e.在0x18處的寄存器裝載的是最高優先及中斷用戶自定義的中斷處理地址
  f.16個XTI塊外部中斷
3.中斷處理過程
  1.檢查相關中斷的請求屏蔽位
  2.比較所有中斷請求的優先級,IRQ當前中斷是否優先級高於當前存儲的中斷。
  3.自動裝載EIC_SIRn[31:16]位用戶自定義地址進入EIC_IVR[15:0]中
  4.手動裝載用戶中斷處理高16位地址進入EIC_IVR[31:16]
  5.當新產生一箇中斷則保存先前的中斷優先級進入優先棧中。
  6.當新的中斷被接受則用新的優先級更新當前中斷優先級寄存器
 
EIC_ICR 中斷控制寄存器
31-2保留
1. FIQ_EN:RW是FIQ允許的標誌位置1開啓置0關閉
0.IRQ_EN:RW是IRQ允許的標誌位置1開啓置0關閉

EIC_CICR 中斷頻道控制寄存器
31-5保留
4-0.CIC[4:0]:R是當前中斷的序號,是第幾號中斷由中斷請求發生時硬件寫入

EIC_CIPR當前中斷優先級寄存器
31-4保留
3-0 CIP[3:0]:rw是當前中斷的優先級,在IRQ總線上會自動探測進入的中斷請求優先級
    和當前的優先級的高低。
   
EIC_IVR 中斷矢量寄存器
IVR[31-16]:IRQ用戶寫入的在程序初始化時,是中斷服務的高16位地址
IVR[15-0]:I在中斷請求接受後,從EIC_SIRn[31-16]的自定義服務程序地址拷貝過來

EIC_FIR
3-2FIP[3:2] 是FIQ的中斷頻道
1-0FIE[1:0] 是FIQ的中斷允許標誌位

EIC_IER0中斷啓動寄存器
32爲對應配置32路中斷的運行位


EIC_IEP0中斷啓動寄存器
32對應配置32路中斷的中斷掛靠位根據IER0中設置同步。
note:只讀/寫零的寄存器,在退出中斷服務後ISR,軟件要清除相應的掛靠位,
     才能保證下次不繼續進入這個中斷,這個清除操作帶來一箇中斷結束中斷
     並且保證有已經嵌套的中斷正常彈出,順利執行新的中斷。
     這個中斷位要注意不能隨便清除如果清除了不是期望的中斷位的話,導致
     嵌套堆棧永不恢復。

EIC_SIRn源中斷寄存器
SIV[31-16]是自定義服務地址偏移
15-4保留
3-0優先級 

FSM: 有限狀態機制
     FSM分爲兩種狀態READY和WAIT,這兩種狀態根據ARM7TDMI的nIRQ總線探測出來
     如果全局中斷允許位IRQ_EN標誌被清除,nIRQ無條件的的檢測爲高.在reset的
     時候FSM=READY也就是nIRQ=HIGH,當優先解碼確定了一個新的中斷,FSM=WAIT
     並且nIRQ=LOW。如果要轉到就緒狀態必須強制讀EIC_IVR寄存器內容即處理中
     斷服務或者rest EIC單元。讀EIC_IVR寄存器改變狀態機狀態同時釋放EIC的
     nIRQ總線。
 
STACK:堆棧
 ARM支持15個事件嵌套,嵌套的事件信息均在需要的時候被壓入彈出堆棧。
 事件的信息包括 中斷頻道EIC_CICR interrupt channel,中斷優先級EIC_CIPR
 interrupt priority.
 當FSM=WAIT即狀態機在等待狀態也就是解碼出一個最高優先中斷源時,直接來讀取
 EIC_IVR寄存器會產生內部標誌,需要把EIC_CICR EIC_CIPR入棧,當做完入棧工作
 後纔在第二時鐘週期讀取EIC_IVR進行中斷服務,讀完後內部標誌清除即需要把當前
 的EIC_CICR EIC_CIPR給出棧。 然後更新當前中斷源和當前中斷優先寄存器。
 當FSM=READY的時候EIC_IVR的訪問時候是不產生內部標誌來進行嵌套的。
 在嵌套時當前中斷服務完成後必須清除相應標誌位(具體看EIC_IEP0介紹)
 然後處理上一個被壓棧的中斷。

發佈了53 篇原創文章 · 獲贊 1 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章