⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdram.c

📁 对于DSP C6000系列视频处理开发中,SDRAM于对视频编码数据的存储,此代码为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 + -