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

📄 vpc3230.c

📁 MCS51源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include     "vpc3230.h"
/***********************************************************************************/
/*********本文件VPC3230.C用于控制彩色解码电路 **************/
/***********************************************************/
WORD code VpcPalStandard[] =
{
        0x21, 0x035F,
        0x28, 0x0088, 
        0x29, 0x0358  
};
WORD code VpcNtscStandard[] =
{
        0x21, 0x0359,
        0x28, 0x0088,
        0x29, 0x0358
};
BYTE code VPC_byte_data[][2] =
{
        0X20, 0X02,  
        0X30, 0X36,   
        0x91, 0x00,  
};
WORD code VPC_word_data[][2] =
{
        0x1f, 0x0e00,     
        0x21, 0X0359,    
        0x22, 0x0087,    
        0X26, 0X0064,   
        0x27, 0x00b0,
        0X28, 0X0088,   
        0X29, 0X0359,    
        0x90, 0x0a28,   //03d2,OSD color
        0x92, 0x3060,   //1c44,OSD brightness
 
};
WORD code VPC_FP_data[][2] =
{
        0X0039, 0X0019,          
        0X003A, 0X0005,        
        0X0042, 0X02cf,         
        0X0043, 0X0610,        
        0X0040, 0X00c0,       
        0X0065, 0X0000,         
        0X0066, 0X0000,        
        0X006D, 0X0005,    //0005    
        0X0023, 0X0f80,         
        0X0020, 0X0021,        
        0x0148, 0x007f
};
/***********************************************************/
/**********写一个字节数据到VPC3230**************************/
/*形参数据:sub_address=VPC3230寄存器地址                   */
/*                 datum=写如寄存器的数据                                               */
/*返回值:  无                                                                                 */
/**********************************************************/
void WriteI2cToVpcByte(BYTE sub_address, BYTE datum)
{
     write_to_i2c(WRITE_3230, sub_address, 1, &datum);
}
/***********************************************************/
/**********写一个字数据到VPC3230  **************************/
/*形参数据:sub_address=VPC3230寄存器地址                   */
/*                 datum=写如寄存器的数据                                               */
/*返回值:  无                                                                                 */
/**********************************************************/
void WriteI2cToVpcWord(BYTE sub_address, WORD datum)
{
     BYTE temp[2];
     temp[1] =(BYTE)(datum & 0X00ff);
     datum >>=8;
     temp[0] =(BYTE)(datum & 0X00ff);
     write_to_i2c(WRITE_3230, sub_address, 2, temp);
}
/***********************************************************/
/**********写一个字数据到VPC3230'FP*************************/
/*形参数据:FP_address=VPC3230 FP寄存器地址                */
/*                 datum=写如寄存器的数据                                               */
/*返回值:  无                                                                                 */
/**********************************************************/
void Write3230Fp(WORD FP_address, WORD FP_data)
{
     BYTE temp[2];
     temp[1] = (BYTE)(FP_address & 0x00ff);
     FP_address >>= 8;
     temp[0] = (BYTE)(FP_address & 0x00ff);
     write_to_i2c(WRITE_3230, FP_WR, 2, temp);
     temp[1] = (BYTE)(FP_data & 0x00ff);
     FP_data >>= 8;
     temp[0] = (BYTE)(FP_data  & 0x00ff);
     write_to_i2c(WRITE_3230, FP_RW_DATA, 2, temp);
}
/***********************************************************/
/**********从VPC3230 FP中读一个字  ************************/
/*形参数据:FP_address=VPC3230 FP寄存器地址                */
/*返回值: FP 中读出的数据                                   */
/**********************************************************/
WORD ReadOneWordFromVpcfp(WORD FP_address)
{
     BYTE temp[2];
     WORD datum;
     temp[1] = (BYTE)(FP_address & 0x00ff);
     FP_address >>=0x08;
     temp[0] = (BYTE)(FP_address & 0x00ff);
     write_to_i2c(WRITE_3230, FP_RD, 2, temp);
     read_from_i2c_2b(READ_3230, FP_RW_DATA, temp);
     datum = (WORD)(temp[0])*256+temp[1];
     return datum;
}
/************************************************************************/
/***************初始化VPC3230 IC(刚上电时)                             */
/*形参数据:无,返回值:无                                                                                    */
/************************************************************************/
void Init_3230D(void)
{
     IBYTE i;
     IBYTE adata[3];
     for(i=0; i<sizeof(VPC_byte_data)/2; i++)
       WriteI2cToVpcByte(VPC_byte_data[i][0], VPC_byte_data[i][1]);
     for(i=0; i<sizeof(VPC_word_data)/4; i++)
       WriteI2cToVpcWord(VPC_word_data[i][0],VPC_word_data[i][1]);
     for(i=0; i<sizeof(VPC_FP_data)/4; i++)
       Write3230Fp(VPC_FP_data[i][0], VPC_FP_data[i][1]);
     for(i=0;i<=2;i++)
       read_from_i2c(READ_EEPROM,ANALOG_2402+i,adata+i);
     Write3230Fp(0x0052, adata[0]&0x00ff);
     Write3230Fp(0x0053, adata[1]&0x00ff);
     Write3230Fp(0x0030, ((WORD)adata[2])*0x0040);
     Write3230Fp(0x0040, 0x0000);
}
/*************************************************************/
/********* Static Switch Mode (k=0 or k=64)            *******/
/*****YCbCr_mix=(k*YCbCr_main+(64-k)*YCbCr_cip)/64          **/
/***** Parameter x=0,k=64 force YCbCr_main             *******/
/***** Parameter x=1,k=0 force YCbCr_cip             *******/
/***this subroutine is used to handle DVD component signal ***/
/*************************************************************/
void StaticSwitchMode(void)
{
     WriteI2cToVpcByte(0x94, 0x00);   //SELLIN=0;RGBDLY=0;
     WriteI2cToVpcByte(0x95, 0x00);   //FBMODE=11;fb=0
     WriteI2cToVpcByte(0x96, 0x84);   //84no OSD and select DVD component
}
/*************************************************************/
/** Static Mixer Mode,k=FBGAIN*(31-FBOFFS)+32, 0=<k<=64 ******/
/*****YCbCr_mix=(k*YCbCr_main+(64-k)*YCbCr_cip)/64          **/
/***this subroutine is statically mixed YCbCr_main  **********/
/***and YCbCr_cip, the mixer operates independently of the ***/
/*** FastBlank input.FBOFFS<=31,FBGAIN=0..7 as rounding ******/
/**** this subroutine is used to select OSD and no DVD  ******/
/*************************************************************/
void StaticMixerMode(void)
{
     WriteI2cToVpcByte(0x94, FBGAIN*16);     //SELLIN=0;RGBDLY=0;
     WriteI2cToVpcByte(0x95, FBOFFS|0x40);   //FBMODE=0x40,fb active
     WriteI2cToVpcByte(0x96, 0x62);          //FBCLP=1,fb=31-FBOFFS
}    
/*************************************************************/
/***** Dynamic Mixer Mode(linear mixing coefficient is *******/
/***** used to insert a fullscreen video signal        *******/
/***** k=FBGAIN*(FB-FBOFFS)+32                         *******/
/*****YCbCr_mix=(k*YCbCr_main+(64-k)*YCbCr_cip)/64          **/
/*************************************************************/
void DynamicLinearMixerMode(void)
{
     WriteI2cToVpcByte(0x94, FBGAIN*16); //SELLIN=0;RGBDLY=0;
     WriteI2cToVpcByte(0x95, FBOFFS|0x40);      //FBMODE=0x40,fb active
     WriteI2cToVpcByte(0x96, 0x42);   //FBCLP=0,fb normal,ADC extend +3db
}
/*************************************************************/
/***** Dynamic Mixer Mode(non-linear mixing coefficient is ***/
/***** well-suited to insert FastBlank related signal ********/
/***** like text  kl=FBGAIN*(FB-FBOFFS)+32,knl=F(kl)   *******/
/*****YCbCr_mix=(knl*YCbCr_main+(64-knl)*YCbCr_cip)/64      **/
/*************************************************************/
void DynamicNonLinearMixerMode(void)
{
     WriteI2cToVpcByte(0x94, FBGAIN*16+0x03); //SELLIN=1;RGBDLY=1;
     WriteI2cToVpcByte(0x95, FBOFFS|0x40);      //FBMODE=0x40,fb active
     WriteI2cToVpcByte(0x96, 0x42);   //FBCLP=0,fb normal,ADC extend +3db
}
/***************************************************************/
/****  select mixer operate mode between OSD and YCbCr_main ****/
/****  x=0   static mixer mode                              ****/
/****  x=1  Dynamic linear mixer mode                       ****/
/****  x=2  Dynamic non-linear mixer mode                   ****/
/***************************************************************/
void SelectMixMode(BYTE x)
{
     if(x==0)
       StaticMixerMode();
     else if(x==1)
       DynamicLinearMixerMode();
     else if(x==2)
       DynamicNonLinearMixerMode();
     else if(x==3)
       StaticSwitchMode();
     else
      _nop_();
}
/***********************************************************/
/*自动彩色制式识别                                         */
/*形参数据:ColorOnOff=自动彩色制式识别开关。1:开,0=关   */
/***********************************************************/
void VpcAutoColor(BOOL ColorOnOff)
{

⌨️ 快捷键说明

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