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

📄 memtest.c

📁 SMDK2460 usb monitor program. compiler ADS 1.2 , use DNW to download program to target board.
💻 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 + -