微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2410 SDRAM寄存器初始化设置

S3C2410 SDRAM寄存器初始化设置

时间:11-25 来源:互联网 点击:

连接地址都在SDRAM中,但是由于他们都是位置无关的相对跳转指令,所以可以在SRAM中运行。

@**********************************************************
2 @ File : head_yoyo.S
3 @ 功能 : 设置SDRAM,将程序复制到SDRAM中,并跳转到SDRAM中运行
4 @**********************************************************
5
6 .equ MEM_CTL_BASE, 0x48000000
7 .equ SDRAM_BASE, 0x30000000
8 .text
9 .global _start
10 _start:
11 bl disable_watchdog @关闭看门狗,否则CPU不断重启
12 bl memsetup @初始化SDRAM控制器
13 bl copy_steppingstone_to_sdram @复制代码到SDRAM
14 ldr pc,=on_sdram
15
16
17 @*********************************************************
18 @ 子函数说明:跳转到SDRAM中运行
19 @*********************************************************
20
21 on_sdram:
22 ldr sp,=0x34000000 @设置栈,由于栈是向下增长,实际的使用为0x340 00000-4(栈在使用之前要减4)
bl main @跳转到C语言
24
25
26 halt_loop:
27 b halt_loop @死循环
28
29 @*********************************************************
30 @ 子函数说明:关闭看门狗
31 @*********************************************************
32
33 disable_watchdog:
34 ldr r0,=0x53000000
35 mov r1,#0x0
36 str r1,[r0]
37 mov pc,lr
38
39 @*********************************************************
40 @子函数说明:初始化内存控制器
41 @*********************************************************
42
43 memsetup:
mov r1,#MEM_CTL_BASE
45 adrl r2,mem_cfg_val
46 add r3,r1,#52
47 1:
48 ldr r4,[r2],#4 @将地址为R2的内存单元数据读取到R4中,然后r2=r2 +4
49 str r4,[r1],#4 @将r4的数据写入到r1的内存单元,然后r1=r1+4
50 cmp r1,r3 @比较R1,R3是否设置完所有的13个寄存器。
51 bne 1b @如果没有复制完,就继续
52 mov pc,lr @复制完后返回,b指令则不行。区别bl。
53
54
55 @*****************************************************************
56 @子函数说明:复制代码到SDRAM,将SRAM中的4K数据全部复制到SDRAM,
57 @ SRAM起始地址为0x00000000,SDRAM的起始地址为0x30000000
58 @*****************************************************************
59
60 copy_steppingstone_to_sdram:
61 mov r1,#0 @设置R1为SRAM的起始地址为0x00000000
62 ldr r2,=SDRAM_BASE @设置R2为SDRAM的起始地址为0设置R1为0X300 00000
63 mov r3 ,#4*1024 @设置R3为4K
1:
65 ldr r4,[r1],#4 @从SRAM中读取4字节的数据到R4中,然后r1=r 1+4
66 str r4,[r2],#4 @将r4中的4字节数据复制到SDRAM中,然后r2= r2+4
67 cmp r1,r3 @判断是否完成:SRAM的地址是否等于末地址>
68 bne 1b @若没有完成,继续复制
69 mov pc,lr @返回
70
71 .align 4
72
73 @******************************************************
74 @存储控制器13个寄存器的设置值
75 @******************************************************
76 mem_cfg_val:
77 .long 0x22011110 @BWSCON :
78 .long 0x00000700 @BANKCON0
79 .long 0x00000700 @BANKCON1
80 .long 0x00000700 @BANKCON2
81 .long 0x00000700 @BANKCON3
82 .long 0x00000700 @BANKCON4
.long 0x00000700 @BANKCON5
84 .long 0x00018005 @BANKCON6
85 .long 0x00018005 @BANKCON7
86 .long 0x008e07a3 @REFRESH
87 .long 0x000000b1 @BANKSIZE
88 .long 0x00000030 @MRSRB6
89 .long 0x00000030 @MRSRB7
说明:
BWSCON:对应BANK0-BANK7,每BANK使用4位。这4位分别表示:
a.STx:启动/禁止SDRAM的数据掩码引脚,对于SDRAM,此位为0;对于SRAM,此位为1。有原理图可知Not using UB/LB (The pins are dedicated nWBE[3:0])。
b.WSx:是否使用存储器的WAIT信号,通常设为0
c.DWx:使用两位来设置存储器的位宽:00-8位,01-16位,10-32位,11-保留。
d.比较特殊的是BANK0对应的4位,它们由硬件跳线决定,只读。
对于本开发板,使用两片容量为32Mbyte、位宽为16的SDRAM组成容量为64Mbyte、位宽为32的存储器,所以其BWSCON相应位为: 0010。对于本开发板,BWSCON可设为0x22111110:其实我们只需要将BANK6对应的4位设为0010即可,其它的是什么值没什么影响,这个值是参考手册上给出的。

BANKCON0-BANKCON5:我们没用到,使用默认值0x00000700;

BANKCON6-BANKCON7:设为0x00018005 在8个BANK中,只有BANK6和BANK7可以使用SRAM或SDRAM,所以BANKCON6-7与BANKCON

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top