📄 arm应用系统开发详解全集.txt
字号:
ARM 应用系统开发详解──基于S3C4510B 的系统设计 9
CPSR[5] = 0 ;当运行于ARM工作状态时
If <Exception_Mode> == Reset or FIQ then
;当响应FIQ异常时,禁止新的FIQ异常
CPSR[6] = 1
CPSR[7] = 1
PC = Exception Vector Address
2.6.3 从异常返回
异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:
1、将连接寄存器LR的值减去相应的偏移量后送到PC中。
2、将SPSR复制回CPSR中。
3、若在进入异常处理时设置了中断禁止位,要在此清除。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
2.6.4 各类异常的具体描述
FIQ (Fast Interrupt Request)
FIQ异常是为了支持数据传输或者通道处理而设计的。在ARM状态下,系统有足够的私有寄存器,
从而可以避免对寄存器保存的需求,并减小了系统上下文切换的开销。
若将CPSR的F位置为1,则会禁止FIQ中断,若将CPSR的F位清零,处理器会在指令执行时检查FIQ
的输入。注意只有在特权模式下才能改变F位的状态。
可由外部通过对处理器上的nFIQ引脚输入低电平产生FIQ。不管是在ARM状态还是在Thumb状态
下进入FIQ模式,FIQ处理程序均会执行以下指令从FIQ模式返回:
SUBS PC,R14_fiq ,#4
该指令将寄存器R14_fiq 的值减去4 后,复制到程序计数器PC 中,从而实现从异常处理程序
中的返回,同时将SPSR_mode 寄存器的内容复制到当前程序状态寄存器CPSR 中。
IRQ (Interrupt Request)
IRQ异常属于正常的中断请求,可通过对处理器的nIRQ引脚输入低电平产生,IRQ的优先级低于
FIQ,当程序执行进入FIQ异常时,IRQ可能被屏蔽。
若将CPSR的I位置为1,则会禁止IRQ中断,若将CPSR的I位清零,处理器会在指令执行完之前检
查IRQ的输入。注意只有在特权模式下才能改变I位的状态。
不管是在ARM状态还是在Thumb状态下进入IRQ模式,IRQ处理程序均会执行以下指令从IRQ模式
返回:
SUBS PC , R14_irq , #4
该指令将寄存器R14_irq 的值减去4 后,复制到程序计数器PC 中,从而实现从异常处理程序
中的返回,同时将SPSR_mode 寄存器的内容复制到当前程序状态寄存器CPSR 中。
ABORT (中止)
产生中止异常意味着对存储器的访问失败。ARM微处理器在存储器访问周期内检查是否发生中
止异常。
中止异常包括两种类型:
─ 指令预取中止:发生在指令预取时。
─ 数据中止:发生在数据访问时。
当指令预取访问存储器失败时,存储器系统向ARM处理器发出存储器中止(Abort)信号,预取
的指令被记为无效,但只有当处理器试图执行无效指令时,指令预取中止异常才会发生,如果指令
未被执行,例如在指令流水线中发生了跳转,则预取指令中止不会发生。
若数据中止发生,系统的响应与指令的类型有关。
----------------------- 页面 23-----------------------
ARM 应用系统开发详解──基于S3C4510B 的系统设计 10
当确定了中止的原因后,Abort处理程序均会执行以下指令从中止模式返回,无论是在ARM
状态还是Thumb状态:
SUBS PC, R14_abt, #4 ;指令预取中止
SUBS PC, R14_abt, #8 ;数据中止
以上指令恢复PC (从R14_abt)和CPSR (从SPSR_abt)的值,并重新执行中止的指令。
Software Interruupt(软件中断)
软件中断指令(SWI)用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程
序执行以下指令从SWI模式返回,无论是在ARM状态还是Thumb状态:
MOV PC , R14_svc
以上指令恢复PC (从R14_svc)和CPSR (从SPSR_svc)的值,并返回到SWI的下一条指令。
Undefined Instruction(未定义指令)
当ARM处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件
仿真扩展ARM或Thumb指令集。
在仿真未定义指令后,处理器执行以下程序返回,无论是在ARM状态还是Thumb状态:
MOVS PC, R14_und
以上指令恢复PC (从R14_und)和CPSR (从SPSR_und)的值,并返回到未定义指令后的下一条
指令。
2.6.5 异常进入/退出小节
表2-4 总结了进入异常处理时保存在相应R14 中的PC 值,及在退出异常处理时推荐使用的指
令。
表2-4 异常进入/退出
返回指令 以前的状态 注意
ARM R14_x Thumb R14_x
BL MOV PC,R14 PC+4 PC+2 1
SWI MOVS PC,R14_svc PC+4 PC+2 1
UDEF MOVS PC,R14_und PC+4 PC+2 1
FIQ SUBS PC,R14_fiq,#4 PC+4 PC+4 2
IRQ SUBS PC,R14_irq,#4 PC+4 PC+4 2
PABT SUBS PC,R14_abt,#4 PC+4 PC+4 1
DABT SUBS PC,R14_abt,#8 PC+8 PC+8 3
RESET NA - - 4
注意:
1、在此PC 应是具有预取中止的BL/SWI/未定义指令所取的地址。
2、在此PC 是从FIQ 或IRQ 取得不能执行的指令的地址。
3、在此PC 是产生数据中止的加载或存储指令的地址。
4、系统复位时,保存在R14_svc 中的值是不可预知的。
2.6.6 异常向量(Exception Vectors)
表2-5显示异常向量地址。
表2-5 异常向量表
地 址 异 常 进入模式
0x0000,0000 复位 管理模式
0x0000,0004 未定义指令 未定义模式
0x0000,0008 软件中断 管理模式
----------------------- 页面 24-----------------------
ARM 应用系统开发详解──基于S3C4510B 的系统设计 11
0x0000,000C 中止(预取指令) 中止模式
0x0000,0010 中止(数据) 中止模式
0x0000,0014 保留 保留
0x0000,0018 IRQ IRQ
0x0000,001C FIQ FIQ
2.6.7 异常优先级(Exception Priorities)
当多个异常同时发生时,系统根据固定的优先级决定异常的处理次序。异常优先级由高到低的
排列次序如表2-6所示。
表2-6 异常优先级
优先级 异 常
1 (最高) 复位
2 数据中止
3 FIQ
4 IRQ
5 预取指令中止
6 (最低) 未定义指令、SWI
2.6.8 应用程序中的异常处理
当系统运行时,异常可能会随时发生,为保证在ARM 处理器发生异常时不至于处于未知状态,
在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳
转指令,跳转到异常处理程序,当ARM 处理器发生异常时,程序计数器PC 会被强制设置为对应
的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。
2.7 本章小节
本章对ARM 微处理器的体系结构、寄存器的组织、处理器的工作状态、运行模式以及处理器
异常等内容进行了描述,这些内容也是ARM 体系结构的基本内容,是系统软、硬件设计的基础。
----------------------- 页面 25-----------------------
ARM 应用系统开发详解──基于S3C4510B 的系统设计 1
第3 章 ARM 微处理器的指令系统
本章介绍ARM 指令集、Thumb 指令集,以及各类指令对应的寻址方式,通过对本章的阅读,希
望读者能了解ARM 微处理器所支持的指令集及具体的使用方法。
本章的主要内容有:
- ARM 指令集、Thumb 指令集概述。
- ARM 指令集的分类与具体应用。
- Thumb 指令集简介及应用场合。
3.1 ARM 微处理器的指令集概述
3.1.1 ARM 微处理器的指令的分类与格式
ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果
都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。
ARM微处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、
加载/存储指令、协处理器指令和异常产生指令六大类,具体的指令及功能如表3-1所示(表中指令
为基本ARM指令,不包括派生的ARM指令)。
表3-1 ARM 指令及功能描述
助记符 指令功能描述
ADC 带进位加法指令
ADD 加法指令
AND 逻辑与指令
B 跳转指令
BIC 位清零指令
BL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -