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

📄 tvp5150.c

📁 在海尔的DM642开发板实现RF5框架
💻 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 + -