歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

S3C2440-中斷體系架構

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