CP15 协处理器一般用于存储系统管理,但是在中断中也会使用到, CP15 协处理器一共有16 个 32 位寄存器(c0-c15)。 CP15 协处理器的访问通过其独特的语法指令完成,如下所示:
(move to register from controller;move to controller to register)
MRC: 将** CP15 协处理器中的寄存器数据读到 ARM 寄存器中**。
MCR: 将 ARM 寄存器的数据写入到 CP15 协处理器寄存器中。
MRC 就是读 CP15 寄存器, MCR 就是写 CP15 寄存器, MCR 指令格式如下:
MRC 的指令格式和 MCR 一样,只不过在 MRC 指令中 Rt 就是目标寄存器,也就是从CP15 指定寄存器读出来的数据会保存在 Rt 中。而 CRn 就是源寄存器,也就是要读取的写处理器寄存器。
假如我们要将 CP15 中 C0 寄存器的值读取到 R0 寄存器中,那么就可以使用如下命令:
CP15 协处理器有 16 个 32 位寄存器, c0~c15,我们来看一下 c0、 c1、 c12 和 c15 这四个寄存器,因为我们本次做的这个GPIO中断实验要用到这四个寄存器。
1、 c0 寄存器
CP15 协处理器有 16 个 32 位寄存器, c0~c15,在使用 MRC 或者 MCR 指令访问这 16 个寄存器的时候,指令中的 CRn、 opc1、 CRm 和 opc2 通过不同的搭配,其得到的寄存器含义是不同的。比如 c0 在不同的搭配情况下含义如下图所示
2、 c1 寄存器
c1 寄存器同样通过不同的配置,其代表的含义也不同,如图所示:
如果要读写 SCTLR 的话,就可以使用如下命令:
3、 c12 寄存器
c12 寄存器通过不同的配置,其代表的含义也不同,如图
关于 CP15 协处理器就讲解到这里,简单总结一下,
- 1.通过 c0 寄存器可以获取到处理器内核信息;
- 2.通过 c1 寄存器可以使能或禁止 MMU、 I/D Cache 等;
- 3.通过 c12 寄存器可以设置中断向量偏移;
- 4.通过 c15 寄存器可以获取 GIC 基地址。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!