第一节

soc ------ 片上系统

基于ARM的嵌入式图像识别系统的设计 arm嵌入式知识点_R3


计算机系统的硬件组成:

1, 输入设备: 键盘,鼠标,

2, 输出设备: 显示器, 打印机,

3, 存贮设备: 硬盘(保存文件,保存数据), 光盘, 内存(程序运行), u盘

4, 运算器: alu

5, 控制器: controller

6, 总线: apb(硬件接口总线), ahb (高速总线), dma(直接内存存取)

使用dma总线:

设置dma: dma 的源, dma 的目的, 源的地址变化,目的的地址变化, 一次最大多少字节

使用dma:

三级存贮系统:
硬盘---- ddr内存— cache 高速缓存
cache— 保存程序运行的时候的活跃部分 , cpu可以直接访问cache, cache 存取速度比ddr更快, 所以程序运行的会更快

usb 转串口: ch340(usb信号转串口信号的芯片) pl2303(usb信号转串口信号的芯片)

max232 芯片: ttl电平 转换为rs232电平

usb接口: vbus 电 gnd 地 d+、d- 一对差分信号线

norflash 和 nandflash
Nor flash nand flash:
容量小 容量大
稳定性好 稳定性稍差
可以执行程序 不能执行程序
寿命短 寿命长
价格高 价格低
存取速度慢 存取速度快

arm处理器:
arm7-- arm9 — arm10 — arm11 之后, arm处理器分支:
cortex-m: mcu ------- 进入单片机市场
cortex-r: real time — 实时性, 军工, 汽车电子,
cortex-a: application — 应用型产品,

编程模型:
ARM 采用的是32位架构.
ARM 约定:
Byte : 8 bits
Halfword : 16 bits (2 byte)
Word : 32 bits (4 byte)
Doubleword 64-bits(8byte)(Cortex-A处理器)

大部分ARM core 提供:
ARM 指令集(32-bit)
Thumb 指令集(16-bit )

arm处理器工作模式:
正常模式:
supervisor 模式: 管理模式 , 上电复位, reset 复位, wdt 复位, swi 软中断, 特权模式
user 模式: 用户模式, 一般情况下就工作在user模式
system模式: 和user模式使用的寄存器完全相同, 特权模式, 主要用在异常的处理函数里

中断模式:
irq 模式: 中断模式, 特权模式
fiq模式: 快中断模式, 特权模式
异常模式:
undef 模式: 未定义指令异常模式, 特权模式
abort模式: 存取异常模式, 特权模式

cotex-a 系列:
多了一个模式, monitor模式

cortex-a 寄存器组织:
共有40个寄存器, user/system模式下 使用的寄存器最少, 是17个

r13 ----------栈指针, 栈寄存器 , 不同的处理器模式下, 栈指针r13 都是独立的。
r14 --------- 链接寄存器 ,保存的是函数调用应该返回的地址, 不同的处理器模式下, r14 都是独立的。
r15 ------ pc, program counter, 程序计数器, 永远指向的下一条要抓取的指令 , 不同的处理器模式下, r15 都是唯一的

cpsr : current program status register 当前的程序状态寄存器 , 不同的处理器模式下, cpsr 都是唯一的

spsr: 保存的程序状态寄存器 , 不同的处理器模式下, spsr 都是独立的
arm 指令集特点:
所有ARM指令均为32-bits长
大部分为单周期指令
所有指令都可以条件执行
采用 Load/Store 架构

arm 7 指令流水线:
arm7 冯.诺依曼 架构, 三级流水线
fetch 抓取 decode 译码 exe 执行
pc 永远指向的是正在抓取的指令 pc-4 -------- decode pc-8------- execute

arm 9 :
哈佛架构, 五级流水线
增加了可用的存储器宽度
指令存储器接口
数据存储器接口
可以实现对指令和数据存储器的同时访问
三级流水线,五级流水线对比:

第2节

arm 指令集:
risc – 精简指令集计算机, arm
cisc— 复杂指令集计算机 , x86
add r0,r1 ----------- r0 + r1 —> r0

程序状态寄存器:

基于ARM的嵌入式图像识别系统的设计 arm嵌入式知识点_基于ARM的嵌入式图像识别系统的设计_02

条件码:

基于ARM的嵌入式图像识别系统的设计 arm嵌入式知识点_寄存器_03

arm 的每条指令都可以有条件的运行, 指令: 31*15 == 465

默认情况下, 比较指令可以改变cpsr 的n,z,c,v

每条指令后跟‘s’,都可以改变cpsr 的n,z,c,v

mov r1,r2,lsl #2 该条指令的编码格式如下:

基于ARM的嵌入式图像识别系统的设计 arm嵌入式知识点_基于ARM的嵌入式图像识别系统的设计_04


cond ---- 条件码 1110
 指令识别码 0001101
 s 0
 bit19–bit16 0000
 rd 目的寄存器: 0001
 imm5: 00010
 bit6—bit4 000
 rm 第二操作数寄存器 0010
