Chinaunix首页 | 论坛 | 博客
  • 博客访问: 477449
  • 博文数量: 223
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2145
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-01 10:23
个人简介

该坚持的时候坚持,该妥协的时候妥协,该放弃的时候放弃

文章分类

全部博文(223)

文章存档

2017年(56)

2016年(118)

2015年(3)

2014年(46)

我的朋友

分类: 嵌入式

2016-09-20 22:12:35

1、ARM家族大检阅
①芯片:6410,210,2440 (三星出的)
②ARM核:A8,ARM11,ARM9
③指令架构:armv7,armv6,armv4

芯片中包含了一个ARM核:
2440(ARM9)---->armv4(采用的指令架构)
6410(ARM11)---->armv6
210(A8)---->armv7

2、ARM核演变图

处理速度 缓存 内存接口 支持OS 其他
S3C24400 402-500Mhz 16KB SDRAM LINUX/WINCE 停产
S3C6410 533-667Mhz 16KB SDRAM/DDR LINUX/WINCE/ANDROID
S5PV210 800Mhz--1Ghz 32KB LPDDR/LPDDR2 LINUX/WINCE/ANDROID

3、ARM工作模式
Processor mode


Mode numbe

Description

User
usr
0b10000
Normal program execution mode
FIQ fiq 0b10001 Supports a high-speed data transfer or channel process
IRQ irq 0b10010 Used for general-purpose interrupt handling
Supervisor svc 0b10011 A protected mode for the operating system
Abort abt 0b10111 Implements virtual memory and/or memory protection
Undefined und 0b11011 Supports software emulation of hardware coprocessors
System sys 0b11111 Runs privileged operating system tasks (ARMv4 and above)

4、ARM寄存器详解


CPSR: Current Program Status Registers
SPSR: Save Program Status Registers

寄存器纵览
ARM微处理器共有3732位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14R0、程序计数器PC、一个状态寄存器都是可访问的。


不分组寄存器(The unbanked registersR0-R7:R0-R7是不分组寄存器。这意味着在所有处理器模式下,访问的都是同一个物理寄存器。不分组寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。

分组寄存器(The banked registersR8-R14:
分组寄存器R8-R12
1. FIQ模式分组寄存器R8-R12
2. FIQ以外的分组寄存器R8-R12
分组寄存器R13R14
1. 寄存器R13通常用做堆栈指针SP
2. 寄存器R14用作子程序链接寄存器Link RegisterLR),也称为LR,指向函数的返回地址

程序计数器:R15PC
寄存器R15被用作程序计数器,也称为PC 。其值等于当前正在执行的指令的地址+8(因为在取址和执行之间多了一个译码的阶段)

状态寄存器
ARM所有工作模式下都可以访问程序状态寄存器CPSRCPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。
CPSR在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态。


5、ARM寻址方式
所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作的方式。
①立即数寻址:ADD R0,R0,#0X3F
#0X3F就是立即数。立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即数寻址。
②寄存器寻址:ADD R0,R1,R2
利用寄存器中的数值作为操作数,这种寻址方式是一种执行效率较高的寻址方式。
③寄存器间接寻址: LDR R0, [R2]
寄存器间接寻址就是寄存器中的存放的是操作数在内存中的地址
④基地址变址寻址: LDR R0,[R1 #4]
基址变址寻址就是将寄存器里的内容(基地址)与指令中给出的地址偏移量相加,从而得到操作数在内存中的地址.
⑤相对寻址:
与基址变址寻址方式相类似,相对寻址PC指针的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址
BL NEXT;跳转到子程序NEXT处执行
...
NEXT
...
MOV PC,LR;


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