📄 sdramtest_64bit.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 + -