📄 dmc.c
字号:
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 + -