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

📄 tvp5146.c

📁 IT projecotr reference design.
💻 C
📖 第 1 页 / 共 4 页
字号:
	WorkUint08[0] = VIDEO_STD;
	WorkUint08[1] = (uint08)standard;
	
	RetVal = DEC_i2c_MasterWrite(i2c_port,
	                    (uint16) i2c_addr,
						sizeof(WorkUint08),	/* num write bytes */
						WorkUint08,
						0,				/* byte delay */
						1000,			/* timeout */
						&numWritten);
	
	
	return RetVal;
}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_SetAutoStandard
//
//@Description :: TVP51xx Video Decoder Set AutoSwitch
//
//@Parameter   ::
//	uint08 i2c_addr		:	I2C Device Address
//	VideoStdType standard	:	Video Standard
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_SetAutoStandard(  VideoStdTypeEnum standard)
{
	int08  RetVal;
	uint08 WorkUint08[2];
	uint32 numWritten;
	
	WorkUint08[0] = VIDEO_STD;
	WorkUint08[1] = 0x00;
	
	RetVal = DEC_i2c_MasterWrite(i2c_port,
	                    (uint16) i2c_addr,
						sizeof(WorkUint08),	/* num write bytes */
						WorkUint08,
						0,				/* byte delay */
						1000,			/* timeout */
						&numWritten);

	return RetVal;
}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_IsSignalPresent
//
//@Description :: TVP51xx Video Decoder Check if Signal present
//
//@Parameter   ::
//	uint08 i2c_addr	:	I2C Device Address
//	BOOL *signal			:	Signal present status
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_IsSignalPresent(  BOOL *signal)
{
	int08  RetVal;
	uint08 WorkUint08[2];
	uint32 numWritten, numRead;
	
	
	WorkUint08[0] = STATUS1;
	WorkUint08[1] = 0;
	
	RetVal = DEC_i2c_MasterWriteRestartRead(i2c_port,
	                                (uint16)i2c_addr,
									1,					/* num write bytes */
									WorkUint08,			/* write buffer */
									0,					/* write delay */
									1,					/* num read bytes */
									&(WorkUint08[1]),	/* Read data buffer */
									1000,				/* timeout (ms) */
									&numWritten,
									&numRead);
	
	if (RetVal == PASS) {
		// BIT2 is set if vertical lock is established
		*signal = (WorkUint08[1] & 0x04) != 0;
	}
	
	
	return RetVal;
}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_Init
//
//@Description :: TVP51xx Video Decoder initializations (almost the same as DEC_InitCommon)
//
//@Parameter   ::
//	uint08 i2c_addr	:	I2C Device Address
//  I2CPORT i2cport			:	I2C Port 0/1
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_Init( uint08 deci2caddr, I2CPORT i2cport )
{
	int08 RetVal = PASS;
	
	i2c_port = i2cport;
	i2c_addr = deci2caddr;
	I2C_GetSemaphoreID( i2c_port, &i2c_sem );
	


    RetVal = DEC_I2CMasterWriteCmds((uint08 *) &(DEC_InitDataCommon[0]));
	
	return RetVal;
}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_MiscSetup
//
//@Description :: TVP51xx Video Decoder Misc Setup (do nothing)
//
//@Parameter   ::
//	uint08 i2c_addr	:	I2C Device Address
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_MiscSetup(void)
{
	return PASS;
}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_SoftReset
//
//@Description :: TVP51xx Video Decoder Software Reset
//
//@Parameter   ::
//	uint08 i2c_addr	:	I2C Device Address
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_SoftReset(void)
{
	int08  RetVal;
	uint08 WorkUint08[2];
	uint32 numRead, numWritten;
	
	// Read I2C 0x0D
	WorkUint08[0] = CHROM_PROC_CTRL1;
	RetVal = DEC_i2c_MasterWriteRestartRead(i2c_port,
	                                (uint16)i2c_addr,
									1,					/* num write bytes */
									WorkUint08,			/* write buffer */
									0,					/* write delay */
									1,					/* num read bytes */
									&(WorkUint08[1]),	/* Read data buffer */
									1000,				/* timeout (ms) */
									&numWritten,
									&numRead);
	
	// Do the software RESET
	WorkUint08[1] |= 0x10;		// set Color Subcarrier PLL reset bit
	RetVal = DEC_i2c_MasterWrite(i2c_port,
	                    (uint16) i2c_addr,
						sizeof(WorkUint08),	/* num write bytes */
						WorkUint08,
						0,				/* byte delay */
						1000,			/* timeout */
						&numWritten);
	

	
	return RetVal;
}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_GetDeviceID
//
//@Description :: Get device ID
//
//@Parameter   ::
//	uint08 i2c_addr	:	I2C Device Address
//	uint32 *DeviceID		:	pointer to Device ID
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_GetDeviceID(  uint32 *DeviceID)
{
	int08  RetVal;
	uint08 WorkUint08[3];
	uint32 numWritten, numRead;
	
	
	WorkUint08[0] = CHIP_ID_MSB;
	WorkUint08[1] = WorkUint08[2] = 0;
	
	RetVal = DEC_i2c_MasterWriteRestartRead(i2c_port,
	                                (uint16)i2c_addr,
									1,					/* num write bytes */
									WorkUint08,			/* write buffer */
									0,					/* write delay */
									2,					/* num read bytes */
									&(WorkUint08[1]),	/* Read data buffer */
									1000,				/* timeout (ms) */
									&numWritten,
									&numRead);
	
	if (RetVal == PASS) {	
		*DeviceID = WorkUint08[1];
		*DeviceID = (*DeviceID << 8) | WorkUint08[2];
	}
	

	
	return RetVal;
}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_GetSoftwareVersion
//
//@Description :: Get Software version
//
//@Parameter   ::
//	uint08 i2c_addr	:	I2C Device Address
//	uint32 *version			:	pointer to software version
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_GetSoftwareVersion(  uint16 *version)
{
	int08  RetVal;
	uint08 WorkUint08[3];
	uint32 numWritten, numRead;
	
	WorkUint08[0] = ROM_VERSION;
	WorkUint08[1] = WorkUint08[2] = 0;
	
	RetVal = DEC_i2c_MasterWriteRestartRead(i2c_port,
	                                (uint16)i2c_addr,
									1,					/* num write bytes */
									WorkUint08,			/* write buffer */
									0,					/* write delay */
									2,					/* num read bytes */
									&(WorkUint08[1]),	/* Read data buffer */
									1000,				/* timeout (ms) */
									&numWritten,
									&numRead);
	
	if (RetVal == PASS) {
		*version = WorkUint08[1];
		*version = (uint16)((*version << 8) | WorkUint08[2]);
	}
	
	
	return RetVal;
}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_GetConnectorType
//
//@Description :: Get connector type
//
//@Parameter   ::
//	uint08 i2c_addr		:	I2C Device Address
//	SourceType *ConnectorType	:	pointer to connector type
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_GetConnectorType(  DPATH_SOURCE_TYPE_ENUM *ConnectorType)
{
	int08  RetVal;
	uint08 WorkUint08[2];
	uint32 numWritten, numRead;
	
	WorkUint08[0] = INPUT_SELECT;
	RetVal = DEC_i2c_MasterWriteRestartRead(i2c_port,
	                                (uint16)i2c_addr,
									1,					/* num write bytes */
									WorkUint08,			/* write buffer */
									0,					/* write delay */
									1,					/* num read bytes */
									&(WorkUint08[1]),	/* Read data buffer */
									1000,				/* timeout (ms) */
									&numWritten,
									&numRead);
	
	if (RetVal == PASS) {	
		switch (WorkUint08[1] & 0xC0) {
			case 0x40:		// S-VIDEO
				*ConnectorType = SOURCE_SVIDEO;
				break;
				
			case 0x80:		// Component
				break;
				
			case 0xC0:		// SCART
				break;
				
			case 0x00:		// CVBS
				*ConnectorType = SOURCE_COMPOSITE;
			default:
				break;
        }
	}
	
	
	return RetVal;
}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_SelectSVideo
//
//@Description :: Select S-Video
//
//@Parameter   ::
//	uint08 i2c_addr	:	I2C Device Address
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_SelectSVideo(void)
{

	int08  RetVal;
	uint08 WorkUint08[2];
	uint32 numWritten;
	
	
	WorkUint08[0] = INPUT_SELECT;
	WorkUint08[1] = 0x45;			// Select S-Video channel VI_2_B(Y), VI_1_B(C)
	
	RetVal = DEC_i2c_MasterWrite(i2c_port,
	                    (uint16) i2c_addr,
						sizeof(WorkUint08),	/* num write bytes */
						WorkUint08,
						0,				/* byte delay */
						1000,			/* timeout */
						&numWritten);
	
	
	return RetVal;

}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_SelectComposite
//
//@Description :: Select Composite
//
//@Parameter   ::
//	uint08 i2c_addr	:	I2C Device Address
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_SelectComposite(void)
{
	int08  RetVal;
	uint08 WorkUint08[2];
	uint32 numWritten;
	
	
	WorkUint08[0] = INPUT_SELECT;
	WorkUint08[1] = 0x0C;			// Select CVBS channel-4
	
	RetVal = DEC_i2c_MasterWrite(i2c_port,
	                    (uint16) i2c_addr,
						sizeof(WorkUint08),	/* num write bytes */
						WorkUint08,
						0,				/* byte delay */
						1000,			/* timeout */
						&numWritten);
	
	return RetVal;
}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_SelectComponent
//
//@Description :: Select Component
//
//@Parameter   ::
//	uint08 i2c_addr	:	I2C Device Address
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_SelectComponent(void)
{

	int08  RetVal;
	uint08 WorkUint08[2];
	uint32 numWritten;
	
	
	WorkUint08[0] = INPUT_SELECT;
	WorkUint08[1] = 0x94;			// Select component channel VI_1_A(Pb), VI_2_A(Y), VI_3_A(Pr)
	
	RetVal = DEC_i2c_MasterWrite(i2c_port,
	                    (uint16) i2c_addr,
						sizeof(WorkUint08),	/* num write bytes */
						WorkUint08,
						0,				/* byte delay */
						1000,			/* timeout */
						&numWritten);
	
	return RetVal;

}

//-----------------------------------------------------------------------------
//@RoutineName :: DEC_EnableOutput
//
//@Description :: Enable output
//
//@Parameter   ::
//	uint08 i2c_addr	:	I2C Device Address
//
//@Return      :: int08: PASS/FAIL
//-----------------------------------------------------------------------------
int08 DEC_EnableOutput(void)
{
	int08  RetVal;
	uint08 WorkUint08[2];
	uint32 numWritten;

⌨️ 快捷键说明

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