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

📄 mscuser.lst

📁 这个是我改的针对LPC2141的
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.53,  mscuser                                                               03/05/07  22:10:49  PAGE 1   


ARM COMPILER V2.53, COMPILATION OF MODULE mscuser
OBJECT MODULE PLACED IN .\Obj\mscuser.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe mscuser.c THUMB DEBUG PRINT(.\LST\MSCUSER.LST) TABS(4) OBJECT(.\Obj\mscuser.
                    -obj) 

stmt  level    source

    1          /*----------------------------------------------------------------------------
    2           *      U S B  -  K e r n e l
    3           *----------------------------------------------------------------------------
    4           *      Name:    MSCUSER.C
    5           *      Purpose: Mass Storage Class Custom User Module
    6           *      Version: V1.10
    7           *----------------------------------------------------------------------------
    8           *      This software is supplied "AS IS" without any warranties, express,
    9           *      implied or statutory, including but not limited to the implied
   10           *      warranties of fitness for purpose, satisfactory quality and
   11           *      noninfringement. Keil extends you a royalty-free right to reproduce
   12           *      and distribute executable files created using this software for use
   13           *      on Philips LPC2xxx microcontroller devices only. Nothing else gives
   14           *      you the right to use this software.
   15           *
   16           *      Copyright (c) 2005-2006 Keil Software.
   17           *---------------------------------------------------------------------------*/
   18          
   19          #include <LPC214X.H>                        /* LPC214x definitions */
   20          
   21          #include "type.h"
   22          
   23          #include "usb.h"
   24          #include "msc.h"
   25          #include "usbcfg.h"
   26          #include "usbhw.h"
   27          #include "usbcore.h"
   28          #include "mscuser.h"
   29          
   30          #include "memory.h"
   31          
   32          
   33          BYTE  Memory[MSC_MemorySize] __at MSC_MemoryStart;   /* MSC RAM */
   34          
   35          BOOL  MemOK;                   /* Memory OK */
   36          
   37          DWORD Offset;                  /* R/W Offset */
   38          DWORD Length;                  /* R/W Length */
   39          
   40          BYTE  BulkStage;               /* Bulk Stage */
   41          
   42          BYTE  BulkBuf[MSC_MAX_PACKET]; /* Bulk In/Out Buffer */
   43          BYTE  BulkLen;                 /* Bulk In/Out Length */
   44          
   45          MSC_CBW CBW;                   /* Command Block Wrapper */
   46          MSC_CSW CSW;                   /* Command Status Wrapper */
   47          
   48          
   49          /*
   50           *  MSC Mass Storage Reset Request Callback
   51           *   Called automatically on Mass Storage Reset Request
   52           *    Parameters:      None (global SetupPacket and EP0Buf)
   53           *    Return Value:    TRUE - Success, FALSE - Error
   54           */
   55          
   56          BOOL MSC_Reset (void) {
   57   1      
   58   1        IOCLR1 = (LED_RD | LED_WR);  /* Turn Off R/W LED */
ARM COMPILER V2.53,  mscuser                                                               03/05/07  22:10:49  PAGE 2   

   59   1        BulkStage = MSC_BS_CBW;
   60   1        return (TRUE);
   61   1      }
   62          
   63          
   64          /*
   65           *  MSC Get Max LUN Request Callback
   66           *   Called automatically on Get Max LUN Request
   67           *    Parameters:      None (global SetupPacket and EP0Buf)
   68           *    Return Value:    TRUE - Success, FALSE - Error
   69           */
   70          
   71          BOOL MSC_GetMaxLUN (void) {
   72   1      
   73   1        EP0Buf[0] = 0;               /* No LUN associated with this device */
   74   1        return (TRUE);
   75   1      }
   76          
   77          
   78          /*
   79           *  MSC Memory Read Callback
   80           *   Called automatically on Memory Read Event
   81           *    Parameters:      None (global variables)
   82           *    Return Value:    None
   83           */
   84          
   85          void MSC_MemoryRead (void) {
   86   1        DWORD n;
   87   1      
   88   1        if (Length > MSC_MAX_PACKET) {
   89   2          n = MSC_MAX_PACKET;
   90   2        } else {
   91   2          n = Length;
   92   2        }
   93   1      
   94   1        if ((Offset + n) > MSC_MemorySize) {
   95   2          n = MSC_MemorySize - Offset;
   96   2          BulkStage = MSC_BS_DATA_IN_LAST_STALL;
   97   2        }
   98   1      
   99   1        USB_WriteEP(MSC_EP_IN, (BYTE *)(MSC_MemoryStart + Offset), n);
  100   1        Offset += n;
  101   1        Length -= n;
  102   1      
  103   1        CSW.dDataResidue -= n;
  104   1      
  105   1        if (Length == 0) {
  106   2          BulkStage = MSC_BS_DATA_IN_LAST;
  107   2        }
  108   1      
  109   1        if (BulkStage != MSC_BS_DATA_IN) {
  110   2          IOCLR1 = LED_RD;            /* Turn Off Read LED */
  111   2          CSW.bStatus = CSW_CMD_PASSED;
  112   2        }
  113   1      }
  114          
  115          
  116          /*
  117           *  MSC Memory Write Callback
  118           *   Called automatically on Memory Write Event
  119           *    Parameters:      None (global variables)
  120           *    Return Value:    None
  121           */
  122          
  123          void MSC_MemoryWrite (void) {
  124   1        DWORD n;
ARM COMPILER V2.53,  mscuser                                                               03/05/07  22:10:49  PAGE 3   

  125   1      
  126   1        if ((Offset + BulkLen) > MSC_MemorySize) {
  127   2          BulkLen = MSC_MemorySize - Offset;
  128   2          BulkStage = MSC_BS_CSW;
  129   2          USB_SetStallEP(MSC_EP_OUT);
  130   2        }
  131   1      
  132   1        for (n = 0; n < BulkLen; n++) {
  133   2          Memory[Offset + n] = BulkBuf[n];
  134   2        }
  135   1      
  136   1        Offset += BulkLen;
  137   1        Length -= BulkLen;
  138   1      
  139   1        CSW.dDataResidue -= BulkLen;
  140   1      
  141   1        if ((Length == 0) || (BulkStage == MSC_BS_CSW)) {
  142   2          IOCLR1 = LED_WR;            /* Turn Off Write LED */
  143   2          CSW.bStatus = CSW_CMD_PASSED;
  144   2          MSC_SetCSW();
  145   2        }
  146   1      }
  147          
  148          
  149          /*
  150           *  MSC Memory Verify Callback
  151           *   Called automatically on Memory Verify Event
  152           *    Parameters:      None (global variables)
  153           *    Return Value:    None
  154           */
  155          
  156          void MSC_MemoryVerify (void) {
  157   1        DWORD n;
  158   1      
  159   1        if ((Offset + BulkLen) > MSC_MemorySize) {
  160   2          BulkLen = MSC_MemorySize - Offset;
  161   2          BulkStage = MSC_BS_CSW;
  162   2          USB_SetStallEP(MSC_EP_OUT);
  163   2        }
  164   1      
  165   1        for (n = 0; n < BulkLen; n++) {
  166   2          if (Memory[Offset + n] != BulkBuf[n]) {
  167   3            MemOK = FALSE;
  168   3            break;
  169   3          }
  170   2        }
  171   1      
  172   1        Offset += BulkLen;
  173   1        Length -= BulkLen;
  174   1      
  175   1        CSW.dDataResidue -= BulkLen;
  176   1      
  177   1        if ((Length == 0) || (BulkStage == MSC_BS_CSW)) {
  178   2          CSW.bStatus = (MemOK) ? CSW_CMD_PASSED : CSW_CMD_FAILED;
  179   2          MSC_SetCSW();
  180   2        }
  181   1      }
  182          
  183          
  184          /*
  185           *  MSC SCSI Read/Write Setup Callback
  186           *    Parameters:      None (global variables)
  187           *    Return Value:    TRUE - Success, FALSE - Error
  188           */
  189          
  190          BOOL MSC_RWSetup (void) {
ARM COMPILER V2.53,  mscuser                                                               03/05/07  22:10:49  PAGE 4   

  191   1        DWORD n;
  192   1      
  193   1        /* Logical Block Address of First Block */
  194   1        n = (CBW.CB[2] << 24) |
  195   1            (CBW.CB[3] << 16) |
  196   1            (CBW.CB[4] <<  8) |
  197   1            (CBW.CB[5] <<  0);
  198   1      
  199   1        Offset = n * MSC_BlockSize;
  200   1      
  201   1        /* Number of Blocks to transfer */
  202   1        n = (CBW.CB[7] <<  8) |
  203   1            (CBW.CB[8] <<  0);
  204   1      
  205   1        Length = n * MSC_BlockSize;
  206   1      
  207   1        if (CBW.dDataLength != Length) {
  208   2          USB_SetStallEP(MSC_EP_IN);
  209   2          USB_SetStallEP(MSC_EP_OUT);
  210   2          CSW.bStatus = CSW_PHASE_ERROR;
  211   2          MSC_SetCSW();
  212   2          return (FALSE);
  213   2        }
  214   1      
  215   1        return (TRUE);
  216   1      }
  217          
  218          
  219          /*
  220           *  Check Data IN Format
  221           *    Parameters:      None (global variables)
  222           *    Return Value:    TRUE - Success, FALSE - Error
  223           */
  224          
  225          BOOL DataInFormat (void) {
  226   1      
  227   1        if (CBW.dDataLength == 0) {
  228   2          CSW.bStatus = CSW_PHASE_ERROR;
  229   2          MSC_SetCSW();
  230   2          return (FALSE);
  231   2        }
  232   1        if ((CBW.bmFlags & 0x80) == 0) {
  233   2          USB_SetStallEP(MSC_EP_OUT);
  234   2          CSW.bStatus = CSW_PHASE_ERROR;
  235   2          MSC_SetCSW();
  236   2          return (FALSE);
  237   2        }
  238   1        return (TRUE);
  239   1      }
  240          
  241          
  242          /*
  243           *  Perform Data IN Transfer
  244           *    Parameters:      None (global variables)
  245           *    Return Value:    TRUE - Success, FALSE - Error
  246           */
  247          
  248          void DataInTransfer (void) {
  249   1      
  250   1        if (BulkLen > CBW.dDataLength) {
  251   2          BulkLen = CBW.dDataLength;
  252   2        }
  253   1      
  254   1        USB_WriteEP(MSC_EP_IN, BulkBuf, BulkLen);
  255   1        BulkStage = MSC_BS_DATA_IN_LAST;
  256   1      
ARM COMPILER V2.53,  mscuser                                                               03/05/07  22:10:49  PAGE 5   

  257   1        CSW.dDataResidue -= BulkLen;
  258   1        CSW.bStatus = CSW_CMD_PASSED;
  259   1      }
  260          
  261          
  262          /*
  263           *  MSC SCSI Test Unit Ready Callback
  264           *    Parameters:      None (global variables)
  265           *    Return Value:    None
  266           */
  267          
  268          void MSC_TestUnitReady (void) {
  269   1      
  270   1        if (CBW.dDataLength != 0) {
  271   2          if ((CBW.bmFlags & 0x80) != 0) {
  272   3            USB_SetStallEP(MSC_EP_IN);
  273   3          } else {
  274   3            USB_SetStallEP(MSC_EP_OUT);
  275   3          }
  276   2        }
  277   1      
  278   1        CSW.bStatus = CSW_CMD_PASSED;
  279   1        MSC_SetCSW();
  280   1      }
  281          
  282          
  283          /*
  284           *  MSC SCSI Request Sense Callback
  285           *    Parameters:      None (global variables)
  286           *    Return Value:    None
  287           */
  288          
  289          void MSC_RequestSense (void) {
  290   1      
  291   1        if (!DataInFormat()) return;
  292   1      
  293   1        BulkBuf[ 0] = 0x70;          /* Response Code */

⌨️ 快捷键说明

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