linux驱动必备硬件知识--ARM笔记<一>

来源:互联网 发布:python d3.js 编辑:程序博客网 时间:2024/06/05 16:29
**了解ARM
采用 RISC 架构的 ARM 微处理器一般具有如下特点:
1 、体积小、低功耗、低成本、高性能;
2 、支持 Thumb ( 16 位) /ARM ( 32 位)双指令集,能很好的兼容 8 位 /16 位器件;
3 、大量使用寄存器,指令执行速度更快;
4 、大多数数据操作都在寄存器中完成;
5 、寻址方式灵活简单,执行效率高;
6 、指令长度固定;

**了解ADS开发工具
全称:ARM Developer Suite.
ADS由命令行开发工具/GUI开发环境(Code Warrior和AXD/支持软件组成)
Code Warrior IDE开发c/C++/ARM汇编代码
AXD 用于对程序进行调试

**了解ARM工作模式
--工作状态(ARM状态--32位/字对齐  Thumb状态--16位/半字对齐)
--ARM体系结构两种方法存储数据
*大端格式--高字节存储在低地址
*小端格式--相反
--7种工作模式
1.用户模式Usr 2.快速中断FIQ 3.外部中断IRQ 4.管理模式svc 5.数据访问终止模式 6.系统模式 7.未定义指令中止模式
*运行模式可以通过软件改变,也可通过外部中断或异常处理进行改变。

**了解寄存器
ARM微处理器有37个32位寄存器,31个为通用寄存器,6个为状态寄存器。

--通用寄存器(R0~R15,R13_svc/R14_svc,R13_abt/R14_abt,R13_und/R14_und,R13_irq/R14_irq,R8_fiq~R14_fiq)

*不分组寄存器 R0-R7
*分组寄存器 R8-R14(R13通常作为堆栈指针sp/R14用作子程序链接寄存器LR,指向函数返回地址)
*程序计数器PC R15

--状态寄存器(CPSR,SPSR_svc,SPSR_abt,SPSR_und,SPSR_irq,SPSR_fiq)

**了解寻址方式
它是指处理器根据指令中给出的地址信息来寻找物理地址的方式
--立即寻址(#1)操作数本身就在指令给出
--寄存器寻址 利用寄存器中的数值作为操作数 ADD R0,R1,R2;R0<-R1+R2
--寄存器间接寻址 以寄存器中的值作为操作数的地址 ADD R0,R1, [R2] ; R0<-R1+[R2]
--基址变址寻址 将寄存器的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址 LDR R0, [R1,#4]
--多寄存器寻址 一条指令可以完成多个寄存器值的传送 LDMIA R0,{R1,R2,R3,R4}
--相对寻址 以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加就可以得到有效地址
--堆栈寻址 递增/递减堆栈

**了解指令
跳转指令:
B{条件} 目标地址
BL{条件} 目标地址
BLX 目标地址
BX{条件} 目标地址

数据处理指令:
MOV{条件}{S} 目的寄存器 源操作数
MVN{条件}{S} 目的寄存器 源操作数
*S决定指令的操作是否影响CPSR中的条件标志位的值
CMP{条件} 操作数1 操作数2 --比较,会更新GPSR标志位
TST{条件} 操作数1 操作数2 --位与,
ADD{条件}{S} 目的寄存器 操作数1 操作数2 --相加
SUB{条件}{S} 目的寄存器 操作数1 操作数2 --相减
AND{条件}{S} 目的寄存器 操作数1 操作数2 --与
ORR{条件}{S} 目的寄存器 操作数1 操作数2 --或
BIC{cond}{S} Rd,Rn,operand2 BIC R0,R0,#%1101
MUL{条件}{S} 目的寄存器 操作数1 操作数2 --乘法

程序状态访问指令:
MRS{条件} 通用寄存器,程序状态寄存器(cpsr/spsr) --传送状态
MSR{条件} 程序状态寄存器(cpsr/spsr)_<域>,通用寄存器

加载/存储指令:
LDR{条件}目的寄存器, <存储器地址> --将内存数据传送到寄存器
STR{条件}源寄存器, <存储器地址>

批量加载/存储指令:
LDM 批量数据加载指令
STM 批量数据存储指令
SWP 数据交换

移位指令:
LSL/LSR(逻辑) ASL/ASR(算术) ROR(循环右移动)

异常产生指令:
SWI 软件中断指令
BKPT 断点中断指令
原创粉丝点击