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

📄 vpc3230.c

📁 一个LCD TV的源程序, 用的是realtek的IC
💻 C
字号:
/*********************************************************************

      COPYRIGHT  (C)  Himax Technologies, Inc.

      File name     : VPC3230D.C     

      Description   : Video Decorder VPC3230D

      Author        : Nice Chen

      Create date   : 2004/10/01

      Modifications :


*********************************************************************/

#define _VPC3230_C

/********************** Include Section *****************************/

#include "vpc3230.h"
#include "i2c_control.h"
#include "rs232.h"
#include "main.h"

/**************** Function Implement Section ************************/

/* ================================================================
    Name    : init_VPC3230D
    Purpose : initial vpc3230 video decorder
    Passed  : None               	
    Notes   : None
   ================================================================ */ 

/* ================================================================
    Name    : init_VPC3230D
    Purpose : initial vpc3230 video decorder
    Passed  : None               	
    Notes   : None
   ================================================================ */ 

void init_VPC3230D(void)
{
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0021,0x0526);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0069,0x002a);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x006a,0x0aab);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x006d,0x0005);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0041,0x0000);	
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0042,0x02d0);	
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0043,0x0640);	
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0044,0x03c4);	
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0045,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0047,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0048,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0049,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x004a,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x004b,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x004c,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x004d,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x004e,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x004f,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0050,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0052,0x0002);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0053,0x0930);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0040,0x0000);

	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0021,0x0566);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0022,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0020,0x0040);


	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x80, 0x00, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x81, 0x03, 0xe0);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x82, 0x03, 0xe0);
	VPC_Set_1Byte(VPC3230D_A_ADDR, 0x83,0xc7);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x84, 0x00, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x85, 0x00, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x86, 0x00, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x87, 0x00, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x88, 0x00, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x89, 0x00, 0x08);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x8a, 0x00, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x8c, 0x00, 0x00);
	
	Enable_VID_3230();

	VPC_Set_1Byte(VPC3230D_A_ADDR, 0x20, 0x80);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x21, 0x03, 0x59);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x22, 0x00, 0x32);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x23, 0x06, 0x00);

/* ===========================================
	Process 601 or 656
   ------------------------------------------- */		
#if CCIR601==1
	// 601 
	VPC_Set_1Byte(VPC3230D_A_ADDR, 0x24, 0x20);
	Puts_UART("VPC3230 Set to CCIR601\r\n");			
#else
	// 656
	VPC_Set_1Byte(VPC3230D_A_ADDR, 0x24, 0x38);
	Puts_UART("VPC3230 Set to CCIR656\r\n");
#endif
// =============End of 601 or 656 =============	
			
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x26, 0x00, 0x32);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x27, 0x03, 0x20);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x28, 0x00, 0x3c);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x29, 0x00, 0x00);
	VPC_Set_1Byte(VPC3230D_A_ADDR, 0x30, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x8b, 0x00, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x90, 0x05, 0xd2);
	VPC_Set_1Byte(VPC3230D_A_ADDR, 0x91, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x92, 0x16, 0x50);
	VPC_Set_1Byte(VPC3230D_A_ADDR, 0x94, 0xe0);
	VPC_Set_1Byte(VPC3230D_A_ADDR, 0x95, 0x60);
	VPC_Set_1Byte(VPC3230D_A_ADDR, 0x96, 0x40);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0012,0x0200);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0023,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0028,0x08d3);
    VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0029,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x002f,0x0800);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0030,0x0816);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0039,0x0019);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x003a,0x0005);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0055,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0061,0x0036);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0065,0x0ff6);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0066,0x0004);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x006e,0x000b);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x00aa,0x003c);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x00ab,0x029a);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x00ac,0x029a);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x00b5,0x0190);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x00dc,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x00f7,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x00f8,0x0d30);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0148,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0167,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x016c,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x017a,0x067d);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x017d,0x0500);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x22, 0x00, 0x66);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x26, 0x00, 0x00);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x27, 0x00, 0x22);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x28, 0x00, 0x72);
	VPC_Set_2Byte(VPC3230D_A_ADDR, 0x29, 0x03, 0x56);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0148,0x0000);	
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0042,0x02d0);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0043,0x0600);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0040,0x0000);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0069,0x002a);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x006a,0x0aab);
	VPC_FP_Wrt (VPC3230D_A_ADDR, 0x006d,0x0005);
}

/* ================================================================
    Name    : VPC_FP_Wrt 
    Purpose : VPC3230 Fast Processor Write Function
    Passed  : None               	
    Notes   : None
   ================================================================ */ 

