ARM920T 的CP15 协处理器 ARM920T 的MMU 和Cache 都集成在CP15 协处理器中,MMU 和Cache 的联系非常密切,本节首先从总体上介绍MMU、Cache 和CPU 核是如何协同工作的,后面两节分别讲解MMU 和Cache 的细节
三星公司的S3C2410 是一种很常见的采用 ARM920T 的芯片,涉及到具体的芯片时我们以 S3C2410 为例
以下是 CP15 协处理器的寄存器列表(摘自[S3C2410 用户手册]),和CPU 核的r0 到 r15寄存器一样,协处理器寄存器也是用 0 到 15 来编号,在指令中用 4 个 bit 来表示寄存器编号,有些协处理器寄存器有影子寄存器,这种情况下对同一个编号的寄存器使用不同的选项读或者写实际上访问的是不同的寄存器,后文用到某个寄存器时会详细说明它的功能
CP15 协处理器的寄存器列表 对 CP15 协处理器的操作使用 mcr 和mrc 两条协处理器指令,这两条指令的记法是从后往前看:mcr 是把 r(CPU 核寄存器)中的数据传送到 c(协处理器寄存器)中,mrc 则是把c(协处理器寄存器)中的数据传送到 r(CPU 核寄存器)中
对 CP15 协处理器的所有操作都是通过 CPU 核寄存器和CP15 寄存器之间交换数据来完成的
下图是协处理器的指令格式(摘自[S3C2410 用户手册])
协处理器指令格式 和其它ARM 指令一样,Cond 是条件码,bit 20 是L 位,表示该指令是读还是写,如果L=1 就表示Load,从外面读到CPU 核中,也就是mrc 指令,如果L=0 就表示Store,也就是mcr 指令
[11:8]这四个位是协处理器编号,CP15 的编号是15,因此是4 个1
CRn 是CP15寄存器编号,Rd 是CPU 核寄存器编号,各占4 个位