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

📄 usbdebug.c

📁 ISP1581设计的大容量存储器固件程序。 包含以下文件: d14.h i2c.c i2c.h init.c intrpt.c kernel.c
💻 C
📖 第 1 页 / 共 5 页
字号:
                          while(!USB_Int_Flag.BITS.EP0TX)
                         {
	                          if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
                              return;
                         }
                           USB_Int_Flag.BITS.EP0TX = 0;
                      break;
                  case  USB_Configured :
                  case  USB_Addressed   :
                           if(USB_Device_Request.wValue == 0)
                               USB_Device.BITS.State = USB_Default;
                               D14_Cntrl_Reg.D14_ADDRESS.BITS.DEVADDR = (USB_Device_Request.wValue >> 8);
                               D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
	                           D14_Cntrl_Reg.D14_CONTROL_FUNCTION.VALUE = 2;
					//end of 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;
                 break;
                 }
          break;
	case	Set_Config		:
			Set_Configuration();
		  break;
	case	Get_Config		:
		    Get_Configuration();
		  break;
	case	Clear_Feature	:
         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 || USB_Int_Flag.BITS.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;
                        //end of 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;
		                    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;
                         //end of 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;
                            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 || USB_Int_Flag.BITS.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;
                                       break;
                                 case  0x0000   :
                                       D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
                                       break;
                                 case  0x8100   :
                                       D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
                                       break;
                                 case  0x0100   :
                                       D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
                                       break;
                                 case  0x8200   :
                                       D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
                                       break;
                                 case  0x0200   :
                                       D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
                                       break;
                                 case  0x8300   :
                                       D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
                                       break;
                                 case  0x0300   :
                                       D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
                                       break;
                                case  0x8400   :
                                       D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
                                      break;
                                case  0x0400   :
                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 8;
                                      break;
                               case  0x8500   :
                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 11;
                                      break;
                              case  0x0500   :
                                     D14_Cntrl_Reg.D14_ENDPT_INDEX = 10;
                                      break;
                             case  0x8600   :
                                     D14_Cntrl_Reg.D14_ENDPT_INDEX = 13;
                                     break;
                             case  0x0600   :
                                     D14_Cntrl_Reg.D14_ENDPT_INDEX = 12;
                                     break;
                             case  0x8700   :
                                     D14_Cntrl_Reg.D14_ENDPT_INDEX = 15;
                                     break;
                             case  0x0700   :
                                     D14_Cntrl_Reg.D14_ENDPT_INDEX = 14;
                                     break;
                             default        :  
                                     break;
                             }                                                                                                      
							 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
							 Kernel_Flag.BITS.Endpt_Stall = 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_ENDPT_INDEX = 1;
	                         D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                             //end of 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;
	                   			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;
                            //end of 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;
		                         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 || USB_Int_Flag.BITS.RESET)
                              return;
                         }
                         USB_Int_Flag.BITS.EP0TX = 0;
                      break;
                  default              :
                      break;
                }
           break;
	case	Get_Status		:

								if(USB_Device.BITS.State == USB_Default)
									D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
								else
								{
								
									if(USB_Device.BITS.State == USB_Addressed)
									{

										if(USB_Device_Request.bmRequestType == 0x81 ||
									      (USB_Device_Request.bmRequestType == 0x82 && 
									   	   USB_Device_Request.wIndex != 0))
											D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
										else
										{
											if(USB_Device_Request.bmRequestType == 0x80)
												Send_Device_Status();
						
											if(USB_Device_Request.bmRequestType == 0x81)
												Send_Interface_Status();
						
											if(USB_Device_Request.bmRequestType == 0x82)
												Send_Endpoint_Status();

										}
									}
									else
									{
										if(USB_Device_Request.bmRequestType == 0x80)
											Send_Device_Status();

										if(USB_Device_Request.bmRequestType == 0x81)
											Send_Interface_Status();

										if(USB_Device_Request.bmRequestType == 0x82)
											Send_Endpoint_Status();

//										if(USB_Device_Request.bmRequestType == 0x21)
//											Get_CBI_Command();
									}
								}

								break;
						
	case	Set_Feature		:
            switch(USB_Device.BITS.State)
           {
             case  USB_Default    :
                   if(USB_Device_Request.wLength != 0)
                 break;
                 if(USB_Device_Request.wValue == TEST_MODE)
					{
					if(USB_Device_Request.wIndex <= 5 &&
					USB_Device_Request.wIndex != 0)
					{
                      switch(USB_Device_Request.wIndex)
                         {
                             case  TEST_J   :
                                 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                                 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                 D14_Cntrl_Reg.D14_TEST_MODE.BITS.FORCEHS = 1;
						         D14_Cntrl_Reg.D14_TEST_MODE.BITS.JSTATE = 1;
                                                                                                   
                                EA = 0;
                                 while(1);
         					 case  TEST_K  :
                               			D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                                        D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                        D14_Cntrl_Reg.D14_TEST_MODE.BITS.FORCEHS = 1;
										D14_Cntrl_Reg.D14_TEST_MODE.BITS.KSTATE = 1;
								        EA = 0;
                                        while(1);
                            case  TEST_SE0_NAK  :
                            	D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                                D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                D14_Cntrl_Reg.D14_TEST_MODE.BITS.FORCEHS = 1;
								D14_Cntrl_Reg.D14_TEST_MODE.BITS.SE0_NAK = 1;
                                EA = 0;
                                while(1);
                            case  TEST_PACKET  :
                            	D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                                D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 56;
                                D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
                                Descriptor_Ptr = &Test_Packet[0];
                                 for(count = 0 ; count < 56 ; count++)
								{
							        D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
                                    Descriptor_Ptr++;
								};
                                    D14_Cntrl_Reg.D14_TEST_MODE.BITS.FORCEHS = 1;
                                    D14_Cntrl_Reg.D14_TEST_MODE.BITS.PRBS = 1;
                                    EA = 0;
                                    while(1);
                               case  TEST_FORCE_ENABLE  :                                 
                                    D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
                                    D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                                    //D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                               default  :
                                   break;
                              }
                           }
                         }
                     else
                        {
                        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 || USB_Int_Flag.BITS.RESET)
        	                   return;
            	             }
                	        USB_Int_Flag.BITS.EP0TX = 0;
                        }                                                          
                    break;
            case  USB_Addressed  :
                 if(USB_Device_Request.wLength != 0)
               break;
                 if((USB_Device_Request.wIndex && 0x00FF) != 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 || USB_Int_Flag.BITS.RESET)
                    return;
                }
                USB_Int_Flag.BITS.EP0TX = 0;
             break;
            }
      switch(USB_Device_Request.wValue)
        {
         case  TEST_MODE      :
             if(USB_Device_Request.wIndex <= 5 && USB_Device_Request.wIndex != 0)
	         {
              switch(USB_Device_Request.wIndex)
             {
               case  TEST_J   :
                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                     D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                     D14_Cntrl_Reg.D14_TEST_MODE.BITS.FORCEHS = 1;
                     D14_Cntrl_Reg.D14_TEST_MODE.BITS.JSTATE = 1;
                     EA = 0;
                     while(1);
               case  TEST_K  :
                     D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                     D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                     D14_Cntrl_Reg.D14_TEST_MODE.BITS.FORCEHS = 1;
                     D14_Cntrl_Reg.D14_TEST_MODE.BITS.KSTATE = 1;
                     EA = 0;
                     while(1);
               case  TEST_SE0_NAK  :
                     D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                     D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                     D14_Cntrl_Reg.D14_TEST_MODE.BITS.FORCEHS = 1;
                     D14_Cntrl_Reg.D14_TEST_MODE.BITS.SE0_NAK = 1;
                     EA = 0;
                     while(1);
  		      case  TEST_PACKET  :
                     D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
                     D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                     D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 56;
                     D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
                     Descriptor_Ptr = &Test_Packet[0];
                     for(count = 0 ; count < 56 ; count++)
                    {
                     D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
                     Descriptor_Ptr++;
                     };
                     D14_Cntrl_Reg.D14_TEST_MODE.BITS.FORCEHS = 1;
                     D14_Cntrl_Reg.D14_TEST_MODE.BITS.PRBS = 1;
                     EA = 0;
                     while(1);
               case  TEST_FORCE_ENABLE  :                                 
                     D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
                     D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                    //D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
               default  :
                   break;
              }
            }
           break;
       case  ENDPOINT_HALT        :
                   USB_Device.BITS.Halt = 1;
	               D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
	               D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
                //end of 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;

⌨️ 快捷键说明

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