📄 servo.c
字号:
TP_BYTE_0=RdReg(CALREGH); //PLL frequency high byte
if(TP_WORD_0<0x0FD&&TP_BYTE_2>0x00)
TP_BYTE_2--;
else if(TP_WORD_0>0x103&&TP_BYTE_2<0x3D)
TP_BYTE_2++;
else
ibServoSubTimer=0;
WrReg(CALDAC,TP_BYTE_2);
}
return READY;
}
/*-----------------------------------------------------------------------------
Function: open PLL loop filter to hold VCO
Input: -
Output: -
-----------------------------------------------------------------------------*/
void HoldVCO(void)
{
WrReg(PLLEN,0x08); //disable FD
WrReg(PDTYPE,0x00); //disable PD
WrReg(PLLLPF,0x00); //close PLL loop filter 1
WrReg(PLLPOLE,0x00); //close PLL PD filter 1
}
#if 0
/*-----------------------------------------------------------------------------
Function: -
Input: bit jump_dir, WORD jump_num
Output: READY,ERROR,BUSY
-----------------------------------------------------------------------------*/
#define JMP1TRK 0x0b
BYTE code biSeekSet1=0x62;
BYTE code boSeekSet1=0x62;
BYTE code biInit_v_error=0x20;
BYTE code boInit_v_error=0x20;
WORD code wKTSEEK1=0x800;
WORD code wKTSEEK2=0x320;
WORD code wiKTV1=0x90;
WORD code woKTV1=0x210;
WORD code woKVC1=0x1800;
WORD code woKVC3=0xc80;
WORD code wiKVC1=0x1800;
WORD code wiKVC3=0x1800;
WORD code wiKFPROF1=0x4800;
WORD code woKFPROF1=0x4800;
BYTE JumpTracks(bit jump_dir,WORD jump_num)
{
BYTE status=BUSY;
//R1606_COM_03 WrDSP(LJPMODE,0x00);
WrDSP(0x5F,0x80); // 0x80 notemotor
switch(bSKSubPhase)
{
case 0:
fDisRdQ=1;
fJumpTrack=1;
fCHKID=1;//R1703_COM_02
ibCBR=RdSSI(CBR);
WrSSI(CBR,ibCBR&0xDF);
//WrSSI(RFCR,(RdSSI(RFCR)|0x08));//R1606_COM_03 //enable AGC fast attact current.
WrDSP(0x22,0x36); //R1606_COM_03
WrDSP(LJPMODE,0x00);//R1606_COM_03
WrDSP(FSET,0x00);
if(fDVDDisc)
WrDSP(TSET,0x07);
else
WrDSP(TSET,0x06);
bSKSubPhase++;
case 1:
if(fDVDDisc)
{
if(jump_num>45000){jump_num=45000;}
WrDSP(INIT_V_ERROR,0x60);//f0);
if(jump_num<4096)
{ //DVD short jump
fLongJump=0;
WrCoeff(JMPTRKN,jump_num);
WrSSI(CER,(dCER|0x80));
#if 1
if(fDVDDual)
{
/*
if(jump_num>256)
WrCoeff(KC3,0x500);
else
WrCoeff(KC3,0x420);
*/
WrDSP(SEEKSET3,0x69);
if(jump_dir==OUT_WARD)
{
WrCoeff(KC3,0x200);
if(jump_num<=2)
{
WrDSP(INIT_V_ERROR,0x10);
WrDSP(SEEKSET1,0x61);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x300);
}
else
if(jump_num<=20)
{
WrDSP(INIT_V_ERROR,0x40);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x300);
}
else if(jump_num<=256)
{
WrDSP(INIT_V_ERROR,0x80);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x400);
}
else
{
WrDSP(INIT_V_ERROR,0xc0);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x400);
}
}
else
{
WrCoeff(KC3,0x280);
if(jump_num<=2)
{
WrDSP(INIT_V_ERROR,0x10);
WrDSP(SEEKSET1,0x61);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x320);
}
else
if(jump_num<=20)
{
WrDSP(INIT_V_ERROR,0x40);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x320);
}
else if(jump_num<=256)
{
WrCoeff(KC3,0x300);
WrDSP(INIT_V_ERROR,0x80);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x320);
}
else
{
WrCoeff(KC3,0x230);
WrDSP(INIT_V_ERROR,0xc0);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x320);
}
}
}
else
#endif
{
/*
if(jump_num>256)
WrCoeff(KC3,0x500); //0x0620);
else
WrCoeff(KC3,0x420); //0x05dc);
*/
WrDSP(SEEKSET3,0x69);
if(jump_dir==OUT_WARD)
{
WrCoeff(KC3,0x300);
if(jump_num<=2)
{
WrDSP(INIT_V_ERROR,0x40);
WrDSP(SEEKSET1,0x61);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x360);
}
else
if(jump_num<=10)
{
WrDSP(INIT_V_ERROR,0x40); //0x60);
WrDSP(SEEKSET1,0x62); //0x52);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x360);
}
else if(jump_num<=256)
{
WrDSP(INIT_V_ERROR,0x90); //0x60);
WrDSP(SEEKSET1,0x62); //0x52);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,wKTSEEK2);
}
else
{
WrDSP(INIT_V_ERROR,0x90); //0x60);
WrDSP(SEEKSET1,0x62); //0x52);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,wKTSEEK2);
}
}
else
{
WrCoeff(KC3,0x2c0);
if(jump_num<=2)
{
WrDSP(INIT_V_ERROR,0x40);
WrDSP(SEEKSET1,0x61);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x360);
}
else
if(jump_num<=10)
{
WrDSP(INIT_V_ERROR,0x40);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x360);
}
else if(jump_num<=256)
{
WrDSP(INIT_V_ERROR,0x90);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,wKTSEEK2);
}
else
{
WrDSP(INIT_V_ERROR,0x90);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,wKTSEEK2);
}
}
//WrDSP(SEEKSET3,0x62);//R1606_COM_03
} //2419a01j&&&
if(jump_dir==OUT_WARD)
{
WrCoeff(JMPTRKN,jump_num);
if(jump_num > 2 )
WrDSP(TACTION,0x4D);
else
WrDSP(JMP1TRK,0x40);
// WrDSP(TACTION,0x4D);
}
else
{
WrCoeff(JMPTRKN,jump_num);
if(jump_num > 2 )
WrDSP(TACTION,0x0D);
else
WrDSP(JMP1TRK,0x0);
// WrDSP(TACTION,0x0D);
}
}
else
{ //DVD long jump
fLongJump=1;
// WrCoeff(JMPTRKN,jump_num); // hanyc---3915
// WrCoeff(JMPTRKN,(jump_num/100)*99);
WrCoeff(JMPTRKN,(jump_num/10)*8);
WrSSI(CER,0x10);
WrSSI(CDR,(RdSSI(CDR)|0x20));//set DPD TE BW.
WrReg(PLLEN,0x08);
WrReg(PDTYPE,0x00);
WrCoeff(KC3,0x360);
WrDSP(INIT_V_ERROR,0x20);//f0);
if(jump_dir==OUT_WARD)
{
WrCoeff(KTV1,0x200);//woKTV1);
WrCoeff(KCV1,0x1800);//woKVC1);//0x3000);
WrCoeff(KCV3,0xc80);//woKVC3);//0x1900);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x400);
if(jump_num>14000)
{
WrCoeff(KFPROF1,0x7fff);
WrCoeff(BKRATIO,0x0c); //c
}
else if(jump_num>8000)
{
WrCoeff(KFPROF1,0x7000);
WrCoeff(BKRATIO,0x0e); //e
}
else if(jump_num>6000)
{
WrCoeff(KFPROF1,0x5900);
WrCoeff(BKRATIO,0x0e); //e
}
else
{
WrCoeff(KFPROF1,0x4800);
WrCoeff(BKRATIO,0xf); //10
}
WrDSP(SPD_FIX,0x10); //0x10 0x20
WrDSP(SPD_MODE,0x01);
WrDSP(TACTION,0x53);
}
else
{
WrCoeff(KTV1,wiKTV1);//0110);
WrCoeff(KCV1,wiKVC1);//0x3000);
WrCoeff(KCV3,wiKVC3);//0x3000);
WrDSP(SEEKSET1,0x62);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x400);
if(jump_num>14000)
{
WrCoeff(KFPROF1,0x7fff);
WrCoeff(BKRATIO,0x07); //7
}
else if(jump_num>8000)
{
WrCoeff(KFPROF1,0x7000);
WrCoeff(BKRATIO,0x07); //7
}
else if(jump_num>6000)
{
WrCoeff(KFPROF1,0x5900);
WrCoeff(BKRATIO,0x07); //7
}
else
{
WrCoeff(KFPROF1,0x4800);
WrCoeff(BKRATIO,0x08); //8
}
WrDSP(SPD_FIX,0xe0);
WrDSP(SPD_MODE,0x01);
WrDSP(TACTION,0x13);
}
}
}
else
#if 1 // v2.00
{
//CD disc
//R1606_COM_03 WrSSI(FTGR,ibFTGR); //lagre TE before seek
if(jump_num>25000){jump_num=25000;} //hanyc---3915
if((jump_num>2047) && (ibLongJumpErr>10)){jump_num=2047;}
/*
if((jump_num>4096)&&fDVCDDisc) //R1808_COM_01
{jump_num=4096;} //R1808_COM_01
*/
if(jump_num<2048)
{ //CD short jump
fLongJump=0;
if(jump_dir==OUT_WARD)
WrCoeff(KC3,0x280);
else
WrCoeff(KC3,0x200);
WrDSP(INIT_V_ERROR,0xC0);
if(jump_num<128)
{
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x380);
if(jump_num<2)
WrDSP(INIT_V_ERROR,0x60);
if(jump_num<10)
{
WrDSP(SEEKSET1,0x83);
WrDSP(INIT_V_ERROR,0x80);
}
else
{
WrDSP(INIT_V_ERROR,0x90);
WrDSP(SEEKSET1,0x83);
}
}
else
{
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x280);
WrDSP(SEEKSET1,0x83); //0x52);
}
WrCoeff(JMPTRKN,jump_num);
if(jump_dir==OUT_WARD)
WrDSP(TACTION,0x4D);
else
WrDSP(TACTION,0x0D);
}
else
{ //CD long jump
if(jump_dir==OUT_WARD)
WrCoeff(KC3,0x500);
else
WrCoeff(KC3,0x560);
fLongJump=1;
WrDSP(INIT_V_ERROR,0x18);
// WrCoeff(JMPTRKN, jump_num);// hanyc---3915
// WrCoeff(JMPTRKN,(jump_num/100)*99);
WrCoeff(JMPTRKN,(jump_num/10)*8);
WrCoeff(KVFB,0x7f00);
WrSSI(FTGR,ibFTGR|0x03);
WrSSI(CDR,(RdSSI(CDR)|0x20));//set DPD TE BW.
WrReg(PLLEN,0x08);
WrReg(PDTYPE,0x00);
WrCoeff(KTSEEK1,0x800);
WrCoeff(KTSEEK2,0x300);
WrDSP(SEEKSET1,0x83); //0x52);
if(jump_dir==OUT_WARD)
{
WrCoeff(KTV1,0x210);
WrCoeff(KCV1,0x2800);
WrCoeff(KCV3,0xe00);
if(jump_num>14000)
{
WrCoeff(KFPROF1,0x7fff);//0x7fff);
WrCoeff(BKRATIO,0x07);//0x04);
}
else if(jump_num>9000)
{
WrCoeff(KFPROF1,0x7000);//0x7000);
WrCoeff(BKRATIO,0x07);//0x04);
}
else if(jump_num>6000)
{
WrCoeff(KFPROF1,0x6300);//0x5600);
WrCoeff(BKRATIO,0x08);//0x05);
}
else
{
WrCoeff(KFPROF1,0x5400);//0x4200);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -