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初始化失败

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗-永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值