ARM学习--ARM处理器模式和寄存器、中断事件

时间:2022-07-23 18:33:32

ARM模式

类别

M[4:0]

处理器模式

描述

 

0b10000

用户模式usr

正常程序执行模式

 

0b11111

系统模式sys

运行特权级的操作系统任务


0b10011

特权模式sve

供操作系统使用的保护模式

0b10001

快速中断模式fiq

用于高速数据传输和通道处理

0b10010

外部中断模式irq

用于通常的中断处理

0b10111

数据访问中止模式abt

用于虚拟内存及存储保护

0b11011

未定义中止模式und

用于支持通过软件方针硬件的协处理器

ARM寄存器

共有37个寄存器,且都是32位的,其中6个状态寄存器只用了前12位。

通用寄存器:

8个未备份寄存器:R0~R7,可以在任何处理器模式下被访问。

22个备份寄存器:R8~R14,其中,R8~R12对应两个不同物理寄存器,R13和R14每个寄存器对应6个不同的物理寄存器。

R13通常做栈指针:每种异常模式发生时,应用程序初始化其R13,使其指向该异常模式的专用栈地址。进入异常模式时,可以将需要的相应寄存器保存在R13所指向的栈中;当退出异常模式时,R13所指向的栈弹出寄存器值。这样就不会使异常处理程序损坏中断处理运行现场。

R14通常做连接寄存器LR:子程序的返回(R14存储当前子线程的返回地址);异常模式的返回(R14存储该异常模式的返回地址)

1个程序寄存器R15--PC:ARM是字对齐的,PC的0和1位总为0;对于ARM指令集,PC指向当前指令的下两条指令地址; ARM采用流水线机制,当读取了PC值后,该值为当前指令地址加8字节。

程序状态寄存器:

CPRS(当前程序状态寄存器)可以在任何处理器模式下被访问;每一种异常处理模式下都有一个专用的物理状态寄存器SPSR(备份程序状态寄存器:当特定的异常中断发生时,用于存放当前CPRS的内容,异常中断程序退出时,SPSR负责恢复CPRS)。

ARM学习--ARM处理器模式和寄存器、中断事件

N-negative,Z-zero,C-carry,V-overfollow四个统称为条件标志位。

Q标志位主要用于指示增强的DSP指令是否发生了溢出。

I,F,TM[4:0]统称为控制位。

其他位则用于将来ARM的扩展。

各种处理器模式下的寄存器:

Usr

sys

sve

fiq

irq

abt

und

R0~R7

R0~R7

R0~R7

R0~R7

R0~R7

R0~R7

R0~R7

R8~R12

R8~R12

R8~R12

R8_fiq~R12_fiq

R8~R12

R8~R12

R8~R12

R13~R14

R13~R14

R13_sve~R14_sve

R13_fiq~R14_fiq

R13_irq~R14_irq

R13_abt~R14_abt

R13_und~R14_und

R15(PC)

R15(PC)

R15(PC)

R15(PC)

R15(PC)

R15(PC)

R15(PC)

CPRS

CPRS

CPRS(SPSR_sve)

CPRS(SPSR_fiq)

CPRS(SPSR_irq)

CPRS(SPSR_abt)

CPRS(SPSR_und)

ARM异常中断:

ARM体系控制程序执行流程方法:

1、  异常中断:异常中断发生时,保存被中断程序运行现场并跳转到相应的异常中断处理程序,中断异常程序完成后恢复被中断程序的运行现场。

2、  跳转指令:即B,BL,BX,BLX的操作。

3、  正常执行:每执行一条ARM指令,PC值加4个字节;每执行一条Thumb指令,PC值加2个字节。

中断种类:

参考此文,自己补全,将#换成.,http://blog#chinaunix#net/uid-28458801-id-3780127#html

ARM学习--ARM处理器模式和寄存器、中断事件

对异常中断的响应过程:

1.1将CPSR内容复制到SPSR_mode中(保存处理器当前状态、中断屏蔽位、各条件标志位),设置CPSR中相应的位,其中之一就是设置F或者I位为1,以禁止FIQ或者IRQ中断。

1.2寄存器lr_mode设置成返回地址,将寄存器PC设置成该异常中断的中断向量地址。

2、跳转到中断处理程序执行过程后完成。

3.1恢复寄存器CPSR(用SPSR_mode恢复)。

3.2将寄存器lr_mode内容复制到寄存器PC中

4、复位异常程序执行后即开始了原先正常程序执行。

参考文档:

《ARM体系结构与编程》        杜春雷