📄 adv7175.c
字号:
/*------------------------------------------------------------------------
$Workfile: ADV7175.C $
$Date: 6/20/97 3:46p $
$Revision: 13 $
* Purpose:
* ADV7175 Video output chip support routines.
* Notes:
*
$History: ADV7175.C $
*
* ***************** Version 13 *****************
* User: Stevel Date: 6/20/97 Time: 3:46p
* Updated in $/601cman
* Add new header vlab.h.
*
* ***************** Version 12 *****************
* User: Stevel Date: 8/24/96 Time: 6:59p
* Updated in $/601cman
* Fixed color problem related to sub-carrier freq.
* Minor modification to support RGB video output.
*
* ***************** Version 11 *****************
* User: Dstarr Date: 8/07/96 Time: 1:27p
* Updated in $/601cman
* Support Phillips Mode
*
* ***************** Version 10 *****************
* User: Stevel Date: 7/29/96 Time: 4:58p
* Updated in $/601cman
* Replace RGB constant with (RGB_OUT << 31) in dac_init().
*
* ***************** Version 9 *****************
* User: Stevel Date: 7/29/96 Time: 2:44p
* Updated in $/601cman
* Fix a bug of using wrong constant RGB_OUT in dac_init().
*
* ***************** Version 8 *****************
* User: Stevel Date: 7/25/96 Time: 8:08p
* Updated in $/601cman
* Add code in dac_init() to support RGB video output, change sub-carrier
* Freq. and reprogram RTC bit.
*
* ***************** Version 7 *****************
* User: Stevel Date: 5/17/96 Time: 5:05p
* Updated in $/601cman
* Demo Version.
*
* ***************** Version 6 *****************
* User: Dstarr Date: 4/25/96 Time: 8:55a
* Updated in $/601cman
* Fix intermittant 7175 init error message.
*
* ***************** Version 5 *****************
* User: Dstarr Date: 4/09/96 Time: 9:29a
* Updated in $/601cman
* Made some changes, that upon inspection don't seem to matter. However
* since I tested this version,I'll put it on source control.
*
* ***************** Version 4 *****************
* User: Dstarr Date: 3/13/96 Time: 5:08p
* Updated in $/601cman
* Checked out in lab. 601test plays beauty thru the dll.
*
* ***************** Version 3 *****************
* User: Dstarr Date: 3/12/96 Time: 3:45p
* Updated in $/601cman
* Put declspec(dllexport) on encodernreg, encoderiic and init-7175
* so diagnostic 601test can read back registers and check for correct
* contents. Got a clean link.
*
* ***************** Version 2 *****************
* User: Stevel Date: 3/10/96 Time: 10:18p
* Updated in $/601cman
* Add DLLEXPORT keyword to export function for diagnostic test.
*
* ***************** Version 1 *****************
* User: Stevel Date: 3/06/96 Time: 7:50p
* Created in $/601cman
* Initial release
This code and information is provided "as is" without warranty of any
kind, either expressed or implied, including but not limited to the
implied warranties of merchantability and/or fitness for a particular
purpose.
1996 Analog Devices, Inc.
-------------------------------------------------------------------------*/
#include <stdlib.h>
#include <windows.h>
#include "globsym.h" /* Common symbols */
#include "adv7175.h" /* ADV7175 Register & bit names*/
#include "vlab.h"
#include "i2c.h" /* I2c bus service routines */
#include "vxdmsg.h"
#include "capplybk.h"
#pragma warning(disable : 4273) /* dll export assumed warning. We are
a dll, we always export and never import */
__declspec(dllexport) ADV7175_REG init_7175;
__declspec(dllexport) int encoder_iic = DONTKNOW;
__declspec (dllexport) int encoder_nreg = ALL7175REGS;
DLLEXPORT int dac_init(int vformat, int dir,int output_video)
/******************************************************************
Processing: Copy the initial values from ram into all 7175 registers.
Autodetect 7175 or 7176 Chip. 7176 has fewer registers
(No Macro Vision) and a different IIC bus address.
Inputs: As declared
Outputs: As declared
Side-effects None
*******************************************************************/
{
int rtnvar;
memset (&init_7175,0,sizeof(init_7175)); /* make sure unused bits are 0*/
if (encoder_iic == DONTKNOW)
{
encoder_nreg = ALL7175REGS;
init_7175.chipaddr = CHIP7175; /* 7175 Chip address */
}
else
init_7175.chipaddr = encoder_iic; /* we know what we are doing */
init_7175.subaddr = 0; /* do all the registers */
if (vformat & PAL)
{
init_7175.ModeReg0 = PEDSTAL + WIDE_LFILTER + PALOUT;
//init_7175.SubCarrierFrq = 0x2A098AF2; /* 4.43 Mhz for PAL(BDGH) */
if (dir == S_PlayBack)
init_7175.SubCarrierFrq = 0x2A08A5D8; /* 4.43 Mhz for PAL(BDGH) */
else
init_7175.SubCarrierFrq = 0x2A098ACB; /* 4.43 Mhz for PAL(BDGH) */
}
else
{
init_7175.ModeReg0 = PEDSTAL + WIDE_LFILTER + NTSCOUT;
//init_7175.SubCarrierFrq = 0x21F07BD7; /* 3.579545 Mhz for NTSC */
if (dir == S_PlayBack)
init_7175.SubCarrierFrq = 0x21EFC2FE; /* 3.579545 Mhz (with +300 Hz offset) for NTSC */
else
init_7175.SubCarrierFrq = 0x21F07C1F; /* 3.579545 Mhz for NTSC */
}
if (vformat & PHILLIPS)
init_7175.TimMode0 = TIME_RESET | SLAVE | HVFIELD | PIXELPORT16;
else
init_7175.TimMode0 = TIME_RESET | SLAVE | CCIR656;
// RTC needed to be on during capture in NON-DIGITAL mode !
if ( !(output_video & DIG_VIDEO) && dir == S_Capture)
init_7175.ModeReg2 = RTCO_ACTIVE;
// If Bit 31 is selected, select RGB ouput in ADV7175
if (output_video & (RGB_OUT << 31))
{
init_7175.ModeReg0 |= (RGBOUT|RGBSYN);
init_7175.ModeReg2 &= (~RGBOUT);
}
else
{
// if not RGB mode, use CCIR 601 standard as video output
init_7175.ModeReg2 |= CCIR_601_OUT;
}
rtnvar = rite_i2c_chip (&init_7175,0,encoder_nreg);
if (encoder_iic == DONTKNOW)
{
if (rtnvar == SUCCESS)
{
encoder_iic = CHIP7175;
encoder_nreg = ALL7175REGS;
}
else
{
init_7175.chipaddr = CHIP7176;
rtnvar = rite_i2c_chip (&init_7175,0,ALL7176REGS);
if (rtnvar == SUCCESS)
{
encoder_iic = CHIP7176;
encoder_nreg = ALL7176REGS;
}
else
rtnvar = I2C_BAD_CHIPID;
}
}
init_7175.TimMode0 &= ~TIME_RESET;
rtnvar |= rite_i2c_chip (&init_7175,TIMMODE0,1);
return rtnvar;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -