用C言语设置SDRAM的惯用办法
/* SDRAM regisers */
#defineMEM_CTL_BASE0x48000000// BWSCON的地址
#defineSDRAM_BASE0x30000000// SDRAM的开始地址
/* SDRAM 13个寄存器的值*/
/*界说了一个数组,把13个寄存器的设置值存到一个数组里边*/
unsignedlongconstmem_cfg_val[]={//留意unsignedlongconst的意义…
0x22111110,//BWSCON
0x00000700,//BANKCON0
0x00000700,//BANKCON1
0x00000700,//BANKCON2
0x00000700,//BANKCON3
0x00000700,//BANKCON4
0x00000700,//BANKCON5
0x00018005,//BANKCON6
0x00018005,//BANKCON7
0x008e07a3,//REFRESH
0x000000b2,//BANKSIZE
0x00000030,//MRSRB6
0x00000030,//MRSRB7
};
/*设置操控SDRAM的13个寄存器*/
/* for循环一共13次,刚好对13个寄存器赋值结束*/
void memsetup()
{
inti = 0;
unsignedlong*p = (unsignedlong *)MEM_CTL_BASE;
for(; i < 13; i++)
p[i] = mem_cfg_val[i];
}
用ARM汇编言语设置SDRAM的惯用办法
@******************************************************************************
@ File:head.s
@功用:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM持续履行
@******************************************************************************
.equMEM_CTL_BASE,0x48000000
.equSDRAM_BASE,0x30000000
.text
.global _start
_start:
bldisable_watch_dog
blmemsetup
blcopy_steppingstone_to_sdram
ldrpc,=set_sp@跳到SDRAM中持续履行
halt_loop:
bhalt_loop
memsetup:
@ initialize the static memory
@ set memory control registers
movr1,#MEM_CTL_BASE
adrlr2,mem_cfg_val@ adrl用于转移地址
movr3, #0x0@给r3清零(自己加上的一条指令)
addr3,r1, #52@ 52 == 4*13
1:
ldrr4,[r2], #4
strr4,[r1], #4
cmpr1,r3
bne1b@每次递加4个字节,共循环13次(设置13个寄存器)
movpc,lr