博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uboot-step 2 设置cpu为svc模式
阅读量:2356 次
发布时间:2019-05-10

本文共 664 字,大约阅读时间需要 2 分钟。

uboot-step 2 设置cpu为svc模式

什么是svc模式

首先,得说下ARM的工作模式,如图所示,处理器一般运行在user模式,当发生异常时,便会进入相应的模式去执行,svc模式即supervisor,管理模式,一般情况下是操作系统所运行的模式 此模式下处理器有权限去访问一些受保护的寄存器,因此我们需要将处理器设置为此模式来进行一些必要的初始化。

arm mode.png

如何修改到svc模式

修改处理器的工作模式需要更改处理器的状态寄存器cpsr的相应位,如下图所示,cpsr的[0-4]位为mode位,当其值为10011=0x13时,即可设置为svc模式

cpsr.png
cpsr set.png

代码实现

set_svc:    mrs r0 ,cpsr    bic r0 ,#0x1f    orr r0 ,#0xd3   @理论上M[4-0]位为10011 0x13即可,此处为1101 0011 多了I,F,T:关闭了IRQ和FIQ,处理器工作在arm模式    msr cpsr,r0     mov pc,lr

第一步: 将这5位全部清零 bic指令

第二步: 在给某些位置1 orr指令

同时这里会用到msr指令 和 mrs指令

原因: 因为在访问CPSR/SPSR这两个寄存器时 ,先要把寄存器导入到通用寄存器当中做相应修改然后再写入,而不能直接修改GPSR/SPSR这两个寄存器。

msr: 将通用寄存器的值写入CPSR或者SPSR寄存器

mrs: 将CPSR寄存器的值导入到通用寄存器中

转载地址:http://qwbtb.baihongyu.com/

你可能感兴趣的文章
Hadoop MapReduce Job性能调优——修改Map和Reduce个数
查看>>
X Chen笔记----Centos6.9安装rsycn文件同步
查看>>
X Chen笔记----Ubuntu关闭防火墙
查看>>
移动固态硬盘中安装Ubuntu18.04,并且运行于其他电脑
查看>>
记录修改Ubuntu用户名和密码
查看>>
关于最小生成树的Prim算法和Kruskal算法
查看>>
linux常用命令
查看>>
每天一个linux命令(13):less 命令
查看>>
java读写分离
查看>>
svn + jenkins + maven 实现java环境的自动化构建和部署
查看>>
Jenkins+Maven+SVN自动部署配置文档
查看>>
jenkins的安装配置,插件配置,安装插件,配置maven,jdk路径,配置安装插件,项目配置,自动构建配置
查看>>
redis集群启动脚本
查看>>
spring-session使用配置(分布式共享session配置)
查看>>
深入理解 Spring 事务原理
查看>>
单点登录原理与简单实现
查看>>
通俗理解ZooKeeper是如何保证数据一致性的
查看>>
Zookeeper核心工作机制(zookeeper特性、zookeeper数据结构、节点类型)
查看>>
基于Zookeeper的分布式锁
查看>>
程序员想提升工作效率,就别再做这七件事啦
查看>>