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

📄 sony_servo.lst

📁 索尼CX3068VCD伺服的随身听
💻 LST
📖 第 1 页 / 共 5 页
字号:
 898          
 899          void Undo_mute()
 900          {
 901              servo_mute_on = 0;
 902              SERVO_send_command(6, 0xA00000);
 903          }
 904          
 905          
 906          
 907          
 908          /************************************************************************
 909           * AVERAGING                                                            *
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 16  

 910           ************************************************************************/
 911          void SERVO_avrg_ctl(void)
 912          {
 913              SERVO_send_command(6, 0x380800);
 914              SERVO_delay_n_ms(8);
 915              SERVO_send_command(6, 0x382000);
 916              SERVO_delay_n_ms(8);
 917              SERVO_send_command(6, 0x380010);
 918              SERVO_delay_n_ms(8);
 919              SERVO_send_command(6, 0x388000);
 920              SERVO_delay_n_ms(8);
 921              SERVO_send_command(6, 0x38148a);
 922              SERVO_delay_n_ms(8);
 923              SERVO_send_command(2, F_OFF);
 924              SERVO_delay_n_ms(5);
 925          }
 926          
 927          
 928          
 929          
 930          /*
 931           * Return 1 if FOK is HIGH for most of the 10ms period
 932           * Otherwise return 0
 933           */
 934          int check_focus_ok()
 935          {
 936              int high_count = 0, low_count = 0;
 937          
 938              /* For the next 10 ms, sample FOK and record number of HIGHs and LOWs */
 939          	SERVO_start_timer(10);
 940          	while (SERVO_check_timer()) {
 941          		SERVO_Wait750();
 942          		if (SERVO_FOK_HIGH)
 943          		    high_count++;
 944          		else
 945          		    low_count++;
 946          		SERVO_Idle();  // add for esp seed6
 947             		}
 948          	if ((high_count >> 4) > low_count)
 949          		return(1);
 950          	else {
 951          /*		IoPrint2("BAD check_focus_ok %d %d\n",high_count,low_count); */
 952          		return(0);
 953          		}
 954          }
 955          
 956          
 957          
 958          
 959          /************************************************************************
 960           * SLED IN/OUT                                                          *
 961           ************************************************************************/
 962          /*
 963           * Pulling in SLED head to roughly around the TOC region.
 964           */
 965          extern void Dsa_Idle();
 966          extern void SERVO_close_shutter();
 967          void SERVO_sledin()
 968          {
 969          	int timeout;
 970              IoPrint1("SERVO_sledin %d\n",glbTimer);
 971              servo_pres_m = SLED_10;
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 17  

 972          #ifdef USE_SONY_3068			// sz 8/18
              	SERVO_send_command(2, 0x33);
              #endif
 975              SERVO_send_command(2, TOFF_SREV);		/* sled rev */
 976          	timeout  = glbTimer + T12SECOND;
 977              while (glbTimer < timeout) {
 978          		SERVO_delay_n_ms(2);
 979          		enable_interrupt = 0;
 980          		SERVO_send_command_no_latch(2, 0x30);	/* read SENS for SSTP */
 981          /* --white
 982          #ifdef MALATA_ALL_IN_ONE_BOARD
 983          		if (!SERVO_SENS_HIGH)
 984          #endif
 985          #ifdef LS188_PUBLIC_BOARD_A1
 986          		if (SERVO_SENS_HIGH)
 987          #endif
 988          */
 989          		#ifdef ENABLE_STD_SOL
              			if (!SERVO_SENS_HIGH)
              		#else
 992          			if (SERVO_SENS_HIGH)
 993          		#endif		
 994          			break;
 995          		if ( SERVO_SENS_LOW ) break ;		// sz 8/22
 996              	enable_interrupt = 1;
 997          		SERVO_Idle();
 998              	}
 999             	enable_interrupt = 1;
1000          #ifdef USE_SONY_3068			// sz 8/18
              	SERVO_send_command(2, 0x30);
              #endif
1003              SERVO_TRK_SLD_OFF;
1004              zputs("SLEDIN DONE\n");
1005          #ifdef USE_SONY_3068_WITH_SHUTTER			// sz 8/18
                  SERVO_close_shutter();
              #endif
1008          }
1009          
1010          /*
1011           * subroutine to stop the servo, & move the SLED to the normal position
1012           */
1013          int SERVO_stop(void)
1014          {
1015              int brake_start_time, brake_time;
1016          
1017              IoPrint1("SERVO_stop %d\n",glbTimer);
1018              debugprint("SERVO_stop\n",glbTimer);
1019              Do_mute();
1020          //	SERVO_mode = SERVO_STOP;
1021          	SERVO_mode=SERVO_IDLE;
1022              /* In case we quit during focusing */
1023              SERVO_AUTOSEQ_CANCEL;
1024          
1025              if (servo_focus_on) {
1026              	IoPrint1("SERVO_stop servo_focus_on %d\n",glbTimer);
1027                  debugprint("SERVO_stop servo_focus_on \n",glbTimer);        
1028          		servo_focus_on = 0;
1029          		servo_sys_timer = T2SECOND;
1030          		SERVO_CLV_BRK;
1031          		brake_start_time = glbTimer;
1032          		while (servo_sys_timer) {
1033          		    if (!check_focus_ok()) {
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 18  

1034          				/* All servo off */
1035          				SERVO_all_servo_off();
1036          				SERVO_delay_n_ms(2000);
1037          				goto brake_done;
1038          			    }
1039          			SERVO_send_command_no_latch(2, 0xe0);
1040          		    if (SERVO_SENS_LOW) {
1041          				break;
1042          				}
1043          			SERVO_Idle();		
1044          			}
1045          		/* Set a minimum braking time to brake on bad disc */
1046          		IoPrint1("SERVO_stop end systimer disk %d\n",servo_sys_timer);
1047                          debugprint("SERVO_stop end systimer disk \n",servo_sys_timer);
1048          		if (glbTimer < brake_start_time + T80MS) {
1049          		    while (glbTimer < brake_start_time + T200MS)
1050          		    {
1051          			SERVO_Idle();
1052          		    };
1053          			}
1054          /*		brake_time = (glbTimer - brake_start_time)*10; */
1055          		brake_time = (glbTimer - brake_start_time)*5;	
1056          		SERVO_TRK_SLD_OFF;
1057          		SERVO_FOCUS_OFF;
1058          		SERVO_delay_n_ms(brake_time);
1059          		SERVO_all_servo_off();
1060          		SERVO_delay_n_ms(500);	//chu some more delay.
1061              	} 
1062          	else if (kickfg) {
1063              	IoPrint1("SERVO_stop kickfg %d\n",glbTimer);
1064          		/* All servo off */
1065          		SERVO_all_servo_off();
1066          		SERVO_delay_n_ms(2000);
1067              	}else SERVO_all_servo_off();		// sz 8/29
1068          
1069          brake_done:
1070              IoPrint1("SERVO_stop brake_done %d\n",glbTimer);
1071          #ifdef USE_SONY_3068			// sz 8/18
              	SET_SERVO_LDON;     	/* turn on the laser diode */
              	SET_SERVO_AGC;
              #else
1075              CLEAR_SERVO_LDON;
1076              CLEAR_SERVO_AGC;
1077          #endif
1078          
1079              SERVO_delay_n_ms(20);
1080              mutecmd = 0;
1081          
1082              SERVO_sledin();
1083          
1084              servo_pres_m = STOP_10;
1085              SERVO_mode = SERVO_STOP;
1086              dsa_recv.word=DSR_STOP;
1087              kickfg = 0;
1088              stop_flag=1;
1089              IoPrint1("SERVO_stop %d\n",glbTimer);
1090          
1091          
1092              return (1);
1093          }
1094          
1095          
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 19  

1096          /************************************************************************
1097           * OPEN/CLOSE TRAY
1098           ************************************************************************/
1099          /*
1100           * subroutine to close the tray, even if the tray in any position
1101           */
1102          int SERVO_close()
1103          {
1104              int timeout, tray_closed = 0;
1105              servo_next_m = STOP_M;
1106          
1107              CLEAR_SERVO_FWD;
1108              SET_SERVO_REV;
1109              SERVO_delay_n_ms(150);
1110              timeout = glbTimer + T10SECOND;
1111          
1112              if (SERVO_CLOSE_HIGH) {
1113          		do {
1114          	    	if (SERVO_CLOSE_LOW) {
1115          				tray_closed = 1;
1116          				break;
1117          	    	}
1118          	    	if (glbTimer > timeout)
1119          				break;
1120          			Dsa_Idle();
1121          		} while (!tray_closed);
1122              } 
1123              else
1124          	tray_closed = 1;
1125          
1126              CLEAR_SERVO_REV;
1127          //    SERVO_mode = SERVO_CLOSE;
1128          	SERVO_mode=SERVO_IDLE;  //kzy add 5/23
1129              if (tray_closed) {
1130          	    dsa_recv.word=DSR_TRAYCLOSE;
1131          		return (1);
1132              } else
1133          	return (0);
1134          }
1135          
1136          /*
1137           * Open the tray, need to stop the motor first if it is playing
1138           */
1139          int SERVO_open()
1140          {
1141              unsigned int timeout, flag = 0;
1142          
1143              servo_pres_m = OPEN_10;
1144              CLEAR_SERVO_REV;
1145              SET_SERVO_FWD;
1146              SERVO_delay_n_ms(150);
1147              timeout = glbTimer + T10SECOND;
1148              
1149              if (SERVO_OPEN_HIGH) {
1150          		do {
1151          	    	if (SERVO_OPEN_LOW)
1152          				flag = 1;
1153          	    	if (glbTimer > timeout)
1154          				break;
1155          //			Dsa_Idle();				
1156          		} while (!flag);
1157              } else
C51 COMPILER V6.12  SONY_SERVO                                                             02/22/2002 15:21:29 PAGE 20  

1158          	flag = 1;	
1159          
1160              CLEAR_SERVO_FWD;
1161          
1162              if (flag) {
1163          //		SERVO_mode = SERVO_OPEN;
1164          		SERVO_mode=SERVO_TRAY;
1165          		dsa_recv.word=DSR_TRAYOPEN;//kzy add
1166          		open_delay = glbTimer;
1167          		return (1);
1168              }
1169              return (0);
1170          }
1171          
1172          
1173          
1174          
1175          
1176          void SERVO_all_servo_off(void)
1177          {
1178              zputs("SERVO_all_servo_off\n");
1179              /* All servo off */
1180              SERVO_TRK_SLD_OFF;
1181              SERVO_FOCUS_OFF;
1182              SERVO_CLV_STOP;
1183          
1184              return;
1185          }
1186          
1187          /************************************************************************
1188           * FOCUS STUFF                                                          *
1189           ************************************************************************/
1190          
1191          /*
1192           * Step 1 for turning on the focus and getting the disk spinning
1193           * with CLV (Constant Linear Velocity) 
1194           */
1195          extern void SERVO_open_shutter(void);
1196          void SERVO_focus()
1197          {
1198              zputs("SERVO_focus\n");
1199             
1200          	focus_flag = 1;
1201          #ifdef USE_SONY_3068_WITH_SHUTTER			// sz 8/18
              	if(shutter_flag) SERVO_open_shutter(); 
              #endif

⌨️ 快捷键说明

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