加粗样式本文所作内容:
基于S5PV210芯片实现按键的外部中断处理程序,搭建中断处理流程框架
S5PV210对于中断处理的操作流程
1 外部中断得到触发:
1)外部中断在初始化阶段得到使能
2)外界达到了外部中断的触发条件
2 跳转到向量表:
1)异常向量表在初始化阶段进行了配置ISR处理程序
2)ISR处理程序包含了保护现场和回复现场的功能
3)ISR处理程序能够跳转到中断总ISR_handel程序
3 跳转到对应中断号的中断处理程序
1)对应中断号的中断得到初始化使能
2)在ISR_handel中找到对应出现的中断号
3)在ISR_handel中跳转到对应该中断号的isr中
S5PV210实现外部中断处理的程序流
初始化阶段
1)首先初始化异常向量表:
//初始化异常向量表
r_exception_reset = (unsigned int)reset_exception;
r_exception_undef = (unsigned int)undef_exception;
r_exception_sotf_int = (unsigned int)sotf_int_exception;
r_exception_prefetch = (unsigned int)prefetch_exception;
r_exception_data = (unsigned int)data_exception;
r_exception_irq = (unsigned int)IRQ_handle;
r_exception_fiq = (unsigned int)IRQ_handle;
2)然后初始化芯片的中断系统:先全部中断号禁止中断,然后中断工作模式为IRQ,然后清除中断跳转寄存器
//禁止所有中断
VIC0INTENCLEAR = 0xFFFFFFFF;
VIC1INTENCLEAR = 0xFFFFFFFF;
VIC2INTENCLEAR = 0xFFFFFFFF;
VIC3INTENCLEAR = 0xFFFFFFFF;
//配置中断类型 (默认全部为IRQ工作模式)
VIC0INTSELECT = 0x0;
VIC1INTSELECT = 0x0;
VIC2INTSELECT = 0x0;
VIC3INTSELECT = 0x0;
//清除中断跳转寄存器
VIC0ADDR = 0;
VIC1ADDR = 0;
VIC2ADDR = 0;
VIC3ADDR = 0;
3)设置想要调试的外部中断:设置对应GPIO的工作模式外外部中断模式,使能对应的外部中断,设置外部中断的触发方式
//配置IO引脚为外部中断工作模式
rGPH0CON |= (0xFF<<8);
rGPH2CON |= (0xFFFF<<0);
//配置对应外部中断号下中断触发形式:下降沿触发
rEXT_INT_0_CON &= ~(0xFF<<8);
rEXT_INT_0_CON |= ((2<<8)|(2<<12));
rEXT_INT_2_CON &= ~(0xFFFF<<