第06課 中斷控制器
第6課 中斷體系結構
1. ARM中斷體系結構
7種工作模式
異常
2. S3C2440中斷體系結構
中斷處理過程
相關暫存器
原始碼分析
7種工作模式
每種工作模式有:
不同的暫存器
不同的許可權 (配合mmu)
不同的觸發條件
- 上電後位於 svc
- 發生中斷,IRQ模式
中斷
比如你在家裡看電視,怎麼知道有客人來
- (查詢)每過5分鐘去看看有沒有人來
- (中斷)客人按門鈴
程式想知道key被按下
- 查詢
- 中斷,中斷是一種異常,(資料訪問中止是一種異常,未定義指令中止也是一種異常)
發生異常之後
- CPU進入異常模式,比如中斷模式,或者取址異常模式,相當於切換暫存器
- PC指標=異常入口(固定)
比如要轉入中斷模式,PC指標會指向0x18 HandleIRQ,0x18,0x08這些地址就叫做異常入口
每個模式都有一組暫存器,有的共用,有的不共用每組獨有的暫存器稱謂備份暫存器。
模式轉換過程中
- 保護現場。
儲存非備份暫存器,恢復的時候,恢復儲存的內容即可。
怎麼用中斷,什麼“中斷”
設定中斷,初始化,使能中斷
- 中斷髮生 保護現場
- 中斷處理 分便中斷源,進行不同的處理,清理中斷
- 恢復現場
中斷至少涉及5個方面得暫存器
- 使能/禁止暫存器;
- 分辨中斷源的狀態暫存器;
- 設定中斷條件的暫存器;(比如高低電平,上下跳邊沿觸發)
- 引腳設定即硬體相關的設定
- 優先順序暫存器
從晶片手冊上的介紹
SUB子 SRC源 PND等待
SUB下一級 MASK遮蔽->遮蔽暫存器
SRCPND顯然也是狀態暫存器,使得中斷源等待處理
MASK另一個遮蔽使能暫存器
Priority優先順序暫存器
INTPND看哪些中斷源還在等待
MODE 模式暫存器
IRQ FIQ直接送到CPU去
書上有詳細介紹
看一個程式首先看makefile
可以看出有四個檔案
接下來看程式碼
一上電跳轉到 Reset
可以看出每個異常向量相隔四個位元組,一般處理不在這四個位元組之內,所以用跳轉命令跳轉到別處。
比如說跳轉到Reset對應的程式
設定棧指標才能呼叫C函式,關看門狗等等
HandleUndef:
b HandleUndef
此處為死迴圈,還沒進行處理
最後要設定總中斷I位使能
每個模式的r13記載著每個模式的棧指標。
通過給cpsr暫存器複製,進入中斷模式
進入每個模式的時候,要事先設定好棧指標
ldr sp, =3072
0xd2的值的意思可以在下表尋找
M0~M4代表不同的工作模式
I F位是全域性中斷,快中斷設定。
比如說一開始0xd2-----1101 0010禁止所有的中斷及快中斷
中斷初始化
INTMSK 使能中斷源中斷
發生中斷:
硬體
- 進入中斷模式,切換暫存器,其中最重要一個暫存器還有一個sp暫存器
- pc=IRQ入口地址
軟體:
sub lr,lr, #4
計算返回地址,當前lr值減去4,有ARM架構決定
- b handle IRQ 計算返回地址“被中斷處”的地址
- 儲存現場 暫存器
- 呼叫處理函式
- 分辨中斷
- 處理
- 清除
- 恢復被中斷程式
中斷服務程式
INTOFSET中斷源服務程式,判斷哪個按鍵按下
ENTPND是中斷等待暫存器意味著正在處理中斷,清到可中斷狀態
最後跳轉PC回到中斷前程式位置。