用C语言和ARM汇编语言设置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
用C语言ARM汇编语言设置SDRA 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)