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

📄 usbcore.lst

📁 usb声卡,采用phlips LPC2148控制器.
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.50a,  usbcore                                                              27/03/06  17:22:53  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           *      This software is supplied "AS IS" without any warranties, express,
    9           *      implied or statutory, including but not limited to the implied
   10           *      warranties of fitness for purpose, satisfactory quality and
   11           *      noninfringement. Keil extends you a royalty-free right to reproduce
   12           *      and distribute executable files created using this software for use
   13           *      on Philips LPC2xxx microcontroller devices only. Nothing else gives
   14           *      you the right to use this software.
   15           *
   16           *      Copyright (c) 2005-2006 Keil Software.
   17           *---------------------------------------------------------------------------*/
   18          
   19          #include "type.h"
   20          
   21          #include "usb.h"
   22          #include "usbcfg.h"
   23          #include "usbhw.h"
   24          #include "usbcore.h"
   25          #include "usbdesc.h"
   26          #include "usbuser.h"
   27          
   28          #if (USB_AUDIO)
   29          #include "audio.h"
   30          #include "adcuser.h"
   31          #endif
   32          
   33          #if (USB_HID)
               #include "hid.h"
               #include "hiduser.h"
               #endif
   37          
   38          #if (USB_MSC)
               #include "msc.h"
               #include "mscuser.h"
               #endif
   42          
   43          
   44          WORD  USB_DeviceStatus;
   45          BYTE  USB_DeviceAddress;
   46          BYTE  USB_Configuration;
   47          DWORD USB_EndPointMask;
   48          DWORD USB_EndPointHalt;
   49          BYTE  USB_NumInterfaces;
   50          BYTE  USB_AltSetting[USB_IF_NUM];
   51          
   52          BYTE  EP0Buf[USB_MAX_PACKET0];
   53          
   54          
   55          USB_EP_DATA EP0Data;
   56          
   57          USB_SETUP_PACKET SetupPacket;
   58          
ARM COMPILER V2.50a,  usbcore                                                              27/03/06  17:22:53  PAGE 2   

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

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

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

  257   4                  if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bLength != 0) {
  258   5                    pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
  259   5                  }
  260   4                }
  261   3                if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bLength == 0) {
  262   4                  return (FALSE);
  263   4                }
  264   3                EP0Data.pData = pD;
  265   3                len = ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
  266   3                break;
  267   3              case USB_STRING_DESCRIPTOR_TYPE:
  268   3                EP0Data.pData = (BYTE *)USB_StringDescriptor + SetupPacket.wValue.WB.L;
  269   3                len = ((USB_STRING_DESCRIPTOR *)EP0Data.pData)->bLength;
  270   3                break;
  271   3              default:
  272   3                return (FALSE);
  273   3            }
  274   2            break;
  275   2          case REQUEST_TO_INTERFACE:

⌨️ 快捷键说明

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