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

📄 usbci.lst

📁 周立功的LPC214x固件程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
  321:     USBCtrl = (INT32U)((endp >> 1) << 2) | 0x01;         /* 选择逻辑端点并使能读操作 */
 00000004  A804      ADD         R0,R13,#0x10
 00000006  7800      LDRB        R0,[R0,#0x0] ; endp
 00000008  1C01      MOV         R1,R0
 0000000A  0849      LSR         R1,R1,#0x1
 0000000C  0089      LSL         R1,R1,#0x2
 0000000E  2001      MOV         R0,#0x1
 00000010  4301      ORR         R1,R0
 00000012  4800      LDR         R0,=0xE0090028
 00000014  6001      STR         R1,[R0,#0x0]
  324:     if((endp % 2 == 0))                                 //判断被读取的物理端点号是否为偶数(偶数继续)
 00000016  A804      ADD         R0,R13,#0x10
 00000018  7800      LDRB        R0,[R0,#0x0] ; endp
 0000001A  2102      MOV         R1,#0x2
 0000001C  F7FF      BL          ?C?SDIV?T  ; T=0x0001  (1) ; ?C?SDIV?T
 0000001E  FFF0      BL          ?C?SDIV?T  ; T=0x0001  (2) ; ?C?SDIV?T
 00000020  1C01      MOV         R1,R0
 00000022  2900      CMP         R1,#0x0
 00000024  D104      BNE         L_25  ; T=0x00000030
ARM COMPILER V2.53,  USBCI                                                                 28/06/07  09:54:12  PAGE 16  

  325:         while((USBRxPLen & 0x00000C00) ==0);             /* 等待数据就绪 */
 00000026          L_26:
 00000026  4800      LDR         R0,=0xE0090020
 00000028  6800      LDR         R0,[R0,#0x0]
 0000002A  4800      LDR         R1,=0xC00
 0000002C  4208      TST         R0,R1
 0000002E  D0FA      BEQ         L_26  ; T=0x00000026
 00000030          L_25:
  328:     reclen = USBRxPLen & 0x1FF;                          /* 获取收到的数据的字节长度 */             
 00000030  4800      LDR         R0,=0xE0090020
 00000032  6801      LDR         R1,[R0,#0x0]
 00000034  4800      LDR         R0,=0x1FF
 00000036  4001      AND         R1,R0
 00000038  A803      ADD         R0,R13,#0xC
 0000003A  6001      STR         R1,[R0,#0x0] ; reclen
  329:     if (reclen > len)
 0000003C  A805      ADD         R0,R13,#0x14
 0000003E  7800      LDRB        R0,[R0,#0x0] ; len
 00000040  1C01      MOV         R1,R0
 00000042  A803      ADD         R0,R13,#0xC
 00000044  6800      LDR         R0,[R0,#0x0] ; reclen
 00000046  4288      CMP         R0,R1
 00000048  D904      BLS         L_35  ; T=0x00000054
  330:         reclen = len; 
 0000004A  A805      ADD         R0,R13,#0x14
 0000004C  7800      LDRB        R0,[R0,#0x0] ; len
 0000004E  1C01      MOV         R1,R0
 00000050  A803      ADD         R0,R13,#0xC
 00000052  6001      STR         R1,[R0,#0x0] ; reclen
  333:     for (i = 0; i < (reclen / 4); i++)                  
 00000054          L_35:
 00000054  2100      MOV         R1,#0x0
 00000056  A801      ADD         R0,R13,#0x4
 00000058  6001      STR         R1,[R0,#0x0] ; i
 0000005A  E032      B           L_33  ; T=0x000000C2
 0000005C          L_34:
  335:         tmp = USBRxData;        
 0000005C  4800      LDR         R0,=0xE0090018
 0000005E  6801      LDR         R1,[R0,#0x0]
 00000060  A800      ADD         R0,R13,#0x0
 00000062  6001      STR         R1,[R0,#0x0] ; tmp
  336:         *buf++ = (INT8U)tmp; 
 00000064  A800      ADD         R0,R13,#0x0
 00000066  6801      LDR         R1,[R0,#0x0] ; tmp
 00000068  0609      LSL         R1,R1,#0x18
 0000006A  0E09      LSR         R1,R1,#0x18
 0000006C  AA06      ADD         R2,R13,#0x18
 0000006E  6810      LDR         R0,[R2,#0x0] ; buf
 00000070  1C03      MOV         R3,R0
 00000072  3301      ADD         R3,#0x1
 00000074  6013      STR         R3,[R2,#0x0] ; buf
 00000076  7001      STRB        R1,[R0,#0x0]
  337:         *buf++ = (INT8U)(tmp >> 8);
 00000078  A800      ADD         R0,R13,#0x0
 0000007A  6801      LDR         R1,[R0,#0x0] ; tmp
 0000007C  0A09      LSR         R1,R1,#0x8
 0000007E  0609      LSL         R1,R1,#0x18
 00000080  0E09      LSR         R1,R1,#0x18
 00000082  AA06      ADD         R2,R13,#0x18
 00000084  6810      LDR         R0,[R2,#0x0] ; buf
 00000086  1C03      MOV         R3,R0
 00000088  3301      ADD         R3,#0x1
 0000008A  6013      STR         R3,[R2,#0x0] ; buf
 0000008C  7001      STRB        R1,[R0,#0x0]
  338:         *buf++ = (INT8U)(tmp >> 16);
 0000008E  A800      ADD         R0,R13,#0x0
ARM COMPILER V2.53,  USBCI                                                                 28/06/07  09:54:12  PAGE 17  

 00000090  6801      LDR         R1,[R0,#0x0] ; tmp
 00000092  0C09      LSR         R1,R1,#0x10
 00000094  0609      LSL         R1,R1,#0x18
 00000096  0E09      LSR         R1,R1,#0x18
 00000098  AA06      ADD         R2,R13,#0x18
 0000009A  6810      LDR         R0,[R2,#0x0] ; buf
 0000009C  1C03      MOV         R3,R0
 0000009E  3301      ADD         R3,#0x1
 000000A0  6013      STR         R3,[R2,#0x0] ; buf
 000000A2  7001      STRB        R1,[R0,#0x0]
  339:         *buf++ = (INT8U)(tmp >> 24);
 000000A4  A800      ADD         R0,R13,#0x0
 000000A6  6801      LDR         R1,[R0,#0x0] ; tmp
 000000A8  0E09      LSR         R1,R1,#0x18
 000000AA  0609      LSL         R1,R1,#0x18
 000000AC  0E09      LSR         R1,R1,#0x18
 000000AE  AA06      ADD         R2,R13,#0x18
 000000B0  6810      LDR         R0,[R2,#0x0] ; buf
 000000B2  1C03      MOV         R3,R0
 000000B4  3301      ADD         R3,#0x1
 000000B6  6013      STR         R3,[R2,#0x0] ; buf
 000000B8  7001      STRB        R1,[R0,#0x0]
  340:     }    
 000000BA  A801      ADD         R0,R13,#0x4
 000000BC  6801      LDR         R1,[R0,#0x0] ; i
 000000BE  3101      ADD         R1,#0x1
 000000C0  6001      STR         R1,[R0,#0x0] ; i
 000000C2          L_33:
 000000C2  A803      ADD         R0,R13,#0xC
 000000C4  6801      LDR         R1,[R0,#0x0] ; reclen
 000000C6  0889      LSR         R1,R1,#0x2
 000000C8  A801      ADD         R0,R13,#0x4
 000000CA  6800      LDR         R0,[R0,#0x0] ; i
 000000CC  4288      CMP         R0,R1
 000000CE  D3C5      BCC         L_34  ; T=0x0000005C
  342:     j = reclen % 4;                                     //读取不足4bytes的数据
 000000D0  A803      ADD         R0,R13,#0xC
 000000D2  6801      LDR         R1,[R0,#0x0] ; reclen
 000000D4  2003      MOV         R0,#0x3
 000000D6  4001      AND         R1,R0
 000000D8  A802      ADD         R0,R13,#0x8
 000000DA  6001      STR         R1,[R0,#0x0] ; j
  343:     if (j != 0)
 000000DC  A802      ADD         R0,R13,#0x8
 000000DE  6800      LDR         R0,[R0,#0x0] ; j
 000000E0  2800      CMP         R0,#0x0
 000000E2  D01F      BEQ         L_36  ; T=0x00000124
  345:         tmp = USBRxData;    
 000000E4  4800      LDR         R0,=0xE0090018
 000000E6  6801      LDR         R1,[R0,#0x0]
 000000E8  A800      ADD         R0,R13,#0x0
 000000EA  6001      STR         R1,[R0,#0x0] ; tmp
  347:         for(i = 0; i < j; i++)
 000000EC  2100      MOV         R1,#0x0
 000000EE  A801      ADD         R0,R13,#0x4
 000000F0  6001      STR         R1,[R0,#0x0] ; i
 000000F2  E011      B           L_39  ; T=0x00000118
 000000F4          L_40:
  348:            *buf++ = (INT8U)(tmp >> (i << 3));
 000000F4  A801      ADD         R0,R13,#0x4
 000000F6  6800      LDR         R0,[R0,#0x0] ; i
 000000F8  00C0      LSL         R0,R0,#0x3
 000000FA  A900      ADD         R1,R13,#0x0
 000000FC  6809      LDR         R1,[R1,#0x0] ; tmp
 000000FE  40C1      LSR         R1,R0
 00000100  0609      LSL         R1,R1,#0x18
ARM COMPILER V2.53,  USBCI                                                                 28/06/07  09:54:12  PAGE 18  

 00000102  0E09      LSR         R1,R1,#0x18
 00000104  AA06      ADD         R2,R13,#0x18
 00000106  6810      LDR         R0,[R2,#0x0] ; buf
 00000108  1C03      MOV         R3,R0
 0000010A  3301      ADD         R3,#0x1
 0000010C  6013      STR         R3,[R2,#0x0] ; buf
 0000010E  7001      STRB        R1,[R0,#0x0]
 00000110  A801      ADD         R0,R13,#0x4
 00000112  6801      LDR         R1,[R0,#0x0] ; i
 00000114  3101      ADD         R1,#0x1
 00000116  6001      STR         R1,[R0,#0x0] ; i
 00000118          L_39:
 00000118  A802      ADD         R0,R13,#0x8
 0000011A  6801      LDR         R1,[R0,#0x0] ; j
 0000011C  A801      ADD         R0,R13,#0x4
 0000011E  6800      LDR         R0,[R0,#0x0] ; i
 00000120  4288      CMP         R0,R1
 00000122  D3E7      BCC         L_40  ; T=0x000000F4
  349:     }
 00000124          L_36:
  352:     USBDevIntClr = RxENDPKT;                             /* 清除 RxENDPKT 位 */  
 00000124  2140      MOV         R1,#0x40
 00000126  4800      LDR         R0,=0xE0090008
 00000128  6001      STR         R1,[R0,#0x0]
  355:     USB_SelectEndpoint(endp);                             
 0000012A  A804      ADD         R0,R13,#0x10
 0000012C  7800      LDRB        R0,[R0,#0x0] ; endp
 0000012E  F7FF      BL          USB_SelectEndpoint?T  ; T=0x0001  (1)
 00000130  FF67      BL          USB_SelectEndpoint?T  ; T=0x0001  (2)
  356:     USB_ClearBuffer();                                   /* 清除OUT缓冲区 */ 
 00000132  F7FF      BL          USB_ClearBuffer?T  ; T=0x0001  (1)
 00000134  FF65      BL          USB_ClearBuffer?T  ; T=0x0001  (2)
  358:     return reclen;                                       /* 返回实际收到的字节数 */
 00000136  A803      ADD         R0,R13,#0xC
 00000138  6800      LDR         R0,[R0,#0x0] ; reclen
 0000013A            ; SCOPE-END
  359: }
 0000013A  B004      ADD         R13,#0x10
 0000013C  B003      ADD         R13,#0xC
 0000013E  BC08      POP         {R3}
 00000140  4718      BX          R3
 00000142          ENDP ; 'USB_ReadEndpoint?T'


*** CODE SEGMENT '?PR?USB_WriteEndpoint?T?USBCI':
  370: INT8U USB_WriteEndpoint(INT8U endp, INT8U len, INT8U *buf)
 00000000  B507      PUSH        {R0-R2,LR}
 00000002  B083      SUB         R13,#0xC
  371: {
 00000004            ; SCOPE-START
  376:     tmp = ((endp >> 1) << 2) | 0x02;                      /* 选择逻辑端点并使能写操作 */
 00000004  A803      ADD         R0,R13,#0xC
 00000006  7800      LDRB        R0,[R0,#0x0] ; endp
 00000008  1C01      MOV         R1,R0
 0000000A  0849      LSR         R1,R1,#0x1
 0000000C  0089      LSL         R1,R1,#0x2
 0000000E  2002      MOV         R0,#0x2
 00000010  4301      ORR         R1,R0
 00000012  A800      ADD         R0,R13,#0x0
 00000014  6001      STR         R1,[R0,#0x0] ; tmp
  377:     USBCtrl = (INT32U)tmp;
 00000016  A800      ADD         R0,R13,#0x0
 00000018  6801      LDR         R1,[R0,#0x0] ; tmp
 0000001A  4800      LDR         R0,=0xE0090028
 0000001C  6001      STR         R1,[R0,#0x0]
  380:     USBTxPLen = (INT32U)len;                              /* 写入要发送的数据的字节长度 */
 0000001E  A804      ADD         R0,R13,#0x10
 00000020  7800      LDRB        R0,[R0,#0x0] ; len
ARM COMPILER V2.53,  USBCI                                                                 28/06/07  09:54:12  PAGE 19  

 00000022  1C01      MOV         R1,R0
 00000024  4800      LDR         R0,=0xE0090024
 00000026  6001      STR         R1,[R0,#0x0]
  383:     j = len >> 2;
 00000028  A804      ADD         R0,R13,#0x10
 0000002A  7800      LDRB        R0,[R0,#0x0] ; len
 0000002C  1C01      MOV         R1,R0
 0000002E  0889      LSR         R1,R1,#0x2
 00000030  A802      ADD         R0,R13,#0x8
 00000032  6001      STR         R1,[R0,#0x0] ; j
  384:     for(i = 1; i <= j; i++)
 00000034  2101      MOV         R1,#0x1
 00000036  A801      ADD         R0,R13,#0x4
 00000038  6001      STR         R1,[R0,#0x0] ; i
 0000003A  E03F      B           L_45  ; T=0x000000BC
 0000003C          L_46:
  386:         tmp =  (INT32U)*buf++;
 0000003C  A905      ADD         R1,R13,#0x14
 0000003E  6808      LDR         R0,[R1,#0x0] ; buf
 00000040  1C02      MOV         R2,R0
 0000

⌨️ 快捷键说明

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