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
uboot-2012-4.1移植 (2)修改uboot代码
最新推荐文章于 2024-04-23 15:30:53 发布