uboot-2012-4.1移植 (2)修改uboot代码

3  修改代码
   a 修改start.s中时钟设置部分。          
      /*修改这里,时钟设置不正确*/
      /* FCLK:HCLK:PCLK = 1:4:8 */
      /*设置时钟*/
      ldr r0,=0x4c000014
      mov r1,#0x05
      str r1,[r0]
      
      /* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
      mrc p15, 0, r1, c1, c0, 0  /* 读出控制寄存器 */
      orr r1, r1, #0xc0000000  /* 设置为“asynchronous bus mode” */
      mcr p15, 0, r1, c1, c0, 0  /* 写入控制寄存器 */
     
       #define S3C2440_MPLL_400MHZ     ((0x5c<<12)|(0x01<<4)|(0x01))
     
      ldr r0,=0x4c000004
      ldr r1,=S3C2440_MPLL_400MHZ
      str r1,[r0]
     
      /*启动ICACHE*/
      mrc p15, 0, r0, c1, c0, 0 @ read control reg
      orr r0, r0, #(1<<12)
      mcr p15, 0, r0, c1, c0, 0   @ write it back
      
      ldr pc,=call_board_init_f      //这条汇编是绝对跳转指令
      call_board_init_f:             //这两句程序实现了 程序从nor跳转到sdram中运行。
       ldr r0,=0x00000000
       bl board_init_f
      /*调用board_init_f函数返回值id,存在r0中,作为board_init_r的参数*/
       ldr r1, _TEXT_BASE
       ldr sp,base_sp               //栈要重新设置,base_sp为定义的一个全局变量 :.globl base_sp   base_sp: .long 0
       bl board_init_r              //base_sp 在board_init_f函数中base_sp = addr_sp;被赋值。
       /*调用第二阶段代码*/
       bl board_init_r
       
       程序刚开始时的堆栈指针被定义为ldr sp,=(CONFIG_SYS_INIT_SP_ADDR)  bic sp,sp,#7
       #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
       #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - GENERATED_GBL_DATA_SIZE)
       
       
   修改smdk2440/smdk2410.c的 board_early_init_f 函数,去掉其对MPLL的设置。
    b 修改sdram配置寄存器值  
      .long 0x22011110 @BWSCON
      .long 0x00000700 @BANKCON0
      .long 0x00000700 @BANKCON1
      .long 0x00000700 @BANKCON2
      .long 0x00000700 @BANKCON3
      .long 0x00000700 @BANKCON4
      .long 0x00000700 @BANKCON5
      .long 0x00018005 @BANKCON6
      .long 0x00018005 @BANKCON7
      .long 0x008c07a3 @REFRESH
      .long 0x000000b1 @BANKSIZE
      .long 0x00000030 @MRSRB6
      .long 0x00000030 @MRSRB7
    也可以不用修改!
  .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
    .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
    .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
    .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
    .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
    .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
    .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
    .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
    .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
    .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
    .word 0x32
    .word 0x30
    .word 0x30  
3.1  修改了以后,编译,下载,发现串口输出的东西是乱些乱码,初步认为是波特率没有设置好  
       查看串口波特率的设置,发现在get_HCLK里没有定义CONFIG_S3C2440 
    c 修改代码:include/configs/smdk2440.h:
          去掉CONFIG_S3C2410    加上#define CONFIG_S3C2440
      编译,s3c2410_nand.c:72 行出错。。去掉这个宏 CONFIG_NAND_S3C2410 暂时不把nand flash加进来
          把CONFIG_CMD_NAND去掉也就把nand 所有宏都去掉了
      编译后,出错:fs/yaffs2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值