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

📄 drv_dsp_adjust.c

📁 ROHM 公司BU9432:application:应用范围
💻 C
📖 第 1 页 / 共 5 页
字号:
			gu08_ChkRfGain |= B00000001;

			gu08_kind_Gain++;

			// 僼僅乕僇僗/僩儔僢僉儞僌僎僀儞, APC REF揹埑
			SetFoTrGain();
			return	0xFA;									// TRUE
		}
	}
	return	0xF6;											// FALSE
}


/*------------------------------------------------------------------------------
	[NAME]     :DownRfGain
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
------------------------------------------------------------------------------*/
UINT08 DownRfGain( void )
{
	if( gu08_kind_Gain != GAIN_X1 )
	{
		if( !(gu08_ChkRfGain & gu08_kind_Gain) )
		{
			gu08_ChkRfGain |= ( gu08_kind_Gain << 1 );

			gu08_kind_Gain--;

			// 僼僅乕僇僗/僩儔僢僉儞僌僎僀儞, APC REF揹埑
			SetFoTrGain();
			return	0xFA;									// TRUE
		}
	}
	return	0xF6;											// FALSE
}


/*------------------------------------------------------------------------------
	[NAME]     :UpRfPosition
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
------------------------------------------------------------------------------*/
UINT08 UpRfPosition( void )
{
	if( gu08_9C_RfShift )
	{
		DrvDSP_BIOS_WriteReg( 0x9C, --gu08_9C_RfShift );		// Up Sweep / RF 僆僼僙僢僩挷惍
		return	FALSE;
	}
	return	TRUE;
}


/*------------------------------------------------------------------------------
	[NAME]     :DownRfPosition
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
------------------------------------------------------------------------------*/
UINT08 DownRfPosition( void )
{
	if( gu08_9C_RfShift != 0x0F )
	{
		DrvDSP_BIOS_WriteReg( 0x9C, ++gu08_9C_RfShift );
		return	FALSE;
	}
	return	TRUE;
}


/*******************************************************************************
	Measure RF
*******************************************************************************/
/*------------------------------------------------------------------------------
	[NAME]     :MeasureRf
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
 ------------------------------------------------------------------------------
	UINT08	mu08_SweepFlag
		+ bit[7-4] : Counter 
						+ F		End Meas.
			 [3-0] : Meas. Status Counter
			 			+ F		Error
						+ Other	Status Counter
------------------------------------------------------------------------------*/
UINT08 MeasureRf( void )
{
	switch ( mu08_MeasSC )
	{
		case MEAS_START:		// Initialize
			gu08_TimerAdjustMeasMain = 200;	// GiveUp Timer

			SendTable( (UINT08 *)Tbl_MEAS_RF, sizeof(Tbl_MEAS_RF) );	// YTC007 20050110

			mu08_MeasSC = MEAS_RF_CHECK_1ST;
			break;

		case MEAS_RF_CHECK_1ST:	// Check 1st. Meas. End
			if( DrvDSP_BIOS_ReadBusy() )
			{
				// BUSY == HI
				if( !( DrvDSP_BIOS_GetStatus(  ) & 0x08 ) )
				{
					// Meas. Success
					gu08_TimerAdjustMeasSub = 5;
					mu08_MeasSC = MEAS_RF_INTERVAL;
				}
				else
				{
					// Meas. Error ( Remeas. )
					SendTable( (UINT08 *)Tbl_RE_MEAS_RF, sizeof(Tbl_RE_MEAS_RF) );	// YTC008 20050110
				}
			}
			break;

		case MEAS_RF_INTERVAL:	// Interval
			if( gu08_TimerAdjustMeasSub == 0 )
			{
				// Time has come!
				// Start next meas.
				DrvDSP_BIOS_WriteReg( 0xD0, 0xC0 );
				mu08_MeasSC = MEAS_RF_CHECK_2ND;
			}
			break;

		case MEAS_RF_CHECK_2ND:	// Check 2nd. Meas. End
			// Waiting BUSY
			if( DrvDSP_BIOS_ReadBusy() )
			{
				if( !( DrvDSP_BIOS_GetStatus(  ) & 0x08 ) )
				{
					// Meas. Success -----------------------------------------------
					// Read 0xDE 怣崋慖戰

					// Read Result - - - - - - - - - - - - - - - - - - - - - - - - -
					// Bottom
					DrvDSP_BIOS_WriteReg( 0xD5, 0x01 );
					mu08_MeasRfMin = DrvDSP_BIOS_ReadResult();

					// Peak
					DrvDSP_BIOS_WriteReg( 0xD5, 0x00 );
					mu08_MeasRfMax = DrvDSP_BIOS_ReadResult();

					MeasureRfEnd(  );
					return 0xF0;
				}
				else
				{
					// Meas. Error ( Remeas. from 1st. ) ---------------------------
					SendTable( (UINT08 *)Tbl_RE_MEAS_RF, sizeof(Tbl_RE_MEAS_RF) );	// YTC008 20050110
					mu08_MeasSC = MEAS_RF_CHECK_1ST;
				}
			}
	}
	if( gu08_TimerAdjustMeasMain == 0 )
	{
		// 僞僀儉傾僂僩
		MeasureRfEnd(  );
		return 0xFF;
	}
	return 0x00;
}


/*------------------------------------------------------------------------------
	[NAME]     :MeasureRfEnd
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:UINT08* mu08_SweepFlag
------------------------------------------------------------------------------*/
void MeasureRfEnd( void )
{
	SendTable( (UINT08 *)Tbl_MEAS_RF_END, sizeof(Tbl_MEAS_RF_END) );	// YTC007 20050110
}


/*******************************************************************************
	Rough Focus Bias
*******************************************************************************/

void CheckSetNextFB( void )
{
	if( mu08_index_FB == 0x09 )
	{
		mu08_MainSC = PRE_FB_ERROR;
		return;
	}

	// Set Next FB
	DrvDSP_BIOS_WriteReg( 0x98, Tbl_PRE_FB[++mu08_index_FB] );

		gu16_TimerAdjustMain = 200;

	// Set GFS OK Timer
	if( mu08_index_FB == 0x05 )
	{
		// Center FB
		gu16_TimerAdjustMain = 640;
	}
}


/*------------------------------------------------------------------------------
	[NAME]     :AdjustFbRough
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
------------------------------------------------------------------------------*/
void AdjustFbRough( void )
{
	UINT08 u08_DspStatus;

	switch ( mu08_MainSC )
	{
		case ADJUST_GO:
//			SetGainWithOffset( gu08_kind_Gain );

			mu08_MainSC = WAIT_GFS;
			mu08_SubSC = //0;
			mu08_OnGFS = 0;
			mu08_flg_GFS = 1;

			DrvDSP_BIOS_HalfClv_On(  );
			DrvDSP_BIOS_Clv_On(  );

			AdjustAuto_SetTimer(  );	// FB TimeUp
			gu08_TimerAdjustMeasMain = TIMER_STABLE_GFS;	// Set GFS OK Timer
			gu08_TimerAdjustMeasSub = 32;	// Set FOK NG Timer
			break;

		case WAIT_GFS:
			u08_DspStatus = DrvDSP_BIOS_GetStatus(  );
			if( u08_DspStatus & B00000001 )
			{
				// bit0( GFS ) High ------------------------------------------------
				mu08_OnGFS = 1;

				if( gu08_TimerAdjustMeasMain == 0 )
				{
					// Fix FB
//					mu08_MainSC =ADJUST_END;
					mu08_MainSC = PRE_FB_FIX;
				}
			}
			else
			{
				// bit0( GFS ) Low -------------------------------------------------
				if( gu16_TimerAdjustMain == 0 )
				{
					// GFS Error in this FB ----------------------------------------
					if( mu08_OnGFS )
					{
						// GFS, some time H
						CheckSetNextFB(  );
					}
					else
					{
						// GFS, still Low
						mu08_MainSC = PRE_FB_ERROR;
					}
				}
				else
				{
					// Retry  ------------------------------------------------------

					// Reset GFS OK Timer
					gu08_TimerAdjustMeasMain = TIMER_STABLE_GFS;

					if( u08_DspStatus & B00000010 )
					{
						// FOK H
						gu08_TimerAdjustMeasSub = 32;	// Reset FOK NG Timer
					}
					else
					{
						// FOK L
						if( gu08_TimerAdjustMeasSub == 0 )
						{
							// FOK still Low
							CheckSetNextFB(  );
						}
					}
				}
			}
			break;

		case PRE_FB_ERROR:
			AdjustAuto_NoDisc(  );
			gu08_sts_AdjustAuto = ADJUST_ERROR;
			DrvDSP_BIOS_HalfClv_Off(  );
			break;

		case PRE_FB_FIX:
			mu08_MainSC = ADJUST_END;
			DrvDSP_BIOS_HalfClv_Off(  );
			break;
	}
}


/*------------------------------------------------------------------------------
	[NAME]     :AdjustAuto_NoDisc
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
------------------------------------------------------------------------------*/
void AdjustAuto_NoDisc( void )
{
	DrvDSP_BIOS_00End();

	DrvDSP_BIOS_Stop(  );
	DrvDSP_BIOS_Tracking_Off(  );
	DrvDSP_BIOS_Nothing(  );

	DrvDSP_BIOS_NoDisc(  );
}


/*******************************************************************************
	RF Accurate
*******************************************************************************/
/*------------------------------------------------------------------------------
	[NAME]     :AdjustRfAccurate
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
------------------------------------------------------------------------------*/
void AdjustRfAccurate( void )
{
//	UINT08 u08_Temp;

	switch ( mu08_MainSC )
	{
		case ADJUST_GO:
			mu08_MainSC = EXECUTE_FIT_RF;
			AdjustAuto_SetTimer(  );
			mu08_SweepFlag = 0x00;
			MeasureRfRestart();
			break;

		case EXECUTE_FIT_RF:
			// Meas. RF ============================================================
//			u08_Temp =MeasureRf();
//			switch( u08_Temp )
			switch ( MeasureRf(  ) )
			{
				case 0xFF:		// RF Meas. Error --------------------------------------
					// Retry
					MeasureRfRestart();
					break;

				case 0xF0:		// RF Meas. Success ------------------------------------
					// RF Position - - - - - - - - - - - - - - - - - - - - - - - - - - -
					if( FitRfPosition(  ) == TRUE )
					{
						// Fit or Limit RF Position in this time
						if( ( mu08_SweepFlag & 0xF0 ) == 0xF0 )
						{
							// Already Fited RF Amplitude
							mu08_MainSC = WAIT_END;
							stInfoArea.AdjustOffset[gu08_kind_Gain][11] = gu08_9C_RfShift;
							break;
						}
					}

					// RF Amplitude - - - - - - - - - - - - - - - - - - - - - - - - - - 
					if( ( mu08_SweepFlag & 0xF0 ) != 0xF0 )
					{
						if( FitRfAmplitude(  ) == TRUE )
						{
							// Fit or Limit RF Amplitude
							mu08_SweepFlag |= 0xF0;
							// 怳暆偑崌偭偰傕埵抲崌傢偣宲懕
						}
					}
					MeasureRfRestart();
			}

			if( gu16_TimerAdjustMain == 0 )
			{
				MeasureRfEnd(  );
				mu08_MainSC = WAIT_END;
			}
			break;

		case WAIT_END:
			if( DrvDSP_BIOS_ReadBusy(  ) )
			{
				DrvDSP_BIOS_AdjEnd();
			}
	}
}


/*------------------------------------------------------------------------------
	UINT08	mu08_SweepFlag
		+ bit[7-4] : Counter 
						+ F		End Meas.
			 [3-0] : Meas. Status Counter
			 			+ F		Error
						+ Other	Status Counter
------------------------------------------------------------------------------*/
UINT08 FitRfPosition( void )
{
	if( mu08_MeasRfMin > RF_FOK_H )
	{
		return	DownRfPosition();
	}
	else if( mu08_MeasRfMin <= RF_FOK_L )
	{
		return	UpRfPosition();
	}
	else
	{
		// Fit! Position
		return TRUE;
	}
}


/*------------------------------------------------------------------------------
	FitRfAmplitude
------------------------------------------------------------------------------*/
UINT08 FitRfAmplitude(  )
{
	UINT08 u08_RfAmplitude;

	u08_RfAmplitude = mu08_MeasRfMax - mu08_MeasRfMin;

	if( ( mu08_SweepFlag & 0xF0 ) == 0 )
	{
		// 1st. Try ------------------------------------------------------------
		mu08_SweepFlag |= 0x10;	// Flag Fix Direction
		if( u08_RfAmplitude > RF_AMP_MAX )
		{
//			mu08_SweepFlag &= ~0x01;        // Flag Down Sweep
		}
		else if( u08_RfAmplitude <= RF_AMP_MIN )
		{
			mu08_SweepFlag |= 0x01;	// Flag Up Sweep
		}
		else
		{
			return TRUE;
		}
	}
	else
	{
		// Loop ----------------------------------------------------------------
		if( ( mu08_SweepFlag & 0x0F ) )
		{
			// Up Sweep
			if( u08_RfAmplitude > RF_AMP_MIN )
			{
				return TRUE;
			}
			else
			{
				mu08_9D_RfGain += 2;
				DrvDSP_BIOS_WriteRfGain();

				if( mu08_9D_RfGain == 0x1F )
				{
					// Upper Limit, The end
					return TRUE;
				}
			}
		}
		else
		{
			// Up Sweep
			if( u08_RfAmplitude <= RF_AMP_MAX )
			{
				return TRUE;
			}
			else
			{
				mu08_9D_RfGain -= 2;
				DrvDSP_BIOS_WriteRfGain();

				if( mu08_9D_RfGain == 0x01 )
				{
					// Lower Limit, The end
					return TRUE;
				}
			}
		}
	}

	return FALSE;
}


////////////////////////////////////////////////////////////////////////////////
/*******************************************************************************
	Focus Gain / Track Gain / Focus Bias
*******************************************************************************/

void AdjustGainBias( void )
{
	switch ( mu08_MainSC )
	{
		case ADJUST_GO:
			mu08_MainSC = EXECUTE_SWEEP;
			mu08_SubSC = SWEEP_START;
			switch( gu08_sts_AdjustAuto )
			{
			case	ADJUST_FG:
				gu08_AdjFgSweep =0x0A;			// Backup FG Sweep Counter for Gainup
				gu08_AdjResult[2] = 0x0F;
				mu08_Kind = ADJUST_FG_CMD;
				break;

			case	ADJUST_TG:
				gu08_AdjTgSweep =0x0A;			// Backup TG Sweep Counter for Gainup
				gu08_AdjResult[3] = 0x0F;
				mu08_Kind = ADJUST_TG_CMD;
				break;

			case	ADJUST_FB:
				gu08_AdjResult[0] = 0x80;
				mu08_Kind = ADJUST_FB_CMD;
			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -