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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值