4、预取指中止异常;由程序存储器引起的中止异常叫做预取指中止异常;由数据存储器引起的中止异常叫做数据中止异常。由于ARM的指令是3级流水线结构,读
取指令周期是提前进行的,因此把读取指令的过程一般称预取指。如果在取得指令的同时程序存储器发出中止信号,则ARM处理器把这一条指令标记位无效,然后等待执
行。有两种可能如下:
• 当执行这条指令前程序发生跳转,则这条无效指令不引起异常中断;
• 当执行到这条指令时,处理器会发生预取指中止异常,引起中断。
当记进入预取指异常中断时,处理器硬件响应中断,执行以下的操作:
• 把中断时PC的地址拷贝给LR;
• 把程序状态寄存器CPSR拷贝给SPSR_abt;
• 强制进入中止异常模式;
• 强制进入到ARM状态;
• 跳转到绝对地址PC=0x0000000C处执行;
• 禁止IRQ中断。
进入中断后,程序状态寄存器如下: ...... | I | F | T | M4 | M3 | M2 | M1 | M0 |
| 1 | x | 0 | 1 | 0 | 1 | 1 | 1 |
预取指中止异常中断返回时,应该执行下列指令:SUBS PC,R14,#4.
5、数据中止异常;ARM处理器访问数据存储器时,在读取数据的同时数据存储器发出了中止信号,引起数据中止异常。
数据中止异常中断服务程序返回时,使用下列指令:
SUBS PC,R14,#8
上述指令是返回到中断时所执行的指令,目的是再一次从数据存储器中读取数据。如果不再一次读取数据,则执行下一条指令,此时使用下列指令返回:
SUBS PC,R14,#4
• 把中断时的PC的地址拷贝给LR;
• 把程序状态寄存器CPSR拷贝给SPSR_abt;
• 强制进入中止异常模式;
• 强制进入到ARM状态;
• 跳转到绝对地址PC=0x00000010处执行;
• 禁止IRQ中断。
进入中断后,程序状态寄存器如下: ...... | I | F | T | M4 | M3 | M2 | M1 | M0 |
| 1 | x | 0 | 1 | 0 | 1 | 1 | 1 |
6、中断请求(IRQ)异常;例如:定时器中断、串行口通讯中断、外部信号中断和A/D处理中断等。IRQ中断是可屏蔽的。在状态寄存器中的I位就是IRQ的屏蔽位
。当I=1时。则屏蔽IRQ中断,当I=0时,则允许中断。处理器复位后置I为1,关闭中断。
当发生IRQ中断时,处理器硬件响应中断,执行下列操作:
• 把中断时的PC的地址值拷贝给LR;
• 把程序状态寄存器CPSR拷贝给SPSR_irq;
• 强制进入IRQ异常模式;
• 强制进入到ARM状态;
• 跳转到绝对地址PC=0x00000018处执行;
• 禁止IRQ中断。
进入中断后,程序状态寄存器如下: ...... | I | F | T | M4 | M3 | M2 | M1 | M0 |
| 1 | x | 0 | 1 | 0 | 0 | 1 | 0 |
完成中断处理后,程序执行下列返回原中断处:SUBS PC.R14,#4.
7、快速中断(FIQ)请求异常;FIQ快速中断是可屏蔽的。在状态寄存器中的F位就是FIQ的屏蔽位。当F=1时。则屏蔽FIQ中断,当F=0时,则允许中断。处理器复
位后置F为1,关闭中断。
当发生IRQ中断时,处理器硬件响应中断,执行下列操作:
• 把中断时的PC的地址值拷贝给LR;
• 把程序状态寄存器CPSR拷贝给SPSR_fiq;
• 强制进入FIQ异常模式;
• 强制进入到ARM状态;
• 跳转到绝对地址PC=0x0000001C处执行;
• 禁止FIQ中断。
进入中断后,程序状态寄存器如下: ...... | I | F | T | M4 | M3 | M2 | M1 | M0 |
| 1 | x | 0 | 1 | 0 | 0 | 0 | 1 |
完成中断处理后,程序执行下列返回原中断处:SUBS PC.R14,#4 |