中斷在計算機體系結構中具有重要的地位。要進行中斷編程,首先要清楚發生中斷時程序的跳轉流程,然後再根據實際的硬件體系結構編程。
中斷跳轉流程
首先,中斷是異常的一種,因此,中斷髮生時,Soc實際上是按照異常的標準處理流程來執行的。
由於CPU上電之後執行的第一條代碼是彙編代碼,所以我們需要在彙編程序中完成異常向量表的裝載,堆棧的初始化等操作,才能執行C語言的程序。
下面是已經啓動的系統在中斷髮生時所執行的操作,前半部分是異常處理流程,後半部分爲中斷專屬的處理流程。
Exynos 4412中斷處理
接觸過ARM9或者ARM11的人或許更熟悉VIC(向量終端控制器),由於Exynos 4412是一款四核處理器,因此不同於以往的終端控制器,它使用了GIC(通用終端控制器)。管理了160箇中斷源,包括Software Generated Interrupts (SGIs), Private Peripheral Interrupts (PPIs) 和 Shared Peripheral Interrupts (SPIs)。
我們只討論SPI,即共享外圍設備中斷。整個過程大致如下圖: