1. 异常/中断的基本知识介绍
异常/中断是ARM经常用到的处理机制,因此需要好好学习。这里总是写中断/异常是因为中断属于异常的一种,而我们经常听到中断这个词语而少听到异常这个词,所以这些特意写成中断/异常。如果CPU发生中断时,我说CPU发生了异常,你可不能说我讲错了,因此异常包含了中断。
1.1 ARM的7种工作模式
从2440的数据手册中可以看到,ARM920T(2440使用的ARM920T的核) 总共有7种工作模式
其中的中断模式就是我们常用的中断 ,当ARM处理中断操作时,就进入此模式。
1.2 ARM的异常向量表
当ARM发生异常时,就会把PC的值设置成一个固定的值,让程序跳转到固定的地址执行程序,并进入相应的工作模式。
如:
当发生复位时,PC=0x0, 程序跳转到0地址去执行程序,并进入管理模式。
当发生中断时,PC=0x18, 程序跳转到0x18地址去执行程序,并进入中断模式。
上面的例子中,PC的值由硬件自动帮忙赋值,不需要软件来操作。
从这里可以看出来,想要进入不同的工作模式,就需要发生不同的异常。这里就找到了异常与工作模式的关系。
1.3 重要的寄存器CPSR
如何知道ARM当前处于什么模式呢? 可以通过查看CPSR(Current Program States Register )寄存器来知道。
CPSR寄存器的bit[0] ~ bit[4] 可以查出ARM当前工作模式。
不过CPSR这种特殊的寄存器不是一般的mov指令可以操作的, 要通过msr,和 mrs来完成对CPSR寄存器的读写。
如
//读取cpsr 到r0
mrs r0, cpsr
//清空r0的低4位
bic r0, r0, #0xf
//把r0赋值给cpsr
msr cpsr, r0
1.4 异常/中断的处理过程
在处理异常/中断时,即有硬件的处理也有软件的处理,主要的流程如下:
某种条件发引起异常
发生异常时硬件的处理,即进入异常
2.1将返回地址保存在LR(R14)寄存器
2.2将CPSR复制到SPSR(SPSR 就是专门弄来备份CPSR的)
2.3设置CPSR的模式位(设置CPSR的bit0~bit4)
2.4设置PC值为对应的中断/异常向量表(跳到固定地址)
发生异常时软件的处理,即处理异常然后回到异常发生时的位置继续处理
3.1 设置SP(因为需要通过压栈来保存寄存器和代码跳转)
3.2 保存现场(将通用的寄存器保存起来)
3.3 将SPSR赋值给CPSR
3.4 清除中断标志位(针对中断)
3.5 恢复现场(将通用的寄存器恢复回去)
3.6 将LR减去对应的值,再赋值给PC
3.6 将LR减去对应的值,在赋值给PC, 在2440手册中有表格说明LR的值,不过每种模式下LR的值是如何计算的并没有找到说明。
1.5 不同工作模式下的私有寄存器
ARM 通用的寄存器有R0-R15,不过在不同的工作模式下会有一些自己的私有寄存器。
如:
在FIQ模式下,会用到R0-R15,但是R8_fiq-R14_fiq虽然也是叫R8-R14,不过这是FIQ模式下的私有寄存器,不会影响到通用的R8-R14
在Supervisor模式下,会用到R0-R15,但是R13_svc-r14_srv虽然也叫R13-R14, 不过这是Supervisor模式下的私有寄存器,不会影响到通用的R13-R14
综上,用2句话来总结一下
他们是在不同模式下才有的私有寄存器
因为他们的功能时相同的,所以取名也相同,实际上是不同的物理寄存器
1.6 总结
看完后需要对以下的几个问题有些基本的了解才行。
ARM总共有几种工作模式
ARM有多少种异常
异常与工作模式之间有什么关系
在执行完异常后,如何计算LR的返回地址
上一篇:s3c2440学习之路-001 汇编点亮led
下一篇:s3c2440学习之路-009 nor flash的简单配置
推荐阅读最新更新时间:2024-11-12 10:12
推荐帖子
- 如何使用单个运算放大器驱动ADC
- 本文转自ADI中文技术社区https://ezchina.analog.com/message/29601#29601影响数据采集系统的主要因素包括:速度、精度、功耗、封装尺寸及器件成本,对于不同的应用,最关键的因素也不同。本文描述了在八通道数据采集系统中,如何使用单个运算放大器来驱动ADC,以降低整个系统的成本和尺寸。AD7329八通道、12位带符号位、1MSPSADC具有真双极性输入,以及四个可独立编程的软件选择输入范围:±4×VREF、±2×VREF、±VREF与0至
- 王府井的青蛙 模拟电子
- 使用TI 库播放MUSIC的程序!
- 使用TI库播放MUSIC的程序使用TI库播放MUSIC的程序!看一下学习回复楼主youki12345的帖子看看!非常厉害啊。试了一下翻古墓?学习一下。谢谢。无学习了,我正在研究播放WAV的声音文件有时间看看很不客气地收了,灰常感谢~~
- youki12345 微控制器 MCU
- 求助一个正弦波信号发生器的设计
- 本帖最后由paulhyde于2014-9-1509:24编辑我是一名高职一年级的学生,我们老师叫我做一个正弦信号发生器的设计,技术要求:①幅度保持不变(振幅5V);②频率可调:300-20KHZ;③相位可调:0度--360度。请各位大侠给小弟我帮助啊,最好有个什么原理图,拜托了啊,急!!!求助一个正弦波信号发生器的设计本帖最后由paulhyde于2014-9-1509:24编辑这个相关的内容应该很多,使用右上角的论坛搜索功能就可以找到了完全一样可
- 工职小赵 电子竞赛
- 不用电池的双音门铃
- 随着电话机的普及率越来越高,拥有住宅电话的家庭也越来越多,但大多数住宅电话使用率很低,利用电话入户馈线提供的48V(60V)直流馈电作电子门铃的工作能源是经济实用的。现介绍一款不用电池的双音门铃电路。电路原理如图所示,不难看出,图中电路是常规的电话机振铃电路的变型。a、b分别是电话机入户线的正、负两端。AN为常开型门铃按钮,在电话机候机时,按下AN,程控交换机提供的48V(或60V)电压,直流馈电经VD1、R1对电容C1充电,当C1端电压Vc达到IC1的起控电压时,IC1起振送出双音电子
- songbo DIY/开源硬件专区
- 【晒样片】+ 具有线路压降补偿的车用 USB 充电器的参考设计
- PMP4425参考设计提供了用于评估和验证USB充电器的详细数据,这一过程使用了USB充电控制器、降压转换器和分流放大器。另外,此设计展示了提供电池短路保护的汽车USB充电端口。借助于分流放大器,该设计能够在智能手机/平板电脑使用长约2-3米的电缆连接到USB充电器时补偿电压降的影响。由于可编程电流限制高达2.1A、该设计支持符合BC1.2标准的器件以及D+/D-分频器模式为2.7V/2.7V和1.2V,因此该设计支持几乎所有主要智能手机/平板电脑制造
- yichun417 TI技术论坛
- LLC 谐振变换器拓扑构成与工作原理分析
- 点此下载完整内容:https://www.eeworld.com.cn/zt/Qorvo_Power/details/7328内容节选:........点此下载完整内容:https://www.eeworld.com.cn/zt/Qorvo_Power/details/7328LLC谐振变换器拓扑构成与工作原理分析
- 木犯001号 电源技术
设计资源 培训 开发板 精华推荐
- STEVAL-IFS006V1, 智能感应接近开关
- S12ZVMAEVB: S12ZVMA评估板
- 使用 Analog Devices 的 ADP3303 的参考设计
- ADA4610-2ARMZ等效前置放大光电二极管电路典型应用电路
- FEBFAN23SV04T_LVA,基于 FAN23SV04T 用于 DDR 端接的高效同步降压转换器的评估板
- #第六届立创电赛#语音控制RGB小台灯-STM32版本
- #第四届立创大赛#18650充电器+LED灯
- LT3007ETS8-1.2 用于保活电源的低压差线性稳压器的典型应用电路
- DS18B20
- LTC6262HMS 235 uA 电源电流运算放大器的典型应用