📄 svostate.c
字号:
tmp0=RdReg(0x07A);
if(tmp0==0x50)
WrDSP(TGC,0x00);
WrDSP(READVALUE,0x17);
while(RdStatus(CMD_READY,100)==BUSY);
tmp0=RdReg(0x07b);
#else
if(RdReg(0x07A)==0x50)
WrDSP(TGC,0x00);
#endif
break;
}
}
/*-----------------------------------------------------------------------------
Function: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
#define DVD_DUAL_LIMIT 0x30 //R1726_COM_01 //1b20a01j //0x28->0x44 2406a02j
#define DVD_LIMIT 0x40 //R1726_COM_01 //1b20a01j
#define CD_LIMIT 0x20 //R1726_COM_01
#define DVCD_LIMIT 0x20 //R1726_COM_01
void TuneErrRate(void)
{
if(!fNewID){return;}
if(fDVDDual)
{
if(fCurrentLayer==fLayerNumber)
fDisRdQ=1;
else
{
if(JumpLayer(fLayerNumber)==READY)
{
//R1703_COM_01 while(TrackOn()==BUSY);
WrDSP(TACTION,0x05);//R1703_COM_01
fNewID=0;
}
return;
}
}
else
fDisRdQ=1;
switch(bPhase)
{
case 0:
if(!fRuninJ && !fMaster)
{
fDisRdQ=0;
bServoState=SCAN_DISC_STATE;
bPhase=bSubPhase=0;
return;
}
if(fDVDDisc)
{
PIOffsetCalibration(); //R1726_COM_01
if(fLayerNumber)
{
WrSSI(FBCR,dlFBCR);
WrSSI(FCCR,dlFCCR);
//1b02a23j WrSSI(FTGR,dlFTGR);
}
else
{
WrSSI(FBCR,dFBCR);
WrSSI(FCCR,dFCCR);
//1b02a23j WrSSI(FTGR,dFTGR);
}
if(fDVDDual) //1b02a23j***
WrSSI(FTGR,dlFTGR);
else
WrSSI(FTGR,dFTGR); //1b02a23j&&&
WrReg(0x067,0x04);//R1606_COM_06 //tjc //wait 4 ECC for read count and select PI readout
WrReg(0x0BD,0x02); //HI_NOERROR(when ECC but no give ecc int i.e. enable RS/EDC always OK)
WrReg(0x1c2,0x00); //RS_repeat_0times(only PI,PO)
WrReg(0x014,(RdReg(0x014)&0xbf));//bit6=0 disable id sequence check register prevent EDC error occure
RSTurnOn();
}
else
{
//R1808_COM_01***
/*
if(fDVCDDisc)
{
bPhase=4;
return;
}
*/
//R1808_COM_01&&&
if(ilLeadOut <= 4500) //R1808_COM_04***
{
bPhase=8;
return;
} //R1808_COM_04&&&
/*// ---hanyc
if(fCDDisc)
{
bPhase=4;
return;
}
/**/
WrReg(0x182,0x00); //bit 3set 1 => 10sec ,set0 =>1sec
WrReg(0x183,0x18); //select C1 Error Counter
WrReg(0x182,0x04); //set C2
WrReg(0x183,0xc0); //select C2 Error Counter
WrReg(0x182,RdReg(0x182)|0x03);//enable C1(bit1) C2(bit0) counter
}
// val1=0;
bPhase++;
break;
case 1:
if(CIRCValid()==READY)
{
ibRecordTOCFlag=0;//1b21s01i
if(fTuneASL)
{
if(fLayerNumber)
{
TP_BYTE_4=ibASL;
ibASL=ibASL_1;
ibASL_1=TP_BYTE_4;
}
//1b21s01i ibRecordTOCFlag=0;
iwErrorRate=0xffff;
WrReg(ASL,(ibASL&0xF8)|ibRecordTOCFlag);
WrReg(0x042,RdReg(0x042)|0x40);
bPhase++;
}
bPhase++;
}
break;
case 2:
if(RdErrRate()==READY)
{
if(fCDDisc&&!fCDRW) //select FCCR/FBCR value //1b21s01i***
{
if(ibRecordTOCFlag==0)
{
iwErrorRate=TP_WORD_0;
WrSSI(FCCR,0xBE);
WrSSI(FBCR,0x40);
Delay1ms(2);
WrReg(0x042,RdReg(0x042)|0x40);
ibRecordTOCFlag++;
break;
}
if(TP_WORD_0 >= iwErrorRate)
{
WrSSI(FCCR,cFCCR);
WrSSI(FBCR,cFBCR);
Delay1ms(2);
TP_WORD_0=iwErrorRate;
}
} //1b21s01i&&&
if(TP_WORD_0>0x30)//R1606_COM_06
{
fTuneFTGR=1;
fTuneASL=0;
iwErrorRate=TP_WORD_0;
if(fLayerNumber)
{
TP_BYTE_4=ibFTGR;
ibFTGR=ibFTGR_1;
ibFTGR_1=TP_BYTE_4;
}
ibRecordTOCFlag=ibFTGR&0xF0;
if(fTurnErrDir)
ibRecordTOCFlag+=0x10;
else
ibRecordTOCFlag-=0x10;
WrSSI(FTGR,(ibFTGR&0x0F)|ibRecordTOCFlag);
if(fDVDDisc)
{
WrReg(0x35,0x71);
WrReg(0xFB,(RdReg(0xfb)|0x10));
}
WrReg(0x042,RdReg(0x042)|0x40);
bPhase++;
}
else
bPhase+=2;
}
break;
case 3:
if(RdErrRate()==READY)
{
if(fTuneFTGR)
{
//R1606_COM_06***
if(TP_WORD_0<iwErrorRate)
{
iwErrorRate=TP_WORD_0;
ibFTGR=(ibFTGR&0x0F)|ibRecordTOCFlag;
}
//R1606_COM_06&&&
if(fTurnErrDir)
{
ibRecordTOCFlag+=0x10;
TP_BYTE_4=ibRecordTOCFlag-(ibFTGR&0xF0);
fTuneErrhaverun=1;
}
else
{
ibRecordTOCFlag-=0x10;
TP_BYTE_4=(ibFTGR&0xF0)-ibRecordTOCFlag;
}
if(ibRecordTOCFlag>0xD0||ibRecordTOCFlag<0x40||(TP_BYTE_4>0x50&&TP_WORD_0<0x80)) //1b02a19j
{
if(!fTurnErrDir)
{
fTurnErrDir=1;
if(fDVDDual)
ibRecordTOCFlag=(dlFTGR&0xF0)+0x10;
else if(fDVDDisc)
ibRecordTOCFlag=(dFTGR&0xF0)+0x10;
else
ibRecordTOCFlag=(cFTGR&0xF0)+0x10;
WrSSI(FTGR,(ibFTGR&0x0F)|ibRecordTOCFlag);
WrReg(0x042,RdReg(0x042)|0x40);
return;
}
WrSSI(FTGR,ibFTGR);
fTurnErrDir=0;
fTuneFTGR=0;
fTuneASL=1;
if(fLayerNumber)
{
TP_BYTE_4=ibFTGR;
ibFTGR=ibFTGR_1;
ibFTGR_1=TP_BYTE_4;
TP_BYTE_4=ibASL;
ibASL=ibASL_1;
ibASL_1=TP_BYTE_4;
}
ibRecordTOCFlag=1; //R1719_COM_02
//iwErrorRate=0xffff; //R1719_COM_02
WrReg(ASL,(ibASL&0xF8)|ibRecordTOCFlag);
WrReg(0x042,RdReg(0x042)|0x40);
}
else
{
WrSSI(FTGR,(ibFTGR&0x0F)|ibRecordTOCFlag);
WrReg(0x042,RdReg(0x042)|0x40);
}
}
else if(fTuneASL)
{
if(TP_WORD_0<iwErrorRate)
{
iwErrorRate=TP_WORD_0;
ibASL=(ibASL&0xF8)|ibRecordTOCFlag;
}
if(ibRecordTOCFlag>0x04)
{
WrReg(ASL,ibASL);
fTuneASL=0;
if(fLayerNumber)
{
TP_BYTE_4=ibASL;
ibASL=ibASL_1;
ibASL_1=TP_BYTE_4;
}
bPhase++;
return;
}
else
{
ibRecordTOCFlag++;
WrReg(ASL,(ibASL&0xF8)|ibRecordTOCFlag);
WrReg(0x042,RdReg(0x042)|0x40);
}
}
}
break;
case 4:
if(fDVDDisc)
{
InitPointer();
WrReg(0x0BD,0x00);
WrReg(0x014,(RdReg(0x014)|0x40));
}
else
WrReg(0x182,0x00);
if(fDVDPlusRW) //R1808_COM_07
goto notg; //R1808_COM_07
else //R1808_COM_07
FocGainAdj();
fS0=fS1=0;
bPhase++;
break;
case 5:
if(RdStatus(CMD_COMP,200)!=BUSY)//focus gain ready
{
ProtectLoopGain(F_GAIN);
fS0=fS1=0;
bPhase++;
// if(!fDVCDDisc) //R1808_COM_01
TrkGainAdj();
/*
else
{ //R1808_COM_01***
WrDSP(TACTION,0x00);
TrkBalAdj();
fS0=fS1=0;
bPhase=7;
} //R1808_COM_01&&&
*/
}
break;
case 6:
if(RdStatus(CMD_COMP,200)!=BUSY)//trcking gain ready
{
notg: //R1808_COM_01
ProtectLoopGain(T_GAIN);
if(fCurrentLayer)
WrDSP(LGAINSW,0x11); //save layer 1
else
WrDSP(LGAINSW,0x01); //save layer 0
fS0=fS1=0;
bPhase++;
}
break;
case 7:
if(RdStatus(CMD_COMP,200)!=BUSY)//trcking gain ready
{
bPhase++;
//R1808_COM_01***
/*
if(fDVCDDisc && fCDDisc )
{
WrDSP(TACTION,0x05);
Delay10ms(5);
}
*/
// break; //R1808
//R1808_COM_01&&&
}
else
break;
case 8:
if(fDVDDisc)
{
if(fSaveNum && fDVDDual)
{
//R1606_COM_03***
if(fCurrentLayer)
{
ibDelta_1=TuneRFRPDelta();
WrDSP(0x20,ibDelta_1);
}
else
{
ibDelta_0=TuneRFRPDelta();
WrDSP(0x20,ibDelta_0);
}
//R1606_COM_03&&&
fLayerNumber=~fLayerNumber;
fAutoAdj=1;
bASUState=SAVE_LGAIN;
bServoState=START_UP_STATE;
bSUPhase=5;
bSKSubPhase=0;//1925a01m chane
return;
}
//R1606_COM_03***
if(fDVDDual & fCurrentLayer)
{
ibDelta_1=TuneRFRPDelta();
WrDSP(0x20,ibDelta_1);
}
else
{
ibDelta_0=TuneRFRPDelta();
WrDSP(0x20,ibDelta_0);
}
//R1606_COM_03&&&
fLayerNumber=0;
bServoState=READ_TOC_STATE;
LEDToggle(20);
}
else
{
if(ilLeadOut>4500)//R1808_COM_04
{
ibDelta_0=TuneRFRPDelta();//R1606_COM_03
WrDSP(0x20,ibDelta_0); //R1606_COM_03
}
bServoState=SCAN_DISC_STATE;
}
fDisRdQ=0;
bPhase=bSubPhase=0;
}
}
//R1606_COM_03***
extern BYTE code DVDRprpDelta;
extern BYTE code CDRprpDelta;
extern BYTE code DVDDualRprpDelta; //1b02a22j
BYTE TuneRFRPDelta(void)
{
Delay1ms(5);
WrDSP(0x20,0);
Delay10ms(30);
WrDSP(READVALUE,0x2e);
fS0=fS1=0; //1b02a22j
while((RdStatus(CMD_READY,100)==BUSY));//read RFRP out
TP_BYTE_11=RdReg(0x07A);
if(fDVDDual) //1b02a22j
WrDSP(0x20,DVDDualRprpDelta); //1b02a22j
else if(fDVDDisc) //1b02a22j
WrDSP(0x20,DVDRprpDelta);
else
WrDSP(0x20,CDRprpDelta);
while(1) //1b02a22j***
{
TP_BYTE_0=JumpTracks(OUT_WARD,50);
if(TP_BYTE_0==ERROR)
{
if(fDVDDual) //1b02a22j
return DVDDualRprpDelta; //1b02a22j
else if(fDVDDisc) //1b02a22j
return DVDRprpDelta;
else
return CDRprpDelta;
}
else if(TP_BYTE_0==READY)
break;
} //1b02a22j&&&
WrDSP(READVALUE,0x2e);
fS0=fS1=0; //1b02a22j
while((RdStatus(CMD_READY,100)==BUSY));//read RFRP out
//TRCR_0=Rd5701(0x07A)-TRCR_0;
TP_BYTE_11=RdReg(0x07A)-TP_BYTE_11;
if((TP_BYTE_11&0x80)==0x80)
return TP_BYTE_11;
else if(fDVDDual) //1b02a22j
return DVDDualRprpDelta; //1b02a22j
else if(fDVDDisc) //1b02a22j
return DVDRprpDelta; //return default value.
else
return CDRprpDelta; //return default value.
//WrDSP(0x20,TRCR_0);
}
//R1606_COM_03&&&
/*-----------------------------------------------------------------------------
Function: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
BYTE RdErrRate(void)
{
if(CIRCValid()==READY)
{
if(fDVDDisc)
{
TP_BYTE_0=RdReg(0x69);
TP_BYTE_1=RdReg(0x68);
TP_BYTE_2=RdReg(0x6b);
TP_BYTE_3=RdReg(0x6a);
TP_WORD_0+=TP_WORD_1;//R1703_COM_04
// TP_WORD_0=TP_WORD_1;
}
else
{
TP_BYTE_0=RdReg(0x18d); //c1 error coun
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -