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

📄 wdf_cypress_lib.lst

📁 使用Jungo Windriver開發的USB driver 及其firmware,類型為mass storage,應用於FX2(Cypress CY68013A)上.
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.06   WDF_CYPRESS_LIB                                                       02/13/2008 21:37:10 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE WDF_CYPRESS_LIB
OBJECT MODULE PLACED IN wdf_cypress_lib.OBJ
COMPILER INVOKED BY: C:\Keil\c51\bin\c51.exe wdf_cypress_lib.c DB OE CODE MODDP2 NOIV DF(FX2LP) DF(FX2LP_NEW)

stmt level    source

   1          /******************************************************************************
   2          *   File:     wdf_cypress_lib.c                                               *
   3          *                                                                             *
   4          *   Contents:  Implementation of firmware library functions for the           *
   5          *              Cypress FX2 CY7C68013 and FX2LP CY7C68013A development boards  *
   6          *                                                                             *
   7          *   Code was generated by DriverWizard v8.02 - http://www.jungo.com           *
   8          *   Copyright (c) 2008 Jungo Ltd.  http://www.jungo.com                       *
   9          *******************************************************************************/
  10          
  11          #include "wdf_cypress_lib.h"
  12          
  13          #define READ TRUE
  14          #define WRITE FALSE
  15          
  16          static void DataToggleReset(int ep, EP_DIR dir)
  17          {
  18   1          // TOGCTL.3..0 - Ep number (1, 2, 4, 6 or 8)
  19   1          // TOGCTL.4 - Ep direction
  20   1          // TOGCTL.5 - Clear bit
  21   1          TOGCTL = (ep | (dir << 4));
  22   1          TOGCTL = (ep | (dir << 4) | bmBIT5);
  23   1      }
  24          
  25          void WDF_EP1INConfig(EP_TYPE type)
  26          {
  27   1          EP1INCFG = bmBIT7;                          // Enable EP1 In: EP1INCFG.7
  28   1          EP1INCFG |= (type << 4);                    // EP1IN type:    EP1INCFG.5..4
  29   1          DataToggleReset(0x1, DIR_IN);
  30   1      }
  31          
  32          void WDF_EP1OUTConfig(EP_TYPE type)
  33          {
  34   1          EP1OUTCFG = bmBIT7;                         // Enable EP1 Out: EP1OUTCFG.7
  35   1          EP1OUTCFG |= (type << 4);                   // EP1OUT type:    EP1OUTCFG.5..4
  36   1          DataToggleReset(0x1, DIR_OUT);
  37   1      }
  38          
  39          void WDF_EP2Config(EP_DIR dir, EP_TYPE type, EP_BUFFERING buffering, int size,
  40              int nPacketPerMF)
  41          {
  42   1          EP2CFG = bmBIT7;                            // Enable EP2:          EP2CFG.7
  43   1          DELAY;
  44   1          EP2CFG |= (dir << 6);                       // EP2 direction:       EP2CFG.6
  45   1          DELAY;
  46   1          EP2CFG |= (type << 4);                      // EP2 type:            EP2CFG.5..4
  47   1          DELAY;
  48   1          EP2CFG |= (size == 1024 ? bmBIT3 : 0);      // EP2 size:            EP2CFG.3
  49   1          DELAY;
  50   1          EP2CFG |= buffering;                        // EP2 buffering method:EP2CFG.1..0
  51   1          DELAY;
  52   1      
  53   1          if (type == ISOCHRONOUS && dir == DIR_IN)
  54   1          {
  55   2              EP2ISOINPKTS = bmBIT7;  // Automatically send zero length packet when there is
C51 COMPILER V7.06   WDF_CYPRESS_LIB                                                       02/13/2008 21:37:10 PAGE 2   

  56   2                                       // no data in EP FIFO
  57   2              EP2ISOINPKTS |= nPacketPerMF;   // Packet Per Microframe: EP2ISOINPKTS.1..0
  58   2              DELAY;
  59   2          }
  60   1          DataToggleReset(0x2, dir);
  61   1      }
  62          
  63          void WDF_EP4Config(EP_DIR dir, EP_TYPE type)
  64          {
  65   1          EP4CFG = bmBIT7;                            // Enable EP4:          EP4CFG.7
  66   1          EP4CFG |= (dir << 6);                       // EP4 direction:       EP4CFG.6
  67   1          EP4CFG |= (type << 4);                      // EP4 type:            EP4CFG.5..4
  68   1      
  69   1          if (type == ISOCHRONOUS && dir == DIR_IN)
  70   1          {
  71   2              EP4ISOINPKTS = bmBIT7;  // Automatically send zero length packet when there is
  72   2                                       // no data in EP FIFO
  73   2              DELAY;
  74   2          }
  75   1          DataToggleReset(0x4, dir);
  76   1      }
  77          
  78          void WDF_EP6Config(EP_DIR dir, EP_TYPE type, EP_BUFFERING buffering, int size,
  79              int nPacketPerMF)
  80          {
  81   1          EP6CFG = bmBIT7;                            // Enable EP6:          EP6CFG.7
  82   1          DELAY;
  83   1          EP6CFG |= (dir << 6);                       // EP6 direction:       EP6CFG.6
  84   1          DELAY;
  85   1          EP6CFG |= (type << 4);                      // EP6 type:            EP6CFG.5..4
  86   1          DELAY;
  87   1          EP6CFG |= (size == 1024 ? bmBIT3 : 0);      // EP6 size:            EP6CFG.3
  88   1          DELAY;
  89   1          EP6CFG |= buffering;                        // EP6 buffering method:EP6CFG.1..0
  90   1          DELAY;
  91   1      
  92   1          if (type == ISOCHRONOUS && dir == DIR_IN)
  93   1          {
  94   2              DELAY;
  95   2              EP6ISOINPKTS = bmBIT7;          // Automatically send zero length packet when there is
  96   2                                               // no data in EP FIFO
  97   2              EP6ISOINPKTS |= nPacketPerMF;   // Packet Per Microframe: EP6ISOINPKTS.1..0
  98   2              DELAY;
  99   2          }
 100   1          DataToggleReset(0x6, dir);
 101   1      }
 102          
 103          void WDF_EP8Config(EP_DIR dir, EP_TYPE type)
 104          {
 105   1          EP8CFG = bmBIT7;                            // Enable EP8:          EP8CFG.7
 106   1          EP8CFG |= (dir << 6);                       // EP8 direction:       EP8CFG.6
 107   1          EP8CFG |= (type << 4);                      // EP8 type:            EP8CFG.5..4
 108   1      
 109   1          if (type == ISOCHRONOUS && dir == DIR_IN)
 110   1          {
 111   2              EP8ISOINPKTS = bmBIT7;  // Automatically send zero length packet when there is
 112   2                                       // no data in EP FIFO
 113   2              DELAY;
 114   2          }
 115   1          DataToggleReset(0x8, dir);
 116   1      }
 117          
C51 COMPILER V7.06   WDF_CYPRESS_LIB                                                       02/13/2008 21:37:10 PAGE 3   

 118          void WDF_FIFOReset (int ep)
 119          {
 120   1          FIFORESET = 0x80;           // NAK all transfers from the host
 121   1          DELAY;
 122   1          FIFORESET = ep;             // Reset EP FIFO
 123   1          DELAY;
 124   1          FIFORESET = 0x00;           // Restore normal operation
 125   1          DELAY;
 126   1      }
 127          
 128          void WDF_SkipOutPacket(int ep)
 129          {
 130   1          switch (ep)
 131   1          {
 132   2          case 0x1:
 133   2              DELAY;
 134   2              EP1OUTBC = 0x0;
 135   2              break;
 136   2          case 0x2:
 137   2              DELAY;
 138   2              EP2BCL = 0x80;          // arm EP2OUT by writing byte count w/skip. 
 139   2              break;
 140   2          case 0x4:
 141   2              DELAY;
 142   2              EP4BCL = 0x80;          // arm EP4OUT by writing byte count w/skip. 
 143   2              break;
 144   2          case 0x6:
 145   2              DELAY;
 146   2              EP6BCL = 0x80;          // arm EP6OUT by writing byte count w/skip. 
 147   2              break;
 148   2          case 0x8:
 149   2              DELAY;
 150   2              EP8BCL = 0x80;          // arm EP8OUT by writing byte count w/skip. 
 151   2              break;
 152   2          }
 153   1      }
 154          
 155          static void WDF_FIFOAccess(int ep, BYTE buf[], int size, BOOL fIsRead)
 156          {
 157   1          int i;
 158   1          BYTE *epFifo;
 159   1      
 160   1          switch (ep)
 161   1          {
 162   2          case 0x1:
 163   2              epFifo = EP1OUTBUF;
 164   2              break;
 165   2          case 0x81:
 166   2              epFifo = EP1INBUF;
 167   2              break;
 168   2          case 0x2:
 169   2          case 0x82:
 170   2              epFifo = EP2FIFOBUF;
 171   2              break;
 172   2          case 0x4:
 173   2          case 0x84:
 174   2              epFifo = EP4FIFOBUF;
 175   2              break;
 176   2          case 0x6:
 177   2          case 0x86:
 178   2              epFifo = EP6FIFOBUF;
 179   2              break;
C51 COMPILER V7.06   WDF_CYPRESS_LIB                                                       02/13/2008 21:37:10 PAGE 4   

 180   2          case 0x8:
 181   2          case 0x88:
 182   2              epFifo = EP8FIFOBUF;
 183   2              break;
 184   2          }    
 185   1      
 186   1          APTR1H = MSB(buf);
 187   1          APTR1L = LSB(buf);
 188   1      
 189   1          AUTOPTRH2 = MSB(epFifo);
 190   1          AUTOPTRL2 = LSB(epFifo);
 191   1      
 192   1          for(i=0; i<size; i++)
 193   1          {
 194   2              if (fIsRead)
 195   2                  EXTAUTODAT1 = EXTAUTODAT2;
 196   2              else
 197   2                  EXTAUTODAT2 = EXTAUTODAT1;
 198   2          }
 199   1      }
 200          
 201          void WDF_FIFOWrite(int ep, BYTE buf[], int size)
 202          {
 203   1          WDF_FIFOAccess(ep, buf, size, WRITE);
 204   1      }
 205          
 206          void WDF_FIFORead(int ep, BYTE buf[], int size)
 207          {
 208   1          WDF_FIFOAccess(ep, buf, size, READ);
 209   1      }
 210          
 211          BOOL WDF_FIFOEmpty(int ep)
 212          {
 213   1          BOOL ret;
 214   1      
 215   1          switch (ep)
 216   1          {
 217   2          case 0x1:
 218   2              ret = (EP1OUTCS & bmEPBUSY);
 219   2              break;
 220   2          case 0x81:
 221   2              ret = !(EP1INCS & bmEPBUSY);
 222   2              break;
 223   2          case 0x2:
 224   2          case 0x82:
 225   2              ret = (EP2468STAT & bmEP2EMPTY);
 226   2              break;
 227   2          case 0x4:
 228   2          case 0x84:
 229   2              ret = (EP2468STAT & bmEP4EMPTY);
 230   2              break;
 231   2          case 0x6:
 232   2          case 0x86:
 233   2              ret = (EP2468STAT & bmEP6EMPTY);
 234   2              break;
 235   2          case 0x8:
 236   2          case 0x88:
 237   2              ret = (EP2468STAT & bmEP8EMPTY);
 238   2              break;
 239   2          }
 240   1          return ret;
 241   1      }
C51 COMPILER V7.06   WDF_CYPRESS_LIB                                                       02/13/2008 21:37:10 PAGE 5   

 242          
 243          BOOL WDF_FIFOFull(int ep)
 244          {
 245   1          BOOL ret;
 246   1      
 247   1          switch (ep)
 248   1          {
 249   2          case 0x1:
 250   2              ret = !(EP1OUTCS & bmEPBUSY);
 251   2              break;
 252   2          case 0x81:
 253   2              ret = (EP1INCS & bmEPBUSY);
 254   2              break;
 255   2          case 0x2:
 256   2          case 0x82:
 257   2              ret = (EP2468STAT & bmEP2FULL);
 258   2              break;
 259   2          case 0x4:
 260   2          case 0x84:
 261   2              ret = (EP2468STAT & bmEP4FULL);
 262   2              break;
 263   2          case 0x6:
 264   2          case 0x86:
 265   2              ret = (EP2468STAT & bmEP6FULL);
 266   2              break;
 267   2          case 0x8:
 268   2          case 0x88:
 269   2              ret = (EP2468STAT & bmEP8FULL);
 270   2              break;
 271   2          }
 272   1          return ret;
 273   1      }
 274          
 275          void WDF_SetEPByteCount(int ep, WORD bytes_count)
 276          {
 277   1          BYTE *epBytesCntLow, *epBytesCntHigh;
 278   1      
 279   1          switch (ep)
 280   1          {

⌨️ 快捷键说明

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