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

📄 adv7175.c

📁 视频601芯片的驱动源码,你可以完全掌控该芯片了,对于其它多媒体芯片的设计具有参考价值
💻 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 + -