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

📄 tvp6000.c

📁 在海尔的DM642开发板实现RF5框架
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 *  Copyright 2003 by Texas Instruments Incorporated.
 *  All rights reserved. Property of Texas Instruments Incorporated.
 *  Restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 *  
 */
/* "@(#) DDK 1.10.00.23 07-02-03 (ddk-b12)" */
/********************************************************************************/
/* tvp6000edc.c file */
/********************************************************************************/
#include <std.h>        
#include <csl_stdinc.h>
#include <csl_i2c.h>
#include <edc.h>
#include <tvp6000.h>

#include "_iic.h"
#include "_tvp6000.h"   

/* local functions declaration */
static void InitTVP6000(void);
static void PowerdownTVP6000(Bool powerDownEnable);
static void ResetTVP6000(void);
static void SetTVP60002XScale(TVP6000_ConfParams * parameters);
static void SetTVP6000Caption(TVP6000_ConfParams * parameters);
static void SetTVP6000AnalogFmat(TVP6000_ConfParams * parameters);
static void SetTVP6000UseClrBAR(TVP6000_ConfParams * parameters);
static void SetTVP6000UserDef(TVP6000_ConfParams * parameters);
static Int TVP6000_close(EDC_Handle handle);
static Int TVP6000_ctrl(EDC_Handle handle, TVP6000_Cmd cmd, Arg param);
static EDC_Handle TVP6000_open(String devName, Arg optArg);


EDC_Fxns TVP6000_Fxns = {
    TVP6000_open,
    TVP6000_close,
    TVP6000_ctrl
};

/* local variables and arrays */
static I2C_Handle hI2C = INV;
/*
*=====set tvp6000 to diaplay 2x scale===*
*/
static void SetTVP60002XScale(TVP6000_ConfParams * parameters)
{
	Uint8 RegParam;
	unsigned int OrigiSizeW, OrigiSizeH;
	Uint8 temp1,temp2,temp3,ratio;
	//set register 0x90h SCM to scale display
	RegParam = TVP6000_NTSC_2XSCALE;
	_IIC_write(hI2C, _TVP6000_IICADDR, TVP6000_SCM_Reg, &RegParam, 1);
	/*=====Tell tvp6000 our original size======*/
	//get original image size
	OrigiSizeW = parameters->SrcImgWeight;
	OrigiSizeH = parameters->SrcImgHeight;
	temp1 = (OrigiSizeH & 0xff);
	temp2 = (OrigiSizeH & 0xff00) >> 8;
/*	temp1 =0x00;*/
	
	//set this information into tvp6000, its register is 8 bit wide
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_SLPF_Reg, &temp1, 1);

	temp3 = (OrigiSizeW & 0xff);
/*	temp3=0x00;*/
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_SPPL_Reg, &temp3, 1);
	temp1 = (OrigiSizeW & 0xff00) >> 8;
	temp3 = (temp2 & 0x0f) & ((temp1 & 0x0f) << 4);
	
	//set the MSB 
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_SLPH_Reg, &temp3, 1);
	/*=======Tell Tvp6000 the 2X scale size=====*/
	OrigiSizeW = OrigiSizeW*2;
	OrigiSizeH = OrigiSizeH*2;
	temp1 = (OrigiSizeH & 0xff);
	temp2 = (OrigiSizeH & 0xff00) >> 8;
	//set this information into tvp6000, its register is 8 bit wide
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_DLPF_Reg, &temp1, 1);
	temp3 = (OrigiSizeW & 0xff);
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_DPPL_Reg, &temp3, 1);
	temp1 = (OrigiSizeW & 0xff00) >> 8;
	temp3 = (temp2 & 0x0f) & ((temp1 & 0x0f) << 4);
	//set the MSB 
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_DLPH_Reg, &temp3, 1);
	/*=======Set ratio=====*/
	ratio = 0x12; //we use 2X scale, so the ratio = ROUND((src/des-1)*2^16);
	temp1 = 0x00; //the MSB of ratio registers.
/*	ratio=0x00;*/
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_VDTAL_Reg, &ratio, 1);
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_VDTAH_Reg, &temp1, 1);
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_HDTAL_Reg, &ratio, 1);
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_HDTAH_Reg, &temp1, 1);

	
}

/*
 * ======== set caption information of TVP6000 ========
 */
static void SetTVP6000Caption(TVP6000_ConfParams * parameters)
{
	Uint8 RegParam;
	Uint8 *CaptionData;
  /*  Uint8 Param;*/
	CaptionData = parameters->Caption;
	RegParam = TVP6000_NTSC_CaptionON;
	//enable caption
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_RCM_L21_Reg, &RegParam, 1);

	//write caption data
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_Line21_O0_Reg, CaptionData, 1);
	
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_Line21_O1_Reg, CaptionData++, 1);
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_Line21_E0_Reg, CaptionData++, 1);
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_Line21_E1_Reg, CaptionData++, 1);
/*	Param=TVP6000_NTSC_LINE21O0;
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_Line21_O0_Reg, &Param, 1);

    Param=TVP6000_NTSC_LINE21O1;
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_Line21_O1_Reg, &Param,1);
	
    Param=TVP6000_NTSC_LINE21e0;
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_Line21_E0_Reg, &Param,1);
	Param=TVP6000_NTSC_LINE21e1;
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_Line21_E1_Reg, &Param,1);*/
	
}

