- ===================
- 中断体系结构
- ===================
- 一、ARM体系CPU的7种工作模式
- ---用户模式(usr)
- ---快速中断模式(fiq)
- ---中断模式(irq)
- ---管理模式(svc)
- ---数据访问终止模式(abt)
- ---系统模式(sys)
- ---未定义指令中止模式(und)
- 2、ARM体系的CPU有以下两种工作状态:
- ---ARM状态:此时处理器执行32位的字对齐的ARM指令;
- ---Thumb状态:此时处理器执行16位(半字)对齐的Thumb指令;
- (注:)
- ---CPU一上电就处于ARM状态.
- 二、当一个异常发生时,将切换进入相应的工作模式,这时ARM920T CPU核将自动完成:
- (1):在异常工作模式的连接寄存器R14中保存前一个工作模式的下一条,即将执行的指令的地址.(对于ARM状态,这个值是当前PC值加4或加8);
- (2):将CPSR的值复制到异常模式的SPSR;
- (3):将CPSR的工作模式位设为这个异常模式对应的工作模式;
- (4):令PC值等于这个异常模式在异常向量表中的地址,即跳转去执行异常向量表中的相应指令;
- 相反:从异常模式退回到之前的工作模式,需通过软件来执行:
- (1):前面进入异常模式时,连接寄存器中保存了前一工作模式的一个指令地址,将它减去一个适当的值(4/8)后赋给PC寄存器.
- (2):将SPSR的值复制回CPSR.
- 三、S3C2440中断控制器
- ---CPU运行过程中,如何知道各类外设发生了某些不预期的事件:
- (1):查询方式
- ---程序循环地查询各设备的状态并作出相应反应.(缺点:占用CPU资源过高,不适用于多任务系统);
- (2):中断方式
- ---当某事件发生时,硬件会设置某个寄存器;CPU在每执行完一个指令时,通过硬件查看这个寄存器,如果发现所关注的事件发生,则中断当前程序流程,跳转到一个固定的地址处理这事件,最后返回继续执行被中断程序.它的实现相对复杂,但是效率很高,是常用的方式;
- 2、不论何种CPU,中断的处理过程是相似的:
- (1):中断控制器汇集各类外设发出的中断信号,然后告诉CPU;
- (2):CPU保存当前程序的运行环境(各个寄存器等),调用中断服务程序(ISR:interrupt service routine)来处理这些中断.
- (3):在ISR中通过读取中断控制器\外设的相关寄存器来识别这是哪个中断,并进行相应的处理.
- (4):清除中断:通过读写中断控制器和外设的相关寄存器来实现.
- (5):最后恢复被中断程序的运行环境(即上面保存的各个寄存器等),继续执行.
- 3、对于手册Figure 14-1(P378):
- (1):SUBSRCPND和SRCPND寄存器表明有哪些中断被触发了,正在等待处理(pending);SUBMASE(INTSUBMSK寄存器)和MASK(INTMSK寄存器)用于屏蔽某些中断.
- (2-1):"Request sources(without sub -register)"中的中断源被触发之后,SRCPND寄存器中相应位被置1,如果此中断没有被INTMSK寄存器屏蔽或者快速中断的话,它将被进一步处理.
- (2-2):"Request sources(with sub -register)"中的中断源被触发之后,SUBSRCPND寄存器中相应位被置为1,如果此中断没有被INTSUBMSK寄存器屏蔽的话,它在SRCPND寄存器中相应的位置也被置1,之后就像(2-1)处理一样了.
- (3):在SRCPND寄存器中,被触发的中断的相应位置1,等待处理...
- (3-1):如果被触发是中断中有快速中断(FIQ)--MODE(INTMOD寄存器)中为1的位对应的中断是FIQ,则CPU进入快速中断模式进行处理;
- (3-2):对于一般中断的IRQ,可能同时有几个中断被触发,未被INTMSK寄存器屏蔽的中断经过比较后,选出优先级最高的中断,此中断在INTPND寄存器中的相应位被置1,然后CPU进入中断模式进行处理.中断服务程序可以通过读取INTPND寄存器或者INTOFFSET寄存器来确定中断源.(图中的"Priority"表示中断的优先级判选,通过PRIORITY寄存器进行设置);
- 4、概括使用中断的步骤:
- (1):设置好中断模式和快速中断模式下的栈;
- (2):准备好中断处理函数;
- (3):进入、退出中断模式或快速中断模式时,需要保存、恢复被中断程序的运行环境;
- (4):根据具体中断,设置相关的外设;
- (5):对于"Request sources(with sub -register)"中的中断,将INTSUBMSK寄存器中相应位设为0;
- (6):确定使用此中断的方式:FIQ或IRQ.
- (7):如果是IRQ,将INTMSK寄存器中相应位设为0(FIQ不受INTMSK寄存器控制);
- (8):设置CPSR寄存器中的I-bit(对于IRQ)或F-bit(对于FIQ)为0,使能IRQ或FIQ;
- 5、中断控制器寄存器详见S3C2440手册.
阅读(1646) | 评论(0) | 转发(0) |