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

来源:互联网 发布:蒋介石发动内战数据 编辑:程序博客网 时间:2024/04/29 16:21

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

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

//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_PDIV12#define MPLL_SDIV1#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添加

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

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

4. include/configs/smdkv210.h +206

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

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

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卡里,启动,就会看到下面这个画面了。


                                                                            

原创粉丝点击