uboot lowlevel_init.S解析

/*下面不厌其烦地解析一下 lowlevel_init.S这个原文件 */
 
#define BWSCON  0x48000000
……
#define Tchr                      0x2   /* 3clk */
#define REFCNT                        0x0459
/**************************************/
/*1.要知道上面这些配置的最终会被用到下面SMRDATA 这个数据池里面,所以必须要明白SMRDATA 这个数据池是用
来干什么的,SMRDATA 后面每一个.word 后面防止的数据都是将要写入BWSCON 开始的寄存器的,总共有13.work ,它们后面放置的值将会分别别写入0x480000000x480000040x48000008…一直到0x4800003013个寄存器。 */
/*2.上面那些配置的值是怎样决定的呢,详细请参考s3c2440A和你所用SDRAMdatasheet。细心找总是能找到的。 */
/*3.而上面的那些配置值最终是通过下面lowlevel_init后面的这段函数写到寄存器里面的,下面对该段函数逐一分析: */
_TEXT_BASE:
         .word         TEXT_BASE
 
.globl lowlevel_init
lowlevel_init:
         /* memory control configuration */
         /* make r0 relative the current location so that it */
         /* reads SMRDATA out of FLASH rather than memory ! */
         ldr     r0, =SMRDATA
         ldr    r1, _TEXT_BASE
     sub   r0, r0, r1        /* 其实明白了前三条语句这段程序就不难懂了,归根到底就是为什么将SMRDATA 的值减
_TEXT_BASE的值?原因是这样的:我们使用的是从nandflash boot的方式,目前程序
仍然在4K-bytes ‘Steppingstone’(这里为什么突然冒出个Steppingstone’,这个就是我前面提到从nand flash 引导的方法,但不知道名字,后来重新看 s3c2440A  datasheetnand flash那一章的开头才知道)上面 运行,在SMRDATA后面的的内容仍然在Steppingstone里面。但是 SMRDATA的值是相对于_TEXT_BASE 值的地址,而且_TEXT_BASE 是放置u-boot的开始地方,所以用SMRDATA-_TEXT_BASE 就可以得到SMRDATA后面内容在Steppingstone里面 相对于地址0x00000000的放置的所在地方(相对于0x00的地址值) */
/*从这三条语句可以看出前人为了实现从nand flash启动可谓费尽心思啊! */
         ldr    r1, =BWSCON        /* Bus Width Status Controller */
         add     r2, r0, #13*4  /* 总共13个寄存器 */
0:
         ldr     r3, [r0], #4
         str     r3, [r1], #4
         cmp     r2, r0
         bne     0b
 
         /* everything is fine now */
         mov  pc, lr
 
         .ltorg         /* 数据缓冲池,上网可以查得资料 */
/* the literal pools origin */
 
SMRDATA:
   ……  
    .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
    .word 0xb2
    .word 0x30       /*需要注意的是CAS Latency的值在这里直接配置 */
.word 0x30
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值