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

📄 dmc.c

📁 samsung 最新芯片2450 的测试程序.
💻 C
📖 第 1 页 / 共 3 页
字号:
    int i;
    volatile U32 memSum0=0, memSum1=0;    

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

    printf("Now, Reading and Comparing ...by Word\n");
    
    for(i=address;i<end_addr;i+=4)
    {
	if (!PATTERNADDR)        
	{
		if (*((U32 *)i) == pattern)
		{
			memSum1+=*((U32 *)i)=pattern; 
			//printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,pattern,*((U32 *)i));       	        
		}
		else
		{
			printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,pattern,*((U32 *)i));
			printf("Press to any key. Continue...\n");
			while(!Uart_GetKey());         	        
		}

		if (PATTERN_INVERT)
		{
		i+=4;       

		if(*((U32 *)i) == ~pattern)
		{
			memSum1+=*((U32 *)i)= ~pattern;        	          
			//printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,~pattern,*((U32 *)i));
		}
		else
		{
			printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,~pattern,*((U32 *)i));
			printf("Press to any key. Continue...\n");
			while(!Uart_GetKey());         	        
		}
		}        
	}
        else
        {       	    
    	    if (*((U32 *)i) == i)
    	    {
       	        memSum1+=*((U32 *)i)=i;        	     	
                //printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,i,*((U32 *)i));       	        
       	    }
    	    else
    	    {
                printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,i,*((U32 *)i));
                printf("Press to any key. Continue...\n");
                while(!Uart_GetKey());
            }
        }
    }        
    
    if(memSum0 == memSum1)
    	printf("OK. Memory Test Result.\n");
    else
    { 
    	printf("\nERROR!!! Memory Test Result.\n");        
       printf("memSum0= 0x%x , memSum1= 0x%x\n",memSum0,memSum1);    
    }    	    
}

void mem_write_read_Hword(int address, int end_addr, short pattern)
{
    int i;
    volatile U32 memSum0=0, memSum1=0;    

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

    printf("Now, Reading and Comparing ...by Half Word\n");
    
    for(i=address;i<end_addr;i+=2)
    {
	if (!PATTERNADDR)        
	{
		if (*((U16 *)i) == ((U16)pattern))
		{
			memSum1+=*((U16 *)i)=((U16)pattern); 
			//printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,pattern,*((U16 *)i));       	        
		}
		else
		{
			printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,((U16)pattern),*((U16 *)i));
			printf("Press to any key. Continue...\n");
			while(!Uart_GetKey());         	        
		}

		if (PATTERN_INVERT)
		{
		i+=2;       

		if(*((U16 *)i) == ((U16)~pattern))
		{
			memSum1+=*((U16 *)i)= ((U16)~pattern);        	          
			//printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,~pattern,*((U16 *)i));
		}
		else
		{
			printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,((U16)~pattern),*((U16 *)i));
			printf("Press to any key. Continue...\n");
			while(!Uart_GetKey());         	        
		}
		}        
	}
        else
        {       	    
    	    if (*((U16 *)i) == i)
    	    {
       	        memSum1+=*((U16 *)i)=i;        	     	
                //printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,i,*((U16 *)i));       	        
       	    }
    	    else
    	    {
                printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,i,*((U16 *)i));
                printf("Press to any key. Continue...\n");
                while(!Uart_GetKey());
            }
        }
    }        
    
    if(memSum0 == memSum1)
    	printf("OK. Memory Test Result.\n");
    else
    { 
    	printf("\nERROR!!! Memory Test Result.\n");        
       printf("memSum0= 0x%x , memSum1= 0x%x\n",memSum0,memSum1);    
    }    	    
}

void mem_write_read_byte(int address, int end_addr, char pattern)
{
    int i;
    volatile U32 memSum0=0, memSum1=0;    

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

    printf("Now, Reading and Comparing ...by Byte\n");
    
    for(i=address;i<end_addr;i+=1)
    {
	if (!PATTERNADDR)        
	{
		if (*((U8 *)i) == ((U8)pattern))
		{
			memSum1+=*((U8 *)i)=((U8)pattern); 
			//printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,pattern,*((U8 *)i));       	        
		}
		else
		{
			printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,((U8)pattern),*((U8 *)i));
			printf("Press to any key. Continue...\n");
			while(!Uart_GetKey());         	        
		}

		if (PATTERN_INVERT)
		{
		i+=1;       

		if(*((U8 *)i) == ((U8)~pattern))
		{
			memSum1+=*((U8 *)i)= ((U8)~pattern);        	          
			//printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,~pattern,*((U8 *)i));
		}
		else
		{
			printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,((U8)~pattern),*((U8 *)i));
			printf("Press to any key. Continue...\n");
			while(!Uart_GetKey());         	        
		}
		}        
	}
        else
        {       	    
    	    if (*((U8 *)i) == i)
    	    {
       	        memSum1+=*((U8 *)i)=i;        	     	
                //printf("Address: 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,i,*((U32 *)i));       	        
       	    }
    	    else
    	    {
                printf("Error!!!: Address= 0x%08x,    Write= 0x%08x,   Read= 0x%08x\n",i,i,*((U8 *)i));
                printf("Press to any key. Continue...\n");
                while(!Uart_GetKey());
            }
        }
    }        
    
    if(memSum0 == memSum1)
    	printf("OK. Memory Test Result.\n");
    else
    { 
    	printf("\nERROR!!! Memory Test Result.\n");        
       printf("memSum0= 0x%x , memSum1= 0x%x\n",memSum0,memSum1);    
    }    	    
}


