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

📄 mscuser.lst

📁 基于LPC2142的USB Memory驱动
💻 LST
📖 第 1 页 / 共 5 页
字号:
  595           *    Return Value:    None
  596           */
  597          
  598          void MSC_BulkIn (void) {
  599   1      
  600   1        switch (BulkStage) {
  601   2          case MSC_BS_DATA_IN:
  602   2            switch (CBW.CB[0]) {
  603   3              case SCSI_READ10:
  604   3                MSC_MemoryRead();
  605   3                break;
  606   3            }
  607   2            break;
  608   2          case MSC_BS_DATA_IN_LAST:
  609   2            MSC_SetCSW();
  610   2            break;
  611   2          case MSC_BS_DATA_IN_LAST_STALL:
  612   2            USB_SetStallEP(MSC_EP_IN);
  613   2            MSC_SetCSW();
  614   2            break;
  615   2          case MSC_BS_CSW:
  616   2            BulkStage = MSC_BS_CBW;
  617   2            break;
  618   2        }
  619   1      }
  620          
  621          
  622          /*
  623           *  MSC Bulk Out Callback
  624           *    Parameters:      None (global variables)
  625           *    Return Value:    None
  626           */
  627          
  628          void MSC_BulkOut (void) {
  629   1      
  630   1        BulkLen = USB_ReadEP(MSC_EP_OUT, BulkBuf);
  631   1        switch (BulkStage) {
  632   2          case MSC_BS_CBW:
  633   2            MSC_GetCBW();
  634   2            break;
  635   2          case MSC_BS_DATA_OUT:
  636   2            switch (CBW.CB[0]) {
  637   3              case SCSI_WRITE10:
  638   3                MSC_MemoryWrite();
  639   3                break;
  640   3              case SCSI_VERIFY10:
  641   3                MSC_MemoryVerify();
  642   3                break;
  643   3            }
  644   2            break;
  645   2          default:
  646   2            USB_SetStallEP(MSC_EP_OUT);
  647   2            CSW.bStatus = CSW_PHASE_ERROR;
  648   2            MSC_SetCSW();
  649   2            break;
  650   2        }
  651   1      }
ARM COMPILER V2.53,  mscuser                                                               12/06/06  10:18:25  PAGE 11  

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (USB_SetStallEP?T)
 EXTERN CODE16 (USB_ReadEP?T)
 EXTERN CODE16 (USB_WriteEP?T)
 EXTERN DATA (EP0Buf)



*** PUBLICS:
 PUBLIC         MSC_Reset?T
 PUBLIC         MSC_GetMaxLUN?T
 PUBLIC         MSC_GetCBW?T
 PUBLIC         MSC_SetCSW?T
 PUBLIC         MSC_BulkIn?T
 PUBLIC         MSC_BulkOut?T
 PUBLIC         MSC_MemoryRead?T
 PUBLIC         MSC_MemoryWrite?T
 PUBLIC         MSC_MemoryVerify?T
 PUBLIC         MSC_RWSetup?T
 PUBLIC         DataInFormat?T
 PUBLIC         DataInTransfer?T
 PUBLIC         MSC_TestUnitReady?T
 PUBLIC         MSC_RequestSense?T
 PUBLIC         MSC_Inquiry?T
 PUBLIC         MSC_ModeSense6?T
 PUBLIC         MSC_ModeSense10?T
 PUBLIC         MSC_ReadCapacity?T
 PUBLIC         MSC_ReadFormatCapacity?T
 PUBLIC         Memory
 PUBLIC         MemOK
 PUBLIC         Offset
 PUBLIC         Length
 PUBLIC         BulkStage
 PUBLIC         BulkBuf
 PUBLIC         BulkLen
 PUBLIC         CBW
 PUBLIC         CSW



*** DATA SEGMENT '?DT0?AT_40002000_?1?mscuser':
 40002000          Memory:
 40002000            DS          8192

*** DATA SEGMENT '?DT0?mscuser':
 00000000          MemOK:
 00000000            DS          4
 00000004          Offset:
 00000004            DS          4
 00000008          Length:
 00000008            DS          4
 0000000C          CBW:
 0000000C            DS          31
 0000002B            ALIGN       4
 0000002C          CSW:
 0000002C            DS          13
 00000039          BulkStage:
 00000039            DS          1
 0000003A          BulkBuf:
 0000003A            DS          64
 0000007A          BulkLen:
 0000007A            DS          1



*** CODE SEGMENT '?PR?MSC_Reset?T?mscuser':
   58:   IOCLR1 = (LED_RD | LED_WR);  /* Turn Off R/W LED */
 00000000  2103      MOV         R1,#0x3
 00000002  4800      LDR         R0,=0xE002801C
 00000004  6001      STR         R1,[R0,#0x0]
ARM COMPILER V2.53,  mscuser                                                               12/06/06  10:18:25  PAGE 12  

   59:   BulkStage = MSC_BS_CBW;
 00000006  2100      MOV         R1,#0x0
 00000008  4800      LDR         R0,=BulkStage ; BulkStage
 0000000A  7001      STRB        R1,[R0,#0x0] ; BulkStage
   60:   return (TRUE);
 0000000C  2001      MOV         R0,#0x1
   61: }
 0000000E  4770      BX          R14
 00000010          ENDP ; 'MSC_Reset?T'


*** CODE SEGMENT '?PR?MSC_GetMaxLUN?T?mscuser':
   73:   EP0Buf[0] = 0;               /* No LUN associated with this device */
 00000000  2100      MOV         R1,#0x0
 00000002  4800      LDR         R0,=EP0Buf ; EP0Buf
 00000004  7001      STRB        R1,[R0,#0x0] ; EP0Buf
   74:   return (TRUE);
 00000006  2001      MOV         R0,#0x1
   75: }
 00000008  4770      BX          R14
 0000000A          ENDP ; 'MSC_GetMaxLUN?T'


*** CODE SEGMENT '?PR?MSC_MemoryRead?T?mscuser':
   85: void MSC_MemoryRead (void) {
 00000000  B510      PUSH        {R4,LR}
 00000002  ---- Variable 'n' assigned to Register 'R4' ----
 00000002            ; SCOPE-START
   88:   if (Length > MSC_MAX_PACKET) {
 00000002  4800      LDR         R0,=Length ; Length
 00000004  6800      LDR         R0,[R0,#0x0] ; Length
 00000006  2840      CMP         R0,#0x40
 00000008  D901      BLS         L_3  ; T=0x0000000E
   89:     n = MSC_MAX_PACKET;
 0000000A  2440      MOV         R4,#0x40
   90:   } else {
 0000000C  E000      B           L_4  ; T=0x00000010
 0000000E          L_3:
   91:     n = Length;
 0000000E  1C04      MOV         R4,R0 ; n
   92:   }
 00000010          L_4:
   94:   if ((Offset + n) > MSC_MemorySize) {
 00000010  1C22      MOV         R2,R4 ; n
 00000012  4800      LDR         R0,=Offset ; Offset
 00000014  6801      LDR         R1,[R0,#0x0] ; Offset
 00000016  188A      ADD         R2,R1,R2 ; n
 00000018  4800      LDR         R0,=0x2000
 0000001A  4282      CMP         R2,R0
 0000001C  D903      BLS         L_5  ; T=0x00000026
   95:     n = MSC_MemorySize - Offset;
 0000001E  1A44      SUB         R4,R0,R1
   96:     BulkStage = MSC_BS_DATA_IN_LAST_STALL;
 00000020  2204      MOV         R2,#0x4
 00000022  4800      LDR         R0,=BulkStage ; BulkStage
 00000024  7002      STRB        R2,[R0,#0x0] ; BulkStage
   97:   }
 00000026          L_5:
   99:   USB_WriteEP(MSC_EP_IN, (BYTE *)(MSC_MemoryStart + Offset), n);
 00000026  4800      LDR         R0,=0x40002000
 00000028  1809      ADD         R1,R0
 0000002A  1C22      MOV         R2,R4 ; n
 0000002C  2082      MOV         R0,#0x82
 0000002E  F7FF      BL          USB_WriteEP?T  ; T=0x0001  (1)
 00000030  FFE7      BL          USB_WriteEP?T  ; T=0x0001  (2)
  100:   Offset += n;
 00000032  1C20      MOV         R0,R4 ; n
 00000034  4800      LDR         R1,=Offset ; Offset
 00000036  6809      LDR         R1,[R1,#0x0] ; Offset
 00000038  1809      ADD         R1,R0 ; n
ARM COMPILER V2.53,  mscuser                                                               12/06/06  10:18:25  PAGE 13  

 0000003A  4800      LDR         R0,=Offset ; Offset
 0000003C  6001      STR         R1,[R0,#0x0] ; Offset
  101:   Length -= n;
 0000003E  1C20      MOV         R0,R4 ; n
 00000040  4800      LDR         R1,=Length ; Length
 00000042  6809      LDR         R1,[R1,#0x0] ; Length
 00000044  1A09      SUB         R1,R0 ; n
 00000046  4800      LDR         R0,=Length ; Length
 00000048  6001      STR         R1,[R0,#0x0] ; Length
  103:   CSW.dDataResidue -= n;
 0000004A  1C22      MOV         R2,R4 ; n
 0000004C  4800      LDR         R3,=CSW + 0x8 ; CSW+8
 0000004E  7819      LDRB        R1,[R3,#0x0] ; CSW+8
 00000050  7858      LDRB        R0,[R3,#0x1] ; CSW+8
 00000052  0200      LSL         R0,R0,#0x8
 00000054  4301      ORR         R1,R0
 00000056  7898      LDRB        R0,[R3,#0x2] ; CSW+8
 00000058  0400      LSL         R0,R0,#0x10
 0000005A  4301      ORR         R1,R0
 0000005C  78D8      LDRB        R0,[R3,#0x3] ; CSW+8
 0000005E  0600      LSL         R0,R0,#0x18
 00000060  4301      ORR         R1,R0
 00000062  1A89      SUB         R1,R2 ; n
 00000064  4800      LDR         R0,=CSW + 0x8 ; CSW+8
 00000066  7001      STRB        R1,[R0,#0x0] ; CSW+8
 00000068  0A09      LSR         R1,R1,#0x8
 0000006A  7041      STRB        R1,[R0,#0x1] ; CSW+8
 0000006C  0A09      LSR         R1,R1,#0x8
 0000006E  7081      STRB        R1,[R0,#0x2] ; CSW+8
 00000070  0A09      LSR         R1,R1,#0x8
 00000072  70C1      STRB        R1,[R0,#0x3] ; CSW+8
  105:   if (Length == 0) {
 00000074  4800      LDR         R0,=Length ; Length
 00000076  6800      LDR         R0,[R0,#0x0] ; Length
 00000078  2800      CMP         R0,#0x0
 0000007A  D102      BNE         L_6  ; T=0x00000082
  106:     BulkStage = MSC_BS_DATA_IN_LAST;
 0000007C  2103      MOV         R1,#0x3
 0000007E  4800      LDR         R0,=BulkStage ; BulkStage
 00000080  7001      STRB        R1,[R0,#0x0] ; BulkStage
  107:   }
 00000082          L_6:
  109:   if (BulkStage != MSC_BS_DATA_IN) {
 00000082  4800      LDR         R0,=BulkStage ; BulkStage
 00000084  7800      LDRB        R0,[R0,#0x0] ; BulkStage
 00000086  2802      CMP         R0,#0x2
 00000088  D005      BEQ         L_7  ; T=0x00000096
  110:     IOCLR1 = LED_RD;            /* Turn Off Read LED */
 0000008A  2101      MOV         R1,#0x1
 0000008C  4800      LDR         R0,=0xE002801C
 0000008E  6001      STR         R1,[R0,#0x0]
  111:     CSW.bStatus = CSW_CMD_PASSED;
 00000090  2100      MOV         R1,#0x0
 00000092  4800      LDR         R0,=CSW + 0xC ; CSW+12
 00000094  7001      STRB        R1,[R0,#0x0] ; CSW+12
  112:   }
 00000096          L_7:
 00000096            ; SCOPE-END
  113: }
 00000096  BC10      POP         {R4}
 00000098  BC08      POP         {R3}
 0000009A  4718      BX          R3
 0000009C          ENDP ; 'MSC_MemoryRead?T'


*** CODE SEGMENT '?PR?MSC_MemoryWrite?T?mscuser':
  123: void MSC_MemoryWrite (void) {
 00000000  B500      PUSH        {LR}
ARM COMPILER V2.53,  mscuser                                                               12/06/06  10:18:25  PAGE 14  

 00000002            ; SCOPE-START
  126:   if ((Offset + BulkLen) > MSC_MemorySize) {
 00000002  4800      LDR         R0,=BulkLen ; BulkLen
 00000004  7800      LDRB        R0,[R0,#0x0] ; BulkLen
 00000006  1C02      MOV         R2,R0
 00000008  4800      LDR         R0,=Offset ; Offset
 0000000A  6800      LDR         R0,[R0,#0x0] ; Offset
 0000000C  1882      ADD         R2,R0,R2
 0000000E  4800      LDR         R1,=0x2000
 00000010  428A      CMP         R2,R1
 00000012  D90A      BLS         L_13  ; T=0x0000002A
  127:     BulkLen = MSC_MemorySize - Offset;
 00000014  1A09      SUB         R1,R0
 00000016  0609      LSL         R1,R1,#0x18
 00000018  0E09      LSR         R1,R1,#0x18
 0000001A  4800      LDR         R0,=BulkLen ; BulkLen
 0000001C  7001      STRB        R1,[R0,#0x0] ; BulkLen
  128:     BulkStage = MSC_BS_CSW;
 0000001E  2105      MOV         R1,#0x5
 00000020  4800      LDR         R0,=BulkStage ; BulkStage
 00000022  7001      STRB        R1,[R0,#0x0] ; BulkStage
  129:     USB_SetStallEP(MSC_EP_OUT);
 00000024  2002      MOV         R0,#0x2
 00000026  F7FF      BL          USB_SetStallEP?T  ; T=0x0001  (1)
 00000028  FFEB      BL          USB_SetStallEP?T  ; T=0x0001  (2)
  132:   for (n = 0; n < BulkLen; n++) {
 0000002A          L_13:
 0000002A  2000      MOV         R0,#0x0
 0000002C  ---- Variable 'n' assigned to Register 'R0' ----
 0000002C  E009      B           L_11  ; T=0x00000042
 0000002E          L_12:
  133:     Memory[Offset + n] = BulkBuf[n];
 0000002E  1C02      MOV         R2,R0 ; n
 00000030  4800      LDR         R1,=BulkBuf ; BulkBuf

⌨️ 快捷键说明

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