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


//==================================================================== 
// File Name : usbfifo.c 
// Function  : S3C2410 USB FIFO Test 
//usb.c 
//==================================================================== 
 
#include  
#include "addr.h" 
#include "lib.h" 
#include "def.h" 
 
void MarchCMinus32(int address,int unit,unsigned int pattern); 
void _MarchSub1(unsigned int *pt,int unit,unsigned int pattern,int incdec); 
int MarchError; 
 
int Test_USBFIFO(void) 
{ 
    int saveSyscfg; 
   // Uart_Printf("USB FIFO Cell Test by March C-\n"); 
     
    // Make test mode 
    *(int *)0x52000280 = 0x1; 
 
    MarchError=0; 
 
    //00->01->11<->10 
 
    MarchCMinus32(0x52000000,63,0x00000000);  
    MarchCMinus32(0x52000000,63,0x0f0f0f0f); 
    MarchCMinus32(0x52000000,63,0x33333333); 
    MarchCMinus32(0x52000000,63,0x55555555); 
    MarchCMinus32(0x52000000,63,0xaaaaaaaa); 
 
    if(MarchError==0) 
    { 
     //   Uart_Printf("USB FIFO is tested... OK!!\n"); 
        return 1;  
    } 
    else 
    { 
     //   Uart_Printf("USB FIFO is tested... Fail!!\n"); 
        return 0; 
    } 
} 
 
void MarchCMinus32(int address,int unit,unsigned int pattern) 
{ 
    int i; 
    unsigned int *tempPt; 
     
    tempPt=(unsigned int *)address; 
     
    for(i=0;i<=unit;i++) 
    { 
        //Uart_Printf("P=%x",pattern); 
        *tempPt++=pattern; 
        //Uart_Printf("A=%x,P=%x\n",tempPt,*tempPt); 
    } 
     
	//Uart_Printf("\nWaitting 1 Sec\n"); 
	//Delay(10000); 
	//Uart_Printf("Start\n");     
     
    _MarchSub1((unsigned int *)address,unit,~pattern,1); 
    _MarchSub1((unsigned int *)address,unit,pattern,1); 
    _MarchSub1((unsigned int *)address+unit,unit,~pattern,-1); 
    _MarchSub1((unsigned int *)address+unit,unit,pattern,-1);  
     
    tempPt=(unsigned int *)address; 
    for(i=0;i<=unit;i++) 
    { 
        if(*tempPt!=pattern) 
        { 
            MarchError=1; 
//          Uart_Printf("ERROR0:%x\n",tempPt); 
         //   Uart_Printf("ERROR0 : Address= 0x%8x,    Write= 0x%8x,    Read= 0x%8x\n",tempPt,pattern,*tempPt);            
        } 
        tempPt++; 
    } 
    //Uart_Printf("RP=%x,RA=%x\n",*tempPt,tempPt); 
} 
 
 
void _MarchSub1(unsigned int *pt,int unit,unsigned int pattern,int incdec) 
{ 
    unsigned int i,rp; 
 
    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(rp!=(~pattern)) 
        { 
            MarchError=1; 
//          Uart_Printf("ERROR1:A=%x,RP=%x,WP=%x \n",pt,rp,(~pattern)); 
            Uart_Printf("ERROR1 : Address= 0x%8x,    Write= 0x%8x,    Read= 0x%8x\n",pt,(~pattern),rp);          
        } 
        pt+=incdec; 
    } 
}