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

📄 usbhw.lst

📁 The Virtual COM port project is a demo program for the Keil MCB2140 Board using the Philips LPC214x
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.50a,  usbhw                                                                14/02/06  09:59:06  PAGE 1   


ARM COMPILER V2.50a, COMPILATION OF MODULE usbhw
OBJECT MODULE PLACED IN .\Obj\usbhw.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe usbhw.c THUMB DEFINE(MCB2140) DEBUG PRINT(.\LST\USBHW.LST) TABS(4) OBJECT(.\
                    -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.50a,  usbhw                                                                14/02/06  09:59:06  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.50a,  usbhw                                                                14/02/06  09:59:06  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.50a,  usbhw                                                                14/02/06  09:59:06  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.50a,  usbhw                                                                14/02/06  09:59:06  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
  288           */
  289          
  290          void USB_DisableEP (BYTE EPNum) {
  291   1        WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(EP_STAT_DA));

⌨️ 快捷键说明

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