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

📄 servo.c

📁 一个完整DVDROM代码(使用日立PICKUP)
💻 C
📖 第 1 页 / 共 5 页
字号:
                        WrCoeff(BKRATIO,0x08);//0x06);
                    }

                    WrDSP(SPD_FIX,0x18);//0x20	0x28);
                    WrDSP(SPD_MODE,0x01);
                    WrDSP(TACTION,0x53);
                }
                else
                {
                    WrCoeff(KTV1,0xb0);
                    WrCoeff(KCV1,0x2800);
                    WrCoeff(KCV3,0x2800);

                    if(jump_num>15000)
                    {
                        WrCoeff(KFPROF1,0x7fff);//0x7fff);
                        WrCoeff(BKRATIO,0x03);
                    }
                    else if(jump_num>9000)
                    {
                        WrCoeff(KFPROF1,0x7800);//0x7000);
                        WrCoeff(BKRATIO,0x03);
                    }
                    else if(jump_num>6000)
                    {
                        WrCoeff(KFPROF1,0x6800);//0x6000);
                        WrCoeff(BKRATIO,0x04);
                    }
/*                    else
                    {
                        WrCoeff(KFPROF1,0x6800);//0x4800);
                        WrCoeff(BKRATIO,0x04);
                    }
*/
                    WrDSP(SPD_FIX,0xe0);
                    WrDSP(SPD_MODE,0x01);
                    WrDSP(TACTION,0x13);
                }
            }
        }
#else	// v1.00
        {   //CD disc
            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( (jump_num>5)&&(jump_num<20) )
                		jump_num=5;	
                    WrCoeff(JMPTRKN,jump_num);
                }                               //R1808_COM_01&&&
                else
                    WrCoeff(JMPTRKN,128);
				
                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
				WrSSI(CDR,(RdSSI(CDR)|0x20));//set DPD TE BW.
					
                WrReg(PLLEN,0x08);
                WrReg(PDTYPE,0x00);

                if(jump_dir==OUT_WARD)
                {
                    WrCoeff(KTV1,0x0260);////0x03E8);	---d030405
                    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,0x18);//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,0xc0);	//0x80);
                    WrDSP(SPD_MODE,0x01);
                    WrDSP(TACTION,0x13);
                }
            }
        }
#endif
        fS0=fS1=0;
        bSKSubPhase++;
    case 2:
        status=RdStatus(CMD_COMP,200);
        if(status!=BUSY)
        {
            if(fLongJump)
            {
                if(fCDDisc) 
                    WrSSI(FTGR,ibFTGR);
                else 
                {
                    if(fCurrentLayer)
                        WrSSI(CER,ibCER_1);
                    else
                        WrSSI(CER,ibCER);
                } 
                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);  
                    }
                    WrDSP(CAV_CLV,0x01);//CLV mode
                    WrDSP(SPD_MODE,0x04);
                }
            }

            WrSSI(CBR,ibCBR);
            WrSSI(CDR,(RdSSI(CDR)&0xDF));
            
            WrSSI(CER,(RdSSI(CER)&0x7f));
	        WrCoeff(KC3,0x05DC);

            if(fDVDDisc)
            {
                WrDSP(FSET,0x10);
                WrDSP(TSET,0x17);
            }
            else
            {
                WrDSP(FSET,0x10);
                WrDSP(TSET,0x17);
            }
            WrDSP(0x5F,0xd0);
            fDisRdQ=0;
            fLongJump=0;
            fJumpTrack=0;
            bSKSubPhase=0;
        }
    }

//	copy_jump_dir = jump_dir;
//	copy_long_jump = (jump_num>4000);
    return status;
}
#else
/*-----------------------------------------------------------------------------
 Function:  -
 Input:     bit jump_dir, WORD jump_num
 Output:    READY,ERROR,BUSY
-----------------------------------------------------------------------------*/
BYTE JumpTracks(bit jump_dir,WORD jump_num)
{
BYTE    status=BUSY;

    //R1606_COM_03  WrDSP(LJPMODE,0x00);
    WrDSP(0x5F,0x80);   //1c13a02b

    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,0xf0);//f0);  
