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

📄 servo.c

📁 一个完整DVDROM代码(使用日立PICKUP)
💻 C
📖 第 1 页 / 共 5 页
字号:
        TP_BYTE_0=RdReg(CALREGH);       //PLL frequency high byte

        if(TP_WORD_0<0x0FD&&TP_BYTE_2>0x00)
            TP_BYTE_2--;

        else if(TP_WORD_0>0x103&&TP_BYTE_2<0x3D)
            TP_BYTE_2++;

        else
            ibServoSubTimer=0;

        WrReg(CALDAC,TP_BYTE_2);
    }

    return READY;
}

/*-----------------------------------------------------------------------------
 Function:  open PLL loop filter to hold VCO
 Input:     -
 Output:    -
-----------------------------------------------------------------------------*/
void HoldVCO(void)
{
    WrReg(PLLEN,0x08);                  //disable FD
    WrReg(PDTYPE,0x00);                 //disable PD
    WrReg(PLLLPF,0x00);                 //close PLL loop filter 1
    WrReg(PLLPOLE,0x00);                //close PLL PD filter 1
}
#if 0
/*-----------------------------------------------------------------------------
 Function:  -
 Input:     bit jump_dir, WORD jump_num
 Output:    READY,ERROR,BUSY
-----------------------------------------------------------------------------*/
#define JMP1TRK						0x0b
BYTE code biSeekSet1=0x62;
BYTE code boSeekSet1=0x62;
BYTE code biInit_v_error=0x20;
BYTE code boInit_v_error=0x20;
WORD code wKTSEEK1=0x800;
WORD code wKTSEEK2=0x320;
WORD code wiKTV1=0x90;
WORD code woKTV1=0x210;
WORD code woKVC1=0x1800;
WORD code woKVC3=0xc80;
WORD code wiKVC1=0x1800;
WORD code wiKVC3=0x1800;
WORD code wiKFPROF1=0x4800;
WORD code woKFPROF1=0x4800;

BYTE JumpTracks(bit jump_dir,WORD jump_num)
{
BYTE    status=BUSY;

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

    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,0x60);//f0);  
            if(jump_num<4096)
            {   //DVD short jump
                fLongJump=0;
                WrCoeff(JMPTRKN,jump_num);
                WrSSI(CER,(dCER|0x80));
#if 1
		if(fDVDDual)
		{
/*
		    if(jump_num>256)    
                  WrCoeff(KC3,0x500);
            else
                  WrCoeff(KC3,0x420);
*/
            WrDSP(SEEKSET3,0x69);  

			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
                		{
						WrDSP(INIT_V_ERROR,0xc0);
						WrDSP(SEEKSET1,0x62);
        	            WrCoeff(KTSEEK1,0x800); 
        	            WrCoeff(KTSEEK2,0x400); 
                		}
			}
			else
			{
	            WrCoeff(KC3,0x280);
				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);
						WrDSP(INIT_V_ERROR,0x80);
						WrDSP(SEEKSET1,0x62);
        	            WrCoeff(KTSEEK1,0x800); 
        	            WrCoeff(KTSEEK2,0x320); 
	                	}
                		else
                		{
			            WrCoeff(KC3,0x230);
						WrDSP(INIT_V_ERROR,0xc0);
						WrDSP(SEEKSET1,0x62);
        	            WrCoeff(KTSEEK1,0x800); 
        	            WrCoeff(KTSEEK2,0x320); 
                		}
			}
		}
		else
#endif
		{
/*
		    if(jump_num>256)    
                  WrCoeff(KC3,0x500);	//0x0620);
            else
                  WrCoeff(KC3,0x420);	//0x05dc);     
*/
            WrDSP(SEEKSET3,0x69);  
            
			if(jump_dir==OUT_WARD)
			{
                WrCoeff(KC3,0x300);
				if(jump_num<=2) 
					{
					WrDSP(INIT_V_ERROR,0x40);
					WrDSP(SEEKSET1,0x61);
                    WrCoeff(KTSEEK1,0x800); 
                    WrCoeff(KTSEEK2,0x360); 
					}
				else
					if(jump_num<=10)                   	
					{
					WrDSP(INIT_V_ERROR,0x40);	//0x60);
					WrDSP(SEEKSET1,0x62);	//0x52);
                    WrCoeff(KTSEEK1,0x800); 
                    WrCoeff(KTSEEK2,0x360); 
					}
	                else if(jump_num<=256)
	                	{
						WrDSP(INIT_V_ERROR,0x90);	//0x60);
						WrDSP(SEEKSET1,0x62);	//0x52);
        	            WrCoeff(KTSEEK1,0x800); 
	                    WrCoeff(KTSEEK2,wKTSEEK2); 
	                	}
                		else
                		{
						WrDSP(INIT_V_ERROR,0x90);	//0x60);
						WrDSP(SEEKSET1,0x62);	//0x52);
        	            WrCoeff(KTSEEK1,0x800); 
	                    WrCoeff(KTSEEK2,wKTSEEK2); 
                		}
			}
			else
			{
                WrCoeff(KC3,0x2c0);
				if(jump_num<=2) 
					{
					WrDSP(INIT_V_ERROR,0x40);
					WrDSP(SEEKSET1,0x61);
                    WrCoeff(KTSEEK1,0x800); 
                    WrCoeff(KTSEEK2,0x360); 
					}
				else
					if(jump_num<=10)                   	
					{
					WrDSP(INIT_V_ERROR,0x40);
					WrDSP(SEEKSET1,0x62);
                    WrCoeff(KTSEEK1,0x800); 
                    WrCoeff(KTSEEK2,0x360); 
					}
	                else if(jump_num<=256)
	                	{
						WrDSP(INIT_V_ERROR,0x90);
						WrDSP(SEEKSET1,0x62);
        	            WrCoeff(KTSEEK1,0x800); 
	                    WrCoeff(KTSEEK2,wKTSEEK2); 
	                	}
                		else
                		{
						WrDSP(INIT_V_ERROR,0x90);
						WrDSP(SEEKSET1,0x62);
        	            WrCoeff(KTSEEK1,0x800); 
                        WrCoeff(KTSEEK2,wKTSEEK2); 
            			}
			}
			//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(JMP1TRK,0x40);   
//                  WrDSP(TACTION,0x4D);
                }
                else
                {
                    WrCoeff(JMPTRKN,jump_num);
	            if(jump_num > 2 )         
	                WrDSP(TACTION,0x0D);
	            else                   
	               	WrDSP(JMP1TRK,0x0);     	
//                  WrDSP(TACTION,0x0D);
                }
            }
            else
            {   //DVD long jump
                fLongJump=1;
//                WrCoeff(JMPTRKN,jump_num);	// hanyc---3915
//                WrCoeff(JMPTRKN,(jump_num/100)*99);
                WrCoeff(JMPTRKN,(jump_num/10)*8);
                WrSSI(CER,0x10);
				WrSSI(CDR,(RdSSI(CDR)|0x20));//set DPD TE BW.
                WrReg(PLLEN,0x08);
                WrReg(PDTYPE,0x00);
	            WrCoeff(KC3,0x360);

	            WrDSP(INIT_V_ERROR,0x20);//f0);  
                if(jump_dir==OUT_WARD)
                {
                    WrCoeff(KTV1,0x200);//woKTV1);
                    WrCoeff(KCV1,0x1800);//woKVC1);//0x3000);
                    WrCoeff(KCV3,0xc80);//woKVC3);//0x1900);
					WrDSP(SEEKSET1,0x62);
                    WrCoeff(KTSEEK1,0x800); 
                    WrCoeff(KTSEEK2,0x400); 

                    if(jump_num>14000)
                    {
                        WrCoeff(KFPROF1,0x7fff);
                        WrCoeff(BKRATIO,0x0c);	//c
                    }
                    else if(jump_num>8000)
                    {
                        WrCoeff(KFPROF1,0x7000);
                        WrCoeff(BKRATIO,0x0e);	//e
                    }
                    else if(jump_num>6000)
                    {
                        WrCoeff(KFPROF1,0x5900);
                        WrCoeff(BKRATIO,0x0e);	//e
                    }
                    else
                    {
                        WrCoeff(KFPROF1,0x4800);
                        WrCoeff(BKRATIO,0xf);	//10
                    }

                    WrDSP(SPD_FIX,0x10);	//0x10 0x20
                    WrDSP(SPD_MODE,0x01);
                    WrDSP(TACTION,0x53);
                }
                else
                {
                    WrCoeff(KTV1,wiKTV1);//0110);
                    WrCoeff(KCV1,wiKVC1);//0x3000);
                    WrCoeff(KCV3,wiKVC3);//0x3000);
					WrDSP(SEEKSET1,0x62);
                    WrCoeff(KTSEEK1,0x800); 
                    WrCoeff(KTSEEK2,0x400); 

                    if(jump_num>14000)
                    {
                        WrCoeff(KFPROF1,0x7fff);
                        WrCoeff(BKRATIO,0x07);	//7
                    }
                    else if(jump_num>8000)
                    {
                        WrCoeff(KFPROF1,0x7000);
                        WrCoeff(BKRATIO,0x07);	//7
                    }
                    else if(jump_num>6000)
                    {
                        WrCoeff(KFPROF1,0x5900);
                        WrCoeff(BKRATIO,0x07);	//7
                    }
                    else
                    {
                        WrCoeff(KFPROF1,0x4800);
                        WrCoeff(BKRATIO,0x08);	//8
                    }

                    WrDSP(SPD_FIX,0xe0);
                    WrDSP(SPD_MODE,0x01);
                    WrDSP(TACTION,0x13);
                }
            }
        }
        else
