6、S3C2440是S3C2410的改进版,它们的操作基本相似,只是在系统时钟的设置、NAND Flash控制器的操作等方面有一些小差别。。而下面我要做的就是令一个U-Boot二进制代码既可以在S3C2410上运行,也可以在S3C2440上运行。
虽说我的板也是S3C2410的,但是增加S3C2440的U-Boot练习,可以提高我们的能力,为后面的学习打下基础。
GSTATUS1寄存器的值:0x32410000表示S3C2410,0x32410002表示S3C2440。
S3C2410:FCLK=200MHZ;S3C2440:FCLK=400MHZ,UCLK=48MHZ;
搞清楚之后,下面我们就可以开始了。
首先先在board/100ask24x0/100ask24x0.c 中的前面定义如下一些值:
我的开发板输入时钟为12MHZ,如果你的开发板时钟和我的不一样的话,可以根据以前代码中的公式计算,然后修改系统时钟,这在include/configs/100ask24x0.h中的宏CONFIG_SYS_CLK_FREQ中定义。
接下来,就是使用不同的宏设置系统时钟,包括S3C2410、S3C2440。
7、在后面设置串口波特率时需要获得系统时钟,就是在U-Boot的第二个阶段,即是lib_arm/board.c中start_armboot函数调用serial_init函数初始化串口时,会调用get_PCLK、get_HCLK、get_PLLCLK等函数,这需要我们作相应的修改。
首先要在board_init函数的开关增加如下一行,才能使用变量gd,因为识别出S3C2410和S3C2440,设置了机器类型ID:gd->bd->bi_arch_number 。
接着在get_PLLCLK函数中增加如下:
由于分频系数设置方法也不一样,get_HCLK、get_PCLK也需要修改。修改如下:
。。。。。。。。。。。
上面3:6应改成6:3,这里是我自已写错了
。。。。。。。。
3:6改成6:3
8、至此已修改完,可以进行编译。
(1)make 100ask24x0_config
(2)make all
后面竟然出现了一大堆的错误,需要耐心进行查寻修改。