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

📄 cache.c

📁 8019测试源码for arm s3c44b0
💻 C
字号:
/****************************************************************************
【文  件  名  称】cache.c
【功  能  描  述】高速缓冲存储器测试程序
【程  序  版  本】2.0
【创建人及创建日期】龚俊//2002年11月19日19:26
【修改人及修改日期】龚俊//2003年4月26日20:24
****************************************************************************/

//***************************************************************************
#include <string.h>
#include "..\inc\option.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\cache.h"

void MarchCMinus32(int address,int unit,unsigned int pattern);
void MarchCMinusM_10(int address,int unit,unsigned int pattern,unsigned int mask);
void _MarchSub1(unsigned int *pt,int unit,unsigned int pattern,int incdec);
void _MarchSub1_10(unsigned int *pt,int unit,unsigned int pattern,int incdec,unsigned int mask);
//***************************************************************************

/****************************************************************************
【功能说明】将cache里面的数据全部清空成0
****************************************************************************/
void FlushCache(void)			   
{					   
    int i,saveSyscfg;
    
    saveSyscfg = rSYSCFG;		//CPU WRAPPER SPECIAL REGISTERS

    rSYSCFG = SYSCFG_0KB;		//禁止高速缓存(8K内部SRAM)	      
    Uart_Printf("\n【将cache里面的数据全部清空成0x0000】\n");
    for(i = 0x10002000; i < 0x10004800; i += 16)    
    {					   
		*((int *)i) = 0x0;		   
    }
				  
    rSYSCFG = saveSyscfg;		//CPU WRAPPER SPECIAL REGISTERS 			    
}					   
//***************************************************************************

/****************************************************************************
【功能说明】
****************************************************************************/
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))
		{
		    Uart_Printf("ERROR1:A=%x,RP=%x,WP=%x \n",pt,rp,(~pattern));
		}

		pt+=incdec;
    }
}
//***************************************************************************

/****************************************************************************
【功能说明】
****************************************************************************/
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);
    }
    
    _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)
		{
		    Uart_Printf("ERROR0:%x\n",tempPt);
		}
		tempPt++;
    }
    //Uart_Printf("RP=%x,RA=%x\n",*tempPt,tempPt);
}
//***************************************************************************

/****************************************************************************
【功能说明】
****************************************************************************/
void _MarchSub1_10(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( rp!=(mask&(~pattern)) )
	{
	    Uart_Printf("ERROR1:A=%x,RP=%x,WP=%x pt2=%x \n",pt,rp,(~pattern),pt2);
	}
	pt+=incdec;
    }
}
//***************************************************************************

/****************************************************************************
【功能说明】
****************************************************************************/
void MarchCMinusM_10(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=%x",pattern);
		//    *tempPt++=pattern;
		//Uart_Printf("A=%x,P=%x\n",tempPt,*tempPt);
		*tempPt=pattern;
		tempPt+=0x4;
    }
    
    _MarchSub1_10((unsigned int *)address,unit,~pattern,4,mask);
    _MarchSub1_10((unsigned int *)address,unit,pattern,4,mask);
    _MarchSub1_10((unsigned int *)address+(unit*4),unit,~pattern,-4,mask);
    _MarchSub1_10((unsigned int *)address+(unit*4),unit,pattern,-4,mask); 
    
    tempPt=(unsigned int *)address;
    for(i=0;i<=unit;i++)
    {
		if( *tempPt!=(pattern&mask) )
		{
		    Uart_Printf("ERROR0:%x\n",tempPt);
		}
		tempPt+=0x4;
    }
    //Uart_Printf("RP=%x,RA=%x\n",*tempPt,tempPt);
}
//***************************************************************************

/****************************************************************************
【功能说明】Cache高速缓存自检测试
****************************************************************************/
void Test_Cache(void)
{
    int saveSyscfg;
    Uart_Printf("\n【Cache高速缓存(内部SRAM)自检测试:】\n");
	
    saveSyscfg=rSYSCFG;

    //00->01->11<->10

    rSYSCFG=SYSCFG_0KB;  //WB_off,Cache_off,I_RAM 8KB,stall disable
    //set0=0x10000000~0x100007ff	      
    //set1=0x10000800~0x10000fff	      
    //set2=0x10001000~0x100017ff	      
    //set3=0x10001800~0x10001fff	      
    
    MarchCMinus32(0x10000000,511,0x00000000); 
    MarchCMinus32(0x10000000,511,0x0f0f0f0f);
    MarchCMinus32(0x10000000,511,0x33333333);
    MarchCMinus32(0x10000000,511,0x55555555);
    MarchCMinus32(0x10000000,511,0xaaaaaaaa);
    Uart_Printf("\n0x10000000至0x100007ff已经测试!\n");

    MarchCMinus32(0x10000800,511,0x00000000);
    MarchCMinus32(0x10000800,511,0x0f0f0f0f);
    MarchCMinus32(0x10000800,511,0x33333333);
    MarchCMinus32(0x10000800,511,0x55555555);
    MarchCMinus32(0x10000800,511,0xaaaaaaaa);
    Uart_Printf("0x10000800至0x10000fff已经测试!\n");
	
    MarchCMinus32(0x10001000,511,0x00000000);
    MarchCMinus32(0x10001000,511,0x0f0f0f0f);
    MarchCMinus32(0x10001000,511,0x33333333);
    MarchCMinus32(0x10001000,511,0x55555555);
    MarchCMinus32(0x10001000,511,0xaaaaaaaa);
    Uart_Printf("0x10001000至0x100017ff已经测试!\n");

    MarchCMinus32(0x10001800,511,0x00000000);
    MarchCMinus32(0x10001800,511,0x0f0f0f0f);
    MarchCMinus32(0x10001800,511,0x33333333);
    MarchCMinus32(0x10001800,511,0x55555555);
    MarchCMinus32(0x10001800,511,0xaaaaaaaa);
    Uart_Printf("0x10001800至0x10001fff已经测试!\n");
	
    MarchCMinusM_10(0x10002000,127,0x00000000,0x1ffff);
    MarchCMinusM_10(0x10002000,127,0x0000ffff,0x1ffff);
    MarchCMinusM_10(0x10002000,127,0x00ff00ff,0x1ffff);
    MarchCMinusM_10(0x10002000,127,0x0f0f0f0f,0x1ffff);
    MarchCMinusM_10(0x10002000,127,0x33333333,0x1ffff);
    MarchCMinusM_10(0x10002000,127,0x55555555,0x1ffff);
    Uart_Printf("\nTagRAM0已经测试!\n");

    MarchCMinusM_10(0x10002800,127,0x00000000,0x1ffff);
    MarchCMinusM_10(0x10002800,127,0x0000ffff,0x1ffff);
    MarchCMinusM_10(0x10002800,127,0x00ff00ff,0x1ffff);
    MarchCMinusM_10(0x10002800,127,0x0f0f0f0f,0x1ffff);
    MarchCMinusM_10(0x10002800,127,0x33333333,0x1ffff);
    MarchCMinusM_10(0x10002800,127,0x55555555,0x1ffff);
    Uart_Printf("TagRAM1已经测试!\n");

    MarchCMinusM_10(0x10003000,127,0x00000000,0x1ffff);
    MarchCMinusM_10(0x10003000,127,0x0000ffff,0x1ffff);
    MarchCMinusM_10(0x10003000,127,0x00ff00ff,0x1ffff);
    MarchCMinusM_10(0x10003000,127,0x0f0f0f0f,0x1ffff);
    MarchCMinusM_10(0x10003000,127,0x33333333,0x1ffff);
    MarchCMinusM_10(0x10003000,127,0x55555555,0x1ffff);
    Uart_Printf("TagRAM2已经测试!\n");

    MarchCMinusM_10(0x10003800,127,0x00000000,0x1ffff);
    MarchCMinusM_10(0x10003800,127,0x0000ffff,0x1ffff);
    MarchCMinusM_10(0x10003800,127,0x00ff00ff,0x1ffff);
    MarchCMinusM_10(0x10003800,127,0x0f0f0f0f,0x1ffff);
    MarchCMinusM_10(0x10003800,127,0x33333333,0x1ffff);
    MarchCMinusM_10(0x10003800,127,0x55555555,0x1ffff);
    Uart_Printf("TagRAM3已经测试!\n");

    MarchCMinusM_10(0x10004000,127,0x00000000,0xf);	   
    MarchCMinusM_10(0x10004000,127,0x0000ffff,0xf);
    MarchCMinusM_10(0x10004000,127,0x00ff00ff,0xf);
    MarchCMinusM_10(0x10004000,127,0x0f0f0f0f,0xf);
    MarchCMinusM_10(0x10004000,127,0x33333333,0xf);
    MarchCMinusM_10(0x10004000,127,0x55555555,0xf);
    Uart_Printf("LRU已经测试!\n");	    

    Uart_Printf("\n【4K内部SRAM测试:】\n");

    rSYSCFG=SYSCFG_4KB;
    MarchCMinus32(0x10001000,511,0x00000000);
    MarchCMinus32(0x10001000,511,0x0f0f0f0f);
    MarchCMinus32(0x10001000,511,0x33333333);
    MarchCMinus32(0x10001000,511,0x55555555);
    MarchCMinus32(0x10001000,511,0xaaaaaaaa);
    Uart_Printf("0x10001000至0x100017ff已经测试!\n");

    MarchCMinus32(0x10001800,511,0x00000000);
    MarchCMinus32(0x10001800,511,0x0f0f0f0f);
    MarchCMinus32(0x10001800,511,0x33333333);
    MarchCMinus32(0x10001800,511,0x55555555);
    MarchCMinus32(0x10001800,511,0xaaaaaaaa);
    Uart_Printf("0x10001800至0x10001fff已经测试!\n");

    rSYSCFG=saveSyscfg;     //wr_on,Cache 8KB+I_RAM 0KB,stall disable.

    FlushCache();		//将cache里面的数据全部清空成0
}
//***************************************************************************

⌨️ 快捷键说明

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