//            if(jump_num<4096)
            if(jump_num<1500)
            {   //DVD short jump
                fLongJump=0;
                //R1703_COM_02 if(jump_num<15)
                //R1703_COM_02     WrCoeff(JMPTRKN,1);
                //R1703_COM_02 else
                WrCoeff(JMPTRKN,jump_num);
				/* //R1606_COM_03***
                WrSSI(MRCR,0x04);
                WrSSI(CAR,0x0D);
                if(fDVDDual)
                    WrSSI(CDR,(dlCDR&0xDF));
                else
                    WrSSI(CDR,(dCDR&0xDF));
				*/ //R1606_COM_03&&&
	       /* if(fDVDDual)        		//2416a01j***  //2417a02j***
	        {
			if(jump_num >= 10)
				WrDSP(SEEKSET3,0x6a);
			else
		 		WrDSP(SEEKSET3,0x62);
		}*/				//2416a01j&&&   //2417a02j&&&
#if 1
//		if(fDVDDual)
		if((fDVDDual)&&(!fCurrentLayer))	// layer 0 1#~16#
		{
/*
		    if(jump_num>256)    
                  WrCoeff(KC3,0x500);
            else
                  WrCoeff(KC3,0x420);
*/
            WrDSP(SEEKSET3,0x69);  
			if(jump_num>300) jump_num=300;

			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
                		{
                		jump_num=200;
						WrDSP(INIT_V_ERROR,0xc0);
						WrDSP(SEEKSET1,0x62);
        	            WrCoeff(KTSEEK1,0x800); 
        	            WrCoeff(KTSEEK2,0x400); 
                		}
			}
			else
			{
	            WrCoeff(KC3,0x200);
				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);
//			            WrCoeff(KC3,0x200);
						WrDSP(INIT_V_ERROR,0x80);
						WrDSP(SEEKSET1,0x62);
        	            WrCoeff(KTSEEK1,0x800); 
        	            WrCoeff(KTSEEK2,0x320); 
	                	}
                		else
                		{
                		jump_num=200;
			            WrCoeff(KC3,0x230);
//			            WrCoeff(KC3,0x200);
						WrDSP(INIT_V_ERROR,0x90);
						WrDSP(SEEKSET1,0x62);
        	            WrCoeff(KTSEEK1,0x800); 
        	            WrCoeff(KTSEEK2,0x320); 
                		}
			}
		}
		else
//#elif 1
		if((fDVDDual)&&(fCurrentLayer))	// layer 1 17#~32#
//		if(fDVDDual)				//2419a01j***
		{
			if(jump_num>500) jump_num=500;
			if(jump_dir==OUT_WARD)
			{			
            			WrDSP(INIT_V_ERROR,0x40);  //2413a03j 0xf0-->0xc0
                		WrCoeff(KTSEEK1,0x800);
                		WrCoeff(KTSEEK2,0x400);
                		WrDSP(SEEKSET1,0x62);
                		WrDSP(SEEKSET3,0x69);  
		        	if(jump_num>256)    
                        		WrCoeff(KC3,0x0500);
                        	else
                        	 	WrCoeff(KC3,0x0450);
                        }
                        else
                        {
                        WrDSP(INIT_V_ERROR,0x40);  //2413a03j 0xf0-->0xc0
                   		WrCoeff(KTSEEK1,0x800);//0x600);  
                		WrCoeff(KTSEEK2,0x400);   
                		WrDSP(SEEKSET1,0x62);//0x82);
                		WrDSP(SEEKSET3,0x69);  

                        	if(jump_num>256)    
                        		WrCoeff(KC3,0x0500); 
                        	else
                        	 	WrCoeff(KC3,0x0450);
                        }            
  
		}
		else
#endif
		{

		        if(jump_num>256)    
                        	WrCoeff(KC3,0x0620);
                        else
                                WrCoeff(KC3,0x05dc);     

			//WrDSP(SEEKSET1,0x63); //0x82 2305s02i 0xf1
                	WrDSP(SEEKSET3,0x69);   
			if(jump_dir==OUT_WARD)
			{
				WrDSP(INIT_V_ERROR,0x90);
				WrDSP(SEEKSET1,0x82);
				if(jump_num<=10)
					WrCoeff(KTSEEK1,0x800);
				else if(jump_num<=256)
                       		        WrCoeff(KTSEEK1,0x600); 
                       		else
                       			WrCoeff(KTSEEK1,0x800);
			}
			else
			{
				if(jump_num<=10)                   	
                       			WrCoeff(KTSEEK1,0x400); 
                       		else if(jump_num<=256)
                       		        WrCoeff(KTSEEK1,0x600); 
                       		else
                       			WrCoeff(KTSEEK1,0x800);   
				WrDSP(INIT_V_ERROR,0x90);
				WrDSP(SEEKSET1,0x82);
			}
			//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(0x0B,0x40);   
//                  WrDSP(TACTION,0x4D);
                }
                else
                {
                    WrCoeff(JMPTRKN,jump_num);
	            if(jump_num > 2 )         
	                WrDSP(TACTION,0x0D);
	            else                   
	               	WrDSP(0x0B,0x0);     	
//                  WrDSP(TACTION,0x0D);
                }
            }
            else
            {   //DVD long jump
                fLongJump=1;
                WrCoeff(JMPTRKN,(jump_num/10)*8);
                WrSSI(CER,0x10); //R1808_COM_10   
				

⌨️ 快捷键说明

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