说起arm体系,其实我并不是太了解,以前一直做的mips体系的,做做驱动,或者调试调试oops bug.
这里也仅限于给自己来个抛砖引玉,作为深入研究的一个开始吧^^.
ARM, Advanced RISC Machines, 1991年成立于英国剑桥; 巧合的是, LINUX也诞生在这一年;
ARM的7种运行模式:
非特权模式<--->-特权模式
非异常模式<--->异常模式
用户模式 系统模式 中断模式,快中断模式, 管理模式, 终止模式, 未定义模式
内存结构模型:冯诺依曼结构和哈佛结构;后者分2个独立的内存空间:指令空间和数据空间;
ARM的工作状态, ARM态(32bit), THUMB态(16bit); BX指令可以切换;
ARM的存储器格式, 可设为大端格式或小端格式;
ARM寄存器组织, 37个32bit寄存器,其中:
31个通用寄存器:未分组R0~R7, 分组R8~R14(R13为堆栈指针寄存器SP, R14为子程序链接寄存器LR), 程序计数器PC(R15);
6个为状态寄存器, CPSR+5*SPSR;
ARM的7种异常:
0X0-reset, 0X4-undefined, 0X8-swi, 0XC-prefetch abort, 0X10-data abort, 0X14-保留, 0X18-irq, 0X1C-fiq;
异常优先级排序:
1.RESET 2.DATA ABORT 3.FIQ 4.IRQ 5.PRE ABORT 6.UNDEF, SWI
ARM对异常的响应:
下一条指令存入LR->CPSR复制到相应的SPSR保存->设置CPSR模式位->禁止中断位->调整到异常处理向量;
ARM从异常返回:
LR的值减去相应的偏移量送到PC中, SPSR复制到CPSR中, 同时也恢复了中断禁止位;
ARM指令分类(7种):
跳转指令, 数据处理指令, 乘法指令, 加载/存储指令, 状态寄存器指令, 协处理器指令, Thumb指令集;
嵌入式最小系统: 处理器, 内存, 时钟, 电源和复位
FIQ比IRQ更快的原因:
1. 寄存器R8~R14, 不用保存; 2. 优先级更高; 3. 最异常向量表最后, 不用跳转;
这里我们可以查看cpsr寄存器来查看当前cpu的工作模式.
对于更详细的我们只能通过cpu手册,还有参考相关实现代码和调试来加深我们的理解了.
阅读(5588) | 评论(1) | 转发(2) |