S3C6410,Tiny6410,Mini6410,MoblieDDR内存驱动
2011-07-21 08:59
106 查看
++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处:
/article/1433073.html
++++++++++++++++++++++++++++++++++++++++++
1. 概述
S3C6410内存控制器是采用的PL340内存控制芯片。AMBA APB3.0接口协议规定,可以通过编程将AXI从总线接口和APB主总线接口进行桥接,实现二者总线上的数据的传输。
DRAM控制器可以通过配置兼容SDRAM类型芯片。通过向DRAM控制器中PL340写入内存芯片配置参数,内存时序,来控制内存工作。
DRAM控制器可以直接从SDRAM或DRAM接收一个控制命令。通过将操作命令写入direct_cmd寄存器,操作SDRAM进行对应操作。通过向memc_cmd寄存器写入状态模式命令,使DRAM控制器进入对应的工作模式。例如:向direct_cmd寄存器写入:Prechargeall’,‘Autorefresh’,‘NOP’,and ‘MRS’ 等命令,可以让SDRAM芯片分别执行不同操作,向memc_cmd寄存器写入一些状态命令可以让SDRAM芯片进入’Config’, ‘Ready’, and ‘Low_power’等工作模式。
DRAM控制器支持两种节能模式。当SDRAM处于不活动状态并且持续一定的时钟周期时,DRAM控制器会自动将SDRAM进入预充电节能模式或正常节能模式下以降低系统功耗。当驱动操作DRAM控制器进入对应的STOP(停止),Deep Stop(深度睡眠),Sleep Mode(睡眠)等模式时,SDRAM芯片进入自刷新的节能模式。
l 支持SDR SDRAM,Mobile SDR SDRAM,DDR SDRAM和Mobile DDR SDRAM类型芯片
l 支持两个内存芯片
l 支持64位的AMBA AXI总线类型
l 支持16位、64位内存总线
n 存储器接口1:支持16位DDR SDRAM和Mobile DDR SDRAM类型芯片
支持32位DDR SDRAM,Mobile DDR SDRAM,Mobile SDR SDRAM和SDR SDRAM类型芯片
不支持16位Mobile SDR SDRAM和SDR SDRAM类型芯片
l 地址空间:存储器接口1支持最多2Gb地址空间
l 支持正常节能模式和预充电的节能模式
l 数据传输低延迟特性
l 外部存储器总线优化
l 通过设置SFR寄存器支持选择外部存储器选型
l 通过SFR寄存器配置存储器的时序
l 支持扩展MRS指令集
l 工作电压:存储器接口1: 1.8V,2.5V
2. SDRAM类型内存接口
DRAM控制器支持最多两个相同类型的内存芯片,每个芯片最大容量256M。所有芯片共享相同引脚(时钟使能引脚和片选引脚除外),如表1-1所示给出了DRAM控制器的外部存储器引脚配置信息。
![](http://hi.csdn.net/attachment/201107/21/0_1311210285bb7x.gif)
3. SDRAM初始化
在系统上电后,必须通过软件配置SDRAM接入DRAM控制器并且初始化DRAM控制器,下面给出DDR、MOBILE DDR SDRAM的初始化流程。
a) 向mem_cmd寄存器写入0b10,使其进入NOP工作状态
b) 向mem_cmd寄存器写入0b00,使其进入Prechargeall(整片预充电)工作状态
c) 向mem_cmd寄存器写入0b11,使其进入Autorefresh(自刷新)工作状态
d) 再次向mem_cmd寄存器写入0b11,使其进入Autorefresh(自刷新)工作状态
e) 向mem_cmd寄存器写入0b10,使其进入MRS工作状态,并且地址空间内的EMRS必须置位
f) 再次向mem_cmd寄存器写入0b10,使其进入MRS工作状态,并且地址空间内的MRS必须置位
4. DRAM寄存器
1) DRAM控制器状态寄存器(P1MEMSTAT)
![](http://hi.csdn.net/attachment/201107/21/0_1311210379fCX3.gif)
实际上,读到的有用信息就是Controller Status和Memory width。
2) DRAM控制器命令寄存器(P1MEMCCMD)
![](http://hi.csdn.net/attachment/201107/21/0_13112105742dmq.gif)
最开始应该配置为0x4,是处于Configure状态。在配置完所有的DRAM之后,将该寄存器设置为0x0,处于运行状态。
3) 直接命令寄存器(P1DIRECTCMD)
![](http://hi.csdn.net/attachment/201107/21/0_13112106257sJs.gif)
用于发送命令到DRAM和访问DRAM中的MRS和EMRS寄存器。通过该寄存器初始化DRAM,先设置为NOP模式,然后设置为PrechargeAll进行充电,然后设置EMRS和MRS寄存器,一般是这么一个流程。具体的要参见你所使用的DRAM的datasheet。
4) 内存配置寄存器(P1MEMCFG)
![](http://hi.csdn.net/attachment/201107/21/0_1311210660zeBV.gif)
参考DRAM的datasheet。
5) 内存刷新时间寄存器(P1REFRESH)
![](http://hi.csdn.net/attachment/201107/21/0_131121072188su.gif)
6) CAS 延迟寄存器(P1CASLAT)
![](http://hi.csdn.net/attachment/201107/21/0_1311210758774G.gif)
参考DRAM的datasheet。
下面13个寄存器用于DRAM操作中所需时间和延时寄存器,具体可以参考PL340文档。
7) T_DQSS寄存器(P1T_DQSS)
![](http://hi.csdn.net/attachment/201107/21/0_1311210803REEE.gif)
8) T_MRD寄存器(P1T_MRD)
![](http://hi.csdn.net/attachment/201107/21/0_1311210836fh0F.gif)
9) T_RAS寄存器(P1T_RAS)
![](http://hi.csdn.net/attachment/201107/21/0_1311210871f34e.gif)
10) T_RC寄存器(P1T_RC)
![](http://hi.csdn.net/attachment/201107/21/0_1311210905uRsi.gif)
11) T_RCD寄存器(P1T_RCD)
![](http://hi.csdn.net/attachment/201107/21/0_1311210940YvR7.gif)
12) T_RFC寄存器(P1T_RFC)
![](http://hi.csdn.net/attachment/201107/21/0_1311210981vkdk.gif)
13) T_RP寄存器(P1T_RP)
![](http://hi.csdn.net/attachment/201107/21/0_131121101147nO.gif)
14) T_RRD寄存器(P1T_RRD)
![](http://hi.csdn.net/attachment/201107/21/0_1311211041VoX7.gif)
15) T_WR寄存器(P1T_WR)
![](http://hi.csdn.net/attachment/201107/21/0_1311211071gJD7.gif)
16) T_WTR寄存器(P1T_WTR)
![](http://hi.csdn.net/attachment/201107/21/0_1311211098R1Nw.gif)
17) T_XP寄存器(P1T_XP)
![](http://hi.csdn.net/attachment/201107/21/0_1311211125C8pW.gif)
18) T_XSR寄存器(P1T_XSR)
![](http://hi.csdn.net/attachment/201107/21/0_13112111552JRG.gif)
19) T_ESR寄存器(P1T_ESR)
![](http://hi.csdn.net/attachment/201107/21/0_1311211187JgKy.gif)
内存初始化代码:
(开发环境为ADS1.2)
++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处:
/article/1433073.html
++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处:
/article/1433073.html
++++++++++++++++++++++++++++++++++++++++++
1. 概述
S3C6410内存控制器是采用的PL340内存控制芯片。AMBA APB3.0接口协议规定,可以通过编程将AXI从总线接口和APB主总线接口进行桥接,实现二者总线上的数据的传输。
DRAM控制器可以通过配置兼容SDRAM类型芯片。通过向DRAM控制器中PL340写入内存芯片配置参数,内存时序,来控制内存工作。
DRAM控制器可以直接从SDRAM或DRAM接收一个控制命令。通过将操作命令写入direct_cmd寄存器,操作SDRAM进行对应操作。通过向memc_cmd寄存器写入状态模式命令,使DRAM控制器进入对应的工作模式。例如:向direct_cmd寄存器写入:Prechargeall’,‘Autorefresh’,‘NOP’,and ‘MRS’ 等命令,可以让SDRAM芯片分别执行不同操作,向memc_cmd寄存器写入一些状态命令可以让SDRAM芯片进入’Config’, ‘Ready’, and ‘Low_power’等工作模式。
DRAM控制器支持两种节能模式。当SDRAM处于不活动状态并且持续一定的时钟周期时,DRAM控制器会自动将SDRAM进入预充电节能模式或正常节能模式下以降低系统功耗。当驱动操作DRAM控制器进入对应的STOP(停止),Deep Stop(深度睡眠),Sleep Mode(睡眠)等模式时,SDRAM芯片进入自刷新的节能模式。
l 支持SDR SDRAM,Mobile SDR SDRAM,DDR SDRAM和Mobile DDR SDRAM类型芯片
l 支持两个内存芯片
l 支持64位的AMBA AXI总线类型
l 支持16位、64位内存总线
n 存储器接口1:支持16位DDR SDRAM和Mobile DDR SDRAM类型芯片
支持32位DDR SDRAM,Mobile DDR SDRAM,Mobile SDR SDRAM和SDR SDRAM类型芯片
不支持16位Mobile SDR SDRAM和SDR SDRAM类型芯片
l 地址空间:存储器接口1支持最多2Gb地址空间
l 支持正常节能模式和预充电的节能模式
l 数据传输低延迟特性
l 外部存储器总线优化
l 通过设置SFR寄存器支持选择外部存储器选型
l 通过SFR寄存器配置存储器的时序
l 支持扩展MRS指令集
l 工作电压:存储器接口1: 1.8V,2.5V
2. SDRAM类型内存接口
DRAM控制器支持最多两个相同类型的内存芯片,每个芯片最大容量256M。所有芯片共享相同引脚(时钟使能引脚和片选引脚除外),如表1-1所示给出了DRAM控制器的外部存储器引脚配置信息。
![](http://hi.csdn.net/attachment/201107/21/0_1311210285bb7x.gif)
3. SDRAM初始化
在系统上电后,必须通过软件配置SDRAM接入DRAM控制器并且初始化DRAM控制器,下面给出DDR、MOBILE DDR SDRAM的初始化流程。
a) 向mem_cmd寄存器写入0b10,使其进入NOP工作状态
b) 向mem_cmd寄存器写入0b00,使其进入Prechargeall(整片预充电)工作状态
c) 向mem_cmd寄存器写入0b11,使其进入Autorefresh(自刷新)工作状态
d) 再次向mem_cmd寄存器写入0b11,使其进入Autorefresh(自刷新)工作状态
e) 向mem_cmd寄存器写入0b10,使其进入MRS工作状态,并且地址空间内的EMRS必须置位
f) 再次向mem_cmd寄存器写入0b10,使其进入MRS工作状态,并且地址空间内的MRS必须置位
4. DRAM寄存器
1) DRAM控制器状态寄存器(P1MEMSTAT)
![](http://hi.csdn.net/attachment/201107/21/0_1311210379fCX3.gif)
P1MEMSTAT | 位 | 描述 | 初始值 |
保留 | [31:9] | - | - |
芯片数量 | [8:7] | 内存控制器支持的芯片最大数量: 01 = 2片 6410只支持2片芯片,初始化为只读的01 | 01 |
芯片类型 | [6:4] | 内存控制器支持的芯片类型: 100 = MSDR/SDR/MDDR/DDR中任一类型 | 100 |
芯片位宽 | [3:2] | 接入内存芯片的位宽: 00 = 16位 01 = 32位 10 = 保留 11 = 保留 | 01 |
控制器状态 | [1:0] | DRAM控制器状态: 00 = Config配置状态 01 = Ready就绪状态 10 = Pause暂停状态 11 = Low-Power节能状态 | 00 |
2) DRAM控制器命令寄存器(P1MEMCCMD)
![](http://hi.csdn.net/attachment/201107/21/0_13112105742dmq.gif)
P1MEMCCMD | 位 | 描述 | 初始值 |
保留 | [31:3] | 未定义,写入0 | - |
Memc_cmd | [2:0] | 设置内存控制器的工作状态: 000 = Go 001 = sleep 010 = wakeup 011 = Pause 100 = Configure 101~111 = 保留 |
3) 直接命令寄存器(P1DIRECTCMD)
![](http://hi.csdn.net/attachment/201107/21/0_13112106257sJs.gif)
P1DIRECTCMD | 位 | 描述 | 初始值 |
保留 | [31:23] | 未定义,写入0 | |
扩展内存命令 | [22] | (见下表) | |
芯片号 | [21:20] | 映射到外部存储芯片地址的位 | |
命令 | [19:18] | 具体命令(见下表) | |
Bank地址 | [17:16] | 当以MRS或EMRS命令访问时,映射到外部存储器的Bank地址位 | |
[15:14] | 未定义,写入0 | ||
地址线0~13 | [13:0] | 当以MRS或EMRS命令访问时,映射到外部存储器的内存地址位 |
4) 内存配置寄存器(P1MEMCFG)
![](http://hi.csdn.net/attachment/201107/21/0_1311210660zeBV.gif)
P1MEMCFG | 位 | 描述 | 初始值 |
保留 | [31:23] | 未定义 | |
启动芯片 | [22] | 使能下面数量的芯片开始执行刷新操作: 00 = 1芯片 01 = 2芯片 10/11 = 保留 | 00 |
QoS master位 | [20:18] | 设置QoS值: 000 = ARID[3:0] 001= ARID[4:1] 010 = ARID[5:2] 011 = ARID[6:3] 100 = ARID[7:4] 101~111 = 保留 | 000 |
内存突发访问 | [17:15] | 在内存读写时,设置突发访问数据的数量: 000 = 突发访问1个数据 001 = 突发访问2个数据 010 = 突发访问4个数据 011 = 突发访问8个数据 100 = 突发访问16个数据 101~111 = 保留 该值必须通过DIRECTORYCMD寄存器,写入到内存的模式寄存器中,并且数据必须匹配 | 010 |
Bank地址 | [17:16] | 当以MRS或EMRS命令访问时,映射到外部存储器的Bank地址位 | |
Stop_mem_clock | [14] | 当停止芯片时钟,不允许访问内存数据时,置位 | 0 |
自动节能 | [13] | 当该位置位时,芯片自动进入节能状态 | 0 |
关闭芯片延迟时间 | [12:7] | 当关闭内存芯片时,延迟的时钟个数 | 000000 |
自动预充电位 | [6] | 内存地址中自动预充电位的位置: 0 = ADDR[10] 1 = ADDR[8] | 0 |
行地址位数 | [5:3] | AXI地址线上的行地址位数: 000 = 11位 001 = 12位 010 = 13位 011 = 14位 100 = 15位 101= 16位 | 100 |
列地址位数 | [2:0] | AXI地址线上的列地址位数: 000 = 8位 001 = 9位 010 = 10位 011 = 11位 100 = 12位 | 000 |
5) 内存刷新时间寄存器(P1REFRESH)
![](http://hi.csdn.net/attachment/201107/21/0_131121072188su.gif)
P1REFRESH | 位 | 描述 | 初始值 |
[31:15] | - | ||
刷新时间 | [14:0] | 内存刷新时钟周期数 | 0xA60 |
![](http://hi.csdn.net/attachment/201107/21/0_1311210758774G.gif)
P1CASLAT | 位 | 描述 | 初始值 |
[31:4] | - | - | |
CAS延迟 | [3:1] | 列地址选通延迟内存时钟周期数 | 0xA60 |
CAS HALF周期 | [0] | 设置CAS延迟数是否为半个内存时钟周期 0 = 以[3:1]设置数为CAS延迟时钟周期 1 = 以[3:1]设置数的一半为CAS延迟时钟周期 | 0 |
下面13个寄存器用于DRAM操作中所需时间和延时寄存器,具体可以参考PL340文档。
7) T_DQSS寄存器(P1T_DQSS)
![](http://hi.csdn.net/attachment/201107/21/0_1311210803REEE.gif)
P1T_DQSS | 位 | 描述 | 初始值 |
[31:2] | - | - | |
t_DQSS | [1:0] | 写入DQS的时钟周期 | 1 |
![](http://hi.csdn.net/attachment/201107/21/0_1311210836fh0F.gif)
P1T_MRD | 位 | 描述 | 初始值 |
[31:7] | - | - | |
t_ MRD | [6:0] | 设置模式寄存器命令时间(内存时钟周期为单位) | 0x02 |
![](http://hi.csdn.net/attachment/201107/21/0_1311210871f34e.gif)
P1T_RAS | 位 | 描述 | 初始值 |
[31:4] | - | - | |
t_RAS | [3:0] | 设置行地址选通到预充电操作延迟时间(内存时钟周期为单位) | 0x7 |
![](http://hi.csdn.net/attachment/201107/21/0_1311210905uRsi.gif)
P1T_RC | 位 | 描述 | 初始值 |
[31:4] | - | - | |
t_RC | [3:0] | 设置激活内存Bank x到激活另外一个Bank x操作的延迟时间(内存时钟周期为单位) | 0xB |
![](http://hi.csdn.net/attachment/201107/21/0_1311210940YvR7.gif)
P1T_RCD | 位 | 描述 | 初始值 |
[31:6] | - | - | |
Scheduled_RCD | [5:3] | 设置t_RCD-3 | 011 |
t_RCD | [2:0] | 设置RAS到CAS操作的最小延迟时间(内存时钟周期为单位) | 101 |
![](http://hi.csdn.net/attachment/201107/21/0_1311210981vkdk.gif)
P1T_RFC | 位 | 描述 | 初始值 |
[31:10] | - | - | |
Scheduled_RFC | [9:5] | 设置t_RFC-3 | 0x10 |
t_RFC | [4:0] | 设置自动刷新命令操作延迟时间(内存时钟周期为单位) | 0x12 |
![](http://hi.csdn.net/attachment/201107/21/0_131121101147nO.gif)
P1T_RP | 位 | 描述 | 初始值 |
[31:6] | - | - | |
Scheduled_RP | [5:3] | 设置t_RP-3 | 011 |
t_RFC | [2:0] | 设置预充电到RAS操作的延迟时间(内存时钟周期为单位) | 101 |
![](http://hi.csdn.net/attachment/201107/21/0_1311211041VoX7.gif)
P1T_ RRD | 位 | 描述 | 初始值 |
[31:4] | - | - | |
t_RRD | [3:0] | 设置激活内存Bank x到激活内存Bank y操作的延迟时间(内存时钟周期为单位) | 0x2 |
![](http://hi.csdn.net/attachment/201107/21/0_1311211071gJD7.gif)
P1T_ WR | 位 | 描述 | 初始值 |
[31:3] | - | - | |
t_WR | [2:0] | 设置写入数据到预充电操作的延迟时间(内存时钟周期为单位) | 011 |
![](http://hi.csdn.net/attachment/201107/21/0_1311211098R1Nw.gif)
P1T_ WTR | 位 | 描述 | 初始值 |
[31:3] | - | - | |
t_WTR | [2:0] | 设置写入数据到读取数据操作的延迟时间(内存时钟周期为单位) | 011 |
![](http://hi.csdn.net/attachment/201107/21/0_1311211125C8pW.gif)
P1T_ XP | 位 | 描述 | 初始值 |
[31:8] | - | - | |
t_XP | [7:0] | 设置退出关闭电源命令的延迟时间(内存时钟周期为单位) | 0x1 |
![](http://hi.csdn.net/attachment/201107/21/0_13112111552JRG.gif)
P1T_ XSR | 位 | 描述 | 初始值 |
[31:8] | - | - | |
t_XSR | [7:0] | 设置退出自刷新命令的延迟时间(内存时钟周期为单位) | 0xA |
![](http://hi.csdn.net/attachment/201107/21/0_1311211187JgKy.gif)
P1T_ ESR | 位 | 描述 | 初始值 |
[31:8] | - | - | |
t_ESR | [7:0] | 设置自刷新命令的延迟时间(内存时钟周期为单位) | 0x14 |
(开发环境为ADS1.2)
MEM_SYS_CFG EQU 0x7e00f120 DMC1_BASE EQU 0x7e001000 INDEX_DMC_MEMC_STATUS EQU 0x0 INDEX_DMC_MEMC_CMD EQU 0x4 INDEX_DMC_DIRECT_CMD EQU 0x08 INDEX_DMC_MEMORY_CFG EQU 0x0c INDEX_DMC_REFRESH_PRD EQU 0x10 INDEX_DMC_CAS_LATENCY EQU 0x14 INDEX_DMC_T_DQSS EQU 0x18 INDEX_DMC_T_MRD EQU 0x1c INDEX_DMC_T_RAS EQU 0x20 INDEX_DMC_T_RC EQU 0x24 INDEX_DMC_T_RCD EQU 0x28 INDEX_DMC_T_RFC EQU 0x2c INDEX_DMC_T_RP EQU 0x30 INDEX_DMC_T_RRD EQU 0x34 INDEX_DMC_T_WR EQU 0x38 INDEX_DMC_T_WTR EQU 0x3c INDEX_DMC_T_XP EQU 0x40 INDEX_DMC_T_XSR EQU 0x44 INDEX_DMC_T_ESR EQU 0x48 INDEX_DMC_MEMORY_CFG2 EQU 0x4C INDEX_DMC_CHIP_0_CFG EQU 0x200 INDEX_DMC_CHIP_1_CFG EQU 0x204 INDEX_DMC_CHIP_2_CFG EQU 0x208 INDEX_DMC_CHIP_3_CFG EQU 0x20C INDEX_DMC_USER_STATUS EQU 0x300 INDEX_DMC_USER_CONFIG EQU 0x304 AREA LOW_INIT, CODE, READONLY ENTRY EXPORT mem_init mem_init ldr r0, =MEM_SYS_CFG ;Memory sussystem address 0x7e00f120 mov r1, #0xd ;Xm0CSn2 = NFCON CS0 设置NAND Flash为存储器 str r1, [r0] ldr r0, =DMC1_BASE ;DMC1 base address 0x7e001000 ; memc_cmd : 010 wake up ; 唤醒内存 ldr r1, =0x04 str r1, [r0, #INDEX_DMC_MEMC_CMD] ; Refresh period = ((Startup_HCLK / 1000 * DDR_tREFRESH) - 1) / 1000000 -> DDR_tREFRESH 7800 ns ; HCLK = 133MHz ; DDR内存规格规定,电容的电荷存储上限时间为64ms,而刷新操作每次是针对 ; 一行进行的,即每一行的刷新时间为64ms,而内存芯片中一定数量的行 ; 以L-Bank表示(见内存工作原理与物理特性),每个L-Bank有8192行(见内存硬件手册) ; 因此对L-Bank的刷新操作应该在64ms /8192 = 7813us时间内进行一次 ; 而MDDR工作在133MHz时,其一个时钟周期为1/133M,那么一次L-Bank刷新 ; 时间需要7.8us/1/133M个时钟周期,即有下面的公式: ; Refresh_Count = tREFRESH * HCLK(MHz)/1000 ; tREFRESH = 7813 HCLK = 133 Refresh_Count = 1039 ldr r1, = 1039 ; DMC_DDR_REFRESH_PRD str r1, [r0, #INDEX_DMC_REFRESH_PRD] ; CAS_Latency = DDR_CASL<<1 -> DDR_CASL 3 ldr r1, = 6 ; DMC_DDR_CAS_LATENCY str r1, [r0, #INDEX_DMC_CAS_LATENCY] ; t_DQSS (clock cycles) ldr r1, = 1 ; DMC_DDR_t_DQSS str r1, [r0, #INDEX_DMC_T_DQSS] ; T_MRD (clock cycles) ldr r1, = 2 ; DMC_DDR_t_MRD str r1, [r0, #INDEX_DMC_T_MRD] ; T_RAS (clock cycles) ldr r1, = 7 ; DMC_DDR_t_RAS str r1, [r0, #INDEX_DMC_T_RAS] ; T_RC Active Bank x to Active Bank x delay(clock cycles) ldr r1, = 10 ; DMC_DDR_t_RC str r1, [r0, #INDEX_DMC_T_RC] ; T_RCD RAS to CAD delay(clock cycles) ldr r1, = 4 ; DMC_DDR_t_RCD ldr r2, = 8 ; DMC_DDR_schedule_RCD orr r1, r1, r2 str r1, [r0, #INDEX_DMC_T_RCD] ; T_RFC AutoRefresh(clock cycles) ldr r1, = 11 ; DMC_DDR_t_RFC ldr r2, = 256 ; DMC_DDR_schedule_RFC orr r1, r1, r2 str r1, [r0, #INDEX_DMC_T_RFC] ; T_RP Precharge to RAS delay(clock cycles) ldr r1, = 4 ; DMC_DDR_t_RP ldr r2, = 8 ; DMC_DDR_schedule_RP orr r1, r1, r2 str r1, [r0, #INDEX_DMC_T_RP] ; T_RRD Active Bank x to Active Bank y delay(clock cycles) ldr r1, = 3 ; DMC_DDR_t_RRD str r1, [r0, #INDEX_DMC_T_RRD] ; T_WR Write to precharge delay(clock cycles) ldr r1, =3 ; DMC_DDR_t_WR str r1, [r0, #INDEX_DMC_T_WR] ; T_WTR Write to Read delay(clock cycles) ldr r1, = 2 ;DMC_DDR_t_WTR str r1, [r0, #INDEX_DMC_T_WTR] ; T_XP Exit Power down(clock cycles) ldr r1, = 2 ; DMC_DDR_t_XP str r1, [r0, #INDEX_DMC_T_XP] ; T_XSR Exit self refresh(clock cycles) ldr r1, = 17 ; DMC_DDR_t_XSR str r1, [r0, #INDEX_DMC_T_XSR] ; T_ESR SelfRefresh(clock cycles) ldr r1, = 17 ; DMC_DDR_t_ESR str r1, [r0, #INDEX_DMC_T_ESR] ; Memory Configuration Register ldr r1, = 0x40010012 ; DMC1_MEM_CFG str r1, [r0, #INDEX_DMC_MEMORY_CFG] ldr r1, = 0xb41 ; DMC1_MEM_CFG2 str r1, [r0, #INDEX_DMC_MEMORY_CFG2] ldr r1, = 0x150f8 ; DMC1_CHIP0_CFG str r1, [r0, #INDEX_DMC_CHIP_0_CFG] ldr r1, = 0 ; DMC_DDR_32_CFG str r1, [r0, #INDEX_DMC_USER_CONFIG] ; The follows is according to the Datasheet initialization sequence ;DMC0 DDR Chip 0 configuration direct command reg ldr r1, = 0x0c0000 ; DMC_NOP0 str r1, [r0, #INDEX_DMC_DIRECT_CMD] ;Precharge All ldr r1, = 0 ; DMC_PA0 str r1, [r0, #INDEX_DMC_DIRECT_CMD] ;Auto Refresh 2 time ldr r1, = 0x40000 ; DMC_AR0 str r1, [r0, #INDEX_DMC_DIRECT_CMD] str r1, [r0, #INDEX_DMC_DIRECT_CMD] ;MRS ldr r1, = 0xa0000 ; DMC_mDDR_EMR0 str r1, [r0, #INDEX_DMC_DIRECT_CMD] ;Mode Reg ldr r1, = 0x80032 ; DMC_mDDR_MR0 str r1, [r0, #INDEX_DMC_DIRECT_CMD] ;Enable DMC1 mov r1, #0x0 str r1, [r0, #INDEX_DMC_MEMC_CMD] check_dmc1_ready ldr r1, [r0, #INDEX_DMC_MEMC_STATUS] mov r2, #0x3 and r1, r1, r2 cmp r1, #0x1 bne check_dmc1_ready nop mov pc, lr END
++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处:
/article/1433073.html
++++++++++++++++++++++++++++++++++++++++++
相关文章推荐
- S3C6410,Tiny6410,Mini6410,MoblieDDR内存驱动
- S3C6410,Tiny6410,Mini6410,MoblieDDR内存驱动
- S3C6410,Tiny6410,Mini6410,MoblieDDR内存驱动
- S3C6410,Tiny6410,Mini6410,MoblieDDR内存驱动
- 【开发板资讯】友善推出mini6410 之后不久再推出tiny6410(mini6410和tiny6410有何不同?市场定位如何?)
- 教你SD卡三分钟快速刷机Tiny6410/Mini6410,如何烧写Tiny6410 Mini6410系统
- tiny6410(mini6410)移植RT5370方案USBWIFI网卡
- 修改u-boot - mini6410 - 20101106.tar.gz使之支持tiny6410从SD卡启动
- mini6410 tiny6410的SD卡无法识别的解决办法
- 三星S3C6410(ARM1176)平台Android资源获取与编译(RedHat AS5)
- 基于S3C6410的kT0801A驱动
- 将S3C6410频率提升至666
- Android2.0 Eclair在S3C6410上运行成功
- arm11 s3c6410 开发板比较 哪个公司的arm11开发板好? arm11开发板推荐
- UT-S3C6410完美实现了三星S3c6410处理器性能
- S3C6410的启动模式解析
- AC97之DMA(s3c6410)
- VS2005 MINI6410 PWM 测试程序
- mini6410 NFS文件系统及内核
- 如何实现在ARM开发板对Postgresql服务器的远程访问,有C程序,(mini6410,mini2440,tq2440)