QQ在线咨询
售前咨询热线
15821572819
售后咨询热线
15821572819

Uboot之四下载sdram运行,ok。


1.首先上图,本人经过一周左右的时间,参考网上众多资料,主要参考《uboot1.1.6到TQ2440的文档》,

首次修改成功uboot-2010.06。

2,这部分大致说明需要修改的文件及所在位置,至于为什么这样修改,以及需要查看的相关手册,不在叙述。

  1. 修改SDRAM的配置

    [cpp] view plain copy

    [cpp] view plain copy

    [cpp] view plain copy

    1. <span style="color:#000000;">126 #define REFCNT          0x4f4  </span>  

    1. <span style="color:#000000;"> 54 #define B1_BWSCON       (DW16)     

    2.  55 #define B2_BWSCON       (DW16)  

    3.  56 #define B3_BWSCON       (DW16 + WAIT + UBLB)  

    4.  57 #define B4_BWSCON       (DW16)  

    5.  58 #define B5_BWSCON       (DW8)  

    6.  59 #define B6_BWSCON       (DW32)  

    7.  60 #define B7_BWSCON       (DW32)</span>  

    1. <span style="color:#000000;"># vi board/samsung/Nissa2440/lowlevel_init.S  

    2. </span>  

  2. 时钟设置

    [cpp] view plain copy

    [cpp] view plain copy

    [cpp] view plain copy

    [cpp] view plain copy

    1. <span style="color:#000000;"> </span>  

    1. <span style="color:#000000;">128  

    2. 129     /* 

    3. 130      * mask all IRQs by setting all bits in the INTMR - default 

    4. 131      */  

    5. 132         mov r1, #0xffffffff  

    6. 133         ldr r0, =INTMSK  

    7. 134         str r1, [r0]  

    8. 135   

    9. 136 #if defined(CONFIG_S3C2440)   /*在include/configs/Nissa2440.h中定义:#define </span><a href="mailto:CONFIG_@2440" target="_blank"><span style="color:#000000;">CONFIG_S3C2440</span></a><span style="color:#000000;"> 1 

    10. 137     ldr r1, =0x7ff 

    11. 138     ldr r0, =INTSUBMSK 

    12. 139     str r1, [r0] 

    13. 140 #endif 

    14. 141     /* 

    15. 142      * we do sys-critical inits only at reboot, 

    16. 143      * not when booting from ram! 

    17. 144      */  

    18. 145 #ifndef CONFIG_SKIP_LOWLEVEL_INIT  

    19. 146 /*  bl  cpu_init_crit */  

    20. 147 #endif  

    21. </span>  

    1. <span style="color:#000000;">108 start_code:  

    2. 109     /* 

    3. 110      * set the cpu to SVC32 mode 

    4. 111      */  

    5. 112     mrs r0, cpsr  

    6. 113     bic r0, r0, #0x1f  

    7. 114     orr r0, r0, #0xd3  

    8. 115     msr cpsr, r0  

    9. 116   

    10. 117 #define pWTCON      0x53000000  

    11. 118 #define INTMSK      0x4A000008  /* Interupt-Controller base addresses */  

    12. 119 #define INTSUBMSK   0x4A00001C  

    13. 120 #define CLKDIVN     0x4C000014  /* clock divisor register */  

    14. 121 #define MPLLCON     0x4c000004  

    15. 122 #define UPLLCON     0x4c000008  

    16. 123   

    17. 124   

    18. 125         ldr r0, =pWTCON  

    19. 126         mov r1, #0x0  

    20. 127         str r1, [r0]</span>  

    1. <span style="color:#000000;"># vi arch/arm/cpu/arm920t/start.S </span>  

  3. 重新配置时钟

    [cpp] view plain copy

    [cpp] view plain copy

    58 /* S3C2440: Mpll = (2*m * Fin) / (p * 2^s), UPLL = (m * Fin) / (p * 2^s)  59  * m = M (the value for divider M)+ 8, p = P (the value for divider P) + 2  60 */  61 /* Fin = 12.0000MHz */  62 #define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01))                           //HJ 400MHz  63 #define S3C2440_MPLL_405MHZ ((0x7f<<12)|(0x02<<4)|(0x01))                           //HJ 405MHz  64 #define S3C2440_MPLL_440MHZ ((0x66<<12)|(0x01<<4)|(0x01))                           //HJ 440MHz  65 #define S3C2440_MPLL_480MHZ ((0x98<<12)|(0x02<<4)|(0x01))                           //HJ 480MHz  66 #define S3C2440_MPLL_200MHZ ((0x5c<<12)|(0x01<<4)|(0x02))  67 #define S3C2440_MPLL_100MHZ ((0x5c<<12)|(0x01<<4)|(0x03))  68  69 #define S3C2440_UPLL_48MHZ  ((0x38<<12)|(0x02<<4)|(0x02))                           //HJ 100MHz  70  71 #define S3C2440_CLKDIV      0x05    /* FCLK:HCLK:PCLK = 1:4:8, UCLK = UPLL *    /       //HJ 100MHz  72 #define S3C2440_CLKDIV136   0x07    /* FCLK:HCLK:PCLK = 1:3:6, UCLK = UPLL *    /       //HJ 133MHz  73 #define S3C2440_CLKDIV188   0x04    /* FCLK:HCLK:PCLK = 1:8:8 */  74 #define S3C2440_CAMDIVN188  ((0<<8)|(1<<9)) /* FCLK:HCLK:PCLK = 1:8:8 */  75 /* Fin = 16.9344MHz */  76 #define S3C2440_MPLL_399MHz             ((0x6e<<12)|(0x03<<4)|(0x01))  77 #define S3C2440_UPLL_48MHZ_Fin16MHz     ((60<<12)|(4<<4)|(2))  78  79 /* S3C2410: Mpll,Upll = (m * Fin) / (p * 2^s)  80  * m = M (the value for divider M)+ 8, p = P (the value for divider P) + 2  81 */  82 #define S3C2410_MPLL_200MHZ     ((0x5c<<12)|(0x04<<4)|(0x00))  83 #define S3C2410_UPLL_48MHZ      ((0x28<<12)|(0x01<<4)|(0x02))  84 #define S3C2410_CLKDIV          0x03    /* FCLK:HCLK:PCLK = 1:2:4 */  85  86 static inline void delay (unsigned long loops) //到这行为止

    133     gpio->GPHUP = 0x000007FF; 134 135     /* arch number of SMDK2410-Board */ 136     /* support both of S3C2410 and S3C2440 */ 137     if ((gpio->GSTATUS1 == 0x32410000) || (gpio->GSTATUS1 == 0x32410002)) 138     { 139         /* arch number of SMDK2410-Board */ 140         gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; 141     } 142     else 143     { 144         /* arch number of SMDK2440-Board */ 145         gd->bd->bi_arch_number = MACH_TYPE_S3C2440; 146     } 147 148     /* adress of boot parameters */ 149     gd->bd->bi_boot_params = 0x30000100; 150

    1.   

    1. <span style="color:#000000;"># vi board/samsung/Nissa2440/Nissa2440.c</span>  

  4. 修改speed.c

    [cpp] view plain copy

    [cpp] view plain copy

    [cpp] view plain copy

    [cpp] view plain copy

    [cpp] view plain copy

    [cpp] view plain copy

    1. <span style="color:#000000;">130 /* return PCLK frequency */  

    2. 131 ulong get_PCLK(void)  

    3. 132 {  

    4. 133     struct s3c24x0_clock_power * const clk_power = s3c24x0_get_base_clock_po    wer();  

    5. 134     unsigned long clkdiv;  

    6. 135     unsigned long camdiv;  

    7. 136     int hdiv = 1;  

    8. 137     /* support both of S3C2410 and S3C2440 */  

    9. 138     if (gd->bd->bi_arch_number == MACH_TYPE_SMDK2410)  

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

    11. 140     else {  

    12. 141         clkdiv = clk_power->CLKDIVN;  

    13. 142         camdiv = clk_power->CAMDIVN;  

    14. 143     /* work out clock scalings */  

    15. 144     switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {  

    16. 145     case S3C2440_CLKDIVN_HDIVN_1:  

    17. 146          hdiv = 1;  

    18. 147          break;  

    19. 148     case S3C2440_CLKDIVN_HDIVN_2:  

    20. 149          hdiv = 2;  

    21. 150          break;  

    22. 151     case S3C2440_CLKDIVN_HDIVN_4_8:  

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

    24. 153          break;  

    25. 154     case S3C2440_CLKDIVN_HDIVN_3_6:  

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

    27. 156          break;  

    28. 157      }  

    29. 158   

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

    31. 160     }  

    32. 161 }  

    33. 162   

    34. </span>  

    1. <span style="color:#000000;"> 99 ulong get_HCLK(void)  

    2. 100 {  

    3. 101     struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();  

    4. 102     unsigned long clkdiv;  

    5. 103     unsigned long camdiv;  

    6. 104     int hdiv = 1;  

    7. 105     /* support both of S3C2410 and S3C2440 */  

    8. 106     if (gd->bd->bi_arch_number == MACH_TYPE_SMDK2410)  

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

    10. 108     else  

    11. 109     {  

    12. 110         clkdiv = clk_power->CLKDIVN;  

    13. 111         camdiv = clk_power->CAMDIVN;  

    14. 112     /* work out clock scalings */  

    15. 113         switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {  

    16. 114         case S3C2440_CLKDIVN_HDIVN_1:  

    17. 115         hdiv = 1;  

    18. 116         break;  

    19. 117         case S3C2440_CLKDIVN_HDIVN_2:  

    20. 118         hdiv = 2;  

    21. 119         break;  

    22. 120         case S3C2440_CLKDIVN_HDIVN_4_8:  

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

    24. 122         break;  

    25. 123         case S3C2440_CLKDIVN_HDIVN_3_6:  

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

    27. 125         break;  

    28. 126         }  

    29. 127     return get_FCLK() / hdiv;  

    30. 128     }  

    31. 129 }  

    32. </span>  

    1. <span style="color:#000000;"> 76 /* return FCLK frequency */  

    2.  77 ulong get_FCLK(void)  

    3.  78 {  

    4.  79     return get_PLLCLK(MPLL);  

    5.  80 }  

    6.  81   

    7.  82   

    8.  83 /* for s3c2440 */  

    9.  84 #define S3C2440_CLKDIVN_PDIVN        (1<<0)  

    10.  85 #define S3C2440_CLKDIVN_HDIVN_MASK   (3<<1)  

    11.  86 #define S3C2440_CLKDIVN_HDIVN_1      (0<<1)  

    12.  87 #define S3C2440_CLKDIVN_HDIVN_2      (1<<1)  

    13.  88 #define S3C2440_CLKDIVN_HDIVN_4_8    (2<<1)  

    14.  89 #define S3C2440_CLKDIVN_HDIVN_3_6    (3<<1)  

    15.  90 #define S3C2440_CLKDIVN_UCLK         (1<<3)  

    16.  91   

    17.  92 #define S3C2440_CAMDIVN_CAMCLK_MASK  (0xf<<0)  

    18.  93 #define S3C2440_CAMDIVN_CAMCLK_SEL   (1<<4)  

    19.  94 #define S3C2440_CAMDIVN_HCLK3_HALF   (1<<8)  

    20.  95 #define S3C2440_CAMDIVN_HCLK4_HALF   (1<<9)  

    21.  96 #define S3C2440_CAMDIVN_DVSEN        (1<<12)  

    22.  97   

    23.  98 /* return HCLK frequency */  

    24. </span>  

    1. <span style="color:#000000;"> 65     m = ((r & 0xFF000) >> 12) + 8;  

    2.  66     p = ((r & 0x003F0) >> 4) + 2;  

    3.  67     s = r & 0x3;  

    4.  68   

    5.  69     /* support both of S3C2410 and S3C2440*/  

    6.  70     if (gd->bd->bi_arch_number == MACH_TYPE_SMDK2410)  

    7.  71         return((CONFIG_SYS_CLK_FREQ * m) / (p << s));  

    8.  72     else  

    9.  73         return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s));   /* S3C2440 */  

    10.  74 }  

    11. </span>  

    1. <span style="color:#000000;"> 32 #include <common.h>  

    2.  33 DECLARE_GLOBAL_DATA_PTR;  

    3.  34   

    4.  35 #ifdef CONFIG_S3C24X0  

    5. </span>  

    1. <span style="color:#000000;"># vi arch/arm/cpu/arm920t/s3c24x0/speed.c </span>  

  5. 重新定义S3C24X0_CLOCK_POWER结构体

    [cpp] view plain copy

    [cpp] view plain copy

    1. <span style="color:#000000;">118 struct s3c24x0_clock_power {  

    2. 119     u32 LOCKTIME;  

    3. 120     u32 MPLLCON;  

    4. 121     u32 UPLLCON;  

    5. 122     u32 CLKCON;  

    6. 123     u32 CLKSLOW;  

    7. 124     u32 CLKDIVN;  

    8. 125     u32 CAMDIVN;  

    9. 126 };</span>  

    1. <span style="color:#000000;"># vi include/asm/arch-s3c24x0/s3c24x0.h</span>  

  6. 修改程序执行地址

[cpp] view plain copy

  1. <span style="color:#000000;">      # vi board/samsung/Nissa2440/config.mk </span>  

[cpp] view plain copy

  1. <span style="color:#000000;"> 23   

  2.  24   

  3.  25 TEXT_BASE = 0x33000000</span>  

[cpp] view plain copy

  1. <span style="color:#000000;"> </span>  




注:本文转载自csdn,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除。
上一篇 下一篇

分享