您的位置:首页 > 其它

嵌入式arm学习总结(七)--中断-基于S3C2440

2013-11-28 16:04 211 查看

1.中断执行过程

1)保存中断前PC值

2)保持中断前CPSR到spsr

3)修改CPSR的相应值,进入相应异常模式

4)执行异常

5)现将SPSR还原到CPSR

6)还原PC

   ARM硬件不支持相同异常中断嵌套

   如果相同异常嵌套,必须通过软件来保存CPSR和PC的值

   不同异常中断硬件支持嵌套

2.s3c2440的中断

共60个终端源,有五种中断触发方式

3.ARM中断响应过程--详细过程

中断初始化总共分为7步,只要初始化后,只要触发中断,那么程序直接跳入中断服务函数

第一步:配置I/O口为中断功能

第二步:配置外部中断触发模式

第三步: EINTPEND外中断挂起寄存器,清除时要写1相当于为0,清除中断请求标志,写0无效。可以不要,开机复位时自动为0.

第四步:EINTMASK外中断屏蔽寄存器,为0允许中断,为1屏蔽中断。是否屏蔽外中断

第五步:清除外部总中断标志:EINT8_23在寄存器SRCPND(中断源请求寄存器),目的允许中断

        如果是外部中断需要清两个寄存器,一个为EINTPEND和SRCPND寄存器相应位

第六步:设置中断服务函数,告诉CPU外中断8-23的入口地址

第七步:intmask总中断屏蔽寄存器,写0开总中断,EINT8_23开8-23外部总中断

第八步:前面设置完以后,就可以执行按键中断程序了,如果退出按键测试中断,那么往下执行

*********************************************************************************************************************************

void KeyScan_Test(void)

{

    //第一步:配置I/O口为中断功能

    rGPGCON = rGPGCON & (~((3<<0)|(3<<6)|(3<<10)|(3<<12)|(3<<14|(3<<22)))) | ((2<<0)|(2<<6)|(2<<10)|(2<<12)|(2<<14|(2<<22))) ;  

    //第二步:配置外部中断触发模式,配置为下降沿,寄存器设定EINT0-EINT23的触发方式  

    rEXTINT1  = (2<<0)|(2<<12)|(2<<20)|(2<<24)|(2<<28);                   

    rEXTINT2  = (2<<12);

    //第三步: EINTPEND外中断挂起寄存器,清除时要写1相当于为0,清除中断请求标志,写0无效。可以不要,开机复位时自动为0.               

    rEINTPEND |=   (1<<8)|(1<<11)|(1<<13)|(1<<14)|(1<<15)|(1<<19);  //clear  清除8,,11,13,14,15,19六个中端中标志位,允许中断

    //第四步:EINTMASK外中断屏蔽寄存器,为0允许中断,为1屏蔽中断。  是否屏蔽外中断

    rEINTMASK &= ~((1<<8)|(1<<11)|(1<<13)|(1<<14)|(1<<15)|(1<<19));  //enable

    //第五步:清除外部总中断标志:EINT8_23在寄存器SRCPND(中断源请求寄存器),目的允许中断

    //如果是外部中断需要清两个寄存器,一个为EINTPEND和SRCPND寄存器相应位

    ClearPending(BIT_EINT8_23);  

    //第六步:设置中断服务函数,告诉CPU外中断8-23的入口地址

    pISR_EINT8_23 = (U32)Key_ISR;

    //第七步:intmask总中断屏蔽寄存器,写0开总中断,EINT8_23开8-23外部总中断

    EnableIrq(BIT_EINT8_23); 

    //第八步:前面设置完以后,就可以执行按键中断程序了,如果退出按键测试中断,那么往下执行

   

}

*********************************************************************************************************************************

进入中断第一步:判断是哪一个中断,然后清除中断标志
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arm 嵌入式 中断