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

📄 memtest.c

📁 2410TK测试代码
💻 C
字号:
//===============================================================================
// File Name      : memtest.c
// Function       : S3C2410 Memory Test Function
// The originator : 04/28/2004, Shin, On Pil (SOP) at Mobile Design P/J of SoC
// Upgrade        : Shin, On Pil (SOP)
// Upgrade Date   : 05/14/2004
// Version        : 0.0
// History
//     04/28/2004 : SOP, Programming Start
//================================================================================

#include <string.h>
#include "def.h"
#include "option.h"
#include "2410lib.h"
#include "usbfifo.h"

#define START_ADDRESS   (_NONCACHE_STARTADDRESS)
//#define START_ADDRESS   (_NONCACHE_STARTADDRESS+0x2f00000)   
#define END_ADDRESS     (_NONCACHE_STARTADDRESS+0x2feff00)

#define PATTERN00       0x00000000
#define PATTERN01       0x55555555
#define PATTERN11       0xffffffff
#define PATTERN10       0xaaaaaaaa

#define PATTERNADDR     0               //1: Address = Pattern ,  0: Pattern
#define PATTERN_INVERT  1               //1: Pattern Invert    ,  0: Pattern Non Invert 

void mem_write_read (int address, int end_addr, int pattern);

//================================================================================
void Test_MEM(void)
{
    int i;
    
    Uart_Printf("\n[ Memory Write/Read/Compare Test ]\n");
    
//    Uart_Printf("Start Address= 0x%08x,  End Address= 0x%08x, Size= %d Bytes\n",
//               START_ADDRESS,END_ADDRESS,(END_ADDRESS-START_ADDRESS));    

    if (!PATTERNADDR)
    {
        
        mem_write_read (START_ADDRESS, END_ADDRESS, 0xffff5555);   
        mem_write_read (START_ADDRESS, END_ADDRESS, 0xaaaaffff);
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x5555ffff);   
        mem_write_read (START_ADDRESS, END_ADDRESS, 0xffffaaaa);
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x0000ffff); 
        mem_write_read (START_ADDRESS, END_ADDRESS, 0xffff0000);
        mem_write_read (START_ADDRESS, END_ADDRESS, 0xa5a5a5a5);
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x5a5a5a5a);
        
        mem_write_read (START_ADDRESS, END_ADDRESS,  PATTERN00);    // 0x00000000
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x11111111);
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x22222222);
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x33333333); 
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x44444444);
        mem_write_read (START_ADDRESS, END_ADDRESS, PATTERN01);    // 0x55555555
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x66666666);
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x77777777);
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x88888888);  
        mem_write_read (START_ADDRESS, END_ADDRESS, 0x99999999); 
        mem_write_read (START_ADDRESS, END_ADDRESS,  PATTERN10);    // 0xaaaaaaaa
        mem_write_read (START_ADDRESS, END_ADDRESS, 0xbbbbbbbb);
        mem_write_read (START_ADDRESS, END_ADDRESS, 0xcccccccc); 
        mem_write_read (START_ADDRESS, END_ADDRESS, 0xdddddddd); 
        mem_write_read (START_ADDRESS, END_ADDRESS, 0xeeeeeeee);
        mem_write_read (START_ADDRESS, END_ADDRESS,  PATTERN11);    // 0xffffffff                                                                                                                                                          
        
//        mem_write_read (START_ADDRESS, END_ADDRESS, PATTERN01);    // 0x55555555 
//        mem_write_read (START_ADDRESS, END_ADDRESS, 0xa5a5a5a5);
 
        for (i=0;i<32;i++)          // Data Bit
            mem_write_read (START_ADDRESS, END_ADDRESS, (1<<i)); 
        for (i=0;i<31;i++)
            mem_write_read (START_ADDRESS, END_ADDRESS, (3<<i)); 
        for (i=0;i<30;i++)
            mem_write_read (START_ADDRESS, END_ADDRESS, (7<<i)); 
        for (i=0;i<29;i++)
            mem_write_read (START_ADDRESS, END_ADDRESS, (0xf<<i));           
                                                   
    }
    else
    {
        mem_write_read (START_ADDRESS, END_ADDRESS, PATTERN00);        
    }

    Uart_Printf("Memory Test Completed.\n");
}

