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

📄 read_reg.lst

📁 ubi9021的51驱动程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 952   2      		case USB_SETUP_SET_CFG:
 953   2      			buf[1]=0x09,buf[2]=arg;
 954   2      			break;
 955   2      		case USB_SETUP_SET_PORT_PWR:
 956   2      		case USB_SETUP_PORT_RST:
 957   2      			buf[0]=0x23,buf[1]=0x03,buf[4]=0x01;
 958   2      			buf[2]=(type==USB_SETUP_SET_PORT_PWR)?0x08:0x04;
 959   2      			break;
 960   2      		case USB_SETUP_CLR_PORT_RST:
 961   2      			buf[0]=0x23,buf[1]=0x01,buf[2]=0x14,buf[4]=0x01;
 962   2      			break;
 963   2      		case USB_SETUP_GET_PORT_STS:
 964   2      			buf[0]=0xA3,buf[4]=0x01,buf[6]=0x04;
 965   2      			break;
 966   2      		case USB_SETUP_GET_MAX_LUN:
 967   2      			buf[0]=0xA1,buf[1]=0xFE,buf[6]=0x01;
 968   2      			break;
 969   2      		default: return RES_ERR;
 970   2      	}
 971   1      
 972   1      
 973   1          UH_SET_FIFO_SZ_EACH(0,8);
 974   1      	UH_FIFO_ROLLBACK_OUT();
 975   1      	DEV_WriteRegMulti(RH_USB_HOST_BASE_ADDR,8,buf);
 976   1      	UH_IRQ_EN(UH_IRQ_USB_PKT_DONE);
 977   1          UH_Trigger(0xd0); ///PID=SETUP(OUT)
 978   1      	if(DEV_WaitForIrq(UH_IRQ_USB_PKT_DONE)==0) {return RES_ERR;}
 979   1      	DEV_WaitMS(50);
 980   1      
 981   1      
 982   1      	UH_FIFO_ROLLBACK_IN();
 983   1      	dataByteCnt = (USB_SETUP_GET_DEV_DESC_INIT==type)?8:buf[6];
 984   1      	if(dataByteCnt==0)
 985   1      	{
C51 COMPILER V6.12  READ_REG                                                               03/13/2007 09:54:33 PAGE 17  

 986   2      		DEV_WriteReg(RH_USB_HOST_BASE_LEN,0);
 987   2      		UH_SET_FIFO_SZ_EACH(0,0);
 988   2      		UH_IRQ_EN(UH_IRQ_USB_PKT_DONE);
 989   2      		UH_Trigger(0x90); ///PID=DATA1(IN)
 990   2      		res = DEV_WaitForIrq(UH_IRQ_USB_PKT_DONE);
 991   2      		if((0==res)||(UH_IRQ_FAKE_STALL==res)) {return RES_ERR;}
 992   2      	}
 993   1      	else//DATA-IN
 994   1      	{
 995   2      		U8 volatile subCnt = gMxPkSzCtr;
 996   2      		DEV_WriteReg(RH_USB_HOST_BASE_LEN,gMxPkSzCtr);
 997   2      		DEV_WriteReg(RH_FIFO_SZ_HI,0);
 998   2      
 999   2      		while(dataByteCnt>0)
1000   2      		{
1001   3      			if(dataByteCnt<gMxPkSzCtr) subCnt = dataByteCnt;
1002   3      
1003   3      			res = DEV_SafeTriggerAndWaitForInPacket(0x90,subCnt,2000);
1004   3      			if(res==0) {return RES_ERR;}
1005   3      			if(res==UH_IRQ_FAKE_STALL) {return RES_ERR;}
1006   3      			DEV_ReadRegMulti(RH_USB_HOST_BASE_ADDR,subCnt,buf);
1007   3      			if(0xEC==buf[8]&&0x0A==buf[9]&&USB_SETUP_GET_DEV_DESC==type) break;	//Active memory-stick reader
1008   3      			dataByteCnt -= subCnt;
1009   3      			buf += subCnt;
1010   3      		}
1011   2      		//UH_FIFO_ROLLBACK();
1012   2      
1013   2      		//printf("hand shake###########################\n");
1014   2      		// Hand Shake transaction
1015   2      		DEV_WaitMS(1);
1016   2      
1017   2      		UH_FIFO_ROLLBACK_OUT();
1018   2      		UH_SET_FIFO_SZ_EACH(0,0);
1019   2      		UH_IRQ_EN(UH_IRQ_USB_PKT_DONE);	//WALTZ俊辑 UH_IRQ_SOF尔 UH_IRQ_WRITE_READY绰 哆绰单
1020   2      										//UH_IRQ_USB_PKT_DONE捞 救 哆绰 版快啊 乐菌澜.
1021   2      		UH_Trigger(0x10);				///PID=OUT
1022   2      		res = DEV_WaitForIrq(UH_IRQ_USB_PKT_DONE|UH_IRQ_WRITE_READY);
1023   2      		if((0==res)||(UH_IRQ_FAKE_STALL==res)) {return RES_ERR;}
1024   2      	}
1025   1      
1026   1      	DEV_WriteReg(RH_USB_HOST_BASE_LEN,gMxPkSz);//not "gMxPkSzCtr"
1027   1      	enable_debug=0;
1028   1      	return RES_OK;
1029   1      
1030   1      }
1031          
1032          
1033          
1034          
1035          /******************************************************************************
1036           *	Chip reset + Mass Storage Device Enumeration + Identify LUNs
1037           *	Only Support "BulkOnly Mass Storage"
1038           *
1039           *	RETURN:
1040           *		RES_OK
1041           *		RES_ERR  : unknown error
1042           *		RES_ERR+1: Device Type Error: Unknown Device
1043           *		RES_ERR+2: Device Type Error: CBI type mass storage
1044           *		RES_ERR+3: Device Type Error: PTP
1045           ******************************************************************************/
1046          
1047          U8	UM_InitMassStorDevice(OUT U8* buf)
C51 COMPILER V6.12  READ_REG                                                               03/13/2007 09:54:33 PAGE 18  

1048          {
1049   1      	U8 res,i;
1050   1      	gEPOUT   = 0x10;
1051   1      	gDevAddr = 0;
1052   1      	gEP      = 0xFF;
1053   1      
1054   1      	//EPRINTF(("\nUM_InitMassStorDevice\n"));
1055   1          if(ISERR(DEV_ResetChip(RST9021_FULL_RESET))) return RES_ERR;
1056   1      	for(i=0;i<2;i++) RISC_sleep_cycles(100000); //total 162msec
1057   1      
1058   1      	if(ISERR(DEV_ResetUsbDevice(200))) return RES_ERR; //reset flash key (12msec) + idle(60msec:PC=30)
1059   1      	UH_FIFO_DIR_OUT();
1060   1      	DEV_WriteReg(RH_DEV_ADDR,gDevAddr=0);
1061   1      	DEV_WriteReg(RH_MASS_ADDR2,0x5A); //mark for validity of the device address
1062   1      	gMxPkSz=gMxPkSzCtr=64;
1063   1      	DEV_WriteReg(RH_USB_HOST_BASE_LEN,gMxPkSzCtr);
1064   1      	UH_SET_FIFO_SZ_EACH(0,8);
1065   1      	if(ISERR(USB_ControlTransfer(USB_SETUP_GET_DEV_DESC_INIT,0x40,buf))) {return RES_ERR;}
1066   1      		if(ISERR(DEV_ResetUsbDevice(100))) return RES_ERR;	//reset flash key (12msec) + idle(30msec:PC=20)
1067   1      
1068   1          gMxPkSzCtr = buf[7];	//maximum packet size for control pipe
1069   1      	DEV_WriteReg(RH_USB_HOST_BASE_LEN,gMxPkSzCtr);
1070   1      
1071   1      
1072   1      	if(buf[4]==0x09)//if HUB device exists..
1073   1      	{
1074   2      		////////////////////////////////////
1075   2      		///HUB CONFIGURATION : Address=4
1076   2      		////////////////////////////////////
1077   2      
1078   2      		DEV_WriteReg(RH_DEV_ADDR,gDevAddr=0);
1079   2      		if(ISERR(USB_ControlTransfer(USB_SETUP_SET_ADDR,UMO_DEFAULT_HUB_ADDRESS,buf))) return RES_ERR;
1080   2      		DEV_WriteReg(RH_DEV_ADDR,gDevAddr=UMO_DEFAULT_HUB_ADDRESS);
1081   2      
1082   2      		if(ISERR(USB_ControlTransfer(USB_SETUP_GET_DEV_DESC,0x12,buf))) return RES_ERR;
1083   2      
1084   2      		//GET CONFIG-DESCRIPTOR:0xffbyte
1085   2      		if(ISERR(USB_ControlTransfer(USB_SETUP_GET_CFG_DESC,0x09,buf))) return RES_ERR;
1086   2      		if(buf[2]>0x09){
1087   3      			if(ISERR(USB_ControlTransfer(USB_SETUP_GET_CFG_DESC,buf[2],buf))) return RES_ERR;
1088   3      		}
1089   2      
1090   2      		//GET HUB-DESCRIPTOR:9byte
1091   2      		/*BUILD_USB_REQUEST(gCBW,0xA0,0x06,0x00,0x00,0x00,0x00,0x47,0x00);//0x47???
1092   2      		if(ISERR(USB_ControlTransfer((U8*)gCBW,9,buf))) return RES_ERR;
1093   2      		*/
1094   2      
1095   2      		if(ISERR(USB_ControlTransfer(USB_SETUP_SET_CFG,buf[5],buf))) return RES_ERR;
1096   2      
1097   2      
1098   2      		///////////////////////////
1099   2      		///	PORT-1 CONFIGURATOIN
1100   2      		///////////////////////////
1101   2      
1102   2      		if(ISERR(USB_ControlTransfer(USB_SETUP_SET_PORT_PWR,0,buf))) return RES_ERR;
1103   2      
1104   2      		//CLEAR-PORT1-CONNECTION:
1105   2      		//BUILD_USB_REQUEST(gCBW,0x23,0x01,0x10,0x00,0x01,0x00,0x00,0x00);
1106   2      		//if(ISERR(USB_ControlTransfer((U8*)gCBW,0,buf))) return RES_ERR;
1107   2      
1108   2      		if(ISERR(USB_ControlTransfer(USB_SETUP_PORT_RST,0,buf))) return RES_ERR;
1109   2      		DEV_WaitMS(5);//TODO:盔贰绰 牢磐反飘IN阑 扁促妨具...
C51 COMPILER V6.12  READ_REG                                                               03/13/2007 09:54:33 PAGE 19  

1110   2      
1111   2      		if(ISERR(USB_ControlTransfer(USB_SETUP_GET_PORT_STS,0,buf))) return RES_ERR;
1112   2      
1113   2      		if(ISERR(USB_ControlTransfer(USB_SETUP_CLR_PORT_RST,0,buf))) return RES_ERR; //咯扁辑 粱 坷贰吧覆.
1114   2      		DEV_WaitMS(55); //SOF 55俺 沥档..
1115   2      	}
1116   1      
1117   1      	/////////////////////////////////////////////////////
1118   1      	//       M A N U A L    E N U M E R A T I O N
1119   1      	/////////////////////////////////////////////////////
1120   1      
1121   1      	DEV_WriteReg(RH_DEV_ADDR,gDevAddr=0);
1122   1      	if(ISERR(USB_ControlTransfer(USB_SETUP_SET_ADDR,UMO_DEFAULT_DEV_ADDRESS,buf))) return RES_ERR;
1123   1      	//printf("control5 control5 control5 control5 control5.\n");
1124   1      	DEV_WriteReg(RH_DEV_ADDR,gDevAddr=UMO_DEFAULT_DEV_ADDRESS);
1125   1      	
1126   1      	if(ISERR(USB_ControlTransfer(USB_SETUP_GET_DEV_DESC,0x12,buf))) return RES_ERR;
1127   1      	//printf("control4 control4 control4 control4 control4.\n");
1128   1      	//{
1129   1      	//	int i;
1130   1      	//	printf("get12\n");
1131   1      	//	for(i=0;i<buf[0];i++)
1132   1      	//	{
1133   1      	//		printf("%02x ",buf[i]);
1134   1      	//	}
1135   1      	//	printf(" \n");
1136   1      	//}
1137   1      
1138   1      
1139   1      	gUsbVer = (buf[3]==1)?USB_VER_1X:((buf[3]==2)?USB_VER_2X:USB_VER_UNKNOWN);
1140   1      	gVID=(U16)buf[9],gVID=(gVID<<8)+(U16)buf[8];
1141   1      	gPID=(U16)buf[11],gPID=(gPID<<8)+(U16)buf[10];
1142   1      	if(buf[4]!=0) return RES_ERR;//check if CLASS is defined in Interface-Descriptor
1143   1      
1144   1      	//GET CONFIG-DESCRIPTOR:0xffbyte
1145   1      	if(ISERR(USB_ControlTransfer(USB_SETUP_GET_CFG_DESC,0x09,buf))) return RES_ERR;
1146   1      	//printf("control3 control3 control3 control3 control3.\n");
1147   1      	//{
1148   1      	//	int i;
1149   1      	//	printf("get9\n");
1150   1      	//	for(i=0;i<buf[0];i++)
1151   1      	//	{
1152   1      	//		printf("%02x ",buf[i]);
1153   1      	//	}
1154   1      	//	printf(" \n");
1155   1      	//}
1156   1      	if(buf[2]>0x09){
1157   2      		if(ISERR(USB_ControlTransfer(USB_SETUP_GET_CFG_DESC,buf[2],buf))) return RES_ERR;
1158   2      		//printf("control2 control2 control2 control2 control2.\n");
1159   2      		//{
1160   2      		//int i;
1161   2      		//printf("get buf[2]\n");
1162   2      		//for(i=0;i<buf[0];i++)
1163   2      		//{
1164   2      		//	printf("%02x ",buf[i]);
1165   2      		//}
1166   2      		//printf(" \n");
1167   2      	//}
1168   2      	}
1169   1      	res = ParseConfigDesc((U8)buf[2],buf);
1170   1      	if(ISERR(res)) return res;
1171   1      
C51 COMPILER V6.12  READ_REG                                                               03/13/2007 09:54:33 PAGE 20  

1172   1      	DEV_WaitMS(5);
1173   1      	if(ISERR(USB_ControlTransfer(USB_SETUP_SET_CFG,gUsbCfg,buf))) return RES_ERR;
1174   1      	//printf("control1 control1 control1 control1 control1.\n");
1175   1      
1176   1      	/// Enumeration OK!
1177   1      
1178   1      	gLun    = 0;
1179   1      	gMaxLun = 0;
1180   1      
1181   1      	///initialize SCSI-CBW tag
1182   1      	gCBW[0]=0x55,gCBW[1]=0x53,gCBW[2]=0x42,gCBW[3]=0x43;
1183   1      	gCBW[4]=0x39,gCBW[5]=0x30,gCBW[6]=0x32,gCBW[7]=0x31;
1184   1      
1185   1      
1186   1      	gInitState = IS_ENUM_OK;
1187   1      	//printf("********************************************\n");
1188   1      //	printf("********************************************\n");
1189   1          return RES_OK;
1190   1      }
1191          
1192          
1193          
1194          int USB_identify_device()
1195          {
1196   1      	//U8 devAddr,res;
1197   1      	int i;
1198   1      	int ret_code = -1;
1199   1          unsigned char buf[64];
1200   1          ubi9021_hardreset();
1201   1          DEV_WaitMS(6000);
1202   1          gWaitUsbPktMsec = 4000; //4sec
1203   1      	gSecAddr=-1;
1204   1      	gSecCnt=0;
1205   1      
1206   1      
1207   1          if(DEV_ReadReg(RH_DEV_ADDR)==UMO_INIT_FAIL_DEV_ADDRESS && DEV_ReadReg(RH_MASS_ADDR2)==UMO_DEVICE_INIT_
             -OK) return 0;
1208   1      
1209   1          for(i=0;i<100;i++)
1210   1          {
1211   2      	DEV_ResetChip(RST9021_FULL_RESET);
1212   2      	ret_code =  UM_InitMassStorDevice((U8*)buf);
1213   2      	if(ISERR(ret_code)){
1214   3      		if(DEV_ReadReg(RH_LAST_PKT_STS)==0){ //no response from device
1215   4      				DEV_WaitMS(1000); //100msec
1216   4      		}
1217   3      		continue;
1218   3      	}
1219   2      
1220   2      	ret_code =  UM_InitMultiLun((U8*)buf);
1221   2      	if(ISERR(ret_code)) continue;
1222   2        	   break;
1223   2         }
1224   1      
1225   1         if (ISERR(ret_code))
1226   1         {
1227   2      		DEV_WriteReg(RH_DEV_ADDR,UMO_INIT_FAIL_DEV_ADDRESS);
1228   2      		DEV_WriteReg(RH_MASS_ADDR2,UMO_DEVICE_INIT_OK);
1229   2      		DEV_WriteReg(RH_CHIP_CTR2,0); //kill SOF
1230   2      		return 0 ;
1231   2         }
1232   1      
C51 COMPILER V6.12  READ_REG                                                               03/13/2007 09:54:33 PAGE 21  

1233   1      
1234   1         gWaitUsbPktMsec = 1000; //1msec
1235   1         return 1;
1236   1      }
1237          
1238          
1239          
1240          
1241          
1242          
1243          void main()
1244          {
1245   1             IO_IRQ_READY;
1246   1             IO_PLUGIN_READY;
1247   1             USB_identify_device();
1248   1      	   USB_boot_setup();
1249   1             //USB_read_sector_lba();
1250   1             while(1);
1251   1      
1252   1      }
1253          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   4441    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     15    ----
   PDATA SIZE       =     16     127
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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