Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161256
  • 博文数量: 171
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1990
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-05 10:49
文章分类

全部博文(171)

文章存档

2011年(9)

2010年(162)

我的朋友

分类: 嵌入式

2010-09-19 16:04:06

ARM7系列处理器是低功耗32位RISC处理器,它主要用于对功耗和成本要求比较苛刻的消费类电子产品。其最高主频可以达到130MIPS。arm7系列处理器支持16位的thumb指令集,、使用thumb指令集可以以16位的系统开销得到32位系统性能。
ARM7系列包括ARM7TDMI\ARM7TDMI-s、ARM7EJ-s和ARM720T 4中类型
ARM7系列处理器具体应用于以下场合。
个人音频设备,mp3等
接入级的无线设备
喷墨打印机
数码照像机
PDA
ARM7系列处理器具有以下主要特点 ---
成熟的大批量的32位rics芯片。
最高主频达到130MIPS
功耗低
代码密度很高,兼容16位处理器
得到广泛的操作系统和实时操作系统支持
众多的开发工具
EDA仿真模型
优秀的调试机制。
等等
ARM7处理器模式
用户模式 ——正常程序执行模式
快速中断模式—— 用于高速数据传输通道处理。
外部中断模式——用于通常的中断处理
特权模式——供操作系统使用的一种保护模式
数据访问中止模式——用于虚拟储存及存储保护
未定义指令中止模式——用于支持通过软件仿真硬件的协处理器
系统模式——用于运行特权级操作系统任务
除了用户模式之外的其他6中处理器模式称为特权模式privilege modes。在这些模式下。程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。其中,除系统模式外,其他5种特权模式又称为异常模式。
处理器模式可以通过软件进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下。这时,应用程序不能访问一些受操作系统保护的系统资源。应用程序也不能直接进行处理器模式的切换。当需要进行处理器名胜切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式切换,这种体系结构可以使操作系统控制整个系统的资源。
当应用程序发生异常中断是,处理器进入相应的异常模式。在每一种异常模式中都有一组寄存器,供相应的异常处理程序使用,这样就可以保证在进入异常模式时,用户模式下的寄存器(保存了程序运行状态)不被破坏。
系统描述并不是提供异常过程进入的,它和用户模式具有完全一样的寄存器。但是系统模式属于特权模式,可以访问所用的系统资源,也可以直接进行处理器模式切换。它主要供操作系统任务使用。通常操作系统的任务需要访问所有的系统资源,同时该任务仍然使用用户模式的寄存器组,而不是使用异常模式下相应的寄存器组,这样可以保证当异常中断发生是任务状态不被破坏。

ARM7寄存器介绍
ARM7处理器共有37个寄存器,其中包括
31个通用寄存器,包括程序计数器在类。这些寄存器都是32位寄存器
6个状态寄存器,这些寄存器都是32位寄存器,但目前只使用了其中12位。
ARM处理器共有7种不同的处理器模式,可见寄存器包括15个通用寄存器(R0~R14)、一个或两个状态寄存器及程序计数器PC。在所有寄存器中,有些是个模式共用的同一物理寄存器,有一些寄存器是各模式自己拥有的独立的物理寄存器,

通用寄存器
通用寄存器可以分为下面3类
未备份寄存器the unbank registers ,包括R0~R7
备份寄存器The banked registers ,包括 R8~R14
程序计数器 PC
1、未备份寄存器
   未备份寄存器包括R0~R7,对于每一个未备份寄存器来说,在所以的处理器模式下指的都是同一物理寄存器。在异常中断造成处理器模式切换是,由于不同的处理器模式使用相同的物理寄存器,可能造成寄存器数据被破坏。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未备份寄存器。
2、备份寄存器
对于备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器。例如

