系统控制协处理器CP15的目的是控制和提供在ARM1176JZF S处理器中实现的功能的状态信息。系统控制协处理器的主要功能是:
- 全系统控制和配置
- 缓存配置和管理
- 紧耦合内存(TCM)配置和管理
- DMA控制
- 系统性能监视
系统控制协处理器不存在于不同的逻辑物理块中。
系统控制协处理器功能组:
系统控制协处理器显示为一组32位寄存器,您可以对其进行读写。一些寄存器允许不止一种类型的操作。寄存器的功能分组是:
- 系统控制和配置
- MMU控制和配置
- 缓存控制和配置
- TCM控制和配置
- 缓存主有效寄存器
- DMA控制
- 系统性能监控器
- 系统验证
系统控制协处理器控制处理器的TrustZone操作:
- 有些寄存器只能在安全域中访问
- 有些寄存器分为安全域组和非安全域组
- 有些寄存器在两个域都通用
注意
当安全监视模式处于活动状态时,核心位于安全域中。处理器将所有访问都视为安全访问,并且不管NS位的值如何,系统控制协处理器的行为都好像在安全环境中一样进行操作。在安全监视器模式下,NS位定义了处理器可访问的系统控制协处理器中的分组寄存器的副本:
- NS = 0,访问安全域CP15寄存器
- NS = 1,访问非安全域CP15寄存器
仅在安全域中可访问的寄存器总是在安全监视模式下可访问,而不管ns位的值如何。
1 系统协处理器的使用
首先介绍使用系统控制协处理器的一般方法。您可以使用MRC和MCR指令访问系统控制协处理器CP15寄存器。
MCR{cond} P15,<Opcode_1>,<Rd>,<CRn>,<CRm>,<Opcode_2>
- MCR---将寄存器<Rd>的值传递给编号为P15的协处理器
MRC{cond} P15,<Opcode_1>,<Rd>,<CRn>,<CRm>,<Opcode_2>
- MRC---使P15协处理器将值传输到ARM寄存器<Rd>。
下图显示了MRC和MCR指令的指令位模式:
MRC和MCR指令的CRn字段和CRm字段指定要访问的协处理器寄存器。
Opcode_1字段和Opcode_2字段在寻址寄存器时指定特定的操作。
L位区分MRC(L = 1)和MCR(L = 0)。
Rd寄存器使用ARM的通用寄存器,用作源寄存器或目的寄存器,用于写入或读出协处理器中值。
指令CDP,LDC和STC以及对特权CP15寄存器的非特权MRC和MCR指令以及对安全寄存器的非安全访问,导致处理器采用未定义指令陷阱。
注意
尝试从不可读取的寄存器读取或写入不可写入的寄存器会导致未定义的异常。
在所有访问CP15的指令中,Opcode_1,Opcode_2和CRm字段均应为零,除非使用指定的值选择所需的操作。使用其他值会导致未定义的异常。
在任何情况下,从任何CP15寄存器读取数据值或将数据值写入任何CP15寄存器,包括指定为不可预测(UNP),应为1(SBO)或应为零(SBZ)的那些字段,均不会对芯片造成任何物理损坏。
2 系统协处理器寄存器分配
- CRn是CP15中的寄存器号
- Op1是寄存器的Opcode_1值
- CRm是操作寄存器
- Op2是寄存器的Opcode_2值
- 类型适用于安全域(S)或非安全域(NS),并且是:
- B,在安全和非安全域中的寄存器分组。如果没有将寄存器分组,则它们对于两个域都是通用的,或者只能在一个域中访问。
- NA,无法访问
- RO,只读访问
- RO,仅限特权模式下的只读访问
- R / W,读/写访问
- R / W,仅在特权模式下进行读/写访问
- WO,仅写访问
- WO,仅在特权模式下进行只写访问
- X,访问取决于另一个寄存器或外部信号
2.1 参考Uboot,简单说明
mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
- CRn ---> c7
- Op1 ---> 0
- CRm ---> c7
- Op2 ---> 0
查看手册“ARM1176JZF-S Technical Reference Manual”的3.2节:
找到对应的CRn、Op1、CRm、Op2值,发现上面的指令的作用是:
mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
mcr p15, 0, r0, c1, c0, 0
mcr p15,0,r0,c15,c2,4