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

📄 memtest1.c

📁 数字信号处理芯片的测试源文件
💻 C
字号:
/*--------------------------------------------------------*/
/*  WQ21ST SOFTWARE	STUDIO.			                  	  */
/*--------------------------------------------------------*/
/* Data space memory test				                  */
/*--------------------------------------------------------*/
/*							                              */
/* filename:	memtest1.c				                  */
/* original:	08/12/2001   by: WQ				          */
/* last update: 08/18/2001   by: WQ					      */
/*--------------------------------------------------------*/

#include "prot2407.h"

#define   DATA_START_ADDR    0x8500        /* must be greater than "end" */
                                           /* in test.map - near etext */
#define   DATA_END_ADDR      0xf3ff        /* each memory bank/test */

unsigned int data_pattern_table[] = { 0x0000, 0xffff, 0x0000, 0xaaaa, 0x5555 };

/*
   This memory test does the following:
     1. check the range, error 1
     2. fill range with all 0's
     3. verfiy the fill, error 2
     4. fill range with all 0xffff's
     5. verfiy the fill, error 3
     6. fill range with all 0's
     7. verfiy the fill, error 4
     8. fill range with all 0xaaaa's
     9. verfiy the fill, error 5
    10. fill range with all 05555's
    11. verfiy the fill, error 6
*/

unsigned int d_fill_test1(unsigned int *begin_ptr,
                       unsigned int *stop_ptr,
                       unsigned int bit_pattern)
{
  unsigned int save_ptr;
  unsigned int loop_cnt;
  unsigned int loop_save;
  unsigned int addr;
  unsigned int read_back;

  save_ptr = *begin_ptr;		/* save the start addr */

  loop_cnt = (*stop_ptr) - (*begin_ptr);

  addr = *begin_ptr;
                                       /* check data lines */
  while( loop_cnt-- )
  {
    *(unsigned int*) addr = bit_pattern;	  /* fill with pattern */
    addr++;
  }


  addr	   = save_ptr;		     /* get start again */
  loop_cnt = loop_save;

  while( loop_cnt-- )
  {
    read_back = *( unsigned int *)addr;

    if ( read_back!= bit_pattern)      /* verify pattern */
    {
      return( read_back );    /* show error */
    }

  }

  return((unsigned int)0);             /* show no error */
}


unsigned int d_addr_test1(unsigned int *begin_ptr,
                       unsigned int *stop_ptr)
{
  unsigned int save_ptr;
  unsigned int loop_cnt;
  unsigned int loop_save;
  unsigned int addr;
  unsigned int read_back;

  loop_cnt = (*stop_ptr) - (*begin_ptr);
  loop_save= loop_cnt;
  addr = *begin_ptr;

  save_ptr = *begin_ptr;		/* save the start addr */
  
  while( loop_cnt-- )
  {
    *(unsigned int *)addr = addr;  /* fill with address */
    addr++;

  }

  addr	  = save_ptr;		     /* get start again */
  loop_cnt= loop_save;

  while( loop_cnt-- )
  {
    read_back = *(unsigned int *) addr;

    if ( read_back != addr ) /* verify data */
    {
      return( addr );	 /* show error */
    }
    addr++;

  }
  
  addr = save_ptr;		  /* get start again */
  loop_cnt= loop_save;

  while( loop_cnt-- )
  {
    *(unsigned int *) addr = ~(unsigned int)addr;  /* fill with inverted address */
    addr++;
  }

  addr	   = save_ptr;		      /* get start again */

  loop_cnt = loop_save;

  while( loop_cnt-- )
  {
    read_back = *(unsigned int *) addr;

    if ( read_back != (~(unsigned int)addr) ) /* verify data */
    {
      return( addr);	/* show error */
    }
    addr++;

  }
  
  return((unsigned int)0);              /* show no error */
}




unsigned int d_pattern_test1(unsigned int *start_ptr,
                           unsigned int *end_ptr)
{
    unsigned int mem_error;
    unsigned int start_save;
    unsigned int end_save;
    int i, j;

    if ((*start_ptr) >= (*end_ptr))
    {
	return((unsigned int)1);	   /* show 1st error */
    }

    start_save = *start_ptr;
    end_save   = *end_ptr;


    i = sizeof(data_pattern_table);	 /* get size of table */

    for (j = 0; j < i; j++)
    {
	mem_error = d_fill_test1(start_ptr, end_ptr, data_pattern_table[j]);
	if (mem_error)
	{
	    return((unsigned int)(j + 2));   /* show error */
	}
     }

    j++;


    *start_ptr = start_save;
    *end_ptr = end_save;

    mem_error = d_addr_test1(start_ptr, end_ptr);
    if (mem_error)
    {
	return((unsigned int)(j + 2));	 /* show error */
    }

    return((unsigned int)0);		 /* show no error */

}

unsigned int memtest1(void)
{
  unsigned int mem_err;
  unsigned int start_add;
  unsigned int end_add;

  mem_err = 0;
                                           /* any number of memory banks */
                                           /* can be put in here with */
                                           /* different begin, end addrs */
  start_add = DATA_START_ADDR;
  end_add   = DATA_END_ADDR;

  mem_err = d_pattern_test1( &start_add, &end_add );

  return(mem_err);          /* return the good or bad result */
}

⌨️ 快捷键说明

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