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

📄 ad9887.c

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