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 + -
显示快捷键?