Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152661
  • 博文数量: 22
  • 博客积分: 1456
  • 博客等级: 上尉
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-25 00:08
个人简介

ddd

文章存档

2011年(1)

2010年(21)

我的朋友

分类: 嵌入式

2010-04-25 13:52:48

移植U-Boot-2009.08到友善之臂mini2440(二)

 

2.1 修改cpu/arm920t/start.S

(1)删除AT91RM9200使用的LED代码,117118行,关闭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

 

(2)修改编译条件支持s3c2440,在134行,修改寄存器地址定义,修改 CPU频率初始化设置

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

        /* turn off the watchdog */

# if defined(CONFIG_S3C2400)

#  define pWTCON           0x15300000

#  define INTMSK           0x14400008      /* Interupt-Controller base addresses */

#  define CLKDIVN          0x14800014      /* clock divisor register */

#else

#  define pWTCON           0x53000000

#  define INTMSK           0x4A000008      /* Interupt-Controller base addresses */

#  define INTSUBMSK        0x4A00001C

#  define CLKDIVN           0x4C000014      /* clock divisor register */

# endif

修改 CPU频率初始化设置

//xujun

#define CLK_CTL_BASE 0x4C000000

#define MDIV_405 0x7f << 12

#define PSDIV_405 0x21

#define MDIV_200 0xa1 <<12

#define PSDIV_200 0x31

 

(3)修改中断禁止部分

165行修改0x3ff0x7ff

#if defined(CONFIG_S3C2410)

    ldr r1, =0x7ff /*根据2410芯片手册,INTSUBMSK11位可用*/

    ldr r0, =INTSUBMSK

    str r1, [r0]

#endif

169行添加

#if defined(CONFIG_S3C2440)

    ldr r1, =0x7fff

    ldr r0, =INTSUBMSK

    str r1, [r0]

#endif

(4)修改时钟设置(2440的主频为405MHz。)

 

//xujun

#if defined(CONFIG_S3C2440)

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

ldr r0,=CLKDIVN

    mov r1,#5

    str r1,[r0]

 

    mrc p15,0,r1,c1,c0,0

    orr r1,r1,#0xc0000000

    mcr p15,0,r1,c1,c0,0

 

    mov r1,#CLK_CTL_BASE

    mov r2,#MDIV_405

    add r2,r2,#PSDIV_405

    str r2,[r1,#0x04]

#else

 

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

        /* default FCLK is 120 MHz ! */

        ldr     r0, =CLKDIVN

        mov     r1, #3

        str     r1, [r0]

//xujun

    mrc p15,0,r1,c1,c0,0

    orr r1,r1,#0xc0000000

    mcr p15,0,r1,c1,c0,0

 

    mov r1,#CLK_CTL_BASE

    mov r2,#MDIV_200

    add r2,r2,#PSDIV_200

    str r2,[r2,#0x04]

#endif

 

(5)将从Flash启动改成从NAND Flash启动

relocate U-Boot to RAM    的代码注释或者删除

#if 0

#ifndef CONFIG_SKIP_RELOCATE_UBOOT

。。。。。。。。。。。。。。。。。

#endif    /* CONFIG_SKIP_RELOCATE_UBOOT */

#endif    // if 0

 

在以下UBoot的设置堆栈语句段(作用是将u-boot的源代码从nor flashsdram)

        /* Set up the stack */

 stack_setup:

    ldr r0, _TEXT_BASE       /* upper 128 KiB: relocated uboot 

    的前面添加上(#endif  /* CONFIG_SKIP_RELOCATE_UBOOT */

#endif的后面添加上:)以下的nand boot代码:

定义u-bootnand flash中存放的长度为#define LENGTH_UBOOT 0x60000,可以方便修改u-boot因为裁剪和增添大小的改变而占的长度。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

//xujun

#define LENGTH_UBOOT  0x60000

#define NAND_CTL_BASE  0x4E000000

#ifdef CONFIG_S3C2440_NAND_BOOT

    @reset NAND

    #define oNFCONF 0x00

    #define oNFCONT 0x04

    #define oNFSTAT 0x08

    #define oNFCMD 0x20

    mov r1,#NAND_CTL_BASE

    ldr r2,=( (7<<12)|(7<<8)|(7<<4)|(0<<0))

    str r2,[r1,#oNFCONF]

    ldr r2,[r1,#oNFCONF]

 

    ldr r2,=((1<<4)|(0<<1)|(1<<0))

    str r2,[r1,#oNFCONT]

    ldr r2,[r1,#oNFCONT]

 

    ldr r2,=(0x6)

    str r2,[r1,#oNFSTAT]

    ldr r2,[r1,#oNFSTAT]

 

    mov r2,#0xff

    strb r2,[r1,#oNFCMD]

    mov r3,#0

nand1:

    add r3,r3,#0x1

    cmp r3,#0xa

    blt nand1

nand2:

    ldr r2,[r1,#oNFSTAT]

    tst r2,#0x4

    beq nand2

 

ldr r2,[r1,#oNFCONT]

    orr r2,r2,#0x2

    str r2,[r1,#oNFCONT]

    @get read to call C functions (for nand_read())

    ldr sp,DW_STACK_START

    mov fp,#0

@copy U-Boot to Ram

    ldr r0,=TEXT_BASE

    mov r1,#0x0

    mov r2, #LENGTH_UBOOT  //the u-boot’s  lenth

    bl nand_read_ll

    tst r0,#0x0

    beq ok_nand_read

bad_nand_read:

loop2:    b loop2

ok_nand_read:

    @verify

    mov r0,#0

    ldr r1,=TEXT_BASE

    mov r2,#0x400

go_next:

    ldr r3,[r0],#4

    ldr r4,[r1],#4

    teq r3,r4

    bne notmatch

    subs r2,r2,#4

    beq stack_setup

    bne go_next

notmatch:

loop3:    b loop3 @CONFIG_S3C2440_NAND_BOOT

#endif

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

ldr    pc, _start_armboot之后加入LED代码:

       ldr     pc, _start_armboot

#if defined(CONFIG_MINI2440_LED)

   mov  r1, #GPIO_CTL_BASE

   add  r1, r1, #oGPIO_B

   ldr  r2,=0x156aa

   str  r2, [r1, #oGPIO_CON]

   mov  r2, #0xff

   str  r2, [r1, #oGPIO_UP]

   mov  r2, #0x1c0

   str  r2, [r1, #oGPIO_DAT]

#endif

_start_armboot: .word start_armboot

  _start_armboot:    .word start_armboot  后加入

_start_armboot: .word start_armboot

#define STACK_BASE 0x33f00000

#define STACK_SIZE 0x10000

        .align  2

DW_STACK_START: .word   STACK_BASE+STACK_SIZE-4

阅读(2202) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~