您的位置 首页 IOT

用C语言和ARM汇编语言设置SDRAM的惯用办法

用C语言设置SDRAM的惯用方法/*SDRAMregisers*/#defineMEM_CTL_BASE0x48000000//BWSCON的地址#defineSDRAM_BASE0x30000000

用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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/275384.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部