void MemoryReadWriteTest(void)
{
	volatile unsigned int *pt;
	volatile unsigned int data;
	int memError=0;

	pt=(unsigned int *)(0x31000000);
	printf("\nMemory Test(0x%08x-0x%08x): WR\n",pt,0x31100000);//??
	printf("Now memory checking :%16d",0);

	while((unsigned int)pt<0x31100000)
	{

		*pt=0x00000000;	data=*pt;
		if (data != 0x00000000)	printf("\nFAIL:0x%08x=0x%08x (0x00000000 expected).\n",pt,data);
	    
		*pt=0xffffffff;	data=*pt;
		if (data != 0xffffffff)	printf("\nFAIL:0x%08x=0x%08x (0xffffffff expected).\n",pt,data);

		*pt=0x55555555;	data=*pt;
		if (data != 0x55555555)	printf("\nFAIL:0x%08x=0x%08x (0x55555555 expected).\n",pt,data);

		*pt=0xaaaaaaaa;	data=*pt;
		if (data != 0xaaaaaaaa)	printf("\nFAIL:0x%08x=0x%08x (0xaaaaaaaa expected).\n",pt,data);

	*pt=(unsigned int)pt;
		if(((unsigned int)pt&0x0000ffff)==0)printf("\b\b\b\b\b\b\b\b%8x",pt);
	pt++;
	}

	pt=(unsigned int *)(0x32000000);
	printf("\nMemory Test(0x%08x-0x%08x): WR\n",pt,0x32100000);//??
	printf("Now memory checking :%16d",0);
	
	while((unsigned int)pt<0x32100000)
	{

		*pt=0x00000000;	data=*pt;
		if (data != 0x00000000)	printf("\nFAIL:0x%08x=0x%08x (0x00000000 expected).\n",pt,data);
	    
		*pt=0xffffffff;	data=*pt;
		if (data != 0xffffffff)	printf("\nFAIL:0x%08x=0x%08x (0xffffffff expected).\n",pt,data);

		*pt=0x55555555;	data=*pt;
		if (data != 0x55555555)	printf("\nFAIL:0x%08x=0x%08x (0x55555555 expected).\n",pt,data);

		*pt=0xaaaaaaaa;	data=*pt;
		if (data != 0xaaaaaaaa)	printf("\nFAIL:0x%08x=0x%08x (0xaaaaaaaa expected).\n",pt,data);

	*pt=(unsigned int)pt;
		if(((unsigned int)pt&0x0000ffff)==0)printf("\b\b\b\b\b\b\b\b%8x",pt);
	pt++;
	}

	pt=(unsigned int *)(0x33000000);
	printf("\nMemory Test(0x%08x-0x%08x): WR\n",pt,0x33100000);//??
	printf("Now memory checking :%16d",0);
	
	while((unsigned int)pt<0x33100000)
	{

		*pt=0x00000000;	data=*pt;
		if (data != 0x00000000)	printf("\nFAIL:0x%08x=0x%08x (0x00000000 expected).\n",pt,data);
	    
		*pt=0xffffffff;	data=*pt;
		if (data != 0xffffffff)	printf("\nFAIL:0x%08x=0x%08x (0xffffffff expected).\n",pt,data);

		*pt=0x55555555;	data=*pt;
		if (data != 0x55555555)	printf("\nFAIL:0x%08x=0x%08x (0x55555555 expected).\n",pt,data);

		*pt=0xaaaaaaaa;	data=*pt;
		if (data != 0xaaaaaaaa)	printf("\nFAIL:0x%08x=0x%08x (0xaaaaaaaa expected).\n",pt,data);

	*pt=(unsigned int)pt;
		if(((unsigned int)pt&0x0000ffff)==0)printf("\b\b\b\b\b\b\b\b%8x",pt);
	pt++;
	}
}


void SDR_ModeTest(void)
{
	volatile unsigned int *pt;
	volatile unsigned int data;
	int memError=0;
	int test;
	
	(*(unsigned int *)(0x31000000)) = 0xaaaaaaaa;	
	//GPIO trigger set-up
	rGPADAT |= (0x1<<13);

	Delay(10);

	rGPADAT &= ~(0x1<<13);	
	//rBANKCFG &= ~(0x3<<6);
	
	//rBANKCON1 |= (1<<5); // Auto Precharge disable to see a precharge command out

	//rBANKCFG |= (0x1<<0);

	(*(unsigned int *)(0x31000000)) = 0xaaaa5555;			
	(*(unsigned int *)(0x31002000)) = 0x12345678;	

	

	//rBANKCON1 |= (1<<7); // Bstop is only available for mDDR
	//rBANKCON2 = rBANKCON2 & ~(0x3<<4) |(0x2<<4); // CAS latency 2 Fail

⌨️ 快捷键说明

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