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

📄 dvgxctrl.c

📁 一个调整ADC gain offset 的程序
💻 C
字号:
#include "mtv415.h"
#include "dvIIC.h"
#include "define.h"
#include"utility.h"
//******************************************************************************
code BYTE acGainTable_2In1[3]=
{
 0x43,
 0x46,
 0x42,
};
code BYTE acGainTable_AFE[3]=
{
 0x42,
 0x4C,
  0x45,
};
code WORD awOffsetTable_2In1[3]=
{
 0x0163,
 0x01b0,
 0x01b0,
};
code WORD awOffsetTable_AFE[3]=
{
 0x019E,
 0x01A6,
 0x01D7,
};

//********************************************************************************
  #ifdef INPUT_480I_SOY
code STRUCT_REGVALUE asGx480I_InitialTable_1[]=
{

0x00,0x7f,	// changed by holy 061117 
0x01,0x60,
0x02,0x00,
0x03,0x80,
0x04,0x1c,
0x05,0x90,
0x06,0xf0,
0x07, 0x84,   
0x20,0x00,
0x21,0x00,
0x22,0x00,
0x23,0x46,
0x24,0x44,
0x25,0x3e,
0x26,0x95,
0x27,0x40,
0x5d,0x7c,
0x5f,0x58,
0x60,0x88,
0x61,0x11,
0x62,0xc4,
0x63,0x04,
0x64,0x01,
0x65,0x0e,
0x66,0x0e,
0x67,0x0e,
0x7d,0x88,
0x7e,0x82,
0x7f,0xa3,
 0x89,0xb8,
 0x8a,0x84,
 0x8b,0x08,
 0x8c,0x04,
 0x8d,0x38,
 0x8e,0x00,
 0x8f,0x00,
 0x90,0x00,
 0x91,0x3c,
 0x92,0x50,
 0x93,0x20,
 0x94,0x10,
 0x95,0x00,
 0x96,0x00,
 0x97,0x30,
 0x98,0xa7,
 0x99,0x10,
 0xe6,0x21,
 0xe7,0x01,
 0xe8,0x33,
 0xe9,0x24,
 0xea,0x65,
 0xeb,0x04,
 0xec,0x38,
 0xed,0xff,
 0xef,0xb0,
 0xf0,0x01,
 0xf1,0x41,
 0xf2,0xc2,
 0xf3,0x20,
 0xf4,0x80,
 0xf5,0x10,
 0xf6,0x42,
 0xfe,0x00,
 0xff,0x41,

/*0x5f, 0x54,       
0x7e, 0xf1,       
0x7f, 0x73,//0x53,
0x89, 0xb8,//0x88,
0xeb, 0x0c,//0x0c,
0xed, 0xff,  //for
0xee, 0x88,       
0xFB, 0x81, 
0xFF, 0x42, 
0x91, 0x5e,       
0xf2, 0xe2,       
0x62, 0xbc,       
0x63, 0x85,       
0x61, 0x44,       
0x64, 0x04,       
0x06, 0x50,       
0x7d, 0xf8,       
0x7e, 0xf1,       
0xe6, 0x99,       
0xfe, 0x00,  
*/

//vertical scaler
0x28, 0xfe,// changed by holy 061117 
0x29, 0x71,// changed by holy 061117 
0x2a, 0x02,// changed by holy 061117 
0x2b, 0xc4,
0x2c, 0x04,
0x2d, 0x40,
0x2e, 0x02,
0x2f, 0xf8,
0x30, 0x03,
0x31, 0x12,// changed by holy 061118 
0x32, 0x12,
0x33, 0xcf,//0xc9,// changed by holy 061118 
0x34, 0x00,
0x45, 0x87,
0x48, 0xf1,
0x59, 0x03,
0x55, 0xf3,

//VEH
0x6c, 0xa0,
0x87, 0x00,
};

code STRUCT_REGVALUE asGx480I_InitialTable_2[]=
{

0x28, 0x32,// changed by holy 061117 
0x29, 0x06,// changed by holy 061117 
0x2a, 0x01,// changed by holy 061117 
0x31, 0x00,// changed by holy 061117 
  0x54, 0x0d,
 0x55, 0x0d,
 0x56, 0x00,
 0x57, 0x00,
 0x60, 0xb0,
 0x61, 0x12,
 0x64, 0x19,
 0x66, 0x28,
 0x2b, 0xc4,
 0x2c, 0x04,
 0x48, 0x5c,
 0x49, 0xa1,
 0x65, 0x07,
 0x67, 0x02,
 0x42, 0xF0,//0xd0,	// changed by holy 061117 for CSC
 0x01, 0x43,

  //malcolor bypass
 0x1f,0x81,//0x01, // changed by holy 061117
 0x12,0xdd,
 0x80,0x20,
};
#endif

