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


你可能感兴趣的:(ARM)