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

📄 ctrlreq.lst

📁 FS7805 使用APLIF的demoFS7805 使用APLIF的demo
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   CTRLREQ                                                               04/17/2007 10:42:46 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CTRLREQ
OBJECT MODULE PLACED IN .\Output\CtrlReq.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CtrlReq.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\Output\CtrlReq.lst) OBJEC
                    -T(.\Output\CtrlReq.obj)

line level    source

   1          /*
   2          *********************************************************************************************************
   3          * File:     CtrlReq.C
   4          * Contents: Firmware frameworks task dispatcher and device request parser source
   5          *
   6          * $Date:    04/06/06    Kimi    v0.1
   7          * $Date:    04/25/06    Kimi    v0.2
   8          * $Date:    04/30/06    Kimi    v0.3
   9          * $Date:    01/23/07    Kevin   v0.4
  10          * Copyright (c) 2006 Fameg, Inc. All rights reserved
  11          *********************************************************************************************************
  12          */
  13          
  14          #include "fs7805.h"
  15          #include "fs7805regs.h"
  16          #include "dscr.h"
  17          
  18          #define USB_STALL_EP0() EP0RXCS = EP0RXCS | bmRX0_SESTALL;  \
  19                                  EP0TXCS = EP0TXCS | bmTX0_SESTALL
  20          
  21          /*
  22          *********************************************************************************************************
  23          *                                       VARIABLE PROTOTYPES
  24          *********************************************************************************************************
  25          */
  26          static  INT8U SetupData[8], PacketSize;
  27          static  INT8U AlternateSetting;
  28          static  BOOLEAN HighSpeed;
  29          static  INT8U EnterSuspend = 0;
  30          /*
  31          *********************************************************************************************************
  32          *                                       FUNCTION PROTOTYPES
  33          *********************************************************************************************************
  34          */
  35          static  void  DR_ClearFeature (void);
  36          static  void  DR_GetConfiguration (void);
  37          static  void  DR_GetDescriptor (void);
  38          static  void  DR_GetInterface (void);
  39          static  void  DR_GetStatus (void);
  40          static  void  DR_SetAddress (void);
  41          static  void  DR_SetConfiguration (void);
  42          static  void  DR_SetFeature (void);
  43          static  void  DR_SetInterface (void);
  44          static  void  GD_DeviceDscr (void);
  45          static  void  GD_DeviceQualDscr (void);
  46          static  void  GD_ConfigDscr (void);
  47          static  void  GD_OtherConfigDscr (void);
  48          static  void  GD_String (void);
  49          static  void  SetupCommand (void);
  50          
  51          /*
  52          *********************************************************************************************************
  53          *                                             USB_INT_ISR
  54          *
C51 COMPILER V7.50   CTRLREQ                                                               04/17/2007 10:42:46 PAGE 2   

  55          * Description: Interrupt Service Routine
  56          *
  57          * Arguments  : none
  58          *
  59          * Returns    : none
  60          *********************************************************************************************************
  61          */
  62          void  USB_INT_ISR (void) interrupt 5
  63          {
  64   1          if (STINT & bmIDLE3MSINT)                          // idle interrupt
  65   1          {
  66   2              if (EnterSuspend++)
  67   2              {
  68   3                  USBGCTRL        = USBGCTRL | bmSUSPEND;
  69   3              }
  70   2              STINT           = STINT & (~bmIDLE3MSINT);
  71   2          }
  72   1      
  73   1          if (STINT & bmRESUMEIE)                            // resume interrupt
  74   1          {
  75   2              STINT           = STINT & (~bmRESUMEIE);
  76   2          }
  77   1      
  78   1          if (STINT & bmUSBRSTINT)                           // reset interrupt
  79   1          {
  80   2              while (!(USBGCTRL & bmHS_DETECTED));           // detect USB speed
  81   2              HighSpeed       = USBGCTRL & bmSPEED;
  82   2              if (HighSpeed)                                 // High speed
  83   2              {
  84   3                  PacketSize  = 64;
  85   3              }
  86   2              else                                           // Full speed
  87   2              {
  88   3                  PacketSize  = 64;
  89   3              }
  90   2              STINT           = STINT & (~bmUSBRSTINT);
  91   2          }
  92   1      
  93   1          if ((EPINT & bmRX0INT) && ((EP0RXTKN & bmEP0_SETUP) | (EP0RXTKN & bmEP0_SETUPOW)))
  94   1          {                                                  // enquire the EP0 RX setup interrupt
  95   2              EP0RXTKN        = EP0RXTKN & (~bmEP0_SETUP) & (~bmEP0_SETUPOW);
  96   2              SetupCommand();                                // Parse command
  97   2          }
  98   1      
  99   1          if ((EPINT & bmRX0INT) && (EP0RXTKN & bmEP0_OUT))  // out packet
 100   1          {
 101   2              EP0RXTKN        = EP0RXTKN & (~bmEP0_OUT);
 102   2          }
 103   1      
 104   1      #ifndef ISOCHRONOUS
 105   1          if ((EPINT & bmEP2INT) && (EP2CS & bmEP_ACK))
 106   1          {
 107   2              EPINT   = EPINT & (~bmEP2INT);                 // Clear EP2 interrupt
 108   2              OutData = TRUE;
 109   2          }
 110   1          else
 111   1          {
 112   2              EPINT   = EPINT & (~bmEP2INT);                 // Clear EP2 interrupt
 113   2          }
 114   1      #else
                  if (EPINT & bmEP2INT)
                  {
C51 COMPILER V7.50   CTRLREQ                                                               04/17/2007 10:42:46 PAGE 3   

                      EPINT   = EPINT & (~bmEP2INT);                 // Clear EP2 interrupt
                      OutData = TRUE;
                  }
              #endif
 121   1      
 122   1      #ifndef ISOCHRONOUS
 123   1          if ((EPINT & bmEP1INT) && (EP1CS & bmEP_ACK))
 124   1          {
 125   2              EPINT   = EPINT & (~bmEP1INT);                 // Clear EP1 interrupt
 126   2              InData  = TRUE;
 127   2          }
 128   1          else
 129   1          {
 130   2              EPINT   = EPINT & (~bmEP1INT);                 // Clear EP1 interrupt
 131   2          }
 132   1      #else
                  if (EPINT & bmEP1INT)
                  {
                      EPINT   = EPINT & (~bmEP1INT);                 // Clear EP1 interrupt
                      InData  = TRUE;
                  }
              #endif
 139   1      }
 140          
 141          
 142          /*
 143          *********************************************************************************************************
 144          *                                             SETUPCOMMAND
 145          *
 146          * Description: Parse command function
 147          *
 148          * Arguments  : none
 149          *
 150          * Returns    : none
 151          *********************************************************************************************************
 152          */
 153          void  SetupCommand (void)
 154          {
 155   1          INT8U   i, count;
 156   1      
 157   1          count   = EP0RXCNT;
 158   1          if (count == 8)
 159   1          {
 160   2              for (i = 0; i < 8; i++)                        // Receive data
 161   2              {
 162   3                  SetupData[i]    = EP0RXDAT;
 163   3              }
 164   2      
 165   2              switch (SetupData[1])                          // Parse
 166   2              {
 167   3                  case SC_GET_STATUS:
 168   3                      DR_GetStatus();
 169   3                      break;
 170   3                  case SC_CLEAR_FEATURE:
 171   3                      DR_ClearFeature();
 172   3                      break;
 173   3                  case SC_SET_FEATURE:
 174   3                      DR_SetFeature();
 175   3                      break;
 176   3                  case SC_SET_ADDRESS:
 177   3                      DR_SetAddress();
 178   3                      break;
C51 COMPILER V7.50   CTRLREQ                                                               04/17/2007 10:42:46 PAGE 4   

 179   3                  case SC_GET_DESCRIPTOR:
 180   3                      DR_GetDescriptor();
 181   3                      break;
 182   3                  case SC_GET_CONFIGURATION:
 183   3                      DR_GetConfiguration();
 184   3                      break;
 185   3                  case SC_SET_CONFIGURATION:
 186   3                      DR_SetConfiguration();
 187   3                      break;
 188   3                  case SC_GET_INTERFACE:
 189   3                      DR_GetInterface();
 190   3                      break;
 191   3                  case SC_SET_INTERFACE:
 192   3                      DR_SetInterface();
 193   3                      break;
 194   3                  default:
 195   3                      USB_STALL_EP0();                       // Send STALL
 196   3                      break;
 197   3              }
 198   2          }
 199   1          EP0RXCS     = EP0RXCS | bmRX0_EN;
 200   1      }
 201          /*$PAGE*/
 202          
 203          /*
 204          *********************************************************************************************************
 205          *                                             DR_GETSTATUS
 206          *
 207          * Description: Get status command
 208          *
 209          * Arguments  : none
 210          *
 211          * Returns    : none
 212          *********************************************************************************************************
 213          */
 214          void  DR_GetStatus (void)
 215          {
 216   1          switch (SetupData[0])
 217   1          {
 218   2              case GS_DEVICE:
 219   2                  EP0TXDAT    = (Rwuen << 1) | Selfpwr;
 220   2                  break;
 221   2              case GS_INTERFACE:
 222   2                  EP0TXDAT    = 0;
 223   2                  break;
 224   2              case GS_ENDPOINT:
 225   2                  switch (SetupData[4] & 0x0F)
 226   2                  {
 227   3                      case bmEP1MAP:
 228   3                          EP0TXDAT    = (EP1CS & bmEP_SESTALL) >> 1;
 229   3                          break;
 230   3                      case bmEP2MAP:
 231   3                          EP0TXDAT    = (EP2CS & bmEP_SESTALL) >> 1;
 232   3                          break;
 233   3                      default:
 234   3                          USB_STALL_EP0();                   // Send STALL
 235   3                          return;
 236   3                  }
 237   2                  break;
 238   2              default:
 239   2                  USB_STALL_EP0();                           // Send STALL
 240   2                  return;
C51 COMPILER V7.50   CTRLREQ                                                               04/17/2007 10:42:46 PAGE 5   

 241   2          }
 242   1          EP0TXDAT    = 0;
 243   1          EP0TXCNT    = 2;
 244   1          EP0TXCS     = EP0TXCS | bmTX0_EN;
 245   1          while (EP0TXCS & bmTX0_EN);
 246   1      }
 247          /*$PAGE*/
 248          
 249          /*
 250          *********************************************************************************************************
 251          *                                             DR_CLEARFEATURE
 252          *
 253          * Description: Clear feature
 254          *
 255          * Arguments  : none
 256          *
 257          * Returns    : none
 258          *********************************************************************************************************
 259          */
 260          void  DR_ClearFeature (void)
 261          {
 262   1          switch (SetupData[0])
 263   1          {
 264   2              case FT_DEVICE:
 265   2                  if (SetupData[2] == 1)
 266   2                  {
 267   3                      Rwuen       = FALSE;
 268   3                  }
 269   2                  else
 270   2                  {
 271   3                      USB_STALL_EP0();
 272   3                      return;
 273   3                  }
 274   2                  break;
 275   2              case FT_ENDPOINT:
 276   2                  if (SetupData[2] == 0)
 277   2                  {
 278   3                      switch (SetupData[4] & 0x0F)
 279   3                      {
 280   4                          case bmEP1MAP:

⌨️ 快捷键说明

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