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

📄 et_easy_usb_bulk_usb_lib.c

📁 ET44 Bulk transfer is a simple USB(bulk mode)device tester package. There are firmware, software and
💻 C
📖 第 1 页 / 共 4 页
字号:
void Int_Hint0Txe() interrupt INT_HINT0TXE using USBBANK
{
   if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
      UsbIntPre();
   
   if(M_ISBS1(HINTR))
   {//. HTX0_ISR1
      HINTR = 253;
      M_NOP;
      HAR = ADDRESS_BUFh;
      M_NOP;  
      //. skip_hub_address_set
      if(!HTBLL)
      {//. exit_htx0
         HEP0TXCTR = 0;
         M_NOP;
      }
      else if(HwLengthL)
      {//. skip_hub_address_set1
         nTable = nRomAdr;     
         M_NOP;
         HubTransmitTable();
      }
      else if(!HwLengthH)
      {//. exit_htx0
         HEP0TXCTR = 0;
         M_NOP;
      }
   }
   else
   {//. HTX1_ISR
      M_BC1(HEP1TXCSR);
      M_NOP;
      if(M_ISBS3(HUB_STATUS))
      {
         M_BC0(HEP1TXCSR);
      }
      else
      {//. not_cleared_yet
         M_BS0(HEP1TXCSR);
      }
      
      M_NOP;
      HINTR = 247;//#0b11110111
      M_NOP;      
      goto Back_To_Mloop;
   }

 Next_H_Inout:   
   M_BC1(HEP0RXCSR);
   M_NOP;
   M_BC1(HEP0TXCSR);
   M_NOP;
   M_BC0(HEP0RXCSR);
   M_NOP;
   M_BC0(HEP0TXCSR);
   M_NOP;  

 Back_To_Mloop: 
   if(_USB_AUTO_STORE_IAP0)
   {
      IAP0=STACK_IAP0;
      M_NOP;            
   }
   if(_USB_DIS_ANO_INT)
      M_ENI;
   return;
}




//. HPSTSC_ISR
void Int_HpstscInte() interrupt INT_HPSTSCINTE using USBBANK
{
   if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
      UsbIntPre();
   
   M_BC3(HUB_STATUS);
   HINTR = 127; //#0b01111111
   M_NOP;
   

   if(12 & HSR) //#0b00001100
      M_BS0(STATUS_BUF);

   if(31 & HPSCR1)//#0b00011111
      M_BS1(STATUS_BUF);

   if(31 & HPSCR2)//#0b00011111
      M_BS2(STATUS_BUF);

   if(31 & HPSCR3)//#0b00011111
      M_BS3(STATUS_BUF);
      
   if(31 & HPSCR4)//#0b00011111
      M_BS4(STATUS_BUF);
      
   if(!(30 & STATUS_BUF) && M_ISBC0(STATUS_BUF))//#0b00011110
   {//. response_nak
//      if(M_ISBC0(STATUS_BUF))
      {
         M_BC1(HEP1TXCSR);
         M_NOP;
         M_BC0(HEP1TXCSR);
         M_NOP;
         goto Back_To_Mloop;
      }   
   }

   _asm
     MOV _HEP1TXDAR,A
   _endasm;
   M_NOP;
   //. CHECK_PORT1_STATUS
   if(M_ISBS1(STATUS_BUF))
   {
      _asm
        MOV A,#_HSR+1
        MOV _IAP0,A
        NOP
      _endasm;
      
      if(M_ISBS4(IAC0))
         goto NOT_ENABLE_HEP1;
   }
   
   if(M_ISBS1(STATUS_BUF))
   {
      _asm
        MOV A,#_HSR+2
        MOV _IAP0,A
        NOP
      _endasm;
      
      if(M_ISBS4(IAC0))
         goto NOT_ENABLE_HEP1;
   }   
   
   if(M_ISBS1(STATUS_BUF))
   {
      _asm
        MOV A,#_HSR+3
        MOV _IAP0,A
        NOP
      _endasm;
      
      if(M_ISBS4(IAC0))
         goto NOT_ENABLE_HEP1;
   }    
   
   if(M_ISBS1(STATUS_BUF))
   {
      _asm
        MOV A,#_HSR+4
        MOV _IAP0,A
        NOP
      _endasm;
      
      if(M_ISBS4(IAC0))
         goto NOT_ENABLE_HEP1;
   }    
   
   M_BC1(HEP1TXCSR);
   M_NOP;
   M_BC0(HEP1TXCSR);
   M_NOP;
   goto Back_To_Mloop;
   
//. NOT_ENABLE_HEP1  
 NOT_ENABLE_HEP1:
   HEP1_CNT = 16;
   
 Back_To_Mloop: 
   if(_USB_AUTO_STORE_IAP0)
   {
      IAP0=STACK_IAP0;
      M_NOP;            
   }
   if(_USB_DIS_ANO_INT)
      M_ENI;
   return;   
 
}

//. SOF_ISR
void Int_SofInte() interrupt INT_SOFINTE using USBBANK
{
   if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)
      UsbIntPre();
   
   HINTR = 191;//#0b10111111
   M_NOP;
   //. call macro _ADD_USB_SOF_INT_SUB
   

   AddUsbSof();
   
   if(HEP1_CNT)
   {   
      if(--HEP1_CNT)
      {//. ENABLE_HEP1
         M_BC1(HEP1TXCSR);
         M_NOP;
         M_BS0(HEP1TXCSR);
         M_NOP;         
      }
   }
   
 Back_To_Mloop: 
   if(_USB_AUTO_STORE_IAP0)
   {
      IAP0=STACK_IAP0;
      M_NOP;            
   }
   if(_USB_DIS_ANO_INT)
      M_ENI;
   return;   


}


void HubTransmitTable() using USBBANK
{
   CTR_BUF = 0;

   do
   {
     _asm
      TBRDP _HEP0TXDAR
      INC _CTR_BUF
     _endasm;  
     nHwLength--;
     HTBLL--;
     if(!HTBLL && M_ISBS3(CTR_BUF))
        break;     
   }
   while(nHwLength );//&& HTBLL);
   
   HEP0TXCTR = CTR_BUF;
   M_NOP;
   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;
   M_NOP;
   ROMADRH = HTBL;
   ROMADRL = LTBL;
   return;

/*
   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;
   M_NOP;
   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
{
   // unsigned char temp;
    
    _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_ISBS1(USB_STATUS))
         {//. F_CRWup
            goto UNKNOWN_wValueL;         
         }
        */ 
         if(!(_RT0X00_R0X01_Value0001*_USB_HUB) || M_ISBC1(USB_STATUS))
         {

            if(IAC0 == device_remote_wakeup)
            {
               M_BC2(HGSR);
               M_NOP;
               M_BC4(HGSR);
               M_NOP;
               M_BC3(STAINTE);
               M_NOP;
               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);
               M_NOP;
               M_BS3(STAINTE);
               M_NOP;
               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);
            M_NOP;
            M_BC1(HEP0TXCSR);
            M_NOP;
            M_BC1(HEP1TXCSR);
            M_NOP;
            
            // Load configuration status
            if(HwValueL)
            {
               M_BS5(HGSR);
               M_NOP;
               M_BS5(GCNTR);
               M_NOP;               
            }
            else
               M_BC5(HGSR);
            
            return;              
         }
         else
         {//. FcConfiguration
         //Embeded fc initilize: interrupt _ENABLE, ep _ENABLE and config
            
            EP1CNTR = _USB_EP1_CON;
            M_NOP;
            EP2CNTR = _USB_EP2_CON;
            M_NOP;
            EP3CNTR = _USB_EP3_CON;
            M_NOP;
            
            //Clear any stall condition 
            M_BC1(EP0RXCSR);
            M_NOP;
            M_BC1(EP0TXCSR);
            M_NOP;
            M_BC1(EP1CSR);
            M_NOP;
            M_BC1(EP2CSR);
            M_NOP;
            M_BC1(EP3CSR);
            M_NOP;
            
            //Load configuration status
            if(!wValueL)
            {//. fc_un_configured
               M_BC4(FC_STATUS);
               M_NOP;
               M_BC0(EP1CSR);
               M_NOP;
               M_BC0(EP2CSR);
               M_NOP;
               M_BC0(EP3CSR);
               M_NOP;
               
            }
            else
            {
               M_BS4(FC_STATUS);
               M_NOP;
               M_BC0(EP1CSR);
               M_NOP;
               M_BC0(EP2CSR);
               M_NOP;
               M_BC0(EP3CSR);
               M_NOP;
               // 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);
                      M_NOP;
                      return;
                   }
                   else if(IAC0 == hub_endpoint80)
                   {//. ClearHEndpointStall80
                      M_BS1(HEP0TXCSR);
                      M_NOP;
                      return;             
                   }
                   else if(IAC0 == hub_endpoint81)
                   {
                      M_BC1(HEP1TXCSR);
                      M_NOP;
                      return;                      
                   }
                }  
                else
                {
                   usb_byTemp = IAC0;
                   IAP0--;
                   switch(usb_byTemp)
                   {
                     case 0: //. ClearFEndpointStall00
                      M_BC1(EP0RXCSR);
                      M_NOP;
                      return;
                    case 1: //. ClearFEndpointStall01
                      if(_USB_EP1)
                      {
                         if(_USB_EP1_DIR != _IN_DIR)
                         {
                            M_BC1(EP1CSR);                   
                            M_NOP;
                            return;
                         }   
                      }
                      break;
                    case 2: //. ClearFEndpointStall02
                      if(_USB_EP2)
                      {
                         if(_USB_EP2_DIR != _IN_DIR)
                         {
                            M_BC1(EP2CSR);                   
                            M_NOP;
                            return;
                         }   
                      }
                      break;
                    case 3: //. ClearFEndpointStall03    
                      if(_USB_EP3)
                      {
                         if(_USB_EP3_DIR != _IN_DIR)
                         {
                            M_BC1(EP3CSR);                   
                            M_NOP;
                            return;
                         }   
                      }
                      break;
                    case 80: //. ClearFEndpointStall80
                       M_BC1(EP0TXCSR);
                       M_NOP;
                       return;
                    case 81: //. ClearFEndpointStall81
                       if(_USB_EP1 )
                       {

⌨️ 快捷键说明

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