分析uboot移植第一阶段的各种代码

发布时间:2023-06-08  

一直uboot的过程:

1. 选择是什么架构的单片机或者平台 在总的make file 里面

2. 更改时钟配置

3. 更改串口相关的时钟配置

4. 选用适当的norflash 

5.选用适当的nandflash

 

 

1. 100ask24x0_config : unconfig
@(MKCONFIG)(MKCONFIG)(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

 

其中 第一个参数 ARM 表示的是架构是什么架构 我们这里的架构是ARM架构

第二个参数是 什么CPU 这里是 Arm920t的CPU

第三个参数是什么开发板:这里是 100ask24x0的开发板

第四个参数是Vendor: 这里是没有vendor

第五个参数是它属于什么SOC单片机的类型:这里是S3c24x0

 

2. 时钟的配置问题

在100ask24x0.c board_init中

两个结构体S3C24X0_CLOCK_POWER 这个是我们需要用的结构体 此结构体在S3C24X0.h 里面定义了

其中CLKDIVN是表示分频。我们设置分频是FLCK 为400MHz

S3C2440_CLKDIV 是0x05 我们可以得到 FCLK :HCLK :FCLK = 1:4:8

假如 FCLK是400MHZ 那么HCLK的速度是100Mhz FCLK的频率是50Mhz

LOCKTIME:是启动时间延迟 我们选用0xFFFFFFFF

MPLLCON: 我们选择400MHz

UPLL 我们选择 48MHz

gd->bd->bi_boot_params = 0x30000100 这里面存储的是我们自己的uboot 存的参数

 

 

那么我们此时的时钟频率是 

FCLK  = 400Mhz

HCLK = 100Mhz 

PCLK = 50Mhz

2. 下面开始看get_HCLK 函数

ulong get_HCLK(void)

{

    S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

    unsigned long clkdiv;

    unsigned long camdiv;

    int hdiv = 1;


    if(gd->bd->bi_arch_number == MACH_TYPE_SMDK2410)

          return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK());

    else

        {

                clkdiv = clk_power->CLKDIVN;

          camdiv = clk_power->CAMDIVN;


          switch(clkdiv & S3C2440_CLKDIVN_HDIVN_MASK)

              {

                        case S3C2440_CLKDIVN_HDIVN_1:

                     hdiv = 1;

               break;

                   


                       case S3C2440_CLKDIVN_HDIVN_2:

                   hdiv = 2;

              break;


              case S3C2440_CLKDIVN_HDIVN_4_8:

                    hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;

                  break;

            case S3C2440_CLKDIVN_HDIVN_3_6:

                hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF)? 6 : 3;

                break;

               }


                   return get_FCLK()/hdiv;

 

          }

}

   clkdiv = clk_power->CLKDIVN;
   camdiv = clk_power->CAMDIVN;
clkdiv = 0x05
camdiv = 0;
所以说
clkdiv & S3C2440_CLKDIVN_HDIVN_MASK(3<<1) == 4
所以说 在S3C2440_CLKDIVN_HDIVN_4_8 hdiv = 4;
那么Hlck = 100Mhz

在get_PCLK 函数

ulong get_PCLK(void)

{

    S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

    unsigned long clkdiv;

    unsigned long camdiv;

    int hdiv = 1;


    if(gd->bd->bi_arch_number == MACH_TYPE_SMDK2410)

       return((clk_power->CLKDIVN & 0x1) ? get_HCLK()/2 : get_HCLK());

   else

       {

         clkdiv = clk_power->CLKDIVN;

      clkdiv = clk_power->CAMDIVN;

  

        switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK)

            {

                 case S3C2440_CLKDIVN_HDIVN_1:

                 hdiv = 1;

          break;

 

               case S3C2440_CLKDIVN_HDIVN_2:

               hdiv = 2;

        break;


        case S3C2440_CLKDIVN_HDIVN_4_8:

                       hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF)? 8 : 4;

        break;


        case S3C2440_CLKDIVN_HDIVN_3_6:

                       hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF)? 6 : 3;

        break;

        }

         return get_FCLK()/hdiv/((clkdiv & S3C2440_CLKDIVN_PDIVN)? 2 : 1);

      }

}

得到 PLCK = 50Mhz。

这几个函数是给USART提供时钟的 请注意


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

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>