📄 servo.c
字号:
WrSSI(FTGR,0xa0);
WrSSI(TRCR,0x00);
WrSSI(MRCR,0x00);
WrSSI(CAR,0x00); //0x08
WrSSI(CBR,0x40);
WrSSI(CDR,0x80);
WrSSI(CER,0x10);
}
/*
void InitPA4ID2(void)
{
WrSSI(FCCR,0x00);
WrSSI(FBCR,0x00);
WrSSI(SIGR,0x07);
WrSSI(RFCR,0xf0);
WrSSI(FTGR,0xa0);
WrSSI(TRCR,0x00);
WrSSI(MRCR,0x00);
WrSSI(CAR,0x08); //0x08
WrSSI(CBR,0x40);
WrSSI(CDR,0x80);
WrSSI(CER,0x10);
}
*/
#else
void InitPA4ID(void)
{
WrSSI(FCCR,0x00);
WrSSI(FBCR,0x00);
WrSSI(SIGR,0x07);
WrSSI(RFCR,0xf0);
WrSSI(FTGR,0xa0);
WrSSI(TRCR,0x00);
WrSSI(MRCR,0x00);
WrSSI(CAR,0x08);
WrSSI(CBR,0x40);
WrSSI(CDR,0x80);
WrSSI(CER,0x10);
}
#endif
/*-----------------------------------------------------------------------------
Function: initial ALi chipset
Input: -
Output: -
-----------------------------------------------------------------------------*/
void InitCPS(void)
{
WrReg(CHIPRST,0x01);
WrReg(ADRSEL,0x04);
while((RdReg(VERSION)!=0x55)&&(RdReg(VERSION)!=0x57)&&(RdReg(VERSION)!=0x59));////R1606_COM_02
//R1606_COM_02 while(RdReg(SVOTDATAH)!=0x00);
//R1606_COM_02 while(RdReg(SVOTDATAL)!=0x00);
InitDSP();
while(InitPLL()!=READY);
PowerOnInitDecoder();
MakeDeviceTable();
WrReg(ATAPISTA,0x00); //1b02a10j
WrReg(DEFMWIN,0x7F);
WrReg(DEFMMISC,0x0A);
WrReg(RATEST,0x04);
//R1606_COM_02 WrReg(RSTSTCFG2,0xC4);
//R1606_COM_02 WrReg(DFDLT,0x00);
//R1606_COM_02 WrReg(DFRJT,0x00);
WrReg(DFTCTRL,0x06);
WrReg(0x0F8,0x23);
WrReg(0x0F9,0x23);
WrReg(0x11E,0x01); //open FD will be disable function.
WrReg(0x156,0x20); //open GPIO
WrReg(0x15D,(RdReg(0x15d)|0x02)); //open GPIO //R1808_COM_02
WrReg(0x025,((RdReg(0x025)&0xFD)|0x05)); //GPIO0,GPIO2 output;GPIO1 input
WrReg(0x023,((RdReg(0x023)&0xFE)|0x04)); //GPIO2(LDON)=Hi;GPIO0(CLOSE)=Lo
/**/
WrDSP(0x31,0x00); // XSRFGC(OPEN)=Lo(0V);
WrCoeff(0x72,0x0010);
WrCoeff(0x73,0x0000);
WrCoeff(0x74,0x8080);
WrDSP(0x31,0x01);
//R1606***
#ifdef testmain
WrReg(0x15c,RdReg(0x15c)|0x80);
WrReg(0x149,RdReg(0x149)|0x0c);
#endif
#if TEST_SDRAM
TestSDRAM();
#endif
//R1606&&&
//1906a02j
fTrayDir=IN_WARD;
fEjectPressed=TRUE;
fPowerOnI=1;
fCheckFlashCD=1;//1b02a04j
fTrayInSPBRK=1;//1912a01j
}
/*-----------------------------------------------------------------------------
Function: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
void InitDSP(void)
{
WrReg(SIPTYPE,0x05); //set PreAmp type
WrReg(DDAH,0x00); //set PM initial address=0x0000
WrReg(DDAL,0x00);
WrReg(DIIC,0x0C); //send to PM addr=0x0000 and boost DSP!!
WrReg(DDDH,0x00);
WrReg(DDDM,0x00);
WrReg(DDDL,0x00);
while((RdReg(DIIC)&0x80)!=0x80); //pollint IDMA ready
}
/*-----------------------------------------------------------------------------
Function: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
//R1606_COM_03***
WORD code CD_Krfrp_off1=0x0a7d;
WORD code CD_Krfrp_off2=0x7583;
BYTE code CDRprpDelta=0xe0; //0xd9; //0xC0; // 1000mv
WORD code DVD_Krfrp_off1=0x0a7d;
WORD code DVD_Krfrp_off2=0x7583;
BYTE code DVDRprpDelta=0xe6; //0xe0; //0xe6; // 440mv
BYTE code DVDDualRprpDelta=0xf6; //0xf0; //0xf2
//R1606_COM_03&&&
void InitCoeff(void)
{
fAutoAdj=1;
// WrDSP(SVORST,0x01);//1927a01m chane
// TrayOff();
WrDSP(AWRC_SET2,0x04); //set AWRC off, 0x80 is ON
WrDSP(AWRC_SET,0xE4); //AWRC Level
WrDSP(ASSIGNVALUE,0x40);
WrDSP(WRITEVALUE,0x1c);
//while(RdStatus(CMD_READY,100)==BUSY);//read value
WrDSP(WRITEVALUE,0x1D);
//while(RdStatus(CMD_READY,100)==BUSY);//read value
WrDSP(WRITEVALUE,0x20);
WrDSP(WRITEVALUE,0x21);
WrDSP(WRITEVALUE,0x22);
WrDSP(WRITEVALUE,0x23);
if(fDVDDisc)
{
InitPA4DVD();
if(fDVDDual)
{ //DVD dual-layer
SetEQCoeff((PWORD)&DVD_DUAL_2X);
WrSSI(FTGR,dlFTGR);
WrSSI(SIGR,dlSIGR);
WrSSI(CDR,dlCDR);
WrDSP(FLEVEL1,0x12); //FE stand-by level 0.4v
WrDSP(FLEVEL2,0x0a); //FOK level for SBAD signal
bFLEVEL2=0x0a;
bFLEVEL2_1=0x0a;
}
else
{ //DVD ROM
SetEQCoeff((PWORD)&DVD_ROM_2X);
if(fDVDPlusRW) //R1726_COM_01***
{
WrSSI(FTGR,dlFTGR); //R1808_COM_07***
WrSSI(SIGR,dlSIGR);
WrSSI(CDR,dlCDR); //R1808_COM_07&&&
bFLEVEL2=0x12;
WrDSP(FLEVEL1,0x16);
WrDSP(FLEVEL2,0x12);
}
else
{ //R1726_COM_01&&&
WrDSP(FLEVEL1,0x12); //FE stand-by level 0.3v
WrDSP(FLEVEL2,0x18); //FOK level for SBAD signal
bFLEVEL2=0x18;
} //R1726_COM_01
}
WrReg(EFMSPCNT1,0x23);
WrReg(EFMSPCNT2,0x23); //search windows counter.
WrReg(TRCNT,0x05); //DVD tracking lock counter
WrReg(TRFAILCNT,0x05); //DVD tracking unlock counter
WrReg(SPCNT,0x04); //DVD spindle lock counter
WrReg(SPFAILCNT,0x04); //DVD spindle unlock counter
WrReg(DFDLT,0x10);//R1606_COM_03 //1c26a01j //2423a02j 0x30->0x00
WrReg(DFRJT,0x00);//R1606_COM_03
WrDSP(FSET,0X10); //shock focus gain-up & defect hold FE-LPF
WrDSP(SHKLEVEL,0x7F); //TE shock level
WrDSP(HYST_HOLD_LEVEL,0x09);
WrDSP(ONTRKLEVEL,0x09);//R1703_COM_02
WrDSP(SEEKSET1,0x82);
WrDSP(SEEKSET2,0x10);
WrDSP(SEEKSET3,0x6A); //R1606_COM_03
WrDSP(SKFEED,0x00); //set sk_feed
WrDSP(LSSW,0x00);
WrCoeff(KTSEEK1,0x0800); //0x0800); //kick gain
WrCoeff(KTSEEK2,0x0400); //0x0400); //kick gain
WrCoeff(BKRATIO,10);
WrCoeff(KFPROF1,0x7FFF);
WrCoeff(SPDZCSEL,0x0000);
WrCoeff(KLTSEEK,0x1000);
WrCoeff(KC3,0x05DC);
WrCoeff(KTV1,0x0220); // hanyc 0x0110);
WrCoeff(KTV2,0x0000);
WrCoeff(KTV3,0x0000);
WrCoeff(KTV4,0x0000);
WrCoeff(KTV5,0x0000);
WrCoeff(KTV6,0x2000);
WrCoeff(KTV7,0x0000);
WrCoeff(KCV1,0x5000);
WrCoeff(KCV2,0x0000);
WrCoeff(KCV3,0x5000);
WrCoeff(KCV4,0x7dd3);
WrCoeff(KCV5,0x1555);
WrCoeff(KCV6,0xf083);
WrCoeff(KCV7,0x2000);
//R1606_COM_03*** RFRP off track LPF
WrCoeff(0x09A,DVD_Krfrp_off1);
WrCoeff(0x09B,DVD_Krfrp_off2);
WrCoeff(0x09C,0x4000);
WrCoeff(0x09D,0x4000);
WrDSP(0x20,DVDRprpDelta);//RFRP_DELTA
WrReg(DFTCTRL,0x06); //R1808_COM_15
//R1606_COM_03&&&
}
else
{
if(fCDRW)
{
SetEQCoeff((PWORD)&CD_RW_4X);
InitPA4RW(); //for CDRW only
WrDSP(FLEVEL1,0x13); //0x15 FE stand-by level 0.4v
WrDSP(FLEVEL2,0x09); // 0x06
bFLEVEL2=0x09;
}
else
{
SetEQCoeff((PWORD)&CD_ROM_4X);
InitPA4CD();
WrDSP(FLEVEL1,0x0c);//0x0c); //14);//R1719_H1120_01
WrDSP(FLEVEL2,0x0a);//0x07); //0E);
bFLEVEL2=0x0a;
}
WrReg(EFMSPCNT1,0x40);
WrReg(EFMSPCNT2,0x25); //search windows counter
WrReg(TRCNT,0x08); //tracking lock counter
WrReg(TRFAILCNT,0x08); //tracking unlock counter
WrReg(SPCNT,0x08); //spindle lock counter
WrReg(SPFAILCNT,0x08); //spindle unlock counter
WrReg(DFDLT,0x00);//R1606_COM_03
WrReg(DFRJT,0x00);//R1606_COM_03
WrDSP(FSET,0x00); //shock focus gain-up
WrDSP(TSET,0x06);
WrDSP(SHKLEVEL,0x7F); //TE shock level
WrDSP(HYST_HOLD_LEVEL,0x13);
WrDSP(ONTRKLEVEL,0x09);
WrDSP(SEEKSET1,0xc3);
WrDSP(SEEKSET2,0x10);
WrDSP(SEEKSET3,0x68);
WrDSP(SKFEED,0x00); //sk_feed
WrDSP(LSSW,0x00);
//R1606_COM_03 WrDSP(LJPENDV,0x21);
WrCoeff(KTSEEK1,0x0800);//0x0800); //kick gain
WrCoeff(KTSEEK2,0x0500);//0x0400); //kick gain
WrCoeff(BKRATIO,0x08);
WrCoeff(KFPROF1,0x6000); //long jump max velocity profile
WrCoeff(SPDZCSEL,0x0000); //2.2k*8=17.6kHz
WrCoeff(KLTSEEK,0x1000);
//R1606_COM_03 WrCoeff(LJPDLY,0x0100);
//R1606_COM_03 WrCoeff(LJPTOUT,0x0800);
WrCoeff(KC3,0x0500);
WrCoeff(KC4,0x7fc0);
WrCoeff(KC5,0x4000);
WrCoeff(KC6,0xc0c0);
WrCoeff(KC7,0x6500);
WrCoeff(KTV1,0x0110);
WrCoeff(KTV2,0x0000);
WrCoeff(KTV3,0x0000);
WrCoeff(KTV4,0x0000);
WrCoeff(KTV5,0x0000);
WrCoeff(KTV6,0x2000);
WrCoeff(KTV7,0x0000);
WrCoeff(KCV1,0x5000);
WrCoeff(KCV2,0x0000);
WrCoeff(KCV3,0x1680);
WrCoeff(KCV4,0x7dd3);
WrCoeff(KCV5,0x1555);
WrCoeff(KCV6,0xf083);
WrCoeff(KCV7,0x2000);
//R1606_COM_03*** RFRP off track LPF
WrCoeff(0x09A,CD_Krfrp_off1);
WrCoeff(0x09B,CD_Krfrp_off2);
WrCoeff(0x09C,0x4000);
WrCoeff(0x09D,0x4000);
WrDSP(0x20,CDRprpDelta);//RFRP_DELTA
WrReg(DFTCTRL,0x16); //R1808_COM_15
//R1606_COM_03&&&
}
ibFTGR=ibFTGR_1=RdSSI(FTGR);
WrCoeff(KFSRCH,0x1600);//0x900; 0x1200);
if(fCDDisc&&!fRuninJ&&!fMaster)
{
WrCoeff(KCAV1,0x0a00);
WrCoeff(KCAV2,0x0000);
WrCoeff(KCLV1,0x150);
WrCoeff(KCLV2,0x000);
}
else
{
WrCoeff(KCAV1,0x2000);
WrCoeff(KCAV2,0x0000);
WrCoeff(KCLV1,0x2000); //0x2000
WrCoeff(KCLV2,0x0400); //0x400
}
WrCoeff(KCAV3,0x800);//1926s01j
WrCoeff(KCAV4,0x7d9c);
WrCoeff(KCLV3,0x1000);//1926s01j 0x1000
WrCoeff(KCLV4,0x7d9c);
WrCoeff(KBPCAL1,0x0ce5);
WrCoeff(KBPCAL2,0xf32a);
WrCoeff(KBPCAL3,0x0000);
WrCoeff(KBPCAL4,0x7b00);
WrCoeff(KBPCAL5,0x88ce);
WrCoeff(KBPSHK1,0x03A0);
WrCoeff(KBPSHK2,0x7C63);
WrCoeff(KBPSHK3,0x8000);
WrCoeff(KBPSHK4,0x7FA4);
WrCoeff(KBPSHK5,0x4000);
WrCoeff(KBPSHK6,0x4000);
WrCoeff(KFE1,0x00bb);
WrCoeff(KFE2,0x7FA2);
WrCoeff(KFE3,0x4000);
WrCoeff(KFE4,0x4000);
if(!fRuninJ&&!fMaster)
{
WrCoeff(KTE1,0x0047);
WrCoeff(KTE2,0x7FE0);
WrCoeff(KTE3,0x4000); //1b23s01j
WrCoeff(KTE4,0x4000); //1b23s01j
}
else
{
WrCoeff(KTE1,0x00bb);
WrCoeff(KTE2,0x7FA2);
WrCoeff(KTE3,0x4000);
WrCoeff(KTE4,0x4000);
}
//R1606_COM_03*** RFRP on track LPF
WrCoeff(0x09E,0x0080);
WrCoeff(0x09F,0x7f80);
WrCoeff(0x0A0,0x4000);
WrCoeff(0x0A1,0x4000);
WrCoeff( 0x97, 0x00B0);// when dfct end, time delay before peak hold : 1.0ms
WrCoeff( 0xa3, 0x0040);//Short seek len back limit
WrCoeff(LJPDLY,0x0100);
WrCoeff(LJPTOUT,0x0800);
WrDSP(LJPENDV,0x21);
//R1703_COM_02 WrDSP(0x09,0x01);
WrDSP(0x1E,0x58); //on_track windows
WrDSP(0x1F,0x02);//R1703_COM_02 //on_track limit
WrDSP(0x22,0x02); //internal RFRP Slicer
WrDSP(0x21,0x20);
//R1606_COM_03&&&
}
/*-----------------------------------------------------------------------------
Function: Initial PLL & Data Slicer
Input: -
Output: -
-----------------------------------------------------------------------------*/
BYTE InitPLL(void)
{
WrSSI(PDCR,0x00); //turn on servo power
WrReg(0x051,0x8A); //enable CD Sync counter always reset
WrReg(PLLTRIG,0x80); //trigger oscillator
WrReg(PLLTRIG,0x00);
WrReg(MIS1,0x20);
WrReg(0x051,0x0A); //disable CD Sync counter always reset function
WrReg(VCOHG,0x0c);
WrReg(VCOLG,0x0c);
WrReg(CALDAC,0x00); //claibration data
WrDSP(PLLSET,0x00); //set divider number 1
HoldVCO();
Delay10ms(10);
TP_BYTE_2=0;
ibServoSubTimer=200;
while(ibServoSubTimer)
{
while(!(RdReg(CALDAC)&0x80)) //PLL calibration acknowledge
{
if(!ibServoSubTimer){return ERROR;}
}
TP_BYTE_1=RdReg(CALREGL); //PLL frequency low byte
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -