3317|1

468

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

s5pv210 uboot-2012-10移植(四) 之使系统工作在1000Mhz [复制链接]

s5pv210 uboot-2012-10移植(四) 之使系统工作在1000Mhz

在uboot原来的代码里,有系统时钟的初始化函数,在board/samsung/smdkv210/lowlevel_init.S的system_clock_init函数,我大概看了一下,寄存器不一样,而且是汇编写的,所以我就改成用c语言来实现,在BL1阶段初始化一下,BL2阶段就不用重新初始化了。

1.arch/arm/lib/spl.c +43添加


[cpp] view plaincopy


  • //SystemClock  
  • #define APLL_LOCK     (*(volatile unsigned int *)0xE0100000)  
  • #define MPLL_LOCK     (*(volatile unsigned int *)0xE0100008)  
  • #define EPLL_LOCK     (*(volatile unsigned int *)0xE0100010)  
  • #define VPLL_LOCK     (*(volatile unsigned int *)0xE0100020)  
  • #define APLL_CON0     (*(volatile unsigned int *)0xE0100100)  
  • #define APLL_CON1     (*(volatile unsigned int *)0xE0100104)  
  • #define MPLL_CON      (*(volatile unsigned int *)0xE0100108)  
  • #define EPLL_CON0     (*(volatile unsigned int *)0xE0100110)  
  • #define EPLL_CON1     (*(volatile unsigned int *)0xE0100114)  
  • #define VPLL_CON      (*(volatile unsigned int *)0xE0100120)  
  • #define CLK_SRC0      (*(volatile unsigned int *)0xE0100200)  
  • #define CLK_DIV0      (*(volatile unsigned int *)0xE0100300)  
  •   
  • #define SETPLL(mdiv, pdiv, sdiv) ((1<<31)|(mdiv<<16)|(pdiv<<8)|(sdiv<<0))  
  •   
  • #define APLL_MDIV   250  
  • #define APLL_PDIV   6  
  • #define APLL_SDIV   1  
  • #define APLL_CON0_VAL SETPLL (APLL_MDIV, APLL_PDIV, APLL_SDIV)  
  •   
  • #define MPLL_MDIV   667  
  • #define MPLL_PDIV   12  
  • #define MPLL_SDIV   1  
  • #define MPLL_CON_VAL SETPLL (MPLL_MDIV, MPLL_PDIV, MPLL_SDIV)  
  •   
  • #define PCLK_PSYS_RATIO   1  
  • #define HCLK_PSYS_RATIO   4   
  • #define PCLK_DSYS_RATIO   1  
  • #define HCLK_DSYS_RATIO   3  
  • #define PCLK_MSYS_RATIO   1  
  • #define HCLK_MSYS_RATIO   4  
  • #define A2M_RATIO         4  
  • #define APLL_RATIO        0  
  • #define CLK_DIV0_VAL ( (APLL_RATIO<<0)|\  
  •                        (A2M_RATIO<<4)|\  
  •                        (HCLK_MSYS_RATIO<<8)|\  
  •                        (PCLK_MSYS_RATIO<<12)|\  
  •                        (HCLK_DSYS_RATIO<<16)|\  
  •                        (PCLK_DSYS_RATIO<<20)|\  
  •                        (HCLK_PSYS_RATIO<<24)|\  
  •                        (PCLK_PSYS_RATIO<<28) )  


2. arch/arm/lib/spl.c +135添加

[cpp] view plaincopy


  • void init_SystemClock (void)  
  • {  
  •     int i;  
  •       
  •     //CLK_DIV0 = 0;  
  •   
  •     APLL_CON0 = APLL_CON0_VAL;  
  •     MPLL_CON  = MPLL_CON_VAL;  
  •   
  •     CLK_SRC0 = 0x1111;  
  •   
  •     CLK_DIV0 = CLK_DIV0_VAL;  
  •   
  •     //for (i=65535; i>=0; i--);  
  • }  


3. include/configs/smdkv210.h +178

[cpp] view plaincopy


  • /*#define CONFIG_SYS_PROMPT     "SMDKC100 # "*/  
  • #define CONFIG_SYS_PROMPT       "SMDKV210 # "  



4. include/configs/smdkv210.h +206


[cpp] view plaincopy


  • /*#define CONFIG_IDENT_STRING       " for SMDKC100"*/  
  • #define CONFIG_IDENT_STRING     " for SMDKV210"  


5. arch/arm/lib/spl.c +183


[cpp] view plaincopy


  • void __weak board_init_f(ulong dummy)  
  • {  
  •     __attribute__((noreturn)) void (*uboot)(void);  
  • #if 0  
  •     /* Set the stack pointer. */  
  •     asm volatile("mov sp, %0\n" : : "r"(CONFIG_SPL_STACK));  
  •   
  •     /* Clear the BSS. */  
  •     memset(__bss_start, 0, __bss_end__ - __bss_start);  
  •   
  •     /* Set global data pointer. */  
  •     gd = &gdata;  
  •   
  •     board_init_r(NULL, 0);  
  • #endif  
  •   
  •     /*
  •     // test  
  •     #define GPH0CON (*(volatile unsigned int *)0xE0200C00)
  •     #define GPH0DAT (*(volatile unsigned int *)0xE0200C04)
  •     GPH0CON = (1<<0) | (1<<4) | (1<<8) | (1<<12);
  •     GPH0DAT = 10;
  •     */  
  •     init_SystemClock();  
  •   
  •     uart_init();  
  •   
  •     copy_uboot_to_ram();  
  •   
  •     //printf ("jump to u-boot image\r\n");  
  •     /* Jump to U-Boot image */  
  •     uboot = (void *)CONFIG_SYS_TEXT_BASE;  
  •     (*uboot)();  
  • }  



6. 好了,make一下,使用命令烧写spl/smdkv210-spl.bin和u-boot.bin到SD卡里,启动,就会看到下面这个画面了。

点赞 关注
个人签名

回复
举报

468

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
修改主频是不能随便修改的。
如果放在main .c 函数里面修改会导致一些意外的结果,会导致SDMMC 读写失败的,暂时还找不到原因。
 
个人签名
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表