关于ARM核异常与中断处理机制研究
当一个异常发生时,ARM处理器总是切换到ARM状态(即非Thumb状态)。Thumb指令集没有包含进行异常处理时需要的一些指令,因此在异常中断时,还是要使用ARM指令。
![ARM处理器框图](http://m.amcfsurvey.com/uphotos/fetch/20130729/150862_1_0.jpg)
每种异常都导致内核进入一种特定的模式。此外,可以通过修改cpsr,进入任何ARM处理器模式。用户和系统模式是仅有的可不通过相应异常进入的2中模式。
当一个异常导致模式的改变时,内核自动的:
把cpsr保存到相应异常模式下的spsr
把pc保存到相应模式下的lr
设置cpsr为相应异常模式
设置pc为相应异常处理程序的入口地址
二.向量表
异常发生时,ARM跳转地址组成的表。
![向量表](http://m.amcfsurvey.com/uphotos/fetch/20130729/150862_1_1.jpg)
三.异常优先级
复位异常是优先级最高的异常,一旦复位异常产生,总是会发生复位异常。注意:当一条不属于ARM或Thumb指令集的指令到达流水线的执行阶段时,若此时没有其它异常发生,就会产生未定义指令异常。ARM处理器会“询问”协处理器,看它能否将其作为一条协处理器指令来处理。由于协处理器在流水线之后,所以指令确认可以在内核的执行阶段进行。如果这条指令不属于任何一个协处理器,则会产生未定义指令异常。
![异常优先级](http://m.amcfsurvey.com/uphotos/fetch/20130729/150862_1_2.jpg)
四.中断
中断延时是指:从外部请求信号发出到取出对应的中断服务程序(ISR)的第一条指令,这期间的间隔时间。
![中断延时](http://m.amcfsurvey.com/uphotos/fetch/20130729/150862_1_3.jpg)
五.中断源及其识别方法
S3C2440A有60个中断源,IRQ有两种中断识别方法:向量中断和非向量中断。FIQ只有非向量中断。在IRQ各个中断源中的某一个中断源的中断请求被响应时,CPU转至0x18处自动加载一条转移指令转至相应中断源的固定中断向量处。IRQ各个中断源的向量地址是固定的,每个占用一个字单元。IRQ各个中断源若采用非向量中断,任意一个中断源发出中断请求,都认为发生了IRQ中断请求,并自动转入IRQ中断服务程序执行。IRQ中断服务程序主要功能是将软件设定的中断向量表中相应的中断源服务程序入口地址送给PC,并转其执行。在非向量中断模式下,一般在IRQ处放置一条转移指令:B IsrIRQ 。其中,IsrIRQ为所有IRQ中断服务程序的总入口地址,也是非向量中断模式的中断源判别及散转程序。
![IRQ中断服务程序](http://m.amcfsurvey.com/uphotos/fetch/20130729/150862_1_4.jpg)
评论