该条指令的机器码: 1110 0001 1010 0000 0001 0001 0000 0010
 e1 a0 11 02
 学习指令:分支指令:
 Branch : B{} label
 Branch with Link : BL{} subroutine_label
 数据处理指令:
 算术指令: ADD ADC SUB SBC RSB RSC
 逻辑指令: AND ORR EOR BIC
 比较指令: CMP CMN TST TEQ
 数据搬移: MOV MVN加法指令 ADD R1,R2,R3 R1=R2+R3
带进位加法 ADC R1,R2,R3 R1=R2+R3+C
减法指令 SUB R1,R2,R3 R1=R2-R3
逆向减法 RSB R1,R2,R3 R1=R3-R2
带借位减法 SBC R1,R2,R3 R1=R2-R3-!C
带借位逆减法 RSC R1,R2,R3 R1=R3-R2-!C
逻辑与指令 AND R0,R0,#0X0F
逻辑或指令 ORR R0,R0,#0X0F
逻辑异或 EOR R0,R0,#0X0F
位清除 BIC R0,R0,#9
比较指令 CMP R1,#10 cpsr = R1-10
反值比较指令 CMN R1,R2 cpsr =R1+R2
位测试指令 TST R1,#3 cpsr = R1 AND 3
相等测试 TEQ R1,R2 cpsr = R1 EOR R2
数据传输指令 MOV R1,R2 R1=R2
取反传送指令 MVN R1,R2 R1= ~R2指令格式:
 语法:
 <指令>{}{S} Rd, Rn, Operand2
 每条指令都可以带条件cond 的运行, 后跟s 影响cpsr的n,z,c,v
 Rd ---- 目的寄存器,
 Rn ---- 第一操作寄存器
 Operand2 ---- 第二操作数(可以数立即数, 可以数寄存器, 可以是移位的寄存器)比较指令没有目的寄存器的
 数据传输指令mov 没有第一操作寄存器的,处理器里一般没有减法器, 减法都是通过加法器完成的,
 逆向减法---- 主要就是第二操作数可以是立即数, 第一操作数永远是寄存器位清除指令:把第二操作数为1 的位, 将对应的第一操作寄存器相应的位清零
 BIC R0,#9 // 0000 1001反值比较指令
 cmp r1,r2 cpsr ==== r1-r2
 CMN R1,R2 cpsr =R1+R2
 位测试指令
 TST R1,#3 cpsr = R1 AND 3
 相等测试
 TEQ R1,R2 cpsr = R1 EOR R2第3节
合法的立即数:
 1, 有效位一定是小于或等于 8
 2, 对有效位进行偶数个移位,可以表达该数字下面哪些立即数是数据处理指令中有效的数据?
 a) 0x00AB0000 ok b) 0x0000FFFF ng c) 0xF000000F ok
 d) 0x08000012 ng e) 0x00001f80 ok f) 0xFFFFFFFF ok数据池:
 ldr r0,=0x1234 一定是”=”, 这是伪指令
 对不合法的立即数, 采用的ldr 伪指令, 具体的数值实际存放在数据池 里, 依赖pc 和偏差地址, 去数据池抓取数据赋值给寄存器内存访问: 单寄存器传送 load/store
 ldr — load reigister
 str ---- store registerLDR STR 4个字节 Word
 LDRB STRB 1个字节 Byte
 LDRH STRH 2个字节 Halfword存储器系统必须支持所有访问宽度
 语法:
 LDR{}{} Rd,  
 STR{}{} Rd,  
内存访问: 变址寻址
 ldr r0,=str1ldr r1,[r0]
 ldr r1,[r0,#4] x = *(p+1)
 ldr r1,[r0],#4 x = *p++;
 ldr r1,[r0,#4]! x = *(++p)块数据传送:
 语法:
 <LDM|STM>{}<addressing_mode> Rb{!}, <寄存器 list>
 load多个寄存器
 store 多个寄存器
 cond — 条件码
 addressing_mode ---- 基址指针的变化方式
 addressing_mode : ia ----------先访问 , 地址再增加
 ib ---------地址先增加, 再访问
 da----------先访问 , 地址再减小
 db----地址先减小, 再访问LDM / STM指令允许一次传送1到16个寄存器到/从存储器中。
 寄存器传送顺序是固定的,不能被改变
 最小数字的寄存器总是被对应到存储器的最低地址上。满降栈: full descending
 压栈 : stmfd ------------- stmdb
 出栈: ldmfd ------------- ldmiastmfd sp!,{寄存器列表}
 ldmfd sp!,{寄存器列表}PSR 传送指令: 程序状态寄存器传送指令
 MRS和MSR允许传送CPSR / SPSR中的内容到/从一个通用寄存器中。
 语法:
 MRS{} Rd, ; Rd = 
 MSR{} <psr[_fields]>,Rm ; <psr[_fields]> = Rm

基于ARM的嵌入式图像识别系统的设计 arm嵌入式知识点_寄存器_05