您的位置:首页 > 其它

U-Boot-2009-03移植笔记(点亮第一展灯)

2013-05-29 14:19 239 查看
  在U-Boot-2009-03移植笔记的最后,我们找到了U-boot的启动代码在cpu/arm920t/start.S中,这是一段汇编代码,我们的移植工作从这里开始。

  我们定位到reset标签

reset:
/*
*setthecputoSVC32mode
*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0xd3
msrcpsr,r0


上面的注释很明白,设置CPU工作模式,不需要修改。

接下来,我们关掉看门狗,并关闭中断

ldrr0,=pWTCON
movr1,#0x0
strr1,[r0]

/*
*maskallIRQsbysettingallbitsintheINTMR-default
*/
movr1,#0xffffffff
ldrr0,=INTMSK
strr1,[r0]

/*modifybyxinna*/
ldrr1,=0x7fff
ldrr0,=INTSUBMSK
strr1,[r0]


我这里直接略过了原有U-boot的宏定义,因为我们只需要支持一款芯片即可,注意第14行,这是因为S3C2440于S3C2410中断控制器不同而修改的,具体原理请参见S3C2440的datasheet。在上面的代码里,我们完成了两件事情,关看门狗,关中断,接下来我们继续看代码,到了这里:

/*
*wedosys-criticalinitsonlyatreboot,
*notwhenbootingfromram!
*/
#ifndefCONFIG_SKIP_LOWLEVEL_INIT
blcpu_init_crit
#endif


子过程cpu_init_crit主要工作就是关闭Cache,并且调用lowlevel_init,我们要注意的是lowlevel_init,这里放了初始化SDRAM的代码。

这个low_levelinit位于board/xinna2440/lowlevel_init.S文件中,这里会初始化好你的内存(xinna2440用的是两片16位的SDRAM并联组成32位的SDRAM),我们需要针对不同的芯片,连接方式修改以下这个文件中的寄存器配置。

然后还有很重要的一点,你需要修改board/xinna2440/u-boot.lds文件,将lowlevel_init这段代码放在整个u-boot.bin的前4k代码中,所以我们需要这样修改



.=0x00000000;

.=ALIGN(4);
.text:
{
cpu/arm920t/start.o(.text)
board/xinna2440/lowlevel_init.o(.text)
*(.text)
}


然后我们在start.S的blcpu_init_crit后面增加以下代码,点亮第一盏灯。


ldrr4,=0x56000010
ldrr5,=(1<<10)
strr5,[r4]

ldrr4,=0x56000014
ldrr5,=~(1<<5)
strr5,[r4]
loo:
bloo


通过openjtag烧到nandflash上,第一盏LED灯被点亮。



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: