📄 ad9887.c
字号:
*
*
* description:
* ------------
* Set the PLL parameters to correspond with the desired operating frequency
* (incoming pixel rate).
* Max(Clockrate) = 140Mhz
* Min(Clockrate) = ?
* Min(HFreq) = 30.0 Khz
* Max(HFreq) = 110.0 Khz
* if (HInterlaceMode == non-interlaced)
* PixelRate = ClockRate
* else
* PixelRate = 2 * ClockRate
* Set VCORNGE and Current parameters according to Pixelrate and table in
* data sheet.
* PLLDIV = ClockRate / HFreq.
*
*
* Protoype:
* ----------
* TA2D_Result AD9887_SetPLL(TBYTE RefreshRate,
* unsigned long HFreq,
* TDataResolution Resolution)
* Where:
* HFreq - HSync frequency in Hz units
* RefreshRate - Input clock rate in Hz
* Resolution - Required resolution
* Returns:
* A2D_OK/A2D_ERROR
*
* history:
*
* who when what
* --- ---------- ----
* Ori 21/02/2000 creation
*
*/
TA2D_Result AD9887_SetPLL(TBYTE RefreshRate, /* In Hz units */
TWORD HorTotalTime,
TDataResolution Resolution
)
{
TA2D_Result rc = A2D_OK;
//unsigned long PixelRate; /* in KHz */
TBYTE Current = 4, VcoRange = 1, Phase = 10, Clamp = 10, Duration = 10, PreCoast = 0, PostCoast = 0;
TBYTE SyncTHR=10;
union {
TAD9887_VcoCurrent bits;
TBYTE byte;
} RegVal;
union {
TAD9887_ControlBits2 bits; // 0x16
TBYTE byte;
} ControlBits2Val;
/* Set VCORNGE and Current parameters according to Resolution & refreshrate */
/* and table VII in the data sheet. */
switch (Resolution)
{
case dir640x350:
if (RefreshRate <= 50)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 60)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 70)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 84)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 85)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
break;
case dir640x400:
if (RefreshRate <= 50)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 56)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 60)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 70)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 84)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 85)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
break;
case dir640x480:
if (RefreshRate <= 60)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 66)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 70)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 72)
{
VcoRange = 0;
Current = 5;
// PixelRate = 31500;
Phase = 10;
}
else if (RefreshRate <= 75)
{
VcoRange = 0;
Current = 6;
//PixelRate = 31500;
Phase = 12;
}
else if (RefreshRate <= 85)
{
VcoRange = 0;
Current = 6;
//PixelRate = 36000l;
Phase = 8;
}
else if (RefreshRate <= 90)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 100)
{
VcoRange = 0;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
else if (RefreshRate <= 120)
{
VcoRange = 1;
Current = 5;
// PixelRate = 25175;
Phase = 13;
}
break;
case dir800x600:
if (RefreshRate <= 56)
{
VcoRange = 1;
Current = 3;
//PixelRate = 36000l;
Phase = 18;
}
else if (RefreshRate <= 60)
{
VcoRange = 1;
Current = 1;
//PixelRate = 40000l;
Phase = 8;
}
else if (RefreshRate <= 72)
{
VcoRange = 1;
Current = 5;
//PixelRate = 50000l;
Phase = 0; // 8
}
else if (RefreshRate <= 75)
{
VcoRange = 1;
Current = 5;
//PixelRate = 49500l;
Phase = 0; //8
}
else if (RefreshRate <= 85)
{
VcoRange = 1;
Current = 6;
//PixelRate = 56250l;
Phase = 0;
}
else if (RefreshRate <= 90)
{
VcoRange = 1;
Current = 6;
//PixelRate = 56250l;
Phase = 0;
}
else if (RefreshRate <= 100)
{
VcoRange = 1;
Current = 6;
//PixelRate = 56250l;
Phase = 0;
}
break;
case dir832x624:
if (RefreshRate <= 75)
{
VcoRange = 1;
Current = 6;
//PixelRate = 65000l;
Phase = 8;
}
break;
case dir1024x768:
if (RefreshRate <= 60)
{
VcoRange = 1;
Current = 6;
//PixelRate = 65000l;
Phase = 8;
}
else if (RefreshRate <= 70)
{
VcoRange = 2;
Current = 2;
//PixelRate = 75000l;
Phase = 25;
}
else if (RefreshRate <= 75)
{
VcoRange = 2;
Current = 5;
//PixelRate = 78750l;
Phase = 24;
}
else if (RefreshRate <= 80)
{
VcoRange = 2;
Current = 5;
//PixelRate = 85500l;
Phase = 3;
}
else if (RefreshRate <= 85)
{
VcoRange = 2;
Current = 5;
//PixelRate = 94500l;
Phase = 18;
}
break;
case dir1152x864:
if (RefreshRate <= 60)
{
VcoRange = 2;
Current = 6;
//PixelRate = 108000l;
Phase = 10;
}
else if (RefreshRate <= 70)
{
VcoRange = 2;
Current = 6;
//PixelRate = 135000l;
Phase = 10;
}
else if (RefreshRate <= 75)
{
VcoRange = 2;
Current = 6;
//PixelRate = 135000l;
Phase = 10;
}
else if (RefreshRate <= 85)
{
VcoRange = 2;
Current = 6;
//PixelRate = 135000l;
Phase = 10;
}
break;
case dir1280x720:
if (RefreshRate <= 61)
{
VcoRange = 1;
Current = 6;
//PixelRate = 108000l;
Phase = 10;
}
else if (RefreshRate <= 73)
{
VcoRange = 2;
Current = 1;
//PixelRate = 135000l;
Phase = 10;
}
break;
case dir1280x960:
if (RefreshRate <= 60)
{
VcoRange = 2;
Current = 6;
//PixelRate = 108000l;
Phase = 10;
}
else if (RefreshRate <= 75)
{
VcoRange = 2;
Current = 6;
//PixelRate = 135000l;
Phase = 10;
}
else if (RefreshRate <= 85)
{
VcoRange = 2;
Current = 6;
//PixelRate = 135000l;
Phase = 10;
}
break;
case dir1280x1024:
if (RefreshRate <= 60)
{
VcoRange = 2;
Current = 6;
//PixelRate = 108000l;
Phase = 10;
}
else if (RefreshRate <= 75)
{
VcoRange = 3;
Current = 6;
//PixelRate = 135000l;
Phase = 10;
}
else if (RefreshRate <= 85)
{
VcoRange = 2;
Current = 7;
//PixelRate = 157500l;
Phase = 10;
}
break;
case dir1600x1200:
HorTotalTime = HorTotalTime/2;
if (RefreshRate <= 60)
{
VcoRange = 2;
Current = 5;
//PixelRate = 162000l;
Phase = 8;
}
else if (RefreshRate <= 65)
{
VcoRange = 7;
Current = 4;
//PixelRate = 175500l;
Phase = 8;
}
else if (RefreshRate <= 70)
{
VcoRange = 7;
Current = 5;
//PixelRate = 189000l;
Phase = 8;
}
else if (RefreshRate <= 75)
{
VcoRange = 7;
Current = 5;
//PixelRate = 202500l;
Phase = 8;
}
else if (RefreshRate <= 85)
{
VcoRange = 7;
Current = 6;
//PixelRate = 229500l;
Phase = 8;
}
break;
case dir853x480I:
VcoRange = 0;
Current = 1;
Phase = 8;
Clamp = 40;
Duration = 10;
Clamp = 40;
Duration = 10;
PreCoast = 8;
PostCoast = 10;
SyncTHR = 25;
break;
case dir853x480P:
VcoRange = 0;
Current = 2;
Phase = 8;
Clamp = 40;
Duration = 10;
PreCoast = 5;
PostCoast = 5;
SyncTHR=16;
break;
case dir1920x1080I:
VcoRange = 2;
Current = 4;
Phase = 8;
Clamp = 152;
Duration = 10;
PreCoast = 5;
PostCoast = 5;
SyncTHR=16;
break;
case dir1280x720P:
VcoRange = 1;
Current = 3;
Phase = 8;
Clamp = 190;
Duration = 10;
PreCoast = 5;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -