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

📄 drv_dsp_adjust.c

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

						case GAIN_X1:
#if CHECK_OFFSET
							CheckOffset(gu08_kind_Gain);
#endif
							gu08_sts_AdjustOffset = OFS_CLEAN_UP;
							mu08_MoveLensSC = START_UP;
							break;
					}
#else
#if CHECK_OFFSET
							CheckOffset(gu08_kind_Gain);
#endif
					if( gu08_kind_Gain == GAIN_X1 )
					{
						gu08_sts_AdjustOffset = OFS_CLEAN_UP;
						mu08_MoveLensSC = START_UP;
					}else
					{
						gu08_sts_AdjustOffset = OFS_INPUT;
						mu08_SubSC = OFFSET_START;
						gu08_kind_Gain--;
					}
#endif
					break;

				case OFS_CLEAN_UP:
					gu08_sts_AdjustOffset = ADJUST_NOP;
					break;
			}

			mu08_MainSC = ADJUST_GO;
		}
		else if( mu08_MainSC == ADJUST_ERROR )
		{
			gu08_sts_AdjustOffset = ADJUST_ERROR;
			return;
		}
	}

	switch ( gu08_sts_AdjustOffset )
	{
		case OFS_VCO:
			MoveLens(  );
			OfsVco(  );
			break;

		case OFS_READY:
			MoveLens(  );
			ReadyOffset(  );
			break;

		case OFS_INPUT:
			AdjustOfsInput(  );
			break;

#if	ROM	// SDC 20050209
		case OFS_DRIVE_TD_FD:
			AdjustOfsTdFd(  );
			break;
#endif

		case OFS_DRIVE_SD:
			AdjustOfsSd(  );
			break;

//		case OFS_FIT_RF_FOK:
//			FitRfFok(  );
//			break;

		case OFS_CLEAN_UP:
			MoveLens(  );
			break;
	}
#else	//**********************************************************************
	if( gu08_sts_DSPINIT && gu08_sts_AdjustOffset && ( gu08_sts_AdjustOffset != ADJUST_ERROR ))
	{
		if( gu08_sts_AdjustOffset == ADJUST_START )
		{
			mu08_MoveLensSC = START_DOWN;
			gu08_sts_MovePickupIn=1;			//YTC000 僗儗僢僪堷偒崬傒傪偙偙偱梫媮偡傞丅
			gu08_sts_AdjustOffset = OFS_VCO;
			mu08_MainSC = ADJUST_GO;
		}
		if( gu08_sts_AdjustOffset <= OFS_READY )
			MoveLens();

		AdjustOffset_seqTbl[(gu08_sts_AdjustOffset>>4)-1]();

		if( mu08_MainSC == ADJUST_END )
		{
			switch( gu08_sts_AdjustOffset )
			{
			case	OFS_VCO:
				gu08_kind_Gain = GAIN_X5;
				break;

			case	OFS_FIT_RF_FOK:
#if CHECK_OFFSET
				CheckOffset(gu08_kind_Gain);
#endif
				if( gu08_kind_Gain == GAIN_X1 )
				{
					gu08_sts_AdjustOffset = OFS_CLEAN_UP - 0x10;
					mu08_MoveLensSC = START_UP;
				}
				else
				{
					gu08_sts_AdjustOffset = OFS_INPUT - 0x10;
					gu08_kind_Gain--;
				}
				break;
			}

			gu08_sts_AdjustOffset += 0x10;

			if( gu08_sts_AdjustOffset <= OFS_CLEAN_UP )
			{
				mu08_SubSC = OFFSET_START;
				mu08_MainSC = ADJUST_GO;
			}
			else
			{
				gu08_sts_AdjustOffset = ADJUST_NOP;
			}
		}
	}
#endif
}


//*------------------------------------------------------------------------------
#if	!ROM	// SDC 20050208
void	MeasVcoMinMaxStart( void )
{
	mu08_MeasSC = MEAS_START;
	MeasVcoMinMax(  );
}

void	MeasVcoRestart( UINT08 sw )
{
	// VCO僙儞僞乕揹棳掞峈抣
	DrvDSP_BIOS_WriteReg( 0x9E + sw, gu08_Vco[sw] );

	// VCO嵞應掕
	mu08_MeasSC = MEAS_START;
	MeasVcoMinMax(  );
}

void	SetMaxState( void )
{
	DrvDSP_BIOS_WriteReg( 0x8B, 0x7F );	// Maxmam
	mu08_MeasSC = MEAS_WAIT_VCO_MAX;
}
#endif


/*------------------------------------------------------------------------------
	[NAME]     :OfsVco
	[FUNCTION] :
	[RETURN]   :void 
	[PARAMETER]:void
------------------------------------------------------------------------------*/
void OfsVco( void )
{
	switch ( mu08_MainSC )
	{
		case ADJUST_GO:
			SendTable( (UINT08 *)Tbl_MEAS_VCO_START, sizeof(Tbl_MEAS_VCO_START) );	// YTC007 20050110

			gu08_Vco[VCO_OFFSET] = VCO_OFS_INIT;
			gu08_Vco[VCO_GAIN]   = VCO_GAIN_INIT;

			DrvDSP_BIOS_WriteReg( 0x9E, gu08_Vco[VCO_OFFSET] );	//挷惍僙儞僞乕抣 梫専摙丅僆僼僙僢僩幚峴慜偼愝掕儕儘乕僪丠
			DrvDSP_BIOS_WriteReg( 0x9F, gu08_Vco[VCO_GAIN] );	//挷惍僙儞僞乕抣

//			mu08_MainSC = EXECUTE_VCO_GAIN;
			mu08_MainSC = WAIT_STABLE_VCO;	//YTC000 俢俽俹弶婜壔捈屻偺VCO敪怳埨掕懸偪丅
			mu08_SweepFlag = 0;

//			// VCO應掕梫媮				//YTC000 婰弎埵抲曄峏
//			mu08_MeasSC = MEAS_START;
//			MeasVcoMinMax(  );
			break;

//YTC000 怴僗僥乕僩捛壛
		case WAIT_STABLE_VCO:
//			if( gu08_TimerAdjustMeasMain )
//			{
//				break;
//			}
			if( mu08_MoveLensSC != DONE_LENS_MOVE )
			{
				break;
			}

			// VCO應掕梫媮
			MeasVcoMinMaxStart(  );
			mu08_MainSC = EXECUTE_VCO_GAIN;
//YTC000	break;
			//v. 懕偗偰丄壓偺張棟

		case EXECUTE_VCO_GAIN:
			if( MeasVcoMinMax(  ) == MEAS_SUCCESS )
			{
				// Meas. End
				if( ExecuteVcoGainAdjust(  ) )
				{
					mu08_MainSC = EXECUTE_VCO_OFFSET;
					MeasVcoMinMaxStart(  );
				}
			}
			break;

		case EXECUTE_VCO_OFFSET:
			if( MeasVcoMinMax(  ) == MEAS_SUCCESS )
			{
				// Meas. End
				if( ExecuteVcoOffsetAdjust(  ) )
				{
//					EndVcoOffsetAdjust(  );
					// PLL愊暘儗僕僗僞抣
					DrvDSP_BIOS_WriteReg( 0x8A, Tbl_CLV_HOLD[gu08_Mech] );	// 捠忢	// YTC007 20050108
					DrvDSP_BIOS_WriteReg( 0x82, 0x00 );	// YTC011 20050218 OFFSET ADJ 偼僩儗乕僯儞僌忬懺偱應傞丅

					mu08_MainSC = ADJUST_END;
				}
			}
			break;
	}
}


/*------------------------------------------------------------------------------
	[NAME]     :ExecuteVcoGainAdjust
	[FUNCTION] :
	[RETURN]   :UINT08
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
 ------------------------------------------------------------------------------
	YTC001 20041224	Update
------------------------------------------------------------------------------*/
UINT08 ExecuteVcoGainAdjust( void )
{
	UINT08 mu08_ResultVcoGain;

	if( mu08_ResultVcoMin < 0x04 )
	{
		// VCOmin < 0x04(壓尷)
		if( gu08_Vco[VCO_OFFSET] != 0x1F )
		{
			// 愝掕抣嵟戝偱側偄
			gu08_Vco[VCO_OFFSET]++;

			// VCO僙儞僞乕揹棳掞峈抣 / VCO嵞應掕
			MeasVcoRestart( VCO_OFFSET );
			return FALSE;
		}
	}

	mu08_ResultVcoGain = mu08_ResultVcoMax - mu08_ResultVcoMin;

	if( mu08_ResultVcoGain < VCO_GAIN_MAX )
	{
		// VCO Gain < VCO_GAIN_MAX
		if( mu08_ResultVcoGain < VCO_GAIN_MIN )
		{
			// VCO Gain < VCO_GAIN_MIN (Too Low)
			switch( mu08_SweepFlag & 0x0F )
			{
			case 0x00:
				mu08_SweepFlag |= 0x08;	// Up Sweep Flag On
			case 0x08:
				if( gu08_Vco[VCO_GAIN] != 0x0F )
				{
					// updatable Gain Parameter
					gu08_Vco[VCO_GAIN]++;

					// VCO僎僀儞掞峈抣 / VCO嵞應掕
					MeasVcoRestart( VCO_GAIN );
					return FALSE;
				}
//			case 0x04:
//				// Finish
//				return TRUE;
			}
		}
	}
	else
	{
		// VCO(max-min) >= VCO_GAIN_MAX (Too High)
		switch( mu08_SweepFlag & 0x0F )
		{
		case 0x00:
			mu08_SweepFlag |= 0x04;	// Down Sweep Flag On
		case 0x04:
			if( gu08_Vco[VCO_GAIN] != 0x00 )
			{
				// Updatable Gain Parameter
				gu08_Vco[VCO_GAIN]--;

				// VCO僎僀儞掞峈抣 / VCO嵞應掕
				MeasVcoRestart( VCO_GAIN );

				return FALSE;
			}
//		case 0x08:
//			return TRUE;
		}
	}
	return	TRUE;
}


