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

📄 drv_dsp_adjust.c

📁 ROHM 公司BU9432:application:应用范围
💻 C
📖 第 1 页 / 共 5 页
字号:
//#include  <machine.h>     //Z80梡
//#include  "BU18703.h"     //儗僕僗僞掕媊
#include 	"prototype.h"
#include	"Parameter.h"
#include	"drv_DSP_Adjust.h"			//Sxxx
#include	"extern.h"			//Sxxx
#include	"TableMechServo.h"


//YTC001 20041224 偨偔偝傫曄峏丅

/*******************************************************************************
	Compiler Option
*******************************************************************************/
#pragma nonrec
#pragma nouseix
#pragma optimize time
//#pragma optimize space
#pragma regalo

////////////////////////////////////////
#define   CHK_SWEEP   0
//#define	CHK_SWEEP	1

#if CHK_SWEEP
UINT08 mu08_Servo[3][16][2];
UINT08 mu08_Q1, mu08_Q2;
#endif
////////////////////////////////////////
#define	CHK_OFFSET	0
//#define   CHK_OFFSET  1

#if CHECK_OFFSET
UINT08 mu08_CheckOffset[3][7];
UINT08 mu08_ResultOffset[3][7];
#endif
////////////////////////////////////////
//	Sxxx SC1 / DS2 俤俥僶儔儞僗偺價僢僩暆
//#define	SEL_EF_SC1	0		//DS2
#define	SEL_EF_SC1	1	//SC1
////////////////////////////////////////


void	( *AdjustAuto_seqTbl[] )( void ) = 
{
	AdjustStart,
	AdjustEfBalnce,
	AdjustRfRough,
	AdjustFbRough,
	AdjustRfAccurate,
	AdjustGainBias,
	AdjustGainBias,
	AdjustGainBias
};


void	( *AdjustOffset_seqTbl[] )( void ) =
{
	OfsVco,
	ReadyOffset,
	AdjustOfsInput,
	AdjustOfsSd,
//	FitRfFok,
	MoveLens
};


//	偝偼偄揑僐儊儞僩
//	俀倣俽枅偵CD_MAIN偐傜屇傃弌偝傟傞偱偡丅
/*------------------------------------------------------------------------------
	[NAME]     :AdjustMain
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
------------------------------------------------------------------------------*/
void DrvDSP_AdjustAuto()
{
	if( gu08_sts_AdjustAuto && ( gu08_sts_AdjustAuto != ADJUST_ERROR ))
	{
		AdjustAuto_seqTbl[gu08_sts_AdjustAuto-1]();

		if( mu08_MainSC == ADJUST_END )
		{
			if( ++gu08_sts_AdjustAuto <= ADJUST_FB )
					mu08_MainSC = ADJUST_GO;
			else	gu08_sts_AdjustAuto = ADJUST_NOP;
		}
	}
}


//*******************************************************************************
void	DrvDSP_BIOS_00End( void )
{
	DrvDSP_BIOS_WriteReg( 0xD0, 0x00 );
}

void	subEFbalanceEnd( UINT08 para )
{
	// Stop Meas.
	DrvDSP_BIOS_00End();

	// TD奜棎
	DrvDSP_BIOS_WriteReg( 0xCF, para );
	DrvDSP_BIOS_WriteReg( 0xD4, 0x50 );

	gu08_TimerAdjustMeasMain = 10;
	mu08_MainSC = EF_BALANCE_END_WAIT;
}

void	DrvDSP_BIOS_AdjEnd( void )
{
	DrvDSP_BIOS_00End();
	mu08_MainSC = ADJUST_END;
}

void	DrvDSP_BIOS_WriteResult( void )
{
	DrvDSP_BIOS_WriteReg( 0x90 | mu08_Kind, mu08_AdjustParameter );
}

void	DrvDSP_BIOS_Write99para( void )
{
	DrvDSP_BIOS_WriteReg( 0x99, ( mu08_Parameter | mu08_JudgeBit ) );
}

void	DrvDSP_BIOS_WriteRfGain( void )
{
	DrvDSP_BIOS_WriteReg( 0x9D, mu08_9D_RfGain );
}

void	DrvDSP_BIOS_WriteGain( void )
{
//B0004 --->
	if( gu08_Mech == 0x02 )
		DrvDSP_BIOS_WriteReg( 0x61, ( UINT08 ) ( ( gu08_kind_Gain << 4 ) + 0x09 ) );	//increase Laser power
	else
//B0004 <---
	DrvDSP_BIOS_WriteReg( 0x61, ( UINT08 ) ( ( gu08_kind_Gain << 4 ) | 0x05 ) );
}

void	DrvDSP_BIOS_WriteLensPosition( void )
{
	DrvDSP_BIOS_WriteReg( 0xC8, mu08_LensPosition );
}


void	DrvDSP_BIOS_KindStart( void )
{
	DrvDSP_BIOS_WriteReg( 0xD0, ( mu08_Kind << 4 ));
}

void	DrvDSP_BIOS_90Start( void )
{
	DrvDSP_BIOS_WriteReg( 0xD0, 0x90 );
}

UINT08	DrvDSP_BIOS_ReadResult( void )
{
	return	DrvDSP_BIOS_ReadReg( 0xDE );
}

/*******************************************************************************
	EF Balance
*******************************************************************************/

/*------------------------------------------------------------------------------
	[NAME]     :AdjustStart
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
------------------------------------------------------------------------------*/
void AdjustStart( void )
{
	mu08_MainSC = ADJUST_END;
}


/*------------------------------------------------------------------------------
	[NAME]     :AdjustEfBalnce
	[FUNCTION] :EF Bal. Start
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
------------------------------------------------------------------------------*/
void AdjustEfBalnce( void )
{
	switch ( mu08_MainSC )		//俽俠俠暿暘婒
	{
		case ADJUST_GO:
//YTC00G >>> 20050127 focus_serch偱俠俴倁僉僢僋巒傔傞
		  if( !gu08_TimerAdjustSub )
		  {
			gu08_servo_status &= ~B10000000;	//
			DrvDSP_BIOS_WriteReg( 0x88, Tbl_SP_HIGHT_SLOW[gu08_Mech] );	// Kick Hight
//<<<

			//亙弨旛亜
//			DrvDSP_BIOS_Tracking_Off(  );
			DrvDSP_BIOS_WriteReg( 0xFD, 0x00 );	//for 9541SC's BUG Tracking move 
			DrvDSP_BIOS_WriteReg( 0xC1, 0x20 );	//for 9541SC's BUG Tracking move 
			DrvDSP_BIOS_MMute1_Off( );	// YTC001 20041224

			// 奜棎愝掕
//			DrvDSP_BIOS_WriteReg( 0xEB, DISTURB_TB );   
			DrvDSP_BIOS_WriteReg( 0xED, Tbl_DISTURB_TB[gu08_Mech] );
			DrvDSP_BIOS_WriteReg( 0xCF, 0x88 );

			// 應掕忦審
			SendTable( (UINT08 *)Tbl_MEAS_EF_BALANCE, sizeof(Tbl_MEAS_EF_BALANCE) );	// YTC007 20050110

			// 僞僀儉傾僂僩丂愝掕
			AdjustAuto_SetTimer(  );

			// 拃師弶婜壔
			mu08_Parameter = 0x00;
			mu08_JudgeBit = B10000000;
			DrvDSP_BIOS_Write99para();

			// 應掕
			// 應掕儌乕僪僆儞亄侾夞應掕
			DrvDSP_BIOS_90Start();

			gu08_AdjResult[1] = 0x80;
			mu08_MainSC = EXECUTE_EF_BALANCE;
		}
			break;

		case EXECUTE_EF_BALANCE:
			// Adjusting -----------------------------------------------------------
			if( DrvDSP_BIOS_ReadBusy() )
			{
				// BUSY High( Meas. Done )
				if( DrvDSP_BIOS_GetStatus(  ) & 0x08 )
				{
					// SENS is High ( Meas. Error )
					// Re Meas.
					DrvDSP_BIOS_90Start();
				}
				else
				{
					// Meas Success
					if( DrvDSP_BIOS_ReadResult() < 0x80 )
					{
						mu08_Parameter |= mu08_JudgeBit;
					}

					mu08_JudgeBit >>= 1;
					DrvDSP_BIOS_Write99para();

					if( !mu08_JudgeBit )
					{
						// Adjust Compleat -----------------------------------------
						//俤俥挷惍廔椆
						//亙屻巒枛亜
						subEFbalanceEnd( B10100000 );
						gu08_AdjResult[1] =( mu08_Parameter | mu08_JudgeBit );
						break;
					}
				}
			}

			if( gu16_TimerAdjustMain == 0 )
			{
				// Time Up ---------------------------------------------------------
				subEFbalanceEnd( 0x80 );
				DrvDSP_BIOS_WriteReg( 0x99, 0x80 );
			}
			break;

		case EF_BALANCE_END_WAIT:
			if( !gu08_TimerAdjustMeasMain )
				mu08_MainSC = ADJUST_END;
	}
	return;
}


