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

📄 lib_sdram.c

📁 ARM AT9260的一段初始代码,主要是用来测试SDRAM
💻 C
字号:
 //  ----------------------------------------------------------------------------
 //          ATMEL Microcontroller Software Support  -  ROUSSET  -
 //  ----------------------------------------------------------------------------
 //  DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 //  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 //  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 //  DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 //  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 //  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 //  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 //  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 //  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 //  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //  ----------------------------------------------------------------------------
//*----------------------------------------------------------------------------
//* File Name           : lib_sdram.c
//* Object              : 
//*
//* 1.0 06/25/02 ED     : SDRAM Controller test
//* 1.1 15/05/2003		: address range added 
//*----------------------------------------------------------------------------


/*----------------*/
/* Standard types */
/*----------------*/
typedef unsigned int        u_int   ;
typedef unsigned short      u_short ;
typedef unsigned char       u_char  ;


#define		ARM_CODE		0
#define		THUMB_CODE		1

#define SDRAM_BASE 			 0x0
#define SDRAM_BASE_ADDR      0x20000000
#define SDRAM_SIZE           (64*1024*1024)						// 64Mbytes
#define SDRAMCPY_START 		 (SDRAM_BASE_ADDR + 0x00FC4000) 	// choosed to activate 
#define SDRAMCPY_STOP 		 (SDRAM_BASE_ADDR + 0x01055870) 	// all address bits

#define BANK_SIZE	0x1000000
#define PAGE_SIZE	512
#define NB_ROWS		13

char message[80];

extern u_int ExecuteTest (u_int *address, u_int arm);
//extern printf();
extern void AT91F_DBGU_Printk(	char *buffer);


//*----------------------------------------------------------------------------
//* Function Name       : AT91F_SDRAM_Test
//* Object              : 
//*----------------------------------------------------------------------------
int AT91F_SDRAM_Pattern_Test (void)
{
	int bank, row, column;
	unsigned int *ptr;
	
	// Write SDRAM
	for (bank=0; bank<4; bank++)
	{
		for (row=0; row<13; row++)
		{
			// Compute address
			ptr = (unsigned int *)(SDRAM_BASE_ADDR + bank*BANK_SIZE + (1 << (11 + row)));
		
			// Write page
			for (column = 0; column < PAGE_SIZE/4; column++)
			{
				*ptr++ = (1 << (column % 32));
			}
		}
	}

	// Verify SDRAM
	for (bank=0; bank<4; bank++)
	{
		for (row=0; row<13; row++)
		{
			// Compute address
			ptr = (unsigned int *)(SDRAM_BASE_ADDR + bank*BANK_SIZE + (1 << (11 + row)));
					
			// Verify page
			for (column = 0; column < PAGE_SIZE/4; column++)
			{
				if (*ptr != (1 << (column % 32)))
					AT91F_DBGU_Printk("-E- SDRAM ERROR\n\r");
				
				ptr++;
			}			
		}
	}
	
	return 0;
}

//*----------------------------------------------------------------------------
//* Function Name       : AT91F_SDRAM_Test
//* Object              : 
//*----------------------------------------------------------------------------
int AT91F_SDRAM_Test (void)
{
    u_int		*pmemcr;
    u_int 		code_length;
	u_int 		loop_count;

	pmemcr = (u_int *)SDRAMCPY_START;
	loop_count = 0;
	
	do
	{
		// Execute Thumb code
		code_length = ExecuteTest(pmemcr, THUMB_CODE);
		// Execute ARM code
		code_length = ExecuteTest(pmemcr, ARM_CODE);
		// Updating loop count
		loop_count ++;
		// Updating code load address
		pmemcr = (u_int *) ( (u_int)pmemcr + (u_int)code_length );
	}
	while ( (u_int)pmemcr < (u_int)SDRAMCPY_STOP );

	// Add SDRAM Pattern Test
	AT91F_SDRAM_Pattern_Test();
    //AT91F_DBGU_Printk("SDRAM OK\r\n");
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -