2440-中断的整个流程分析

1、  在工程int_test中有几个重要文件,可以清晰的知道程序运行时的主要流程:

  首先,在S3C2440A.s中,先有很多宏定义和跳转命令,而程序运行时从复位开始的,如下图所示:

   

  从Reset_Handler开始执行,先设置中断向量表,一级中断源列表,异常中断入口,看门狗,再设置系统时钟等等的一系列初始化工作。当初始化完毕后,则会执行main主函数:如下图:

   

  在主函数中,可根据我们的需要,重新设置系统时钟,设置串口等,其中也要涉及中断初始化工作,如下图:

   

  在中断初始化函数中,我们将自己的中断处理函数挂在中断响应地址上,并对中断相关寄存器做必要修改,例如,我们将HaltUndef这个未定义指令中止的异常处理函数挂载在对应的异常向量pISR_UNDEF(就是一个地址),如下图所示,当产生未定义指令中止异常时则会调用HaltUndef函数进行中断的处理,即中断响应。(这里IRQ异常未被指定中断处理函数)

   

   

  其中pISR_UNDEF在文件2440addr.h中被定义:

   

  上面是一个中断的二级跳转向量表,其中0x4是地址偏移量,_ISR_STARTADDRESS是中断基地址,在文件option.h中被定义:

   

  这里的地址是0x33ffff00,是一个高地址,这是因为中断向量表如果在地地址定义,则很容易被程序所修改,放在高地址是为了提高安全性。所以这里产生的中断向量表为二级跳转后得到的中断向量表。

  在回到main主函数中继续谈起,main主函数中的最后工作时调用我们的测试程序KeyScan_Test,从而跳转执行keyscan.c文件的内容。但在我们的KeyScan_Test函数中并非按键中断处理函数,而是对我们按键中断所需要的外部中断寄存器等做设置,还有将我们真正要执行的按键中断处理函数挂载到外部中断源中,如下图:

   

  pISR_EINT8_23是我们几个按键中断对应的父中断源(一级中断源),在2440addr.h中的中断向量表后面有一级中断源地址的定义:

   

  这里的pISR_EINT8_23有16个子中断源,具体是那个子中断源产生中断则需在中断处理函数中判断出来。

  其实在key_test函数中,有个循环,如下:

   

  这使得整个CPU系统一直在等待按键中断或者用户降入ESC键,有个缺点就是,它跟轮询方式一样一直在占用CPU资源。

 

2、  在等待中断的过程中,如果有按键中断产生,则CPU会产生一系列的中断处理过程,以下做详细讲解。

  CPU在复位时就马上初始化中断向量表(文件2440A.s):

   

  当外部中断产生是,PC会跳转到IRQ_Addr执行:

   

   

  上面有个条件判断

   

  IntVT_SETUP不等于0,跳转到IRQ_Entry执行:

   

  上面的执行结果是:PC跳转到(HandleEINT0的地址值+4*INTOFFSET里的值),这里的按键中断将使得INTOFFSET的值为5(文件S3C2440.pdf):

   

   

  所以,PC将跳转到HandleEINT8_23中断源中,即IntVTAddress+4*5

   

  IntVTAddress定义如下:

   

  则PC跳转到0x33ffff34,而在2440addr.h中又有:

   

  在option.h中有

  所以PC就跳转到pISR_EINT8_23中执行,在keyscan.c中,有:

   

  所以PC最后指向Key_ISR这个函数,执行中断处理函数

   

3、  在线调试时中断时从低地址的中断向量表响应中断的,所以我们要将高地址的中断向量表复制到从0开始的低地址区域。如下:

   

  这里是拷贝1k的代码,实际只要包含从RESET开始到中断跳转地址的那部分代码就行。

  

   

4、   

转载于:https://www.cnblogs.com/suwen/archive/2013/03/16/2963662.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值