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

📄 usbcore.lst

📁 LPC214X例程全包括,代码大全
💻 LST
📖 第 1 页 / 共 5 页
字号:
  276   1        return (TRUE);
  277   1      }
  278          
  279          
  280          /*
  281           *  Set Configuration USB Request
  282           *    Parameters:      None (global SetupPacket)
  283           *    Return Value:    TRUE - Success, FALSE - Error
  284           */
  285          
  286          __inline BOOL USB_SetConfiguration (void) {
  287   1        USB_COMMON_DESCRIPTOR *pD;
  288   1        DWORD                  alt, n, m;
  289   1      
  290   1        if (SetupPacket.wValue.WB.L) {
  291   2          pD = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
  292   2          while (pD->bLength) {
  293   3            switch (pD->bDescriptorType) {
  294   4              case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  295   4                if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue == SetupPacket.wValue.WB.L) {
  296   5                  USB_Configuration = SetupPacket.wValue.WB.L;
  297   5                  USB_NumInterfaces = ((USB_CONFIGURATION_DESCRIPTOR *)pD)->bNumInterfaces;
  298   5                  for (n = 0; n < USB_IF_NUM; n++) {
  299   6                    USB_AltSetting[n] = 0;
  300   6                  }
  301   5                  for (n = 1; n < 16; n++) {
  302   6                    if (USB_EndPointMask & (1 << n)) {
  303   7                      USB_DisableEP(n);
  304   7                    }
  305   6                    if (USB_EndPointMask & ((1 << 16) << n)) {
  306   7                      USB_DisableEP(n | 0x80);
  307   7                    }
  308   6                  }
  309   5                  USB_EndPointMask = 0x00010001;
  310   5                  USB_EndPointHalt = 0x00000000;
  311   5                  USB_Configure(TRUE);
  312   5                  if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bmAttributes & USB_CONFIG_SELF_POWERED) {
  313   6                    USB_DeviceStatus |=  USB_GETSTATUS_SELF_POWERED;
  314   6                  } else {
  315   6                    USB_DeviceStatus &= ~USB_GETSTATUS_SELF_POWERED;
  316   6                  }
  317   5                } else {
  318   5                  (BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
  319   5                  continue;
  320   5                }
  321   4                break;
  322   4              case USB_INTERFACE_DESCRIPTOR_TYPE:
ARM COMPILER V2.50a,  usbcore                                                              14/02/06  09:59:07  PAGE 6   

  323   4                alt = ((USB_INTERFACE_DESCRIPTOR *)pD)->bAlternateSetting;
  324   4                break;
  325   4              case USB_ENDPOINT_DESCRIPTOR_TYPE:
  326   4                if (alt == 0) {
  327   5                  n = ((USB_ENDPOINT_DESCRIPTOR *)pD)->bEndpointAddress & 0x8F;
  328   5                  m = (n & 0x80) ? ((1 << 16) << n) : (1 << n);
  329   5                  USB_EndPointMask |= m;
  330   5                  USB_ConfigEP((USB_ENDPOINT_DESCRIPTOR *)pD);
  331   5                  USB_EnableEP(n);
  332   5                  USB_ResetEP(n);
  333   5                }
  334   4                break;
  335   4            }
  336   3            (BYTE *)pD += pD->bLength;
  337   3          }
  338   2        }
  339   1        else {
  340   2          USB_Configuration = 0;
  341   2          for (n = 1; n < 16; n++) {
  342   3            if (USB_EndPointMask & (1 << n)) {
  343   4              USB_DisableEP(n);
  344   4            }
  345   3            if (USB_EndPointMask & ((1 << 16) << n)) {
  346   4              USB_DisableEP(n | 0x80);
  347   4            }
  348   3          }
  349   2          USB_EndPointMask  = 0x00010001;
  350   2          USB_EndPointHalt  = 0x00000000;
  351   2          USB_Configure(FALSE);
  352   2        }
  353   1      
  354   1        if (USB_Configuration == SetupPacket.wValue.WB.L) {
  355   2          return (TRUE);
  356   2        } else {
  357   2          return (FALSE);
  358   2        }
  359   1      }
  360          
  361          
  362          /*
  363           *  Set Interface USB Request
  364           *    Parameters:      None (global SetupPacket)
  365           *    Return Value:    TRUE - Success, FALSE - Error
  366           */
  367          
  368          __inline BOOL USB_SetInterface (void) {
  369   1        USB_COMMON_DESCRIPTOR *pD;
  370   1        DWORD                  ifn, alt, old, msk, n, m;
  371   1        BOOL                   set;
  372   1      
  373   1        if (USB_Configuration == 0) return (FALSE);
  374   1      
  375   1        set = FALSE;
  376   1        pD  = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
  377   1        while (pD->bLength) {
  378   2          switch (pD->bDescriptorType) {
  379   3            case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  380   3              if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue != USB_Configuration) {
  381   4                (BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
  382   4                continue;
  383   4              }
  384   3              break;
  385   3            case USB_INTERFACE_DESCRIPTOR_TYPE:
  386   3              ifn = ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber;
  387   3              alt = ((USB_INTERFACE_DESCRIPTOR *)pD)->bAlternateSetting;
  388   3              msk = 0;
ARM COMPILER V2.50a,  usbcore                                                              14/02/06  09:59:07  PAGE 7   

  389   3              if ((ifn == SetupPacket.wIndex.WB.L) && (alt == SetupPacket.wValue.WB.L)) {
  390   4                set = TRUE;
  391   4                old = USB_AltSetting[ifn];
  392   4                USB_AltSetting[ifn] = (BYTE)alt;
  393   4              }
  394   3              break;
  395   3            case USB_ENDPOINT_DESCRIPTOR_TYPE:
  396   3              if (ifn == SetupPacket.wIndex.WB.L) {
  397   4                n = ((USB_ENDPOINT_DESCRIPTOR *)pD)->bEndpointAddress & 0x8F;
  398   4                m = (n & 0x80) ? ((1 << 16) << n) : (1 << n);
  399   4                if (alt == SetupPacket.wValue.WB.L) {
  400   5                  USB_EndPointMask |=  m;
  401   5                  USB_EndPointHalt &= ~m;
  402   5                  USB_ConfigEP((USB_ENDPOINT_DESCRIPTOR *)pD);
  403   5                  USB_EnableEP(n);
  404   5                  USB_ResetEP(n);
  405   5                  msk |= m;
  406   5                }
  407   4                else if ((alt == old) && ((msk & m) == 0)) {
  408   5                  USB_EndPointMask &= ~m;
  409   5                  USB_EndPointHalt &= ~m;
  410   5                  USB_DisableEP(n);
  411   5                }
  412   4              }
  413   3              break;
  414   3          }
  415   2          (BYTE *)pD += pD->bLength;
  416   2        }
  417   1        return (set);
  418   1      }
  419          
  420          
  421          /*
  422           *  USB Endpoint 0 Event Callback
  423           *    Parameter:       event
  424           */
  425          
  426          void USB_EndPoint0 (DWORD event) {
  427   1      
  428   1        BYTE UARTSettingCmd, UARTSettingData;
  429   1      
  430   1        switch (event) {
  431   2          case USB_EVT_SETUP:
  432   2            USB_SetupStage();
  433   2            USB_DirCtrlEP(SetupPacket.bmRequestType.BM.Dir);
  434   2            EP0Data.Count = SetupPacket.wLength;
  435   2            switch (SetupPacket.bmRequestType.BM.Type) {
  436   3      
  437   3              case REQUEST_STANDARD:
  438   3                switch (SetupPacket.bRequest) {
  439   4      
  440   4                  case USB_REQUEST_GET_STATUS:
  441   4                    if (!USB_GetStatus()) {
  442   5                      goto stall_i;
  443   5                    }
  444   4                    break;
  445   4      
  446   4                  case USB_REQUEST_CLEAR_FEATURE:
  447   4                    if (!USB_SetClrFeature(0)) {
  448   5                      goto stall_i;
  449   5                    }
  450   4                    USB_StatusInStage();
  451   4      #if USB_FEATURE_EVENT
                             USB_Feature_Event();
               #endif
  454   4                    break;              
ARM COMPILER V2.50a,  usbcore                                                              14/02/06  09:59:07  PAGE 8   

  455   4      
  456   4                  case USB_REQUEST_SET_FEATURE:
  457   4                    if (!USB_SetClrFeature(1)) {
  458   5                      goto stall_i;
  459   5                    }
  460   4                    USB_StatusInStage();
  461   4      #if USB_FEATURE_EVENT
                             USB_Feature_Event();
               #endif
  464   4                    break;              
  465   4      
  466   4                  case USB_REQUEST_SET_ADDRESS:
  467   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  468   5                      case REQUEST_TO_DEVICE:
  469   5                        USB_DeviceAddress = 0x80 | SetupPacket.wValue.WB.L;
  470   5                        USB_StatusInStage();
  471   5                        break;
  472   5                      default:
  473   5                        goto stall_i;
  474   5                    }
  475   4                    break;
  476   4      
  477   4                  case USB_REQUEST_GET_DESCRIPTOR:
  478   4                    if (!USB_GetDescriptor()) {
  479   5                      goto stall_i;
  480   5                    }                  
  481   4                    break;              
  482   4      
  483   4                  case USB_REQUEST_SET_DESCRIPTOR:
  484   4      /*stall_o:*/  USB_SetStallEP(0x00);
  485   4                    EP0Data.Count = 0;
  486   4                    break;
  487   4      
  488   4                  case USB_REQUEST_GET_CONFIGURATION:
  489   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  490   5                      case REQUEST_TO_DEVICE:
  491   5                        EP0Data.pData = &USB_Configuration;
  492   5                        USB_DataInStage();
  493   5                        break;
  494   5                      default:
  495   5                        goto stall_i;
  496   5                    }
  497   4                    break;
  498   4      
  499   4                  case USB_REQUEST_SET_CONFIGURATION:
  500   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  501   5                      case REQUEST_TO_DEVICE:
  502   5                        if (!USB_SetConfiguration()) {
  503   6                          goto stall_i;
  504   6                        }
  505   5                        USB_StatusInStage();
  506   5      #if USB_CONFIGURE_EVENT
  507   5                        USB_Configure_Event();
  508   5      #endif
  509   5                        break;
  510   5                      default:
  511   5                        goto stall_i;
  512   5                    }
  513   4                    break;              
  514   4      
  515   4                  case USB_REQUEST_GET_INTERFACE:
  516   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  517   5                      case REQUEST_TO_INTERFACE:
  518   5                        if ((USB_Configuration != 0) && 
  519   5                            (SetupPacket.wIndex.WB.L < USB_NumInterfaces)) {
  520   6                          EP0Data.pData = USB_AltSetting + SetupPacket.wIndex.WB.L;
ARM COMPILER V2.50a,  usbcore                                                              14/02/06  09:59:07  PAGE 9   

  521   6                          USB_DataInStage();
  522   6                        } else {
  523   6                          goto stall_i;
  524   6                        }
  525   5                        break;
  526   5                      default:
  527   5                        goto stall_i;
  528   5                    }
  529   4                    break;              
  530   4      
  531   4                  case USB_REQUEST_SET_INTERFACE:
  532   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  533   5                      case REQUEST_TO_INTERFACE:
  534   5                        if (!USB_SetInterface()) {
  535   6                          goto stall_i;
  536   6                        }
  537   5                        USB_StatusInStage();
  538   5      #if USB_INTERFACE_EVENT
                                 USB_Interface_Event();
               #endif
  541   5                        break;
  542   5                      default:
  543   5                        goto stall_i;
  544   5                    }
  545   4                    break;              
  546   4      
  547   4                  default:
  548   4                    goto stall_i;
  549   4      
  550   4                }
  551   3                break;
  552   3      
  553   3              case REQUEST_CLASS:
  554   3      #if USB_CLASS
  555   3                switch (SetupPacket.bmRequestType.BM.Recipient) {
  556   4                  case REQUEST_TO_INTERFACE:
  557   4      //            break;              
  558   4                  default:
  559   4                    goto stall_i;
  560   4                }              

⌨️ 快捷键说明

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