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

📄 adc.c

📁 车载DVD osdIC TW8816原厂代码
💻 C
字号:
#include "Config.h"

#include "reg.h"
#include "typedefs.h"
#include "i2c.h"
#include "adc.h"
#include "printf.h"
#include "main.h"
#include "tw88.h"
#include "pc_eep.h"
#include "measure.h"

// Address
#define PLLDIVM		0xc3
#define PLLDIVL		0xc4
#define PHASE		0xc5
#define RGB_SEL		0xd0
#define ADCMODE		0xc0
#define ADC_POWER	0xcb
#define VCOCURR		0xc2

//=============================================================================
//                             ADC Functions
//=============================================================================
CODE BYTE Video_ADC_init[] = 
{
	TW88I2CAddress, 52,

0xFF, 0x01, //; Page 1

0xC0, 0x01,
0xC1, 0xFF,
0xC2, 0x00,
0xC3, 0x03,
0xC4, 0x5A,
0xC5, 0x00,
0xC6, 0x20,
0xC7, 0x04,
0xC8, 0x00,
0xC9, 0x06,
0xCA, 0x06,
0xCB, 0x30,
0xCC, 0x00,
0xCD, 0x00,
0xD0, 0x00,
0xD1, 0xF0,
0xD2, 0xF0,
0xD3, 0xF0,
0xD4, 0x00,
0xD5, 0x00,
0xD6, 0x10,
0xD7, 0x70,
0xD8, 0x00,
0xD9, 0x10,
0xDA, 0x80,

0xff, 0x00,
0xff, 0xff // end of datas
};

CODE BYTE RGB_ADC_init[] = 
{
	TW88I2CAddress, 52,

0xFF, 0x01, //; Page 1

0xC0, 0x18,
0xC1, 0xFF,
0xC2, 0x13,
0xC3, 0x04,
0xC4, 0x20,
0xC5, 0x10,
0xC6, 0x20,
0xC7, 0x04,
0xC8, 0x00,
0xC9, 0x00,
0xCA, 0x00,
0xCB, 0xD7,
0xCC, 0x13,
0xCD, 0x00,
0xD0, 0x00,
0xD1, 0xF0,
0xD2, 0xF0,
0xD3, 0xF0,
0xD4, 0x80,
0xD5, 0x00,
0xD6, 0x10,
0xD7, 0x00,
0xD8, 0x47,
0xD9, 0x10,
0xDA, 0x10,

0xff, 0x00,
0xff, 0xff // end of datas
};

void ADCDefaultsSet(void)
{
	#ifdef DEBUG_PC
	dPuts("\r\n ADCDefaultsSet");
	#endif

#ifdef SUPPORT_PC
       if (GetInputSelection() == PC)
		I2CDeviceInitialize( RGB_ADC_init );
	else
#endif		
		I2CDeviceInitialize( Video_ADC_init );
		
}

#if defined( SUPPORT_PC ) || defined ( SUPPORT_DTV )

WORD GetCoarse(void)
{
	WORD buf;

	buf = ReadADC_TW88(PLLDIVM) << 8;
	buf |= ReadADC_TW88(PLLDIVL);

	buf--;
	return buf;
}

void SetCoarse(WORD i)
{
	i++;
	#ifdef DEBUG_PC
	dPrintf("\r\nSet Coarse->%04x(%d) ", i, i);
	#endif

	WriteADC_TW88(PLLDIVM, (BYTE)(i >> 8));
	WriteADC_TW88(PLLDIVL, (BYTE)(i));
}

void SetPhase(BYTE j)
{
	#ifdef DEBUG_PC
	dPrintf("\r\nSet Phase->%04x ", (WORD)j);
	#endif

	WriteADC_TW88(PHASE, j&0x1f);
}

BYTE GetPhaseCurrent(void)
{
	return ReadADC_TW88(PHASE) & 0x1f;
}

BYTE SetVCORange(DWORD _IPF)
{
	BYTE VCO_CURR, oldv, chged=0;
	BYTE val;
	
	val = _IPF / 1000000L;
	
	if     ( val < 15 )		VCO_CURR = 0x01;	// 00 001
	else if( val < 34 )		VCO_CURR = 0x04;	// 00 010
	else if( val < 45 )		VCO_CURR = 0x0b;	// 01 101
	else if( val < 63 )		VCO_CURR = 0x0d;	// 01 101
	else if( val < 70 )		VCO_CURR = 0x0e;	// 10 101
	else if( val < 80 )		VCO_CURR = 0x14;	// 10 100
	else if( val <100 )		VCO_CURR = 0x16;	// 10 101
	else if( val <110 )		VCO_CURR = 0x16;	// 10 110
	else					VCO_CURR = 0x1d;	// 11 110
	
	oldv = ReadADC_TW88(VCOCURR) & 0x1f;	// curr VCO_CURR value  
	val = VCO_CURR;
	if( oldv != val ) {
		chged = 1;
		WriteADC_TW88(VCOCURR, val);		//
		delay(1);					// time to stabilize
	}

	#ifdef DEBUG_PC
	dPrintf("\r\nSetVCO=%02x, changed=%d", (WORD)val, (WORD)chged );
	#endif

	return chged;
}


#endif	// SUPPORT_PC

⌨️ 快捷键说明

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