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

📄 et21x130c_usb_lib.c

📁 在台湾义统公司
💻 C
📖 第 1 页 / 共 5 页
字号:
                     MOV A,#_EP2CSR
                   _endasm;                     
                }      
                else
                   break;
             }
             case 3: //. check_fc_ep03
                break;
             
             case 80: //. check_fc_ep80
             {
                _asm 
                  MOV A,#_EP0RXCSR
                _endasm;              
                                
             }
             case 81: //. check_fc_ep81
             {
                if(_USB_EP1 && (_USB_EP1_DIR == _IN_DIR))
                {
                    _asm
                     MOV A,#_EP1CSR
                   _endasm;
                     
                }      
                else 
                   break;
             }
             case 82: //. check_fc_ep82
             {
                if(_USB_EP2 && (_USB_EP2_DIR == _IN_DIR))
                {
                   _asm
                     MOV A,#_EP2CSR
                   _endasm;                     
                }      
                else 
                   break;
             }
             case 83: //. check_fc_ep83
             {
                break;
             }
             default:
             //. check_fc_end
              _asm
                MOV _IAP0,A
              _endasm;
              EP0TXCTR = 1;
              USB_Lib_Delay();
              nwLength = 0;
              if(M_ISBS1(IAC0))
                 EP0TXDAR = 1;
              else
                 EP0TXDAR = 0;
              return;              
          }

       }
       //. call macro _ADD_USB_RT0X82_Request
       AddUsbRt0x82Request();
       //goto  UNKNOWN_bRequest;
    }
    
    else if(_RequestType_0X20 && (TEMP_UREG == 0x20))
    {//. RequestType20
       TEMP_UREG = IAC0;
       if(_RT0X20_Request_0X01 && (TEMP_UREG == request_clear_feature) && _USB_HUB)
       {//. ClearHubFeature
          if(HwValueL == c_hub_local_power)
          {//. ClearLocalPowerChange
             M_BC2(HSR);
          }
          else if(HwValueL == c_hub_over_current)
          {//. ClearOverCurrentChange
             M_BC3(HSR);
          }
          M_BC0(STATUS_BUF);
          USB_Lib_Delay();
          return;             
       }
       else if(_RT0X20_Request_0X03 && (TEMP_UREG == request_set_feature) &&_USB_HUB )
       {//. SetHubFeature
             return;
       }  
       else if(_RT0X20_Request_0X06 && (TEMP_UREG == request_set_descriptor))
       {//. SetHubDescriptor
       
       
       }
       //. call macro _ADD_USB_RT0X20_Request
       AddUsbRt0x20Request();       

    }
    else if(_RequestType_0X21 && (TEMP_UREG == 0x21))
    {//. RequestType21
       TEMP_UREG = IAC0;
       if(_RT0X21_Request_0X09 && (TEMP_UREG == request_set_report))
       {//. SetReport
          M_BS2(FC_STATUS);
          return;       
       } 
       if(_RT0X21_Request_0X0A && (TEMP_UREG == request_set_idle))
       {//. SetIdleReport
          IDLE_TIMER = wValueH;
          EP0TXCTR = 0;
          USB_Lib_Delay();
          return;       
       }     
       if(_RT0X21_Request_0X0B && (TEMP_UREG == request_set_protocol))
       {//. SetProtocolReport
          PROTOCOL = wValueL;
          EP0TXCTR = 0;
          USB_Lib_Delay();
          return;       
       }         
       //. call macro  _ADD_USB_RT0X21_Request
       AddUsbRt0x21Request();
    }
    else if(_RequestType_0X23 && (TEMP_UREG == 0x23))
    {//. RequestType23
       TEMP_UREG = IAC0;
       if(_RT0X23_Request_0X01 &&(TEMP_UREG==request_clear_feature))
       {//. ClearPortFeature
          if(_USB_HUB)
          {
             unsigned char usb_byTemp=HwIndexL;
             usb_byTemp--;
             // check port number = 1~4 ?
             if((252 & usb_byTemp))
             {
                M_BS0(USB_STATUS);
                return;          
             }
             else if(HwValueL == port_enable)
             {//. ClearPort_ENABLE
                HPCONR = HwIndexL + 152;// 0b10011000
                USB_Lib_Delay();
                return;
             }
             else if(HwValueL == port_suspend)
             {//. ClearPortSuspend
                HPCONR = HwIndexL + 160;// 0b10100000
                USB_Lib_Delay();
                return;
             }  
             else if(HwValueL == port_power)
             {//. ClearPortPower
                HPCONR = HwIndexL + 168;// 0b10101000
                USB_Lib_Delay();
                return;
             }
             
             if(HwIndexL ==1 )
                M_BC1(STATUS_BUF);
             else if(HwIndexL ==2 )
                M_BC2(STATUS_BUF);
             else if(HwIndexL ==3 )
                M_BC3(STATUS_BUF);
             else if(HwIndexL ==4 )
                M_BC4(STATUS_BUF);   
             
             if(!(30 & STATUS_BUF))
                M_BS3(HUB_STATUS);
             
             //. ClearPortFeature_change
             if(HwValueL == c_port_connection)
             {//. ClearPortConnectionChange
              //. CALL	SEARCH_CHANGE_PORT
                SearchChangePort();
                M_BC0(IAC0);
                USB_Lib_Delay();
                return;
             }
             else if(HwValueL == c_port_enable)
             {//. ClearPort_ENABLEChange
              //. CALL	SEARCH_CHANGE_PORT
                SearchChangePort();
                M_BC1(IAC0);
                USB_Lib_Delay();
                return;
             }
             else if(HwValueL == c_port_suspend)
             {//. ClearPortSuspendChange
              //. CALL	SEARCH_CHANGE_PORT
                SearchChangePort();
                M_BC2(IAC0);
                USB_Lib_Delay();
                return;
             }
             else if(HwValueL == c_port_over_current)
             {//. ClearPortOverCurrentChange
              //. CALL	SEARCH_CHANGE_PORT
                SearchChangePort();
                M_BC3(IAC0);
                USB_Lib_Delay();
                return;
             }
             else if(HwValueL == c_port_reset)
             {//. ClearPortResetChange
              //. CALL	SEARCH_CHANGE_PORT
                SearchChangePort();
                M_BC4(IAC0);
                USB_Lib_Delay();
                return;
             }
          }
       }
       else if(_RT0X23_Request_0X03 &&(TEMP_UREG==request_set_feature))
       {//. SetPortFeature
         if(_USB_HUB)
         {
            unsigned char usb_byTemp=HwIndexL;
            usb_byTemp--;
            // check port number = 1~4 ?
            if((252 & usb_byTemp))
            {
                M_BS0(USB_STATUS);
                return;          
            }            
            if(HwValueL == port_reset)
            {//. SetPortReset
               HPCONR = HwIndexL + 136;//0b10001000
               USB_Lib_Delay();
               //.//Embedded port?
               if(usb_byTemp==1)
               {
                  M_BS4(GCNTR);
                  USB_Lib_Delay();
                  FAR = 0;
                  USB_Lib_Delay();
                  ADDRESS_BUFf = 0;
               }
               return;            
            }
            if(HwValueL == port_power)
            {//. SetPortPower
               HPCONR = HwIndexL + 144;//0b10010000
               USB_Lib_Delay();
               return;            
            }
            if(HwValueL == port_suspend)
            {//. SetPortSuspend
               if(usb_byTemp==1)
               {
                  USB_Lib_Delay();
               }
               HPCONR = HwIndexL + 128;//0b10010000
               USB_Lib_Delay();
               return;            
            }
            return;         
         }
       
       }
       //. call macro _ADD_USB_RT0X23_Request
       AddUsbRt0x23Request();
    }
    else if(_RequestType_0XA0 && (TEMP_UREG == 0xA0))
    {//. RequestTypeA0
       TEMP_UREG = IAC0;
       if(_RT0XA0_Request_0X00 &&(TEMP_UREG==request_get_status) && _USB_HUB)
       {//. GetHubStatus
             HEP0TXCTR = 4;
             nHwLength = 0;
             HEP0TXDAR = HSR + 3;
             USB_Lib_Delay();
             _asm
               MOV A,#0x00
               MOV _HEP0TXDAR,A
             _endasm;  
             USB_Lib_Delay();
             _asm
               MOV A,_HSR
               SHRA _HSR,2
               AND A,#0b00000011
               MOV _HEP0TXDAR,A
             _endasm;
             USB_Lib_Delay();
             _asm
               MOV A,#0x00
               MOV _HEP0TXDAR,A
             _endasm;  
             USB_Lib_Delay();
             
             return;            
       }
       else if(_RT0XA0_Request_0X06 &&(TEMP_UREG==request_get_descriptor) && _USB_HUB)
       {//. GetHubDescriptor 
           //  psz = &Hub_class_desc_table;
             HTBLL = *psz;
             HubTransmitTable();
             return;
       }
       //. call macro _ADD_USB_RT0XA0_Request
       AddUsbRt0xA0Request();
    }    
    else if(_RequestType_0XA1 && (TEMP_UREG == 0xA1))
    {//. RequestTypeA1
       TEMP_UREG = IAC0;
       if(_RT0XA1_Request_0X01 &&(TEMP_UREG==request_get_report))
       {//. GetReport
          M_BS5(FC_STATUS);
          //. call macro _ADD_USB_GET_REPORT_SUB
          AddUsbGetReportSub();
          return;
       }
       else if(_RT0XA1_Request_0X02 &&(TEMP_UREG==request_get_idle))
       {//. GetIdleReport
          EP0TXCTR = 1;
          USB_Lib_Delay();
          EP0TXDAR = IDLE_TIMER;
          USB_Lib_Delay();
          return;
       }
       else if(_RT0XA1_Request_0X03 &&(TEMP_UREG==request_get_protocol))
       {//. GetProtocolReport
          EP0TXCTR = 1;
          USB_Lib_Delay();
          EP0TXDAR = PROTOCOL;
          USB_Lib_Delay();
          return;
       }
       //. call macro  _ADD_USB_RT0XA1_Request
       AddUsbRt0xA1Request();
    }
    else if(_RequestType_0XA3 && (TEMP_UREG == 0xA3))
    {//. RequestTypeA3
       TEMP_UREG = IAC0;
       if(_RT0XA3_Request_0X00 &&(TEMP_UREG==request_get_status) && _USB_HUB)
       {//. GetPortStatus
             unsigned char usb_byTemp=HwIndexL;
             usb_byTemp--;
             if((252 & usb_byTemp))
             {
                M_BS0(USB_STATUS);
                return;          
             }
             HEP0TXCTR = 4;
             USB_Lib_Delay();
             nHwLength = 0;
             
             _asm
               MOV A,#_HSR
               ADD A,_HwIndexL
               MOV _IAP0,A
               NOP
               MOV A,_IAC0
               DEC _IAP0
               AND A,#0b00011111
               MOV _HEP0TXDAR,A
             _endasm;
             
             USB_Lib_Delay();
             
             _asm
               RLCA	_IAC0,4
               AND	A,#0b00000011
               MOV	_HEP0TXDAR,A
             _endasm;
              
             USB_Lib_Delay();
            
             _asm
               MOV	A,#_HPSR4-_HSR-1
               ADD	_IAP0,A
               NOP
               MOV	A,_IAC0
               AND	A,#0b00011111
               MOV	_HEP0TXDAR,A
             _endasm;
            
             USB_Lib_Delay();
            
             _asm
               MOV	A,#0b00000000
               MOV	_HEP0TXDAR,A
             _endasm;  
            
             USB_Lib_Delay();
             return;             
       }
       else if(_RT0XA3_Request_0X02 &&(TEMP_UREG==request_get_state) && _USB_HUB)
       {//. GetBusState
             unsigned char usb_byTemp;
             
             HEP0TXCTR = 1;
             USB_Lib_Delay();
             nHwLength = 0;
             
             usb_byTemp=HwIndexL;
             usb_byTemp--;
             if((252 & usb_byTemp))
             {
                M_BS0(USB_STATUS);
                return;          
             }                
             if(HwIndexL == 1)
             {//. Port1State
                _asm
                  MOV	A,_HPSTAR1
                _endasm;  
             }
             else if(HwIndexL == 2)
             {//. Port2State
                _asm
                  SHRA _HPSTAR1,2
                _endasm;
             }
             else if(HwIndexL == 3)
             {//. Port3State
                _asm
                  SHRA	_HPSTAR1,4
                _endasm;             
             }  
             else if(HwIndexL == 4)
             {//. Port3State
                _asm
                  RLCA	_HPSTAR1,3
                _endasm;             
             }  
             //. put_data
             _asm
               AND A,#0b00000011
             _endasm;  
             if(M_ISBC2(STATUS))
             {
                _asm
                  XOR A,#0b00000011
                _endasm;
             }
             _asm
              MOV _HEP0TXDAR,A
             _endasm;   
            
             USB_Lib_Delay();
             return;    
       }
       //. call macro _ADD_USB_RT0XA3_Request
       AddUsbRt0xA3Request();
       return;
    }
    else
    {
    //. call macro _ADD_USB_bmRequestType
       AddUsbBmRequestType();
       return;
    }
/*
UNKNOWN_bRequest:  
UNKNOWN_wValueL:
UNKNOWN_wIndex:
UNKNOWN_wLength:
UNDEFINE_COMMAND:
*/
    M_BS0(USB_STATUS);
    return;
    
}

void USB_Lib_Delay() using USBBANK
{
#ifndef ET_MCU_HI_SPEED
	_asm NOP _endasm;
#else 
	_asm NOP \r\n NOP \r\n NOP \r\n NOP _endasm;
#endif 

}

⌨️ 快捷键说明

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