ARM的协处理器

本文介绍了ARM32架构中的CP15协处理器,它是管理MMU、Cache和系统控制的关键组件。通过MRC和MCR指令进行配置,例如在u-boot的启动代码中用于管理CPU状态和缓存设置。此外,还探讨了CP15在u-boot中的实际使用,如禁用MMU和缓存的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是协处理器?

协处理器co-processor:顾名思义,协助主处理器完成计算处理的工作。

2.16个协处理器(CP0-CP15)

arm32一共支持16个协处理器,从cp0-cp15共16个,为何强调arm32,从arm-v8架构引入了aarch64的架构,因为在arm64中,弱化了协处理器的概念(注:arm64、aarch64同一个说法)
CP15协处理器:arm中重要的协处理器,mmu、cache等都是由其所配置。
CP14协处理器:debug调试使用。
CP10 、CP11协处理器:浮点与向量处理。
CP8 9 12 13预留给ARM厂家。
CP0-CP7预留给第三方厂家使用。

3.CP15协处理器介绍

在此主要介绍CP15协处理器,cp15是一个寄存器组,主要管理mmu 、cache、以及系统控制等,ARM对CP15主要通过mrc读指令 mcr写指令进行配置,以下为arm的描述。

在这里插入图片描述
协处理器的指令操作MRC MCR,其中A1为A32指令集、T1为thumb指令集,在此主要说明A32指令集。
在这里插入图片描述
在这里插入图片描述

//eg:
MRC p15, 0, <Rt>, c1, c0, 0
// Read System Control Register
MCR p15, 0, <Rt>, c1, c0, 0
//Write System Control Register

其中c1 c0以及编号共同组成SCTLR寄存器,其中Rt为通用寄存器,通过MRC MCR实现对此寄存器的读写操作。

4.u-boot中的cp15使用

在armv7的start.s中可以看到cp15使用的身影。u-boot下载http://www.denx.de/wiki/U-Boot/u-boot-2020.07-rc3.tar.bz2
代码路径:u-boot-2020.07-rc3\arch\arm\cpu\armv7\start.S

	/*
	 * disable MMU stuff and caches
	 */
	mrc	p15, 0, r0, c1, c0, 0
	bic	r0, r0, #0x00002000	@ clear bits 13 (--V-)
	bic	r0, r0, #0x00000007	@ clear bits 2:0 (-CAM)
	orr	r0, r0, #0x00000002	@ set bit 1 (--A-) Align
	orr	r0, r0, #0x00000800	@ set bit 11 (Z---) BTB
#if CONFIG_IS_ENABLED(SYS_ICACHE_OFF)
	bic	r0, r0, #0x00001000	@ clear bit 12 (I) I-cache
#else
	orr	r0, r0, #0x00001000	@ set bit 12 (I) I-cache
#endif
	mcr	p15, 0, r0, c1, c0, 0                                                     

其中r0为通用寄存器;
通过查表可以看出使用的是SCTLR寄存器;
在这里插入图片描述
在这里插入图片描述
其中mrc实现了读取协处理器cp15的SCTLR寄存器的值—>r0通用寄存器中;
bic为位清除指令,orr为位或指令,通过对r0的数据操作;
最终通过mcr将r0配置到SCTLR中;
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值