歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> S3C2440-中斷體系架構

S3C2440-中斷體系架構

日期:2017/3/1 9:19:52   编辑:Linux編程

1.ARM的體系與架構

1.1.ARM體系的CPU有以下其中工作模式:

  • 用戶模式 (usr)
  • 快速中斷模式 (fiq)
  • 中斷模式 (irq)
  • 管理模式 (svc)
  • 數據訪問終止模式 (abt)
  • 系統模式 (sys)
  • 未定義指令終止模式 (und)

1.2.ARM寄存器:

  • 31個通用寄存器 : R0~R7(未備份寄存器) , R8~R14(備份寄存器) , R15( 程序計數器PC )
  • 6個狀態寄存器 : CPSR( 當前程序狀態寄存器) , SPSR(備份程序狀態寄存器)

2.ARM狀態下當異常發生時, 處理器將切換進相應的模式:

2.1. 當異常發生時, 處理器將自動完成以下事情 :

  • 在異常工作模式的連接寄存器R14中保存前一個工作模式的下一條指令(即將執行)的地址,

對於ARM狀態, 這個值是當前PC值加4或者加8

  • 將CPSR的值復制到異常模式的SPSR
  • 將CPSR的工作模式位設為這個異常對應的工作模式
  • 令PC值等於這個異常模式在異常向量表中的地址 , 即跳轉到異常向量表中執行對應的指令

2.2. 當從異常模式返回到之前的工作模式時, 則需軟件完成以下工作 :

  • 進入異常時, R14保存了前一個工作模式的下一個指令地址 ,所以要將他減去一個適當的值
  • 將SPSR的值復制回CPSR

2.3. 關於R14在發生異常時保存的地址參考表:

3. 使用中斷的步驟 :

3.1. 設置好中斷模式和快速中斷模式下的棧 , 它們分別使用自己的棧

3.2. 准備好中斷處理函數 :

  • 異常向量地址 : irq(0x00000018) , fiq(0x0000001c)
  • 中斷服務程序(isr) : 對於irq,通過判斷INTPND或者INTOFFSET來確定中斷源, fiq只有一個中斷
  • 清除中斷 : 如果不清除中斷會讓CPU誤以為中斷又一次發生了

3.3. 進入、退出中斷或快速中斷時, 需要保存、回復中斷的運行環境

3.4. 設置中斷涉及到的寄存器 .

3.4.1. 外部中斷被分為被SUBSRCPND/SUBMASK寄存器控制的中斷,不被

SUBSRCPND/SUBMASK寄存器控制的中斷.

3.4.2. 外部中斷必須經過SRCPND( SOURCE PENDING)寄存器的控制

3.4.3. 外部中斷最終經過INTMASK(中斷屏蔽)與INTMODE(中斷模式)寄存器

的控制

3.4.4. 外部中斷經過PRIORITY(優先級寄存器)的仲裁決定優先級

3.4.5. 通過INTPND寄存器來確認中斷的發生以及清除中斷 ,同一時間內只有一位

被置一

Copyright © Linux教程網 All Rights Reserved