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

📄 cache.c

📁 这是三星公司的arm7 s3c44b0x芯片的所有外设中断程序
💻 C
字号:
//44BTEST : cache.c
#include <string.h>
#include "..\inc\44b.h"
#include "..\inc\44blib.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);
int marchError;
void FlushCache(void)
{
	int i,saveSyscfg;
	saveSyscfg=rSYSCFG;
	rSYSCFG=SYSCFG_0KB;
	for(i=0x10002000;i<0x10004800;i+=16)
	{
		*((int *)i)=0x0;
	}
	rSYSCFG=saveSyscfg;
}
int Test_Cache(void)
{
	int saveSyscfg;
	Uart_Printf("Cache(Internal RAM) Cell Test by March C-\n");
	saveSyscfg=rSYSCFG;
	marchError=0;
	//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("Set0 is tested!\n");
	MarchCMinus32(0x10000800,511,0x00000000);
	MarchCMinus32(0x10000800,511,0x0f0f0f0f);
	MarchCMinus32(0x10000800,511,0x33333333);
	MarchCMinus32(0x10000800,511,0x55555555);
	MarchCMinus32(0x10000800,511,0xaaaaaaaa);
	Uart_Printf("Set1 is tested!\n");
	MarchCMinus32(0x10001000,511,0x00000000);
	MarchCMinus32(0x10001000,511,0x0f0f0f0f);
	MarchCMinus32(0x10001000,511,0x33333333);
	MarchCMinus32(0x10001000,511,0x55555555);
	MarchCMinus32(0x10001000,511,0xaaaaaaaa);
	Uart_Printf("Set2 is tested!\n");
	MarchCMinus32(0x10001800,511,0x00000000);
	MarchCMinus32(0x10001800,511,0x0f0f0f0f);
	MarchCMinus32(0x10001800,511,0x33333333);
	MarchCMinus32(0x10001800,511,0x55555555);
	MarchCMinus32(0x10001800,511,0xaaaaaaaa);
	Uart_Printf("Set3 is tested!\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("TagRAM0 is tested!\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 is tested!\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 is tested!\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 is tested!\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 is tested!\n");
	Uart_Printf("4KB internal SRAM test.\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("Set2 is tested at 4KB!\n");
	MarchCMinus32(0x10001800,511,0x00000000);
	MarchCMinus32(0x10001800,511,0x0f0f0f0f);
	MarchCMinus32(0x10001800,511,0x33333333);
	MarchCMinus32(0x10001800,511,0x55555555);
	MarchCMinus32(0x10001800,511,0xaaaaaaaa);
	Uart_Printf("Set3 is tested at 4KB!\n");
	rSYSCFG=saveSyscfg; //wr_on,Cache 8KB+I_RAM 0KB,stall disable.
	//cache flush is needed....
	if(marchError==0)
		return 1;
	else
		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);
	}
	_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);
		}
		tempPt++;
	}
		//Uart_Printf("RP=%x,RA=%x\n",*tempPt,tempPt);
}
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) )
		{
			marchError=1;
			Uart_Printf("ERROR0:%x\n",tempPt);
		}
		tempPt+=0x4;
	}
//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));
		}
		pt+=incdec;
	}
}
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)) )
		{
			marchError=1;
			Uart_Printf("ERROR1:A=%x,RP=%x,WP=%x pt2=%x \n",pt,rp,(~pattern),pt2);
		}
		pt+=incdec;
	}
}

⌨️ 快捷键说明

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