ARM处理器扫盲Word格式.docx
- 文档编号:21136967
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:4
- 大小:18.44KB
ARM处理器扫盲Word格式.docx
《ARM处理器扫盲Word格式.docx》由会员分享,可在线阅读,更多相关《ARM处理器扫盲Word格式.docx(4页珍藏版)》请在冰豆网上搜索。
当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。
此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。
ARM处理器模式
ARM微处理器支持7种运行模式,分别为:
用户模式(usr):
ARM处理器正常的程序执行状态。
快速中断模式(fiq):
用于高速数据传输或通道处理。
外部中断模式(irq):
用于通用的中断处理。
管理模式(svc):
操作系统使用的保护模式。
数据访问终止模式(abt):
当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
系统模式(sys):
运行具有特权的操作系统任务。
定义指令中止模式(und):
当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。
大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式;
其中除去用户模式和系统模式以外的5种又称为异常模式,常用于处理中断或异常,以及需要访问受保护的系统资源等情况。
ARM寄存器
ARM处理器共有37个寄存器。
其中包括:
31个通用寄存器,包括程序计数器(PC)在内。
这些寄存器都是32位寄存器。
以及6个32位状态寄存器。
关于寄存器这里就不详细介绍了,有兴趣的人可以上网找找,很多这方面的资料。
异常处理
当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。
在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。
处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。
当一个异常出现以后,ARM微处理器会执行以下几步操作:
进入异常处理的基本步骤:
将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。
将CPSR复制到相应的SPSR中。
根据异常类型,强制设置CPSR的运行模式位。
强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。
ARM微处理器对异常的响应过程用伪码可以描述为:
R14_=ReturnLink
SPSR_=CPSR
CPSR[4:
0]=ExceptionModeNumber
CPSR[5]=0;
当运行于ARM工作状态时
If==ResetorFIQthen;
当响应FIQ异常时,禁止新的FIQ异常
CPSR[6]=1
PSR[7]=1
PC=ExceptionVectorAddress
异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:
将连接寄存器LR的值减去相应的偏移量后送到PC中。
将SPSR复制回CPSR中。
若在进入异常处理时设置了中断禁止位,要在此清除。
................................................................................
BootLoader简介
简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。
因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。
尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。
基于ARM7TDMIcore的CPU在复位时通常都从地址0x00000000取它的第一条指令。
在系统加电后,CPU将首先执行BootLoader程序。
大多数BootLoader都包含两种不同的操作模式:
“启动加载”模式和“下载”模式:
启动加载(Bootloading)模式:
BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
下载(Downloading)模式:
BootLoader将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:
下载内核映像和根文件系统映像等。
BOOT的一般步骤为:
设置中断向量表
初始化存储设备
初始化堆栈
初始化用户执行环境
呼叫主应用程序
ARM要求中断向量表必须放置在从0地址开始,连续8X4字节的空间内。
每当一个中断发生以后,ARM处理器便强制把PC指针置为向量表中对应中断类型的地址值。
因为每个中断只占据向量表中1个字的存储空间,只能放置一条ARM指令,使程序跳转到存储器的其他地方,再执行中断处理。
中断向量表的程序实现通常如下表示:
AREABoot,CODE,READONLY
ENTRY
B?
?
ResetHandler
UndefHandler
SWIHandler
PreAbortHandler
DataAbortHandler
B
?
IRQHandler
FIQHandler
其中关键字ENTRY是指定编译器保留这段代码,因为编译器可能会认为这是一段亢余代码而加以优化。
链接的时候要确保这段代码被链接在0地址处,并且作为整个程序的入口。
存储器端口的接口时序优化是非常重要的,这会影响到整个系统的性能。
因为一般系统运行的速度瓶颈都存在于存储器访问,所以存储器访问时序应尽可能的快;
而同时又要考虑到由此带来的稳定性问题。
在不同的板子上处理芯片、存储设备以及其接口差异很大,应根据不同的情况来配置。
因为ARM有7种执行状态,每一种状态的堆栈指针寄存器(SP)都是独立的。
因此,对程序中需要用到的每一种模式都要给SP定义一个堆栈地址。
方法是改变状态寄存器内的状态位,使处理器切换到不同的状态,然后给SP赋值。
注意:
不要切换到User模式进行User模式的堆栈设置,因为进入User模式后就不能再操作CPSR回到别的模式了,可能会对接下去的程序执行造成影响。
这是一段堆栈初始化的代码示例:
mrsr0,cpsr;
读取cpsr寄存器的值
bicr0,r0,#MODEMASK;
把模式位清零
orrr1,r0,#UNDEFMODE|NOINT
msrcpsr_cxsf,r1;
UndefMode
ldrsp,=UndefStack
其他模式的堆栈的初始化也类似。
堆栈地址的定义一般如下:
^(_ISR_STARTADDRESS-0x1400)
UserStack#1024;
#=field,定义一个数据域,长度为1024
SVCStack#1024
UndefStack#1024
AbortStack#1024
IRQStack#1024
FIQStack#0
一个ARM映像文件由RO,RW和ZI三个段组成,其中RO为代码段,RW是已初始化的全局变量,ZI是未初始化的全局变量。
映像一开始总是存储在ROM/Flash里面的,其RO部分即可以在ROM/Flash里面执行,也可以转移到速度更快的RAM中执行;
而RW和ZI这两部分是必须转移到可写的RAM里去。
所谓应用程序执行环境的初始化,就是完成必要的从ROM到RAM的数据传输和内容清零。
编译器使用下列符号来记录各段的起始和结束地址:
|Image$$RO$$Base|:
RO段起始地址
|Image$$RO$$Limit|:
RO段结束地址加1
|Image$$RW$$Base|:
RW段起始地址
|Image$$RW$$Limit|:
ZI段结束地址加1
|Image$$ZI$$Base|:
ZI段起始地址
|Image$$ZI$$Limit|:
这些标号的值是根据链接器中设置的中ro-base和rw-base的设置来计算的。
初始化用户执行环境主要是把RO、RW、ZI三段拷贝到指定的位置。
调用主应用程序
当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序。
最简单的一种情况是:
IMPORTmain
main
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 处理器 扫盲