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

📄 servo.c

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