ARM的基础知识

文章详细介绍了计算机的存储体系,包括高速缓存(Cache)在CPU工作中的作用,以及二级存储系统。同时,讲解了计算机内部的总线结构,ARM处理器的不同分支(Cortex-M,Cortex-R,Cortex-A)及其特性,以及处理器的工作模式。此外,还涵盖了处理器的中断、异常处理机制,寄存器组织和ARM指令集的特点,如流水线技术在ARM7和ARM9中的应用。
摘要由CSDN通过智能技术生成

三级存储系统:

cache: 高速缓存

高速缓冲存储器(Cache)

CPU可以直接访问,用来存放当前正在执行的程序中的活跃部分,以便快速地向CPU提供指令和数据。

二级存储系统是指:高速缓冲存储器(Cache)+ 主存储器

cup的工作原理:

总线:

将各大基本部件,按某种方式连接起来就构成了计算机的硬件系统。

目前许多计算机(主要指小、微型计算机)的各大基本部件之间是用总线(Bus)连接起来的。

总线是一组能为多个部件服务的公共信息传送线路,它能分时地发送与接收各部件的信息。

arm 的发展:

arm11 之后, 以下3个分支

cortex-m: 单片机 低端处理器

cortex-r: realtime 实时性 性能强大 没有mmu(内存管理单元), 机械电子 汽车电子

cortex-a: application 应用型产品 性能强大 有mmu(跑操作系统,linux)

处理器的工作模式:

8种工作模式:

user 模式: 大部分时间, 处理器工作在该模式, 不是特权模式

fiq模式: 快中断模式 特权模式

irq模式: 中断模式 特权模式

supervisor 模式: 特权模式 reset后,处理器进入该模式

abort 模式: 存取异常, 特权模式,

undef模式: 未定义指令模式, 特权模式

system模式: 特权模式,user模式不能执行的指令, system模式下可以执行

monitor 模式: cortex-a 处理器独有的模式 , 监视模式

复位: 上电复位 reset按钮复位 看门狗复位

中断: 硬件产生的,

异常:软件产生的,

寄存器组织:

cortex-a 有40个寄存器

cpsr --------- current program status register当前程序状态寄存器

spsr------------- saved program status register 保存的程序状态寄存器

r13 ----------------- 栈指针 不同模式下有自己的栈指针

r14 ----------------- 链接寄存器 不同模式下有自己的链接寄存器

r15----------- pc program counter 程序计数器

arm指令集特点:

所有ARM指令均为32-bits长

大部分为单周期指令

所有指令都可以条件执行

采用 Load/Store 架构

程序状态寄存器cpsr

指令后面加s或者用比较指令就会影响的是n负数 z零 c借位 v溢出 四个位

处理器的主要构成:

流水线:

arm7:

冯。诺伊曼架构 3级流水线

3级流水线:

fetch ------------- 抓取机器码到cpu pc

decode ----------- 译码, pc-4

execute------------- 执行 pc-8

cpi --------- cycles per instruction 每条指令的周期数

arm9:

哈佛架构 5级流水线

哈佛架构相比冯。诺伊曼架构:

增加了可用的存储器宽度

指令存储器接口

数据存储器接口

可以实现对指令和数据存储器的同时访问

arm 指令:

cpsr : 当前程序状态寄存器

cmp r0, r1 // r0 - r1 -------------->会影响cpsr 的 n , z, c, v

sub r2,r3,r4 // r3-r4--->r2

mov r0,3 //3----->r0

比较指令一定影响cpsr的n z c v

其他指令后跟s 会影响cpsr的n z c v

数据处理指令:

算术指令: ADD 加 ADC 带进位加 SUB 减SBC带进位减 RSB RSC

sbc r5,r1,r3 ========== r1-r3-!c------------->r5

rsb ----------------- 逆向减法

rsb r0,r1,#100 ============= 100 - r1 ------------> r0

逻辑指令: AND ORR EOR BIC

and 位与

orr 位或

eor 位异或

bic 位清除

比较指令: CMP CMN TST TEQ

cmp r0,r1 //r0 -r1 --------->cpsr

cmn r0,r1 //r0 +r1 --------->cpsr

tst r0,#(1 << 15) //r0 and r1 ----------------> cpsr 通常可以判断寄存器r0 的某些位是1 还是0

teq r0,r1 // r0 ^ r1 -------------->cpsr 相等测试

数据搬移: MOV MVN

mov r0,#1 1------------------->r0

mvn r0,#1 (~1) -------------------------->r0

指令格式:

<指令>{}{S} Rd, Rn, Operand2

任何指令后可以跟条件码, 指令后可以跟s(影响cpsr)

比较指令一定影响cpsr

Rd ---------- 目的寄存器

比较指令没有目的寄存器

Rn ------------ 第一操作寄存器

add r0,r1,r2

数据搬移指令没有第一操作寄存器

mov r0, #3

mov r0,r1

