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

📄 sdramtest_64bit.c

📁 dsp dm642 flash烧录入
💻 C
字号:
/*
 *  Copyright 2000 by Texas Instruments Incorporated.
 *  All rights reserved. Property of Texas Instruments Incorporated.
 *  Restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 *  U.S. Patent Nos. 5,283,900  5,392,448
 */
/* "@(#) DSP/BIOS 4.00 03-27-00 (barracuda-e08)" */
/***************************************************************************/
/*                                                                         */
/*     H E L L O . C                                                       */
/*                                                                         */
/*     Basic C standard I/O from main.                                     */
/*                                                                         */
/*                                                                         */
/***************************************************************************/
#define CHIP_DM642

#include <stdio.h>
#include "atom.h"


enum
{
  LastTableUncompleted   = 1,
  PointerFieldError      = 2,
	TableLengthOutOfRange  = 4,
	TableComplete          = 8
};

typedef struct
{
  Uint32 Length, Received, ContinuityCounter, Version, LastTime;
  Uint8 Buffer[1024];
} TTable;

typedef struct
{
  Uint32  ServiceID, PMTPID, SubCount, PCRPID;
  Uint16 SubPIDs[8], SubTypes[8];
  TTable PMT;
} TProgram;

TProgram Programs[10];
TTable PAT, NIT, SDT, TDT;
Uint32 ProgramCount, TransportStreamID;

Uint16 PIDs[100], ContinuityCounters[100];
Uint32 LastTimes[100];

Int8 InputBuffer[2 * 204 + 4 * 64];       /* processing data buffers */
Uint8 Message[1024 + 4];
Uint32 Payload = 188;

Uint32 nInt4 = 0;
Uint32 nInt8 = 0;

Uint32 LastFIFO, LastPacket;
Uint32 PacketCounters[100], LastPCRs[100], PCRExts[100];

unsigned long PCRBases[100];

void Read_FIFO();
void DMA_Finished();
void APacket(Uint32 * Buffer);
Uint32 ATable(TTable * Table, Uint8 * Buffer, Uint32 offset);
void ParsePAT();
void ParsePMT(Uint32 n);
void ParseNIT();
void ParseSDT();
void ParseTDT();
void Timer1();
Uint32 FindPID(Uint32 PID);

void init_emifa()
{
	*(Int32 *)EMIF_GBLCTL =0x0001277c;
	*(Int32 *)EMIF_CECTL0 =0xFFFFFFD3;
	*(Int32 *)EMIF_SDEXT =0x00175F3F;	
	*(Int32 *)EMIF_CESEC0 =0x00000002;
	// *(int *)EMIF_SDTIM =0x005dc5dc;
	*(Int32 *)EMIF_SDCTL =0x63116001;


	*(Int32 *)HPIC = 0x0009; 
}



/* 8Mbyte sdram */
#define START       0x80000000
#define END        0x08000000
#define VALUE       0xaaaaaaaaaaaaaaaa

static Int64 testValue[16]= {0x00000000000000000, 0x1111111111111111, 0x2222222222222222, 0x3333333333333333, 0x4444444444444444, 0x5555555555555555,
                           0x6666666666666666, 0x7777777777777777, 0x8888888888888888, 0x9999999999999999, 0xaaaaaaaaaaaaaaaa, 0xbbbbbbbbbbbbbbbb,
                           0xcccccccccccccccc, 0xdddddddddddddddd, 0xeeeeeeeeeeeeeeee, 0xffffffffffffffff                           
                          };
                          
      

/*
 *  ======== main ========
 */
void main()
{             

	
	Uint32 i,j;  
	  
	Int32 k,m,value;
	Int32 * intp;
	 
	init_emifa();             

#if 1  
	  printf("start test sdram from 0x80000000 to 0x88000000 used by 0x55555555 and 0xaaaaaaa\n");

	  j = START;                               
	  for(i= START;i<END;i+=16)                                              
	  {
	    	intp = (int *)j;
	    	*intp = 0x5555555555555555;          
	       	j += 8; 
	    	intp = (int *)j;
	    	*intp = 0xaaaaaaaa;          
	       	j += 8; 
	       	
      }   

      j = START;  
	  for(i = START; i < END; i+=16)                                               
	  {
	    	intp = (int *)j;
	    	k = *intp;
	    	value=0x5555555555555555;
            if(k!=value)
	    	{
	    		printf("address = 0x%x error value= 0x%x correct value = 0x%x \n",j,k,value);
	    //		fflush(stdout);
	    	}	                    
	    	j += 8;
	    	intp = (int *)j;
	    	k = *intp;
	    	value=0xaaaaaaaaaaaaaaaa;
            if(k!=value)
	    	{
	    		printf("address = 0x%x error value= 0x%x correct value = 0x%x \n",j,k,value);
	    	//	fflush(stdout);
	    	}
	    	j += 8;	    	
	  }
	  
      printf("end test sdram \n");
      
#endif


#if 1 
      printf("I am testing adress complements\n"); 
      j= START;
	  for(i = START; i < END; i+=8)                                              
	  {
	    	intp = (int *)j;
	    	*intp = ~j;          
	       	j += 8;
	  }  
	     
	   j = START;  
	   for(i = START; i < END; i+=8)                                               
	   {
	    	intp = (int *)j;
	    	
	    	k = *intp;
	    	if (k != ~j    )
	    	{
	    		printf("address = 0x%x error value= 0x%x correct value= 0x%x\n",j,k,~j);
	    		fflush(stdout);
	    	}	                    
	    	j += 8;
	    }
	
    printf("averted address testing end!\n");
#endif 
   
#if 1
printf("I am writing and reading 0,1,--,e,f at every byte from 0x80000000 to 0x81000000\n"); 
  
 for(m=0; m < 16; m++)
  {
	  value = testValue[m];
	  printf("m = %x testValue = %x\n", m, value);
	  j = START;                               
	  for(i = START; i < END; i+=8)                                              
      {
	    	intp = (int *)j;
	    	*intp = value;          
	       	j += 8;
	    	
	   }  
	     
	   j = START;  
	   for(i = START; i < END; i+=8)                                               
	    {
	    	intp = (int *)j;
	    	
	    	k = *intp;
	    	if (k  != value  )
	    	{
	    	printf("address = 0x%x error value= 0x%x correct value= 0x%x\n",j,k,value);
	    		fflush(stdout);
	    	}	                    
	    	j += 8;
	    }
	}      
#endif


#if 1
      printf("I am writing and reading data from 0 to 0xffffffff at 0x80000000 unit\n"); 

	  intp = (int *)START;
	  i=0x0; 
	  m=0x0; 	  

	  for(j=0; j < 0x10; j++)
	  {
		  m = m +0x10000000;
		  for(i=0x0; i < m; i++)                                              
		    {
		    	*intp = i;              
				k = *intp;
		    	if (k != i)
		    	{
		    		printf("error value = 0x%x correct value = 0x%x \n",k,i);
		    	}	                    	    	
		    }  

		printf("%x end\n",j);	
		 
	  }
#endif

    printf("all Testing end\n");
  
}

⌨️ 快捷键说明

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