用c语言和arm汇编语言设置sdram的惯用方法-皇冠最新app版本

×
嵌入式 > 嵌入式开发 > 详情

用c语言和arm汇编语言设置sdram的惯用方法

发布时间:2026-08-04 发布时间:
|
用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



『本文转载自网络,皇冠最新app版本的版权归原作者所有,如有侵权请联系删除』

热门文章 更多
verilog hdl基础之:与c语言的区别与联系(独家)
网站地图