ARM裸机知识

存储器类型复习

RAM/ROM:RAM掉电丢失,ROM掉电不丢失;
RAM中又分两大类,DRAM/SRAM;
SRAM:Static RAM运行速度飞快,内存小,昂贵;

DRAM:Dynamic RAM 运行速度比ROM快,比SRAM慢,便宜(电脑内存);


FLASH:又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势);

FLASH:又分为NOR Flash和NADN Flash两种

1.NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。

2.NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。


eMMC = NAND闪存+闪存控制芯片+标准接口封装。

Arm时钟体系(2440)

2440Max-----(Fclk:400MHZ\Hclk:136MHZ\Pclk:68MHZ)
由12Mhz晶振(OSC),通过锁相环(PLL)分别得到。
MPLL:Main PLL
UPLL:USB PLL

Fclk = 晶振->MPLL
Hclk(AHB总线) = 晶振->MPLL->HDIVN(分频)
Pclk(APB总线) = 晶振->MPLL->PDIVN(分频)
相关寄存器:MPLLCON,CLKDIVN

2440启动流程:

1.复位引脚等待电源稳定
2.Fclk起振 = 晶振频率
3.电源稳定,复位芯片输出高电平,锁存OM[3:2]引脚信号,同时CPU开始运行
4.设置PLL->CPU停止,PLL工作,Fclk停止(Lock Time)
5.LockTime结束后->Fclk = PLL新设的时钟,CPU运行

如何设置2440时钟频率

目标:FCLK运行于400M,HCLK = FCLK/4(100M),PCLK=FCLK/8(50M)。

查阅2440芯片手册;
CLOCK DIVIDER CONTROL (CLKDIVN) REGISTER:
00 : HCLK = FCLK/1.
01 : HCLK = FCLK/2.
10 : HCLK = FCLK/4 when CAMDIVN[9] = 0.
	 HCLK= FCLK/8 when CAMDIVN[9] = 1.
11 : HCLK = FCLK/3 when CAMDIVN[8] = 0.
	 HCLK = FCLK/6 when CAMDIVN[8] = 1

1.设置CLKDIVN 的 1、2位为’1’'0’且第9位为0,可使HCLK为FCLK的1/4;设置0位为’1’可使PCLK = FCLK/2。
CLKDIVN = 0x5;
2.设置PLLCON = 0x5C11,可使FCLK = 400M。
3.查阅2440手册 244page ,当HDVIN不为0时,CPU要设置为异步模式,否则就会以HCLK运行。

//设置为异步模式,MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0

修改后汇编代码如下:


.text
.global _start

_start:
/*关闭看门狗*/
	ldr r0, =0x53000000
	ldr r1, =0
	str r1, [r0]
	
/*设置MPLL->FCLK:HCLK:PCLK = 400M:100M:50M*/
/*LockTime(0x4C000000) = 0xFFFFFFFF;*/
	ldr r0, =0x4C000000
	ldr r1, =0xFFFFFFFF
	str r1,[r0]
	
/*CLKDIVN(0x4C000014) = 0x5*/	
	ldr r0, =0x4C000014
	ldr r1, =0x5
	str r1,[r0]
	
/*设置CPU于异步模式*/
	mrc p15,0,r0,c1,c0,0
	orr r0,r0,#0xC0000000	//R1_nF:OR:R1_iA
	mcr p15,0,r0,c1,c0,0
	
/*设置MPLLCON(0x4C000004)*/
	ldr r0, =0x4C000004
	ldr r1, =0x5C011
	str r1,[r0]
	
/*一旦设置PLL,就会锁定Locktime直到PLL输出稳定*/

/*设置内存:sp栈,判断是NAND or NOR启动*/
	mov r1,#0
	ldr r0,[r1]	/*先读0地址,留作备份*/
	str r1,[r1]	/*将#0存入[0]地址*/
	ldr r2,[r1]	/*r2 = [0]*/
	cmp r1,r2	/*比较R1,R2,相等则为NAND启动*/
	ldr sp, = 0x40000000+4096 /*先假设NOR启动*/
	moveq sp, #4096			  /*如果相等*/
	streq r0,[r1]			  /*恢复原先的值*/

	bl main

halt:
	b halt	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值