1.前言
在介紹基于三星exynos4412型號芯片的中斷處理之前,我們需要先做的是理解arm的異常處理機制,然后在這個基礎之上去學習三星的exynos4412芯片的中斷處理。其實exynos4412使用的CPU核就arm的contex-a9芯片。
2.arm異常處理機制
在arm中,首先將處理器的工作模式分為了7種:user模式、system模式、FIQ模式、IRQ模式、SVC模式、undefined模式和abort模式,在cortex-A系列中,多了一種模式:Monitor 監控模式,這是為了執行代碼安全監控。在這里,要區分下異常和中斷的關系,異常顧名思義就是不正常,與異常相對的就是正常,系統程序在按順序執行過程就是正常過程,除了這種情況外的都是異常情況,那么中斷也是一種異常,鑒于二者之間的這種關系,我們有必要了解下異常的處理:
1)處理器備份CPSR(當前程序狀態寄存器)到對應模式下的SPSR(備份程序狀態寄存器)
方便異常處理結束之后恢復CPSR
2)配置CPSR寄存器:
(1)切換處理器工作狀態到arm狀態
(2)修改處理工作模式到相應模式
(3)根據需要使能或禁止中斷
3)保存返回地址到對應的模式下的LR寄存器
因為異常工作模式下使用的LR和正常模式下(user和system)的不是同一個物理寄存器
4)跳轉到對應的異常向量表中的位置(設置PC為相應的異常向量)
將要跳轉的異常向量表中的地址賦值到PC實現跳轉到異常處理程序
以上步驟是在異常出現時,CPU主動完成的工作,我們只需要在異常處理程序中完成對異常現象的處理就可以了,返回的時候(這兩步是需要程序員來完成的):
1)將SPSR值恢復到CPSR
2)將LR的值恢復到PC實現異常返回
這些都是異常處理以及返回的主要內容
3.中斷處理
上述第2章是對異常處理以及返回的主要內容,那么我們來想象下,這些都是在假設中斷初始化的基礎之上實現的,那么中斷初始化都初始化了那些內容呢?這就需要我們對中斷有一個基本的認識:對于一個處理器芯片來說,他只認識兩種外部中斷:快速訪問中斷和外部中斷,這兩者的區別只是中斷優先級的高低,但是實際上中斷有多個,CPU核也有多個,CPU怎么區分外部中斷哪是哪、這些中斷給那個CPU核來處理,中斷的優先級又是什么,這些都是要有人來完成,而完成這個工作的就是中斷控制器。
但是中斷在到達中斷控制器之前,他是先和引腳連接的,使用的引腳復用功能是外部中斷,這就要求我們在初始化中斷控制器之前先要初始化先這些和引腳以及外部中斷相關的寄存器,接下來初始化中斷控制器的主要內容就是:
1)全局使能中斷控制器
2)使能對應中斷源
3)選擇CPU核處理該中斷
4)配置該中斷優先級
5)打開選擇的CPU核與中斷控制器的接口
綜上所述牽涉到的寄存器配置有: