www.pudn.com > zbtsram.rar > ZBTSRAM.C


/***************************************************************************** 
	FILENAME:	SDRAM.C 
	DESIGNER:	戴展波 
	DATE:		2004/09/25 
******************************************************************************/ 
 
#include  
#include  
#include  
#include  
#include  
#include  
 
static EMIFA_Config MyEmifaConfig =  
{ 
	EMIFA_GBLCTL_RMK 
	( 
		EMIFA_GBLCTL_EK2RATE_FULLCLK,	//1 X EMIF input clock 
		EMIFA_GBLCTL_EK2HZ_CLK,		//eclkout2 continue output during hold 
		EMIFA_GBLCTL_EK2EN_ENABLE,	//eclkout2 enable output 
		EMIFA_GBLCTL_BRMODE_MRSTATUS,	//bus request is memory access or refresh pending/in progress 
		EMIFA_GBLCTL_NOHOLD_DISABLE, 
		EMIFA_GBLCTL_EK1HZ_CLK,		//eclkout1 continue output during hold 
		EMIFA_GBLCTL_EK1EN_ENABLE,	//eclkout1 enable output 
		EMIFA_GBLCTL_CLK4EN_ENABLE,	//clkout4 output enable 
		EMIFA_GBLCTL_CLK6EN_ENABLE	//clkout6 output enable 
	), 
	0xffffffd3, 
	0xffffffe3,		//64bit zbtsram 
//	0xffffff43,		//32bit zbtsram 
//	0xffffffb3,		//16bit zbtsram 
//	0xffffffa3,		//8bit zbtsram 
	0x22a28a22, 
	0x22a28a22, 
	EMIFA_SDCTL_DEFAULT, 
	EMIFA_SDTIM_DEFAULT, 
	EMIFA_SDEXT_DEFAULT, 
	0x00000002, 
	EMIFA_CESEC_RMK 
	( 
		EMIFA_CESEC_SNCCLK_ECLKOUT1, 
		EMIFA_CESEC_RENEN_ADS, 
		EMIFA_CESEC_CEEXT_INACTIVE, 
		EMIFA_CESEC_SYNCWL_2CYCLE, 
		EMIFA_CESEC_SYNCRL_2CYCLE 
	), 
	0x00000002, 
	0x00000002 
}; 
 
static EMIFB_Config MyEmifbConfig =  
{ 
	EMIFB_GBLCTL_RMK 
	( 
		EMIFB_GBLCTL_EK2RATE_FULLCLK,	//1 X EMIF input clock 
		EMIFB_GBLCTL_EK2HZ_CLK,		//eclkout2 continue output during hold 
		EMIFB_GBLCTL_EK2EN_ENABLE,	//eclkout2 enable output 
		EMIFB_GBLCTL_BRMODE_MRSTATUS,	//bus request is memory access or refresh pending/in progress 
		EMIFB_GBLCTL_NOHOLD_ENABLE, 
		EMIFB_GBLCTL_EK1HZ_CLK,		//eclkout1 continue output during hold 
		EMIFB_GBLCTL_EK1EN_ENABLE	//eclkout1 enable output 
	), 
	0x1120c301, 
	0x22a28a22, 
	0x22a28a22, 
	0x22a28a22, 
	EMIFB_SDCTL_DEFAULT, 
	EMIFB_SDTIM_DEFAULT, 
	EMIFB_SDEXT_DEFAULT, 
	0x00000002, 
	0x00000002, 
	0x00000002, 
	0x00000002 
}; 
 
volatile unsigned char* ZBTSRAM_CE3 = (volatile unsigned char *) 0x60000020; 
 
#pragma DATA_SECTION(zbtsram_data,".off_ram"); 
unsigned int zbtsram_data[0x10000]; 
 
extern far void vectors(); 
 
void main() 
{ 
	int i; 
	Uint32 good_flag; 
	good_flag = 0; 
	//初始化CSL 
	CSL_init(); 
	//配置EMIFB 
	EMIFB_config(&MyEmifbConfig); 
	//打开ZBTSRAM 
	*ZBTSRAM_CE3 = 0; 
	//配置EMIFA 
	EMIFA_config(&MyEmifaConfig); 
	//设置中断矢量表 
	IRQ_setVecs(vectors); 
	//NMI中断使能 
    	IRQ_nmiEnable(); 
    	//全局中断使能 
    	IRQ_globalEnable(); 
   	for(i = 0; i < 0x80000; i++) 
   	{ 
   		zbtsram_data[i] = 0; 
   	} 
	for(i = 0; i < 0x80000; i++) 
	{ 
		zbtsram_data[i] = 0x12345678+i; 
	} 
	for(i = 0; i < 0x80000; i++) 
	{ 
		if(zbtsram_data[i] != 0x12345678+i) 
		{ 
			good_flag = 0; 
			break; 
		} 
		good_flag = 1; 
	} 
	if(good_flag == 1) 
	{ 
		printf("ZBTSRAM TEST IS OK!"); 
	} 
	else 
	{ 
		printf("ZBTSRAM TEST IS FAILED!"); 
	} 
}