zoukankan      html  css  js  c++  java
  • UBoot200903移植笔记(第二阶段:时钟!)

    根据U-Boot-2009-03移植笔记(第二阶段移植准备)最后的总结,需要针对S3C2440来移植时钟初始化的代码。

    在lib_arm/board.c中,个init_sequence数组,定义了所有的初始化函数指针。

    时钟的驱动,在函数board_init中,位于board/xinna2440/xinna2440.c,我们这里只支持S3C2440,删除文件头部的时钟参数宏定义,直接改为

     1 #define FCLK_SPEED 1
     2 
     3 #define M_MDIV    0x7f
     4 #define M_PDIV    0x2
     5 #define M_SDIV    0x1
     6 
     7 #define USB_CLOCK 1
     8 
     9 #define U_M_MDIV    0x38
    10 #define U_M_PDIV    0x2
    11 #define U_M_SDIV    0x2
    12 #define S3C2440_CLKDIV    0x5 
    S3C2440时钟参数定义

    在board_init函数的clk_power->LOCKTIME = 0xFFFFFF;语句前,增加汇编代码:

        /* to reduce PLL lock time, adjust the LOCKTIME register */
        clk_power->CLKDIVN = S3C2440_CLKDIV;
        __asm__(    "mrc    p15, 0, r1, c1, c0, 0\n" 
                 "orr    r1, r1, #0xc0000000\n" 
                 "mcr    p15, 0, r1, c1, c0, 0\n"
                 :::"r1"
               );

    然后修改cpu/arm920t/s3c24x0/speed.c。

     1 DECLARE_GLOBAL_DATA_PTR;  /*添加代码*/
     2 static ulong get_PLLCLK(int pllreg)
     3 {
     4     S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
     5     ulong r, m, p, s;
     6 
     7     if (pllreg == MPLL)
     8     r = clk_power->MPLLCON;
     9     else if (pllreg == UPLL)
    10     r = clk_power->UPLLCON;
    11     else
    12     hang();
    13 
    14     m = ((r & 0xFF000) >> 12) + 8;
    15     p = ((r & 0x003F0) >> 4) + 2;
    16     s = r & 0x3;
    17 
    18     if(pllreg == MPLL)   /*修改get_PLLCLK返回值*/
    19         return  ((CONFIG_SYS_CLK_FREQ * m * 2) /(p << s)); 
    20     else if(pllreg == UPLL)
    21         return ((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s));   /* S3C2440 */
    22 }
    23 
    24 /* return FCLK frequency */
    25 ulong get_FCLK(void)
    26 {
    27     return(get_PLLCLK(MPLL));
    28 }
    29 
    30 /* return HCLK frequency */
    31 ulong get_HCLK(void)
    32 {
    33     S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
    34     return get_FCLK() / 4; /*修改get_HCLK返回值*/
    35 }
    36 
    37 /* return PCLK frequency */
    38 ulong get_PCLK(void)
    39 {
    40     S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
    41 
    42     return((clk_power->CLKDIVN & 0x1) ? get_HCLK()/2 : get_HCLK());
    43 }
    44 
    45 /* return UCLK frequency */
    46 ulong get_UCLK(void)
    47 {
    48     return(get_PLLCLK(UPLL));
    49 }

    保存,编译,打开minicom,烧写,运行,发现了熟悉的画面。

     

    串口输出正常无乱码,说明时钟驱动移植成功!

    80岁也要写程序
  • 相关阅读:
    查看whl包名是否满足系统的条件的命令,以此解决whl包出现“is not a supported wheel on this platform”错误提示的问题
    C++-文件输入输出流
    C++-PTA-6-7-1 地下迷宫探索
    C++-PTA-时钟模拟
    数据结构-深入虎穴-树的应用
    数据结构-二叉树-(先序|后序)+中序求(后序|先序)笔记
    C++-课后习题-日期类DATE时间类Time
    C++-课后习题-学生类
    数据结构-串数组广义表笔记
    数据结构-PTA-银行业务队列简单模拟
  • 原文地址:https://www.cnblogs.com/smartcoder/p/3105887.html
Copyright © 2011-2022 走看看