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

📄 usb_setup.lst

📁 源码 : KIEL C 单片机 : C8051F320 功能 : U盘 (64M) 关键字 : C8051F320,U盘,NANDFLASH,FAT,SCH 描述 : 源码完全可运行
💻 LST
📖 第 1 页 / 共 2 页
字号:

 179   1          { 
 180   2               Force_Stall();                         
 181   2          }
 182   1         if (Ep_Status[0] != EP_STALL)
 183   1         {
 184   2         		UWrite_Byte(E0CSR, rbSOPRDY);
 185   2      		UWrite_Byte(E0CSR, rbDATAEND);                       
 186   2         }
 187   1      }
 188          void Set_Feature()
 189          {
 190   1      	if ((Setup.bmRequestType  & 0x02) && 		// 意义同上
 191   1              (Setup.wValue[0] == ENDPOINT_HALT) &&  
 192   1             ((Setup.wIndex[0] == IN_EP1)      || 
 193   1              (Setup.wIndex[0] == OUT_EP2)))
 194   1      	{
 195   2               if (Setup.wIndex[0] == IN_EP1) 
 196   2               {
 197   3                  UWrite_Byte (INDEX, 1);         	  
 198   3                  UWrite_Byte (EINCSRL, rbInSDSTL);   // rbInSDSTL=1,发送STALL作为对IN令牌的响应,
 199   3      												// 在端点1中断处理函数中将rbInSDSTl和rbInSTSTL清零    
 200   3                  Ep_Status[1] = EP_HALT;             // 端点1到HALT状态                     
 201   3               }
 202   2               else
 203   2               {
 204   3                  UWrite_Byte(INDEX, 2);         		
 205   3                  UWrite_Byte (EOUTCSRL, rbOutSDSTL); // 同上       
 206   3                  Ep_Status[2] = EP_HALT;  		    
 207   3               }
 208   2      	}
 209   1      	else
 210   1          { 
 211   2      		Force_Stall();                         	
 212   2          }  
 213   1         if (Ep_Status[0] != EP_STALL)
 214   1         {
 215   2         		UWrite_Byte(E0CSR, rbSOPRDY);
 216   2      		UWrite_Byte(E0CSR, rbDATAEND);                       
 217   2         }
 218   1      }
 219          void Set_Address()
 220          {
 221   1         	if (Setup.wValue[0] != 0) 
 222   1         	{
 223   2            	USB_State = DEV_ADDRESS;            // 收到不为0的地址,设备处于地址状态,此次传输的
 224   2            	UWrite_Byte(FADDR, Setup.wValue[0]);// 状态阶段结束后新地址将起作用
 225   2            	Ep_Status[0] = EP_IDLE;
 226   2      
 227   2         	}
 228   1         	else 
 229   1         	{
 230   2           	USB_State = DEV_DEFAULT;            // 收到的地址为0,设备仍旧处于默认状态
 231   2         	}
 232   1         	UWrite_Byte(E0CSR, rbSOPRDY);
 233   1      	UWrite_Byte(E0CSR, rbDATAEND);                       
 234   1                                                    
 235   1      }
 236          void Get_Descriptor()
 237          {
 238   1      	unsigned int In_DataSize=0;			// 要发送的数据总量
 239   1      	In_DataSize=Setup.wLength[0]+Setup.wLength[1]*256;
 240   1      	switch(Setup.wValue[1])             // 判断描述符的类型
C51 COMPILER V6.12  USB_SETUP                                                              08/20/2006 19:41:25 PAGE 5   

 241   1          {                                            
 242   2      		case DSC_DEVICE:         		// 设备描述符  
 243   2      	       	DataPtr  = DeviceDesc;
 244   2      			if(In_DataSize>18)
 245   2      			{DataSize = 18;	}       
 246   2      			else
 247   2      			{DataSize = In_DataSize;}
 248   2              break;      
 249   2      		case DSC_CONFIG:				// 配置描述符
 250   2              	DataPtr  = ConfigDesc;
 251   2      			if(In_DataSize==0x09)
 252   2      			{
 253   3      			 	DataSize=0x09;
 254   3      			}
 255   2      			else if(In_DataSize==0x20)
 256   2      			{
 257   3      			 	DataSize=0x20;
 258   3      			}
 259   2      			else if(In_DataSize==0xff)
 260   2      			{
 261   3      			 	DataSize=0x20;
 262   3      			}
 263   2              break;
 264   2      		case DSC_STRING:				// 字符串描述符
 265   2      			 DataPtr=&StringDes[Setup.wValue[0]];
 266   2      			 DataSize=In_DataSize;
 267   2      			 break;
 268   2      		default:	         break;
 269   2         	}
 270   1      	UWrite_Byte(E0CSR, rbSOPRDY);
 271   1          Ep_Status[0] = EP_TX;                      // 端点0在发送状态
 272   1          DataSent = 0;                              
 273   1      }
 274          void Get_Configuration()
 275          {
 276   1         if (USB_State == DEV_CONFIGURED)   // If the device is configured, then return value 0x01
 277   1         {                                  // since this software only supports one configuration
 278   2               DataPtr  = ONES_PACKET;
 279   2               DataSize = 1;
 280   2         }
 281   1         if (USB_State == DEV_ADDRESS)      // If the device is in address state, it is not
 282   1         {                                  // configured, so return 0x00
 283   2               DataPtr  = ZERO_PACKET;
 284   2               DataSize = 1;
 285   2         }
 286   1         if (Ep_Status[0] != EP_STALL)
 287   1         {
 288   2         		UWrite_Byte(E0CSR, rbSOPRDY);
 289   2              Ep_Status[0] = EP_TX;                 
 290   2              DataSent = 0;                         
 291   2         }
 292   1      }
 293          void Set_Configuration()
 294          {
 295   1         if (Setup.wValue[0] > 0)                  // Any positive configuration request
 296   1         {                                         // results in configuration being set to 1
 297   2               USB_State = DEV_CONFIGURED;
 298   2      		 ///////////////////////////////////////////////////////////////////////////////////
 299   2               UWrite_Byte(INDEX, 1);     
 300   2               UWrite_Byte(EINCSRH,0xa0); // 双缓冲、ISO、FIFO分割和强制数据Toggle禁止,IN端点
 301   2      		 Ep_Status[1]=EP_IDLE;
 302   2      		  
C51 COMPILER V6.12  USB_SETUP                                                              08/20/2006 19:41:25 PAGE 6   

 303   2               UWrite_Byte(INDEX, 2);            
 304   2               UWrite_Byte(EOUTCSRH, 0x80);      // 双缓冲和ISO禁止,OUT端点
 305   2      		 Ep_Status[2]=EP_IDLE; 
 306   2      		 ///////////////////////////////////////////////////////////////////////////////////
 307   2               UWrite_Byte(INDEX, 0);           
 308   2         }
 309   1         else
 310   1         {
 311   2               USB_State = DEV_ADDRESS;         // 设备仍旧在地址状态
 312   2      		 Ep_Status[1]=EP_STALL;
 313   2      		 Ep_Status[2]=EP_STALL;
 314   2         }
 315   1         if (Ep_Status[0] != EP_STALL)
 316   1         {
 317   2         		UWrite_Byte(E0CSR, rbSOPRDY);
 318   2      		UWrite_Byte(E0CSR, rbDATAEND);                
 319   2         }
 320   1      }
 321          void Get_Interface()
 322          {
 323   1      	DataPtr = ZERO_PACKET;            
 324   1      	DataSize = 1;
 325   1          if (Ep_Status[0] != EP_STALL)
 326   1          { 
 327   2         		UWrite_Byte(E0CSR, rbSOPRDY);                  
 328   2              Ep_Status[0] = EP_TX;          
 329   2              DataSent = 0;
 330   2          }
 331   1      }
 332          void Set_Interface()
 333          {
 334   1         	UWrite_Byte(E0CSR, rbSOPRDY);
 335   1      	UWrite_Byte(E0CSR, rbDATAEND);             
 336   1      }
 337          
 338          void Get_Maxlun()			// U盘支持一个逻辑单元,返回1即可
 339          {
 340   1      	DataPtr = ZERO_PACKET;            
 341   1      	DataSize = 1;
 342   1          if (Ep_Status[0] != EP_STALL)
 343   1          {                       
 344   2              Ep_Status[0] = EP_TX;           
 345   2              DataSent = 0;
 346   2          }
 347   1         	UWrite_Byte(E0CSR, rbSOPRDY);
 348   1      }
 349          ////////////////////////////////////////////////////////////////////////////////////////////////////
 350          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1234    ----
   CONSTANT SIZE    =    115    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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