#if 1		// v2.00
        { 
        	//CD disc
            //R1606_COM_03 WrSSI(FTGR,ibFTGR);         //lagre TE before seek
            if(jump_num>25000){jump_num=25000;}		//hanyc---3915
            if((jump_num>2047) && (ibLongJumpErr>10)){jump_num=2047;}
/*
            if((jump_num>4096)&&fDVCDDisc)      //R1808_COM_01
                {jump_num=4096;}                //R1808_COM_01
*/
            if(jump_num<2048)
            {   //CD short jump
                fLongJump=0;
                if(jump_dir==OUT_WARD)
	                  WrCoeff(KC3,0x280);
	            else
	                  WrCoeff(KC3,0x200);

	            WrDSP(INIT_V_ERROR,0xC0);
                if(jump_num<128)
                {
	        	    WrCoeff(KTSEEK1,0x800); 
		            WrCoeff(KTSEEK2,0x380); 
                	if(jump_num<2)
			            WrDSP(INIT_V_ERROR,0x60);
					if(jump_num<10)
						{
						WrDSP(SEEKSET1,0x83);
			            WrDSP(INIT_V_ERROR,0x80);
						}
					else
						{
			            WrDSP(INIT_V_ERROR,0x90);
						WrDSP(SEEKSET1,0x83);
						}
                }
                else
                	{
		        	    WrCoeff(KTSEEK1,0x800); 
			            WrCoeff(KTSEEK2,0x280); 
						WrDSP(SEEKSET1,0x83);	//0x52);
                	}
                WrCoeff(JMPTRKN,jump_num);
				
                if(jump_dir==OUT_WARD)
                    WrDSP(TACTION,0x4D);
                else
                    WrDSP(TACTION,0x0D);
            }
            else
            {   //CD long jump
                if(jump_dir==OUT_WARD)
	                  WrCoeff(KC3,0x500);
	            else
	                  WrCoeff(KC3,0x560);
                fLongJump=1;
	            WrDSP(INIT_V_ERROR,0x18);
//                WrCoeff(JMPTRKN, jump_num);// hanyc---3915
//                WrCoeff(JMPTRKN,(jump_num/100)*99);
                WrCoeff(JMPTRKN,(jump_num/10)*8);
                WrCoeff(KVFB,0x7f00);
                WrSSI(FTGR,ibFTGR|0x03);
				WrSSI(CDR,(RdSSI(CDR)|0x20));//set DPD TE BW.
					
                WrReg(PLLEN,0x08);
                WrReg(PDTYPE,0x00);

        	    WrCoeff(KTSEEK1,0x800); 
	            WrCoeff(KTSEEK2,0x300); 
				WrDSP(SEEKSET1,0x83);	//0x52);

                if(jump_dir==OUT_WARD)
                {
                    WrCoeff(KTV1,0x210);
                    WrCoeff(KCV1,0x2800);
                    WrCoeff(KCV3,0xe00);

                    if(jump_num>14000)
                    {
                        WrCoeff(KFPROF1,0x7fff);//0x7fff);
                        WrCoeff(BKRATIO,0x07);//0x04);
                    }
                    else if(jump_num>9000)
                    {
                        WrCoeff(KFPROF1,0x7000);//0x7000);
                        WrCoeff(BKRATIO,0x07);//0x04);
                    }
                    else if(jump_num>6000)
                    {
                        WrCoeff(KFPROF1,0x6300);//0x5600);
                        WrCoeff(BKRATIO,0x08);//0x05);
                    }
                    else
                    {
                        WrCoeff(KFPROF1,0x5400);//0x4200);

⌨️ 快捷键说明

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