您的位置:首页 > 其它

u-boot-2010.09移植(二)

2017-12-23 12:15 218 查看
让串口能正常输出打印信息,添加jz2440中S3C2440片上系统的支持。

一、汇编文件修改,这部分主要集中修改修改cpu/arm920t/start.S文件。

1、打开/cpu/arm920t/start.S,删除AT91RM9200使用的LED代码,117、118行,关闭LED代码。

start_code:

/*

* set the cpu to SVC32 mode

*/

mrs
r0,cpsr

bic
r0,r0,#0x1f

orr
r0,r0,#0xd3

msr
cpsr,r0

/*bl coloured_LED_init

bl red_LED_on*/ //这是LED灯初始化将其屏蔽掉,因为我们jz2440上的LED资源与SMDK2410开发板的不一致

2. 找到下面的语句,定位到该位置,修改相应部位,即增加红色部分

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) ||
defined(CONFIG_S3C2440)

mov r1, #0xffffffff

ldr r0, =INTMSK

str
r1, [r0]

# if defined(CONFIG_S3C2440)

ldr
r1, =0x7fff //这里是屏蔽中断,S3C440用到了15位,所以把值设置成0x7fff

ldr
r0, =INTSUBMSK

str
r1, [r0]

# endif

# if defined(CONFIG_S3C2440)

# define MPLLCON 0x4C000004

# define UPLLCON 0x4C000008

ldr r0, =CLKDIVN

mov
r1, #5 // FCLK:HCLK:PCLK = 1:4:8

str
r1, [r0]

ldr r0, =MPLLCON //写MPLL使pll生效,405MHz,(127<<12)+(2<<4)+(1)

ldr r1, =0x7F021

str r1, [r0]

ldr r0, =UPLLCON //USB时钟48MHz (56<<12)+(2<<4)+(2)

ldr r1, =0x038022

str r1, [r0]

# else

/* FCLK:HCLK:PCLK = 1:2:4 */

/* default FCLK is 120 MHz ! */

ldr
r0, =CLKDIVN

mov r1, #3

str
r1, [r0]

# endif

#endif
/* CONFIG_S3C2400 || CONFIG_S3C2410 */

/*

* we do sys-critical inits only at reboot,

* not when booting from ram!

*/

#ifndef CONFIG_SKIP_LOWLEVEL_INIT

bl
cpu_init_crit

#endif

3 打开 board/samsung/ok2440v3/ok2440v3.c

将下面一段去掉:

#define FCLK_SPEED 1

#ifFCLK_SPEED==0 /*
Fout = 203MHz, Fin = 12MHz for Audio */

#define M_MDIV 0xC3

#define M_PDIV 0x4

#define M_SDIV 0x1

#elifFCLK_SPEED==1 /* Fout = 202.8MHz */

#define M_MDIV 0xA1

#define M_PDIV 0x3

#define M_SDIV 0x1

#endif

#define USB_CLOCK 1

#if USB_CLOCK==0

#define U_M_MDIV 0xA1

#define U_M_PDIV 0x3

#define U_M_SDIV 0x1

#elif USB_CLOCK==1

#define U_M_MDIV 0x48

#define U_M_PDIV 0x3

#define U_M_SDIV 0x2

#endif

用下面一段替换:

#define M_MDIV 0x7f

#define M_PDIV 0x2

#define M_SDIV 0x1

#define U_M_MDIV 0x38

#define U_M_PDIV 0x2 //因为FL2440的晶振为12M,在芯片手册可以查到这些值,使得CPU频率为405M,USB时钟频率为48M.

#define U_M_SDIV 0x2

4 打开cpu/arm920t/s3c24x0/speed.c;修改(根据设置的分频系数FCLK:HCLK:PCLK = 1:4:8修改获取时钟频率的函数):

static ulong get_PLLCLK(int pllreg)

{

S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

ulong r, m, p, s;

if (pllreg == MPLL)

r = clk_power->MPLLCON;

else if (pllreg == UPLL)

r = clk_power->UPLLCON;

else

hang();

m = ((r & 0xFF000) >> 12) + 8;

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

s = r & 0x3;

# if defined(CONFIG_S3C2440)

if (pllreg == MPLL)

{

return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s));

}

# endif

return((CONFIG_SYS_CLK_FREQ * m) / (p << s));

}

/* return HCLK frequency */

ulong get_HCLK(void)

{

S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

# if defined(CONFIG_S3C2440)

return(get_FCLK()/4);

# endif

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

}

这样,时钟就设置好了,保存,重新生成u-boot.bin,下载到开发板运行,就可以看到串口打印信息了

如果我们在include/configs/fl2440.h文件中添加

#define CONFIG_SKIP_LOWLEVEL_INIT 1 //用来支持uboot在内存中直接运行

然后再编译出u-boot.bin,这时的镜像文件就可以通过J-Link下载到内存0x33f80000处运行。

在board/asmsung/fl2440/fl2440.c添加如下两个宏定义用来自动补齐命令

#define CONFIG_CMDLINE_EDITING 1

#define CONFIG_AUTO_COMPLETE 1 /*tab COMPLETE*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