用C語言和ARM匯編語言設置SDRAM的慣用方法
/* SDRAM regisers */
本文引用地址:http://m.butianyuan.cn/article/201611/317091.htm#defineMEM_CTL_BASE0x48000000// BWSCON的地址
#defineSDRAM_BASE0x30000000// SDRAM的起始地址
/* SDRAM 13個寄存器的值*/
/*定義了一個數(shù)組,把13個寄存器的設置值存到一個數(shù)組里面*/
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循環(huán)總共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繼續(xù)執(zhí)行
@******************************************************************************
.equMEM_CTL_BASE,0x48000000
.equSDRAM_BASE,0x30000000
.text
.global _start
_start:
bldisable_watch_dog
blmemsetup
blcopy_steppingstone_to_sdram
ldrpc,=set_sp@跳到SDRAM中繼續(xù)執(zhí)行
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個字節(jié),共循環(huán)13次(設置13個寄存器)
movpc,lr
評論