/*******************************************************************************
	RF Rough
*******************************************************************************/
void	MeasureRfRestart( void )
{
	mu08_MeasSC = MEAS_START;
	MeasureRf(  );
}


/*------------------------------------------------------------------------------
	[NAME]     :AdjustRfRough
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:UINT08* pu08_MainSC, UINT08* pu08_SubSC
	[HISTORY]  :
	[NOTE]     :
------------------------------------------------------------------------------*/
void AdjustRfRough(  )
{
	switch ( mu08_MainSC )
	{
		case ADJUST_GO:
			// Track Servo On
			DrvDSP_BIOS_Tracking_On(  );

			SendTable( (UINT08 *)Tbl_CLV_ADJ, sizeof(Tbl_CLV_ADJ) );	// YTC007 20050110
			DrvDSP_BIOS_WriteReg( 0x62, Tbl_EQ_1X[gu08_kind_Gain] );	// YTC007 20050110

			// Initial VCO Offset ( Reset Joggable Mode )
//			DrvDSP_BIOS_WriteReg( 0x9E, gu08_VcoOffset );

			// CLV Mode
			DrvDSP_BIOS_HalfClv_On(  );	// Halh CLV Mode
			DrvDSP_BIOS_Clv_Rough(  );	// Rough Mode

			gu08_9C_RfShift = stInfoArea.AdjustOffset[gu08_kind_Gain][11];
			mu08_9D_RfGain = RF_AMP_INIT;
			DrvDSP_BIOS_WriteRfGain();

			// Start Ajust!
			mu08_SweepFlag = 0;
			mu08_MeasSC = MEAS_START;
			mu08_MainSC = EXECUTE_RF_ROUGH;
			AdjustAuto_SetTimer(  );

		case EXECUTE_RF_ROUGH:
			switch ( ExecuteRfRough(  ) )
			{
				case 0x01:
				case 0x03:
					break;
				default:
					if( gu16_TimerAdjustMain == 0 )
					{
						DrvDSP_BIOS_00End();
						mu08_MainSC = WAIT_END;
					}
					break;

				case 0xF5:		// Adjust Compleat
				case 0xF6:		// Limit
//					gu08_kind_Gain |= 0x08;
					mu08_MainSC = WAIT_END;
					break;

				case 0xFA:		// Restart Alignment
					DrvDSP_BIOS_WriteReg( 0x99, 0x80 );		// T.Balance
					DrvDSP_BIOS_WriteReg( 0x9D, DSP_9D_INIT );		// RF Gain
					gu08_sts_AdjustAuto =ADJUST_START;
					break;

				case 0xFF:		// Meas. Error
					AdjustAuto_NoDisc(  );	//RF挘晅偒偲巚傢傟傞丅
					MeasureRfEnd(  );
					gu08_sts_AdjustAuto = ADJUST_ERROR;
					break;
			}
			break;

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


/*------------------------------------------------------------------------------
	[NAME]     :ExecuteRfRough
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
 ------------------------------------------------------------------------------
	UINT08	mu08_SweepFlag
		+ bit[7-4] : Counter 
						+ F		End Meas
			 [3-0] : Pos. & Amp. Info.
			 			+ F		Error.
						+ 0-5	Pos. & Amp.
------------------------------------------------------------------------------*/
UINT08 ExecuteRfRough(  )
{
	UINT08 u08_RfAmplitude;
	UINT08 u08_Status;

	switch ( MeasureRf(  ) )
	{
		case 0x00:
			// Meas. Continue
			u08_Status = 0x00;
			gu08_ChkRfGain = 0x00;	//YTC A2X 20050322 No.37
			break;

		case 0xF0:
			// Meas. Success -------------------------------------------------------
			if( mu08_MeasRfMax >= RF_MAX )
			{
				// RF Peak >= RF_MAX -----------------------------------------------
				if( mu08_MeasRfMin >= RF_MIN )
				{
					// RF Bottom >= RF_MIN -----------------------------------------
					// Status 1 (Too High Position)
					u08_Status = 0x01;

					if( !( mu08_SweepFlag & 0x10 ) )
					{
						// Not Fix Direction
						mu08_SweepFlag |= 0x10;		// Flag Fix Direction
//						mu08_SweepFlag &= ~0x01;	// Flag Down Sweep
					}

					if( mu08_SweepFlag & 0x0F )
					{
						// Up Sweep ----------------------------------------------
						u08_Status = 0xF6;
					}
					else
					{
						// Down Sweep ----------------------------------------------
						if( DownRfPosition(  ) == TRUE )
						{
							// RF Shift Upper Limit
							// Try RF Gain Down
							u08_Status = DownRfGain();
						}
						else
						{
							MeasureRfRestart();
						}
					}
				}
				else
				{
					// RF Bottom < RF_MIN ------------------------------------------
					// Status 2 (Too Big Amplitude)
					u08_Status = DownRfGain();
				}
			}
			else
			{
				// RF Peak < RF_MAX ------------------------------------------------
				if( mu08_MeasRfMin < RF_MIN )
				{
					// RF Bottom < RF_MIN ------------------------------------------
					// Status 3 (Too Low Position)
					u08_Status = 0x03;

					if( !( mu08_SweepFlag & 0xF0 ) )
					{
						// Not Fix Direction
						mu08_SweepFlag |= 0x11;		// Flag Fix Direction / Up Sweep
					}

					if( mu08_SweepFlag & 0x0F )
					{
						// Up Sweep ----------------------------------------------
						if( UpRfPosition(  ) == TRUE )
						{
							// RF Shift Lower Limit
							// Try RF Gain Up
							u08_Status = UpRfGain();
						}
						else
						{
							MeasureRfRestart();
						}
					}
					else
					{
						// Down Sweep ----------------------------------------------
						u08_Status = 0xF6;
					}

				}
				else
				{
					// RF Bottom >= RF_MIN -----------------------------------------
					u08_RfAmplitude = mu08_MeasRfMax - mu08_MeasRfMin;

					u08_Status = 0xFF;

					if( u08_RfAmplitude >= RF_MIRROR )
					{
						u08_Status = 0xF5;
						// RF( max-min ) >= RF_MIRROR_H
						if( u08_RfAmplitude < RF_AMP_L_LIMIT )
						{
							// RF( max-min ) < RF_AMP_L_LIMIT_L
							// Status 4 (Too Small Amplitude)
							u08_Status = UpRfGain();

						}
					}
				}
			}
			break;

		case 0xFF:
			// Meas. Error ---------------------------------------------------------
			u08_Status = 0xFF;
			break;
	}
	return u08_Status;
}


/*-----------------------------------------------------------------------------*/
#if	!ROM	// SDC 20050208
void	SetFoTrGain( void )
{
	DrvDSP_BIOS_WriteGain();
	DrvDSP_BIOS_WriteReg( 0x62, Tbl_EQ_1X[gu08_kind_Gain] );
	SetGainWithOffset( gu08_kind_Gain );
}
#endif


/*------------------------------------------------------------------------------
	[NAME]     :UpRfGain
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
------------------------------------------------------------------------------*/
UINT08 UpRfGain( void )
{
	if( gu08_kind_Gain == GAIN_X1 )
	{
		if( !( gu08_ChkRfGain & B00000010 ))
		{

⌨️ 快捷键说明

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