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

📄 svostate.c

📁 一个完整DVDROM代码(使用日立PICKUP)
💻 C
📖 第 1 页 / 共 5 页
字号:
        tmp0=RdReg(0x07A);
        if(tmp0==0x50)
            WrDSP(TGC,0x00);
     
        WrDSP(READVALUE,0x17);
        while(RdStatus(CMD_READY,100)==BUSY);

        tmp0=RdReg(0x07b);
#else
        if(RdReg(0x07A)==0x50)
            WrDSP(TGC,0x00);
#endif        
        break;
    }
}

/*-----------------------------------------------------------------------------
 Function:  -
 Input:     -
 Output:    -
-----------------------------------------------------------------------------*/
#define DVD_DUAL_LIMIT   0x30            //R1726_COM_01 //1b20a01j  //0x28->0x44 2406a02j
#define DVD_LIMIT   0x40                  //R1726_COM_01 //1b20a01j
#define CD_LIMIT    0x20                  //R1726_COM_01
#define DVCD_LIMIT  0x20                  //R1726_COM_01

void TuneErrRate(void)
{
    if(!fNewID){return;}

    if(fDVDDual)
    {
        if(fCurrentLayer==fLayerNumber)
            fDisRdQ=1;
        else
        {
            if(JumpLayer(fLayerNumber)==READY)
            {
                //R1703_COM_01 while(TrackOn()==BUSY);
                WrDSP(TACTION,0x05);//R1703_COM_01
                fNewID=0;
            }
            return;
        }
    }
    else
        fDisRdQ=1;

    switch(bPhase)
    {
    case 0:
        if(!fRuninJ && !fMaster)
        {
            fDisRdQ=0;
            bServoState=SCAN_DISC_STATE;
            bPhase=bSubPhase=0;
            return;
        }


        if(fDVDDisc)
        {
     	    PIOffsetCalibration();             //R1726_COM_01
            if(fLayerNumber)
            {
                WrSSI(FBCR,dlFBCR);
                WrSSI(FCCR,dlFCCR);
                //1b02a23j WrSSI(FTGR,dlFTGR);
            }
            else
            {
                WrSSI(FBCR,dFBCR);
                WrSSI(FCCR,dFCCR);
                //1b02a23j WrSSI(FTGR,dFTGR);
            }
            
            if(fDVDDual)             //1b02a23j***
                WrSSI(FTGR,dlFTGR);
            else
                WrSSI(FTGR,dFTGR);   //1b02a23j&&&
	
            WrReg(0x067,0x04);//R1606_COM_06          //tjc //wait 4 ECC for read count and select PI readout
            WrReg(0x0BD,0x02);          //HI_NOERROR(when ECC but no give ecc int i.e. enable RS/EDC always OK)
            WrReg(0x1c2,0x00);          //RS_repeat_0times(only PI,PO)            
            WrReg(0x014,(RdReg(0x014)&0xbf));//bit6=0 disable id sequence check register prevent EDC error occure
            RSTurnOn();
        }
        else
        {
            //R1808_COM_01***
/*
            if(fDVCDDisc)
            {
                bPhase=4;
                return;               
            }
*/
            //R1808_COM_01&&&
            if(ilLeadOut <= 4500) //R1808_COM_04***
            {
                bPhase=8;
                return;               
            }                     //R1808_COM_04&&&
/*// ---hanyc            
            if(fCDDisc)
            {
                bPhase=4;
                return;               
            }
/**/            
            WrReg(0x182,0x00);          //bit 3set 1 => 10sec ,set0 =>1sec
            WrReg(0x183,0x18);          //select C1 Error Counter
            WrReg(0x182,0x04);          //set C2
            WrReg(0x183,0xc0);          //select C2 Error Counter
            WrReg(0x182,RdReg(0x182)|0x03);//enable C1(bit1) C2(bit0) counter
        }
//        val1=0;
        bPhase++;
        break;

    case 1:
        if(CIRCValid()==READY)
        {
            ibRecordTOCFlag=0;//1b21s01i
            if(fTuneASL)
            {
                if(fLayerNumber)
                {
                    TP_BYTE_4=ibASL;
                    ibASL=ibASL_1;
                    ibASL_1=TP_BYTE_4;
                }

                //1b21s01i ibRecordTOCFlag=0;
                iwErrorRate=0xffff;

                WrReg(ASL,(ibASL&0xF8)|ibRecordTOCFlag);
                WrReg(0x042,RdReg(0x042)|0x40);
                bPhase++;
            }
            bPhase++;
        }
        break;

    case 2:
        if(RdErrRate()==READY)
        {
            if(fCDDisc&&!fCDRW) //select FCCR/FBCR value    //1b21s01i***
            {
                if(ibRecordTOCFlag==0)
                {
                    iwErrorRate=TP_WORD_0;
                    WrSSI(FCCR,0xBE);
                    WrSSI(FBCR,0x40);
                    Delay1ms(2);
                    WrReg(0x042,RdReg(0x042)|0x40);
                    ibRecordTOCFlag++;
                    break;
                }
                if(TP_WORD_0 >= iwErrorRate)
                {
                    WrSSI(FCCR,cFCCR);
                    WrSSI(FBCR,cFBCR);
                    Delay1ms(2);
                    TP_WORD_0=iwErrorRate;
                }
            }                                       //1b21s01i&&&
            
            if(TP_WORD_0>0x30)//R1606_COM_06  
            {
                fTuneFTGR=1;
                fTuneASL=0;
                iwErrorRate=TP_WORD_0;

                if(fLayerNumber)
                {
                    TP_BYTE_4=ibFTGR;
                    ibFTGR=ibFTGR_1;
                    ibFTGR_1=TP_BYTE_4;
                }
                ibRecordTOCFlag=ibFTGR&0xF0;

                if(fTurnErrDir)
                    ibRecordTOCFlag+=0x10;
                else
                    ibRecordTOCFlag-=0x10;
                WrSSI(FTGR,(ibFTGR&0x0F)|ibRecordTOCFlag);

                if(fDVDDisc)
                {
                    WrReg(0x35,0x71);
                    WrReg(0xFB,(RdReg(0xfb)|0x10));
                }
                WrReg(0x042,RdReg(0x042)|0x40);
                bPhase++;
            }
            else
                bPhase+=2;
        }
        break;

    case 3:
        if(RdErrRate()==READY)
        {
            if(fTuneFTGR)
            {
                //R1606_COM_06***
                if(TP_WORD_0<iwErrorRate)
                {
                    iwErrorRate=TP_WORD_0;
                    ibFTGR=(ibFTGR&0x0F)|ibRecordTOCFlag;                    
                }
                //R1606_COM_06&&&
                
                
                if(fTurnErrDir)
                {
                    ibRecordTOCFlag+=0x10;
                    TP_BYTE_4=ibRecordTOCFlag-(ibFTGR&0xF0);
                    fTuneErrhaverun=1;
                }
                else
                {
                    ibRecordTOCFlag-=0x10;
                    TP_BYTE_4=(ibFTGR&0xF0)-ibRecordTOCFlag;
                }

                if(ibRecordTOCFlag>0xD0||ibRecordTOCFlag<0x40||(TP_BYTE_4>0x50&&TP_WORD_0<0x80)) //1b02a19j
                {
                    if(!fTurnErrDir)
                    {
                        fTurnErrDir=1;

                        if(fDVDDual)
                            ibRecordTOCFlag=(dlFTGR&0xF0)+0x10;
                        else if(fDVDDisc)
                            ibRecordTOCFlag=(dFTGR&0xF0)+0x10;
                        else
                            ibRecordTOCFlag=(cFTGR&0xF0)+0x10;

                        WrSSI(FTGR,(ibFTGR&0x0F)|ibRecordTOCFlag);
                        WrReg(0x042,RdReg(0x042)|0x40);
                        return;
                    }

                    WrSSI(FTGR,ibFTGR);

                    fTurnErrDir=0;
                    fTuneFTGR=0;
                    fTuneASL=1;

                    if(fLayerNumber)
                    {
                        TP_BYTE_4=ibFTGR;
                        ibFTGR=ibFTGR_1;
                        ibFTGR_1=TP_BYTE_4;

                        TP_BYTE_4=ibASL;
                        ibASL=ibASL_1;
                        ibASL_1=TP_BYTE_4;
                    }

                    ibRecordTOCFlag=1;    //R1719_COM_02
                    //iwErrorRate=0xffff; //R1719_COM_02
                    WrReg(ASL,(ibASL&0xF8)|ibRecordTOCFlag);
                    WrReg(0x042,RdReg(0x042)|0x40);
                }
                else
                {
                    WrSSI(FTGR,(ibFTGR&0x0F)|ibRecordTOCFlag);
                    WrReg(0x042,RdReg(0x042)|0x40);
                }
            }
            else if(fTuneASL)
            {
                if(TP_WORD_0<iwErrorRate)
                {
                    iwErrorRate=TP_WORD_0;
                    ibASL=(ibASL&0xF8)|ibRecordTOCFlag;
                }

                if(ibRecordTOCFlag>0x04)
                {
                    WrReg(ASL,ibASL);
                    fTuneASL=0;

                    if(fLayerNumber)
                    {
                        TP_BYTE_4=ibASL;
                        ibASL=ibASL_1;
                        ibASL_1=TP_BYTE_4;
                    }
                    bPhase++;
                    return;
                }
                else
                {
                    ibRecordTOCFlag++;
                    WrReg(ASL,(ibASL&0xF8)|ibRecordTOCFlag);
                    WrReg(0x042,RdReg(0x042)|0x40);
                }
            }
        }
        break;

    case 4:
        if(fDVDDisc)
        {
            InitPointer();
            WrReg(0x0BD,0x00);
            WrReg(0x014,(RdReg(0x014)|0x40));
        }
        else
            WrReg(0x182,0x00);
        
        if(fDVDPlusRW)                            //R1808_COM_07
            goto notg;                            //R1808_COM_07
        else                                      //R1808_COM_07
            FocGainAdj();
        fS0=fS1=0;
        bPhase++;
        break;

    case 5:
        if(RdStatus(CMD_COMP,200)!=BUSY)//focus gain ready
        {
            ProtectLoopGain(F_GAIN);
            fS0=fS1=0;
            bPhase++;

//            if(!fDVCDDisc)          //R1808_COM_01
                TrkGainAdj();
/*
            else
            {    //R1808_COM_01***
                WrDSP(TACTION,0x00);
                TrkBalAdj();
                fS0=fS1=0;
                bPhase=7;                
            }    //R1808_COM_01&&&   
*/
        }
        break;

    case 6:
        if(RdStatus(CMD_COMP,200)!=BUSY)//trcking gain ready
        {
notg:                       //R1808_COM_01
            ProtectLoopGain(T_GAIN);
            if(fCurrentLayer)
                WrDSP(LGAINSW,0x11);    //save layer 1
            else
                WrDSP(LGAINSW,0x01);    //save layer 0

            fS0=fS1=0;
            bPhase++;
        }
        break;

    case 7:
        if(RdStatus(CMD_COMP,200)!=BUSY)//trcking gain ready
        {
            bPhase++;
            //R1808_COM_01***
/*
            if(fDVCDDisc && fCDDisc )
            {   
                WrDSP(TACTION,0x05);
                Delay10ms(5);
            }
*/
//			break; //R1808
            //R1808_COM_01&&&    
        }
        else
            break;

    case 8:
        if(fDVDDisc)
        {
            if(fSaveNum && fDVDDual)
            {
                //R1606_COM_03***
                if(fCurrentLayer)
                {
                	ibDelta_1=TuneRFRPDelta();	
                	WrDSP(0x20,ibDelta_1); 
                }
                else
                {
                	ibDelta_0=TuneRFRPDelta();	
                	WrDSP(0x20,ibDelta_0); 
                }                   
                //R1606_COM_03&&&
                
                fLayerNumber=~fLayerNumber;
                fAutoAdj=1;

                bASUState=SAVE_LGAIN;
                bServoState=START_UP_STATE;
                bSUPhase=5;
                bSKSubPhase=0;//1925a01m chane
                return;
            }
			
			//R1606_COM_03***
            if(fDVDDual & fCurrentLayer)
            {
            	ibDelta_1=TuneRFRPDelta();
            	WrDSP(0x20,ibDelta_1); 
            }	
            else
            {
            	ibDelta_0=TuneRFRPDelta();
            	WrDSP(0x20,ibDelta_0);
            }            
            //R1606_COM_03&&&
            
            fLayerNumber=0;
            bServoState=READ_TOC_STATE;
            LEDToggle(20);
        }
        else
        {
            if(ilLeadOut>4500)//R1808_COM_04
            {
        	    ibDelta_0=TuneRFRPDelta();//R1606_COM_03
                WrDSP(0x20,ibDelta_0);    //R1606_COM_03 
            }
            
        	bServoState=SCAN_DISC_STATE;
        }
        
        fDisRdQ=0;
        bPhase=bSubPhase=0;
    }
}


