`
844604778
  • 浏览: 550472 次
文章分类
社区版块
存档分类
最新评论

u-boot-2012.04.01移植到TQ2440(二):修改时钟

 
阅读更多

一、修改时钟

在配置文件include/configstq2440.h中加入S3C2440的配置,屏蔽掉S3C2410的配置

//#defineCONFIG_S3C2410 /* specifically aSAMSUNG S3C2410 SoC */

#define CONFIG_S3C2440

//#defineCONFIG_SMDK2410 /* on a SAMSUNGSMDK2410 Board */

屏蔽一些暂时不用的支持

#if 0

#define CONFIG_CS8900 /* we have a CS8900 on-board */

#define CONFIG_CS8900_BASE 0x19000300

#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */

#endif

#if 0

#define CONFIG_USB_OHCI

#define CONFIG_USB_KEYBOARD

#define CONFIG_USB_STORAGE

#define CONFIG_DOS_PARTITION

#endif

//#defineCONFIG_CMD_DHCP

//#defineCONFIG_CMD_NAND

//#defineCONFIG_CMD_USB

#if 0

#define CONFIG_CMD_FAT

#define CONFIG_CMD_EXT2

#define CONFIG_CMD_UBI

#define CONFIG_CMD_UBIFS

#define CONFIG_CMD_MTDPARTS

#define CONFIG_MTD_DEVICE

#defineCONFIG_MTD_PARTITIONS

#define CONFIG_YAFFS2

#define CONFIG_RBTREE

#endif

在arch/arm/cpu/arm920t/start.S添加如下代码

# if defined(CONFIG_S3C2410)

ldr r1, =0x3ff

ldr r0, =INTSUBMSK

str r1, [r0]

# endif

# ifdefined(CONFIG_S3C2440)

ldr r1,=0x7fff

ldr r0,=INTSUBMSK

str r1,[r0]

# endif

# ifdefined(CONFIG_S3C2440)

# define MPLLCON 0x4C000004 //系统主频配置寄存器

# define UPLLCON 0x4C000008//USB频率配置寄存器

# define CAMDIVN 0x4C000018//照相机时钟分频寄存器

ldr r0, =CAMDIVN

mov r1, #0

str r1, [r0]

ldr r0, =CLKDIVN

mov r1, #0x05

str r1, [r0]

/*如果HDIVN不等于0CPU必须设置为异步总线模式*/

mrc p15,0,r0,c1,c0,0

orr r0,r0,#0xc0000000

mcr p15,0,r0,c1,c0,0

ldr r0, =UPLLCON

ldr r1, =0x38022 // 48MHZ

str r1, [r0]

/*

**When you set MPLL&UPLL values, you haveto set the UPLL

**value first and then the MPLL value. (Needsintervals

**approximately 7 NOP)

*/

nop

nop

nop

nop

nop

nop

nop

ldr r0, =MPLLCON

ldr r1, =0x5c011 //400MHZ

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 /*CONFIG_S3C2440 */

#endif /* CONFIG_S3C24X0 */

屏蔽board/tq2440/tq2440.c中board_early_init_f()函数对时钟的设置

#if 0

struct s3c24x0_clock_power * const clk_power =

s3c24x0_get_base_clock_power();

#endif

struct s3c24x0_gpio * const gpio =s3c24x0_get_base_gpio();

#if 0

/* to reduce PLL lock time, adjust the LOCKTIME register */

writel(0xFFFFFF, &clk_power->locktime);

/* configure MPLL */

writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,

&clk_power->mpllcon);

/* some delay between MPLL and UPLL */

pll_delay(4000);

/* configure UPLL */

writel((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV,

&clk_power->upllcon);

/* some delay between MPLL and UPLL */

pll_delay(8000);

#endif

在board_init函数中修改机器码

gd->bd->bi_arch_number= MACH_TYPE_S3C2440;

修改代码以支持直接烧到SDRAM运行

修改配置文件include\configs\tq2440.h

#define CONFIG_SYS_TEXT_BASE 0x32000000

#define CONFIG_SKIP_LOWLEVEL_INIT

#defineCONFIG_AUTO_COMPLETE //开启命令自动补全

修改命令提示符

#define CONFIG_SYS_PROMPT "TQ2440# "

修改顶层目录Makefile(根据自己的tftp服务器目录修改,这只是为了以后方便)

$(obj)u-boot.bin: $(obj)u-boot

$(OBJCOPY) ${OBJCFLAGS} -O binary $<$@

$(BOARD_SIZE_CHECK)

cp u-boot.bin /home/tftpboot

配置

root@zjh:/home/work/u-boot-2012.04.01#make tq2440_config

Configuring for tq2440board...

编译

root@zjh:/home/work/u-boot-2012.04.01#make

将u-boot.bin烧到0x32000000地址然后执行

TQ2440 # tftp 32000000u-boot.bin

dm9000 i/o: 0x20000000, id:0x90000a46

DM9000: running in 16 bitmode

MAC: 00:0c:29:4d:e4:f4

Using dm9000 device

TFTP from server172.28.12.60; our IP address is 172.28.12.10

Filename 'u-boot.bin'.

Load address: 0x32000000

Loading: T #############

done

Bytes transferred = 180536(2c138 hex)

TQ2440 # go 32000000

## Starting application at0x32000000 ...

U-Boot 2012.04.01 (Dec 292012 - 14:00:52)

CPUID: 32440001

FCLK: 400 MHz

HCLK: 100 MHz

PCLK: 50 MHz

DRAM: 64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

### ERROR ### Please RESETthe board ###卡在这里不动了

搜索“Flash:”

puts("Flash: ");

flash_size = flash_init();

if (flash_size > 0) {

# ifdefCONFIG_SYS_FLASH_CHECKSUM

char *s = getenv("flashchecksum");

print_size(flash_size, "");

/*

* Compute and printflash CRC if flashchecksum is set to 'y'

*

* NOTE: Maybe weshould add some WATCHDOG_RESET()? XXX

*/

if (s && (*s == 'y')) {

printf("CRC: %08X", crc32(0,

(const unsigned char *) CONFIG_SYS_FLASH_BASE,

flash_size));

}

putc('\n');

# else /* !CONFIG_SYS_FLASH_CHECKSUM */

print_size(flash_size, "\n");

# endif /*CONFIG_SYS_FLASH_CHECKSUM */

} else {

puts(failed);

hang();

}

在看下hang()函数

void hang(void)

{

puts("### ERROR ### Please RESET the board ###\n");

for (;;);

}

从这里可以知道是Flash初始化失败

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics