当前位置:首页 > 科技数码

【0xc000014c】第二处理器指令_开启ICache程式码范例

资料来源:白文网_嵌入式Linux Wiki _ JZ 2440新一期视频Wiki教程(视频文字版)

作者:贝东山

正文字数:2403,阅读时间:2.5分钟

CPU在2440上共有16个第二个处理器,从CP0到CP15。

CP15管理缓存MMU我们要启动缓存,就必须操作CP15二级处理器指令。首先看一下硬件结构。

CP15也有很多寄存器C0 ~ C15起始C7’是备份寄存器

现在,主CPU的值R0被传递到CP15的寄存器。

我们要引入辅助处理器指令

MRC

Mov r1、r0

结果是r0=传递=R1

MRC

c coprocessor=propagate=register

Mcr是将主处理器的值发送给辅助处理器。查看register=propagate=co processor语法格式,并在2440上检索MRC。

得到语法形式

例如,Mcr | MRC {cond} p #,expression1,rd,cn,cm {,expression2}

Mcr P15、0、r1和c1将主处理器的值发送到次处理器。

如果将Expression1的值设定为0,则不可用

R1是默认CPU寄存器的值

C1是cp15寄存器的值

Cm,不需要,写为c0

如果将Expression2值设定为0,则不可用

Cm和expression2用于区分哪个C1,通常写为c0,0。此命令表示主CPU的R1值将写入辅助处理器cp15的cp1寄存器中。

相反,应该从cp15寄存器读取主CPU寄存器。

Mrc p15、0、r1、c1、c0、0此命令指示第二处理器cp15 C1寄存器的值将读取写入主CPU的R1寄存器

2410文档中有cp15寄存器的作用

其中寄存器1控制寄存器下图说明了控制寄存器1的功能

Bit12位控制cache命令的打开或关闭。我将bit 12设置为1

C7有多种寄存器,对应于多种功能。

寄存器7用于操作缓存,并根据语法规则cm{,expression2}区分要选择的C7

通过以下写入程序,cache将知道2440上有data cache和指令cache。其中,必须启用地址映射,才能使用data cache。只能使用指令cache

打开

Reset:

/*关闭看门狗*/

Ldr r0,=0x53000000

Ldr r1,=0

Str r1,[r0]

/* mpll设定,FCLK : HCLK : PCLK=400m : 100m : 50m */

/* locktime(0 x 4 c 000000)=0 x ffffffff */

Ldr r0,=0x4C000000

Ldr r1,=0xFFFFFFFF

Str r1,[r0]

/* clkdivn (0x4c000014)=0x5、TF clk : th clk : TPC lk=1:4:8 */

Ldr r0,=0x4C000014

Ldr r1,=0x5

Str r1,[r0]

/*设置CPU以异步模式工作*/

Mrc p15,0、r0、c1、c0,0

Orrr0、r0、# 0 xc 000000//r 1 _ nf :或:r1 _ ia

Mcr p15,0、r0、c1、c0,0

/* mpllcon设置(0x4c000004)=(9212) | (14) | (10)

* m=MDIV 8=92 8=100

* p=PDIV 2=1 2=3

* s=SDIV=1

* fclk=2 * m * fin/(p * 2s)=2 * 100 * 12/(3 * 2 1)=400m

*/

Ldr r0,=0x4C000004

Ldr r1,=(9212)|(14)|(10)

Str r1,[r0]

/*设置PLL后,锁定时间将被锁定,直到PLL输出稳定为止

*然后,CPU将在新频率FCLK上运行

*/

/*

icache

*/

Bl enable_icache

/*内存: sp堆栈设置*/

/*启用分辨率nor/nand

*请写0 ~ 0地址,然后再读一遍

*得到0后,0地址的内容被修改,与ram相对应。NAND启动

*否则,将启动nor

*/

Mov r1,#0

Ldr r0,[r1] /*读取原始值备份*/

Str r1,[r1] /* 0-[0] */

Ldr r2,[r1] /* r2=[0] */

Cmp r1、R2 /* r1==r2?相同表示法启用NAND */

Ldr sp,=0x 4000000 4096/*首先假设为nor启动*/

Moveq sp、# 4096/* NAND boot */

Streq r0,[r1] /*恢复原始值*/

Bl sdram_init

//bl使用具有初始值的数组,而不是sdram_init2 /*与位置无关的代码*/

/*重定目标文本、rodata、数据部分全部程序*/

Bl copy2sdram

/*清除BSS段*/

Bl clean_bss

/*重置后,CPU处于SVC模式

*现在切换到usr模式

*/

Mrs r0、cpsr /*读取cpsr */

将Bic r0、r0、#0xf /* M4-M0修改为0b10000以使用usr模式*/

Bic r0、r0、#(17) /*清除I位*/

Msr cpsr、r0

/* sp _ usr设置*/

Ldr sp,=0x33f00000

Ldr pc,=sdram

Sdram:

Bl uart0_init

Bl print1

/*故意添加未定义的命令*/

Und_code:

.word0xdeadc0de /*未定义的命令*/

Bl print2

SWI0x123 /*运行此命令以触发SWI异常,进入0x 8 */

//BL使用main /* bl命令进行相对跳跃,程序仍然在NOR/sram中使用*/

Ldr lr,=halt

Ldr pc、=main /*绝对跳跃、SDRAM */

哈特:

b霍尔特

怎么样才能让icache打开2410芯片手册?

Enable_icache:

/* icache */

Mrc p15、0、r0、c1、c0、0

Orrr0、r0、# (112)/* r0=r0 or (112) */

Mcr p15、0、r0、c1、c0和0//条修改后的r0被写入cp15的cp1寄存器中

Mov pc提高lr刷屏效率。

“新产品选拔”STM32MP157开发版热卖!第一批只有300套

1.《【0xc000014c】第二处理器指令_开启ICache程式码范例》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【0xc000014c】第二处理器指令_开启ICache程式码范例》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/1956470.html

上一篇

0专题之海运教育,0是偶数吗?

下一篇

魔法旋转0视角图公开。乙骨友太帅了,“OHA”CP反派角色亮了。

重云主c,重新启动出现0xc000014C错误

恢复bios默认值试一试 开机或者重启电脑按住DEL键,进入BIOS. 找到 Load Fail-Safe Defaults ,按方向键选中后回车,提示是否确定,按Y,回车. 最后选择Save&exit step(保存...