1. 程式人生 > >S5PV210——中斷

S5PV210——中斷

中斷控制器:S5pv210處理器支援93箇中斷源,分成4組來管理

VIC3、VIC2、VIC1、VIC0(EXINT(0),EXINT(1))

===============================================

VIC0 VECT ADDR0 :第一組的第一個中斷處理函式地址

VIC0VECTADDR0 = (unsigned int)exint0_func;  

//VIC0VECTADDR0 = func(每個中斷源都有一個,完成中斷處理程式的註冊)

===============================================

VICADDRESS:包含當前ISR中處於有效狀態的地址,復位值為0x00000000。

//必須在有中斷處於有效狀態時,讀取 VICADDRESS 暫存器,返回ISR的服務地址並設定當前中斷為被服務狀態。此暫存器每組中斷源只有一個,一共4個,在正在處理中斷時,中斷控制器去讀取中斷源對應的中斷處理程式地址,並將其存入 VICADDRESS。必須在中斷服務程式的最後,將該暫存器清零。

寫VICADDRESS暫存器必須在中斷服務結束後,對該暫存器進行寫任何值的操作將會清除當前的中斷。
irq_func_tfunc; 
func =(irq_func_t)VIC0ADDRESS;
/*  中斷向量地址暫存器  */

===============================================

中斷例程:

    //中斷源配置

    EXINT0MASK =0xFFFFFFFF;//1.關閉中斷

    EXINT0PEND =0xFFFFFFFF;//2.清除中斷標誌 

    GPH0CFG |= 0xF;//3.配置GPH0_0管腳為外部中斷0,即XEINT0 

    GPH0PUD &=~0x3;//4.禁止該管腳的上下拉電阻

    EXINT0CON =(EXINT0CON & (~7)) | 0x2;//5.中斷觸發方式為下降沿觸發

    EXINT0FLT = 0;//6.禁止濾波

    //中斷控制器的配置 

    VIC0INTCLEAR |=1;//1.關中斷

    TZICINTSELECT =0;//2.TZICSELECT IRQ選擇(32位暫存器,4個/*選擇IRQ或者FIQ方式*/)

    VIC0INTSELECT =0;//3.VICSELECT IRQ選擇(32位暫存器,4個/*選擇IRQ或者FIQ方式*/)

    VIC0ADDRESS =0;/*4.VIC 0 ADDRESS:一組只有一個,中斷髮生時,使用者從該暫存器中獲取中斷函式地址。中斷服務程式的最後,要將該暫存器清零*/

    VIC0VECTADDR0 =(unsigned int)exint0_func;/*5.VIC 0 VECT ADDR 0:每個中斷源都有一個,完成中斷處理程式的註冊(存放中斷源對應的中斷處理函式的地址), 當中斷來了,中斷控制器讀並將中斷函式處理的地址提交給 VICADDRESS*/


    EXINT0MASK&= ~1;//1.開中斷源的中斷

    VIC0INTENABLE|= 1;//32位,開中斷控制器使能中斷

    enable_irq();//3.開ARM核的中斷響應位CPSR