//================================================================================
void mem_write_read (int address, int end_addr, int pattern)
{
    int i, addr1, addr2;
    
    addr1 = 0x31000000;
    addr2 = 0x33feff00;
    
    Uart_Printf("\n*** Memory Test Pattern= 0x%08x and 0x%08x\n",pattern,~pattern);
   
//    Uart_Printf("Now, Writing ...\n");

    Uart_Printf("Memory Testing ...\n");    

    for(i=0;i<1000000;i++)
    {    
        *((U32 *)addr1) = pattern;
        *((U32 *)addr2) = ~pattern;            
    
   	    if (!(*((U32 *)addr1) == pattern))
            Uart_Printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",addr1,pattern,*((U32 *)addr1));
        
   	    if (!(*((U32 *)addr2) == ~pattern))
            Uart_Printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",addr2,~pattern,*((U32 *)addr2));        
            
        *((U32 *)addr1) = ~pattern;
        *((U32 *)addr2) = pattern;            
    
   	    if (!(*((U32 *)addr1) == ~pattern))
            Uart_Printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",addr1,~pattern,*((U32 *)addr1));
        
   	    if (!(*((U32 *)addr2) == pattern))
            Uart_Printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",addr2,pattern,*((U32 *)addr2));            
    }
    Uart_Printf("Testing Completed.\n");      	    
    //Uart_Printf("Press to any key. Continue...\n");
    //while(!Uart_GetKey());      
}

/*
//================================================================================
void mem_write_read (int address, int end_addr, int pattern)
{
    int i;
    volatile U32 memSum0=0, memSum1=0;    

    
    if (!PATTERNADDR)
    {
        if (PATTERN_INVERT)
            Uart_Printf("\n*** Memory Test Pattern= 0x%08x and 0x%08x\n",pattern,~pattern);
        else
            Uart_Printf("\n*** Memory Test Pattern= 0x%08x\n",pattern);             
    }        
    else
        Uart_Printf("\n*** Memory Test Pattern= Address\n");     
    
    Uart_Printf("Now, Writing ...\n");
       
    for(i=address;i<end_addr;i+=4)
    {
        if (!PATTERNADDR)
        {
            memSum0+=*((U32 *)i)=pattern;
            //Uart_Printf("Address= 0x%08x,    Write= 0x%08x\n",i,*((U32 *)i)); 
            
            if (PATTERN_INVERT)
            {
                i+=4;
                memSum0+=*((U32 *)i)= ~pattern;            
                //Uart_Printf("Address= 0x%08x,    Write= 0x%08x\n",i,*((U32 *)i));             
            }
        }
        else            
        {
            memSum0+=*((U32 *)i)=i; 
            //Uart_Printf("Address= 0x%08x,    Write= 0x%08x\n",i,i);                   
        }
    }

    Uart_Printf("Now, Reading and Comparing ...\n");
    
    for(i=address;i<end_addr;i+=4)
    {
        if (!PATTERNADDR)        
        {
        	if (*((U32 *)i) == pattern)
        	{
       	        memSum1+=*((U32 *)i)=pattern; 
                //Uart_Printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,pattern,*((U32 *)i));       	        
            }
    	    else
    	    {
                Uart_Printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,pattern,*((U32 *)i));
                //Uart_Printf("Press to any key. Continue...\n");
                //while(!Uart_GetKey());         	        
            }
        
            if (PATTERN_INVERT)
            {
                i+=4;       
            
                if(*((U32 *)i) == ~pattern)
                {
                    memSum1+=*((U32 *)i)= ~pattern;        	          
                    //Uart_Printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,~pattern,*((U32 *)i));
                }
    	        else
    	        {
                    Uart_Printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,~pattern,*((U32 *)i));
                    //Uart_Printf("Press to any key. Continue...\n");
                    //while(!Uart_GetKey());         	        
                }
            }        
        }
        else
        {       	    
    	    if (*((U32 *)i) == i)
    	    {
       	        memSum1+=*((U32 *)i)=i;        	     	
                //Uart_Printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,i,*((U32 *)i));       	        
       	    }
    	    else
    	    {
                Uart_Printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,i,*((U32 *)i));
                //Uart_Printf("Press to any key. Continue...\n");
                //while(!Uart_GetKey());
            }
        }
    }        
    
    if(memSum0 == memSum1)
    ;
    	//Uart_Printf("OK. Memory Test Result.\n");
    else
    ;
    { 
    	//Uart_Printf("\nERROR!!! Memory Test Result.\n");        
        //Uart_Printf("memSum0= 0x%x , memSum1= 0x%x\n",memSum0,memSum1);    
    }    	    
}
*/

⌨️ 快捷键说明

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