📄 drv_dsp_adjust.c
字号:
#if CHK_SWEEP
mu08_Q1 = gu08_sts_AdjustAuto - ADJUST_FG;
#endif
case EXECUTE_SWEEP:
if( SweepCtrl( ) )
{
mu08_MainSC = ADJUST_END;
}
}
return;
}
/*******************************************************************************
Sweep Control
*******************************************************************************/
/*------------------------------------------------------------------------------
SweepCtr
------------------------------------------------------------------------------*/
UINT08 SweepCtrl( void )
{
UINT08 u08_MeasResult; // Result Average 8 times
switch ( mu08_SubSC )
{
case SWEEP_START:
mu08_LowerLimit = 0x00; // 嫟捠
if( mu08_Kind == ADJUST_FB_CMD )
{
// Focus Bias ------------------------------------------------------
mu08_Target = 128;
mu08_Offset = 4;
mu08_AdjustValue = Tbl_PRE_FB[mu08_index_FB];
mu08_UpperLimit = 0xFC;
// DrvDSP_BIOS_WriteReg( 0xED, DISTURB_FB );
DrvDSP_BIOS_WriteReg( 0xED, Tbl_DISTURB_FB[gu08_Mech] );
}
else
{
// Gain ------------------------------------------------------------
mu08_Target = 131;
mu08_Offset = 2;
mu08_AdjustValue = 0x0A;
mu08_UpperLimit = 20;
if( mu08_Kind == ADJUST_FG_CMD ) //Sxxx Okumura Request
{
DrvDSP_BIOS_WriteReg( 0xED, Tbl_DISTURB_FG[gu08_Mech] );
}
else
{
DrvDSP_BIOS_WriteReg( 0xED, Tbl_DISTURB_TG[gu08_Mech] );
}
}
DrvDSP_BIOS_WriteReg( 0xD2, 0x15 ); // Meas. Time
DrvDSP_BIOS_WriteReg( 0xD4, 0x50 ); //
DrvDSP_BIOS_WriteReg( 0xD5, 0x00 ); // Select read signal
#if CHK_SWEEP
mu08_Servo[mu08_Q1][0][0] = 0;
mu08_Servo[mu08_Q1][1][0] = 0;
mu08_Servo[mu08_Q1][2][0] = 0;
mu08_Servo[mu08_Q1][3][0] = 0;
mu08_Servo[mu08_Q1][4][0] = 0;
mu08_Servo[mu08_Q1][5][0] = 0;
mu08_Servo[mu08_Q1][6][0] = 0;
mu08_Servo[mu08_Q1][7][0] = 0;
mu08_Servo[mu08_Q1][8][0] = 0;
mu08_Servo[mu08_Q1][9][0] = 0;
mu08_Servo[mu08_Q1][10][0] = 0;
mu08_Servo[mu08_Q1][11][0] = 0;
mu08_Servo[mu08_Q1][12][0] = 0;
mu08_Servo[mu08_Q1][13][0] = 0;
mu08_Servo[mu08_Q1][14][0] = 0;
mu08_Servo[mu08_Q1][15][0] = 0;
mu08_Servo[mu08_Q1][0][1] = 0;
mu08_Servo[mu08_Q1][1][1] = 0;
mu08_Servo[mu08_Q1][2][1] = 0;
mu08_Servo[mu08_Q1][3][1] = 0;
mu08_Servo[mu08_Q1][4][1] = 0;
mu08_Servo[mu08_Q1][5][1] = 0;
mu08_Servo[mu08_Q1][6][1] = 0;
mu08_Servo[mu08_Q1][7][1] = 0;
mu08_Servo[mu08_Q1][8][1] = 0;
mu08_Servo[mu08_Q1][9][1] = 0;
mu08_Servo[mu08_Q1][10][1] = 0;
mu08_Servo[mu08_Q1][11][1] = 0;
mu08_Servo[mu08_Q1][12][1] = 0;
mu08_Servo[mu08_Q1][13][1] = 0;
mu08_Servo[mu08_Q1][14][1] = 0;
mu08_Servo[mu08_Q1][15][1] = 0;
mu08_Q2 = 0;
#endif
AdjustAuto_SetTimer( );
// Start Meas.
// mu08_SweepFlag =0;
mu08_SubSC = JUDGE_SWEEP_1ST;
mu08_MeasSC = MEAS_START;
case JUDGE_SWEEP_1ST:
case JUDGE_SWEEP_LOOP:
// Measure
u08_MeasResult = MeasSweep( );
// Judge
if( mu08_MeasSC == MEAS_DONE_AVERAGE )
{
// Meas. Compleat
if( mu08_SubSC == JUDGE_SWEEP_LOOP )
gu32Work.b.ll = JudgeSweepLoop( u08_MeasResult );
else gu32Work.b.ll = JudgeSweep1st( u08_MeasResult );
if( gu32Work.b.ll )
{
// Adjust Done!
mu08_SubSC = WAIT_END;
}
else
{
if( SetSweepStep( u08_MeasResult ) )
{
if( mu08_SubSC == JUDGE_SWEEP_LOOP )
{
DrvDSP_BIOS_AdjEnd();
DrvDSP_BIOS_WriteResult();
return TRUE; // YTC001 20041224
}else mu08_SubSC = WAIT_END;
}
else
{
DrvDSP_BIOS_WriteResult();
mu08_MeasSC = MEAS_NEXT;
MeasSweep( );
mu08_SubSC = JUDGE_SWEEP_LOOP;
}
}
}
break;
case WAIT_END:
if( DrvDSP_BIOS_ReadBusy( ) )
{
DrvDSP_BIOS_AdjEnd();
return TRUE;
}
}
if( gu16_TimerAdjustMain == 0 )
{
// Time Up ( Force end )
mu08_SubSC = WAIT_END;
}
return FALSE;
}
/*------------------------------------------------------------------------------
JudgeSweep1st
------------------------------------------------------------------------------
Function : Check 1st. result, diside direction & target
Arguments: UINT08* mu08_SweepFlag Sweep Status
UINT08* mu08_Target Target
UINT08 mu08_Offset Target Window Offset
UINT08 u08_MeasResult Meas. Result
Return : UINT08 Sweep Status
------------------------------------------------------------------------------*/
UINT08 JudgeSweep1st( UINT08 u08_MeasResult )
{
if( u08_MeasResult > ( mu08_Target + mu08_Offset ) )
{
// Too High ------------------------------------------------------------
mu08_SweepFlag = FALSE; // Down Sweep
mu08_Target += mu08_Offset;
mu08_Limit =mu08_LowerLimit;
}
else
{
if( u08_MeasResult > ( mu08_Target - mu08_Offset ) )
{
// Just in Target! -------------------------------------------------
return TRUE;
}
else
{
// Too Low ---------------------------------------------------------
mu08_SweepFlag = TRUE; // Up Sweep
mu08_Target -= mu08_Offset;
mu08_Limit =mu08_UpperLimit;
}
}
return FALSE;
}
/*------------------------------------------------------------------------------
JudgeSweepLoop
------------------------------------------------------------------------------
Function : Check result to across the target
Arguments: UINT08* mu08_SweepFlag Sweep Status
UINT08* mu08_Target Target
UINT08 u08_MeasResult Meas. Result
Return : UINT08 Across or yet
------------------------------------------------------------------------------*/
UINT08 JudgeSweepLoop( UINT08 u08_MeasResult )
{
if( mu08_SweepFlag )
{
// Up Sweep
if( u08_MeasResult > mu08_Target )
{
return TRUE;
}
}
else
{
// Down Sweep
if( u08_MeasResult <= mu08_Target )
{
return TRUE;
}
}
return FALSE;
}
/*------------------------------------------------------------------------------
MeasSweep
------------------------------------------------------------------------------
Function : Meas Engine
Arguments: UINT08* pu08_MeasSC Sequence Counter
UINT08* mu08_Kind Kind
Return : UINT08 Average
------------------------------------------------------------------------------*/
UINT08 MeasSweep( )
{
static UINT08 su08_MeasCounter; // Meas. Counter
static UINT16 su16_MeasAveBuffer;
UINT08 u08_MeasAve;
// UINT08 u08_DspStatus;
switch ( mu08_MeasSC )
{
case MEAS_START:
DrvDSP_BIOS_KindStart();
case MEAS_NEXT:
su08_MeasCounter = 8;
su16_MeasAveBuffer = 0;
mu08_MeasSC = MEAS_AVERAGE;
break;
case MEAS_AVERAGE:
if( DrvDSP_BIOS_ReadBusy() )
{
// BUSY High( Meas. Done ) ---------------------------------------------
if( DrvDSP_BIOS_GetStatus( ) & 0x08 )
{
// SENS is High ( Meas. Error )
// ReTry Meas.
DrvDSP_BIOS_KindStart();
break;
}
// Meas. Success -------------------------------------------------------
su16_MeasAveBuffer += DrvDSP_BIOS_ReadResult();
if( --su08_MeasCounter == 0 )
{
// Done Meas 8 times
su08_MeasCounter = 8;
//// CPU BUG ///////////////////////
// su16_MeasAveBuffer /=8;
u08_MeasAve = 0;
while ( TRUE )
{
if( su16_MeasAveBuffer < 8 )
{
break;
}
su16_MeasAveBuffer -= 8;
u08_MeasAve++;
}
/////////////////////// CPU BUG ////
mu08_MeasSC = MEAS_DONE_AVERAGE;
#if CHK_SWEEP
mu08_Servo[mu08_Q1][mu08_Q2][0] = mu08_AdjustParameter;
mu08_Servo[mu08_Q1][mu08_Q2][1] = u08_MeasAve;
mu08_Q2++;
#endif
}
else
{
// Dosn't Done Meas 8 times
DrvDSP_BIOS_KindStart();
}
}
break;
}
return u08_MeasAve;
}
/*------------------------------------------------------------------------------
SetSweepStep
------------------------------------------------------------------------------
Function : Set Adjust DSP Parameter
Arguments: UINT08 mu08_Kind Meas Kind
UINT08 mu08_SweepFlag Direction
UINT08 mu08_Limit Upper or Lower Limit
UINT08 mu08_Target Target
UINT08 u08_MeasResult MeasResult
UINT08* mu08_AdjustValue
Return : UINT08 Limit UnLimit
------------------------------------------------------------------------------*/
UINT08 SetSweepStep( UINT08 u08_MeasResult )
{
UINT08 u08_StepSize;
UINT08 u08_Diff;
if( mu08_SweepFlag )
{
u08_Diff = mu08_Target - u08_MeasResult;
}
else
{
u08_Diff = u08_MeasResult - mu08_Target;
}
u08_StepSize = 4;
if( mu08_Kind != ADJUST_FB_CMD )
{
// Gain ----------------------------------------------------------------
if( u08_Diff > 16 )
{
u08_StepSize = 3;
}
else if( u08_Diff > 8 )
{
u08_StepSize = 2;
}
else
{
u08_StepSize = 1;
}
}
for ( gu08_i = 0; gu08_i < u08_StepSize; gu08_i++ )
{
if( mu08_SweepFlag )
{
// Up Sweep
mu08_AdjustValue++;
}
else
{
// Down Sweep
mu08_AdjustValue--;
}
// Limit Check
if( mu08_AdjustValue == mu08_Limit )
{
break;
}
}
mu08_AdjustParameter = mu08_AdjustValue;
if( mu08_Kind != ADJUST_FB_CMD )
{
mu08_AdjustParameter = Tbl_GAIN_00dB[mu08_AdjustValue];
// Backup Sweep Counter
if( mu08_Kind == ADJUST_FG_CMD )
{
gu08_AdjFgSweep =mu08_AdjustValue;
}
else
{
gu08_AdjTgSweep =mu08_AdjustValue;
}
}
gu08_AdjResult[mu08_Kind - 8] = mu08_AdjustParameter;
if( mu08_AdjustValue == mu08_Limit )
{
return TRUE;
}
else
{
return FALSE;
}
}
/*------------------------------------------------------------------------------
[NAME] :AdjustAuto_SetTimer
[FUNCTION] :
[RETURN] :void
[PARAMETER]:void
[HISTORY] :
[NOTE] :
------------------------------------------------------------------------------*/
void AdjustAuto_SetTimer( void )
{
gu16_TimerAdjustMain = TIME_LIMIT_ADJUST;
return;
}
/*******************************************************************************
******************************************************************************
******************************************************************************
Offset
******************************************************************************
******************************************************************************
*******************************************************************************/
#if CHECK_OFFSET
void CheckOffset(UINT08 u08_Gain)
{
UINT08 u08_MeasResult;
// UINT08 i;
for( gu08_i=1; gu08_i<8; gu08_i++ )
{
DrvDSP_BIOS_WriteReg( 0xD0, 0x10*gu08_i );
while( TRUE )
{
if( DrvDSP_BIOS_ReadBusy( ) )
{
u08_MeasResult = DrvDSP_BIOS_ReadReg( 0xDE );
DrvDSP_BIOS_WriteReg( 0xD0, 0x00 );
break;
}
}
mu08_CheckOffset[u08_Gain][gu08_i-1] =u08_MeasResult;
}
}
#endif
/*------------------------------------------------------------------------------
[NAME] :DrvDSP_AdjustOffset
[FUNCTION] :
[RETURN] :void
[PARAMETER]:void
------------------------------------------------------------------------------*/
void DrvDSP_AdjustOffset( void )
{
#if ROM // SDC 20050209
if( gu08_sts_DSPINIT==0) //YTC000 俢俽俹弶婜壔慜偼懸偨偣傞
{ //DSP弶婜壔慜丅
return; //-> 僆僼僙僢僩挷惍偵擖傜側偄丅
}
if( gu08_sts_AdjustOffset == 0 )
{
return;
}
else if( gu08_sts_AdjustOffset == ADJUST_ERROR )
{
return;
}
else if( gu08_sts_AdjustOffset == ADJUST_START )
{
mu08_MoveLensSC = START_DOWN;
gu08_sts_MovePickupIn=1; //YTC000 僗儗僢僪堷偒崬傒傪偙偙偱梫媮偡傞丅
gu08_sts_AdjustOffset = OFS_VCO;
mu08_MainSC = ADJUST_GO;
}
else
{
// Type Switcher
if( mu08_MainSC == ADJUST_END )
{
switch ( gu08_sts_AdjustOffset )
{
case OFS_VCO:
gu08_kind_Gain = GAIN_X5;
gu08_sts_AdjustOffset = OFS_READY;
break;
case OFS_READY:
gu08_sts_AdjustOffset = OFS_INPUT;
mu08_SubSC = OFFSET_START;
break;
case OFS_INPUT:
#if ROM // SDC 20050209
gu08_sts_AdjustOffset = OFS_DRIVE_TD_FD;
mu08_SubSC = OFFSET_START;
break;
case OFS_DRIVE_TD_FD:
#endif
gu08_sts_AdjustOffset = OFS_DRIVE_SD;
mu08_SubSC = OFFSET_START;
break;
case OFS_DRIVE_SD:
gu08_sts_AdjustOffset = OFS_FIT_RF_FOK;
mu08_SubSC = OFFSET_START;
break;
case OFS_FIT_RF_FOK:
#if ROM // SDC 20050208
switch ( gu08_kind_Gain )
{
case GAIN_X5:
#if CHECK_OFFSET
CheckOffset(gu08_kind_Gain);
#endif
gu08_sts_AdjustOffset = OFS_INPUT;
mu08_SubSC = OFFSET_START;
gu08_kind_Gain = GAIN_X3;
break;
case GAIN_X3:
#if CHECK_OFFSET
CheckOffset(gu08_kind_Gain);
#endif
gu08_sts_AdjustOffset = OFS_INPUT;
mu08_SubSC = OFFSET_START;
gu08_kind_Gain = GAIN_X1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -