武汉理工大学嵌入式复习重点Word文档下载推荐.doc
《武汉理工大学嵌入式复习重点Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《武汉理工大学嵌入式复习重点Word文档下载推荐.doc(21页珍藏版)》请在冰豆网上搜索。
选择和使用标准通用集成电路器件
新方法:
自己设计和制作部分专用的集成电路器件
•由各种EDA工具软件提供支持的
软件设计的进步
无操作系统
基于操作系统设计
•简化多任务、实时、复杂软件设计
第三章(3.7以后是重点,第三章前面的都不考。
从3.7往后看)
1.ARM微处理机的工作模式
ARM微处理器支持7种工作模式
User-用户模式(usr)
•ARM处理器正常的程序执行状态
System-系统模式(sys)
•运行具有特权的操作系统任务
IRQ-外部中断模式(irq)
•用于通用的中断处理
FIQ-快速中断模式(fiq)
•用于高速数据传输或通道处理
Supervisor-管理模式(svc)
•操作系统使用的保护模式
•复位、软中断调用(SWI)
Abort-中止模式(abt)
•当数据或指令预取中止时进入该模式
•可用于虚拟存储及存储保护
Undefined-未定义指令模式(und)
•当未定义的指令执行时进入该模式
•可用于支持硬件协处理器的软件仿真
特权模式
除用户模式以外,其余6种模式称之为特权模式(PrivilegedModes),当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
异常模式
除去用户模式和系统模式以外的5种又称为异常模式(ExceptionModes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况
2.工作模式的改变
通过软件改变
•系统调用
通过外部中断或异常处理改变
•外部中断:
IRQ、FIQ–来自中断控制器
•异常处理–来自CPU内部
工作模式的改变举例
SWI软件中断指令
•SWI0x0;
调用0号软中断
•SWI0x12;
调用12号软中断
IRQ外部中断
•__irqvoidHandlerTIMER5(void)
•{
•timeval++;
//当前时刻递增
•pIC->
I_ISPC=INT_TIMER5;
//清除中断请求位
•}
3.ARM微处理器的工作状态一般有两种
第一种为ARM状态
•处理器执行32位的ARM指令
•ARM指令要求字对齐
第二种为Thumb状态
•处理器执行16位的Thumb指令
•Thumb指令要求半字对齐
工作状态切换
在程序的执行过程中,处理器可以随时在两种工作状态之间切换,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容
ARM微处理器在开始执行代码时总是处于ARM状态,也就是复位后进入ARM状态
工作状态切换方法
进入Thumb状态
•执行BX指令
–BX:
带状态切换的跳转指令
–当操作数寄存器的最低位[0]为1时,可以使微处理器从ARM状态切换到Thumb状态
–BXR0;
R0的最低位[0]为1
•处理器工作在Thumb状态,如果发生异常并进入异常处理子程序,则异常处理完毕返回时,自动从ARM状态切换到Thumb状态
工作状态切换举例
BLabel
CMPR1,#0
BEQLabel
ADRLR0,ThumbFun+1
BXR0
BLXLabel
4.ARM处理器的寄存器
37个32位寄存器
•31个通用寄存器
•6个状态寄存器
这些寄存器不能被同时访问
•取决于处理器的
–工作状态
–工作模式
1)通用寄存器
通用寄存器包括R0~R15
可以分为三类
2)未分组寄存器R0~R7
未分组寄存器R0~R7在所有的工作模式下,每个未分组寄存器都指向对应的一个物理寄存器。
在中断或异常处理进行工作模式转换时,由于不同的处理器工作模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏
分组寄存器R8~R14
R8~R12
•每个寄存器对应2个不同的物理寄存器
•当使用FIQ模式时,访问R8_fiq~R12_fiq
•当使用其他模式时,访问R8_usr~R12_usr
R13、R14
•每个寄存器对应6个不同的物理寄存器
•其中一个寄存器是用户模式与系统模式共用
•另外5个物理寄存器对应于其他5种不同的工作模式
R13寄存器
一种习惯用法,常用作堆栈指针SP(StackPointer),也可使用其他的寄存器作为堆栈指针,在Thumb指令集中,某些指令强制使用R13作为堆栈指针。
在应用程序初始化时,一般都要初始化每种模式下的R13,使其指向该工作模式的栈空间不同物理寄存器的区分。
R14寄存器
也称链接寄存器LR(LinkRegister)
•当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份
•BLLabel;
下一条指令地址à
LR,Labelà
PC
当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值
其他情况下,R14用作通用寄存器
R13_<
mode>
R14_<
mode为:
usr、fiq、irq、svc、abt、und
例如:
•R13_usr、R13_fiq、R13_irq
•R14_svc、R14_abt、R14_und
3)程序计数器R15(PC)
R15寄存器
R15寄存器用作程序计数器(PC)
在ARM状态下,位[1:
0]为0,位[31:
2]用于保存PC
在Thumb状态下,位[0]为0,位[31:
1]用于保存PC
由于ARM体系结构采用了多级流水结构,对于ARM指令集而言,PC总是指向当前执行指令的下两条指令的地址,即PC的值为当前执行指令的地址值加8个字节。
R15也可用作通用寄存器,但一般不这么使用。
因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。
4)CPSR寄存器
用作CPSR(CurrentProgramStatusRegister)
CPSR可在任何工作模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。
异常模式下有一个专用的物理状态寄存器,称为SPSR(SavedProgramStatusRegister),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。
用户模式和系统模式不属于异常模式,没有SPSR。
5.Thumb状态下的寄存器
Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集
程序可以直接访问
•8个通用寄存器(R7~R0)
•程序计数器(PC)
•堆栈指针(SP)
•连接寄存器(LR)
•CPSR:
在每一种异常模式下都有一组SP、LR和SPSR
6.程序状态寄存器
程序状态寄存器的构成
一个当前程序状态寄存器(CPSR)
五个备份程序状态寄存器(SPSR):
备份的程序状态寄存器用来进行异常处理
程序状态寄存器的功能:
保存ALU中的当前操作信息,控制允许和禁止中断,设置处理器的工作模式。
标志位N
当用两个补码表示的带符号数进行运算时
N=1表示运算结果为负数
N=0表示运算结果为正数或零
标志位Z
Z=1表示运算结果为零;
Z=0表示运算结果为非零
标志位V
对于加/减法运算指令,当操作数和运算结果为补码表示的带符号数时,V=1表示符号位溢出
对于其他的非加/减运算指令,V的值通常不改变
标志位C
加法运算(包括比较指令CMN):
•当运算结果产生了进位时(无符号数溢出),C=1,否则C=0
减法运算(包括比较指令CMP):
•当运算时产生了借位(无符号数溢出),C=1,否则C=0
对于包含移位操作的非加/减运算指令,C为移出值的最后一位
对于其他的非加/减运算指令,C的值通常不改变
中断禁止位I和F
I=1禁止IRQ中断;
I=0允许IRQ中断
F=1禁止FIQ中断;
F=0允许IRQ中断
运行状态控制位T
对于ARMv5及以上的T系列处理器,当该位为1时,程序运行于Thumb状态,否则运行于ARM状态
对于ARMv5及以上的非T系列处理器,当该位为1时,执行下一条指令以引起未定义指令异常;
当该位为0时,表示运行于ARM状态
工作模式位M[4:
0]
这些位决定了处理器的工作模式
7.ARM微处理器的寻址方式
1)立即寻址:
操作数本身就在指令中
2)寄存器寻址:
利用寄存器中的数值作为操作数
3)寄存器间接寻址:
以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中
4)基址寻址:
寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址
5)相对寻址:
相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址
6)多寄存器寻址:
采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送,最多传送16个通用寄存器的值
例如
•LDMIAR0!
{R1,R2,R3,R4};
R1←[R0],R0=R0+4
•;
R2←[R0],R0=R0+4
R3←[R0],R0=R0+4
R4←[R0],R0=R0+4
指令后缀IA表示在每次执行操作后R0按字长度增加
注意:
在寄存器列表中同一寄存器仅能指定一次;
加载/存储操作按照寄存器固定次序进行,所以寄存器排列先后关系随意。
多寄存器寻址(块拷贝寻址)(特别注意!
!
)
IA:
IncrementAfter,操作完成后地址递增;
nIB:
IncrementBefore,地址先递增后完成操作;
nDA:
DecrementAfter,操作完成后地址递减;
nDB:
DecrementBefore,地址先递减后完成操作
7)堆栈寻址:
堆栈按先进后出(FILO)的工作方式寻址。
8.指令格式
<
opcode>
{<
cond>
}{S}<
Rd>
<
Rn>
{,operand2}
opcode:
指令助记符,如ADD,LDR,STR
cond:
执行条件,如NE,EQ
S:
是否影响CPSR的值
Rd:
目标寄存器
Rn:
第一操作数寄存器
operand2