wndw_vga_ref.c

来自「TECHWELL 之tw2835 四画面合一之驱动代码,CCIR656输出,KE」· C语言 代码 · 共 357 行

C
357
字号
#include	"hdr.h"

#if defined(__WTH_VGA__)
// 1. Output Resolution ////////////////////////////////////////////////////////////////
// 饭欺繁胶 内靛 mdin180_main.c俊 乐绰 酒贰狼 3俺狼 窃荐甫 曼炼窍矫搁,
// 涝免仿 秦惑档俊 蝶弗 饭瘤胶磐 技泼阑 窍角 荐 乐嚼聪促.
// void	MDIN180VPLLMPLLCtrl(void)
// void	MDIN180SyncSize(void)
// void	MDIN180DeintRegSet(void)

/// 1.1. VGA (640x480)
/// 1.2. SVGA (800x600)
/// 1.3. 720x480P


// 2. De-interlacing  ///////////////////////////////////////////////////////////////////
/// 2.1. 3D De-interlace
//// 2.1.1. ADAPTIVE MODE
void	DeintAdaptStillEn(void)
{
	RegWriteWordFields(I2C_ID_MDIN180, 0x500, 14, 2, 1);
	RegWriteWordFields(I2C_ID_MDIN180, 0x528, 6, 2, 1);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 2.1.2. INTRA ONLY MODE
void	DeintIntraOnly(void)
{
	RegWriteWordFields(I2C_ID_MDIN180, 0x500, 14, 2, 2);
	RegWriteWordFields(I2C_ID_MDIN180, 0x528, 6, 2, 2);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 2.1.3. INTER ONLY MODE
void	DeintInterOnly(void)
{
	RegWriteWordFields(I2C_ID_MDIN180, 0x500, 14, 2, 3);
	RegWriteWordFields(I2C_ID_MDIN180, 0x528, 6, 2, 1);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}

/// 2.2. Edge preserving
//// 2.2.1. ON 
void	DeintEdgeAll(void)
{
	WriteI2CWord(I2C_ID_MDIN180, 0x504, 0x02FF);
	WriteI2CWord(I2C_ID_MDIN180, 0x505, 0x2020);
	WriteI2CWord(I2C_ID_MDIN180, 0x506, 0x0F20);
	WriteI2CWord(I2C_ID_MDIN180, 0x507, 0x0A38);
	WriteI2CWord(I2C_ID_MDIN180, 0x51F, 0x3C14);
	WriteI2CWord(I2C_ID_MDIN180, 0x522, 0xFF30);

	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 2.2.2. OFF
void	DeintEdge90(void)
{
	RegWriteWordFields(I2C_ID_MDIN180, 0x504, 8, 2, 0);
	WriteI2CWord(I2C_ID_MDIN180, 0x505, 0x2020);
	WriteI2CWord(I2C_ID_MDIN180, 0x506, 0x2020);
	WriteI2CWord(I2C_ID_MDIN180, 0x507, 0x0F38);
	WriteI2CWord(I2C_ID_MDIN180, 0x51F, 0x3C14);
	WriteI2CWord(I2C_ID_MDIN180, 0x522, 0xFF30);

	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}

/// 2.3. Fast motion detection
//// 2.3.1. ON
void	DeintFastEn(void)
{
	RegWriteWordFields(I2C_ID_MDIN180, 0x501, 13, 1, 1);
	RegWriteWordFields(I2C_ID_MDIN180, 0x503, 15, 1, 1);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 2.3.2. OFF
void	DeintFastDis(void)
{
	RegWriteWordFields(I2C_ID_MDIN180, 0x501, 13, 1, 0);
	RegWriteWordFields(I2C_ID_MDIN180, 0x503, 15, 1, 0);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}

/// 2.4. Motion boundary preserving
//// 2.4.1. ON
void	DeintBorderEn(void)
{
	RegWriteWordFields(I2C_ID_MDIN180, 0x508, 3, 1, 1);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 2.4.2. OFF
void	DeintBorderDis(void)
{
	RegWriteWordFields(I2C_ID_MDIN180, 0x508, 3, 1, 0);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}


// 3. Image Enhance //////////////////////////////////////////////////////////////////
/// 3.1. Sharpness Enhancer
//// 3.1.1. ON
void	PeakFltEn(void)
{
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT0, 0x0200);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT1, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT2, 0x0f00);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT3, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT4, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT5, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT6, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT7, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT_CTRL, 0x2500);   // 0x461
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT_ENABLE, 0x0001);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 3.1.2. OFF
void	PeakFltDis(void)
{
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_H_PEAKING_FLT_ENABLE, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}

/// 3.2. LTI
//// 3.2.1. ON
void	LTIEn(void)
{
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LTI_CTRL1, 0x02F9);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LTI_CTRL2, 0x5018);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 3.2.2. OFF
void	LTIDis(void)
{
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LTI_CTRL1, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LTI_CTRL2, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}

/// 3.3. CTI
//// 3.3.1. ON
void	CTIEn(void)
{
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_CTI_B_CTRL1, 0x02F9);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_CTI_B_CTRL2, 0x5018);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_CTI_R_CTRL1, 0x02F9);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_CTI_R_CTRL2, 0x5018);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 3.3.1. OFF
void	CTIDis(void)
{
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_CTI_B_CTRL1, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_CTI_B_CTRL2, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_CTI_R_CTRL1, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_CTI_R_CTRL2, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}

/// 3.4. B/W LEVEL EXTENTION
//// 3.4.1. ON
void	BwExtEn(void)
{
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_X0_POS,    0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_X1_POS,    0x0080);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_X2_POS,    0x0380);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_P0_OFFSET, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_P1_OFFSET, 0x0040);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_P2_OFFSET, 0x03C0);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_P0_SLOP,   0x0200);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_P1_SLOP,   0x04AB);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_P2_SLOP,   0x0200);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_ENABLE,    0x0001);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 3.4.2. OFF
void	BwExtDis(void)
{
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_BW_EXT_ENABLE,    0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}


// 4. Noise Reduction /////////////////////////////////////////////////////
/// 4.1. 3D NR
//// 4.1.0. 3D NR Basic Function
void	SurfaceFltDis(void)
{
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_SURFACE_FLT_ENABLE, 0x0000);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
void	SurfaceFltEn(void)
{
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_SURFACE_FLT0,    0x0100);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_SURFACE_FLT1,    0x0080);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_SURFACE_FLT2,    0x0080);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_SURFACE_FLT3,    0x0080);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_SURFACE_FLT_ENABLE,    0x0001);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
void	MDIN180DeintNotUseNR(void)
{
	WriteI2CWord(I2C_ID_MDIN180, 0x500, 0x4D16);
	WriteI2CWord(I2C_ID_MDIN180, 0x501, 0x3B18);
	WriteI2CWord(I2C_ID_MDIN180, 0x509, 0x14CF);
	WriteI2CWord(I2C_ID_MDIN180, 0x520, 0x007F);
	WriteI2CWord(I2C_ID_MDIN180, 0x524, 0x0088);
	WriteI2CWord(I2C_ID_MDIN180, 0x529, 0xCC48);
	WriteI2CWord(I2C_ID_MDIN180, 0x531, 0x512C);
	WriteI2CWord(I2C_ID_MDIN180, 0x535, 0xBF9C);
	WriteI2CWord(I2C_ID_MDIN180, 0x53D, 0x2F34);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
void	MDIN180DeintUseNR(void)
{
	WriteI2CWord(I2C_ID_MDIN180, 0x500, 0x4D12);
	WriteI2CWord(I2C_ID_MDIN180, 0x501, 0x3B14);
	WriteI2CWord(I2C_ID_MDIN180, 0x502, 0x1C0F);
	WriteI2CWord(I2C_ID_MDIN180, 0x509, 0x10CA);
	WriteI2CWord(I2C_ID_MDIN180, 0x520, 0x00FF);
	WriteI2CWord(I2C_ID_MDIN180, 0x524, 0x0F88);
	WriteI2CWord(I2C_ID_MDIN180, 0x529, 0xCCA8);
	WriteI2CWord(I2C_ID_MDIN180, 0x531, 0xA12C);
	WriteI2CWord(I2C_ID_MDIN180, 0x535, 0xBF9C);
	WriteI2CWord(I2C_ID_MDIN180, 0x53D, 0x2F3D);
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}

//// 4.1.1. OFF
void	NR3DDisable(void)
{	
//	if(InputResol == IN_720x480i && (OutputResol == OUT_640x480 || OutputResol == OUT_720x480P)) {
	if((b_cmn_jp_vdo == VDO_NTSC)&&(b_vga_or == VGA_OR_640x480)){
		RegWriteWordFields(I2C_ID_MDIN180, 0x53D, 0, 1, 0x0);	// NR ADAPTIVE DISABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
	}
	else {
		RegWriteWordFields(I2C_ID_MDIN180, 0x52A, 7, 1, 0x0);	// NR DISABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x53D, 0, 1, 0x0);	// NR ADAPTIVE DISABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		
		MDIN180DeintNotUseNR();

		WriteI2CWord(I2C_ID_MDIN180, 0x525, 0x14FF);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
	}
	SurfaceFltDis();
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 4.1.2. Typical
void	NR3DTyp(void)
{	
//	if(InputResol == IN_720x480i && (OutputResol == OUT_640x480 || OutputResol == OUT_720x480P)) {
	if((b_cmn_jp_vdo == VDO_NTSC)&&(b_vga_or == VGA_OR_640x480)){
		RegWriteWordFields(I2C_ID_MDIN180, 0x52A, 7, 1, 0x1);	// NR ENABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x53D, 0, 1, 0x1);	// NR ADAPTIVE ENABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x52A, 0, 6, 0x1C);	// NR FACTOR
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		
		MDIN180DeintUseNR() ;
		
		SurfaceFltEn();
		
		RegWriteWordFields(I2C_ID_MDIN180, 0x529, 4, 3, 0x7);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x529, 8, 3, 0x7);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x529, 0, 4, 0x8);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x53D, 1, 1, 0x1);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		
		WriteI2CWord(I2C_ID_MDIN180, 0x53C, 0x1010);
		WriteI2CWord(I2C_ID_MDIN180, 0x525, 0x14FF);
		
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
	}
	else {
		RegWriteWordFields(I2C_ID_MDIN180, 0x52A, 7, 1, 0x0);	// NR DISABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x53D, 0, 1, 0x0);	// NR ADAPTIVE DISABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		
		MDIN180DeintNotUseNR();
		
		SurfaceFltEn();
		
		WriteI2CWord(I2C_ID_MDIN180, 0x525, 0x14FF);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
	}
}
//// 4.1.3. Max
void	NR3DMax(void)
{
//	if(InputResol == IN_720x480i && (OutputResol == OUT_640x480 || OutputResol == OUT_720x480P)) {
	if((b_cmn_jp_vdo == VDO_NTSC)&&(b_vga_or == VGA_OR_640x480)){
		RegWriteWordFields(I2C_ID_MDIN180, 0x52A, 7, 1, 0x1);	// NR ENABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x53D, 0, 1, 0x1);	// NR ADAPTIVE ENABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x52A, 0, 6, 0x10);	// NR FACTOR	
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		
		MDIN180DeintUseNR() ;
		
		SurfaceFltEn();
		
		WriteI2CWord(I2C_ID_MDIN180, 0x500, 0x4D12);
		WriteI2CWord(I2C_ID_MDIN180, 0x501, 0x3B14);
		
		RegWriteWordFields(I2C_ID_MDIN180, 0x529, 4, 3, 0x7);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x529, 8, 3, 0x7);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x529, 0, 4, 0x1);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		
		RegWriteWordFields(I2C_ID_MDIN180, 0x53D, 1, 1, 0x1);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		
		WriteI2CWord(I2C_ID_MDIN180, 0x53C, 0x0CCC);
		WriteI2CWord(I2C_ID_MDIN180, 0x525, 0x141E);
		
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
	}
	else {
		RegWriteWordFields(I2C_ID_MDIN180, 0x52A, 7, 1, 0x0);	// NR DISABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		RegWriteWordFields(I2C_ID_MDIN180, 0x53D, 0, 1, 0x0);	// NR ADAPTIVE DISABLE
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
		
		MDIN180DeintNotUseNR();
		
		SurfaceFltEn();
		
		WriteI2CWord(I2C_ID_MDIN180, 0x525, 0x14FF);
		WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
	}
}

/// 4.2. CCS 
//// 4.2.1. ON
void	CCSEn(void)
{	
	RegWriteWordFields(I2C_ID_MDIN180, 0x52A, 6, 1, 0x1);	// CCS ENABLE
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}
//// 4.2.2. OFF
void	CCSDis(void)
{	
	RegWriteWordFields(I2C_ID_MDIN180, 0x52A, 6, 1, 0x0);	// CCS DISABLE
	WriteI2CWord(I2C_ID_MDIN180, MDIN180_LOCAL_REG_UPDATE, 0x0001);
}


#endif

⌨️ 快捷键说明

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