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

📄 usbhw.lst

📁 针对飞利浦LPC214x的虚拟串口程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.53,  usbhw                                                                 09/06/07  15:42:23  PAGE 1   


ARM COMPILER V2.53, COMPILATION OF MODULE usbhw
OBJECT MODULE PLACED IN .\Obj\usbhw.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe usbhw.c THUMB BROWSE DEFINE(MCB2140) DEBUG PRINT(.\LST\USBHW.LST) TABS(4) OB
                    -JECT(.\Obj\usbhw.obj) 

stmt  level    source

    1          /*----------------------------------------------------------------------------
    2          *      U S B  -  K e r n e l
    3          *----------------------------------------------------------------------------
    4          *      Name:    usbhw.c
    5          *      Purpose: USB Hardware layer 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 <LPC214x.h>                        /* LPC214x definitions */
   21          
   22          #include "type.h"
   23          #include "usb.h"
   24          #include "usbcfg.h"
   25          #include "usbreg.h"
   26          #include "usbhw.h"
   27          #include "usbcore.h"
   28          #include "vcomuser.h"
   29          
   30          /*
   31          *  Get Endpoint Address
   32          *    Parameters:      EPNum: Endpoint Number
   33          *                       EPNum.0..3: Address
   34          *                       EPNum.7:    Dir
   35          *    Return Value:    Endpoint Physical Address
   36          */
   37          
   38          DWORD EPAdr (DWORD EPNum) {
   39   1          DWORD val;
   40   1          
   41   1          val = (EPNum & 0x0F) << 1;
   42   1          if (EPNum & 0x80) {
   43   2              val += 1;
   44   2          }
   45   1          return (val);
   46   1      }
   47          
   48          
   49          /*
   50          *  Write Command
   51          *    Parameters:      cmd:   Command
   52          *    Return Value:    None
   53          */
   54          
   55          void WrCmd (DWORD cmd) {
   56   1          
   57   1          CMD_CODE = cmd;
   58   1          while ((DEV_INT_STAT & CCEMTY_INT) == 0);    
ARM COMPILER V2.53,  usbhw                                                                 09/06/07  15:42:23  PAGE 2   

   59   1          DEV_INT_CLR = CCEMTY_INT;
   60   1      }
   61          
   62          
   63          /*
   64          *  Write Command Data
   65          *    Parameters:      cmd:   Command
   66          *                     val:   Data
   67          *    Return Value:    None
   68          */
   69          
   70          void WrCmdDat (DWORD cmd, DWORD val) {
   71   1          
   72   1          CMD_CODE = cmd;
   73   1          while ((DEV_INT_STAT & CCEMTY_INT) == 0);    
   74   1          DEV_INT_CLR = CCEMTY_INT;
   75   1          CMD_CODE = val;
   76   1          while ((DEV_INT_STAT & CCEMTY_INT) == 0);    
   77   1          DEV_INT_CLR = CCEMTY_INT;
   78   1      }
   79          
   80          
   81          /*
   82          *  Read Command Data
   83          *    Parameters:      cmd:   Command
   84          *    Return Value:    Data Value
   85          */
   86          
   87          DWORD RdCmdDat (DWORD cmd) {
   88   1          DWORD val;
   89   1          
   90   1          DEV_INT_CLR = CDFULL_INT; 
   91   1          CMD_CODE = cmd;
   92   1          while ((DEV_INT_STAT & CCEMTY_INT) == 0);    
   93   1          DEV_INT_CLR = CCEMTY_INT; 
   94   1          while ((DEV_INT_STAT & CDFULL_INT) == 0);    
   95   1          val = CMD_DATA;
   96   1          DEV_INT_CLR = CDFULL_INT;
   97   1          return (val);
   98   1      }
   99          
  100          
  101          /*
  102          *  USB Initialize Function
  103          *    Return Value:    None
  104          */
  105          
  106          void USB_Init (void) {
  107   1          
  108   1          PCONP |= 0x80000000;                      /* Turn On USB PCLK */
  109   1          
  110   1          // Configure 48MHz USB Clock;  FOsc = 12MHz, M = 4, P = 2
  111   1          PLL48CFG  = 0x23;                         /* M = 4, P = 2 */
  112   1          PLL48CON  = PLLCON_PLLE;                  /* PLL Enable */
  113   1          PLL48FEED = 0xAA;                         /* Feed Sequence 1 */
  114   1          PLL48FEED = 0x55;                         /* Feed Sequence 2 */
  115   1          
  116   1          while ((PLL48STAT & PLLSTAT_PLOCK) == 0); /* Wait for PLL Lock */
  117   1          
  118   1          PLL48CON  = PLLCON_PLLE | PLLCON_PLLC;    /* PLL Enable & Connect */
  119   1          PLL48FEED = 0xAA;                         /* Feed Sequence 1 */
  120   1          PLL48FEED = 0x55;                         /* Feed Sequence 2 */
  121   1          
  122   1          VICVectAddr0 = (unsigned long)USB_ISR;    /* USB Interrupt -> Vector 0 */
  123   1          VICVectCntl0 = 0x20 | 22;                 /* USB Interrupt -> IRQ Slot 0 */
  124   1          VICIntEnable = 1 << 22;                   /* Enable USB Interrupt */
ARM COMPILER V2.53,  usbhw                                                                 09/06/07  15:42:23  PAGE 3   

  125   1          
  126   1          DEV_INT_EN = DEV_STAT_INT;                /* Enable Device Status Interrupt */
  127   1          
  128   1      #if 1 /* Partial Manual Reset */
  129   1          USB_Reset();
  130   1          USB_SetAddress(0);
  131   1      #endif
  132   1      }
  133          
  134          
  135          /*
  136          *  USB Connect Function
  137          *    Parameters:      con:   Connect/Disconnect
  138          *    Return Value:    None
  139          */
  140          
  141          void USB_Connect (BOOL con) {
  142   1          WrCmdDat(CMD_SET_DEV_STAT, DAT_WR_BYTE(con ? DEV_CON : 0));
  143   1      }
  144          
  145          
  146          /*
  147          *  USB Reset Function
  148          *    Return Value:    None
  149          */
  150          
  151          void USB_Reset (void) {
  152   1          
  153   1          EP_INDEX = 0;
  154   1          MAXPACKET_SIZE = USB_MAX_PACKET0;
  155   1          EP_INDEX = 1;
  156   1          MAXPACKET_SIZE = USB_MAX_PACKET0;
  157   1          while ((DEV_INT_STAT & EP_RLZED_INT) == 0);
  158   1          
  159   1          EP_INT_CLR  = 0xFFFFFFFF;
  160   1          EP_INT_EN   = 0xFFFFFFFF;
  161   1          DEV_INT_CLR = 0xFFFFFFFF;
  162   1          DEV_INT_EN  = DEV_STAT_INT    | EP_SLOW_INT    | 
  163   1              (USB_SOF_EVENT   ? FRAME_INT : 0) |
  164   1              (USB_ERROR_EVENT ? ERR_INT   : 0);
  165   1      }
  166          
  167          
  168          /*
  169          *  USB Suspend Function
  170          *    Return Value:    None
  171          */
  172          
  173          void USB_Suspend (void) {
  174   1          // Performed by Hardware
  175   1      }
  176          
  177          
  178          /*
  179          *  USB Resume Function
  180          *    Return Value:    None
  181          */
  182          
  183          void USB_Resume (void) {
  184   1          // Performed by Hardware
  185   1      }
  186          
  187          
  188          /*
  189          *  USB Remote Wakeup Function
  190          *    Return Value:    None
ARM COMPILER V2.53,  usbhw                                                                 09/06/07  15:42:23  PAGE 4   

  191          */
  192          
  193          void USB_WakeUp (void) {
  194   1          
  195   1          if (USB_DeviceStatus & USB_GETSTATUS_REMOTE_WAKEUP) {
  196   2              WrCmdDat(CMD_SET_DEV_STAT, DAT_WR_BYTE(DEV_CON));
  197   2          }
  198   1      }
  199          
  200          
  201          /*
  202          *  USB Remote Wakeup Configuration Function
  203          *    Parameters:      cfg:   Enable/Disable
  204          *    Return Value:    None
  205          */
  206          
  207          void USB_WakeUpCfg (BOOL cfg) {
  208   1          cfg;  // Not needed
  209   1      }
  210          
  211          
  212          /*
  213          *  USB Set Address Function
  214          *    Parameters:      adr:   USB Address
  215          *    Return Value:    None
  216          */
  217          
  218          void USB_SetAddress (BYTE adr) {
  219   1          WrCmdDat(CMD_SET_ADDR, DAT_WR_BYTE(DEV_EN | adr)); /* Don't wait for next */
  220   1          WrCmdDat(CMD_SET_ADDR, DAT_WR_BYTE(DEV_EN | adr)); /*  Setup Status Phase */
  221   1      }
  222          
  223          
  224          /*
  225          *  USB Configure Function
  226          *    Parameters:      cfg:   Configure/Deconfigure
  227          *    Return Value:    None
  228          */
  229          
  230          void USB_Configure (BOOL cfg) {
  231   1          
  232   1          WrCmdDat(CMD_CFG_DEV, DAT_WR_BYTE(cfg ? CONF_DVICE : 0));
  233   1          
  234   1          REALIZE_EP = 0x00000003;
  235   1          while ((DEV_INT_STAT & EP_RLZED_INT) == 0);
  236   1          DEV_INT_CLR = EP_RLZED_INT;
  237   1      }
  238          
  239          
  240          /*
  241          *  Configure USB Endpoint
  242          *    Parameters:      pEPD:  Pointer to Endpoint Descriptor
  243          *    Return Value:    None
  244          */
  245          
  246          void USB_ConfigEP (USB_ENDPOINT_DESCRIPTOR *pEPD) {
  247   1          DWORD num;
  248   1          
  249   1          num = EPAdr(pEPD->bEndpointAddress);
  250   1          REALIZE_EP |= (1 << num);
  251   1          EP_INDEX = num;
  252   1          MAXPACKET_SIZE = pEPD->wMaxPacketSize;
  253   1          while ((DEV_INT_STAT & EP_RLZED_INT) == 0);
  254   1          DEV_INT_CLR = EP_RLZED_INT;
  255   1      }
  256          
ARM COMPILER V2.53,  usbhw                                                                 09/06/07  15:42:23  PAGE 5   

  257          
  258          /*
  259          *  Set Direction for USB Control Endpoint
  260          *    Parameters:      dir:   Out (dir == 0), In (dir <> 0)
  261          *    Return Value:    None
  262          */
  263          
  264          void USB_DirCtrlEP (BYTE dir) {
  265   1          dir;  // Not needed
  266   1      }
  267          
  268          
  269          /*
  270          *  Enable USB Endpoint
  271          *    Parameters:      EPNum: Endpoint Number
  272          *                       EPNum.0..3: Address
  273          *                       EPNum.7:    Dir
  274          *    Return Value:    None
  275          */
  276          
  277          void USB_EnableEP (BYTE EPNum) {
  278   1          WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(0));
  279   1      }
  280          
  281          
  282          /*
  283          *  Disable USB Endpoint
  284          *    Parameters:      EPNum: Endpoint Number
  285          *                       EPNum.0..3: Address
  286          *                       EPNum.7:    Dir
  287          *    Return Value:    None

⌨️ 快捷键说明

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