ARM中断处理2

前言:

    承接“ARM系列中断处理”,在ARM系列中断处理中介绍了ARM系列的中断的共通流程,这篇文章主要介绍每款芯片独自的中断处理,这里以s3c2410为例子

正文:

   中断本身分为主中断和子中断;

    主中断:占用一条中断信号线的中断,如时钟中断,这个中断单独占用一条CPU中断信号线,即只要CPU检测到该中断线有信号,就必然说明时钟产生了一个中断请求,他们之间的关系是一对一的

    子中断:CPU只能检测到产生中断的中断线上有中断请求,而无法直接判断出来这是哪一种原因引起的中断,所以引入子中断,子中断就是产生中断的原因

中断都是由中断控制器所控制的,当某一个主中断产生的时候,其结果就会保存到中断控制器的SRCPND寄存器中,就是将相应的这个寄存器中的某一位置1,然后CPU通过判断SRCPND寄存器中哪一位被置1,就知道那个硬件产生了中断,但是SRCPND寄存器并不排他,也就是说这个寄存器可以同时有多个位置1,这就表示同时有多个硬件产生了中断。那这个时候就引出一个问题,怎么让CPU知道去处理哪个中断,这个时候就需要做中断屏蔽,通过INTMSK寄存器完成,相应位为0表示中断信号继续传递,否则就屏蔽掉,传递的中断信号就会传到中断控制器寄存器INTMOD中,在这里边做模式判断,默认是所有位为0,0代表是IRQ中断请求,如果某一位置1,则表示有FIQ快速中断产生,快速中断称为快速是因为它的唯一性,同一时间只有他自己,这才保证它会被快速处理,所以INTMOD寄存器同一时间只能有一位为1,通过了模式检测后,就要进行优先级筛选,由中断控制器中PRIORITY寄存器来决定,此时CPU会选择一个优先级高的中断请求,将其传递到下一级,此时就是整个中断请求的筛选过程,不同芯片这个过程是不同的,经过这个过程,中断请求就传递到了INTPND寄存器中,此时根据INTPND寄存器哪一位为1,就可以知道是哪个硬件产生的中断,此时CPU产生一个中断异常,共通部分的中断处理流程就会发生,还有一个寄存器INTOFFSET寄存器它的每一位代表一个中断请求与INTPND寄存器是一一对应的


猜你喜欢

转载自blog.csdn.net/weixin_42135997/article/details/81009531