www.pudn.com > ARM9_PROGRAM.rar > palette.c


/***************************************** 
  NAME: palette.c 
  DESC: LCD palette RAM test  
  HISTORY: 
  July 12, 2002 : Shin ,On Pil --> Error message display detailed address position. 
 *****************************************/ 
#include  
 #include "def.h" 
#include "option.h" 
#include "addr.h" 
#include "lib.h" 
 
#include "palette.h" 
 
static void MarchCMinusM(int address,int unit,unsigned int pattern,unsigned int mask); 
static void _MarchSub1M(unsigned int *pt,int unit,unsigned int pattern,int incdec,unsigned int mask); 
 
int marchError; 
 
void Test_PaletteMemory(void) 
{ 
    Uart_Printf("Palette RAM test by March C-\n"); 
	 
    marchError=0; 
 
    *((U32 *)PALETTE)=0x1234; 
    Uart_Printf("data = %x\n",*((U32 *)PALETTE)); 
     
    //00->01->11<->10 
 
    //Data cache should be turned off. 
     
    MarchCMinusM(PALETTE,255,0x33333333,0xffff); 
    MarchCMinusM(PALETTE,255,0x55555555,0xffff);     
    MarchCMinusM(PALETTE,255,0x0000ffff,0xffff); 
    MarchCMinusM(PALETTE,255,0x00ff00ff,0xffff); 
    MarchCMinusM(PALETTE,255,0x0f0f0f0f,0xffff); 
    MarchCMinusM(PALETTE,255,0xffffffff,0xffff);     
    Uart_Printf("P-RAM is tested.\n"); 
} 
 
 
static void MarchCMinusM(int address,int unit,unsigned int pattern,unsigned int mask) 
{ 
    int i; 
    unsigned int *tempPt; 
     
    tempPt=(unsigned int *)address; 
     
    for(i=0;i<=unit;i++) 
    { 
//	    Uart_Printf("P= 0x%8x   : ",pattern); 
//	    *tempPt++=pattern; 
//	    Uart_Printf("A= 0x%8x,   P= 0x%8x\n",tempPt,*tempPt); 
	    *tempPt=pattern; 
	    tempPt+=1; 
    } 
     
	Uart_Printf("\nWaitting 1 Sec\n"); 
	Delay(10000); 
	Uart_Printf("Start\n"); 
     
    _MarchSub1M((unsigned int *)address,unit,~pattern,1,mask); 
    _MarchSub1M((unsigned int *)address,unit,pattern,1,mask); 
    _MarchSub1M((unsigned int *)address+(unit*1),unit,~pattern,-1,mask); 
    _MarchSub1M((unsigned int *)address+(unit*1),unit,pattern,-1,mask);  
     
    tempPt=(unsigned int *)address; 
    for(i=0;i<=unit;i++) 
    { 
     
	    if( (mask & *tempPt)!=(pattern&mask) ) 
	    { 
	        marchError=1; 
//	        Uart_Printf("ERROR0 : RA= 0x%8x,    RP= 0x%8x\n",tempPt,*tempPt); 
	        Uart_Printf("ERROR0 : Address= 0x%8x,    Write= 0x%8x,    Read= 0x%8x\n",tempPt,pattern,*tempPt);	         
	    } 
//	    Uart_Printf("RA= 0x%8x,    RP= 0x%8x\n",tempPt,*tempPt); 
	    tempPt+=0x1;	     
    } 
    tempPt-=0x1; 
//	Uart_Printf("Address= 0x%8x,    Write= 0x%8x,    Read= 0x%8x\n",tempPt,pattern,*tempPt); 
} 
 
 
static void _MarchSub1M(unsigned int *pt,int unit,unsigned int pattern,int incdec,unsigned int mask) 
{ 
    unsigned int i,rp; 
    unsigned int *pt2=pt; 
     
    for(i=0;i<=unit;i++) 
    { 
	    rp=*pt; 
	    //Uart_Printf("RP=%x",*pt); 
	    *pt=pattern; 
	    //Uart_Printf("j=%x,p=%x,pt=%x\n",rp,(~pattern),pt); 
	 
	    if( (mask&rp)!=(mask&(~pattern)) ) 
	    { 
	        marchError=1; 
//	        Uart_Printf("ERROR1 : Address= 0x%8x,    Write= 0x%8x,    Read= 0x%8x   pt2= 0x%8x \n",pt,(~pattern),rp,pt2); 
	        Uart_Printf("ERROR1 : Address= 0x%8x,    Write= 0x%8x,    Read= 0x%8x\n",pt,(~pattern),rp);	         
	    } 
	    pt+=incdec; 
//	Uart_Printf("."); 
    } 
}