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

📄 usb.c

📁 ISP1583 Mass Storgae Firmware
💻 C
📖 第 1 页 / 共 5 页
字号:
   
      case  USB_Default    :  
      default              :
                              break;
    
      case  USB_Addressed  :
		         	            if(USB_Device_Request.wValue == 0)
                              {
                     			   Device_Config_Value = 0;
                                                      
                                 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
									      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;

                                 break;
                              
                              }
                                   
                              if(USB_Device_Request.wValue == 0x0100 ||
                                 USB_Device_Request.wValue == 0x0200)
                              {
                                 Device_Config_Value = (UC) (USB_Device_Request.wValue >> 8);

               						USB_Device.BITS.State = USB_Configured;
                                                      
                                 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
									      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                 break;
                                    
                              } 

                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
		                        D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
                                                      
                              while(!USB_Int_Flag.BITS.EP0SETUP)
                              {
                                 if(USB_Int_Flag.BITS.SUSP ||
                                    Kernel_Flag.BITS.Bus_Reset)
                                    return;
            
                              }
      
                              USB_Int_Flag.BITS.EP0TX = 0;
                                                      
                              break;
                              
      case  USB_Configured :
			                     if(USB_Device_Request.wValue == 0)
                              {
                     			   Device_Config_Value = 0;
                                 USB_Device.BITS.State = USB_Addressed;
                  
                                 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
									      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                 break;
                                    
                              }
                                   
                              if(USB_Device_Request.wValue == 0x0100 ||
                                 USB_Device_Request.wValue == 0x0200)
                              {
                                 Device_Config_Value = (UC) (USB_Device_Request.wValue >> 8);

               						USB_Device.BITS.State = USB_Configured;
                                 
                                 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
									      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                 break;
                                    
                              } 

                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
		                        D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
                                                      
                              while(!USB_Int_Flag.BITS.EP0SETUP)
                              {
                                 if(USB_Int_Flag.BITS.SUSP ||
                                    Kernel_Flag.BITS.Bus_Reset)
                                    return;
            
                              }
      
                              USB_Int_Flag.BITS.EP0TX = 0;
                                                      
                              break;
   }                                
}      



//***********************************************************************
//*										    							               *
//*	Routine 	:                                                		   *
//*	Input		: None                   								         *     
//*	Output	: None                                   					   *
//*	Function	:                                            			   *
//*																		               *
//***********************************************************************

void Get_Config_Value(void)
{

   switch(USB_Device.BITS.State)
   {
   
      default              :
      case  USB_Default    :
                              break;
                              
      case  USB_Addressed  :

                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                              D14_Cntrl_Reg.D14_DATA_PORT_LSB = 0;
                              D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1;
                              D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.DSEN = 1;
                                                      
                              //check for status stage
                              while(!USB_Int_Flag.BITS.EP0TX)
                              {
                                 if(USB_Int_Flag.BITS.SUSP ||
                                    Kernel_Flag.BITS.Bus_Reset)
                                    return;
                              }
                                                      
                              USB_Int_Flag.BITS.EP0TX = 0;
                                                      
                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
	                           D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                                        
                              break;                              

      case  USB_Configured :
                           	D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                        		D14_Cntrl_Reg.D14_DATA_PORT_LSB = Device_Config_Value;
                              D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1;
                              D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.DSEN = 1;

                           	//check for status stage
                              while(!USB_Int_Flag.BITS.EP0TX)
                              {
                                 if(USB_Int_Flag.BITS.SUSP ||
                                    Kernel_Flag.BITS.Bus_Reset)
                                    return;
                              }
                                                      
                              USB_Int_Flag.BITS.EP0TX = 0;
                                                      
                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
	                           D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                                      
                                                        
                              break;                              
   }
}
								   

//***********************************************************************
//*										    							               *
//*	Routine 	:                                                		   *
//*	Input		: None                   								         *     
//*	Output	: None                                   					   *
//*	Function	:                                            			   *
//*																		               *
//***********************************************************************

void Clear_Feature_Request(void)
{
                           
   switch(USB_Device.BITS.State)
   {
                           
      case  USB_Addressed  :
                              if(USB_Device_Request.wLength != 0)
                                 break;
                                                         
                              if(USB_Device_Request.wIndex != 0)
                              {
                                 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
										   D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
                                                         
                                 while(!USB_Int_Flag.BITS.EP0SETUP)
                                 {
                                    if(USB_Int_Flag.BITS.SUSP ||
                                       Kernel_Flag.BITS.Bus_Reset)
                                       return;
                                 
                                 }
      
                                 USB_Int_Flag.BITS.EP0TX = 0;
                              }
                              else
                              {
                                                                  
                           	   if(USB_Device_Request.wValue == 0)
                                 {
         	               		   USB_Device.BITS.Halt = 0;
                                                      
                                    D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
	                                 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                    break;
	         
				                        								
                                 }
                                                                                                             
										   if(USB_Device_Request.wValue == 0x0100)
                                 {
											   USB_Device.BITS.Remote_Wakeup = 0;
                                                                                                   
                                    D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
	                                 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                    break;
                                 }
                              }
                                                      
                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
	                           D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
                                                      
                                                      
                              while(!USB_Int_Flag.BITS.EP0SETUP)
                              {
                                 if(USB_Int_Flag.BITS.SUSP ||
                                    Kernel_Flag.BITS.Bus_Reset)
                                    return;
                              }
                                                             
                              USB_Int_Flag.BITS.EP0TX = 0;
                                                      
                              break;
                                                      
										                           
      case  USB_Configured :
                              if(USB_Device_Request.wLength != 0)
                                 break;

                              if(USB_Device_Request.wValue == 0)
								      {
                                 switch(USB_Device_Request.wIndex)
                                 {
                                 
                                    case  0x8000   :
                                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                                                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
										                        Kernel_Flag.BITS.Endpt_Stall = 0;
                                                                                          
                                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                                                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF;			//disable FIFO
                                                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON;			//disable FIFO
                                                      
                                                      D14_Cntrl_Reg.D14_DMA_ENDPOINT = 1;
                                                      D14_Cntrl_Reg.D14_DMA_COMMAND = CLEAR_BUFFER;

                                                      break;
                                                      
                                    case  0x0000   :
                                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
                                                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
										                        Kernel_Flag.BITS.Endpt_Stall = 0;
                                                                                          
                                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
                                                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF;			//disable FIFO
                                                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON;			//disable FIFO
                                                      
                                                      D14_Cntrl_Reg.D14_DMA_ENDPOINT = 0;
                                                      D14_Cntrl_Reg.D14_DMA_COMMAND = CLEAR_BUFFER;

                                                      break;
                                  
                                    case  0x8200   :
                                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
                                                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
										                        Kernel_Flag.BITS.Endpt_Stall = 0;
                                                                                          
                                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
                                                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF;			//disable FIFO
                                                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON;			//disable FIFO
                                                      
                                                      D14_Cntrl_Reg.D14_DMA_ENDPOINT = 5;
                                                      D14_Cntrl_Reg.D14_DMA_COMMAND = CLEAR_BUFFER;
                                                      
                                                      break;
                                                     
                                    case  0x0200   :
                                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
                                                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
										                        Kernel_Flag.BITS.Endpt_Stall = 0;
                                                                                          
                                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
                                                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF;			//disable FIFO
                                                      D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON;			//disable FIFO
                                                      
                                                      D14_Cntrl_Reg.D14_DMA_ENDPOINT = 4;
                                                      D14_Cntrl_Reg.D14_DMA_COMMAND = CLEAR_BUFFER;
                                                      
                                                      break;

                                    default        :  
                                                      break;
                                 }                                                                                                      
										                           
                                                               
                                 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
	                              D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;

                                 USB_Device.BITS.Halt = 0;
                                 break;


                              }   											

                              if(USB_Device_Request.wValue == 0x0100)
                              {
										   USB_Device.BITS.Remote_Wakeup = 0;
                                                      
                                 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
	                              D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                 break;
                                                         
                              }
                                                      
                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
	                           D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
                                                      
                              while(!USB_Int_Flag.BITS.EP0SETUP)
                              {
                                 if

⌨️ 快捷键说明

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