U-Boot移植(3)增加对S3C2440的支持

发布时间:
来源: 电子工程世界

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

后面竟然出现了一大堆的错误,需要耐心进行查寻修改。


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。