U-boot-2009.08移植TE2440II开发板--在SDRAM中运行

发布时间:2011-3-23 13:42    发布者:techshare
关键词: SDRAM , TE2440II , U-BOOT , 开发板 , 移植
因为串口的波特率问题纠结了我2天,嘿嘿。   
1.首先创建自己板子的目录   
cd u-boot-2009.08   
mkdir board/samsung/TE2440II   
cp board/samsung/smdk2410/* board/samsung/TE2440II/   
mv board/samsung/TE2440II/smdk2410.c board/samsung/TE2440II/TE2440II.c   
2.添加配置文件   
cp include/configs/smdk2410.h include/configs/TE2440II.h   
在include/configs/smdk2410.h include/configs/TE2440II.h中添加   
#define CONFIG_SKIP_LOWLEVEL_INIT???????? 1???
因为是先在SDRAM中运行,所以要跳过底层的初始化。暂时没有添加CONFIG_2440,用原来的CONFIG_2410,以提高移植速度。   
注意暂时不要添加#define CONFIG_SKIP_RELOCATE_UBOOT??? 1     
否则就要更改你的下载地址为0x33f80000,让他去搬运代码吧   
3.修改board/samsung/TE2440II/ 目录下的Makefile,把COBJS := 修改为   
COBJS??? := TE2440II.o flash.o   
4.修改顶层Makefile   
TE2440II_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t TE2440II samsung s3c24x0   
注意有个Tab键   
5. 修改顶层Makefile文件,在CROSS_COMPILE ?=后面添加自己的交叉编译工具。   
CROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-linux-   
6.完成这几步后编译一下   
make TE2440II_config   
make     
下到SDRAM中,终端应该没有任何信息,需要设置波特率。     
1.修改TE2440II.c文件   
#elif FCLK_SPEED==1  /* Fout = 405MHz */   
#define M_MDIV  0x7f   
#define M_PDIV  0x2   
#define M_SDIV  0x1   
#endif   
2.??? 修改cpu/arm920t/start.S   
外部晶振为12MHz,通过MPLLCON设置MPLL为405M   
#if defined(CONFIG_S3C2410)   
#define MPLLCON 0x4C000004   
#define UPLLCON 0x4c000008   
#define LOCKTIME 0x4C000000   
#define CAMDIVN? 0x4C000018     
ldr r0,=LOCKTIME   
ldr r1,=0xffffffff   
str r1,[r0]   
//清除摄像头分频寄存器的值
ldr r0,=CAMDIVN
mov r1,#0   
str r1,[r0]   
ldr r0, =CLKDIVN   
mov r1, #5   
str r1,[r0]   
//手册说HDIVN不为0,加这个   
mrc p15, 0, r1, c1, c0, 0  //read ctrl register
orr r1, r1, #0xc0000000 //Asynchronous     
mcr? p15, 0, r1, c1, c0, 0  //write ctrl register   
ldr r0, =UPLLCON  //同时修改UPLLCON和MPLLCON需要先修??
ldr r1, =0x00038022  //改UPLLCON,且之间要间隔至少7个nop     
str r1,[r0]  //手册有些   
nop
nop   
nop   
nop   
nop   
nop   
nop   
nop   
ldr r0, =MPLLCON   
ldr r1, =0x0007f021   
str r1,[r0]   
#endif
3. 修改cpu/arm920t/s3c24x0/speed.c   
由于S3C2440和S3C2410的MPLL计算公式改变了,所以要改一下。   
get_PLLCLK改成这样   
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 (pllreg == MPLL) //MPLL的算法和UPLL是不同的。这里m=2*m   
{   
m <<= 1;   
}   
p = ((r & 0x003F0) >> 4) + 2;   
s = r & 0x3;   
return ((CONFIG_SYS_CLK_FREQ * m) / (p << s));   
}   
get_HCLK改成这样   
/* return HCLK frequency */   
ulong get_HCLK(void)   
{   
??? S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();   
??? return get_FCLK()/4;   
??? //return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK());   
}   
get_PCLK改成这样   
/* return PCLK frequency */   
ulong get_PCLK(void)   
{   
S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();   
return get_HCLK()/2;   
//return((clk_power->CLKDIVN & 0x1) ? get_HCLK()/2 : get_HCLK());   
}   
4.??? 我出问题的地方是串口,显示的基本跟正常的一样,但是显示为乱码,是串口波特率的问题。在drivers/serial/serial_s3c24x0.c中,修改   
uart->UBRDIV = 27;   
我直接设定了,不用鸟u-boot再鸟算了,他自己怎么也算不对,我帮他。   
5.??? make TE2440II_config   
?????? make     
下载到SDRAM中,哈哈。



李万鹏
本文地址:https://www.eechina.com/thread-59526-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表