#ifdef INPUT_480I_SYNC
code STRUCT_REGVALUE asGx480I_InitialTable_1[]=
{

0x00,0x7f,	// changed by holy 061117 
0x01,0x60,
0x02,0x00,
0x03,0x80,
0x04,0x1c,
0x05,0x90,
0x06,0xf0,
0x07, 0x84,   
0x20,0x00,
0x21,0x00,
0x22,0x00,
0x23,0x46,
0x24,0x44,
0x25,0x3e,
0x26,0x95,
0x27,0x40,
0x5d,0x7c,
0x5f,0x58,
0x60,0x88,
0x61,0x11,
0x62,0xc4,
0x63,0x04,
0x64,0x01,
0x65,0x0e,
0x66,0x0e,
0x67,0x0e,
0x7d,0x88,
0x7e,0x82,
0x7f,0xa3,
 0x89,0xb8,
 0x8a,0x84,
 0x8b,0x08,
 0x8c,0x04,
 0x8d,0x38,
 0x8e,0x00,
 0x8f,0x00,
 0x90,0x00,
 0x91,0x3c,
 0x92,0x50,
 0x93,0x20,
 0x94,0x10,
 0x95,0x00,
 0x96,0x00,
 0x97,0x30,
 0x98,0xa7,
 0x99,0x10,
 0xe6,0x21,
 0xe7,0x01,
 0xe8,0x33,
 0xe9,0x24,
 0xea,0x65,
 0xeb,0x04,
 0xec,0x38,
 0xed,0xff,
 0xef,0xb0,
 0xf0,0x01,
 0xf1,0x41,
 0xf2,0xc2,
 0xf3,0x20,
 0xf4,0x80,
 0xf5,0x10,
 0xf6,0x42,
 0xfe,0x00,
 0xff,0x41,

/*0x5f, 0x54,       
0x7e, 0xf1,       
0x7f, 0x73,//0x53,
0x89, 0xb8,//0x88,
0xeb, 0x0c,//0x0c,
0xed, 0xff,  //for
0xee, 0x88,       
0xFB, 0x81, 
0xFF, 0x42, 
0x91, 0x5e,       
0xf2, 0xe2,       
0x62, 0xbc,       
0x63, 0x85,       
0x61, 0x44,       
0x64, 0x04,       
0x06, 0x50,       
0x7d, 0xf8,       
0x7e, 0xf1,       
0xe6, 0x99,       
0xfe, 0x00,  
*/

//vertical scaler
0x28, 0xfe,// changed by holy 061117 
0x29, 0x71,// changed by holy 061117 
0x2a, 0x02,// changed by holy 061117 
0x2b, 0xc4,
0x2c, 0x04,
0x2d, 0x40,
0x2e, 0x02,
0x2f, 0xf8,
0x30, 0x03,
0x31, 0x12,// changed by holy 061118 
0x32, 0x12,
0x33, 0xcf,//0xc9,// changed by holy 061118 
0x34, 0x00,
0x45, 0x87,
0x48, 0xf1,
0x59, 0x03,
0x55, 0xc3,	// changed by holy 061118 

//VEH
0x6c, 0xa0,
0x87, 0x00,
};

code STRUCT_REGVALUE asGx480I_InitialTable_2[]=
{

0x28, 0x32,// changed by holy 061117 
0x29, 0x06,// changed by holy 061117 
0x2a, 0x01,// changed by holy 061117 
0x31, 0x00,// changed by holy 061117 
  0x54, 0x0d,
 0x55, 0x0d,
 0x56, 0x00,
 0x57, 0x00,
 0x60, 0xb0,
 0x61, 0x12,
 0x64, 0x19,
 0x66, 0x28,
 0x2b, 0xc4,
 0x2c, 0x04,
 0x48, 0x5c,
 0x49, 0xa1,
 0x65, 0x07,
 0x67, 0x02,
 0x42, 0xF0,//0xd0,	// changed by holy 061117 for CSC
 0x01, 0x43,

  //malcolor bypass
 0x1f,0x81,//0x01, // changed by holy 061117
 0x12,0xdd,
 0x80,0x20,
};
#endif

