tag 标签: init

相关博文
  • 热度 22
    2013-9-6 22:21
    1374 次阅读|
    0 个评论
    /*写在这只是为了做笔记 如果有理解不正确的地方 还望大家指正*/ #include #include /* some parameters for the board */ /*  *  * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S  *  * Copyright (C) 2002 Samsung Electronics SW.LEE   *  */ /* 下面定义了一些控制寄存器 最下面对应这些寄存器定义了一些值 然后按照顺序把这些值赋给寄存器 就是寄存器的初始化 如果要修改寄存器需要改最下面的值 为什么需要宏定义这些寄存器 而像r1 r2这些寄存器不需要宏定义 因为r1这些是arm核里面的寄存器 这些是arm外围芯片 汇编是针对核而言的 编译器里面有r1这些寄存器的信息 外围这些寄存器是各厂商自己加的 内核是没有的 所以需要宏定义 */ #define BWSCON    0x48000000 /* BWSCON */ #define DW8             (0x0) #define DW16             (0x1) #define DW32             (0x2) #define WAIT             (0x12) #define UBLB             (0x13) #define B1_BWSCON          (DW32) #define B2_BWSCON          (DW16) #define B3_BWSCON          (DW16 + WAIT + UBLB) #define B4_BWSCON          (DW16) #define B5_BWSCON          (DW16) #define B6_BWSCON          (DW32) #define B7_BWSCON          (DW32) /* BANK0CON */ #define B0_Tacs             0x0    /*  0clk */ #define B0_Tcos             0x0    /*  0clk */ #define B0_Tacc             0x7    /* 14clk */ #define B0_Tcoh             0x0    /*  0clk */ #define B0_Tah             0x0    /*  0clk */ #define B0_Tacp             0x0 #define B0_PMC             0x0    /* normal */ /* BANK1CON */ #define B1_Tacs             0x0    /*  0clk */ #define B1_Tcos             0x0    /*  0clk */ #define B1_Tacc             0x7    /* 14clk */ #define B1_Tcoh             0x0    /*  0clk */ #define B1_Tah             0x0    /*  0clk */ #define B1_Tacp             0x0 #define B1_PMC             0x0 #define B2_Tacs             0x0 #define B2_Tcos             0x0 #define B2_Tacc             0x7 #define B2_Tcoh             0x0 #define B2_Tah             0x0 #define B2_Tacp             0x0 #define B2_PMC             0x0 #define B3_Tacs             0x0    /*  0clk */ #define B3_Tcos             0x3    /*  4clk */ #define B3_Tacc             0x7    /* 14clk */ #define B3_Tcoh             0x1    /*  1clk */ #define B3_Tah             0x0    /*  0clk */ #define B3_Tacp             0x3     /*  6clk */ #define B3_PMC             0x0    /* normal */ #define B4_Tacs             0x0    /*  0clk */ #define B4_Tcos             0x0    /*  0clk */ #define B4_Tacc             0x7    /* 14clk */ #define B4_Tcoh             0x0    /*  0clk */ #define B4_Tah             0x0    /*  0clk */ #define B4_Tacp             0x0 #define B4_PMC             0x0    /* normal */ #define B5_Tacs             0x0    /*  0clk */ #define B5_Tcos             0x0    /*  0clk */ #define B5_Tacc             0x7    /* 14clk */ #define B5_Tcoh             0x0    /*  0clk */ #define B5_Tah             0x0    /*  0clk */ #define B5_Tacp             0x0 #define B5_PMC             0x0    /* normal */ #define B6_MT             0x3    /* SDRAM */ #define B6_Trcd              0x1 #define B6_SCAN             0x1    /* 9bit */ #define B7_MT             0x3    /* SDRAM */ #define B7_Trcd             0x1    /* 3clk */ #define B7_SCAN             0x1    /* 9bit */ /* REFRESH parameter */ #define REFEN             0x1    /* Refresh enable */ #define TREFMD             0x0    /* CBR(CAS before RAS)/Auto refresh */ #define Trp             0x0    /* 2clk */ #define Trc             0x3    /* 7clk */ #define Tchr             0x2    /* 3clk */ #define REFCNT             1113    /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */ /**************************************/ _TEXT_BASE:     .word    TEXT_BASE .globl lowlevel_init lowlevel_init:     /* memory control configuration */     /* make r0 relative the current location so that it */     /* reads SMRDATA out of FLASH rather than memory ! */     ldr     r0, =SMRDATA     ldr    r1, _TEXT_BASE//这个地址是连接文件的基地址 是程序运行的第一条指令的地址     sub    r0, r0, r1//此刻程序还在norflash或者内部sram里面 没有在sdram 但是链接的时候把SMRDATA的地址加上了基地址 现在减去 就是所谓的地址变换     ldr    r1, =BWSCON    /* Bus Width Status Controller 只有经过变换后的地址才能在sram或norflash里面执行*/     add     r2, r0, #13*4//r0指向的是SMRDATA的首地址 r2指向的是最后一个地址   0:     ldr     r3, , #4//通过循环依次将SMRDATA的值赋给寄存器 初始化     str     r3, , #4     cmp     r2, r0     bne     0b     /* everything is fine now */     mov    pc, lr     .ltorg /* the literal pools origin */ SMRDATA:     .word (0+(B1_BWSCON4)+(B2_BWSCON8)+(B3_BWSCON12)+(B4_BWSCON16)+(B5_BWSCON20)+(B6_BWSCON24)+(B7_BWSCON28))     .word ((B0_Tacs13)+(B0_Tcos11)+(B0_Tacc8)+(B0_Tcoh6)+(B0_Tah4)+(B0_Tacp2)+(B0_PMC))     .word ((B1_Tacs13)+(B1_Tcos11)+(B1_Tacc8)+(B1_Tcoh6)+(B1_Tah4)+(B1_Tacp2)+(B1_PMC))     .word ((B2_Tacs13)+(B2_Tcos11)+(B2_Tacc8)+(B2_Tcoh6)+(B2_Tah4)+(B2_Tacp2)+(B2_PMC))     .word ((B3_Tacs13)+(B3_Tcos11)+(B3_Tacc8)+(B3_Tcoh6)+(B3_Tah4)+(B3_Tacp2)+(B3_PMC))     .word ((B4_Tacs13)+(B4_Tcos11)+(B4_Tacc8)+(B4_Tcoh6)+(B4_Tah4)+(B4_Tacp2)+(B4_PMC))     .word ((B5_Tacs13)+(B5_Tcos11)+(B5_Tacc8)+(B5_Tcoh6)+(B5_Tah4)+(B5_Tacp2)+(B5_PMC))     .word ((B6_MT15)+(B6_Trcd2)+(B6_SCAN))     .word ((B7_MT15)+(B7_Trcd2)+(B7_SCAN))     .word ((REFEN23)+(TREFMD22)+(Trp20)+(Trc18)+(Tchr16)+REFCNT)     .word 0x32     .word 0x30     .word 0x30  @sec.samsung.com