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

📄 ctrlreq.lst

📁 SdCard_V2.1TinyFatFs.rar是单片机实现SD卡功能的FAT文件系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02b   CTRLREQ                                                              02/27/2008 12:54:49 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE CTRLREQ
OBJECT MODULE PLACED IN .\Output\CtrlReq.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CtrlReq.c LARGE OPTIMIZE(SIZE) BROWSE DEBUG OBJECTEXTEND PRINT(.\Output\Ctr
                    -lReq.lst) OBJECT(.\Output\CtrlReq.obj)

stmt 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          *
   8          * Copyright (c) 2006 Fameg, Inc. All rights reserved
   9          *********************************************************************************************************
  10          */
  11          #include "include\Include.h"
  12          #include "include\dscr.h"
  13          #define USB_STALL_EP0() EP0RXCS = EP0RXCS | bmRX0_SESTALL;  \
  14                                  EP0TXCS = EP0TXCS | bmTX0_SESTALL
  15          
  16          /*
  17          *********************************************************************************************************
  18          *                                       VARIABLE PROTOTYPES
  19          *********************************************************************************************************
  20          */
  21          static  INT8U SetupData[8];
  22          INT8U Configuration=0, AlternateSetting=0;
  23          BOOLEAN HighSpeed;      //用来指示是高速(high speed)还是全速(full speed)接口
  24                                                          //1:HIGH SPEED 0:FULL SPEED
  25          //BOOL Rwuen, Selfpwr;
  26          /*
  27          *********************************************************************************************************
  28          *                                       FUNCTION PROTOTYPES
  29          *********************************************************************************************************
  30          */
  31          static  void  DR_ClearFeature (void);
  32          static  void  DR_GetConfiguration (void);
  33          static  void  DR_GetDescriptor (void);
  34          static  void  DR_GetInterface (void);
  35          static  void  DR_GetStatus (void);
  36          static  void  DR_SetAddress (void);
  37          static  void  DR_SetConfiguration (void);
  38          static  void  DR_SetFeature (void);
  39          static  void  DR_SetInterface (void);
  40          static  void  GD_DeviceDscr (void);
  41          static  void  GD_DeviceQualDscr (void);
  42          static  void  GD_ConfigDscr (void);
  43          static  void  GD_OtherConfigDscr (void);
  44          static  void  GD_String (void);
  45          static  void  CtrlReqGetMaxLun(void);
  46          static  void  CtrlReqBulkReset(void);
  47            void  SetupCommand (void);
  48          
  49          /*
  50          *********************************************************************************************************
  51          *                                             KSOC_INT_ISR
  52          *
  53          * Description: KSOC Interrupt Service Routine
  54          *
C51 COMPILER V7.02b   CTRLREQ                                                              02/27/2008 12:54:49 PAGE 2   

  55          * Arguments  : none
  56          *
  57          * Returns    : none
  58          *********************************************************************************************************
  59          */
  60          //void  KSOC_INT_ISR (void) interrupt 6
  61          //{
  62          //}
  63          /*$PAGE*/
  64          
  65          /*
  66          *********************************************************************************************************
  67          *                                             SETUPCOMMAND
  68          *
  69          * Description: Parse command function
  70          *
  71          * Arguments  : none
  72          *
  73          * Returns    : none
  74          *********************************************************************************************************
  75          */
  76          void  SetupCommand (void)
  77          {
  78   1          INT8U   i = 0, count = 8;
  79   1      
  80   1          while (count)                                      // Receive data
  81   1          {
  82   2              SetupData[i]    = EP0RXDAT;
  83   2              i++;
  84   2              count--;
  85   2          }
  86   1      
  87   1          if((SetupData[0]& 0x60) == 0x00)
  88   1              {
  89   2              switch (SetupData[1])                              // Parse
  90   2          {
  91   3              case SC_GET_STATUS:
  92   3                  DR_GetStatus();
  93   3                  break;
  94   3              case SC_CLEAR_FEATURE:
  95   3                  DR_ClearFeature();
  96   3                  break;
  97   3              case SC_SET_FEATURE:
  98   3                  DR_SetFeature();
  99   3                  break;
 100   3              case SC_SET_ADDRESS:
 101   3                  DR_SetAddress();
 102   3                  break;
 103   3              case SC_GET_DESCRIPTOR:
 104   3                  DR_GetDescriptor();
 105   3                  break;
 106   3              case SC_GET_CONFIGURATION:
 107   3                  DR_GetConfiguration();
 108   3                  break;
 109   3              case SC_SET_CONFIGURATION:
 110   3                  DR_SetConfiguration();
 111   3                  break;
 112   3              case SC_GET_INTERFACE:
 113   3                  DR_GetInterface();
 114   3                  break;
 115   3              case SC_SET_INTERFACE:
 116   3                  DR_SetInterface();
C51 COMPILER V7.02b   CTRLREQ                                                              02/27/2008 12:54:49 PAGE 3   

 117   3                  break;
 118   3              default:
 119   3                  USB_STALL_EP0();                           // Send STALL
 120   3                  break;
 121   3          }
 122   2              }
 123   1              else if((SetupData[0]& 0x60) == 0x20)
 124   1              {
 125   2                      switch (SetupData[1])
 126   2              {       
 127   3                  case BULKONLY_GET_MAX_LUN: 
 128   3                                      CtrlReqGetMaxLun();
 129   3                                      break;
 130   3                  case BULKONLY_RESET: 
 131   3                                      CtrlReqBulkReset();
 132   3                                      break;
 133   3              }
 134   2              }
 135   1          EP0RXCS     = EP0RXCS | bmRX0_EN;
 136   1      }
 137          
 138          void CtrlReqGetMaxLun(void)
 139          {
 140   1          EP0TXCNT        = 1;
 141   1          EP0TXDAT        = 0x00;
 142   1              EP0TXCS         = EP0TXCS | bmTX0_EN;
 143   1          //while (EP0TXCS & bmTX0_EN);
 144   1      } 
 145           
 146          void CtrlReqBulkReset(void)
 147          {
 148   1              BulkState = CBW_GET_COMPLETED;    
 149   1          CmdStatus = COMMAND_PASSED;
 150   1          EP0TXCNT        = 0;
 151   1          EP0TXCS         = EP0TXCS | bmTX0_EN;
 152   1      }
 153          /*$PAGE*/
 154          
 155          /*
 156          *********************************************************************************************************
 157          *                                             DR_GETSTATUS
 158          *
 159          * Description: Get status command
 160          *
 161          * Arguments  : none
 162          *
 163          * Returns    : none
 164          *********************************************************************************************************
 165          */
 166          void  DR_GetStatus (void)
 167          {
 168   1          EP0TXCNT    = 2;
 169   1          switch (SetupData[0])
 170   1          {
 171   2              case GS_DEVICE:
 172   2                  EP0TXDAT    = ((INT8U)Rwuen << 1) | (INT8U)Selfpwr;
 173   2                  break;
 174   2              case GS_INTERFACE:
 175   2                  EP0TXDAT    = 0;
 176   2                  break;
 177   2              case GS_ENDPOINT:
 178   2                  switch (SetupData[4] & 0x0F)
C51 COMPILER V7.02b   CTRLREQ                                                              02/27/2008 12:54:49 PAGE 4   

 179   2                  {
 180   3                      case bmEP1MAP:
 181   3                          EP0TXDAT    = (EP1CS & bmEP_SESTALL) >> 1;
 182   3                          break;
 183   3                      case bmEP2MAP:
 184   3                          EP0TXDAT    = (EP2CS & bmEP_SESTALL) >> 1;
 185   3                          break;
 186   3                      default:
 187   3                          EP0TXDAT    = 0;
 188   3                          break;
 189   3                  }
 190   2                  break;
 191   2              default:
 192   2                  EP0TXDAT    = 0;
 193   2                  break;
 194   2          }
 195   1          EP0TXDAT    = 0;
 196   1          EP0TXCS     = EP0TXCS | bmTX0_EN;
 197   1      }
 198          /*$PAGE*/
 199          
 200          /*
 201          *********************************************************************************************************
 202          *                                             DR_CLEARFEATURE
 203          *
 204          * Description: Clear feature
 205          *
 206          * Arguments  : none
 207          *
 208          * Returns    : none
 209          *********************************************************************************************************
 210          */
 211          void  DR_ClearFeature (void)
 212          {       void BulkReportHandle();
 213   1      
 214   1          switch (SetupData[0])
 215   1          {
 216   2              case FT_DEVICE:
 217   2                  if (SetupData[2] == 1)
 218   2                  {
 219   3                      Rwuen       = FALSE;
 220   3                  }
 221   2                  break;
 222   2              case FT_ENDPOINT:
 223   2                  if (SetupData[2] == 0)
 224   2                  {
 225   3                      switch (SetupData[4] & 0x0F)
 226   3                      {
 227   4                          case bmEP1MAP:
 228   4                              EP1CS       = EP1CS & (~bmEP_SESTALL)|(bmEP_CLRTOG);    //  
 229   4                              break;
 230   4                          case bmEP2MAP:
 231   4                               EP2CS      = EP2CS & (~bmEP_SESTALL)|(bmEP_CLRTOG);    //EP_TOG位写1清零
 232   4                              break;
 233   4                      }
 234   3                  }
 235   2                              EP0TXCNT    = 0;
 236   2                      EP0TXCS     = EP0TXCS | bmTX0_EN;//使能EP0发送,给主机回复0字节的数据,完成clear feature的控制传输
 237   2                              while (EP0TXCS & bmTX0_EN);      // Wait complete
 238   2                  break;
 239   2          }
 240   1      
C51 COMPILER V7.02b   CTRLREQ                                                              02/27/2008 12:54:49 PAGE 5   

 241   1              if(ScsiCmdSTALLed)        //如果STALL发生,准备回送CSW.Derek 06.09.04
 242   1          {
 243   2              BulkReportHandle();
 244   2              ScsiCmdSTALLed = false;
 245   2          } 
 246   1      
 247   1      }
 248          /*$PAGE*/
 249          
 250          /*
 251          *********************************************************************************************************
 252          *                                             DR_SETFEATURE
 253          *
 254          * Description: Set feature
 255          *
 256          * Arguments  : none
 257          *
 258          * Returns    : none
 259          *********************************************************************************************************
 260          */
 261          void  DR_SetFeature (void)
 262          {
 263   1          switch (SetupData[0])
 264   1          {
 265   2              case FT_DEVICE:
 266   2                  if (SetupData[2] == 1)
 267   2                  {
 268   3                      Rwuen   = TRUE;
 269   3                  }
 270   2                  break;
 271   2              case FT_ENDPOINT:
 272   2                  if (SetupData[2] == 0)
 273   2                  {
 274   3                      switch (SetupData[4] & 0x0F)
 275   3                      {
 276   4                          case bmEP1MAP:
 277   4                              EP1CS       = EP1CS | bmEP_SESTALL;
 278   4                              break;
 279   4                          case bmEP2MAP:
 280   4                              EP2CS       = EP2CS | bmEP_SESTALL;
 281   4                              break;
 282   4                      }
 283   3                  }
 284   2                  break;
 285   2          }
 286   1          EP0TXCNT    = 0;
 287   1          EP0TXCS     = EP0TXCS | bmTX0_EN;
 288   1      }
 289          /*$PAGE*/
 290          
 291          /*
 292          *********************************************************************************************************
 293          *                                             DR_SETADDRESS
 294          *
 295          * Description: Set address
 296          *
 297          * Arguments  : none
 298          *
 299          * Returns    : none
 300          *********************************************************************************************************
 301          */
 302          void  DR_SetAddress (void)
C51 COMPILER V7.02b   CTRLREQ                                                              02/27/2008 12:54:49 PAGE 6   

 303          {
 304   1          EP0TXCNT    = 0;                                   // Write data length
 305   1          EP0TXCS     = EP0TXCS | bmTX0_EN;                  // Enable TX
 306   1          while (EP0TXCS & bmTX0_EN);                        // Wait complete
 307   1          USBFADDR    = SetupData[2];                        // Set address
 308   1      }
 309          /*$PAGE*/
 310          
 311          /*
 312          *********************************************************************************************************
 313          *                                             DR_GETDESCRIPTOR
 314          *
 315          * Description: Get descriptor
 316          *
 317          * Arguments  : none
 318          *
 319          * Returns    : none
 320          *********************************************************************************************************
 321          */
 322          void  DR_GetDescriptor (void)
 323          {
 324   1          switch (SetupData[3])
 325   1          {
 326   2              case GD_DEVICE:
 327   2                  GD_DeviceDscr();
 328   2                  break;
 329   2              case GD_CONFIGURATION:

⌨️ 快捷键说明

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