S3C2440中断

来源:互联网 发布:厦门市大数据管理中心 编辑:程序博客网 时间:2024/05/22 07:49

下图是S3C2440的中断结构图


首先是SRCPND(中断源未决寄存器),由32位构成,每一位与一个中断请求信号相关联。当某个中断源请求中断服务时,SRCPND寄存器中相应位被置为1,因此该寄存器记录了哪个中断源的请求在等待处理。由中断源自动设置,而不管中断屏蔽寄存器中对应的位是否被屏蔽,也不受中断控制器的优先级逻辑影响。

然后是MODE(中断模式寄存器),ARM有两种中断模式,FIQ(快速中断请求,MODE相应位为1),不受屏蔽和优先级的制约;IRQ(中断请求,MODE相应位为0),就是一般的情形,受屏蔽位和优先级影响。接下来讨论的都是IRQ情形

对于IRQ请求,首先经过MASK(中断屏蔽寄存器),相应位为1屏蔽该中断,为0则可以对该中断进行响应。

接下来进行优先级排队,入门时先可以不考虑它。

接下来是INTPND(中断未决寄存器),表明CPU正在或即将响应某个中断。某一时刻INTPND只有一位可以被置1,该位置1 表明其所对应的中断在所有未被屏蔽的中断中优先级最高。

(1)SRCPND和INTPND看似比较类似,实则有着很大的不同。SRCPND表明当前有什么中断被触发了,可以有多位置1,与是否屏蔽和优先级无关INTPND表明CPU将要或正在服务的中断,同一时刻只能有一位置1,是未被屏蔽的有最高优先级的中断。

二者的共同点在于进入中断服务程序后都要对相应位清零,以保证能正确响应下一次中断。并且都是通过写1 清零。(注意这里写1代表清零,0代表保持不变。与这两个寄存器本身的0和1代表的含义不同)

(2)S3c2440有6个外部中断,分别为:EINT0,EINT1.EINT2,EINT3,EINT4_7,EINT8_23。其中EINT4_7,EINT8_23分别都是共享一个中断位的。在外部中断有中断请求时,怎么区别是EINT4还是EINT5或EINT6发生中断呢,这就需要另一个寄存器EINTPEND来判断,由于EINT0~EINT3都独享一个中断,所以EINTPEND只有EINT4~23,读取该寄存器就知道哪个中断触发了。跟SRCPND一样,可以在同一时刻多个位同时为1,用来区分共享中断EINT4_7和EINT8_23具体为哪个或哪几个被触发,该位写1后被清0。

原创粉丝点击