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

📄 usbcore.lst

📁 将LPC2148通过自带的USB口配置为USB存储设备.
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.50a,  usbcore                                                              04/04/06  11:13:56  PAGE 1   


ARM COMPILER V2.50a, COMPILATION OF MODULE usbcore
OBJECT MODULE PLACED IN .\Obj\usbcore.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe usbcore.c THUMB 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
    6           *      Version: V1.05
    7           *---------------------------------------------------------------------------*/
    8          
    9          #include "type.h"
   10          
   11          #include "usb.h"
   12          #include "usbcfg.h"
   13          #include "usbhw.h"
   14          #include "usbcore.h"
   15          #include "usbdesc.h"
   16          #include "usbuser.h"
   17          
   18          #if (USB_AUDIO)
               #include "audio.h"
               #include "adcuser.h"
               #endif
   22          
   23          #if (USB_HID)
               #include "hid.h"
               #include "hiduser.h"
               #endif
   27          
   28          #if (USB_MSC)
   29          #include "msc.h"
   30          #include "mscuser.h"
   31          #endif
   32          
   33          
   34          WORD  USB_DeviceStatus;
   35          BYTE  USB_DeviceAddress;
   36          BYTE  USB_Configuration;
   37          DWORD USB_EndPointMask;
   38          DWORD USB_EndPointHalt;
   39          BYTE  USB_NumInterfaces;
   40          BYTE  USB_AltSetting[USB_IF_NUM];
   41          
   42          BYTE  EP0Buf[USB_MAX_PACKET0];
   43          
   44          
   45          USB_EP_DATA EP0Data;
   46          
   47          USB_SETUP_PACKET SetupPacket;
   48          
   49          
   50          /*
   51           *  Reset USB Core
   52           *    Parameters:      None
   53           *    Return Value:    None
   54           */
   55          
   56          void USB_ResetCore (void) {
   57   1      
   58   1        USB_DeviceStatus  = USB_POWER;
ARM COMPILER V2.50a,  usbcore                                                              04/04/06  11:13:56  PAGE 2   

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

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

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

  257   3              case USB_STRING_DESCRIPTOR_TYPE:
  258   3                EP0Data.pData = (BYTE *)USB_StringDescriptor + SetupPacket.wValue.WB.L;
  259   3                len = ((USB_STRING_DESCRIPTOR *)EP0Data.pData)->bLength;
  260   3                break;
  261   3              default:
  262   3                return (FALSE);
  263   3            }
  264   2            break;
  265   2          case REQUEST_TO_INTERFACE:
  266   2            switch (SetupPacket.wValue.WB.H) {
  267   3      #if USB_HID
                       case HID_HID_DESCRIPTOR_TYPE:
                         if (SetupPacket.wIndex.WB.L != USB_HID_IF_NUM) {
                           return (FALSE);    /* Only Single HID Interface is supported */
                         }
                         EP0Data.pData = (BYTE *)USB_ConfigDescriptor + HID_DESC_OFFSET;
                         len = HID_DESC_SIZE;
                         break;
                       case HID_REPORT_DESCRIPTOR_TYPE:
                         if (SetupPacket.wIndex.WB.L != USB_HID_IF_NUM) {

⌨️ 快捷键说明

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