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

📄 ad9887.c

📁 此为ADI公司的ADC芯片的软件控制,可为多煤体应用开发.
💻 C
📖 第 1 页 / 共 4 页
字号:
   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 + -