📄 adc.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 + -