/*
 * ======== set TVP6000 out put foramt========
 */

static void SetTVP6000AnalogFmat(TVP6000_ConfParams * parameters)
{
	Uint8 RegParam;
	RegParam = parameters->AnalogFormt;
	
	if( (RegParam == TVP6000_NTSC_50Hz_COMPOSITE) ||(RegParam == TVP6000_NTSC_50Hz_SVIDEO)
		|| (RegParam == TVP6000_NTSC_60Hz_COMPOSITE) || (RegParam == TVP6000_NTSC_60Hz_SVIDEO))
 /*  RegParam =TVP6000_NTSC_LINE21O0;*/
	_IIC_write( hI2C, _TVP6000_IICADDR, TVP6000_Line21_O0_Reg, &RegParam, 1);
	
}
/*
 * ======== Set if TVP6000 use color bar ========
 */

static void SetTVP6000UseClrBAR(TVP6000_ConfParams * parameters)
{
	Bool IfUseClrBar;
	Uint8 RegParam;
	IfUseClrBar = parameters->useclrbar;
	RegParam = TVP6000_NTSC_ClrBar;
	if (!IfUseClrBar)
	RegParam = TVP6000_NTSC_BT656;
	_IIC_write( hI2C, _TVP6000_IICADDR,TVP6000_F_Control_Reg, &RegParam, 1);
}

/*
 * ======== Set user definations of TVP6000 registers ========
 */

static void SetTVP6000UserDef(TVP6000_ConfParams * parameters)
{
	Uint8 RegParam;
	RegParam = TVP6000_NTSC_BT656;
	_IIC_write( hI2C, _TVP6000_IICADDR,TVP6000_F_Control_Reg, &RegParam, 1);
	//set Field length
	RegParam = 0x70;	//TVP6000_NTSC_FLEN
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_FLEN_Reg,&RegParam,1);
	//set field active line 
	RegParam = 0x05;	//TVP6000_NTSC_FAL
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_FAL_Reg,&RegParam,1);
	//set Last active line 
	RegParam = 0x34;	//0x30;	//TVP6000_NTSC_LAL
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_LAL_Reg,&RegParam,1);
	
	RegParam = 0x22;	//0x22;	//TVP6000_NTSC_FLAL
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_FLAL_Reg,&RegParam,1);	
}
/*
 * ======== initTVP6000 ========
 * initialize the TVP6000 in default setup 
 */
static void InitTVP6000(void)
{
    Uint8 param;

	param = TVP6000_NTSC_BT656;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_F_Control_Reg,&param,1);
	
/***************************************************************/	
/***************************************************************/	
/*---(3b -- 3f & 40 -- 4F & 50 -- 59)-----------*
	param = 0x00;
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x3b, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x3c, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x3d, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x3e, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x3f, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x40, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x41, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x42, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x43, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x44, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x45, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x46, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x47, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x48, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x49, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x4a, &param,1);
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x4b, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x4c, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x4d, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x4e, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x4f, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x50, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x51, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x52, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x53, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x54, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x55, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x56, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x57, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x58, &param,1);	
    _IIC_write(hI2C, _TVP6000_IICADDR, 0x59, &param,1);		
***************************************************************/	
/***************************************************************/	
/***************************************************************/	
	param = TVP6000_NTSC_C_PHASE;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_C_Phase_Reg,&param,1);

	param = TVP6000_NTSC_GAINU;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_Gain_U_Reg,&param,1);
	//set gain V
	param = TVP6000_NTSC_GAINV;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_Gain_V_Reg,&param,1);

	//black level 0
	param = TVP6000_NTSC_BLACKLEVEL0;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_BlackLevel1_Reg,&param,1);
	//black level 1
	param = TVP6000_NTSC_BLACKLEVEL1;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_BlackLevel2_Reg,&param,1);

	//set gain Y
	param = TVP6000_NTSC_GAINY;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_Gain_Y_Reg,&param,1);
	
	//X_COLOUR
	param = TVP6000_NTSC_XCOLOR;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_X_Color_Reg,&param,1);
	
    //M_CTRL
	param = TVP6000_NTSC_60Hz_COMPOSITE;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_Mode_Control_Reg,&param,1);
	//set BSTAMP register
	param = TVP6000_NTSC_BSTAMP;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_BSTAMP_Reg,&param,1);
	
	//S_CARR0
	param = TVP6000_NTSC_CARR0;
    _IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_S_CARR0_Reg,&param,1);

⌨️ 快捷键说明

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