📄 drv_dsp_adjust.c
字号:
//#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 + -