歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> FL2440的U-boot-2010.09移植(二)

FL2440的U-boot-2010.09移植(二)

日期:2017/3/1 10:18:46   编辑:Linux編程

添加fl2440中S3C2440片上系統的支持。

相關閱讀:

U-Boot源代碼下載地址 http://www.linuxidc.com/Linux/2011-07/38897.htm

FL2440的U-boot-2010.09移植(一)http://www.linuxidc.com/Linux/2012-06/63755.htm
FL2440的U-boot-2010.09移植(二)http://www.linuxidc.com/Linux/2012-06/63756.htm
FL2440的U-boot-2010.09移植(三)DM9000網卡及開發板相關配置 http://www.linuxidc.com/Linux/2012-07/64155.htm
FL2440的U-boot-2010.09移植(四) 添加NOR FLash啟動支持 http://www.linuxidc.com/Linux/2012-07/64156.htm
FL2440的U-boot-2010.09移植(五)uboot架構中NAND FLash驅動修改 http://www.linuxidc.com/Linux/2012-07/64157.htm
FL2440的U-boot-2010.09移植(六)NAND FLash啟動支持 http://www.linuxidc.com/Linux/2012-07/641587.htm
FL2440的U-boot-2010.09移植(七)LCD的支持 http://www.linuxidc.com/Linux/2012-07/641587.htm
針對FL2440開發板的u-boot-2010.09版本補丁 http://www.linuxidc.com/Linux/2012-07/64116.htm

一、匯編文件修改,這部分主要集中修改修改cpu/arm920t/start.S文件。

1、刪除AT91RM9200使用的LED代碼,117、118行,關閉LED代碼。

  1. // bl coloured_LED_init
  2. // bl red_LED_on

2、修改編譯條件支持s3c2440,修改寄存器地址定義,修改 CPU頻率初始化設置

  1. # if defined(CONFIG_S3C2400)
  2. # define pWTCON 0x15300000
  3. # define INTMSK 0x14400008 /* Interupt-Controller base addresses */
  4. # define CLKDIVN 0x14800014 /* clock divisor register */
  5. #else
  6. # define pWTCON 0x53000000
  7. # define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
  8. # define INTSUBMSK 0x4A00001C
  9. # define CLKDIVN 0x4C000014 /* clock divisor register */
  10. # endif
  11. 添加
  12. # define CLK_CTL_BASE 0x4C000000
  13. # define MDIV_405 0x7f<<12
  14. # define PSDIV_405 0x21 /*set s3c2440 MPLL 405MHZ*/
  15. # define MDIV_200 0xa1<<12
  16. # define PSDIV_200 0x31 /*set s3c2410 MPLL 200MHZ*/

3、修改中斷禁止部分

  1. # if defined(CONFIG_S3C2410)
  2. //ldr r1, =0x3ff
  3. ldr r1, =0x7ff /*uboot error*/
  4. ldr r0, =INTSUBMSK
  5. str r1, [r0]
  6. # endif
  7. 後添加
  8. #if defined(CONFIG_S3C2440)
  9. ldr r1, =0x7ff
  10. ldr r0, =INTSUBMSK
  11. str r1, [r0]
  12. /*INTSUBMSK 關閉中斷 S3C2440有15位*/
  13. # endif

4、修改時鐘設置(2440的主頻為405MHz),緊接著上面一步,在其後添加和修改為:

  1. #if defined(CONFIG_S3C2440)
  2. /* FCLK:HCLK:PCLK = 1:4:8 */
  3. /* default FCLK is 405 MHz ! */
  4. ldr r0, =CLKDIVN
  5. mov r1, #5
  6. str r1, [r0]
  7. mrc p15, 0, r1, c1, c0, 0
  8. orr r1, r1, #0xc0000000 //asynchronous
  9. mcr p15, 0, r1, c1, c0, 0
  10. /*上面這段代碼見s3c2440a手冊p215,HDIVN != 0 叫做異步總線模式*/
  11. /* cpu clock FCLK = 405MHZ 通常我們叫400MHZ,實際是405MHZ,見S3C2440手冊(英文版)chapt7,P227要習慣用英文手冊:-)*/
  12. /*根據表中的數據設置MDIV,PDIV,SDIV*/
  13. mov r1, #CLK_CTL_BASE
  14. mov r2, #MDIV_405
  15. add r2, r2, #PSDIV_405
  16. str r2, [r1, #0x04] //寫入MPLLCON
  17. #else
  18. /* FCLK:HCLK:PCLK = 1:2:4 */
  19. /* default FCLK is 120 MHz ! */
  20. ldr r0, =CLKDIVN
  21. mov r1, #3
  22. str r1, [r0]
  23. mrc p15, 0, r1, c1, c0, 0
  24. orr r1, r1, #0xc0000000 //asynchronous
  25. mcr p15, 0, r1, c1, c0, 0
  26. /* cpu clock is 200MHZ*/
  27. mov r1, #CLK_CTL_BASE
  28. mov r2, #MDIV_200
  29. add r2, r2, #PSDIV_200
  30. str r2, [r1, #0x04] //MPLLCON
  31. #endif

5、修改SDRAM的REFRESH刷新周期,修改board/fl2440/lowlevel_init.S文件

  1. #define REFCNT 1259
  2. /*在SDRAM手冊上P3上有64ms refresh period (8K Cycle)*/
  3. /*結合fl2440開發板 preiod =64ms/8129=7.8125us,取7.9的話REFCNT的值為 (2048+1-7.9us*100Mhz)=1259*/
  4. #define Trp 0x0 /* 2clk */
  5. /*RAS precharge Time SDRAM數據手冊P10 tRP(min)=20ns 或者18ns(由型號決定)我們知道我們的HCLK=405/4Mhz 故可設成2clk(20ns),有些移植手冊設為4clk 再次充電時間設大點問題也不大吧 */
  6. #define Trc 0x3 /* 7clk */
  7. /*SDRAM ROW cycle time: Trc=Tsrc+Trp SDRAM數據手冊p10 tRC(min)=65ns 或者60ns(由型號決定) 設為7即為70ns */
  8. #define Tchr 0x2 /* 3clk */
  9. /*為找到Tchr相關定義,在SMRDATA:後面設置REFRESH寄存器時(Tchr<<16),而實際上該寄存器(11~17)位為保留位,這裡設置並沒有意義(可能這個值在其他ARM體系中有用吧,但至少在S3C2440中是無效的)*/
Copyright © Linux教程網 All Rights Reserved