/*------------------------------------------------------------------------------
	[NAME]     :ExecuteVcoOffsetAdjust
	[FUNCTION] :
	[RETURN]   :UINT08
	[PARAMETER]:void
	[HISTORY]  :
	[NOTE]     :
 ------------------------------------------------------------------------------
	YTC001 20041224	Update
------------------------------------------------------------------------------*/
UINT08 ExecuteVcoOffsetAdjust( void )
{
	if( mu08_ResultVcoMax < VCO_FREQ_MAX )
	{
		// VCOmax < VCO_FREQ_MAX(忋尷)
		if( mu08_ResultVcoMax >= VCO_FREQ_MIN )
		{
			// VCOmax >= VCO_FREQ_MIN(壓尷)(揔惓斖埻)
//			EndVcoOffsetAdjust(  );
			return TRUE;
		}

		// VCOmax < VCO_FREQ_MIN(壓尷) (Too Low)
		switch( mu08_SweepFlag & 0xF0 )
		{
		case 0x00:
			mu08_SweepFlag |= 0x80;	// Up Sweep Flag On
		case 0x80:
			if( gu08_Vco[VCO_OFFSET] != 0x1F )
			{
				// Updatable Offset Parameter
				gu08_Vco[VCO_OFFSET]++;
				mu08_SweepFlag |= 0x80;

				// VCO僙儞僞乕揹棳掞峈抣 / VCO嵞應掕
				MeasVcoRestart( VCO_OFFSET );

				return	FALSE;
			}
//		case 0x40:
//			// 忋徃拞偺壓崀
//			return TRUE;
		}
	}
	else
	{
		// VCOmax >= VCO_FREQ_MAX(忋尷) (Too High)
		switch( mu08_SweepFlag & 0xF0 )
		{
		case 0x00:
			mu08_SweepFlag |= 0x40;	// Down Sweep Flag On
		case 0x40:
			if( gu08_Vco[VCO_OFFSET] != 0x00 )
			{
				// Updatable Offset Parameter
				gu08_Vco[VCO_OFFSET]--;
				mu08_SweepFlag |= 0x40;

				// VCO僙儞僞乕揹棳掞峈抣 / VCO嵞應掕
				MeasVcoRestart( VCO_OFFSET );

				return	FALSE;
			}
//		case 0x80:
//			// 忋徃拞偺壓崀
//			return TRUE;
		}
	}
	return	TRUE;
}


///*------------------------------------------------------------------------------
//	[NAME]     :EndVcoOffsetAdjust
//	[FUNCTION] :
//	[RETURN]   :void 
//	[PARAMETER]:void
//	[HISTORY]  :
//	[NOTE]     :
//------------------------------------------------------------------------------*/
//void EndVcoOffsetAdjust( void )
//{
//	// PLL愊暘儗僕僗僞抣
////	DrvDSP_BIOS_WriteReg( 0x8A, 0x00 | CLV_HOLD );	// 捠忢	// YTC007 20050108
//	DrvDSP_BIOS_WriteReg( 0x8A, Tbl_CLV_HOLD[gu08_Mech] );	// 捠忢	// YTC007 20050108
//
////	BIOS_StartTraining();
//	DrvDSP_BIOS_WriteReg( 0x82, 0x20 );	// Wide
//	DrvDSP_BIOS_WriteReg( 0x82, 0x00 );	// YTC011 20050218 OFFSET ADJ 偼僩儗乕僯儞僌忬懺偱應傞丅
//
////	DrvDSP_BIOS_WriteReg(0x9E,0x18);    //
////	DrvDSP_BIOS_WriteReg(0x9F,0x09);    //
//
//	return;
//}


/*******************************************************************************
	Meassure VCO
*******************************************************************************/

/*------------------------------------------------------------------------------
	[NAME]     :MeasVcoMinMax
	[FUNCTION] :
	[RETURN]   :UINT08
	[PARAMETER]:void
------------------------------------------------------------------------------*/
UINT08 MeasVcoMinMax( void )
{
	switch ( mu08_MeasSC )
	{
		case MEAS_START:
			if( mu08_MainSC == EXECUTE_VCO_OFFSET )
			{
				SetMaxState();
				gu08_TimerAdjustMeasMain = 3;
			}else
			{
				DrvDSP_BIOS_WriteReg( 0x8B, 0x80 );	// Minimum
				gu08_TimerAdjustMeasMain = 10;
				mu08_MeasSC = MEAS_WAIT_VCO_MIN;
			}
			break;

		case MEAS_WAIT_VCO_MIN:
		case MEAS_WAIT_VCO_MAX:
			if( !gu08_TimerAdjustMeasMain )
			{
				// Start VCO Meas.
				DrvDSP_BIOS_WriteReg( 0xD0, 0xE0 );
				mu08_MeasSC -= 0x10;				// next state MEAS_VCO_MIN/MAX
			}
			break;

		case MEAS_VCO_MIN:
			if( DrvDSP_BIOS_ReadBusy(  ) )
			{
				mu08_ResultVcoMin = GetMeasVco();

				SetMaxState();
				gu08_TimerAdjustMeasMain = 10;
			}
			break;

		case MEAS_VCO_MAX:
			if( DrvDSP_BIOS_ReadBusy(  ) )
			{
				mu08_ResultVcoMax = GetMeasVco();
				mu08_MeasSC = MEAS_SUCCESS;
				break;
			}
	}
	return mu08_MeasSC;
}


/*------------------------------------------------------------------------------
	[NAME]     :GetMeasVco
	[FUNCTION] :
	[RETURN]   :UINT08 
	[PARAMETER]:void
------------------------------------------------------------------------------*/
UINT08	GetMeasVco( void )
{
	gu32Work.b.ll = DrvDSP_BIOS_ReadResult();
	DrvDSP_BIOS_EndMeasure(  );
	return	gu32Work.b.ll;
}


/*------------------------------------------------------------------------------
	[NAME]     :MoveLens
	[FUNCTION] :
	[RETURN]   :void
	[PARAMETER]:void
------------------------------------------------------------------------------*/
void MoveLens( void )
{
	switch ( mu08_MoveLensSC )
	{
		case START_UP:
			DrvDSP_BIOS_Laser_Off(  );
			gu08_TimerAdjustSub = 0;
			mu08_MoveLensSC = MOVING_UP;
			mu08_Counter = 1;
			break;

		case START_DOWN:
			gu08_sts_LON =0;				// Init 0x60 Status	// YTC_20041228
			gu08_sts_LON &=~BIT_RF_PH_CPS;	// RF_PH_CPS X1		// YTC_20041228

//YTC00G	DrvDSP_BIOS_Laser_On(  );	//20050129 Laser岝傜偣側偄偱僆僼僙僢僩挷惍偡傞偐傕丅

//B00004			if(( CPU_LCD_SIODR2 & B01000000)!=0)	//TAP501 PIN23 LASER_SEL

			if(( CPU_LCD_SIODR3 & B00000100)!=0)	//TAP502 PIN27 LASER_SEL	//B0004
			{
				DrvDSP_BIOS_Laser_On(  );
			}
//<<<

			gu08_TimerAdjustSub = TIME_STABLE_LASER;
			mu08_LensPosition = 0x00;

//B0003			DrvDSP_BIOS_MMute2_Off(  );

			// Set Initial Lens Position
#if	ROM	// SDC 20050209
			DrvDSP_BIOS_WriteReg( 0xC8, mu08_LensPosition );
#else
			DrvDSP_BIOS_WriteLensPosition();
#endif
			// Manual Lens Ctrl.
			DrvDSP_BIOS_WriteReg( 0xC0, 0x20 );	// Manual Ctrl

			mu08_MoveLensSC = MOVING_DOWN;
			mu08_Counter = 0;	//
//			break;

		case MOVING_DOWN:
		case MOVING_UP:
			// Check & Update Counter

⌨️ 快捷键说明

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