三级存储系统:
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