• (一)建立项目 修改时钟


    一、启动流程

     

     二、建立项目 

            解压源码,进入目录:

    #tar xjvf u-boot-2010.06.tar.bz2
    #cd u-boot-2010.06/board/samsung/

    建立mini2440 文件夹:

    #mkdir mini2440
    2440 和2410 的模板复制
    #cp -rf smdk2410/* mini2440 <—将2410 下所有的代码复制到2440 下
    #cd mini2440
    #mv smdk2410.c mini2440.c < 改名mini2440.c
      修改mini2440 下Makefile 的第28 行
    COBJS := mini2440.o flash.o <改名为mni2440.o
      建立mini2440 头文件
    #cd ../../../include/configs
    #cp -rf smdk2410.h mini2440.h
      修改U-BOOT 根目录下的Makefile 文件:
    修改第159行为:
    CROSS_COMPILE ?=arm-linux- <—指定交叉编译器
    第3053行添加: 
    mini2440_config :  unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 samsung s3c24x0
    arm:CPU的架构(ARCH)
    arm920t:CPU的类型
    mini2440 :对应在board目录下建立新的开发板项目的目录
    samsung: 新开发板项目的上级目录, 如直接在board下建立新的开发板项目, 则这里应为NULL
    s3c24x0:CPU型号
    注意:编译选项格式的第二行要用Tab
    测试编译新建的mini2440 开发板项目:
    #make mini2440_config
    如果出现Configuring for mini2440 board...则表示设置正确
    #make
    编译后在根目录下会出现u-boot.bin文件,则u-boot移植的第一步就算完成了

    三、修改时钟和中断

    u-boot 第一个要运行的程序arch/arm/cpu/arm920t/start.S  

     1、 屏蔽AT91RM9200使用的LED代码

    1. mrs r0, cpsr  
    2. bic r0, r0, #0x1f  
    3. orr r0, r0, #0xd3  
    4. msr cpsr, r0  
    5. /*bl coloured_LED_init  
    6. bl red_LED_on*/

     2、 添加CPU频率初始化设置

    1. # define pWTCON 0x53000000  
    2. # define INTMSK  0x4A000008  /* Interupt-Controller base addresses */  
    3. # define INTSUBMSK  0x4A00001C  
    4. # define CLKDIVN 0x4C000014 /* clock divisor register */  
    5. # endif  
    6. #define CLK_CTL_BASE  0x4C000000   /*时钟控制寄存器地址*/
    7. #define MDIV_405 0x7f << 12          /*MPLL MDIV[19:12]*/
    8. #define PSDIV_405 0x21                /*MPLL PDIV[9:4] SDIV[1:0]*/
    9. #define MDIV_200 0xa1 << 12          /*MPLL 200MHz*/
    10. #define PSDIV_200 0x3                         /*MPLL 200MHz*/

     3、 添加中断禁止部分:

    1. # if defined(CONFIG_S3C2410)  
    2. ldr r1, =0x3ff  
    3. ldr r0, =INTSUBMSK  
    4. str r1, [r0]  
    5. # endif  
    6. # if defined(CONFIG_S3C2440)  
    7. ldr r1, =0x7fff  
    8. ldr r0, =INTSUBMSK  
    9. str r1, [r0]  
    10. # endif 

     4、 修改时钟设置(2440的主频为405MHz)

    1. #if defined(CONFIG_S3C2440)  
    2. /* FCLK:HCLK:PCLK = 1:4:8 */  
    3. ldr r0, =CLKDIVN  
    4. mov  r1, #5  
    5. str r1, [r0]  

    6. mrc p15, 0, r1, c1, c0, 0  
    7. orr r1, r1, #0xc0000000  
    8. mcr p15, 0, r1, c1, c0, 0 
    9.  
    10. mov  r1, #CLK_CTL_BASE   
    11. mov  r2, #MDIV_405  
    12. add r2, r2, #PSDIV_405  
    13. str r2, [r1, #0x04]  /* MPLLCON */  
    14. #else  
    15. /* FCLK:HCLK:PCLK = 1:2:4 */  
    16. /* default FCLK is 120 MHz ! */  
    17. ldr r0, =CLKDIVN  
    18. mov  r1, #3  
    19. str r1, [r0]  
    20. mrc p15, 0, r1, c1, c0, 0  
    21. orr r1, r1, #0xc0000000  
    22. mcr p15, 0, r1, c1, c0, 0  
    23. mov  r1, #CLK_CTL_BASE   
    24. mov  r2, #MDIV_200  
    25. add r2, r2, #PSDIV_200  
    26. str r2, [r1, #0x04]  
    27. #endif  
    28. #endif /* CONFIG_S3C24X0 */
    说明:mrc p15, 0, r1, c1, c0, 0 、orr r1, r1, #0xc0000000 、mcr  p15, 0, r1, c1, c0, 0 这3句程序非常重要,对于S3C2440 ,CLKDIVN 的第【2:1 】位为HDIVN,如果HDIVN 非0 ,CPU总线模式应该从“总线模式应该从“fast bus mode ”转换为“asynchronous bus mode ”, 可以通过上面的3 句程序实现。否则CPU 的工作频率将自动变成HCLK ,不再是FCLK 。这对SDRAM 的初始化至关重要
    asynchronous  [e'sɪŋkrənəs]   异步的

     修改/arch/arm/cpu/arm920t/s3c24x0/ speed.c

    第66行添加代码: 

    1. #if defined(CONFIG_S3C2440)  
    2. if(pllreg == MPLL)  
    3. {  
    4. return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s));  
    5. }  
    6. #endif  
    7. return (CONFIG_SYS_CLK_FREQ * m) / (p << s);  

     第87行添加代码:

    1. ulong get_HCLK(void)  
    2. {  
    3. struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();  
    4. #if defined(CONFIG_S3C2440)  
    5. return(get_FCLK()/4);  
    6. #endif  
    7. return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();  

     修改board/Samsung/mini2440/mini2440.c

     从34行开始修改代码如下

    1. #define FCLK_SPEED 2 /*设置默认等于2,*/  
    2. #if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */  
    3. #define M_MDIV  0xC3  
    4. #define M_PDIV  0x4  
    5. #define M_SDIV  0x1  
    6. #elif FCLK_SPEED==1 /* Fout = 202.8MHz */  
    7. #define M_MDIV  0xA1  
    8. #define M_PDIV  0x3  
    9. #define M_SDIV  0x1  
    10. #elif FCLK_SPEED==2 /* Fout = 405MHz */  
    11. #define M_MDIV 0x7F   
    12. #define M_PDIV 0x2  
    13. #define M_SDIV 0x1  
    14. #endif  
    15. #define USB_CLOCK 2 /*设置默认等于2,*/  
    16. #if USB_CLOCK==0  
    17. #define U_M_MDIV  0xA1  
    18. #define U_M_PDIV 0x3  
    19. #define U_M_SDIV 0x1  
    20. #elif USB_CLOCK==1  
    21. #define U_M_MDIV  0x48  
    22. #define U_M_PDIV 0x3  
    23. #define U_M_SDIV 0x2  
    24. #elif USB_CLOCK==2 /* Fout = 48MHz */  
    25. #define U_M_MDIV 0x38  
    26. #define U_M_PDIV 0x2  
    27. #define U_M_SDIV 0x2  
    28. #endif  
    29. board_init (void)函数修改代码如下:  
    30. /* arch number of SMDK2410-Board */  
    31. gd->bd->bi_arch_number = MACH_TYPE_S3C2440;  
    32. /* adress of boot parameters */  
    33. gd->bd->bi_boot_params = 0x30000100;  
    34. icache_enable();  
    35. dcache_enable();  
    36. return 0;  
    37. }
      在include/configs/mini2440.h 头文件中添加之前用到的CONFIG_S3C2440 宏
    第40行添加代码如下:
    1. #define CONFIG_S3C2440 1 /* on a mini2440 Board * 


     

  • 相关阅读:
    java服务端微信小程序支付
    H5商城,纯前端静态页面
    上海期货交易所CTP行情和交易接入
    iOS12 Network框架 自签名证书认证
    Android 本地播放器
    Spring Boot 集成 GRPC
    pandas DataFrame 索引(iloc 与 loc 的区别)
    编程规范 —— 类的命名
    pandas 操作 excel
    matplotlib 操作子图(subplot,axes)
  • 原文地址:https://www.cnblogs.com/liuchengchuxiao/p/4208062.html
Copyright © 2020-2023  润新知