📄 tvp5146.c
字号:
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 + -