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

📄 usbcore.lst

📁 LPC214X例程全包括,代码大全
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.50a,  usbcore                                                              14/02/06  09:59:07  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 DEFINE(MCB2140) DEBUG PRINT(.\LST\USBCORE.LST) TABS(4) OBJEC
                    -T(.\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.50a,  usbcore                                                              14/02/06  09:59:07  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.50a,  usbcore                                                              14/02/06  09:59:07  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.50a,  usbcore                                                              14/02/06  09:59:07  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.50a,  usbcore                                                              14/02/06  09:59:07  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);
  265   3            }
  266   2            break;
  267   2          default:
  268   2            return (FALSE);
  269   2        }
  270   1      
  271   1        if (EP0Data.Count > len) {
  272   2          EP0Data.Count = len;
  273   2        }
  274   1        USB_DataInStage();
  275   1      

⌨️ 快捷键说明

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