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

📄 sony_servo.lst

📁 索尼CX3068VCD伺服的随身听
💻 LST
📖 第 1 页 / 共 5 页
字号:
 592          
 593          					//	pcm_mute();
 594          						
 595          						found = SERVO_search();
 596          						if (!found && !servo_focus_on) {
 597          							SERVO_stop();
 598          							break;
 599          						}
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 11  

 600          						#ifdef NEW_DSP
                   						 regs16->Game_TLB_23=0x0;
              					    #else
 603          						     pcm_restore();
 604          					    #endif
 605               
 606          //						pcm_restore();
 607          					}
 608          
 609          					if (SERVO_Qarray_current[SERVO_QTRACK] != SERVO_Qarray_new[SERVO_QTRACK])
 610          					{   /* Track Change */
 611          						for (num = 0; num < SUBQ_LEN; num++)
 612          							SERVO_Qarray_current[num] = SERVO_Qarray_new[num];
 613          						SERVO_update_track = 1;
 614          						SERVO_update_second = 1;
 615          						/* Take care about lead out ! */
 616          						r_tmp = SERVO_Qarray_new[SERVO_QTRACK];
 617          						r_tmp = CVbcd2hex[r_tmp];
 618          						r_tmp = r_tmp - ((CDinfo.type == CD_CDDA) ? 0 : 1);
 619          						servo_info = CVhex2bcd[r_tmp] << 24;
 620          						r_tmp = SERVO_Qarray_new[SERVO_QPOINT] << 16;
 621          						servo_info += r_tmp;
 622          						//////// added by Wenxin //////////////////
 623          						dsa_recv.byte[DSA_PAR] = CVbcd2hex[SERVO_Qarray_new[SERVO_QTRACK]];
 624          						#ifdef ENABLE_ESP
              						esp_track_change(dsa_recv.byte[DSA_PAR]);
              						#endif
 627          						CDU_CDactTit();
 628          						///////////////////////////////////////////
 629          					}
 630          					else {	/* Track Keep */
 631          #if 0	// Wenxin -- never used variable
              						static int check_time = 0;
              #endif
 634          						int prev_cdtime;
 635          						/* Check for subQ-code. If it doesn't advance *
 636          						* in 2 seconds, do a jump track to skip it */
 637          						prev_cdtime = (SERVO_Qarray_current[SERVO_QPMIN] << 16) |
 638          									  (SERVO_Qarray_current[SERVO_QPSEC] << 8) |
 639          									  SERVO_Qarray_current[SERVO_QPFRAME];
 640          						/* Do NOT copy backward-going subQ */
 641          						if (SERVO_cdtime > prev_cdtime) {
 642          							for (num = 0; num < SUBQ_LEN; num++)
 643          								SERVO_Qarray_current[num] = SERVO_Qarray_new[num];
 644          							/* update index */
 645          							servo_info &= 0xff00ffff;
 646          							r_tmp = SERVO_Qarray_new[SERVO_QPOINT] << 16;
 647          							servo_info += r_tmp;
 648          							/* check necessary for update time */
 649          							if ((servo_info & 0xff) != SERVO_Qarray_new[SERVO_QPSEC]) {	//chu use abs. time !!
 650          								r_tmp = SERVO_Qarray_new[SERVO_QPMIN] << 8;				//chu
 651          								r_tmp += SERVO_Qarray_new[SERVO_QPSEC];					//chu
 652          								servo_info &= 0xffff0000;
 653          								servo_info += r_tmp;
 654          								SERVO_update_second = 1;
 655          #if 1
 656          								if( (sysMode == SYS_PLAY) /*&& (VCD_ver != VCD30)*/ ){
 657          									if( !jump_flag && !ls_pause && !cd_pause && !SERVO_Qarray_new[6] &&
 658          										!servo_focus_drop && !servo_gfs_drop && !servo_subq_drop 
 659          #ifdef USE_OSD_FUNC		//chu
              										&& !slow_state
              #endif										
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 12  

 662          									  )
 663          									  {
 664          // sz added Jul 3(rd) -> goto track => toby
 665          										if( CVbcd2hex[SERVO_Qarray_new[SERVO_QTRACK]] != cdm.trk){			
 666          											dsa_recv.byte[DSA_PAR] = CVbcd2hex[SERVO_Qarray_new[SERVO_QTRACK]];
 667          											#ifdef ENABLE_ESP 
              												esp_track_change(dsa_recv.byte[DSA_PAR]);
              											#endif
 670          											CDU_CDactTit();
 671          										}
 672          // the end									  
 673          										if( CVbcd2hex[SERVO_Qarray_new[SERVO_QPMIN]] != cdm.min){
 674          											dsa_recv.byte[DSA_PAR] = CVbcd2hex[SERVO_Qarray_new[SERVO_QPMIN]];
 675          											CDU_CDabsMin();
 676          										}
 677          										dsa_recv.byte[DSA_PAR] = CVbcd2hex[SERVO_Qarray_new[SERVO_QPSEC]];
 678          										CDU_CDabsSec();
 679          /////////// Added by Wenxin /////////////////
 680          										if ( cd_ab_flag &&
 681          											(CVbcd2hex[SERVO_Qarray_new[SERVO_QPMIN]]*60*75+
 682          											 CVbcd2hex[SERVO_Qarray_new[SERVO_QPSEC]]*75+
 683          											 CVbcd2hex[SERVO_Qarray_new[SERVO_QPFRAME]] >= msf2frm(&ab1)) )
 684          										{
 685          											MSF	temp;
 686          											debugprint("CDU_CDfound",cd_ab);
 687          											temp.min = ab0.min;
 688          											temp.sec = ab0.sec;
 689          											temp.frm = ab0.frm;
 690          											pcm_mute();
 691          											Cdm_gotoMSF( &temp );
 692          											CDU_CDfound();
 693          										}
 694          /////////// end fo added //////////////////////
 695          									  }
 696          								}
 697          #endif
 698          							}
 699          						}
 700          					}
 701          				}
 702          			}
 703          			break;
 704          		case SERVO_PAUSE:
 705          				if (SERVO_new_Qcode && kickfg) {
 706          				pcm_mute();
 707          				Do_mute();
 708          			      flag=SERVO_Seek(pause_min,pause_sec,pause_frame);
 709          				  SERVO_mode=SERVO_PAUSE;
 710          					if(!flag && !servo_focus_on)
 711          						{
 712          							SERVO_stop();
 713          							dsa_recv.word=DSR_ERROR;
 714          										}
 715                                               }	
 716          			break;
 717          		case SERVO_RELEASEPAUSE:
 718          			/*flag=SERVO_Seek(pause_min,pause_sec,pause_frame);
 719          	        if (!flag && !servo_focus_on)
 720              	        {
 721                  	    	SERVO_stop();
 722                      		dsa_recv.word=DSR_ERROR;
 723           	     		}
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 13  

 724           	     	else*/ SERVO_mode=SERVO_PLAY;
 725          			break;
 726          		case SERVO_SEARCH:
 727          			break;
 728          		case SERVO_TRAY:
 729          			if(servo_pres_m == OPEN_10)
 730          				{	
 731          		    		if ((glbTimer - open_delay) > T300MS) 
 732          		    		{
 733          						if (SERVO_OPEN_HIGH) {	
 734          							SERVO_close();
 735          //							regs16->Control_Status = 0xff;
 736          							FIX_KYopcl();	// sz 7/12 => tray moving inside 
 737          											}
 738          						}										
 739          				} 
 740          		     		break;	   
 741          		     
 742          		default:
 743          			break;
 744          	}
 745          	enable_reset_timer();
 746          	return;
 747          }
 748          
 749          
 750          
 751          
 752          /************************************************************************
 753           * SEND COMMANDS TO DSP                                                 *
 754           ************************************************************************/
 755          /*
 756           * Send 1 command(4 bits) to DSP
 757           */
 758          void SERVO_send_one_command(unsigned char cmd1)
 759          {
 760              int num1 = 0;
 761              unsigned int cmd;
 762          
 763              for (num1 = 0; num1 < 4; num1++) {
 764          		cmd = cmd1;
 765          		CLEAR_SERVO_CLOCK;
 766          		if (cmd & 0x0001)
 767          		    SET_SERVO_DATA;
 768          		else
 769          		    CLEAR_SERVO_DATA;
 770          		cmd1 >>= 1;
 771          		SERVO_short_delay(2);
 772          		SET_SERVO_CLOCK;
 773          		SERVO_short_delay(2);	
 774          	}
 775          }
 776          
 777          void SERVO_send_one_command1(unsigned char cmd1)
 778          {
 779              int num1 = 0;
 780              unsigned int cmd;
 781              volatile int i;
 782          
 783              for (num1 = 0; num1 < 4; num1++) {
 784          		cmd = cmd1;
 785          		CLEAR_SERVO_CLOCK;
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 14  

 786          		if (cmd & 0x0001)
 787          		    SET_SERVO_DATA;
 788          		else
 789          		    CLEAR_SERVO_DATA;
 790          		cmd1 >>= 1;
 791          		for (i=0; i<3; i++);
 792          		SET_SERVO_CLOCK;
 793          		for (i=0; i<3; i++);
 794             		}
 795          }
 796          
 797          void SERVO_send_command(int num, unsigned int data)
 798          {
 799              int nump;
 800              int interrupt_backup;
 801          
 802              interrupt_backup = enable_interrupt;
 803          	enable_interrupt = 0;
 804              for (nump = 0; nump < num; nump++) {
 805          		SERVO_send_one_command((unsigned char)(data & 0xf));
 806          		data >>= 4;
 807              	}
 808              	
 809              CLEAR_SERVO_XLAT;
 810          	SERVO_short_delay(2);
 811              SET_SERVO_XLAT;
 812          	SERVO_short_delay(2);	
 813          	enable_interrupt = interrupt_backup;
 814          }
 815          
 816          void SERVO_send_command_no_latch(int num, unsigned int data)
 817          {
 818              int nump;
 819              int interrupt_backup;
 820          	interrupt_backup = enable_interrupt;
 821          	enable_interrupt = 0;
 822              for (nump = 0; nump < num; nump++) {
 823          		SERVO_send_one_command((unsigned char)(data & 0xf));
 824          		data >>= 4;
 825              	}
 826          	enable_interrupt = interrupt_backup;
 827          	SERVO_short_delay(2);
 828          }
 829          
 830          void SERVO_send_command_no_latch1(int num, unsigned int data)
 831          {
 832              int nump;
 833              volatile int i;
 834          
 835          	enable_interrupt = 0;
 836              for (nump = 0; nump < num; nump++) {
 837          		SERVO_send_one_command1((unsigned char)(data & 0xf));
 838          		data >>= 4;
 839              	}
 840          	for (i=0; i<5; i++);
 841          	enable_interrupt = 1;
 842          }
 843          
 844          void SERVO_send_8X_command(unsigned char soct, int mode)
 845          {
 846              unsigned int command;
 847          
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 15  

 848              command = 0x81170800;
 849              if (soct)
 850              	command |= (0x20 << 16);
 851              if (mode)
 852          		command |= (0x800 << 16);
 853              SERVO_send_command(8, command);
 854          }
 855          
 856          
 857          
 858          
 859          
 860          
 861          
 862          
 863          /************************************************************************
 864           * SET FILTERS                                                          *
 865           ************************************************************************/
 866          #ifdef USE_SONY_3068  		// sz 8/18
              unsigned int filtertbl[] = {
                  0x340080, 0x340504, 0x341120, 0x34400c,/*b*/
                  0x34436a, 0x34444a/*7*/, 0x344572/*d*/
              };  
              #else
 872          unsigned int filtertbl[] = {
 873              0x340080, 0x340504, 0x341120, 0x34400b,
 874              0x34436a, 0x344447, 0x34457d
 875          };  
 876          #endif
 877          void SERVO_filter_setting(void)
 878          {
 879              int i;
 880          
 881              for (i=0; i<7; i++)
 882          		SERVO_send_command(6, filtertbl[i]);
 883          }
 884          
 885          
 886          
 887          
 888          
 889          
 890          /************************************************************************
 891           * SERVO MUTE COMMANDS                                                  *
 892           ************************************************************************/
 893          void Do_mute()
 894          {
 895              servo_mute_on = 1;
 896              SERVO_send_command(6, 0xA20000);
 897          }

⌨️ 快捷键说明

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