ARM
- 传感模块:muc(裸板开发)
- 嵌入式设备:嵌入式硬件 io与中断
ARM,nips,prworpc,ATOM,msp430 - 嵌入式软件:
linux,uCos,win10,Vxwork,freeRTOS(免费实时系统) - sever:PC
电路
- 计算机系统=硬件系统+软件系统
存储器
- RAM:SDRAM(数据可能丢失,需要初始化),SRAM(静态 2M——4M)
- ROM:nor,ERRAM,EEPRAM,flash(nor,nand,emmc)
- 相变材料()
三级存储系统
- Rag(寄存器)
- Cache(缓存)(cup等待时间减少)
- 主存储器
- 辅助存储器
总线
- 运算器 ALU
- 控制器 是整个计算机的指挥中心
哈佛
数据和指令分开存储;
为了避免数据访问冲突
- 单总线(低速)
- 外部设备应用占用的总线主存储器不能使用
- 多总线(高速)
- 主存储器总线是独立;
ARM指令
- arm数据类型
- byte:8bit
- halfword:16bit
- word:32bit
- cotex-a
- double word:64bit
arm指令集
- arm:32bit
- thumb:16bit(精简板arm)
cotex-a- thumb-2 arm和thumb 混合
- java code:8bit
- thumb-ee
arm工作模拟(8种工作模式)
- User
- 唯一一个非特权模式,大部分任务执行在这种模式(需要手动切入)
- System
- 和User使用相同的资源的特权模式(需要手动切入)
- FIQ
- 快速中断(高优先级)
- IRQ
- 普通中断(低优先级)
- Supervisor(SVC)
- 特权模式 当CPU复位 或 软中断会进入该模式
- Abort
- 异常模式 数据读取失败或指令加载失败
- Undef
- 未定义模式 发现错误指令
- Conrtex-A
- Monitor
- 安全扩展模式
arm寄存器分组
- User System:共享17个
- FIQ:私有8个
- 其他:私有3个*4
- 17 + 20 = 37
- Conrtex-A
- 37 + 3 = 40
- r15 pc 程序指针
- r14 lr 跳转返回地址(链接)
- r13 sp 栈堆指针寄存器
- cpsr:程序状态寄存器
- spsr:程序状态备份寄存器
程序状态寄存器
+ E位:大小端控制位
+ A位:A=1 禁止不精确的数据异常
+ 中断禁止位
- I = 1:禁止 IRQ
- F = 1:禁止 FIQ
+ T bit
- T = 0,J = 0;处理器处于ARM状态
- T = 1,J = 0;处理器处于Thumb状态
- T = 1,J = 1;处理器处于Thumb状态
+ Mode位
- 处理器模式位
- 10000 User mode;10001 FIQ mode;10011 SVC mode;
10111 Abort mode;11011 Undfined mode;11111 System mode
10110 Monitor mode;10010 IRQ
+ 标志位
- N:移除标志位
- Z:进位标志位
- C:零标志位
- Z:负数标志位
程序指针PC(r15)
- ARM(4字节对齐)
- thumb (2字节对齐)
- Jazelle (4字节对齐)
异常处理
- 当异常产生时,ARM core
- 设置适当的cpsr位:
- 改变处理器状态进入ARM态
- 改变处理器模式进入相应的异常模式
- 设置中断禁止位禁止相应中断
- 保存返回地址到LR_
- 设置PC为相应的异常向量
- 返回时,异常处理需要:
- 从SPSR_恢复CPSR
- 从LR_恢复PC
- Note:这些操作只能在ARM态执行
A9 之前 0XFFFF0000
A9 之后 0X00
Conrtex-A 任意指定
- 低功耗、低成本的微控制器
- Cortext——M3
- Cortext——M1
ARM的指令集合
- 斜处理器: 负责控制CPU每个模块的工作方式(16个)
助记符 | 操作 |
MOV | 将数据从一个寄存器赋值到另一个寄存器 |
SUB | 减 |
ADD | 加 |
ADC | 带进位的翻转减 |
AND | 逻辑与 |
EOR | 逻辑异或 |
LDR | 从内存中将一个32位的字读取到目标寄存器中 |
STR | 将一个32位的字数据写入到指令中指定的内存单元 |
BL | 跳转连接 |
B | 跳转(goto) |
S选项代表操作结果是否CPRS的标志位
条件码 | 助记符后缀 | 标志 | 含义 |
0000 | EQ | Z置位 | 相对 |
0001 | NE | Z清零 | 不相等 |
0011 | CS | C置位 | 无符号数大于或等于 |