📄 sdram.c
字号:
#define CHIP_DM642
#include <csl.h>
#include <csl_emif.h>
#include "Type.h"
#include "sdram_.h"
#define CECTL_WRSETUP 0X1//0x00~0x0F
#define CECTL_WRSTRB 0X2//0x00~0x3F
#define CECTL_WRHLD 0X1//0x00~0x03
#define CECTL_RDSETUP 0X1//0x00~0x0F
#define CECTL_TA 0X1//0x00~0x03
#define CECTL_RDSTRB 0X1//0x00~0x3F
#define CECTL_MTYPE 0X0D//0x00~0x0F
#define CECTL_WRHLDMSB 0X0//0x00~0x01
#define CECTL_RDHLD 0X1//0x00~0x07
//SDCTL
#define SDBSZ_BITADDR 30
#define SDRSZ_BITADDR 28
#define SDCSZ_BITADDR 26
#define SDRFEN_BITADDR 25
#define SDINIT_BITADDR 24
#define SDTRCD_BITADDR 20
#define SDTRP_BITADDR 16
#define SDTRC_BITADDR 12
#define SDBSZ_VAL 1 //0-2 1-4
#define SDRSZ_VAL 2 //0-11 1-12 2-13
#define SDCSZ_VAL 0 //0-9 1-8 2-10 ****
#define SDRFEN_VAL 1
#define SDINIT_VAL 1
#define SDTRCD_VAL 2
#define SDTRP_VAL 2
#define SDTRC_VAL 6
void SdramInit()
{
//register u32 i,j,s;
register u32 s;
//GBLCTL = 0 ;]
GBLCTL = 0X9277C ;
SDCTL = 0 ;
CE0CTL = 0 ;
Wait(100);
//GBLCTL = 0x00028;
Wait(100);
SDTIM=0X23DC3DC;
Wait(0X100);
CE0CTL=0X20F202D2;
Wait(0X100);
CE0SEC=0X00000035;
Wait(0X100);
//CE1SEC =
//i = (SDBSZ_VAL << SDBSZ_BITADDR) ;
//i |= (SDRSZ_VAL << SDRSZ_BITADDR );
//i |= (SDCSZ_VAL <<SDCSZ_BITADDR );
//i |= (SDRFEN_VAL <<SDRFEN_BITADDR );
//i |= (SDINIT_VAL << SDINIT_BITADDR);
//i |= (SDTRCD_VAL << SDTRCD_BITADDR);
//i |= (SDTRP_VAL <<SDTRP_BITADDR );
//i |= (SDTRC_VAL <<SDTRC_BITADDR );
//i |= 3;
//SDCTL=i;
// CE0CTL =
// (CECTL_WRSETUP <<27 )|
// (CECTL_WRSTRB <<21 )|
// (CECTL_WRHLD <<19 )|
// (CECTL_RDSETUP <<15 )|
// (CECTL_TA <<13 )|
// (CECTL_RDSTRB <<7 )|
// (CECTL_MTYPE <<3 )|
// (CECTL_WRHLDMSB <<2 )|
// (CECTL_RDHLD )
// ;
s = (SDBSZ_VAL << SDBSZ_BITADDR ) |
(SDRSZ_VAL << SDRSZ_BITADDR ) |
(SDCSZ_VAL << SDCSZ_BITADDR ) |
(SDRFEN_VAL << SDRFEN_BITADDR ) |
(SDINIT_VAL << SDINIT_BITADDR ) |
(SDTRCD_VAL << SDTRCD_BITADDR ) |
(SDTRP_VAL << SDTRP_BITADDR ) |
(SDTRC_VAL << SDTRC_BITADDR ) |
3;
SDCTL = s;
Wait(0X100);
//
//while(1)
// {
// i= SDCTL & INITMASK;
// j++;
// if(i==0 || j>0X10000)break;
// }
Refresh() ;
//MemoryBlockCheck()
#ifdef MEMORY_DEBUG
MemTest();
#endif
}
/*
void MemoryBlockCheck()
{
register int i=0,j=0;
register int errorCount;
register u32 tempint;
register u32 *pint=0;
#define TEST_EXTRA 0X80000000//0X00038000//
U32 *pu32=(U32 *)TEST_EXTRA;
register U16 *pu16=(U16 *)TEST_EXTRA;
register U8 *pu8 =(U8 *)TEST_EXTRA;
//BYTE buf[0X100];
u32 ramBuf[0X100];
for(i=MEMORYBLOCKNUMMAX-1; i>=0; i--)
{
pint=(u32 *)(MEMORYBASEADDRESS+i*BLOCKSIZE);
for(j=0; j<0X10000/sizeof(u32); j+=0X100)
{
tempint = (i<<16) | j;
pint[j]=tempint;
}
// for(j=0; j<0X100; j++) ramBuf[j]=pint[j*4];
}
for(i=0; i<MEMORYBLOCKNUMMAX; i++)
// for(i=MEMORYBLOCKNUMMAX-1; i>=0; i--)
{
pint=(u32 *)(MEMORYBASEADDRESS+i*BLOCKSIZE);
errorCount=0;
for(j=0; j<0X10000/sizeof(u32); j+=0X100)
{
tempint = (i<<16) | j;
if(pint[j]!=tempint)
{
errorCount++;
if(errorCount>ERRCOUNTMAX)break;
}
}
if(errorCount>ERRCOUNTMAX)
{
MemoryBlock[i]=0;
}
else
{
MemoryBlockNum=i;
MemoryBlock[i]=errorCount+1;
}
}
i=0;
for(i=0; i<0XF0; i++)pu32[i]=((i+3)<<24 | (i+2)<<16 | (i+1)<<8 |i);
// pu8++;
//for(i=0; i<0X100; i++)pu8[i]=i;
for(i=0; i<0X100; i++)ramBuf[i]=pu32[i];
for(i=0; i<0X100; i++)ramBuf[i]=pu16[i];
for(i=0; i<0X100; i++)ramBuf[i]=pu8[i];
i=0;
}
*/
void Refresh()
{ int i=0;
SDCTL &=~( SDRFEN_VAL <<SDRFEN_BITADDR );
SDCTL |= 0X01;
for(i=0; i<16; i++);
SDCTL &= 0XFFFFFFFFFE;
SDCTL |= ( SDRFEN_VAL <<SDRFEN_BITADDR );;
}
#ifdef MEMORY_DEBUG
void MemTest()
{
int i=0,j;
unsigned char *pMem8=(unsigned char *)(MEMORYBASEADDRESS);
unsigned char *pMem82=(unsigned char *)(MEMORYBASEADDRESS);
unsigned short *pMem16=(unsigned short *)(MEMORYBASEADDRESS);
unsigned int *pMem=(unsigned int *)(MEMORYBASEADDRESS);
unsigned long *pMem64=(unsigned long *)(MEMORYBASEADDRESS);
u32 ramBuf[0X100];
// 64K : 0X0000 0000 0X0001 0000
// 1M : 0X0000 0000 0X0010 0000
// 16M : 0X0000 0000 0X0100 0000
// 32M : 0X0000 0000 0X0200 0000
// 64M : 0X0000 0000 0X0400 0000
//128M : 0X0000 0000 0X0800 0000
//256M : 0X0000 0000 0X1000 0000
/*
for(i=0; i<0X1000; i++)
{
//int j=i;
//j+=j;
pMem[i]=i;
}
//for(i=0; i<MemoryBlockNum; i+=0X100)
for(i=0; i<0X10000; i++)
{
pMem8[i]=i;
pMem82[i]=i;
}
for(i=0; i<0X10; i++)
{
ramBuf[i]=pMem[i];//=0X10000-i;
}
for(i=0; i<0X10000; i++)
{
pMem16[i]=i;
}
pMem=(unsigned int *)(0X80000000);
for(i=0; i<0X10000; i++)
{
pMem[i]=i;
}
pMem=(unsigned int *)(0X80000000);
for(i=0; i<0X10000; i++)
{
pMem64[i]=i;
} for(i=0; i<0X10000; i++)
{
pMem[i]=0XAAAAAAAA;
}
for(i=0; i<0X10000; i++)
{
pMem[i]=i;
}
for(i=0; i<0X10; i++)
{
ramBuf[i]=pMem[i];//=0X10000-i;
}
for(i=0; i<0X10000; i++)
{
pMem[i]=0XAAAAAAAA;
}
for(i=0; i<0X10000; i++)
{
pMem[i]=0X55555555;
}
pMem=(unsigned int *)(0X80100000);
for(i=0; i<0X1000; i++)
{
pMem[i]=0X10000-i;
}
for(i=0; i<0X100; i++)
{
ramBuf[i]=pMem[i];//=0X10000-i;
}
pMem=(unsigned int *)(0X80000000);
for(i=0; i<0X100; i++)
{
ramBuf[i]=pMem[i];//=0X10000-i;
}
pMem8=(unsigned char *)(0X80000000);
for(i=0; i<0X10000; i++)
{
pMem8[i]=i*2;
}
pMem8=(unsigned char *)(0X80000000);
for(i=0; i<0X100; i++)
{
ramBuf[i]=pMem8[i];//=0X10000-i;
}
for(i=0; i<0X60000/4; i++)
{
if(pMem[i]!=i)break;
}
//*/
i=0;
for(i=0X80100000; i<0X88000000 ; i+=0X10000 )
{
pMem= (u32 *)i ;
for(j=0; j<0X100; j++)
pMem[j]= i+j;
}
for(i=0X80100000; i<0X88000000 ; i+=0X10000 )
{
pMem= (u32 *)i ;
for(j=0; j<0X100; j++)
if( pMem[j]!= i+j)
{
i=0; j=0;
break;
}
}
pMem16=(u16 *)0X1000 ;
j = 0;
for(i=0X80100000; i<0X90000000 ; i+=0X10000 )
{
pMem= (u32 *)i ;
pMem16[j++]=*pMem ;
}
pMem16[j]=0XFFFF ;
}
#endif
//*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -