主题 : TinyADK(1312)内存初始化 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 104644
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2014-05-30
最后登录: 2015-01-11
楼主  发表于: 2014-06-07 22:23

 TinyADK(1312)内存初始化

最新的TinyADK(1312),内存芯片为K4X2G32PD,内存初始化弄完了,代码如下:
#define P1MEMSTAT (*(volatile unsigned int *)0x7E001000)
#define P1MEMCCMD (*(volatile unsigned int *)0x7E001004)
#define P1DIRECTCMD (*(volatile unsigned int *)0x7E001008)
#define P1MEMCFG (*(volatile unsigned int *)0x7E00100C)
#define P1REFRESH (*(volatile unsigned int *)0x7E001010)
#define P1CASLAT (*(volatile unsigned int *)0x7E001014)
#define P1T_DQSS (*(volatile unsigned int *)0x7E001018)
#define P1T_MRD (*(volatile unsigned int *)0x7E00101C)
#define P1T_RAS (*(volatile unsigned int *)0x7E001020)
#define P1T_RC (*(volatile unsigned int *)0x7E001024)
#define P1T_RCD (*(volatile unsigned int *)0x7E001028)
#define P1T_RFC (*(volatile unsigned int *)0x7E00102C)
#define P1T_RP (*(volatile unsigned int *)0x7E001030)
#define P1T_RRD (*(volatile unsigned int *)0x7E001034)
#define P1T_WR (*(volatile unsigned int *)0x7E001038)
#define P1T_WTR (*(volatile unsigned int *)0x7E00103C)
#define P1T_XP (*(volatile unsigned int *)0x7E001040)
#define P1T_XSR (*(volatile unsigned int *)0x7E001044)
#define P1T_ESR (*(volatile unsigned int *)0x7E001048)
#define P1MEMCFG2 (*(volatile unsigned int *)0x7E00104C)
#define P1_chip_0_cfg (*(volatile unsigned int *)0x7E001200)
#define nsToMT(ns) (ns*0.2+1)
/*ns*10^-9=T/200*10^6<==>T=ns*0.2*/
//#define nsToAT(ns) (ns*0.8+1)/*ns*10^-9=T/800*10^6<==>ns*0.8*/
/*ACLK=800MHZ HCLK=200MHZ*/
/*参数参考http://hard.zol.com.cn/2004/0330/90618.shtml*/
void ddr_init()
{
    int A_time;
    int M_time;
    P1MEMCCMD=0x4;/*使得存储器进入配置状态*/
    /*配置时间参数*/
    P1REFRESH=nsToMT(7800);/*刷新周期为7.8us*/
    P1CASLAT=(3<<1);/*列地址选通延迟为2or3tCK*/
    P1T_DQSS=1;/*数据选通延迟为0.75tCK~1.25tCK*/
    P1T_MRD=0x2;/*读写转换时间2tCK*/
    P1T_RAS=nsToMT(40);/*行活动时间40ns*/
    P1T_RC=nsToMT(55);/*行地址循环时间*/
    M_time=nsToMT(15);
    A_time=M_time-3;
    P1T_RCD=(A_time<<3)|M_time;/*从行有效到读写命令的发出之间的间隔*/
    M_time=nsToMT(120);
    A_time=(M_time-3);
    P1T_RFC=(A_time<<5)|M_time;/*自动刷新周期*/
    M_time=nsToMT(15);
    A_time=(M_time-3);
    P1T_RP=(A_time<<3)|M_time;/*设置行延迟时间*/
    P1T_RRD=nsToMT(10);/*设置库之间跳转时间*/
    P1T_WR=nsToMT(12);/*设置写延迟时间*/
    P1T_WTR=2;/*从写转到读所要的时间,这里只找不到参数,只能用默认值*/
    P1T_XP=2;/*Power down exit time*/
    P1T_XSR=nsToMT(120);/* 退出时自我刷新时间*/
    P1T_ESR=nsToMT(120);/*退出时刷新命令时间*/
    /*存储器芯片配置*/
    P1MEMCFG=0x1001A;
    P1MEMCFG2=0xb4d;/*1011 0100 1101*/
    P1_chip_0_cfg&=~(1<<16);/*设置为行,页,列结构*/
    /*存储器初始化序列*/
    P1DIRECTCMD=0xC0000;/*NOP*/
    P1DIRECTCMD=0x00000;/*Prechargeall*/
    P1DIRECTCMD=0x40000;/*自动刷新*/
    P1DIRECTCMD=0x40000;/*自动刷新*/
    P1DIRECTCMD=0xA0000;/*EMSR*/
    P1DIRECTCMD=0x80034;/*MSR*/
    /*准备好*/
    P1MEMCCMD=0x00;
    while((P1MEMSTAT&0x3)!=1);

}
将代码拷贝进去运行没有成功,有成功过的?我的QQ是2456642630