14.3.4 lowlevel_init标号

14.3.4  lowlevel_init标号

lowlevel_init标号位于board/smdk2410/lowlevel_init.S文件,代码如下:

 

132 .globl lowlevel_init

133 lowlevel_init:

134   /* memory control configuration */

135   /* make r0 relative the current location so that it */

136   /* reads SMRDATA out of FLASH rather than memory ! */

137   ldr     r0, =SMRDATA                       // 读取SMRDATA变量地址

138   ldr r1, _TEXT_BASE                    // 读取_TEXT_BASE变量地址

139   sub r0, r0, r1

140   ldr r1, =BWSCON /* Bus Width Status Controller*/ // 读取总线宽度寄存器

141   add     r2, r0, #13*4                  // 得到SMRDATA占用的大小

142 0:

143   ldr     r3, [r0], #4                   // 加载SMRDATA到内存

144   str     r3, [r1], #4

145   cmp     r2, r0

146   bne     0b

147

148   /* everything is fine now */

149   mov pc, lr

152 /* the literal pools origin */

153

154 SMRDATA:            // 定义SMRDATA

155     .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON
        <<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))

156     .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_ Tcoh<<6)+
        (B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))

157     .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+
        (B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))

158     .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+
        (B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))

159     .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+
        (B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))

160     .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+
        (B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))

161     .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+
        (B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))

162     .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))

163     .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))

164     .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+
        (Tchr<<16)+REFCNT)

165     .word 0x32

166     .word 0x30

167     .word 0x30

 

程序第137141行计算SMRDATA需要加载的内存地址和大小。首先在137行读取SMRDATA的变量地址,之后计算存放的内存地址并且记录在r0寄存器,然后根据总线宽度计算需要加载的SMRDATA大小,并且把加载结束地址存放在r2寄存器。

程序第142146行复制SMRDATA到内存。SMRDATA是开发板上内存映射的配置,有关内存映射关系请参考S3C2440A芯片手册。

你可能感兴趣的:(c,Flash)