Bool VPC_FP_Wrt (Byte DevAdr, Word index, Word val)
{
    Bool iAck;
	Start();	
	iAck = Write(DevAdr);
	if (iAck) 
	{
		iAck = Write(0x37);									
		if (iAck) 
		{ 
			iAck =	Write((Byte)(index>>8));				
			if (iAck) 			
			{
				iAck = Write((Byte)(index));					
				if (iAck) 
				{
					Stop();
					Start();	
					iAck = Write(DevAdr);
					if (iAck)
					{
						iAck = Write(0x38);								
						if (iAck)
						{
							iAck = Write((Byte)(val>>8));					
							if (iAck)
								Write((Byte)(val));								
						}
					}
				}
			}
		}
	}
	Stop();
	return iAck;
}

/* ================================================================
    Name    : VPC_Set_1Byte 
    Purpose : VPC3230 General Register Write Function One Byte
    Passed  : None               	
    Notes   : None
   ================================================================ */ 

Bool VPC_Set_1Byte(Byte DevAdr, Byte index, Byte val)
{
    Bool iAck;	
	Start();	
	iAck = Write(DevAdr);
	if (iAck)
	{ 
		iAck = Write(index);
		if (iAck )		
			Write(val);								
	}
	Stop();
	return iAck;
}


/* ================================================================
    Name    : VPC_Set_2Byte
    Purpose : VPC3230 General Register Write Function Two Byte
    Passed  : None               	
    Notes   : None
   ================================================================ */ 

Bool VPC_Set_2Byte(Byte DevAdr, Byte index, Byte val, Byte val2)
{   
    Bool iAck;	
	Start();	
	iAck = Write(DevAdr);
	if (iAck) 
	{	
		iAck = Write(index);
		if (iAck)
		{
			iAck =Write(val);	
			if (iAck) 
				Write(val2);
		}
	}
	Stop();
	return iAck;
}

/* ================================================================
    Name    : SetVidSRC
    Purpose : Set Vpc3230 Video Path
    Passed  : None               	
    Notes   : None
   ================================================================ */ 

void SetVidSRC( Byte byMode, Byte bySystem )
{		
	switch (byMode)
	{
		case _AV:			
			VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0020,Vid_Comb[bySystem][0]);	 
			VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0021,0x0865); 
			break;

		case _YC:			
			VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0020,Vid_Comb[bySystem][1]);  
			VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0021,0x0866);		
			break;

		// G4 RealChip Board is not support
		/*
		case _Tuner:
			VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0020,Vid_Comb[bySystem][0]);	 
			VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0021,0x0864 );	
			break;

		case _Component: 		
			VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0020,Vid_Comb[bySystem][0]);	 	
			VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0021,0x08e3 );		
			break;	
		*/
	}
}

/* ================================================================
    Name    : Disable_VID_3230
    Purpose : VPC3230 Disable Data Output 
    Passed  : None               	
    Notes   : None
   ================================================================ */ 

void Disable_VID_3230(void)
{
    VPC_FP_Wrt (VPC3230D_A_ADDR, 0x0148,0x0000);
    VPC_Set_2Byte(VPC3230D_A_ADDR, 0x1f, 0x03, 0xc8);
}

/* ================================================================
    Name    : Check_AV_SRC
    Purpose : Toggle VPC3230D to Check if H-Sync is exist ?
    Passed  : None               	
    Notes   : None
   ================================================================ */ 

Bool Check_AV_SRC ( void )
{
	Word status=0;
	Byte  byCnt = 50;
    Byte  byLock = 0;
	
    // Using VPC3230 check H-Sync 50 times
	do 
	{
		VPC_FP_Read(0x0013,&status);
        TMR_wait_1ms(5);
		if (( (status & 0x0007 )== 0x0003 ))		
		{
		    byLock++;
            if (byLock >=3)	
            {
			   return TRUE;
            }	
		}				
	}
	while ((--byCnt) >0);	
	return FALSE;
}

/* ================================================================
    Name    : VPC_FP_Read
    Purpose : Read VPC3230 one Word
    Passed  : None               	
    Notes   : None
   ================================================================ */ 

void VPC_FP_Read(Word index, Word *val)
{
	Start();
	Write(VPC3230D_A_ADDR);
	Write(FPRead);
	Write((Byte)(index>>8));						
	Write((Byte)(index));						
	Stop();
	Start();
	Write(VPC3230D_A_ADDR);
	Write(FPDat);
	Start();
	Write(VPC3230D_A_ADDR+1);
	*val = ReadWord();
	Stop();
}

⌨️ 快捷键说明

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