ARM的异常与CPSR

1】异常处理流程

异常向量表

当异常产生时, ARM core:

拷贝 CPSR 到 SPSR_<mode>

设置适当的 CPSR 位:                                 

    改变处理器状态进入 ARM 态

    改变处理器模式进入相应的异常模式

    设置中断禁止位禁止相应中断 (如果需要)

保存返回地址到 LR_<mode>

设置 PC 为相应的异常向量

返回时, 异常处理需要:

SPSR_<mode>恢复CPSR

LR_<mode>恢复PC

Note:这些操作只能在 ARM 态执行.

 

2】为什么FIQ的响应速度比IRQ快

1. FIQs有高于IRQs的优先级

2. FIQ 向量位于异常向量表的最末. 异常处理程序可从异常量处连续执行

3. FIQ 模式有5个额外的私有寄存器 (r8-r12) 中断处理必须保护其使用的非私有寄存器

 

3】程序状态寄存器(CPSR)

条件位:

  N[31]: 负标记位,当ALU运算结果为负数,那么N = 1, 否则N = 0

  Z[30]: 0标记位,当ALU运算结果为0,则Z = 1, 否则Z = 0

  C[29]: 进位标记

当进行加法运算时:

产生进位(两个32位的数相加变成了33位的数)时:C = 1, 否则C = 0

0xffffffff + 0x1

当进行减法运算时:

产生借位时:C = 0, 否则C = 1

         2 - 3

注意:对于非加减运算,不会影响C位

  V[28]: 溢出标记(符号位溢出)

加法运算符号位溢出(0->1):

次高位进位,V = 1, 否则V = 0

减法运算符号位溢出(1->0):

次高位借位,V = 1, 否则V = 0

 

 

中断禁止位

    I[7]:  I  = 1: 禁止  IRQ.  I = 0 使能IRQ

    F[6]:  F  = 1: 禁止  FIQ, F = 0 使能FIQ

 

处理器的状态位T[5]:

T = 0; 处理器处于 ARM 状态

T = 1; 处理器处于 Thumb 状态

 

处理器的模式位M[4:0]:

10000  User mode;    10001 FIQ mode;           10011 SVC mode;

                10111  Abort mode;   11011 Undfined mode;      11111 System mode;  

                10110  Monitor mode; 10010 IRQ

 

4】练习

1. 切换当前模式为IRQ模式

int a = CPSR           //读

 

   a = a & (~(0x1f<<0));

   a = a | (0x12<<0);//改

 

CPSR = a               //写

 

2. 禁止IRQ,进入arm状态

int a = CPSR           //读

 

a = a | (0x1<<7) & (~(0x1<<5));

CPSR = a               //写

 

3. 禁止FIQ,使能IRQ,进入arm状态,切换当前模式为IRQ模式

int a = CPSR           //读

a = a | (0x1<<6) & (~(0x1<<7)) & (~(0x1<<5));

a = a & (~(0x1f<<0)) | (0x12<<0);

 

CPSR = a               //写

5】大小端

大端:高地址存放数据的低字节,低地址存放数据的高字节

小端:高地址存放数据的高字节,低地址存放数据的低字节

 

判读:

1, 先写4个字节的数据到某一内存下

2, 从这个地址读一个字节的数据,如果是高字节表示大端,如果是低地址表示小端

 

6】流水线

无论多少级流水线,pc永远只想正在取指的那条指令的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值