历史上的今天
今天是:2024年11月02日(星期六)
2021年11月02日 | ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础
2021-11-02 来源:eefocus
1、寄存器:
总共有37个寄存器,最多可以有17个活动寄存器(16个数据寄存器,2个状态寄存器:CPSR和SPSR)


R13:堆栈指针:指向当前处理器模式的堆栈栈顶
R14:链接寄存器,保存子程序的返回地址。【当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份】
R15:程序技术器,处理器下一条要取出的指令地址。【ARM状态下,指令4字节对齐,位[1:0]为0。位[31:2]保存PC】
【注】快速中断的r8-r12是分组寄存器,r13-r14每种模式都有自己的分组寄存器。r15没有分组寄存器。用户模式和系统模式没有分组寄存器。
2、当前程序状态寄存器CPSR:

3、处理器模式:
除了用户模式外,每一种模式可以改写cpsr中的模式位来改变。当一个异常或中断发生的时候cpsr寄存器被保存到相应模式的spsr寄存器中,但是当用户程序改写cpsr寄存器切换模式的时候,cpsr不会被自动保存。系统上电:从管理模式开始,ARM指令状态。
除了USR和SYS外都是异常模式
除了USR外都是特权模式 , 特权模式可以通过直接修改CPSR中相应的位来切换到USR,但是USR不能直接修改CPSR,只能通过指令,
OS的内核态程序工作在SVC模式, 用户态程序工作在USR模式
ARM的CPU复位就处于SVC模式,执行完启动代码后就需要切换到USR模式
4、Thumb指令
指令的操作数仍然是32位,寻址地址是32位。
该状态下,读取R15(PC)位0为0,位31-1保存了程序计数器的地址。写入R15时,位0被忽略,位31-1保存了程序计数器要写入的值。即:PC的位0一直保持为0,前面31位保存了下一条指令的地址。
ARM指令:字对齐,地址的最后两位为0;thumb指令:半字对齐,地址的最后一位为0。【因此最后一位不可能是有用地址】
可以使用R0-R7寄存器。有些指令还可以使用PC、lr、sp寄存器。
【解释】:BX跳转到 【加1操作,由编译器完成。去1 -- 可能是硬件自动完成,并不产生指令】 arm与thumb间的切换 1,由arm状态切换到thumb 状态将寄存器的最低位设置为1 BX指令:R0[0]=1,则执行BX R0指令将进入thumb状态 2,由thumb状态切换到ARM状态 寄存器最低位设置为0 BX指令:R0[0]=0,则执行BX R0指令将进入arm状态 当处理器进行异常处理时,则从异常向量地址开始执行,将自动进入ARM状态。 注意:ARM处理器复位后开始执行代码时总是只处于ARM状态; Cortex-M3只有Thumb-2状态和调试状态; 由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就无需Thumb了。 另外,具有Thumb-2技术的ARM处理器也无需再ARM状态和Thumb-2状态间进行切换了,因为thumb-2具有32位指令功能。 总的说,arm状态与Thumb状态的本质区别就是指令的位数不同,arm是32位的指令状态,而thumb是16位 的指令状态,而thumb-2状态是arm状态和thumb状态的结合和优化。
上一篇:ARM体系结构--第一章
史海拾趣
|
联华众科CPLD开发板 CA127 北京联华众科科技有限公司 http://www.lianhua-zhongke.com.cn Abstract 摘 要:联华众科CPLD开发板CA127核心器件为 Altera MAX II系列的EPM1270,CA127具有丰富的板载资源,由于板载有51 ...… 查看全部问答> |
|
交叉编译疑问:Windows PC上,利用ADS(ARM 开发环境),使用gcc 和armcc编译器 开发环境: 在Windows PC上,利用ADS(ARM 开发环境),使用gcc 和armcc编译器; 查看编译命令中的makefile文件,有用的是\"gcc ******\"(此处省略掉编译的文件名), 也有\"armcc ******\"(此处省略掉编译的文件名),最后用armlink链接。 以前学 ...… 查看全部问答> |
|
在WinCE设备上设置了开机和屏保密码后,用ActiveSync与PC机同步时要求输入密码 我在WinCE设备上设置了开机和屏保密码,开机和屏保密码均正常,但是用ActvieSync与PC机同步时在PC端提示要输入密码,输入前面设置的开机和屏保密码后提示密码错误,连续三次出错后就停止连接了,请问该如何解决?客户要求WinCE设备必须要设置开机和 ...… 查看全部问答> |
|
一,学习嵌入式系统前提 (1)语言基础:较为熟悉C语言的开发,例如头文件的编写管理,一工程多文件协调编程的经验。另外由于很多芯片或者其他资料都是英文而并没那么快汉化,故学习者应有一定的英语阅读基 ...… 查看全部问答> |
|
计算机控制系统输入/输出通道联合仿真(A/D、D/A联合仿真) AD转换芯片采用ADC0809,DA转换芯片采用DAC0832。 用4位数码管显示ADC0809采集的温度(假设为0~100°C,用电位器来模拟,3位整数,1位小数。) 将采集的电压值(数字量00~FFH)不经过PID运算直接送DAC0832输出。对比输出的电压值是否等于 ...… 查看全部问答> |






