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

📄 usbcore.lst

📁 USB高性能读卡器源码。可灵活增删功能。
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.51a,  usbcore                                                              16/08/06  09:38:30  PAGE 1   


ARM COMPILER V2.51a, COMPILATION OF MODULE usbcore
OBJECT MODULE PLACED IN usbcore.OBJ
COMPILER INVOKED BY: D:\Program Files\ARM\BIN\CA.exe usbcore.c THUMB DEBUG PRINT(.\LST\USBCORE.LST) TABS(4) 

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.10
    7           *----------------------------------------------------------------------------
    8           *      This file is part of the uVision/ARM development tools.
    9           *      Copyright (c) 2005-2006 Keil Software. All rights reserved.
   10           *      This software may only be used under the terms of a valid, current,
   11           *      end user licence from KEIL for a compatible version of KEIL software
   12           *      development tools. Nothing else gives you the right to use it.
   13           *---------------------------------------------------------------------------*/
   14          
   15          #include "type.h"
   16          
   17          #include "usb.h"
   18          #include "usbcfg.h"
   19          #include "usbhw.h"
   20          #include "usbcore.h"
   21          #include "usbdesc.h"
   22          #include "usbuser.h"
   23          
   24          #if (USB_AUDIO)
               #include "audio.h"
               #include "adcuser.h"
               #endif
   28          
   29          #if (USB_HID)
               #include "hid.h"
               #include "hiduser.h"
               #endif
   33          
   34          #if (USB_MSC)
   35          #include "msc.h"
   36          #include "mscuser.h"
   37          #endif
   38          
   39          
   40          WORD  USB_DeviceStatus;
   41          BYTE  USB_DeviceAddress;
   42          BYTE  USB_Configuration;
   43          DWORD USB_EndPointMask;
   44          DWORD USB_EndPointHalt;
   45          BYTE  USB_NumInterfaces;
   46          BYTE  USB_AltSetting[USB_IF_NUM];
   47          
   48          BYTE  EP0Buf[USB_MAX_PACKET0];
   49          
   50          
   51          USB_EP_DATA EP0Data;
   52          
   53          USB_SETUP_PACKET SetupPacket;
   54          
   55          
   56          /*
   57           *  Reset USB Core
   58           *    Parameters:      None
   59           *    Return Value:    None
ARM COMPILER V2.51a,  usbcore                                                              16/08/06  09:38:30  PAGE 2   

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

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

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

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

⌨️ 快捷键说明

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