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

📄 usbdebug.c

📁 基于USB2.0芯片 ISP1581 的扫描仪固件源码,USB驱动模块
💻 C
📖 第 1 页 / 共 5 页
字号:
			                                             {
				                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				                                             count--;
				                                             Descriptor_Ptr++;
				                                          
                                                      }
		                                             }				

	                                                D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1;	//validate FIFO

       	                                          //check for status stage
                                                   while(!USB_Int_Flag.BITS.EP0TX)
                                                   {
                                                      if(USB_Int_Flag.BITS.SUSP ||
                                                         USB_Int_Flag.BITS.RESET)
                                                         return;
                                                   }
                                                   
                                                   USB_Int_Flag.BITS.EP0TX = 0;

	                                                D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
	                                                D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;

                                                   
                                                   //end of status stage
                                                   while(!USB_Int_Flag.BITS.EP0RX)
                                                   {
                                                      if(USB_Int_Flag.BITS.SUSP ||
                                                         USB_Int_Flag.BITS.RESET)
                                                         return;
                                                   }
                                                   
                                                   USB_Int_Flag.BITS.EP0RX = 0;

	                                             }
	
                                                break;
                              

                              case  3        :  
	                                             Descriptor_Ptr = &Standard_String_ID[0];		//set pointer to interface descriptor

	                                             count = *Descriptor_Ptr;		//get length


	                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;

	                                             if(USB_Device_Request.wLength < count)
		                                             count = USB_Device_Request.wLength;			//get the remaining length


	                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
	                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
		

	                                             //send string ID
                                                while(count != 0)
	                                             {
		                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                             Descriptor_Ptr++;
		                                             count--;
	                                             }


                                                //check for status stage
                                                while(!USB_Int_Flag.BITS.EP0TX)
                                                {
                                                   if(USB_Int_Flag.BITS.SUSP ||
                                                      USB_Int_Flag.BITS.RESET)
                                                      return;
                                                }
                                                
                                                USB_Int_Flag.BITS.EP0TX = 0;

	                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
	                                             D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                                
                                                //end of status stage
                                                while(!USB_Int_Flag.BITS.EP0RX)
                                                {
                                                   if(USB_Int_Flag.BITS.SUSP ||
                                                      USB_Int_Flag.BITS.RESET)
                                                      return;
                                                }
                                                
                                                USB_Int_Flag.BITS.EP0RX = 0;

                                                break;

                              case  0x0103   :
	                                             Descriptor_Ptr = &Standard_Manufacturer_String[0];		//set pointer to interface descriptor

	                                             count = *Descriptor_Ptr;		//get length

   	                                          D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;

	                                             if(USB_Device_Request.wLength < count)
		                                             count = USB_Device_Request.wLength;			//get the remaining length

	                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) count;
	                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
	

	                                             //send manufacturer string
                                                while(count != 0)
	                                             {
		                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                             Descriptor_Ptr++;
		                                             count--;
	                                             }

                                                //Check for IN Token ACK
                                                while(!USB_Int_Flag.BITS.EP0TX)
                                                {
                                                   if(USB_Int_Flag.BITS.SUSP ||
                                                      USB_Int_Flag.BITS.RESET)
                                                      return;
                                                }
                                                
                                                USB_Int_Flag.BITS.EP0TX = 0;

	                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
	                                             D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                                
                                                //end of status stage
                                                while(!USB_Int_Flag.BITS.EP0RX)
                                                {
                                                   if(USB_Int_Flag.BITS.SUSP ||
                                                      USB_Int_Flag.BITS.RESET)
                                                      return;
                                                }
                                                
                                                USB_Int_Flag.BITS.EP0RX = 0;

                                                break;
                                                
                              case  0x0203   :
	                                             Descriptor_Ptr = &Standard_Product_String[0];		//set pointer to interface descriptor

	                                             count = *Descriptor_Ptr;		//get length

	                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;

	                                             if(USB_Device_Request.wLength < count)
		                                             count = USB_Device_Request.wLength;			//get the remaining length


	                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) count;
	                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
	
                                                //send product string
	                                             while(count != 0)
	                                             {
		                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                             Descriptor_Ptr++;
		                                             count--;
	                                             }

                                                //check for status stage
                                                while(!USB_Int_Flag.BITS.EP0TX)
                                                {
                                                   if(USB_Int_Flag.BITS.SUSP ||
                                                      USB_Int_Flag.BITS.RESET)
                                                      return;
                                                }
                                                
                                                USB_Int_Flag.BITS.EP0TX = 0;

	                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
	                                             D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                                
                                                //end of status stage
                                                while(!USB_Int_Flag.BITS.EP0RX)
                                                {
                                                   if(USB_Int_Flag.BITS.SUSP ||
                                                      USB_Int_Flag.BITS.RESET)
                                                      return;
                                                }
                                                
                                                USB_Int_Flag.BITS.EP0RX = 0;

                                                break;

                              case  4        :  
					               				      fn_Not_Implemented();
                                                break;

                              case  5        :  
	                                             Temp = 0;

	                                             if((USB_Device_Request.wValue & 0x00ff) > 0x0001)
                                                {
		                                             D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
                                                   
                                                   while(!USB_Int_Flag.BITS.EP0SETUP)
                                                   {
                                                      if(USB_Int_Flag.BITS.SUSP ||
                                                         USB_Int_Flag.BITS.RESET)
                                                         return;
                  
                                                   }
      
                                                   USB_Int_Flag.BITS.EP0TX = 0;
	                                             }
                                                else
	                                             {
		                                             Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to Bulk Out endpoint descriptor

		                                             count = *Descriptor_Ptr;	//read in descriptor length

		                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;

		                                             if(count >= USB_Device_Request.wLength)
		                                             {

			                                             Temp = USB_Device_Request.wLength;

			                                             //send endpoint descriptor
		
			                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
			                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);


			                                             for(count = 0 ; count < USB_Device_Request.wLength ; count++)
			                                             {
				                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				                                             Descriptor_Ptr++;
			                                             }

                                                      //check for status
                                                      while(!USB_Int_Flag.BITS.EP0TX)
                                                      {
                                                         if(USB_Int_Flag.BITS.SUSP ||
                                                            USB_Int_Flag.BITS.RESET)
                                                            return;
                                                      }
                                                      
                                                      USB_Int_Flag.BITS.EP0TX = 0;

			                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
			                                             D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                                      

⌨️ 快捷键说明

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