📄 memtest.c
字号:
/*
* FILE : Sram.c
* Description: 2420 user defined test program.
* History:
* Nov/xx/2002 for 2420. S.J.Lee
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Option.h"
#include "2460addr.h"
#include "2460lib.h"
#define SRAM_SADDR _NONCACHE_STARTADDRESS
#define SRAM_EADDR (SRAM_SADDR+ (128*1024)) // Total : 256KB, 0x3100_0000-0x3101_FFFF
void Mem_Test(int Print_msg)
{
unsigned int addr=0, indata, src_data, i;
unsigned int error;
static int offset=0;
unsigned short jump_offset=1;
//printf("Check: SRAM Area must be in non-cacheable area!\n");
//printf("SRAM W/R test[%xh-%xh], R/W offset[%d]\n", SRAM_SADDR, SRAM_EADDR-1, offset);
// for(i=0; i<3; i++) { // 8/16/32-bit.
for(i=2; i<3; i++) { // 8/16/32-bit.
if(i==0) jump_offset=1;
else if(i==1) jump_offset=2;
else if(i==2) jump_offset=4;
///////////////////// Clear Source/Target ////////////////////
//printf("Clear data.\n");
for(addr=0; (SRAM_SADDR+addr)<SRAM_EADDR; addr+=4) {
*(unsigned int *)(SRAM_SADDR+addr) = 0x0;
if(!(addr%(4*1024))) {
//printf("\b\b\b\b\b\b\b\b\b\b%10x", SRAM_SADDR+addr);
}
}
//printf("\b\b\b\b\b\b\b\b\b\b%10x\n", SRAM_SADDR+addr);
///////////////////// Write ////////////////////
//printf("Write data[%x-%x].\n", SRAM_SADDR, SRAM_EADDR);
if(Print_msg) printf("%d-bit data write.", jump_offset*8);
if(Print_msg) printf("ADDR:%8x", SRAM_SADDR);
Led_Display(0x1);
for(addr=0; (SRAM_SADDR+addr)<SRAM_EADDR; addr+=jump_offset) {
src_data = addr+offset;
switch(jump_offset) {
case 1:
*(unsigned char *)(SRAM_SADDR+addr) = src_data;
break;
case 2:
*(unsigned short *)(SRAM_SADDR+addr) = src_data;
break;
case 4:
*(unsigned int *)(SRAM_SADDR+addr) = src_data;
break;
}
if(!(addr%(4*1024))) {
if(Print_msg) printf("\b\b\b\b\b\b\b\b%8x", SRAM_SADDR+addr);
}
}
if(Print_msg) printf("\b\b\b\b\b\b\b\b%8x ", SRAM_SADDR+addr);
///////////////////// Verify //////////////////////
//printf("Verify[%x-%x].\n", SRAM_SADDR, SRAM_EADDR);
if(Print_msg) printf("Verify...");
if(Print_msg) printf("ADDR:%8x", SRAM_SADDR);
Led_Display(0x2);
for(error=0, addr=0; (SRAM_SADDR+addr)<SRAM_EADDR; addr+=jump_offset) {
switch(jump_offset) {
case 1:
src_data = (unsigned char)(addr+offset);
indata = *(unsigned char *)(SRAM_SADDR+addr);
break;
case 2:
src_data = (unsigned short)(addr+offset);
indata = *(unsigned short *)(SRAM_SADDR+addr);
break;
case 4:
src_data = (unsigned int)(addr+offset);
indata = *(unsigned int *)(SRAM_SADDR+addr);
break;
}
if(!(addr%(4*1024))) {
if(Print_msg) printf("\b\b\b\b\b\b\b\b%8x", SRAM_SADDR+addr);
}
if(indata != src_data) {
error++;
//printf("%xH[W:%x, R:%x]\n", addr, src_data, indata);
}
}
if(Print_msg) printf("\b\b\b\b\b\b\b\b%8x ", SRAM_SADDR+addr);
if(error!=0) {
if(Print_msg) printf("ERROR(%d)...\n\n", error);
} else {
if(Print_msg) printf("OK!\n");
//printf(".");
}
Led_Display(0xf);
}
offset++;
}
// for USB mon code - ows
void MemoryTest(void)
{
volatile unsigned int *pt;
volatile unsigned int data;
int memError=0;
#if (WHICH_PORT==1)
printf("rP1BANKCFG_DDR=0x%08x,rP2BANKCFG_DDR=0x%08x\n",rP1BANKCFG_DDR,rP2BANKCFG_DDR);
//
// memory test
//
pt=(unsigned int *)((_ISR_STARTADDRESS&0xffff0000) + 0x10000);
printf("Memory Test(0x%08x-0x%08xh): WR",pt,0x12000000);
while((unsigned int)pt<0x12000000)
{
*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;
pt++;
}
pt=(unsigned int *)((_ISR_STARTADDRESS&0xffff0000) + 0x10000);
printf("\rMemory Test(0x%08x-0x%08x): RD",pt,0x12000000);
while((unsigned int)pt<0x12000000)
{
data=*pt;
if(data!=(unsigned int)pt)
{
memError=1;
printf("\b\bFAIL:0x%x=0x%x\n",pt,data);
break;
}
pt++;
}
pt=(unsigned int *)0x20000000;
printf("\nMemory Test(0x%08x-0x%08xh): WR",pt,0x22000000);
while((unsigned int)pt<0x22000000)
{
*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;
pt++;
}
pt=(unsigned int *)0x20000000;
printf("\rMemory Test(0x%08x-0x%08x): RD",pt,0x22000000);
while((unsigned int)pt<0x22000000)
{
data=*pt;
if(data!=(unsigned int)pt)
{
memError=1;
printf("\b\bFAIL:0x%x=0x%x\n",pt,data);
break;
}
pt++;
}
if(memError==0)printf("\nO.K.\n");
#else
printf("rP2BANKCFG_DDR=0x%08x\n",rP2BANKCFG_DDR);
//
// memory test
//
pt=(unsigned int *)((_ISR_STARTADDRESS&0xffff0000) + 0x10000);
printf("Memory Test(0x%08x-0x%08xh): WR",pt,0x22000000);
while((unsigned int)pt<0x22000000)
{
*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;
pt++;
}
pt=(unsigned int *)((_ISR_STARTADDRESS&0xffff0000) + 0x10000);
printf("\rMemory Test(0x%08x-0x%08x): RD",pt,0x22000000);
while((unsigned int)pt<0x22000000)
{
data=*pt;
if(data!=(unsigned int)pt)
{
memError=1;
printf("\b\bFAIL:0x%x=0x%x\n",pt,data);
break;
}
pt++;
}
if(memError==0)printf("\nO.K.\n");
#endif //#if (WHICH_PORT==1)
}
void ClearMemory(void)
{
int i;
volatile unsigned int data;
int memError=0;
volatile unsigned int *pt,*start_pt;
//
// memory clear
//
start_pt = (unsigned int *)((_ISR_STARTADDRESS&0xffff0000) + 0x10000);
printf("Clear Memory (%xh-%xh):WR",start_pt,_MEMORY_ENDADDRESS);
pt=(volatile unsigned int *)start_pt;
while((volatile unsigned int)pt < _MEMORY_ENDADDRESS)
{
*pt=(volatile unsigned int)0x0;
pt++;
}
if(memError==0) printf("\b\bO.K.\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -