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

📄 db_dram.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ct_type.h"

/*******************************************************************************************/
#if 1
#define DBDRAM_MSG(p)
#else
#define DBDRAM_MSG(p)			printf p
#endif

#if 1
#define DBDRAM_DBG(p)
#else
#define DBDRAM_DBG(p) 		printf p
#endif

/*******************************************************************************************/ 
/*******************************************************************************************/
//#define DVB_DRAM_DEBUG
/*******************************************************************************************/
void DVB_DramPhaseAdjustment(u8 u8Data)
{
}
/*******************************************************************************************/
bool8 DVB_DramWrite(u32 u32address, u8* pu8buffer, u16 u16buffer_size)
{	
	if (pu8buffer==NULL)
	{
		return FALSE;
	}
	memcpy((u8*)u32address, pu8buffer,u16buffer_size);
    return TRUE;
}
/*******************************************************************************************/
bool8 DVB_DramRead(u32 u32address, u8* pu8buffer, u16 u16buffer_size)
{	
    if (pu8buffer==NULL)
	{
		return FALSE;
	}
	memcpy(pu8buffer,(u8*)u32address, u16buffer_size);
    return TRUE;
}
/*******************************************************************************************/
bool8 DVB_DramCopy(u32 u32destination, u32 u32source, u32 u32length)
{
	memcpy((u8*)u32destination,(u8*)u32source,u32length);
    return TRUE;
}
/*******************************************************************************************/
bool8 DVB_DramSet( u32 u32destination, u8 u8set_value, u32 u32length)
{
	memset((u8*)u32destination,u8set_value,u32length);
    return TRUE;
}
/*******************************************************************************************/
u16 DVB_DramCompare( u32 u32Address1, u32 u32Address2, u16 u16ItemSize, u16 u16ItemNumber )
{
	return 0;
}
/*******************************************************************************************/

u16 DVB_DramSearch(u32 u32address, u16 u16item_size, u16 u16item_num, u32 u32mask, u32 u32mach, bool8 b8Increase)
{	
	u16 	u16ItemCount;
	u8*		pu8Mask;
	u8*		pu8Mach;
	u8* 	pu8CmpPtr;
	
	pu8Mask = (u8*)&u32mask;
	pu8Mach = (u8*)&u32mach;
	for (u16ItemCount = 0;u16ItemCount < u16item_num; u16ItemCount++)
	{
		if (b8Increase==TRUE)
		{
			pu8CmpPtr = (u8*)(u32address + (u16item_size*u16ItemCount));
		}
		else
		{
			pu8CmpPtr = (u8*)(u32address - (u16item_size*u16ItemCount));
		}
		if (((*pu8CmpPtr&*pu8Mask)		==(*pu8Mach&*pu8Mask))&&
			((*(pu8CmpPtr+1)&*(pu8Mask+1))==(*(pu8Mach+1)&*(pu8Mask+1)))&&
			((*(pu8CmpPtr+2)&*(pu8Mask+2))==(*(pu8Mach+2)&*(pu8Mask+2)))&&
			((*(pu8CmpPtr+3)&*(pu8Mask+3))==(*(pu8Mach+3)&*(pu8Mask+3))))
		{
		#ifdef DVB_DRAM_DEBUG			
			DBDRAM_DBG(("\n> u16ItemCount [%08X]= %d",pu8CmpPtr,u16ItemCount));
			DBDRAM_DBG(("\n>> [%02X] %02X ==  [%02X] %02X",*pu8CmpPtr,(*pu8CmpPtr&*pu8Mask),*pu8Mach,(*pu8Mach&*pu8Mask)));
			DBDRAM_DBG(("\n>> [%02X] %02X ==  [%02X] %02X",*(pu8CmpPtr+1),(*(pu8CmpPtr+1)&*(pu8Mask+1)),*(pu8Mach+1),(*(pu8Mach+1)&*(pu8Mask+1))));
			DBDRAM_DBG(("\n>> [%02X] %02X ==  [%02X] %02X",*(pu8CmpPtr+2),(*(pu8CmpPtr+2)&*(pu8Mask+2)),*(pu8Mach+2),(*(pu8Mach+2)&*(pu8Mask+2))));
			DBDRAM_DBG(("\n>> [%02X] %02X ==  [%02X] %02X",*(pu8CmpPtr+3),(*(pu8CmpPtr+3)&*(pu8Mask+3)),*(pu8Mach+3),(*(pu8Mach+3)&*(pu8Mask+3))));
		#endif			
			break;		
		}
	}
	return u16ItemCount;
}
/*******************************************************************************************/
u16 DVB_DramCount(u32 u32address, u16 u16item_size, u16 u16item_num, u32 u32mask, u32 u32mach)
{
	u16 	u16ItemCount;
	u16 	u16FindItemCount;
	u8*		pu8Mask;
	u8*		pu8Mach;
	u8* 	pu8CmpPtr;
		
	pu8Mask = (u8*)&u32mask;
	pu8Mach = (u8*)&u32mach;
	u16FindItemCount = 0;
	for (u16ItemCount = 0;u16ItemCount < u16item_num; u16ItemCount++)
	{		
		pu8CmpPtr = (u8*)(u32address + (u16item_size*u16ItemCount));
		if (((*pu8CmpPtr&*pu8Mask)		==(*pu8Mach&*pu8Mask))&&
			((*(pu8CmpPtr+1)&*(pu8Mask+1))==(*(pu8Mach+1)&*(pu8Mask+1)))&&
			((*(pu8CmpPtr+2)&*(pu8Mask+2))==(*(pu8Mach+2)&*(pu8Mask+2)))&&
			((*(pu8CmpPtr+3)&*(pu8Mask+3))==(*(pu8Mach+3)&*(pu8Mask+3))))
		{
		#ifdef DVB_DRAM_DEBUG			
			DBDRAM_DBG(("\n> u16ItemCount [%08X]= %d",pu8CmpPtr,u16ItemCount));
			DBDRAM_DBG(("\n>> [%02X] %02X ==  [%02X] %02X",*pu8CmpPtr,(*pu8CmpPtr&*pu8Mask),*pu8Mach,(*pu8Mach&*pu8Mask)));
			DBDRAM_DBG(("\n>> [%02X] %02X ==  [%02X] %02X",*(pu8CmpPtr+1),(*(pu8CmpPtr+1)&*(pu8Mask+1)),*(pu8Mach+1),(*(pu8Mach+1)&*(pu8Mask+1))));
			DBDRAM_DBG(("\n>> [%02X] %02X ==  [%02X] %02X",*(pu8CmpPtr+2),(*(pu8CmpPtr+2)&*(pu8Mask+2)),*(pu8Mach+2),(*(pu8Mach+2)&*(pu8Mask+2))));
			DBDRAM_DBG(("\n>> [%02X] %02X ==  [%02X] %02X",*(pu8CmpPtr+3),(*(pu8CmpPtr+3)&*(pu8Mask+3)),*(pu8Mach+3),(*(pu8Mach+3)&*(pu8Mask+3))));
		#endif			
			u16FindItemCount++;		
		}
	}
	return u16FindItemCount;
}
/*******************************************************************************************/
u16 DVB_DramBuildIAT( u32 u32DP, u8 u8RecordSize,u16 u16NumOfRecord, u32 u32IAT, u16 u16NumOfIAT, u8 u8SubID )
{
#if 0	
	if((u32DP&0x03)!=0 ||
		(u8RecordSize&0x03)!=0 ||
		(u32IAT&0x03)!=0)
	{
		_alignment_error();
		return 0xffff;
	}
    __dwW99AVCmdArg[0]= 6;   	// number of ARG0~ARG15
    __dwW99AVCmdArg[1]= 0x10; 	// CMDARG
    __dwW99AVCmdArg[2]= u32address;
    __dwW99AVCmdArg[3]= u32mask;
    __dwW99AVCmdArg[4]= u32mach;
    __dwW99AVCmdArg[5]= b8Increase;
    __dwW99AVCmdArg[5]= (__dwW99AVCmdArg[5]<<16)+u16item_size;
    __dwW99AVCmdArg[6]= u16item_num;

//    DBDRAM_DBG(("MMMMMM%lx, %lx, %lx, %lx, %lx....\n", __dwW99AVCmdArg[2], __dwW99AVCmdArg[3], __dwW99AVCmdArg[4], __dwW99AVCmdArg[5], __dwW99AVCmdArg[6] ));

    if( W99AV_CommandN(0x1c) )
    {
        W99AV_OutIndex(0x10000005);
        u32address = W99AV_InData();
//        DBDRAM_DBG(("%lx\n", u32address));

        u16item_num = u32address>>16;
    }
#endif        
	return 0xffff;
}
/*******************************************************************************************/
#if 0
void _dram_test(u8 u8Mode)
{
	u8*		pu8Addr;
	u32		u32Address;	
	u32		u32Address2;
	u32		u32Test;
	u32		u32Test2;
	u16		u16RetValue;
	u8		au8Test[4];
	u32Address = 0x40200000;
	u32Address2 = 0x40100000;
	switch(u8Mode)
	{
		default:
		case 0: // Address Test // Dram Set
			DVB_DramSet(u32Address,0xFF,64);
			pu8Addr = (u8*)u32Address;
			*(pu8Addr) = 1;
			pu8Addr = (u8*)u32Address + 1;
			*(pu8Addr) = 2;
			pu8Addr = (u8*)u32Address + 2;
			*(pu8Addr) = 3;
			pu8Addr = (u8*)u32Address + 3;
			*(pu8Addr) = 4;
			pu8Addr = (u8*)u32Address + 4;
			*(pu8Addr) = 5;
			break;
		case 1: // Write Test
			u32Test		= 0x05060708;
			au8Test[0] 	= 0x09;
            au8Test[1] 	= 0x0A;
            au8Test[2] 	= 0x0B;
            au8Test[3] 	= 0x0C;
            DVB_DramWrite(u32Address, (u8*)&u32Test, 4);            
            DVB_DramWrite(u32Address+4,(u8*) au8Test, 4);
			break;
		case 2: // Read Test
			u32Test 	= 0x00;
			au8Test[0] 	= 0x00;
            au8Test[1] 	= 0x00;
            au8Test[2] 	= 0x00;
            au8Test[3] 	= 0x00;
            DVB_DramRead(u32Address, (u8*)&u32Test, 4);            
            DBDRAM_DBG(("\n dram read: %08X\n", u32Test));
            DVB_DramRead(u32Address+1, (u8*)&u32Test, 4);
            DBDRAM_DBG(("\n dram read: %08X\n", u32Test));            
            DVB_DramRead(u32Address+2, (u8*)&u32Test, 4);
            DBDRAM_DBG(("\n dram read: %08X\n", u32Test));            
            DVB_DramRead(u32Address+3, (u8*)&u32Test, 4);
            DBDRAM_DBG(("\n dram read: %08X\n", u32Test));            
            DVB_DramRead(u32Address+4, (u8*)au8Test, 4);
            DBDRAM_DBG(("\n dram read: %02X %02X %02X %02X\n", 
            		au8Test[0],au8Test[1],au8Test[2],au8Test[3]));		
			break;
		case 3: // Dram Copy	
			DVB_DramCopy(u32Address+32,u32Address,16);							
			DVB_DramDump(u32Address,64);			
			break;					
		case 4:	// Dram Search
		    DVB_DramSet(u32Address2,0x00,0x1000);

		    u32Test		= 0x6d616361;
		    DVB_DramWrite(u32Address2+(36*3), (u8*)&u32Test, 4);
		    u32Test		= 0x75330000;
		    DVB_DramWrite(u32Address2+(36*3)+4, (u8*)&u32Test, 4);

		    u32Test		= 0x6d616361;
		    DVB_DramWrite(u32Address2+(36*5), (u8*)&u32Test, 4);
		    u32Test		= 0x75360000;
		    DVB_DramWrite(u32Address2+(36*5)+4, (u8*)&u32Test, 4);

			u32Test = 0x61636100;
			u32Test2 = 0xFFFFFF00;
			u16RetValue= 0;
			u16RetValue = DVB_DramSearch(u32Address2+1,36,6,u32Test2,u32Test,TRUE);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			u32Test = 0x6d616361;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramSearch(u32Address2+1,36,6,u32Test2,u32Test,TRUE);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			u32Test = 0x6d616361;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramSearch(u32Address2,36,6,u32Test2,u32Test,TRUE);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			u32Test = 0x63617531;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramSearch(u32Address2+2,36,6,u32Test2,u32Test,TRUE);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			u32Test = 0x63617533;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramSearch(u32Address2+2,36,6,u32Test2,u32Test,TRUE);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			u32Test = 0x63617535;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramSearch(u32Address2+2,36,6,u32Test2,u32Test,TRUE);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			u32Test = 0x63617532;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramSearch(u32Address2+2,36,6,u32Test2,u32Test,TRUE);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			u32Test = 0x63617534;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramSearch(u32Address2+2,36,6,u32Test2,u32Test,TRUE);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			u32Test = 0x63617536;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramSearch(u32Address2+2,36,6,u32Test2,u32Test,TRUE);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			break;	
		case 5:	// Dram Count
		    DVB_DramSet(u32Address2,0x00,0x1000);
		
		    u32Test		= 0x6d616361;
		    DVB_DramWrite(u32Address2+(36*2), (u8*)&u32Test, 4);
		    u32Test		= 0x75330000;
		    DVB_DramWrite(u32Address2+(36*2)+4, (u8*)&u32Test, 4);

		    u32Test		= 0x6d616361;
		    DVB_DramWrite(u32Address2+(36*5), (u8*)&u32Test, 4);
		    u32Test		= 0x75360000;
		    DVB_DramWrite(u32Address2+(36*5)+4, (u8*)&u32Test, 4);

			u32Test = 0x61636100;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramCount(u32Address2+1,36,6,u32Test2,u32Test);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			
			u32Test = 0x6d616361;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramCount(u32Address2+1,36,6,u32Test2,u32Test);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			
			u32Test = 0x6d616361;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramCount(u32Address2,36,6,u32Test2,u32Test);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			
			u32Test = 0x63617531;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramCount(u32Address2+2,36,6,u32Test2,u32Test);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			
			u32Test = 0x63617533;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramCount(u32Address2+2,36,6,u32Test2,u32Test);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			
			u32Test = 0x63617535;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramCount(u32Address2+2,36,6,u32Test2,u32Test);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			
			u32Test = 0x63617532;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramCount(u32Address2+2,36,6,u32Test2,u32Test);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			
			u32Test = 0x63617534;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramCount(u32Address2+2,36,6,u32Test2,u32Test);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			
			u32Test = 0x63617536;
			u32Test2 = 0xFFFFFFFF;
			u16RetValue= 0;
			u16RetValue = DVB_DramCount(u32Address2+2,36,6,u32Test2,u32Test);
			DBDRAM_DBG(("\n>> Dram Search Ret = %d",u16RetValue));
			break;						
		case 7: // Dump Test			
			u32Address = (u32)0x40160000;
			DVB_DramSet(u32Address,0x00,0x1000);
			break;
		case 8:
			u32Address = (u32)0x40160000;
			DVB_DramDump(u32Address,0x1000);			
			break;			
		case 9: // Dump Test			
			DVB_DramDump(u32Address,128);			
			DVB_DramDump(u32Address2,256);			
			break;

	}	
}
#endif 
/*******************************************************************************************/

⌨️ 快捷键说明

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