📄 ad9887.c
字号:
AD9887_Write(AD9887_MODCONTROL1, ModeControl1Val.byte);
//pll and clamp control
AD9887_Read(AD9887_PLLCLCO, &PllClampControlVal.byte);
PllClampControlVal.bits.bluclamp = 1;
if(EVBGetA2DRevision() > 0)
{
PllClampControlVal.bits.grnclamp = 1;
PllClampControlVal.bits.redclamp = 0;
}
else
{
PllClampControlVal.bits.grnclamp = 0;
PllClampControlVal.bits.redclamp = 1;
}
PllClampControlVal.bits.extclk = 0;
PllClampControlVal.bits.clamppol = 1;
PllClampControlVal.bits.clampfunc = 0; // use intrenal clamp
PllClampControlVal.bits.coastpol = 0;
AD9887_Write(AD9887_PLLCLCO, PllClampControlVal.byte);
//Mode Control 2
AD9887_Read(AD9887_MODCONTROL2, &ModeControl2Val.byte);
ModeControl2Val.bits.syncdet = 1;
ModeControl2Val.bits.highimpout = 0;
ModeControl2Val.bits.outputdrive = 3;
ModeControl2Val.bits.pixselect = 0;
ModeControl2Val.bits.clkinv = 0;
AD9887_Write(AD9887_MODCONTROL2, ModeControl2Val.byte);
//Sync separator
AD9887_Write(AD9887_SYNCSEP, 0x28);
//Control bits 1
AD9887_Read(AD9887_CONTROL1, &ControlBits1Val.byte);
ControlBits1Val.bits.hsyncpolovr = 1;
ControlBits1Val.bits.coastpol = 0;
ControlBits1Val.bits.scanen = 0;
ControlBits1Val.bits.res0 = 0;
ControlBits1Val.bits.res1 = 1;
ControlBits1Val.bits.resved = 4;
AD9887_Write(AD9887_CONTROL1, ControlBits1Val.byte);
// sog slicer thr
AD9887_Read(AD9887_CONTROL2, &ControlBits2Val.byte);
ControlBits2Val.bits.res0 = 0;
ControlBits2Val.bits.res1 = 0;
ControlBits2Val.bits.res2 = 0;
ControlBits2Val.bits.syncgrnsl = 10; //16
AD9887_Write(AD9887_CONTROL2, ControlBits2Val.byte);
//pre coast
AD9887_Write(AD9887_PRECOAST, 0x05);
//Post coast
AD9887_Write(AD9887_POSTCOAST, 0x05);
//444 mode
AD9887_Write(AD9887_422CON, 0x6F);
}
/******************************************************************************/
/******************************************************************************/
/*
* Copyright (c) 1999-2000 Oplus Technologies INC. All Rights resreved.
*
*
*
* description:
* ------------
*
* Init the A/D to Graphic working parameters (RGB input)
*
* Protoype:
* ----------
* static void AD9887_InitGraphic()
* history:
*
* who when what
* --- ---------- ----
* ori 22/10/2001 creation
*
*/
static void AD9887_InitGraphic()
{
union {
TAD9887_ModeControl1 bits; // 0x0E
TBYTE byte;
} ModeControl1Val;
union {
TAD9887_PllClampControl bits; // 0x0F
TBYTE byte;
} PllClampControlVal;
union {
TAD9887_ModeControl2 bits; // 0x10
TBYTE byte;
} ModeControl2Val;
union {
TAD9887_ActiveInterface bits; // 0x12
TBYTE byte;
} ActiveInterfaceVal;
union {
TAD9887_ControlBits1 bits; // 0x14
TBYTE byte;
} ControlBits1Val;
union {
TAD9887_ControlBits2 bits; // 0x16
TBYTE byte;
} ControlBits2Val;
union {
TAD9887_VcoCurrent bits; // 0x03
TBYTE byte;
} VcoCurrentVal;
union {
TAD9887_Phase bits; // 0x04
TBYTE byte;
} PhaseVal;
EVB_SwitchDataInput(1); //set mux for RGB
// pll divider control
AD9887_Read(AD9887_VCO, &VcoCurrentVal.byte);
AD9887_Write(AD9887_PLLDIVM, 0x53);
AD9887_Write(AD9887_PLLDIVL, 0xF0);
VcoCurrentVal.bits.current = 2;
VcoCurrentVal.bits.vcornge = 2;
VcoCurrentVal.bits.reserved2 = 1;
AD9887_Write(AD9887_VCO, VcoCurrentVal.byte);
//Clock generator
AD9887_Read(AD9887_PHASE, &PhaseVal.byte);
PhaseVal.bits.phase = 16;
AD9887_Write(AD9887_PHASE, PhaseVal.byte);
//clamp timing
AD9887_Write(AD9887_CLPLACE, 0x0A);
AD9887_Write(AD9887_CLDUR, 0x0A);
// input gain
AD9887_Write(AD9887_REDGAIN, 0x80);
AD9887_Write(AD9887_GRNGAIN, 0x80);
AD9887_Write(AD9887_BLUGAIN, 0x80);
// input offset
AD9887_Write(AD9887_REDOFST, 0x80);
AD9887_Write(AD9887_GRNOFST, 0x80);
AD9887_Write(AD9887_BLUOFST, 0x80);
// mode control 1
AD9887_Read(AD9887_MODCONTROL1, &ModeControl1Val.byte);
ModeControl1Val.bits.vsyncinv = 1;
ModeControl1Val.bits.abinv = 1;
ModeControl1Val.bits.outputmode = 1; /* parallel mode */
ModeControl1Val.bits.chmode = 1;
AD9887_Write(AD9887_MODCONTROL1, ModeControl1Val.byte);
//pll and clamp control
AD9887_Read(AD9887_PLLCLCO, &PllClampControlVal.byte);
PllClampControlVal.bits.bluclamp = 0;
PllClampControlVal.bits.grnclamp = 0;
PllClampControlVal.bits.redclamp = 0;
PllClampControlVal.bits.extclk = 0;
PllClampControlVal.bits.clamppol = 0;
PllClampControlVal.bits.clampfunc = 0;
PllClampControlVal.bits.coastpol = 0;
AD9887_Write(AD9887_PLLCLCO, PllClampControlVal.byte);
//Mode Control 2
AD9887_Read(AD9887_MODCONTROL2, &ModeControl2Val.byte);
ModeControl2Val.bits.syncdet = 1;
ModeControl2Val.bits.highimpout = 0;
ModeControl2Val.bits.outputdrive = 3;
ModeControl2Val.bits.pixselect = 0;
ModeControl2Val.bits.clkinv = 0;
AD9887_Write(AD9887_MODCONTROL2, ModeControl2Val.byte);
// Active interface
AD9887_Read(AD9887_ACIN, &ActiveInterfaceVal.byte);
ActiveInterfaceVal.bits.pwrdn = 1;
ActiveInterfaceVal.bits.coastsel = 1;
ActiveInterfaceVal.bits.actvsysel = 0;
ActiveInterfaceVal.bits.actvsyovr = 1;
ActiveInterfaceVal.bits.acthsyovr = 1;
ActiveInterfaceVal.bits.acthsysel = 0;
ActiveInterfaceVal.bits.ais = 0;
ActiveInterfaceVal.bits.aio = 1;
AD9887_Write(AD9887_ACIN, ActiveInterfaceVal.byte);
//Sync separ
AD9887_Write(AD9887_SYNCSEP, 0x20);
//Control bits 1
AD9887_Read(AD9887_CONTROL1, &ControlBits1Val.byte);
ControlBits1Val.bits.hsyncpolovr = 0;
ControlBits1Val.bits.coastpol = 0;
ControlBits1Val.bits.scanen = 0;
ControlBits1Val.bits.res0 = 0;
ControlBits1Val.bits.res1 = 1;
ControlBits1Val.bits.resved = 0;
AD9887_Write(AD9887_CONTROL1, ControlBits1Val.byte);
// sog slicer thr
AD9887_Read(AD9887_CONTROL2, &ControlBits2Val.byte);
ControlBits2Val.bits.res0 = 0;
ControlBits2Val.bits.res1 = 0;
ControlBits2Val.bits.res2 = 0;
ControlBits2Val.bits.syncgrnsl = 10;
AD9887_Write(AD9887_CONTROL2, ControlBits2Val.byte);
//pre coast
AD9887_Write(AD9887_PRECOAST, 0x03);
//Post coast
AD9887_Write(AD9887_POSTCOAST, 0x03);
//444 mode
AD9887_Write(AD9887_422CON, 0x6F);
}
/******************************************************************************/
/******************************************************************************/
/*
* Copyright (c) 1999-2000 Oplus Technologies INC. All Rights resreved.
*
*
*
* description:
* ------------
*
* Init the A/D to DVI working parameters
*
* Protoype:
* ----------
* static void AD9887_InitDVI()
* history:
*
* who when what
* --- ---------- ----
* ori 22/10/2001 creation
*
*/
static void AD9887_InitDVI()
{
union {
TAD9887_ModeControl1 bits; // 0x0E
TBYTE byte;
} ModeControl1Val;
union {
TAD9887_PllClampControl bits; // 0x0F
TBYTE byte;
} PllClampControlVal;
union {
TAD9887_ModeControl2 bits; // 0x10
TBYTE byte;
} ModeControl2Val;
union {
TAD9887_ActiveInterface bits; // 0x12
TBYTE byte;
} ActiveInterfaceVal;
union {
TAD9887_ControlBits1 bits; // 0x14
TBYTE byte;
} ControlBits1Val;
union {
TAD9887_ControlBits2 bits; // 0x16
TBYTE byte;
} ControlBits2Val;
union {
TAD9887_VcoCurrent bits; // 0x03
TBYTE byte;
} VcoCurrentVal;
union {
TAD9887_Phase bits; // 0x04
TBYTE byte;
} PhaseVal;
// pll divider control
AD9887_Write(AD9887_PLLDIVM, 0x69);
AD9887_Write(AD9887_PLLDIVL, 0xD0);
AD9887_Read(AD9887_VCO, &VcoCurrentVal.byte);
VcoCurrentVal.bits.current = 1;
VcoCurrentVal.bits.vcornge = 1;
VcoCurrentVal.bits.reserved2 = 1;
AD9887_Write(AD9887_VCO, VcoCurrentVal.byte);
//Clock generator
AD9887_Read(AD9887_PHASE, &PhaseVal.byte);
PhaseVal.bits.phase = 16;
AD9887_Write(AD9887_PHASE, PhaseVal.byte);
//clamp timing
AD9887_Write(AD9887_CLPLACE, 0x80);
AD9887_Write(AD9887_CLDUR, 0x80);
// input gain
AD9887_Write(AD9887_REDGAIN, 0x80);
AD9887_Write(AD9887_GRNGAIN, 0x80);
AD9887_Write(AD9887_BLUGAIN, 0x80);
// input offset
AD9887_Write(AD9887_REDOFST, 0x80);
AD9887_Write(AD9887_GRNOFST, 0x80);
AD9887_Write(AD9887_BLUOFST, 0x80);
// mode control 1
AD9887_Read(AD9887_MODCONTROL1, &ModeControl1Val.byte);
ModeControl1Val.bits.vsyncinv = 1; // ori
ModeControl1Val.bits.abinv = 1;
ModeControl1Val.bits.outputmode = 1;
ModeControl1Val.bits.chmode = 1;
AD9887_Write(AD9887_MODCONTROL1, ModeControl1Val.byte);
//pll and clamp control
AD9887_Read(AD9887_PLLCLCO, &PllClampControlVal.byte);
PllClampControlVal.bits.bluclamp = 0;
PllClampControlVal.bits.grnclamp = 0;
PllClampControlVal.bits.redclamp = 0;
PllClampControlVal.bits.extclk = 0;
PllClampControlVal.bits.clamppol = 1;
PllClampControlVal.bits.clampfunc = 0;
PllClampControlVal.bits.coastpol = 1;
AD9887_Write(AD9887_PLLCLCO, PllClampControlVal.byte);
//Mode Control 2
AD9887_Read(AD9887_MODCONTROL2, &ModeControl2Val.byte);
ModeControl2Val.bits.syncdet = 0;
ModeControl2Val.bits.highimpout = 0;
ModeControl2Val.bits.outputdrive = 3;
ModeControl2Val.bits.pixselect = 1;
ModeControl2Val.bits.clkinv = 0;
AD9887_Write(AD9887_MODCONTROL2, ModeControl2Val.byte);
// Active interface
AD9887_Read(AD9887_ACIN, &ActiveInterfaceVal.byte);
ActiveInterfaceVal.bits.pwrdn = 1;
ActiveInterfaceVal.bits.coastsel = 0;
ActiveInterfaceVal.bits.actvsysel = 0;
ActiveInterfaceVal.bits.actvsyovr = 0;
ActiveInterfaceVal.bits.acthsyovr = 0;
ActiveInterfaceVal.bits.acthsysel = 0;
ActiveInterfaceVal.bits.ais = 1;
ActiveInterfaceVal.bits.aio = 1;
AD9887_Write(AD9887_ACIN, ActiveInterfaceVal.byte);
//Sync separator
AD9887_Write(AD9887_SYNCSEP, 0x20);
//Control bits 1
AD9887_Read(AD9887_CONTROL1, &ControlBits1Val.byte);
ControlBits1Val.bits.hsyncpolovr = 0;
ControlBits1Val.bits.coastpol = 0;
ControlBits1Val.bits.scanen = 0;
ControlBits1Val.bits.res0 = 0;
ControlBits1Val.bits.res1 = 1;
ControlBits1Val.bits.resved = 0;
AD9887_Write(AD9887_CONTROL1, ControlBits1Val.byte);
// sog slicer thr
AD9887_Read(AD9887_CONTROL2, &ControlBits2Val.byte);
ControlBits2Val.bits.res0 = 0;
ControlBits2Val.bits.res1 = 0;
ControlBits2Val.bits.res2 = 0;
ControlBits2Val.bits.syncgrnsl = 23;
AD9887_Write(AD9887_CONTROL2, ControlBits2Val.byte);
//pre coast
AD9887_Write(AD9887_PRECOAST, 0x00);
//Post coast
AD9887_Write(AD9887_POSTCOAST, 0x00);
//444 mode
AD9887_Write(AD9887_422CON, 0x6F);
}
/******************************************************************************/
/******************************************************************************/
Boolean AD9887_IsOddPixelInB(void)
{
union {
TAD9887_ModeControl1 bits;
TBYTE byte;
} ModeControl1Val;
AD9887_Read(AD9887_MODCONTROL1, &ModeControl1Val.byte);
return (!(ModeControl1Val.bits.abinv));
}
/******************************************************************************/
/******************************************************************************/
void AD9887_SetOddPixelToB(Boolean OddToB)
{
union {
TAD9887_ModeControl1 bits;
TBYTE byte;
} ModeControl1Val;
AD9887_Read(AD9887_MODCONTROL1, &ModeControl1Val.byte);
ModeControl1Val.bits.abinv =!OddToB;
AD9887_Write(AD9887_MODCONTROL1, ModeControl1Val.byte);
}
/******************************************************************************/
/******************************************************************************/
TA2D_Result AD9887_SetHSyncPulseWidth(TBYTE Width)
{
TA2D_Result rc;
// Hsync output pulse width
rc = AD9887_Write(AD9887_HSYNC, Width);
return rc;
}
/******************************************************************************/
/******************************************************************************/
TA2D_Result AD9887_GetHSyncPulseWidth(TBYTE *Width)
{
TA2D_Result rc;
// Hsync output pulse width
rc = AD9887_Read(AD9887_HSYNC, Width);
return rc;
}
/******************************************************************************/
/******************************************************************************/
#pragma option -w-par /* Turn off, temporarily, the warning for unused parameter */
TA2D_Result AD9887_setClockMode(TA2D_clockMode clockMode)
{
return(A2D_FunctionNotImplemented);
}/* AD9887_setClockMode */
#pragma option -w. /* Back to normal waning mode */
/******************************************************************************/
/******************************************************************************/
#pragma option -w-par /* Turn off, temporarily, the warning for unused parameter */
TA2D_Result AD9887_getClockMode(TA2D_clockMode *clockMode)
{
return(A2D_FunctionNotImplemented);
}/* AD9887_getClockMode */
#pragma option -w. /* Back to normal waning mode */
/******************************************************************************/
/*******************************************************************************/
Boolean AD9887_IsTimingStandardSupported(unsigned long PixelClock)
{
if ((PixelClock * 1000L)> MAX_PIXEL_CLOCK)
return FALSE;
else
return TRUE;
}
/******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -