ARM的中断产生到处理过程
扫描二维码
随时随地手机看文章
ARM的中断产生到处理过程(底层的东西)
ARM中中断分两种IRQ&FIQ,
其中片内外设的东西一般都定义成IRQ,这个定义是在VIC模块,即中断向量控制模块中控制的,该控制的寄存器为VICintselect共有32位,其中每位都有对应的中断来源,比如说第18位表示A/D转换,第0位WDT等,当然中断源没有32个,但VIC最多可处理32个中断源。ARM中的中断源目前为止有16个,从19--31位为保留位。
ARM处理器分为7种模式:
系统模式,用户模式,还有5种异常模式,而这5种异常模式中包含有IRQ&FIQ异常,也就是说,当发生IRQ或FIQ后,系统要进入相应的异常模式进行处理,这些是由硬件实现的。
产生异常后,ARM核会做以下工作:
1.将当前的地址加4or加8存到LR寄存器里,即把当前状态下下一条指令的地址存入LR
2.将CPSR复制到SPSR,
3.然后将异常模式的状态强制写入CPSR
4.强制PC从相关的异常向量处取指!!
我想这些东西都是由硬件来完成的。
当然了,进入异常模式后就关中断吧,为了避免中断嵌套,这个不是不可以,只是处理起来太麻烦,所以最好是禁止中断嵌套!
那么以下的东西就好理解了,我们来看看PC从异常向量处取指后的工作,
1.程序进入异常处理模式,比如说我们现在进入了IRQ模式,我看看启动代码。
发现在异常向量表中,入口处的第一句指令就是LDR PC,(中断处理子函数的地址)
即将也就是说,程序直接开始进入了中断处理子函数,延时时间非常短,而子函数就由你自己来编写了。
这样进入中断的过程以及中断处理就清楚了吧!!
当然中断处理结束以后啊,ARM核还是要做一些工作的。
1.返回原程序,LDR PC,LR
2.将SPSR复制回CPSR
3.开中断