===
每一种异常模式拥有自己的物理r13.应用程序初始化该R13,使其指向该异常模式专用的栈地址,当进入异常模式时,可以将需要使用的寄存器保存在R13 所指的栈中:当退出异常模式处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使异常模式处理程序不会破坏其中断程序的运行现场。
寄存器R14又被称为连接寄存器(Link Resgister ,LR),在ARM体系中具有下面两种特殊作用:
每一种处理器模式自己的物理R14中存放在当前子程序的返回地址。当通过BL或BLX指令调用子程序时,R14被设置成子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即返回。可以通过下面两种方式实现这种子程序的返回操作。
执行下面任何一条指令:
MOV PC , LR
BX LR
在子程序入口使用下面的指令将PC保存到栈中:
SEMFD SP |,{相应地,下面的指令可以实现子程序返回。
LOMFD SP |,{ ,PC}

3、程序计数器R15

程序状态寄存器又被记作PC。它可以作为一般的通用寄存器,但是有一些指令在使用R15时有一些特殊限制。当违反这些限制时,该指令的执行结果是不可预料的。
由于ARM采用了流水线机制,当正确读取了PC的值时,该值为当前指令地址值加8个字节。也就是说,对于ARM指令集来说,PC指向当前指令下两条的地址。由于ARM指令是字对齐的。PC值的第0位和第1位总为0.
需要注意的是,当使用指令STR/STM保存R15时,保存的可能是当前指令地址值加8字节,也可能保存的是当前指令地址加12字节,到底是哪种方式,取决于芯片具体设计方式。无论如何,在同一芯片中,要么采用当前地址加8,要么采用当前地址加12,不能有些指令采用加8,有些采用加12。因此对用户来说,尽量避免使用STR/STM保存R15的值。当不可避免这种使用方式时,可以先通过一些代码来确定所使用的芯片是哪种实现方式。假设R0指向可用的一个内存字,下面的代码可以在R0指向的内存中返回该芯片所采用的地址偏移量。

sub R1 , PC ,#4 ;R1中存放下面STR指令的地址
STR PC , [R0] ;将PC=STR地址 OFFSET 保存到R0中
LDR R0 , [R0] ;
SUB R0,R0,R1 ;OFFSET=PC -STR 地址

在上面的讨论中,都是针对指令返回的值,该值并非在指令读取期间出现在数据总线上的值。在指令读取期间出现在数据总线上的值取决于芯片的具体实现方式。
当成功地向R15中写入一个地址数值时,程序将跳转到该地址执行。由于ARM指令是字对齐的,写入R15的地址值应该满足bits[1:0]=0b00,具体要求ARM各版本有所不同:
*对于ARM版本3以及更低的版本,写入R15的地址值的bits[1:0]被忽略,即写入R15的地址值将与0xFFFFFFFC做或操作。
*对于ARM版本4以及更高版本,程序必须保证写入R15寄存器的电阻值的bits[1:0]为0b00;否则将会产生不可预知的后果。
对于Thumb指令集来说,指令是半字对齐的。处理器将忽略bit[0],即写入R15的地址值首先与0xfffffffc做或操作,再写入R15中。
还有一些指令对于R15的用法有一些特殊要求。比如,指令BX利用bit[0]来确定是ARM指令,还是Thumb指令。
这种读取PC值写入PC值的不对称的操作需要特别注意,这一点在以后的章节还有介绍。如记指令 MOV PC ,PC 将程序跳转到当前指令下面第2条指令处执行。因为指令中,第2个pC寄存器读出的值为当前指令的地址值加8,这样ARM指令而言写入PC寄存器的是当前下面第2条指令的地址。类似的指令还有ADD PC ,PC ,#0.
1.5 程序状态寄存器
CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容,在异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。
由于用户模式和系统模式不是异常中断模式,所以它们没有spsr.当在用户模式或系统模式中访问SPSR,将会产生不可预知的结果。
CPSR 的格式如下,SPSR格式与CPSR相同。
31 32 29 28 27       26         7 6   5 4 3 2 1 0
N Z C V Q      DNM(RAZ)     I F   T M4 M3 M2 M1 M0
1 、条件标志位
N(Negative) Z(Zero) C(Carry) 以及 V(oVerflow)系统为条件标志位。大部分的ARM指令可以根据CPSR中的这些条件标志位来选择性的执行。各条件标志位的具体含义如下表:
--------------------------------------------------------------
标志位 含义
--------------------------------------------------------------
N   本位设置成当前指令运算结果的bit[31]的值
   当两个补码表示的有符号整数运算符时,new表示运算的结果为负数:N=0表示结果为正数或零。

Z   Z=1表示运算结果为0,Z=0表示结果不为0
                对CMP指令。Z=1表示比较的两个数大小相等。

C   下面分4种情况讨论C的设置方法
   在加法指令中(包括比较指令CMN),
   当结果产生了进位,则C=1 ,表示无符号数运算发生上溢出其他情况下=0

   在减法指令中 (包括CMP)当运算中发生借位则C=0,表示无符号数运算发生下溢出,其他=0
  
    对于包含移位操作的非加/减法运算指令,C中包含最后一次被溢出的位的数值,
    对于其他非加/减法运算指令,C的值通常不受影响。

V   对于加/减法运算指令。当操作数和运算结果为二进制的补码表示的带符号数时
   V=1表示符号位溢出
   通常其他的指令不影响V位,具体可参考各指令的说明。
--------------------------------------------------------------------------
以下指令会影响CPSR中的条件标志位。  
*比较指令 如CMP 、CMN、TEQ及TST 等。
*当一些算术运算指令和逻辑指令的目标寄存器不是R15时,这些指令会影响CPSR中的条件标志位。
*MSR指令可以向CPSR/SPSR中写入新值。
*MRC指令将R15作为目标寄存器时,可以把协处理器产生的条件标志位的值传送到ARM处理器。
*一些LDM指令的变种指令可以将SPSR的值复制到CPSR中,这种操作主要用于从异常中断程序中返回。
*一些带“位设置”的算术和逻辑指令的变种指令,也可以将SPSR的值复制到CPSR中,这种操作主要用于从异常程序中返回。
2.Q标志位
在ARM V5 的E系列处理器中,CPSR的bit[27]称为Q标志位,主要用于指示增强的DSP指令是否发生了溢出。同样的SPSR中的bit[27]属于DNM(RAZ)

3 CPSR中的控制位
CPSR的低8位,I、F、及M[4:0]统称为控制位。当异常中断发生是这些位发生变化。在特权指令的处理器模式下。软件可以修改这些控制位。
*中断禁止为。
*当 I=1时禁止IRQ中断。
*当 F=1时禁止FIQ中断
T 控制位
T控制位用于控制指令执行的状态,即说明本指令是ARM指令,还是Thumb指令。对于不同版本的ARM处理器,T控制位的含义不同。
对于ARM v3以及更高版本的T系列ARM处理器,T控制含义如下:
T=0 表示执行ARM指令。
T=1 表示执行Thumb指令
对于 ARM v5以及更高版本的非T系列ARM处理器,T控制位含义如下
T=0 表示执行ARM指令
T=1表示强制下一条现在的指令产生未定义指令中断。
M 控制位M[4:0]控制处理器模式,具体含义如表:
==============================================================================
M[4:0]   处理器模式    可访问的寄存器
------------------------------------------------------------------------------
0b10000   User   PC ,R14~R0,CPSR
0b10001 FIQ   PC ,R14_fiq-R8_riq, R7~R0,CPSR ,SPSR_SIQ
0b10010   IRQ
.............

阅读(399) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~