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

📄 mscuser.lst

📁 开发ARM,基于IAR环境下的C代码开发
💻 LST
📖 第 1 页 / 共 5 页
字号:
  595          
  596          void MSC_BulkIn (void) {
  597   1      
  598   1        switch (BulkStage) {
  599   2          case MSC_BS_DATA_IN:
  600   2            switch (CBW.CB[0]) {
  601   3              case SCSI_READ10:
  602   3                MSC_MemoryRead();
  603   3                break;
  604   3            }
  605   2            break;
  606   2          case MSC_BS_DATA_IN_LAST:
  607   2            MSC_SetCSW();
  608   2            break;
  609   2          case MSC_BS_DATA_IN_LAST_STALL:
  610   2            USB_SetStallEP(MSC_EP_IN);
  611   2            MSC_SetCSW();
  612   2            break;
  613   2          case MSC_BS_CSW:
  614   2            BulkStage = MSC_BS_CBW;
  615   2            break;
  616   2        }
  617   1      }
  618          
  619          
  620          /*
  621           *  MSC Bulk Out Callback
  622           *    Parameters:      None (global variables)
  623           *    Return Value:    None
  624           */
  625          
  626          void MSC_BulkOut (void) {
  627   1      
  628   1        BulkLen = USB_ReadEP(MSC_EP_OUT, BulkBuf);
  629   1        switch (BulkStage) {
  630   2          case MSC_BS_CBW:
  631   2            MSC_GetCBW();
  632   2            break;
  633   2          case MSC_BS_DATA_OUT:
  634   2            switch (CBW.CB[0]) {
  635   3              case SCSI_WRITE10:
  636   3                MSC_MemoryWrite();
  637   3                break;
  638   3              case SCSI_VERIFY10:
  639   3                MSC_MemoryVerify();
  640   3                break;
  641   3            }
  642   2            break;
  643   2          default:
  644   2            USB_SetStallEP(MSC_EP_OUT);
  645   2            CSW.bStatus = CSW_PHASE_ERROR;
  646   2            MSC_SetCSW();
  647   2            break;
  648   2        }
  649   1      }
ARM COMPILER V2.53,  mscuser                                                               24/09/06  22:23:19  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_202000_?1?mscuser':
 00202000          Memory:
 00202000            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':
   56:   AT91C_BASE_PIOA->PIO_SODR = LED1 | LED2;     /* Turn Off R/W LED */
 00000000  2103      MOV         R1,#0x3
 00000002  4800      LDR         R0,=0xFFFFF430
 00000004  6001      STR         R1,[R0,#0x0]
ARM COMPILER V2.53,  mscuser                                                               24/09/06  22:23:19  PAGE 12  

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


*** CODE SEGMENT '?PR?MSC_GetMaxLUN?T?mscuser':
   71:   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
   72:   return (TRUE);
 00000006  2001      MOV         R0,#0x1
   73: }
 00000008  4770      BX          R14
 0000000A          ENDP ; 'MSC_GetMaxLUN?T'


*** CODE SEGMENT '?PR?MSC_MemoryRead?T?mscuser':
   83: void MSC_MemoryRead (void) {
 00000000  B510      PUSH        {R4,LR}
 00000002  ---- Variable 'n' assigned to Register 'R4' ----
 00000002            ; SCOPE-START
   86:   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
   87:     n = MSC_MAX_PACKET;
 0000000A  2440      MOV         R4,#0x40
   88:   } else {
 0000000C  E000      B           L_4  ; T=0x00000010
 0000000E          L_3:
   89:     n = Length;
 0000000E  1C04      MOV         R4,R0 ; n
   90:   }
 00000010          L_4:
   92:   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
   93:     n = MSC_MemorySize - Offset;
 0000001E  1A44      SUB         R4,R0,R1
   94:     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
   95:   }
 00000026          L_5:
   97:   USB_WriteEP(MSC_EP_IN, (BYTE *)(MSC_MemoryStart + Offset), n);
 00000026  4800      LDR         R0,=0x202000
 00000028  1809      ADD         R1,R0
 0000002A  1C22      MOV         R2,R4 ; n
 0000002C  2081      MOV         R0,#0x81
 0000002E  F7FF      BL          USB_WriteEP?T  ; T=0x0001  (1)
 00000030  FFE7      BL          USB_WriteEP?T  ; T=0x0001  (2)
   98:   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                                                               24/09/06  22:23:19  PAGE 13  

 0000003A  4800      LDR         R0,=Offset ; Offset
 0000003C  6001      STR         R1,[R0,#0x0] ; Offset
   99:   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
  101:   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
  103:   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
  104:     BulkStage = MSC_BS_DATA_IN_LAST;
 0000007C  2103      MOV         R1,#0x3
 0000007E  4800      LDR         R0,=BulkStage ; BulkStage
 00000080  7001      STRB        R1,[R0,#0x0] ; BulkStage
  105:   }
 00000082          L_6:
  107:   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
  108:     AT91C_BASE_PIOA->PIO_SODR = LED1;  /* Turn Off Read LED */
 0000008A  2101      MOV         R1,#0x1
 0000008C  4800      LDR         R0,=0xFFFFF430
 0000008E  6001      STR         R1,[R0,#0x0]
  109:     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
  110:   }
 00000096          L_7:
 00000096            ; SCOPE-END
  111: }
 00000096  BC10      POP         {R4}
 00000098  BC08      POP         {R3}
 0000009A  4718      BX          R3
 0000009C          ENDP ; 'MSC_MemoryRead?T'


*** CODE SEGMENT '?PR?MSC_MemoryWrite?T?mscuser':
  121: void MSC_MemoryWrite (void) {
 00000000  B500      PUSH        {LR}
ARM COMPILER V2.53,  mscuser                                                               24/09/06  22:23:19  PAGE 14  

 00000002            ; SCOPE-START
  124:   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
  125:     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
  126:     BulkStage = MSC_BS_CSW;
 0000001E  2105      MOV         R1,#0x5
 00000020  4800      LDR         R0,=BulkStage ; BulkStage
 00000022  7001      STRB        R1,[R0,#0x0] ; BulkStage
  127:     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)
  130:   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:
  131:     Memory[Offset + n] = BulkBuf[n];
 0000002E  1C02      MOV         R2,R0 ; n
 00000030  4800      LDR         R1,=BulkBuf ; BulkBuf
 00000032  5C89      LDRB        R1,[R1,R2]
 00000034  1C02      MOV         R2,R0 ; n

⌨️ 快捷键说明

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