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

📄 memtest2.c

📁 本测试程序是针对TMS320LF2407 EVM的性能测试而设计开发的。程序运行时将按顺序对数据RAM空间、程序代码空间、片上异步串行通讯、ADC-DAC联合检测、双向数字I/O口、通用I/O和评估板
💻 C
字号:

/*--------------------------------------------------------*/
/*  SPECTRUM DIGITAL INC.				                  */
/*--------------------------------------------------------*/
/* Program space memory test				              */
/*--------------------------------------------------------*/
/*							                              */
/* filename:	memtest2.c				                  */
/* original:	03/01/97     by: mls			          */
/* last update: 02/18/2000   by: rrp for 2407		      */
/*--------------------------------------------------------*/

#include "prot2407.h"



#define   PROG_START_ADDR    0x2000        /* must be greater than "etext" */
                                           /* test.map file - near end */
#define   PROG_END_ADDR      0xfdff        /* SD each memory bank/test */




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

#define BUF_SIZE 1024
unsigned int data_buffer[BUF_SIZE];   /* holds data written into prog space */

/*
   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_test2(unsigned int *begin_ptr,
                       unsigned int *stop_ptr,
                       unsigned int bit_pattern)
{
  unsigned int ret_val;
  unsigned int temp_val;
  unsigned int len;
  unsigned int i;
  unsigned int save_add;
  unsigned int save_len;
  unsigned int next_add;

  temp_val = (*stop_ptr) - (*begin_ptr); /* watch for ffff-0 rollover */
  temp_val++;

  save_add = *begin_ptr;		/* save the start addr */
  save_len = temp_val;
                                       /* check data lines */
  for (i=0;i<BUF_SIZE;i++)
  {
      data_buffer[i] = bit_pattern;
  }

  do
  {
    if (temp_val >= BUF_SIZE)
    {
      len = BUF_SIZE;
    }
    else
    {
      len = temp_val;
    }
    temp_val -= len;



					    /* fill with pattern */
    blk_mv_d2p( &data_buffer[0],  /* buffer */
			 len,		    /* length */
			 begin_ptr);	   /* destination */

    next_add = *begin_ptr + BUF_SIZE;
    *begin_ptr = next_add;
  } while (temp_val);

  *begin_ptr = save_add;		     /* get start again */
  temp_val = save_len;

  do
  {
    if (temp_val >= BUF_SIZE)
    {
      len = BUF_SIZE;
    }
    else
    {
      len = temp_val;
    }
    temp_val -= len;
                                       /* change data in buffer */
    for (i=0;i<BUF_SIZE;i++)
    {
	data_buffer[i] = ~bit_pattern;
    }
					    /* read data from prog space   */


    blk_mv_p2d( begin_ptr,	  /* source addr */
			 len,		    /* length */
			 &data_buffer[0]);  /* destination addr */

    for (i=0;i<len;i++)                /* verify pattern */
    {
      if (data_buffer[i] != bit_pattern)
      {
        return ((unsigned int)(begin_ptr + i));
      }
    }

    next_add = *begin_ptr + BUF_SIZE;
    *begin_ptr = next_add;


  } while (temp_val);

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

unsigned int d_addr_test2(unsigned int *begin_ptr,
                       unsigned int *stop_ptr)
{
  unsigned int ret_val;
  unsigned int temp_val;
  unsigned int len;
  unsigned int i;
  unsigned int save_add;
  unsigned int save_len;
  unsigned int next_add;

  temp_val = (*stop_ptr) - (*begin_ptr); /* watch for ffff-0 rollover */
  temp_val++;
  save_len = temp_val;

  save_add = *begin_ptr;		/* save the start addr */
  
  do
  {
    for (i=0;i<BUF_SIZE;i++)
    {
	data_buffer[i] = (*begin_ptr) + i;
    }

    if (temp_val >= BUF_SIZE)
    {
      len = BUF_SIZE;
    }
    else
    {
      len = temp_val;
    }
    temp_val -= len;
					    /* fill with pattern */
    blk_mv_d2p( &data_buffer[0],  /* data buffer       */
			 len,		    /* length		 */
			 begin_ptr );	    /* destination addr */

    next_add = *begin_ptr + BUF_SIZE;
    *begin_ptr = next_add;

  } while (temp_val);

  *begin_ptr = save_add;		      /* get start again */
  temp_val = save_len;

  do
  {
    for (i=0;i<BUF_SIZE;i++)
    {
	data_buffer[i] = 0xffff;
    }

    if (temp_val >= BUF_SIZE)
    {
      len = BUF_SIZE;
    }
    else
    {
      len = temp_val;
    }
    temp_val -= len;
					      /* read data from prog space   */
    blk_mv_p2d(  begin_ptr,	    /* source addr */
			   len, 	      /* length */
			   &data_buffer[0]);  /* destination addr */


    for (i=0;i<len;i++)                /* verify pattern */
    {
      if (data_buffer[i] != ((*begin_ptr) + i) )
      {
	return ((*begin_ptr) + i);
      }
    }

    next_add = *begin_ptr + BUF_SIZE;
    *begin_ptr = next_add;

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

unsigned int d_pattern_test2(unsigned int *start_ptr,
                           unsigned int *end_ptr)
{
  unsigned int mem_error;
  int i, j;
  unsigned int save_start;
  unsigned int save_end;

  save_start = *start_ptr;
  save_end   = *end_ptr;


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


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



  for (j = 0; j < i; j++)
  {

    *start_ptr = save_start;
    *end_ptr   = save_end;

    mem_error = d_fill_test2(start_ptr, end_ptr, prog_pattern_table[j]);

    if (mem_error)
    {
      return((unsigned int)(j + 2));   /* show error */
    }
  }

  j++;

  *start_ptr = save_start;
  *end_ptr   = save_end;

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

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

unsigned int memtest2(void)
{
  unsigned int mem_err;
  unsigned int prog_start;
  unsigned int prog_end;


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

   prog_start = PROG_START_ADDR;
   prog_end   = PROG_END_ADDR;

   mem_err = d_pattern_test2( &prog_start,
			      &prog_end    );

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

⌨️ 快捷键说明

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