code STRUCT_REGVALUE asGx1080I_InitialTable_1[]=
{
0x00,0x7f,	// changed by holy 061117 
0x01,0x60,
0x02,0x00,
0x03,0x80,
0x09, 0x08,//for 6
0x04, 0x1c,       
0x07, 0x84,       
0x5f, 0x54,       
0x7e, 0xf1,       
0x7f, 0x73,//0x53,
0x89, 0xb8,//0x88,
0xeb, 0x0c,//0x0c,
0xed, 0xff,  //for
0xee, 0x88,       
0xFB, 0x81, 
0xFF, 0x42, 
0x91, 0x5e,       
0xf2, 0xe2,       
0x62, 0xbc,       
0x63, 0x85,       
0x61, 0x44,       
0x64, 0x04,       
0x06, 0x50,       
0x7d, 0xf8,       
0x7e, 0xf1,       
0xe6, 0x99,       
0xfe, 0x00,       
                  
//vertical scaler 
0x28, 0xfe,       
0x29, 0x65,       
0x2a, 0x04,       
0x2b, 0xbc,       
0x2c, 0x05,       
0x2d, 0x38,       
0x2e, 0x04,       
0x2f, 0x00,       
0x30, 0x05,       
0x31, 0x14,       
0x32, 0x14,       
0x33, 0x4c,       
0x34, 0x00,       
0x45, 0x87,       
0x48, 0xb4,       
0x59, 0x53,       
0x55, 0xc0,       
                  
                  
//VEH             
0x6c, 0x20,       
0x87, 0x00,       

};

code STRUCT_REGVALUE asGx1080I_InitialTable_2[]=
{
//PLL
  0x54, 0x0d,
 0x55, 0x0d,
 0x56, 0x00,
 0x57, 0x00,
 0x60, 0xff,
 0x61, 0x05,
 0x64, 0xff,
 0x66, 0x14,
 0x2b, 0xbc,
 0x2c, 0x05,
 0x48, 0x34,
 0x49, 0x11,
 0x65, 0x03,
 0x67, 0x01,
 0x42, 0xf0,
 0x01, 0x43,
// 0x80, 0x23,
 //0x81, 0x42,
 //0x82, 0x80,
 //0x83, 0x00,
 //0x85, 0x7f,
 //0x86, 0x00,
 //0x87, 0x13,
 //0x8b, 0x0d,
 //0xd6, 0x80,
 //0xd7, 0x80,
 //0xd8, 0x80,
 //0xd9, 0x80,
 //0xda, 0x80,
 0x1f, 0x03, //malcolor bypass
 0x12, 0xdd,
 0x80, 0x22,
};

// added by holy 061216 for GAMMA 
static WORD code anGammaTable_R_G_B[192]=
{
// Gamma_R
0x0000,
0x0054,
0x00A8,
0x00FD,
0x0150,
0x01A4,
0x01F5,
0x0240,
0x028B,
0x02D4,
0x031B,
0x0361,
0x03A5,
0x03E8,
0x042B,
0x046E,
0x04AE,
0x04EE,
0x052E,
0x056D,
0x05AB,
0x05E8,
0x0625,
0x0662,
0x069F,
0x06DB,
0x0716,
0x0752,
0x078C,
0x07C8,
0x0802,
0x083C,
0x0875,
0x08AF,
0x08E8,
0x0921,
0x095A,
0x0993,
0x09CB,
0x0A04,
0x0A3B,
0x0A73,
0x0AAB,
0x0AE3,
0x0B1A,
0x0B52,
0x0B89,
0x0BBF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
//Gamma_G
0x0000,
0x0054,
0x00A8,
0x00FD,
0x0150,
0x01A4,
0x01F5,
0x0240,
0x028B,
0x02D4,
0x031B,
0x0361,
0x03A5,
0x03E8,
0x042B,
0x046E,
0x04AE,
0x04EE,
0x052E,
0x056D,
0x05AB,
0x05E8,
0x0625,
0x0662,
0x069F,
0x06DB,
0x0716,
0x0752,
0x078C,
0x07C8,
0x0802,
0x083C,
0x0875,
0x08AF,
0x08E8,
0x0921,
0x095A,
0x0993,
0x09CB,
0x0A04,
0x0A3B,
0x0A73,
0x0AAB,
0x0AE3,
0x0B1A,
0x0B52,
0x0B89,
0x0BBF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
//Gamma_B
0x0000,
0x0054,
0x00A8,
0x00FD,
0x0150,
0x01A4,
0x01F5,
0x0240,
0x028B,
0x02D4,
0x031B,
0x0361,
0x03A5,
0x03E8,
0x042B,
0x046E,
0x04AE,
0x04EE,
0x052E,
0x056D,
0x05AB,
0x05E8,
0x0625,
0x0662,
0x069F,
0x06DB,
0x0716,
0x0752,
0x078C,
0x07C8,
0x0802,
0x083C,
0x0875,
0x08AF,
0x08E8,
0x0921,
0x095A,
0x0993,
0x09CB,
0x0A04,
0x0A3B,
0x0A73,
0x0AAB,
0x0AE3,
0x0B1A,
0x0B52,
0x0B89,
0x0BBF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
0x0BFF,
};



 BYTE m_acGainItemValue[3];
 WORD m_awOffsetItemValue[3];


 // added by holy 061216 for GAMMA 
