📄 servo.c
字号:
/* //R1606_COM_03***
WrSSI(MRCR,0x08);
WrSSI(CAR,0x0D);
if(fDVDDual)
WrSSI(CDR,(dlCDR|0x20));
else
WrSSI(CDR,(dCDR|0x20));
*/
WrSSI(CDR,(RdSSI(CDR)|0x20));//set DPD TE BW.
//R1606_COM_03&&&
WrReg(PLLEN,0x08);
WrReg(PDTYPE,0x00);
if(jump_dir==OUT_WARD)
{
WrCoeff(KTV1,0x0200); // 3e8);
WrCoeff(KCV1,0x3000);
WrCoeff(KCV3,0x1900);
if(jump_num>14000)
{
WrCoeff(KFPROF1,0x6000);//fff);
WrCoeff(BKRATIO,0x0c);//05);
}
else if(jump_num>8000)
{
WrCoeff(KFPROF1,0x5800);
WrCoeff(BKRATIO,0x0c);//06);
}
else if(jump_num>6000)
{
WrCoeff(KFPROF1,0x4300);
WrCoeff(BKRATIO,0x0d);//06);
}
else
{
WrCoeff(KFPROF1,0x3800);
WrCoeff(BKRATIO,0x0f);//07);
}
WrDSP(SPD_FIX,0x10); //0x20
WrDSP(SPD_MODE,0x01);
WrDSP(TACTION,0x53);
}
else
{
WrCoeff(KTV1,0x0110);//0110);
WrCoeff(KCV1,0x3000);
WrCoeff(KCV3,0x3000);
if(jump_num>14000)
{
WrCoeff(KFPROF1,0x7fff);
WrCoeff(BKRATIO,0x07);//04);
}
else if(jump_num>8000)
{
WrCoeff(KFPROF1,0x7000);
WrCoeff(BKRATIO,0x07);//04);
}
else if(jump_num>6000)
{
WrCoeff(KFPROF1,0x4000);
WrCoeff(BKRATIO,0x07);
}
else
{
WrCoeff(KFPROF1,0x3000);
WrCoeff(BKRATIO,0x07);
}
WrDSP(SPD_FIX,0xe0); //0xd0
WrDSP(SPD_MODE,0x01);
WrDSP(TACTION,0x13);
}
}
}
else
{ //CD disc
//R1606_COM_03 WrSSI(FTGR,ibFTGR); //lagre TE before seek
if(jump_num>20000){jump_num=20000;}
if((jump_num>2047) && (ibLongJumpErr>10)){jump_num=2047;}
if((jump_num>4096)&&fDVCDDisc) //R1808_COM_01
{jump_num=4096;} //R1808_COM_01
WrDSP(INIT_V_ERROR,0xC0);
if(jump_num<2048)
{ //CD short jump
fLongJump=0;
if(jump_num<128)
{ //R1808_COM_01***
if( ( (fDVCDDisc)&&(jump_num<15) ) ||
((Q.AMin==0)&&(Q.ASec<0x20)&&(jump_num<20)&&(bServoState!=MONITOR_STATE))
|| ((!fTOC)&&(jump_num<20)) )
{
if(jump_num<5)
jump_num=1;
else
jump_num=5;
}
WrCoeff(JMPTRKN,jump_num);
} //R1808_COM_01&&&
else
WrCoeff(JMPTRKN,128);
/* //R1606_COM_03***
WrSSI(MRCR,0x0C);
WrSSI(CAR,0x0C);
if(fCDRW)
WrSSI(CDR,(cwCDR&0xDF));
else
WrSSI(CDR,(cCDR&0xDF));
*/ //R1606_COM_03&&&
if(jump_dir==OUT_WARD)
WrDSP(TACTION,0x4D);
else
WrDSP(TACTION,0x0D);
}
else
{ //CD long jump
fLongJump=1;
WrCoeff(JMPTRKN,(jump_num/10)*8);
WrCoeff(KVFB,0x7f00);
WrSSI(FTGR,ibFTGR|0x03); //R1808_COM_01
//R1606_COM_03***
/*
WrSSI(MRCR,0x0C);
WrSSI(CAR,0x0C);
if(fCDRW)
WrSSI(CDR,(cwCDR|0x20));
else
WrSSI(CDR,(cCDR|0x20));
*/
WrSSI(CDR,(RdSSI(CDR)|0x20));//set DPD TE BW.
//R1606_COM_03&&&
WrReg(PLLEN,0x08);
WrReg(PDTYPE,0x00);
if(jump_dir==OUT_WARD)
{
WrCoeff(KTV1,0x03e8);//0580);//0x03E8);
WrCoeff(KCV1,0x5000);
WrCoeff(KCV3,0x1900);//3200);//0x1900);
if(jump_num>14000)
{
WrCoeff(KFPROF1,0x7fff);
WrCoeff(BKRATIO,0x09);//0x04);
}
else if(jump_num>8000)
{
WrCoeff(KFPROF1,0x7000);
WrCoeff(BKRATIO,0x09);//0x04);
}
else if(jump_num>6000)
{
WrCoeff(KFPROF1,0x7000);
WrCoeff(BKRATIO,0x0a);//0x05);
}
else
{
WrCoeff(KFPROF1,0x7fff);
WrCoeff(BKRATIO,0x0c);//0x06);
}
WrDSP(SPD_FIX,0x20);//0x28);
WrDSP(SPD_MODE,0x01);
WrDSP(TACTION,0x53);
}
else
{
WrCoeff(KTV1,0x0110);
WrCoeff(KCV1,0x3b00);
WrCoeff(KCV3,0x3b00);
if(jump_num>19000)
{
WrCoeff(KFPROF1,0x7fff);
WrCoeff(BKRATIO,0x03);
}
else if(jump_num>13000)
{
WrCoeff(KFPROF1,0x7000);
WrCoeff(BKRATIO,0x03);
}
else if(jump_num>7000)
{
WrCoeff(KFPROF1,0x7000);
WrCoeff(BKRATIO,0x04);
}
else
{
WrCoeff(KFPROF1,0x7800);
WrCoeff(BKRATIO,0x05);
}
WrDSP(SPD_FIX,0x80);
WrDSP(SPD_MODE,0x01);
WrDSP(TACTION,0x13);
}
}
}
fS0=fS1=0;
bSKSubPhase++;
case 2:
status=RdStatus(CMD_COMP,200); //jump track
if(status!=BUSY)
{
if(fLongJump)
{
if(fCDDisc) //R1726_H1120_02
WrSSI(FTGR,ibFTGR); //R1726_H1120_02
else //R1808_COM_10***
{
if(fCurrentLayer)
WrSSI(CER,ibCER_1);
else
WrSSI(CER,ibCER);
} //R1808_COM_10&&&
ibLongJumpErr++;
WrReg(PLLEN,0x0C);
WrReg(PDTYPE,0x02);
if(!(RdReg(SVO_STATUS)&FOCUS_OK))
status=ERROR;
else if(status!=ERROR)
{
if( (RdReg(0x085)==0x00) && (RdReg(0x084)==0x08) ) //1b02a24j***
{
WrReg(0x051,0x8A);
WrReg(0x051,0x0A);
} //1b02a24j&&&
WrDSP(CAV_CLV,0x01);//CLV mode
WrDSP(SPD_MODE,0x04);
}
}
//R1606_COM_03 WrSSI(MRCR,0x0F);
//R1606_COM_03 WrSSI(CAR,0xFC);
WrSSI(CBR,ibCBR);
WrSSI(CDR,(RdSSI(CDR)&0xDF));//R1606_COM_03
//WrSSI(RFCR,(RdSSI(RFCR)&0xF7));//R1606_COM_03 //disable AGC fast attact current.
if(fDVDDisc)
{
//R1606_COM_03***
/*
if(fDVDDual)
WrSSI(CDR,dlCDR);
else
WrSSI(CDR,dCDR);
*/ //R1606_COM_03&&&
WrDSP(FSET,0x10);//R1606_COM_03
WrDSP(TSET,0x17);
}
else
{
//R1606_COM_03***
/*
if((ibFTGR&0x03)==0x03)
WrSSI(FTGR,(ibFTGR-1));
if(fCDRW)
WrSSI(CDR,cwCDR);
else
WrSSI(CDR,cCDR);
*/ //R1606_COM_03&&&
WrDSP(FSET,0x10);
WrDSP(TSET,0x17);
}
WrDSP(0x5F,0xd0); //1c13a02b
fDisRdQ=0;
fLongJump=0;
fJumpTrack=0;
bSKSubPhase=0;
}
}
return status;
}
#endif
/*-----------------------------------------------------------------------------
Function: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
BYTE JumpLayer(BYTE LayerNum)
{
BYTE status=BUSY;
switch(bSKSubPhase)
{
case 0:
fDisRdQ=1;
fJumpLayer=1;
fCHKID=1; //R1703_COM_02
WrSSI(FTGR,dlFTGR);//R1606_COM_03
//WrReg(0x123,0x41); //2128s01b*** //2406a05j*** //2417a01j***
//WrReg(0x124,0xb4);
//WrReg(0x125,0x2c);
//WrReg(0x120,0x00);
//WrReg(0x121,0x00);
//WrReg(0x122,0x00);
//while((RdReg(DIIC)&0x80)!=0x80); //2128s01b&&& //2406a05j&&& //2417a01j&&&
WrDSP(TACTION,0x00);
if(fAutoAdj)
bSKSubPhase=2;
else
{
if(LayerNum)
{
WrDSP(LGAINSW,0x10);
//R1606_COM_03 WrSSI(TRCR,ibTRCR_1);
WrDSP(0x20,ibDelta_1); //R1606_COM_03
}
else
{
WrDSP(LGAINSW,0x00);
//R1606_COM_03 WrSSI(TRCR,ibTRCR);
WrDSP(0x20,ibDelta_0); //R1606_COM_03
}
fS0=fS1=0;
bSKSubPhase++;
}
break;
case 1:
TP_BYTE_0=RdStatus(CMD_COMP,200);//lgainsw
if(TP_BYTE_0==READY)
bSKSubPhase++;
else if(TP_BYTE_0==ERROR)
status=ERROR;
break;
case 2:
if(LayerNum)
{
WrCoeff(KLYUPBK,0xd800);//0xd800); //0xb000); //0x9000->0xb000 2405a01j
WrCoeff(KLYUPKK,0x0900);//0x0900); //0x1200);
WrDSP(LAYERSET,0x00); //move up
}
else
{
WrCoeff(KLYDNBK,0x2800);//0x2800); //0x5000);
WrCoeff(KLYDNKK,0xf700);//0xf700); //0xEE00);
WrDSP(LAYERSET,0x80); //move down
}
fS0=fS1=0;
bSKSubPhase++;
case 3:
if(RdStatus(CMD_READY,100)!=BUSY)//layer jump
{
ibServoSubTimer=50;
bSKSubPhase++;
}
break;
case 4:
if(RdReg(SVO_STATUS)&FOCUS_OK)
status=READY;
else if(!ibServoSubTimer)
status=ERROR;
//WrReg(0x123,0x41); //2128s01b*** //2406a05j*** //2417a01j***
//WrReg(0x124,0xb4);
//WrReg(0x125,0x2c);
//WrReg(0x120,0x00);
//WrReg(0x121,0x00);
//WrReg(0x122,0x01);
//while((RdReg(DIIC)&0x80)!=0x80); //2128s01b&&& //2406a05j&&& //2417a01j&&&
}
if(status!=BUSY)
{
if(LayerNum) //R1726_H1120_01***
{
WrSSI(CER,ibCER_1);
WrDSP(FLEVEL2,bFLEVEL2_1); //1a24a01m
}
else
{
WrSSI(CER,ibCER); //R1726_H1120_01&&&
WrDSP(FLEVEL2,bFLEVEL2); //1a24a01m
}
fDisRdQ=0;
fJumpLayer=0;
bSKSubPhase=0;
}
return status;
}
/*-----------------------------------------------------------------------------
Function: turn off laser diode-
Input: -
Output: -
-----------------------------------------------------------------------------*/
void LDOff(void)
{
WrDSP(TACTION,0x00);
WrDSP(FACTION,0x00);
//1912a02j WrDSP(LDONOFF,0x01);
MacroLaserOff;
// WrReg(0x023,0x04); //R1808_COM_02
// WrReg(0x025,0x04); //R1808_COM_02
}
/*-----------------------------------------------------------------------------
Function: turn on CD/DVD laser diode
Input: -
Output: -
-----------------------------------------------------------------------------*/
void LDOn(void)
{
//1912a02j WrDSP(LDONOFF,0x01);
if(fDVDDisc)
{
WrSSI(PDCR,dPDCR);
WrSSI(CCR,dCCR);
WrDSP(DVD_CD,0x01);
}
else
{
//R1808_COM_01***
// if( (bServoState==START_UP_STATE)&&fDVCDDisc&&(!fCDRW) )
// WrSSI(PDCR,dPDCR);//set DVD mode.
// else
WrSSI(PDCR,cPDCR);
//R1808_COM_01&&&
//WrS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -