(基于ARM的)微机原理与接口技术笔记(4)
(基于ARM的)微机原理与接口技术笔记(4)
物理上37个register 逻辑上R0-R15
r13 栈指针(SP)
r15 程序指针(PC)
ARM状态:32bit宽指令
Thumb状态:16bit指令
r14 链接寄存器 储存函数返回等.
cpsr 程序状态寄存器 当前cpu的模式 状态
低5位[4:0]模式[5] ARM/Thumb [6]禁止快中断位 [7]禁止中断位
[31:28]N(负数结果)Z(零结果)C(进位/借位)V(溢出)
register是用触发器实现的 成本高 小容量
memory是MOS+电容实现的 成本小 大容量
IO设备的register(配置寄存器)和cpu的不太一样(且听后面几回分解).
ARM7TDMI硬件结构
这个图是只有核的,如果要用的话需要单配外设

芯片厂子没有这样做的,都要附带外设.
jtag接口和结构,可以用于偷窥寄存器和内存中

计算机-(usb)-jlink-(jtag)-单片机
处理器的时序
cpu的时序是CPU在执行指时所需控制信号的时间顺序
(上升沿,下降沿,宽度,周期,....)
时钟周期 CPU工作时间的最小单位 完成任何操作都需要整数个时钟周期
指令周期 一条指令从内存中取出到执行完毕用时
总线周期 把CPU通过总线与内存 外设 内部部件之间进行一次数据交换操作需要的时间.
处理器的选型问题
1.内核
2.工作频率
3.片内存储器与存储器扩展接口
4.封装
5.片内功能模块
飞控或者平衡车可以用Cortex-M0 CV等操作建议高端核Cortex-M7核
实验用高端核 产品需要考虑,同样性能尽量压成本.
ST R710F处理器
R71xF 类芯片 现在能买到 最小系统开发板买不到
32位 20年前的高性能,低功耗
ARM指令集
ARM7TDMI ARM7TDMI-S 有ARM指令集(32位)和Thumb指令集(16位)
ARM和Thumb可以切换
例如下面的汇编
mov r1,r2
sub r0,r1,r2
ands r1,r1,r2,lsl r3
stmia r0!,{r2-r7,r12}
arm汇编的格式
<opcode 助记符> {<cond 执行条件,可选>} {S 是否影响CPSR,可选} <rd 目标寄存器>,<Rn 操作数1的寄存器>,{<operand2 操作数2>}
汇编语言的语句是不区分大小写的,assembler会自动识别这些语句,但是汇编程序中用户定义的变量标号等,将区分其大小写,编程时要注意这些区别.以免出错.
操作:
数据处理
算术运算: add adc sub sbc rsb rsc
逻辑运算: and orr eor bic
数据传送: mov mvn
存储器访问: ldr str ldm sdm
比较: cmp cmn tst teq
分支跳转: b bl bx
其他
条件码作为后缀 一般可以不写,默认AS
if(a>b)a++;
else b++;
对应的arm汇编(假设a位于r0,b位于r1)
cmp r0,r1
addhi r0,r0,#1
addls r1,r1,#1
cmp改变psr addhi加s会影响psr
例1:
if(a==0)func(1);
对应arm汇编
cmp r0,#0
moveq r0,#1
bleq func
例2:
if(a==4||a>=10)x=0;
对应arm汇编(假设a在r0 x在r1)
cmp r0,#4
cmpne r0,#10
moveq r1,#0
p.s. 开全局变量会慢.
第二操作数可以有以下形式:
寄存器
移位值(5位unsigned) 另一register的lobyte
立即数(8位)
寄存器方式下 操作数即为寄存器的数值
sub r1,r1,r2
addeq r2,r4,r5
寄存器移位方式下 移位结果为操作数 Rm值不变
逻辑移位 左移*2 右移/2
算术移位 符号不变
循环移位 (扩展的寄存器方式会影响C标志位)
add r1,r1,r1,lsl #3
sub r1,r1,r2,lsr r3
立即数:8位二进制循环移位偶数位可以得到的
第1行: r1=r1+r1*8
第2行: r1=r1-(r2右移r3位)
装载32位常数:
ldr rd,=#const
下载pdf版链接: