#define S3C2440_UPLL_48M ((56 << 12) | (2 << 4) | (2 << 0))
#define S3C2440_MPLL_400M ((0x5c << 12) | (1 << 4) | (1 << 0))
#define S3C2440_FHP_821 (0x05)
/* 初始化时钟 */
mrc P15, 0, R0, C1, C0, 0 /* Read C1 register to R0 */
orr R0, R0, #0xC0000000 /* Set iA=1,nF=1,mode---Asynchronous */
orr R0, R0, #(1 << 12) /* Enable icache */
mcr P15, 0, R0, C1, C0, 0 /* Write to C1 register */
ldr r0, =0x4c000014 /* 设置分频系数,FCLK:HCLK:PCLK = 8:2:1 */
ldr r1, =S3C2440_FHP_821 /* 400M:100M:50M */
str r1, [r0]
// ldr r0, =0x4c000000 /* Set lock time */
// ldr r1, =0xFFFFFFFF
// str r1, [r0]
ldr r0, =0x4c000004
ldr r1, =S3C2440_MPLL_400M /* 设置MPLL输出时钟400M */
str r1, [r0]
/* 延时,编程手册里面有明确指出要进行一段时间的延时 */
1:
ldr r0, =4000
sub r0, r0, #1
bne 1b
ldr r0, =0x4c000008 /* UPLL 48M */
ldr r1, =S3C2440_UPLL_48M
str r1, [r0]
1:
ldr r0, =8000
sub r0, r0, #1
bne 1b
在 board.c 文件里面找到 board_early_init_f 函数,注释掉MPLL的设置(切换到board.c里面的函数的方法是修改smdk2440.h里面,注释掉#define CONFIG_SYS_GENERIC_BOARD。另外在make的时候会出现错误,修改u-boot.lds文件,删掉第一行的#define CONFIG_SYS_GENERIC_BOARD,重新make)
SMRDATA:
.long 0x22011110
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00018005
.long 0x00018005
.long 0x008C04F4
.long 0x000000B1
.long 0x00000030
.long 0x00000030
make 结束后会出现一个警告all: $(ALL-y) ifneq ($(CONFIG_SYS_GENERIC_BOARD),y) @echo "===================== WARNING ======================" @echo "Please convert this board to generic board." @echo "Otherwise it will be removed by the end of 2014." @echo "See doc/README.generic-board for further information" @echo "====================================================" endif
这个警告说的是在2014版本的结束就会使用一个通用的板设置,这个与宏定义 CONFIG_SYS_GENERIC_BOARD
有关,因为上面我们已经在S3C2440.h文件里面注释掉了这个宏定义,所以这里就会出现警告,这个暂时不用去管它。
如果不注释smdk2440.h里面的#define CONFIG_SYS_GENERIC_BOARD,上述步骤执行完毕后直接make,不会出现错误以及警告,并且重启开发板的时候直接就会执行到了命令行等待用户输入,而不是卡到flash的检测上面,这点也是2015改进的一个地方吧
在2015版本中,这个宏定义的使用使得 board.c 文件不被编译进 bootloader 里面了,取而代之的是顶层目录的 common 文件夹下面的 board_r.c 文件。这个文件里面包含有以前在 board.c 文件里面的所有函数,并且对以前的函数进行了改进,确切来说是变得更加分散化了,也就更有利于扩展,但是在理解起来会比较有困难,不过从大体上来说这两个文件实现的功能都是类似的,完全可以按照同样的思路去理解这两个文件。