?? lib_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 + -