ARM7TDMI内核CPU在响应中断后会切换到异常模式下:FIQ中断是进入快中断模式,IRQ中断时进入中断模式(ARM7TDMI内核有7种模式:用户模式,系统模式,快中断模式,中断模式,管理模式,中止模式和未定义模式,其中后5种被称为异常模式。
中断处理过程,ARM7进入及退出快中断模式和中断模式的过程(中断响应过程)如下:
① 将下一条指令的地址复制到LR(R14)中(在ARM状态下)。
② 将CPSR复制到适当的SPSR(各种模式处CPSR是共用一个的,而SPSR在不同异常模式下是不同的)。
③ 根据异常将CPSR模式强制设为快中断模式或中断模式。
④ 强制PC从相关的异常向量处取指。(到此完成进入中断服务程序的动作)
⑤ 执行异常服务程序。
⑥ 将LR中的值减去偏移量后移入PC。ARM状态快中断模式和中断模式下这个偏移量为4,因为LR保存的是由于FIQ或IRQ占先面没有被执行的指令的地址。
⑦ 将SPSR的值扮凯复制回CPSR中。
⑧ 清零在入口置位旦猜的中断禁止标志。
一旦产生IRQ中断,微控制器会切换到IRQ模式,并且跳转到向量表0x0000018地址处执行程序。而一旦产生FIQ中断,微控制器会切换到FIQ模式,并且跳转到向量表0x000001C地址处执行程序。所示,在0x00000080处和0x0000001C处必须各有一条跳转指令,分别跳转的IRQ和FIQ中断处理的代码处。在0x00000000处的一般向量表称为异常向量表。
ARM7的中断向量表的前8个中断向量中,最后两个是IRQ和FIQ。可以从这两个中断向量跳转到相应的中断服务函数中去。在ARM7中,IRQ中断用的比较多。当产生一个IRQ中断之后,首先要保存当前工作模缺型状态的环境,然后将中断服务函数地址赋给PC,跳转到中断服务函数。执行完中断服务函数之后,再恢复中断前的工作状态环境,返回正常的工作模式。
1.请求中断
当某一中断源需要CPU为其进行中断服务时,就输出中断请求信号,使中断控制系统的中断请求触发器置位,向CPU请求中断。系统要求中断请求信号一直保持到CPU对其进行中断响应为止。
2.
中断响应
CPU对系统内部中断源提出的中断请求必须响应,而且自动取得中断服务子程序的入口地址,执行中断 服务子程序。对于外部中断,CPU在执行当前指令的最后一个时钟周期去查询INTR引脚,若查询到中断请求信号有效,同时在系统开中断(即IF=1)的情 况下,CPU向发出中断请求的外设回送一个低电平有效的中断应答信号,作为对中断请求INTR的应答,系统自动进入中断响应周期。
3.
关闭中断
CPU响应中断后,输出中断响应信号,自动将状态标志寄存器FR或EFR的内容压入堆栈保护起来,然后将FR或EFR中的中断标志位IF与陷阱标志位TF清零,从而自动关闭外部硬件中断。因为CPU刚进入中断时要保护现场,主要涉及堆栈 *** 作,此时不能再响应中断,否则将造成系统混乱。
4.
保搜键护断点
保护断点就是将CS和IP/EIP的当前内容压入堆栈保存,以便中断处虚漏旁理完毕后能返回被中断的原程序继续执行,这一过程也是由CPU自动完成。
5.
中断源识别
当系统中有多个中断源时,一旦有中断请求,CPU必须确定是哪一个中断源提出的中断请求,并由中断控制器给出中断服务子程序的入口地址,装入CS与IP/EIP两个寄存器。CPU转入相应的中断服务子程序开始执行。
6.
保护现场
主程序和中断服务子程序都要使用CPU内部寄存器等资源差橡,为使中断处理程序不破坏主程序中寄存器的内容,应先将断点处各寄存器的内容压入堆栈保护起来,再进入的中断处理。现场保护是由用户使用PUSH指令来实现的。
7.
中断服务
中断服务是执行中断的主体部分,不同的中断请求,有各自不同的中断服务内容,需要根据中断源所要完成的功能,事先编写相应的中断服务子程序存入内存,等待中断请求响应后调用执行。
8.
恢复现场
当中断处理完毕后,用户通过POP指令将保存在堆栈中的各个寄存器的内容d出,即恢复主程序断点处寄存器的原值。
9.
中断返回
在中断服务子程序的最后要安排一条中断返回指令IRET,执行该指令,系统自动将堆栈内保存的 IP/EIP和CS值d出,从而恢复主程序断点处的地址值,同时还自动恢复标志寄存器FR或EFR的内容,使CPU转到被中断的程序中继续执行。
从编程的角度穗仔看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:- 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;
- 第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
工作模式有:
(1)用户模式(usr , User Mode)。ARM处理器正常的程序执行状态。
(2)快速中断模式(fiq , Fast Interrupt Request Mode)。用于高速数据传输尺族前或通道处理。当触发快速中断时进入此模式。
(3)外部中断模式 ( irq , Interrupt Request Mode )。用于通用的中断处理。当触发外部中断时进入此模式。
(4)管理模式 ( svc , Supervisor Mode )。 *** 作系统使用的保护模式。在系统复位或者执行软件中断指令SWI时进入。
(5)数据陵清访问终止模式 ( abt , Abort Mode )。当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
(6)系统模式(sys , System Mode )。运行具有特权的 *** 作系统任务。
(7)未e799bee5baa6e58685e5aeb931333330353631定义指令中止模式 ( und , Undefined Mode )。当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)