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

📄 et21x130c_usb_lib.c

📁 在台湾义统公司
💻 C
📖 第 1 页 / 共 5 页
字号:
     if(!HTBLL && M_ISBS3(CTR_BUF))
        break;     
   }
   while(nHwLength );//&& HTBLL);
   
   HEP0TXCTR = CTR_BUF;
   USB_Lib_Delay();
   HROMADRH = HTBL;
   HROMADRL = LTBL;
   return;
}



void fTransmitTable() using USBBANK
{

   CTR_BUF = 0;
   do
   {
     _asm
      TBRDP _EP0TXDAR       
      INC _CTR_BUF
     _endasm;  
     
     
     nwLength--;
     TBLL--;
     if(!TBLL || (M_ISBS6(CTR_BUF)) ) 
        break;  
   }
   while(nwLength);//&& HTBLL);
   
   EP0TXCTR = CTR_BUF;
   USB_Lib_Delay();
   ROMADRH = HTBL;
   ROMADRL = LTBL;
   return;

}



// SEARCH_CHANGE_PORT
void SearchChangePort() using USBBANK
{
   _asm
     MOV A,#_HPSR4
     ADD A,_HwIndexL
     MOV _IAP0,A
   _endasm;  
   return;

}



            
               
void StageOne() using USBBANK
{
   
    _asm
      MOV A,#_bmRequestType
      MOV _IAP0,A
      NOP
    _endasm;
    
    TEMP_UREG = IAC0;

    if(_RequestType_0X00 && (TEMP_UREG==0))
    {//. RequestType00
      TEMP_UREG = IAC0;
      
      //Clear Feature
      if(_RT0X00_Request_0X01 && (TEMP_UREG == request_clear_feature))
      { // ClearRemoteWakeup
         if(!(_RT0X00_R0X01_Value0001*_USB_HUB) || M_ISBC1(USB_STATUS))
         {
            if(IAC0 == device_remote_wakeup)
            {
               M_BC2(HGSR);
               USB_Lib_Delay();
               M_BC4(HGSR);
               USB_Lib_Delay();
               M_BC3(STAINTE);
               USB_Lib_Delay();
               return;
            }   
         }
      }  
      //Set Feature
      else if(_RT0X00_Request_0X03 && (TEMP_UREG == request_set_feature))
      {//. SetRemoteWakeup 
         if(!(_RT0X00_R0X03_Value0001*_USB_HUB) || M_ISBC1(USB_STATUS))
         {
            if(IAC0 == device_remote_wakeup)
            {
               M_BS4(HGSR);
               USB_Lib_Delay();
               M_BS3(STAINTE);
               USB_Lib_Delay();
               return;        
            }   
         }
      } 
      //Set Address  
      else if(_RT0X00_Request_0X05 && (TEMP_UREG == request_set_address))
      {//. SetAddress 
         if((_USB_HUB) && M_ISBC1(USB_STATUS))
         {
            ADDRESS_BUFh = IAC0;
            return;        
         }
         ADDRESS_BUFf = IAC0;
         return;
      }  
      //Set Descriptor
      else if(_RT0X00_Request_0X07&& (TEMP_UREG == request_set_descriptor))
      {//. SetDescriptor
      
      }          
      //Set Configuration
      else if(_RT0X00_Request_0X09&& (TEMP_UREG == request_set_configuration))
      {//. SetConfiguration       
         if((_USB_HUB) && M_ISBC1(USB_STATUS))
         {
            // Clear any stall condition
            M_BC1(HEP0RXCSR);
            USB_Lib_Delay();
            M_BC1(HEP0TXCSR);
            USB_Lib_Delay();
            M_BC1(HEP1TXCSR);
            USB_Lib_Delay();
            
            // Load configuration status
            if(HwValueL)
            {
               M_BS5(HGSR);
               USB_Lib_Delay();
               M_BS5(GCNTR);
               USB_Lib_Delay();               
            }
            else
               M_BC5(HGSR);
            
            return;              
         }         
         else
         {//. FcConfiguration
         //Embeded fc initilize: interrupt _ENABLE, ep _ENABLE and config
            
            EP1CNTR = _USB_EP1_CON;
            USB_Lib_Delay();
            EP2CNTR = _USB_EP2_CON;
            USB_Lib_Delay();
            EP3CNTR = _USB_EP3_CON;
            USB_Lib_Delay();
            
            //Clear any stall condition 
            M_BC1(EP0RXCSR);
            USB_Lib_Delay();
            M_BC1(EP0TXCSR);
            USB_Lib_Delay();
            M_BC1(EP1CSR);
            USB_Lib_Delay();
            M_BC1(EP2CSR);
            USB_Lib_Delay();
            M_BC1(EP3CSR);
            USB_Lib_Delay();
            
            //Load configuration status
            if(!wValueL)
            {//. fc_un_configured
               M_BC4(FC_STATUS);
               USB_Lib_Delay();
               M_BC0(EP1CSR);
               USB_Lib_Delay();
               M_BC0(EP2CSR);
               USB_Lib_Delay();
               M_BC0(EP3CSR);
               USB_Lib_Delay();
               
            }
            else
            {
               M_BS4(FC_STATUS);
               USB_Lib_Delay();
               M_BC0(EP1CSR);
               USB_Lib_Delay();
               M_BC0(EP2CSR);
               USB_Lib_Delay();
               M_BC0(EP3CSR);
               USB_Lib_Delay();
               // call macro _ADD_USB_DEVICE_CONFIG_OK
               AddUsbDeviceConfigOk();             
            }
            return;            
         }                
      }                          
    }
    //. call macro _ADD_USB_RT0X00_Request
    //AddUsbRt0x00Request();
    else if(_RequestType_0X01 && (TEMP_UREG==1))
    {//. RequestType01
       if(_RT0X01_Request_0X0B && (IAC0 =request_set_interface))
       {//. SetInterface
          if(!(_USB_HUB) || M_ISBS1(USB_STATUS))
             A_INTERFACE = IAC0; 
          return;  
       }
       //. call macro _ADD_USB_RT0X01_Request
       AddUsbRt0x01Request();
        //_ADD_USB_RT0X01_Request
    }   
    else if(_RequestType_0X02 && (TEMP_UREG==2))// == 0x02)
    {//. RequestType02
    //Clear Feature
       if(_RT0X02_Request_0X01)
       {
          TEMP_UREG = IAC0;
          if(TEMP_UREG = request_clear_feature)
          {//. ClearEndpointStall
             if(_RT0X02_R0X01_Value0000 && (IAC0 = endpoint_stalled))
             {
                IAP0++;
                if(_USB_HUB && M_ISBC1(USB_STATUS))
                {
                   if(IAC0==0)
                   {//. ClearHEndpointStall00
                      M_BS1(HEP0RXCSR);
                      USB_Lib_Delay();
                      return;
                   }
                   else if(IAC0 == hub_endpoint80)
                   {//. ClearHEndpointStall80
                      M_BS1(HEP0TXCSR);
                      USB_Lib_Delay();
                      return;             
                   }
                   else if(IAC0 == hub_endpoint81)
                   {
                      M_BC1(HEP1TXCSR);
                      USB_Lib_Delay();
                      return;                      
                   }
                }  
                else
                {
                   usb_byTemp = IAC0;
                   IAP0--;
                   switch(usb_byTemp)
                   {
                     case 0: //. ClearFEndpointStall00
                      M_BC1(EP0RXCSR);
                      USB_Lib_Delay();
                      return;
                    case 1: //. ClearFEndpointStall01
                      if(_USB_EP1)
                      {
                         if(_USB_EP1_DIR != _IN_DIR)
                         {
                            M_BC1(EP1CSR);                   
                            USB_Lib_Delay();
                            return;
                         }   
                      }
                      break;
                    case 2: //. ClearFEndpointStall02
                      if(_USB_EP2)
                      {
                         if(_USB_EP2_DIR != _IN_DIR)
                         {
                            M_BC1(EP2CSR);                   
                            USB_Lib_Delay();
                            return;
                         }   
                      }
                      break;
                    case 3: //. ClearFEndpointStall03    
                      if(_USB_EP3)
                      {
                         if(_USB_EP3_DIR != _IN_DIR)
                         {
                            M_BC1(EP3CSR);                   
                            USB_Lib_Delay();
                            return;
                         }   
                      }
                      break;
                    case 80: //. ClearFEndpointStall80
                       M_BC1(EP0TXCSR);
                       USB_Lib_Delay();
                       return;
                    case 81: //. ClearFEndpointStall81
                       if(_USB_EP1 )
                       {
                          if(_USB_EP1_DIR == _IN_DIR)
                          {          
                             M_BC1(EP1CSR);
                             USB_Lib_Delay();
                             return;
                         }
                       }
                       break;
                    case 82: //. ClearFEndpointStall82
                      if(_USB_EP2 )
                      {
                         if(_USB_EP2_DIR == _IN_DIR)
                         {          
                            M_BC1(EP2CSR);
                            USB_Lib_Delay();
                            return;
                         }
                      }
                      break;
                    case 83: //. ClearFEndpointStall83
                      if(_USB_EP3 )
                      {
                         if(_USB_EP3_DIR == _IN_DIR)
                         {          
                            M_BC1(EP3CSR);
                            USB_Lib_Delay();
                            return;
                         }
                      }
                      break; 
                   }
                } 
             }             
          }
       }
       if(_RT0X02_Request_0X03 &&(TEMP_UREG ==request_set_feature))   
       {//. SetEndpointStall
          if(_RT0X02_R0X03_Value0000 && (IAC0 = endpoint_stalled))
          {
             IAP0++;
             if(_USB_HUB && M_ISBC1(USB_STATUS))
             {
                if(IAC0==0)
                {//. SetHEndpointStall00
                   M_BS1(HEP0RXCSR);
                   USB_Lib_Delay();
                   return;
                }
                else if(IAC0 == hub_endpoint80)
                {//. SetHEndpointStall80
                   M_BS1(HEP0TXCSR);
                   USB_Lib_Delay();
                   return;             
                }
                else if(IAC0 == hub_endpoint81)
                {//. SetHEndpointStall81
                   M_BC1(HEP1TXCSR);
                   USB_Lib_Delay();
                   return;                      
                }
             }  
             else
             {
               usb_byTemp = IAC0;
               IAP0--;
          
               switch(usb_byTemp)
               {
                  case 0: //. SetFEndpointStall00
                    M_BS1(EP0RXCSR);
                    USB_Lib_Delay();
                    return;
                  case 1: //. SetFEndpointStall01
                    if(_USB_EP1)
                    {
                       if(_USB_EP1_DIR != _IN_DIR)
                       {
                          M_BS1(EP1CSR);                   
                          USB_Lib_Delay();
                          return;
                       }   
                    }
                    break;
                  case 2: //. SetFEndpointStall02
                     if(_USB_EP2)
                     {
                        if(_USB_EP2_DIR != _IN_DIR)
                        {
                           M_BS1(EP2CSR);                   
                           USB_Lib_Delay();
                           return;
                        }   
                     }
                     break;
                  case 3: //. SetFEndpointStall03    
                     if(_USB_EP3)
                     {
                        if(_USB_EP3_DIR != _IN_DIR)
                        {
                           M_BS1(EP3CSR);                   
                           USB_Lib_Delay();
                           return;
                        }   
                     }
                     break;
                  case 80: //. SetFEndpointStall80
                     M_BS1(EP0TXCSR);
                     USB_Lib_Delay();
                     return;
                  case 81: //. SetFEndpointStall81
                     if(_USB_EP1 )
                     {
                        if(_USB_EP1_DIR == _IN_DIR)
                        {          
                           M_BS1(EP1CSR);
                           USB_Lib_Delay();
                           return;
                        }
                     }
                     break;
                  case 82: //. SetFEndpointStall82
                     if(_USB_EP2 )
                     {
                       if(_USB_EP2_DIR == _IN_DIR)
                        {          
                           M_BS1(EP2CSR);
                           USB_Lib_Delay();
                           return;
                        }
                     }
                     break;
                  case 83: //. ClearFEndpointStall83
                     if(_USB_EP3 )
                     {
                        if(_USB_EP3_DIR == _IN_DIR)
                        {          
                           M_BS1(EP3CSR);
                           USB_Lib_Delay();
                           return;
                        }
                     }
                     break; 
                }
             }   
          }
       }
       //. call _ADD_USB_RT0X02_Request
       AddUsbRt0x02Request();       
    }
    //. RequestType80
    else if(_RequestType_0X80 && (TEMP_UREG==0x80))
    {//. Get Status
       TEMP_UREG = IAC0;
       
       if(_RT0X80_Request_0X00 && (TEMP_UREG == request_get_status))
       {//. GetDeviceStatus
          if(_USB_HUB && M_ISBC1(USB_STATUS))
          {
             HEP0TXCTR = 2;
             USB_Lib_Delay();
             
             nHwLength = 0;
             /*
             HwLengthL = 0;
             HwLengthH = 0; 
             */
             _asm
              SHRA  _HGSR,3
              AND   A,#0b00000011
              MOV	_HEP0TXDAR,A
              NOP
              NOP
              NOP

⌨️ 快捷键说明

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