呵呵,s3c2410...在vivi中的s3c2410.h文件中设置时钟时 有这么一段
mrc p15,0,r1,c1,c0,0
orr r1,r1,#0xc0000000;
mcr p15,0,r1,c1,c0,0
这段的每句 的意思是什么?为什么要用到些处理器指令?协处理器指令的作用是干什么?
2019-2-25 17:03:39
S3C2410/S3C2440中,除了有一个ARM920T的CPU核外,还有若干个协处理器。协处理器也是一个微处理器,它被用来帮助主CPU完成一些特殊功能,比如浮点计算等。对MMU、TLB、Cache等的操作就涉及协处理器。
CPU核与协处理器间传送数据时使用这两条指令:MRC和MCR,它们的格式如下:
{cond} p#,,Rd,cn,cm{,}
MRC 从协处理器获得数据,传给ARM920T CPU核的寄存器
MCR 数据从ARM920T CPU核的寄存器传给协处理器
{cond} 执行条件,省略时表示无条件执行
p# 协处理器序号
一个常数
Rd ARM920T CPU核的寄存器
cn和cm 协处理器中的寄存器
一个常数
其中,、cn、cm、仅供协处理器使用,它们的作用如何取决于具体的协处理器。
实际上,我在开发过程中根本不理会协处理器的指令格式,了解某个寄存器的格式,然后修改它的值就行了。
1. 对于“mrc p15,0,r1,c1,c0,0”,其中的r1表示是协处理器cp15的第一个寄存器,它的格式可以参考S3C2410数据手册的章节《Table 2-10. Control Register 1-bit Functions》。
2. 指令“orr r1,r1,#0xc0000000;”将刚才读到的值的31、30位设为1,这两个位的意义为:
31 iA bit Asynchronous clock select
30 nF bit notFastBus select
当CPU的FCLK与HCLK不相等时,总线必需被设为异步模式(asynchronous bus mode),参考数据手册第7章《CLOCK & POWER MANAGEMENT》:
If HDIVN = 1, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus
mode using following instructions.
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
3. 指令“mcr p15,0,r1,c1,c0,0”把这个新值写到协处理器去
细读数据手册才是根本,最后建议发帖时标题写明问题,也好供别人搜索
S3C2410/S3C2440中,除了有一个ARM920T的CPU核外,还有若干个协处理器。协处理器也是一个微处理器,它被用来帮助主CPU完成一些特殊功能,比如浮点计算等。对MMU、TLB、Cache等的操作就涉及协处理器。
CPU核与协处理器间传送数据时使用这两条指令:MRC和MCR,它们的格式如下:
{cond} p#,,Rd,cn,cm{,}
MRC 从协处理器获得数据,传给ARM920T CPU核的寄存器
MCR 数据从ARM920T CPU核的寄存器传给协处理器
{cond} 执行条件,省略时表示无条件执行
p# 协处理器序号
一个常数
Rd ARM920T CPU核的寄存器
cn和cm 协处理器中的寄存器
一个常数
其中,、cn、cm、仅供协处理器使用,它们的作用如何取决于具体的协处理器。
实际上,我在开发过程中根本不理会协处理器的指令格式,了解某个寄存器的格式,然后修改它的值就行了。
1. 对于“mrc p15,0,r1,c1,c0,0”,其中的r1表示是协处理器cp15的第一个寄存器,它的格式可以参考S3C2410数据手册的章节《Table 2-10. Control Register 1-bit Functions》。
2. 指令“orr r1,r1,#0xc0000000;”将刚才读到的值的31、30位设为1,这两个位的意义为:
31 iA bit Asynchronous clock select
30 nF bit notFastBus select
当CPU的FCLK与HCLK不相等时,总线必需被设为异步模式(asynchronous bus mode),参考数据手册第7章《CLOCK & POWER MANAGEMENT》:
If HDIVN = 1, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus
mode using following instructions.
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
3. 指令“mcr p15,0,r1,c1,c0,0”把这个新值写到协处理器去
细读数据手册才是根本,最后建议发帖时标题写明问题,也好供别人搜索
举报