ARMv8-A架构基础之系统控制寄存器

发布者:哈哈哈33最新更新时间:2022-02-13 来源: eefocus关键字:ARMv8-A 手机看文章 扫描二维码
随时随地手机看文章

系统控制寄存器(SCTLR)用于控制标准内存和系统设备,并为在硬件内核中实现的功能提供状态信息。

cpsr_bits.png

并不是所有的位在EL1上都可用。 各个位代表以下内容:

UCI设置此项时,在AArch64的EL0中可以访问DC CVAU,DC CIVAC,DC CVAC和IC IVAU指令。
EE异常字节序。

0小端

1大端。
EOEEL0中数据访问的字节顺序。这个位的可能值是:

0小端。

1大端。
WXN写入权限对XN(eXecute Never)的涵义。

0有写入权限的区域不被强制为XN。

1有写入权限的区域被强制为XN。
nTWE值为0表示如果指令将导致硬件内核休眠,则WFE指令会陷入到EL1。

值为1表示WFE指令按正常执行。
nTWI值为0表示如果指令将导致硬件内核休眠,则WFE指令会陷入到EL1。

值为1表示WFE指令按正常执行。
UCT值为1表示在AArch64中的EL0访问CTR_EL0寄存器是允许的。

值为0表示在AArch64中的EL0访问CTR_EL0寄存器是禁止的。
DZE在EL0上访问DC ZVA指令。

0不允许执行。

1允许执行。
I这是EL0和EL1中指令缓存的使能位。

0指令访问普通内存不会被缓存。

1指令访问普通内存会被缓存
UMA用户掩码访问。当EL0使用AArch64时,控制EL0中的中断掩码的访问。

0试图使用MSR或MSR指令访问DAIF被陷入在EL1。

1尝试使用MSR或MRS指令访问DAIF不被陷入在EL1处。
SED在EL0使用AArch32时,禁用SETEND指令。

0 SETEND指令使能。

1 SETEND指令禁用。
ITDIT禁用位。这个位的可能值是:

0 IT指令可用。

1 IT指令被视为一个16位指令。只有另一个16位指令或32位指令的前一半可以跟随。这取决于实现。
CP15BENCP15屏障启用。如果有实现,则它是AArch32 CP15 DMB,DSB和ISB屏障操作的使能位。
SA0EL0中堆栈对齐检查启用。
SA堆叠对齐检查启用。
C数据缓存启用。这是EL0和EL1上数据高速缓存的使能位。数据访问可缓存普通内存将被缓存。
A对齐检查使能位。
M启用MMU。

访问SCTLR


要访问SCTLR_ELn,可使用:


MRS ,SCTLR_ELn //将SCTLR_ELn读入Xt

MSR SCTLR_ELn, //将Xt写入SCTLR_ELn

如下例所示:


MRS X0,SCTLR_EL1 //读取系统控制寄存器配置数据

ORR X0,X0,#(1 << 2)//设置[C]位(位[2])启用数据缓存

ORR X0,X0,#(1 << 12)//设置[I]位(位[12])使能指令缓存

MSR SCTLR_EL1,X0 //写入系统控制寄存器配置数据


注意

在任何异常级别启用数据和指令高速缓存之前,必须使处理器中的高速缓存失效。


关键字:ARMv8-A 引用地址:ARMv8-A架构基础之系统控制寄存器

上一篇:ARMv8-A架构基础之更改执行状态(寄存器)
下一篇:ARMv8-A架构基础之处理器状态

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved