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

📄 usbcore.lst

📁 针对飞利浦LPC214x的虚拟串口程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.53,  usbcore                                                               09/06/07  15:42:24  PAGE 1   


ARM COMPILER V2.53, COMPILATION OF MODULE usbcore
OBJECT MODULE PLACED IN .\Obj\usbcore.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe usbcore.c THUMB BROWSE DEFINE(MCB2140) DEBUG PRINT(.\LST\USBCORE.LST) TABS(4
                    -) OBJECT(.\Obj\usbcore.obj) 

stmt  level    source

    1          /*----------------------------------------------------------------------------
    2          *      U S B  -  K e r n e l
    3          *----------------------------------------------------------------------------
    4          *      Name:    usbcore.c
    5          *      Purpose: USB Core Module file for Philips LPC214x Family 
    6          *       Microprocessors
    7          *      Version: V1.04
    8          *----------------------------------------------------------------------------
    9          *      This software is supplied "AS IS" without any warranties, express, 
   10          *      implied or statutory, including but not limited to the implied 
   11          *      warranties of fitness for purpose, satisfactory quality and 
   12          *      noninfringement. Keil extends you a royalty-free right to reproduce and
   13          *      distribute executable files created using this software for use on 
   14          *      Philips LPC2xxx microcontroller devices only. Nothing else gives you the 
   15          *      right to use this software. 
   16          *
   17          *      Copyright (c) 2005 Keil Software.
   18          *       Modified by Philips Semiconductor
   19          *---------------------------------------------------------------------------*/
   20          #include "type.h"
   21          
   22          #include "usb.h"
   23          #include "usbcfg.h"
   24          #include "usbhw.h"
   25          #include "usbcore.h"
   26          #include "usbdesc.h"
   27          #include "vcomuser.h"
   28          
   29          
   30          WORD  USB_DeviceStatus;
   31          BYTE  USB_DeviceAddress;
   32          BYTE  USB_Configuration;
   33          DWORD USB_EndPointMask;
   34          DWORD USB_EndPointHalt;
   35          BYTE  USB_NumInterfaces;
   36          BYTE  USB_AltSetting[USB_IF_NUM];
   37          
   38          BYTE  EP0Buf[USB_MAX_PACKET0];
   39          
   40          USB_EP_DATA EP0Data;
   41          
   42          USB_SETUP_PACKET SetupPacket;
   43          
   44          
   45          /*
   46          *  Reset USB Core
   47          *    Parameters:      None
   48          *    Return Value:    None
   49          */
   50          
   51          void USB_ResetCore (void) {
   52   1          
   53   1          USB_DeviceStatus  = USB_POWER;
   54   1          USB_DeviceAddress = 0;
   55   1          USB_Configuration = 0;
   56   1          USB_EndPointMask  = 0x00010001;
   57   1          USB_EndPointHalt  = 0x00000000;
   58   1      }
ARM COMPILER V2.53,  usbcore                                                               09/06/07  15:42:24  PAGE 2   

   59          
   60          
   61          /*
   62          *  USB Request - Setup Stage
   63          *    (global SetupPacket)
   64          *    Parameters:      None
   65          *    Return Value:    None
   66          */
   67          
   68          void USB_SetupStage (void) {
   69   1          USB_ReadEP(0x00, (BYTE *)&SetupPacket);
   70   1      }
   71          
   72          
   73          /*
   74          *  USB Request - Data In Stage
   75          *    Parameters:      None (global EP0Data)
   76          *    Return Value:    None
   77          */
   78          
   79          void USB_DataInStage (void) {
   80   1          DWORD cnt;
   81   1          
   82   1          if (EP0Data.Count > USB_MAX_PACKET0) {
   83   2              cnt = USB_MAX_PACKET0;
   84   2          } else {
   85   2              cnt = EP0Data.Count;
   86   2          }
   87   1          cnt = USB_WriteEP(0x80, EP0Data.pData, cnt);
   88   1          EP0Data.pData += cnt;
   89   1          EP0Data.Count -= cnt;
   90   1      }
   91          
   92          
   93          /*
   94          *  USB Request - Data Out Stage
   95          *    Parameters:      None (global EP0Data)
   96          *    Return Value:    None
   97          */
   98          
   99          void USB_DataOutStage (void) {
  100   1          DWORD cnt;
  101   1          
  102   1          cnt = USB_ReadEP(0x00, EP0Data.pData);
  103   1          EP0Data.pData += cnt;
  104   1          EP0Data.Count -= cnt;
  105   1      }
  106          
  107          
  108          /*
  109          *  USB Request - Status In Stage
  110          *    Parameters:      None
  111          *    Return Value:    None
  112          */
  113          
  114          void USB_StatusInStage (void) {
  115   1          USB_WriteEP(0x80, NULL, 0);
  116   1      }
  117          
  118          
  119          /*
  120          *  USB Request - Status Out Stage
  121          *    Parameters:      None
  122          *    Return Value:    None
  123          */
  124          
ARM COMPILER V2.53,  usbcore                                                               09/06/07  15:42:24  PAGE 3   

  125          void USB_StatusOutStage (void) {
  126   1          USB_ReadEP(0x00, EP0Buf);
  127   1      }
  128          
  129          
  130          /*
  131          *  Get Status USB Request
  132          *    Parameters:      None (global SetupPacket)
  133          *    Return Value:    TRUE - Success, FALSE - Error
  134          */
  135          
  136          __inline BOOL USB_GetStatus (void) {
  137   1          DWORD n, m;
  138   1          
  139   1          switch (SetupPacket.bmRequestType.BM.Recipient) {
  140   2          case REQUEST_TO_DEVICE:
  141   2              EP0Data.pData = (BYTE *)&USB_DeviceStatus;
  142   2              USB_DataInStage();
  143   2              break;
  144   2          case REQUEST_TO_INTERFACE:
  145   2              if ((USB_Configuration != 0) && (SetupPacket.wIndex.WB.L < USB_NumInterfaces)) {
  146   3                  *((WORD *)EP0Buf) = 0;
  147   3                  EP0Data.pData = EP0Buf;
  148   3                  USB_DataInStage();
  149   3              } else {
  150   3                  return (FALSE);
  151   3              }
  152   2              break;
  153   2          case REQUEST_TO_ENDPOINT:
  154   2              n = SetupPacket.wIndex.WB.L & 0x8F;
  155   2              m = (n & 0x80) ? ((1 << 16) << n) : (1 << n);
  156   2              if (((USB_Configuration != 0) || ((n & 0x0F) == 0)) && (USB_EndPointMask & m)) {
  157   3                  *((WORD *)EP0Buf) = (USB_EndPointHalt & m) ? 1 : 0;
  158   3                  EP0Data.pData = EP0Buf;
  159   3                  USB_DataInStage();
  160   3              } else {
  161   3                  return (FALSE);
  162   3              }
  163   2              break;
  164   2          default:
  165   2              return (FALSE);
  166   2          }
  167   1          return (TRUE);
  168   1      }
  169          
  170          
  171          /*
  172          *  Set/Clear Feature USB Request
  173          *    Parameters:      sc:    0 - Clear, 1 - Set
  174          *                            None (global SetupPacket)
  175          *    Return Value:    TRUE - Success, FALSE - Error
  176          */
  177          
  178          __inline BOOL USB_SetClrFeature (DWORD sc) {
  179   1          DWORD n, m;
  180   1          
  181   1          switch (SetupPacket.bmRequestType.BM.Recipient) {
  182   2          case REQUEST_TO_DEVICE:
  183   2              if (SetupPacket.wValue.W == USB_FEATURE_REMOTE_WAKEUP) {
  184   3                  if (sc) {
  185   4                      USB_WakeUpCfg(1);
  186   4                      USB_DeviceStatus |=  USB_GETSTATUS_REMOTE_WAKEUP;
  187   4                  } else {
  188   4                      USB_WakeUpCfg(0);
  189   4                      USB_DeviceStatus &= ~USB_GETSTATUS_REMOTE_WAKEUP;
  190   4                  }
ARM COMPILER V2.53,  usbcore                                                               09/06/07  15:42:24  PAGE 4   

  191   3              } else {
  192   3                  return (FALSE);
  193   3              }
  194   2              break;
  195   2          case REQUEST_TO_INTERFACE:
  196   2              return (FALSE);
  197   2          case REQUEST_TO_ENDPOINT:
  198   2              n = SetupPacket.wIndex.WB.L & 0x8F;
  199   2              m = (n & 0x80) ? ((1 << 16) << n) : (1 << n);
  200   2              if ((USB_Configuration != 0) && ((n & 0x0F) != 0) && (USB_EndPointMask & m)) {
  201   3                  if (SetupPacket.wValue.W == USB_FEATURE_ENDPOINT_STALL) {
  202   4                      if (sc) {
  203   5                          USB_SetStallEP(n);
  204   5                          USB_EndPointHalt |=  m;
  205   5                      } else {
  206   5                          USB_ClrStallEP(n);
  207   5                          USB_EndPointHalt &= ~m;
  208   5                      }
  209   4                  } else {
  210   4                      return (FALSE);
  211   4                  }
  212   3              } else {
  213   3                  return (FALSE);
  214   3              }
  215   2              break;
  216   2          default:
  217   2              return (FALSE);
  218   2          }
  219   1          return (TRUE);
  220   1      }
  221          
  222          
  223          /*
  224          *  Get Descriptor USB Request
  225          *    Parameters:      None (global SetupPacket)
  226          *    Return Value:    TRUE - Success, FALSE - Error
  227          */
  228          
  229          __inline BOOL USB_GetDescriptor (void) {
  230   1          BYTE  *pD;
  231   1          DWORD len, n;
  232   1          
  233   1          switch (SetupPacket.bmRequestType.BM.Recipient) {
  234   2          case REQUEST_TO_DEVICE:
  235   2              switch (SetupPacket.wValue.WB.H) {
  236   3              case USB_DEVICE_DESCRIPTOR_TYPE:
  237   3                  EP0Data.pData = (BYTE *)USB_DeviceDescriptor;
  238   3                  len = USB_DEVICE_DESC_SIZE;
  239   3                  break;
  240   3              case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  241   3                  pD = (BYTE *)USB_ConfigDescriptor;
  242   3                  for (n = 0; n != SetupPacket.wValue.WB.L; n++) {
  243   4                      if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bLength != 0) {
  244   5                          pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
  245   5                      }
  246   4                  }
  247   3                  if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bLength == 0) {
  248   4                      return (FALSE);
  249   4                  }
  250   3                  EP0Data.pData = pD;
  251   3                  len = ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
  252   3                  break;
  253   3              case USB_STRING_DESCRIPTOR_TYPE:
  254   3                  EP0Data.pData = (BYTE *)USB_StringDescriptor + SetupPacket.wValue.WB.L;
  255   3                  len = ((USB_STRING_DESCRIPTOR *)EP0Data.pData)->bLength;
  256   3                  break;
ARM COMPILER V2.53,  usbcore                                                               09/06/07  15:42:24  PAGE 5   

  257   3              default:
  258   3                  return (FALSE);
  259   3              }
  260   2              break;
  261   2              case REQUEST_TO_INTERFACE:
  262   2                  switch (SetupPacket.wValue.WB.H) {
  263   3                  default:
  264   3                      return (FALSE);

⌨️ 快捷键说明

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