1. 程式人生 > >S5PV210-裸機中斷

S5PV210-裸機中斷

1. 結構框圖

中斷圖解
這裡我以外部中斷為例畫出了中斷響應的過程。
- 當外部中斷得到響應,會由硬體自動轉到異常向量表,執行對應的異常處理程式。在這裡指的就是IRQ的處理程式。
- 在異常處理程式IRQ_handle中將會執行現場的保護與恢復,以及最重要的中斷處理函式(注意,這裡就來到了中斷處理部分,而不是異常處理了,相當於是一個兩級的機制)。
- 在中斷處理程式irq_handler中(程式碼如下),將會通過判斷中斷標誌位來找到外部中斷到底來自於VIC0/VIC1/VIC2/VIC3。(S5PV210支援多達93箇中斷,所以有四個中斷控制器來控制。)找到之後,呼叫對應外部中斷的處理函式(即VICnADDR指向的函式)。

void irq_handler(void)
{
    unsigned long vicaddr[4] = {VIC0ADDR,VIC1ADDR,VIC2ADDR,VIC3ADDR};
    int i=0;
    void (*isr)(void) = NULL;
    for(i=0; i<4; i++)
    {
        // 發生一箇中斷時,4個VIC中有3個是全0,1個的其中一位不是0
        if(intc_getvicirqstatus(i) != 0)
        {
            isr = (void (*)(void)) vicaddr[i];
            break
; } } (*isr)(); // 通過函式指標來呼叫函式 }

2. 詳細講述如何找到外部中斷對應的處理函式

在上面我們提到,S5PV210支援多達93箇中斷,而在S3C2440中也支援幾十個中斷,但是兩者的處理方式是截然不同的。
- 在S3C2440中,同樣也有類似於上圖中“外部中斷向量表1”這樣的表格,但是當一個外部中斷髮生後,需要通過輪詢的方式查詢中斷標誌位得到正確的外部中斷編號,然後呼叫對應的中斷處理子函式。這樣處理器的響應時間變長,無法適應高實時性要求。
- S5PV210則用硬體更好地解決了問題,以上面的外部中斷向量表1為例,如果是其中的中斷源發生了中斷,那麼相應的中斷處理函式將會自動複製到VIC0ADDR暫存器當中,不需要人工輪詢,只需要將中斷處理函式寫到“外部中斷向量表1”的對應位置處即可

,,當然了因為S5PV210有四個VIC,所以還是要輪詢四次。

3. 其他

其他諸如中斷使能、中斷模式(IRQ/FIQ)的選擇、中斷引腳的相關配置(GPIO設成外部中斷、觸發方式、中斷使能)、清掛起等不在此贅述。