//static void dvGammaModeEn(BOOL bModeEn);
//static void dvGammaLUTSet(void);


 void GxGainSet(BYTE CChannelSel,BYTE cGain)
{
 switch(CChannelSel)
   {
     case  0://GX_ADC_R_GAIN:
     	          dvRegisterWrite(IIC_GX_SLAVE_Addr,0x25,cGain);
  	  	   break;
  	case 1://GX_ADC_G_GAIN:
  	  	   dvRegisterWrite(IIC_GX_SLAVE_Addr,0x24,cGain);
  	  	   break;
  	  case 2://GX_ADC_B_GAIN:
  	  	    dvRegisterWrite(IIC_GX_SLAVE_Addr,0x23,cGain);
  	  	   break;
        default :
        	 break;
   	}
}
 
  void GxOffsetSet(BYTE CChannelSel,WORD wOffset)
 	{
 	   switch(CChannelSel)
          {
	  	  case  0://GX_ADC_R_OFFSET:  	   
	  	  	   dvRegisterWrite(IIC_GX_SLAVE_Addr,0x5e,LoByte(wOffset));
	  	  	   dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0x5f,0x30,HiByte(wOffset));
	  	  	   break;
	  	  case 1://GX_ADC_G_OFFSET:
	  	  	    dvRegisterWrite(IIC_GX_SLAVE_Addr,0x5d,LoByte(wOffset));
	  	  	   dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0x5f,0xc0,HiByte(wOffset));
	  	  	   break;
	  	  case 2://GX_ADC_B_OFFSET:
	  	  	   dvRegisterWrite(IIC_GX_SLAVE_Addr,0x26,LoByte(wOffset));
	  	  	   dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0x27,0xc0,HiByte(wOffset));
	  	  	   break;
	        default :
	        	   break;
	  }
}


 void GxGainGet(BYTE cFormatSel)
{
  BYTE i;
 	for(i=0;i<3;i++)
 	{
 	 if(cFormatSel==0)
          m_acGainItemValue[i] = acGainTable_2In1[i];
 	 else
 	   m_acGainItemValue[i] = acGainTable_AFE[i];  
 	  GxGainSet(i,m_acGainItemValue[i]);
 	}
}
 
 void GxOffsetGet(BYTE cFormatSel)
 {
    BYTE i;
 	
  	for(i=0;i<3;i++)
 	{
 	 if(cFormatSel==0)
          m_awOffsetItemValue[i] = awOffsetTable_2In1[i];
 	 else
 	   m_awOffsetItemValue[i] = awOffsetTable_AFE[i]; 
 	 GxOffsetSet(i,m_awOffsetItemValue[i]);	
 	}
  	
}

