【ARM】Exynos 4412 中斷理論分析

中斷在計算機體系結構中具有重要的地位。要進行中斷編程,首先要清楚發生中斷時程序的跳轉流程,然後再根據實際的硬件體系結構編程。

中斷跳轉流程


首先,中斷是異常的一種,因此,中斷髮生時,Soc實際上是按照異常的標準處理流程來執行的。

由於CPU上電之後執行的第一條代碼是彙編代碼,所以我們需要在彙編程序中完成異常向量表的裝載,堆棧的初始化等操作,才能執行C語言的程序。

下面是已經啓動的系統在中斷髮生時所執行的操作,前半部分是異常處理流程,後半部分爲中斷專屬的處理流程。

Created with Raphaël 2.1.0產生中斷(異常)(以下操作由處理器自動完成)1. 複製CPSR到SPSR2. 修改CPSR 2.1 使處理器進入ARM狀態 2.2 使處理器進入相應的異常模式 2.3 根據情況屏蔽IRQ和FIQ中斷3. 將PC-4的值存入LR4. 修改PC的值爲相應的異常向量(IRQ或FIQ)1. 執行異常向量表中的指令,跳轉到中斷處理彙編程序2. 執行中斷處理彙編程序 2.1 修正LR的值(LR = LR - 4) 2.2 保護現場,將{r0 – r12, lr}壓入堆棧 2.3 跳轉到中斷處理函數,一般使用C語言編寫 2.4 恢復現場,不僅需要恢復{r0 – r12, lr},還要恢復CPSRCPU回到被中斷的指令繼續執行

Exynos 4412中斷處理


接觸過ARM9或者ARM11的人或許更熟悉VIC(向量終端控制器),由於Exynos 4412是一款四核處理器,因此不同於以往的終端控制器,它使用了GIC(通用終端控制器)。管理了160箇中斷源,包括Software Generated Interrupts (SGIs), Private Peripheral Interrupts (PPIs) 和 Shared Peripheral Interrupts (SPIs)。

我們只討論SPI,即共享外圍設備中斷。整個過程大致如下圖:

Created with Raphaël 2.1.0SPI中斷源產生中斷信號外設層次:1. GPIO 引腳配置爲中斷模式。2. 設置中斷觸發方式,有上升沿、下降沿、高電平、低電平、雙沿觸發。3. 在 IO 控制器中關閉 GPX1_1 的中斷屏蔽,使能中斷。至此, GPIO 相關基礎器都已經配置好,中斷信號已經可以進入到中斷控制器。---注意:由於芯片手冊描述不清,實際上存在以下對應關係:WAKEUP_INTm[n] 的中斷配置寄存器爲 EXT_INTm[n] 。GIC層次:1. 在GIC Interrupt Table 中查找中斷的SPI號和中斷號。2. 配置 GIC 中斷控制器 ICDISER 使能相應的中斷。3. 配置 GIC 中斷控制器 ICCICR_CPUn 使能 CPU0 中斷。4. 配置 CPU0 優先級過濾寄存器 爲0xff,允許所有中斷通過。5. 配置 GIC 全局中斷使能寄存器 ICDDCR ,啓動終端控制器6. 配置寄存器 ICDIPTR,將中斷送到 CPU0 通道先清除 GPIO 中斷掛起寄存器 EXT_INT41_PEND;再清除 GIC 中斷控制器中掛起位,通過寄存器 ICDICPR 完成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章