//R1606_COM_03***
extern BYTE code DVDRprpDelta;
extern BYTE code CDRprpDelta;
extern BYTE code DVDDualRprpDelta;    //1b02a22j
BYTE TuneRFRPDelta(void)
{
    
    Delay1ms(5);
    WrDSP(0x20,0);
    Delay10ms(30);
    WrDSP(READVALUE,0x2e);
    fS0=fS1=0;                                //1b02a22j
    while((RdStatus(CMD_READY,100)==BUSY));//read RFRP out
    TP_BYTE_11=RdReg(0x07A);

    if(fDVDDual)                              //1b02a22j
        WrDSP(0x20,DVDDualRprpDelta);         //1b02a22j   
    else if(fDVDDisc)                         //1b02a22j
        WrDSP(0x20,DVDRprpDelta);
    else
        WrDSP(0x20,CDRprpDelta);
    
    while(1)                                  //1b02a22j***
    {
        TP_BYTE_0=JumpTracks(OUT_WARD,50);
        if(TP_BYTE_0==ERROR)
        {
            if(fDVDDual)                              //1b02a22j
                return DVDDualRprpDelta;         //1b02a22j   
            else if(fDVDDisc)                         //1b02a22j
                return DVDRprpDelta; 
            else
                return CDRprpDelta;  
        }
        else if(TP_BYTE_0==READY)     
            break;
    }                                         //1b02a22j&&&  

    WrDSP(READVALUE,0x2e);
    fS0=fS1=0;                                //1b02a22j
    while((RdStatus(CMD_READY,100)==BUSY));//read RFRP out
    //TRCR_0=Rd5701(0x07A)-TRCR_0;
    TP_BYTE_11=RdReg(0x07A)-TP_BYTE_11;
    
    if((TP_BYTE_11&0x80)==0x80)
        return TP_BYTE_11;
    else if(fDVDDual)                         //1b02a22j
        return DVDDualRprpDelta;              //1b02a22j   
    else if(fDVDDisc)                         //1b02a22j
        return DVDRprpDelta; //return default value.
    else
        return CDRprpDelta;  //return default value.                     
    //WrDSP(0x20,TRCR_0);
}
//R1606_COM_03&&&

/*-----------------------------------------------------------------------------
 Function:  -
 Input:     -
 Output:    -
-----------------------------------------------------------------------------*/
BYTE RdErrRate(void)
{
    if(CIRCValid()==READY)
    {
        if(fDVDDisc)
        {
            TP_BYTE_0=RdReg(0x69);
            TP_BYTE_1=RdReg(0x68);
            TP_BYTE_2=RdReg(0x6b);
            TP_BYTE_3=RdReg(0x6a);
            TP_WORD_0+=TP_WORD_1;//R1703_COM_04     
//            TP_WORD_0=TP_WORD_1;   
        }
        else
        {
            TP_BYTE_0=RdReg(0x18d);     //c1 error coun

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -