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

📄 usb_lib.c

📁 使用ETOM芯片进行无线收发
💻 C
📖 第 1 页 / 共 4 页
字号:
      }            if(!nHwLength)      {         HEP0TXCTR = 0;         M_NOP;      }                        //. skip_hub_nodata_set      M_BC1(USB_STATUS);      M_BC0(USB_STATUS);            //_asm       //  MOV A,#_HbmRequestType      //_endasm;      StageOne();      if(M_ISBS0(USB_STATUS))        {//. h_stall         M_BS1(HEP0RXCSR);         M_NOP;         M_BS1(HEP0TXCSR);         M_NOP;      }      else      {//. next_h_inout         goto Next_H_Inout;      }   }   else   {//. h_out_package      HEP0RXTR = 254; //#0b11111110      M_NOP;         }    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;           }  #endif     #if(_USB_DIS_ANO_INT)      M_ENI;  #endif   return;}#endif//////////////////////////////////////////////////////////#if _USB_HUB//. HIN0_ISRvoid Int_Hint0Ine() interrupt INT_HINT0INE using USBBANK{  #if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)   UsbIntPre();  #endif      HINTR = 251;// #0b11111011   M_NOP;    Back_To_Mloop:   #if(_USB_AUTO_STORE_IAP0)   {      IAP0=STACK_IAP0;      M_NOP;           }  #endif     #if(_USB_DIS_ANO_INT)      M_ENI;  #endif  return;       }#endif#if _USB_HUB//. HTX0_ISRvoid Int_Hint0Txe() interrupt INT_HINT0TXE using USBBANK{  #if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)   UsbIntPre();  #endif      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;           }  #endif     #if(_USB_DIS_ANO_INT)      M_ENI;  #endif   return;}#endif#if _USB_HUB//. HPSTSC_ISRvoid Int_HpstscInte() interrupt INT_HPSTSCINTE using USBBANK{  #if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)   UsbIntPre();  #endif      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;           }  #endif     #if(_USB_DIS_ANO_INT)      M_ENI;  #endif   return;    }#endif//. SOF_ISRvoid Int_SofInte() interrupt INT_SOFINTE using USBBANK{#if(_USB_AUTO_SET_BANK ||_USB_AUTO_STORE_IAP0)   UsbIntPre();#endif      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;           }#endif   #if(_USB_DIS_ANO_INT)      M_ENI;#endif   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;}// SEARCH_CHANGE_PORTvoid 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);               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);

⌨️ 快捷键说明

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