📄 tvp5150.c
字号:
/*
* Copyright 2003 by Beijing Digipro Incorporated.
* All rights reserved. Property of Beijing Digipro Incorporated.
* Restricted rights to use, duplicate or disclose this code are
* granted through contract.
*
* This driver is writen for our first version DM642 EVM, the two TVP5150 chips
* connected to VP0 and VP1 respectively.
*/
/**************************************************************************/
/* tvp5150.c file */
/**************************************************************************/
#include <std.h>
#include <csl_i2c.h>
#include <csl_stdinc.h>
#include <edc.h>
#include <tvp5150.h>
#include "_iic.h"
#include "_tvp5150.h"
typedef enum {INTERLACED = TRUE, PROGRESSIVE = FALSE} FrameType ;
static void InitTVP5150(Int channel);
static Int TVP5150_ctrl(EDC_Handle handle, TVP5150_Cmd cmd, Arg arg);
static Int TVP5150_close(EDC_Handle handle);
static EDC_Handle TVP5150_open(String devName, Arg optArg);
static void powerdownTVP5150(Int channel, Bool powerDownEnable);
static void ResetTVP5150(Int channel);
EDC_Fxns TVP5150_Fxns = {
TVP5150_open,
TVP5150_close,
TVP5150_ctrl
};
static I2C_Handle hI2C[2] = {INV, INV};
/*
*========power Down and Up Tvp5150
*/
void powerdownTVP5150( Int channel, Bool powerDownEnable)
{
Uint8 addrI2C;
Uint8 powerdownSettings = TVP5150_PowerDn;
/*Put TVP5150 in power down mode */
if(!powerDownEnable) {
powerdownSettings = TVP5150_PowerUp;//0x00;
}
addrI2C = (channel == 0) ? _TVP5150_IIC_ADDR0 : _TVP5150_IIC_ADDR1;
_IIC_write(hI2C[channel], addrI2C,TVP5150_OperaMode_Reg,&powerdownSettings,1);
}
/*
* ======== initTVP5150Def ========
*/
static void InitTVP5150(Int channel)
{
Uint8 addrI2C;
Uint8 Param;
addrI2C = (channel == 0) ? _TVP5150_IIC_ADDR0 : _TVP5150_IIC_ADDR1;
//we should set TVP5150's registers as "Video source select"
//"digital video ouput format", all other register can use the default value
Param=TVP5150_Reset;
//reset device first
_IIC_write(hI2C[channel], addrI2C,TVP5150_SoftReset_Reg, &Param,1);
Param=TVP5150_CompositeInputA;
//set vid source
_IIC_write(hI2C[channel], addrI2C,TVP5150_VidSrcSel_Reg,&Param,1);
Param=TVP5150_BT656Out;
//set out put format to BT656
_IIC_write(hI2C[channel], addrI2C,TVP5150_OutputsDataFormat_Reg,&Param,1);
Param=TVP5150_MisControl_FidEnable;
//enable the HSYNC,VSYNC,FID ENABLE
_IIC_write(hI2C[channel], addrI2C,TVP5150_MisControl_Reg,&Param,1);
Param=TVP5150_ConfigSharePin;
//select output fid
_IIC_write(hI2C[channel], addrI2C,TVP5150_ConfigSharePin_Reg,&Param,1);
//set auto initialize
// Param=TVP5150_AutoInit;
// _IIC_write(hI2C[channel], addrI2C,TVP5150_ConfigSharePin_Reg,&Param,1);
}
/*
* ======== Reset TVP5150 ========
*/
static void ResetTVP5150(Int channel)
{
Uint8 addrI2C;
addrI2C = (channel == 0) ? _TVP5150_IIC_ADDR0 : _TVP5150_IIC_ADDR1;
//reset device first
_IIC_write(hI2C[channel], addrI2C,TVP5150_SoftReset_Reg, (Uint8*)TVP5150_Reset,1);
}
/*
* ======== TVP5150_close ========
*/
static Int TVP5150_close(EDC_Handle handle)
{
Int devId = (int)handle;
/*First Check if the Handle is correct */
if(devId == 0 || devId == 1) {
/*Put _TVP5150 in power down mode */
powerdownTVP5150(devId, TRUE);
return EDC_SUCCESS;
}
else {
return EDC_FAILED;
}
}
/*
* ======== TVP5150_ctrl ========
*/
static Int TVP5150_ctrl(EDC_Handle handle, TVP5150_Cmd cmd, Arg arg)
{
Int devId = (int)handle;
Uint8 addrI2C;
Uint8 Parameters;
Int i = 0;
addrI2C = (devId == 0) ? _TVP5150_IIC_ADDR0 : _TVP5150_IIC_ADDR1;
/*First Check if the Handle is correct */
if(devId != 0 && devId != 1)
{
return EDC_FAILED;
}
switch(cmd)
{
case EDC_CONFIG:
{
TVP5150_ConfParams *tvp5150Params = (TVP5150_ConfParams *)arg;
hI2C[devId] = tvp5150Params->hI2C;
InitTVP5150(devId);
for(i = 0; i< 10000; i++);
InitTVP5150(devId);
for(i = 0; i< 10000; i++);
}
break;
case EDC_RESET:
ResetTVP5150(devId);//add our reset function here
break;
case TVP5150_SET_POWERDOWN:
powerdownTVP5150(devId, TRUE);
break;
case TVP5150_SET_POWERUP:
powerdownTVP5150(devId, FALSE);
break;
case TVP5150_SET_Brightness:
{
TVP5150_ConfParams *tvp5150Params = (TVP5150_ConfParams *)arg;
Parameters = tvp5150Params->Brightness;
_IIC_write(hI2C[devId],
addrI2C,TVP5150_Brightness_Reg, &Parameters,1);
}
break;
case TVP5150_SET_Contrast:
{
TVP5150_ConfParams *tvp5150Params = (TVP5150_ConfParams *)arg;
Parameters = tvp5150Params->Contrast;
_IIC_write(hI2C[devId],
addrI2C,TVP5150_Contrast_Reg, &Parameters,1);
}
break;
case TVP5150_SET_Hue:
{
TVP5150_ConfParams *tvp5150Params = (TVP5150_ConfParams *)arg;
Parameters = tvp5150Params->Hue;
_IIC_write(hI2C[devId], addrI2C,TVP5150_Hue_Reg, &Parameters,1);
}
break;
case TVP5150_SET_Saturation:
{
TVP5150_ConfParams *tvp5150Params = (TVP5150_ConfParams *)arg;
Parameters = tvp5150Params->Saturation;
_IIC_write(hI2C[devId], addrI2C,TVP5150_Hue_Reg, &Parameters,1);
}
break;
case TVP5150_SET_VSRC:
{
TVP5150_ConfParams *tvp5150Params = (TVP5150_ConfParams *)arg;
Parameters = tvp5150Params->VidSource;
_IIC_write(hI2C[devId], addrI2C,TVP5150_Hue_Reg, &Parameters,1);
}
break;
case TVP5150_SET_OutFormat:
{
TVP5150_ConfParams *tvp5150Params = (TVP5150_ConfParams *)arg;
Parameters = tvp5150Params->OutFormat;
_IIC_write(hI2C[devId], addrI2C,TVP5150_Hue_Reg, &Parameters,1);
}
break;
default:
break;
}
return EDC_SUCCESS;
}
/*
* ======== TVP5150_open ========
*/
static EDC_Handle TVP5150_open(String devName, Arg optArg)
{
Int devId;
/* Check if the addresse is correct */
if(devName[0] != '/') {
devId = -1;
} else if(devName[1] == '0') {
devId = 0;
} else if(devName[1] == '1'){
devId = 1;
} else {
devId = -1;
}
return (EDC_Handle)devId;
}
/**************************************************************************/
/* End of file */
/**************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -