⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servo.c

📁 一个完整DVDROM代码(使用日立PICKUP)
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -