📄 tvp6000.c
字号:
/*
* 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,¶m,1);
/***************************************************************/
/***************************************************************/
/*---(3b -- 3f & 40 -- 4F & 50 -- 59)-----------*
param = 0x00;
_IIC_write(hI2C, _TVP6000_IICADDR, 0x3b, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x3c, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x3d, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x3e, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x3f, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x40, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x41, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x42, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x43, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x44, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x45, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x46, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x47, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x48, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x49, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x4a, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x4b, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x4c, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x4d, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x4e, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x4f, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x50, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x51, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x52, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x53, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x54, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x55, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x56, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x57, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x58, ¶m,1);
_IIC_write(hI2C, _TVP6000_IICADDR, 0x59, ¶m,1);
***************************************************************/
/***************************************************************/
/***************************************************************/
param = TVP6000_NTSC_C_PHASE;
_IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_C_Phase_Reg,¶m,1);
param = TVP6000_NTSC_GAINU;
_IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_Gain_U_Reg,¶m,1);
//set gain V
param = TVP6000_NTSC_GAINV;
_IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_Gain_V_Reg,¶m,1);
//black level 0
param = TVP6000_NTSC_BLACKLEVEL0;
_IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_BlackLevel1_Reg,¶m,1);
//black level 1
param = TVP6000_NTSC_BLACKLEVEL1;
_IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_BlackLevel2_Reg,¶m,1);
//set gain Y
param = TVP6000_NTSC_GAINY;
_IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_Gain_Y_Reg,¶m,1);
//X_COLOUR
param = TVP6000_NTSC_XCOLOR;
_IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_X_Color_Reg,¶m,1);
//M_CTRL
param = TVP6000_NTSC_60Hz_COMPOSITE;
_IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_Mode_Control_Reg,¶m,1);
//set BSTAMP register
param = TVP6000_NTSC_BSTAMP;
_IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_BSTAMP_Reg,¶m,1);
//S_CARR0
param = TVP6000_NTSC_CARR0;
_IIC_write(hI2C, _TVP6000_IICADDR,TVP6000_S_CARR0_Reg,¶m,1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -