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

📄 usbcore.lst

📁 USB存储器
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.42b,  usbcore                                                              02/01/06  23:45:15  PAGE 1   


ARM COMPILER V2.42b, 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.03
    7           *----------------------------------------------------------------------------
    8           *      This file is part of the uVision/ARM development tools.
    9           *      Copyright (c) 2005 Keil Software. All rights reserved.
   10           *---------------------------------------------------------------------------*/
   11          
   12          #include "type.h"
   13          
   14          #include "usb.h"
   15          #include "usbcfg.h"
   16          #include "usbhw.h"
   17          #include "usbcore.h"
   18          #include "usbdesc.h"
   19          #include "usbuser.h"
   20          
   21          #if (USB_AUDIO)
               #include "audio.h"
               #include "adcuser.h"
               #endif
   25          
   26          #if (USB_HID)
               #include "hid.h"
               #include "hiduser.h"
               #endif
   30          
   31          #if (USB_MSC)
   32          #include "msc.h"
   33          #include "mscuser.h"
   34          #endif
   35          
   36          
   37          WORD  USB_DeviceStatus;
   38          BYTE  USB_DeviceAddress;
   39          BYTE  USB_Configuration;
   40          DWORD USB_EndPointMask;
   41          DWORD USB_EndPointHalt;
   42          BYTE  USB_NumInterfaces;
   43          BYTE  USB_AltSetting[USB_IF_NUM];
   44          
   45          BYTE  EP0Buf[USB_MAX_PACKET0];
   46          
   47          
   48          USB_EP_DATA EP0Data;
   49          
   50          USB_SETUP_PACKET SetupPacket;
   51          
   52          
   53          /*
   54           *  Reset USB Core
   55           *    Parameters:      None
   56           *    Return Value:    None
   57           */
   58          
ARM COMPILER V2.42b,  usbcore                                                              02/01/06  23:45:15  PAGE 2   

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

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

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

  257   3                EP0Data.pData = pD;
  258   3                len = ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
  259   3                break;
  260   3              case USB_STRING_DESCRIPTOR_TYPE:
  261   3                EP0Data.pData = (BYTE *)USB_StringDescriptor + SetupPacket.wValue.WB.L;
  262   3                len = ((USB_STRING_DESCRIPTOR *)EP0Data.pData)->bLength;
  263   3                break;
  264   3              default:
  265   3                return (FALSE);
  266   3            }
  267   2            break;
  268   2          case REQUEST_TO_INTERFACE:
  269   2            switch (SetupPacket.wValue.WB.H) {
  270   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;

⌨️ 快捷键说明

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