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

📄 usbdebug.c

📁 基于USB2.0芯片 ISP1581 的扫描仪固件源码,USB驱动模块
💻 C
📖 第 1 页 / 共 5 页
字号:
                                                      //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;

		                                             }
		                                             else
		                                             {
   			                                          USB_Device_Request.wLength -= count; //send Endpoint descriptor

			                                             Temp += count;

			                                             while(count != 0)
			                                             {
				                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				                                             count--;
				                                             Descriptor_Ptr++;
			                                             }


			                                             Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to Bulk In endpoint descriptor

			                                             count = *Descriptor_Ptr;	//read in descriptor length

			                                             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 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;

			                                             }
			                                             else
			                                             {
   				                                          USB_Device_Request.wLength -= count; //send Endpoint descriptor

				                                             Temp += count;

				                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
				                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);

				                                             while(count != 0)
				                                             {
					                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
					                                             count--;
					                                             Descriptor_Ptr++;

				                                             }


                                                         //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  6        :  
	                                             Descriptor_Ptr = &HS_Device_Qualifier[0];		//set pointer to High Speed device descriptor

	                                             count = *Descriptor_Ptr;							//read in descriptor length

	
	                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;

                                                if(USB_Device_Request.wLength < count)
                                                {
   	                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
	                                                D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
                                                   count = USB_Device_Request.wLength;
                                                }
                                                else
                                                {
   	                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
	                                                D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
                                                }
   

	                                             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  7  :  

	                                             Temp = 64;

 	                                             Descriptor_Ptr = &Other_Speed_Config_Descriptor[0];	//set pointer to configuration descriptor

	                                             count = *Descriptor_Ptr;							//get configuration Descriptor length

	                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;

	                                             if(count >= USB_Device_Request.wLength)				//Send only Configuration descriptor
	                                             {
		                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
		                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
			
		                                             for(count = 0 ; count < USB_Device_Request.wLength ; count++)
		                                             {
			                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
			                                             Descriptor_Ptr++;
		                                             }

         	                                       //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;

	                                             }
	                                             else //send Configuration,Interface and Endpoint descriptor
	                                             {

		                                             if(USB_Device_Request.wLength >= 32)
		                                             {

			                                             while(count != 0)
			                                             {
				                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				                                             count--;
				                                             Descriptor_Ptr++;
				                                          
                                                      }

				                                          Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor

			                                             count = *Descriptor_Ptr;	//get the descriptor count

			                                             while(count != 0)
			                                             {
				                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				                                             count--;
				                                             Descriptor_Ptr++;
				                                          

⌨️ 快捷键说明

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