合法的理解数:

什么是合法的立即数:

unsigned char的数(0-255), 经过循环右移偶数位(0--30), 可以表示出来的数就是合法的立即数。

单寄存器数据传送指令:

语法:

LDR{}{} Rd,

ldr --------- 从内存装载变量的内容到寄存器Rd

str ----------- 把寄存器Rd的值 写入 内存

基址变址寻址:

ldr r0,=arr

前索引: ldr r1,[r0,#4] r1 = *(r0+4) r0不变化

后索引: ldr r1,[r0],#4 r1 = *r0, r0=r0+4

自动索引:ldr r1,[r0,#4]! r1=*(r0+4), r0=r0+4

块数据传送:

语法:

<LDM|STM>{<cond>}<addressing_mode> Rb{!}, <寄存器 list>

ldm : 快数据读内存到cpu

stm: 把cpu 里的寄存器 写入 内存

cond ----- 所有指令都可以有条件执行

addressing_mode : 依赖基础指针访问内后后, 指针的变化方式

ia: 依赖Rb 访问内存,访问完毕后, Rb 会增加 (寄存器列表的个数 * 4)

ib:依赖Rb 访问内存, Rb 会先增加 (寄存器列表的个数 * 4), 之后再访问Rb指向的内存

da:依赖Rb 访问内存,访问完毕后, Rb 会减小 (寄存器列表的个数 * 4)

db:依赖Rb 访问内存, Rb 会先减小 (寄存器列表的个数 * 4), 之后再访问Rb指向的内存

ldmia: stmdb:

Rb; 基础指针

!: 基础指针会变化

寄存器 list: 从基础指针Rb 读多少个数据到寄存器列表

块数据传送的特点:

LDM / STM指令允许一次传送1到16个寄存器到/从存储器中。

寄存器传送顺序是固定的,不能被改变

最小数字的寄存器总是被对应到存储器的最低地址上。

栈操作:

满栈: sp 指向的是最后一次压栈的地址

空栈: 指向空,

降栈: 栈底大地址, 栈顶小地址, 随着压栈 ,sp 越来越小, 即降栈, 反之就是升栈

常用的是满降栈 , 满降栈 的压栈:

stmdb sp!,{r0-r2} 压栈r0-r2 到栈区

满降栈的出栈:

ldmia sp!,{r0-r2} 出战sp指向的内存的数据 到 寄存器r0-r2

满降栈的操作:f------------full d-----------------dec

压栈:stmdb ------------------stmfd

出栈: ldmia --------------- ldmfd

异常处理:

中断: 硬件引起的,

异常: 软件产生的,

向量地址 :每个中断或异常产生后, cpu会从固定的地址来执行, 这个地址就是向量地址

多个异常或中断的向量地址,统称向量地址表

arm的异常:

Reset: supervisor 模式

Data Abort: 数据异常 进入abort模式

FIQ 快中断 进入fiq模式

IRQ 中断 进入irq模式

Prefetch Abort 预取异常 进入abort模式

SWI 软中断(软件产生的中断) 进入supervisor模式

Undefined instruction 未定义指令异常 进入undef 模式

异常的处理过程:

异常产生后:

当异常产生时, ARM core:

拷贝 CPSR 到 SPSR

设置适当的 CPSR 位:

改变处理器状态进入 ARM 状态

改变处理器模式进入相应的异常模式

设置中断禁止位禁止相应中断 (如果需要)

保存返回地址到 LR

设置 PC 为相应的异常向量

异常处理函数: 需要工程师自己压栈,保存现场

异常处理完毕: 自已完成的

从 SPSR恢复CPSR

从LR恢复PC

如果之前有压栈, 还需要出栈

uart接口编程

通用异步收发器 -----------uart 编程 、 串口编程

串口编程:

rs232 电平 负逻辑

逻辑0--------------3-15v

逻辑1-------------- -3 --------- -15v 电平

uart编程:

ttl 电平

逻辑0----------------- 0v

逻辑1 ---------------------- 3v

adc 接口编程

模数转换器 analog digital converter

ad 转换器的主要技术指标:

分辩率(Resolution)

指数字量变化一个最小量时模拟信号的变化量

转换速率(Conversion Rate)

是指完成一次从模拟转换到数字的AD转换所需的时间的倒数。

积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD

可达到纳秒级。

量化误差(Quantizing Error)

由于AD的有限分辩率而引起的误差

偏移误差(Offset Error)

输入信号(模拟量) 为零时输出信号(转换的结果) 不为零的值

满刻度误差(Full Scale Error)

满度输出时(数字量)对应的 输入信号与理想输入信号值之差。

线性度(Linearity)

实际转换器的转移函数与理想直线的最大偏移,不包括以上三种误差。

pwm: pulse width modulation

脉冲宽度调制 , 主要用在电机的控制

调制需要输出脉冲的周期,

调制需要输出脉冲的占空比 ,

pwm定时器实现pwm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值