void GxInitial(BYTE cFormatSel)
{
    WORD i;
    
    if(cFormatSel ==0)
    	{
	     for(i = 0; i < sizeof(asGx480I_InitialTable_1) / sizeof(STRUCT_REGVALUE); i++)
	     {
	            dvRegisterWrite(0x68,
	            	asGx480I_InitialTable_1[i].cRegAddr, 
	            	asGx480I_InitialTable_1[i].cValue);
	    }
	     for(i   = 0; i < sizeof(asGx480I_InitialTable_2) / sizeof(STRUCT_REGVALUE); i++)
	     {
	            dvRegisterWrite(0x60,
	            	asGx480I_InitialTable_2[i].cRegAddr, 
	            	asGx480I_InitialTable_2[i].cValue);
	    }
    	}

    if(cFormatSel ==1)
    	{
	     for(i   = 0; i < sizeof(asGx1080I_InitialTable_1) / sizeof(STRUCT_REGVALUE); i++)
	     {
	            dvRegisterWrite(0x68,
	            	asGx1080I_InitialTable_1[i].cRegAddr, 
	            	asGx1080I_InitialTable_1[i].cValue);
	    }
	     for(i   = 0; i < sizeof(asGx1080I_InitialTable_2) / sizeof(STRUCT_REGVALUE); i++)
	     {
	            dvRegisterWrite(0x60,
	            	asGx1080I_InitialTable_2[i].cRegAddr, 
	            	asGx1080I_InitialTable_2[i].cValue);
	    }
    	}
     GxGainGet(cFormatSel);
     GxOffsetGet(cFormatSel);
	 // added by holy 061216 for GAMMA 
	// dvGammaLUTSet();	
	//dvGammaModeEn(TRUE);
}



void GxADCTestSet()
{
  //Gx reset ,use FPGA I/O
//    dvRegisterMaskWrite(IIC_FPGA_SLAVE_Addr, 0xe8, 0x03, 3);
//    TimeDelay(50);
//    dvRegisterMaskWrite(IIC_FPGA_SLAVE_Addr, 0xe8, 0x03, 0);
    //
    dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0xf2,0x40,0x0);
     dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0xff,0x3f,0x01);
     dvRegisterMaskWrite(IIC_GX_SLAVE_Addr,0xf2,0x40,0x1);
} 
#if 0
//HM added,06/12/15
void	GxColorSpaceSet()
{
//    dvRegisterMaskWrite(0x68,0x55,0x30,0x1);
     dvRegisterMaskWrite(0x60,0x42,0x70,0x5);
}

// added by holy 061216 for GAMMA 

// ---------------------------------------------------------------------------
//   Gamma  mode set
//
// Params:
// bModeEn : 0:by pass mode;1:gamma enable
//
// Return:
//  None
// ---------------------------------------------------------------------------
void dvGammaModeEn(BOOL bModeEn)
{

	dvRegisterMaskWrite(I2C_Mallard2_ADDR,0x68,0x80,(BYTE)bModeEn);
   if(bModeEn)
   	{
   	      dvRegisterWrite(I2C_Mallard2_ADDR,0x13,0xc0);	
		dvRegisterWrite(I2C_Mallard2_ADDR,0x14, 0x07);
		dvRegisterWrite(I2C_Mallard2_ADDR,0x15,0x00 );
   	}
   else
   	{
   	       dvRegisterWrite(I2C_Mallard2_ADDR,0x13,0xc0);	
		dvRegisterWrite(I2C_Mallard2_ADDR,0x14, 0x04);
		dvRegisterWrite(I2C_Mallard2_ADDR,0x15,0x00 );
   	}
}

// ---------------------------------------------------------------------------
//   set Gamma LUT
//
// Params:
// cStatus: 0: gamma R;1:gamma G;2:gamma B.
//
// Return:
//  None
// ---------------------------------------------------------------------------
void dvGammaLUTSet(void)
{
  	BYTE i,offset;
	WORD Gamma_temp;
	BYTE cStatus;
	
	for(cStatus=0;cStatus<3;cStatus++)
	{
	  	offset = cStatus*64;
		dvGammaModeEn(0);
		// set gamma LUT write mode
		dvRegisterMaskWrite(I2C_Mallard2_ADDR,0x69,0x80,0);
	     
		for(i=0;i<64;i++)
		{
				//lut address
			dvRegisterWrite(I2C_Mallard2_ADDR,0x13, i+offset);
			Gamma_temp = anGammaTable_R_G_B[i+offset];
			//lut  Gamma data[7-0]
			dvRegisterWrite(I2C_Mallard2_ADDR,0x14, LoByte(Gamma_temp));
			//lut Gamma data[11:8]
			dvRegisterWrite(I2C_Mallard2_ADDR,0x15, HiByte(Gamma_temp));
		}
		dvGammaModeEn(1);
	}
}

#endif



























⌨️ 快捷键说明

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