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

📄 usbhw.lst

📁 将LPC2148通过自带的USB口配置为USB存储设备.
💻 LST
📖 第 1 页 / 共 5 页
字号:
 00000002  1C04      MOV         R4,R0 ; pEPD
 00000004  ---- Variable 'pEPD' assigned to Register 'R4' ----
 00000004            ; SCOPE-START
  279:   num = EPAdr(pEPD->bEndpointAddress);
 00000004  1C20      MOV         R0,R4 ; pEPD
 00000006  7880      LDRB        R0,[R0,#0x2]
 00000008  F7FF      BL          EPAdr?T  ; T=0x0001  (1)
 0000000A  FFFA      BL          EPAdr?T  ; T=0x0001  (2)
 0000000C  ---- Variable 'num' assigned to Register 'R0' ----
  280:   REALIZE_EP |= (1 << num);
 0000000C  1C01      MOV         R1,R0 ; num
 0000000E  2301      MOV         R3,#0x1
 00000010  408B      LSL         R3,R1
 00000012  4800      LDR         R1,=0xE0090044
 00000014  680A      LDR         R2,[R1,#0x0]
 00000016  431A      ORR         R2,R3
 00000018  600A      STR         R2,[R1,#0x0]
  281:   EP_INDEX = num;
 0000001A  1C01      MOV         R1,R0 ; num
 0000001C  4800      LDR         R0,=0xE0090048
 0000001E  6001      STR         R1,[R0,#0x0]
  282:   MAXPACKET_SIZE = pEPD->wMaxPacketSize;
 00000020  1C21      MOV         R1,R4 ; pEPD
 00000022  3104      ADD         R1,#0x4
 00000024  7808      LDRB        R0,[R1,#0x0]
 00000026  784A      LDRB        R2,[R1,#0x1]
 00000028  0212      LSL         R2,R2,#0x8
 0000002A  4310      ORR         R0,R2
 0000002C  1C01      MOV         R1,R0
 0000002E  4800      LDR         R0,=0xE009004C
 00000030  6001      STR         R1,[R0,#0x0]
  283:   while ((DEV_INT_STAT & EP_RLZED_INT) == 0);
 00000032          L_37:
 00000032  4800      LDR         R0,=0xE0090000
 00000034  6800      LDR         R0,[R0,#0x0]
 00000036  4940      LDR         R1,=0x100
 00000038  4208      TST         R0,R1
 0000003A  D0FA      BEQ         L_37  ; T=0x00000032
  284:   DEV_INT_CLR = EP_RLZED_INT;
 0000003C  4800      LDR         R0,=0xE0090008
 0000003E  6001      STR         R1,[R0,#0x0]
 00000040            ; SCOPE-END
  285: }
 00000040  BC10      POP         {R4}
 00000042  BC08      POP         {R3}
 00000044  4718      BX          R3
 00000046          ENDP ; 'USB_ConfigEP?T'


*** CODE SEGMENT '?PR?USB_DirCtrlEP?T?usbhw':
  296: }
 00000000  4770      BX          R14
 00000002          ENDP ; 'USB_DirCtrlEP?T'


*** CODE SEGMENT '?PR?USB_EnableEP?T?usbhw':
  307: void USB_EnableEP (DWORD EPNum) {
 00000000  B500      PUSH        {LR}
 00000002  1C01      MOV         R1,R0 ; EPNum
 00000004  ---- Variable 'EPNum' assigned to Register 'R1' ----
  308:   WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(0));
 00000004  1C08      MOV         R0,R1 ; EPNum
 00000006  F7FF      BL          EPAdr?T  ; T=0x0001  (1)
 00000008  FFFB      BL          EPAdr?T  ; T=0x0001  (2)
ARM COMPILER V2.50a,  usbhw                                                                04/04/06  11:13:56  PAGE 20  

 0000000A  0400      LSL         R0,R0,#0x10 ; EPAdr?T
 0000000C  4800      LDR         R1,=0x400500
 0000000E  4308      ORR         R0,R1
 00000010  4940      LDR         R1,=0x100
 00000012  F7FF      BL          WrCmdDat?T  ; T=0x0001  (1)
 00000014  FFF5      BL          WrCmdDat?T  ; T=0x0001  (2)
  309: }
 00000016  BC08      POP         {R3}
 00000018  4718      BX          R3
 0000001A          ENDP ; 'USB_EnableEP?T'


*** CODE SEGMENT '?PR?USB_DisableEP?T?usbhw':
  320: void USB_DisableEP (DWORD EPNum) {
 00000000  B500      PUSH        {LR}
 00000002  1C01      MOV         R1,R0 ; EPNum
 00000004  ---- Variable 'EPNum' assigned to Register 'R1' ----
  321:   WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(EP_STAT_DA));
 00000004  1C08      MOV         R0,R1 ; EPNum
 00000006  F7FF      BL          EPAdr?T  ; T=0x0001  (1)
 00000008  FFFB      BL          EPAdr?T  ; T=0x0001  (2)
 0000000A  0400      LSL         R0,R0,#0x10 ; EPAdr?T
 0000000C  4800      LDR         R1,=0x400500
 0000000E  4308      ORR         R0,R1
 00000010  4800      LDR         R1,=0x200100
 00000012  F7FF      BL          WrCmdDat?T  ; T=0x0001  (1)
 00000014  FFF5      BL          WrCmdDat?T  ; T=0x0001  (2)
  322: }
 00000016  BC08      POP         {R3}
 00000018  4718      BX          R3
 0000001A          ENDP ; 'USB_DisableEP?T'


*** CODE SEGMENT '?PR?USB_ResetEP?T?usbhw':
  333: void USB_ResetEP (DWORD EPNum) {
 00000000  B500      PUSH        {LR}
 00000002  1C01      MOV         R1,R0 ; EPNum
 00000004  ---- Variable 'EPNum' assigned to Register 'R1' ----
  334:   WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(0));
 00000004  1C08      MOV         R0,R1 ; EPNum
 00000006  F7FF      BL          EPAdr?T  ; T=0x0001  (1)
 00000008  FFFB      BL          EPAdr?T  ; T=0x0001  (2)
 0000000A  0400      LSL         R0,R0,#0x10 ; EPAdr?T
 0000000C  4800      LDR         R1,=0x400500
 0000000E  4308      ORR         R0,R1
 00000010  4940      LDR         R1,=0x100
 00000012  F7FF      BL          WrCmdDat?T  ; T=0x0001  (1)
 00000014  FFF5      BL          WrCmdDat?T  ; T=0x0001  (2)
  335: }
 00000016  BC08      POP         {R3}
 00000018  4718      BX          R3
 0000001A          ENDP ; 'USB_ResetEP?T'


*** CODE SEGMENT '?PR?USB_SetStallEP?T?usbhw':
  346: void USB_SetStallEP (DWORD EPNum) {
 00000000  B500      PUSH        {LR}
 00000002  1C01      MOV         R1,R0 ; EPNum
 00000004  ---- Variable 'EPNum' assigned to Register 'R1' ----
  347:   WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(EP_STAT_ST));
 00000004  1C08      MOV         R0,R1 ; EPNum
 00000006  F7FF      BL          EPAdr?T  ; T=0x0001  (1)
 00000008  FFFB      BL          EPAdr?T  ; T=0x0001  (2)
 0000000A  0400      LSL         R0,R0,#0x10 ; EPAdr?T
 0000000C  4800      LDR         R1,=0x400500
 0000000E  4308      ORR         R0,R1
 00000010  4800      LDR         R1,=0x10100
 00000012  F7FF      BL          WrCmdDat?T  ; T=0x0001  (1)
 00000014  FFF5      BL          WrCmdDat?T  ; T=0x0001  (2)
  348: }
 00000016  BC08      POP         {R3}
 00000018  4718      BX          R3
ARM COMPILER V2.50a,  usbhw                                                                04/04/06  11:13:56  PAGE 21  

 0000001A          ENDP ; 'USB_SetStallEP?T'


*** CODE SEGMENT '?PR?USB_ClrStallEP?T?usbhw':
  359: void USB_ClrStallEP (DWORD EPNum) {
 00000000  B500      PUSH        {LR}
 00000002  1C01      MOV         R1,R0 ; EPNum
 00000004  ---- Variable 'EPNum' assigned to Register 'R1' ----
  360:   WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(0));
 00000004  1C08      MOV         R0,R1 ; EPNum
 00000006  F7FF      BL          EPAdr?T  ; T=0x0001  (1)
 00000008  FFFB      BL          EPAdr?T  ; T=0x0001  (2)
 0000000A  0400      LSL         R0,R0,#0x10 ; EPAdr?T
 0000000C  4800      LDR         R1,=0x400500
 0000000E  4308      ORR         R0,R1
 00000010  4940      LDR         R1,=0x100
 00000012  F7FF      BL          WrCmdDat?T  ; T=0x0001  (1)
 00000014  FFF5      BL          WrCmdDat?T  ; T=0x0001  (2)
  361: }
 00000016  BC08      POP         {R3}
 00000018  4718      BX          R3
 0000001A          ENDP ; 'USB_ClrStallEP?T'


*** CODE SEGMENT '?PR?USB_ReadEP?T?usbhw':
  373: DWORD USB_ReadEP (DWORD EPNum, BYTE *pData) {
 00000000  B570      PUSH        {R4-R6,LR}
 00000002  ---- Variable 'pData' assigned to Register 'R1' ----
 00000002  1C03      MOV         R3,R0 ; EPNum
 00000004  ---- Variable 'EPNum' assigned to Register 'R3' ----
 00000004  ---- Variable 'cnt' assigned to Register 'R4' ----
 00000004            ; SCOPE-START
  376:   USB_CTRL = ((EPNum & 0x0F) << 2) | CTRL_RD_EN;
 00000004  1C1A      MOV         R2,R3 ; EPNum
 00000006  200F      MOV         R0,#0xF
 00000008  4002      AND         R2,R0
 0000000A  0092      LSL         R2,R2,#0x2
 0000000C  2001      MOV         R0,#0x1
 0000000E  4302      ORR         R2,R0
 00000010  4800      LDR         R0,=0xE0090028
 00000012  6002      STR         R2,[R0,#0x0]
  378:   do {
 00000014          L_41:
  379:     cnt = RX_PLENGTH;
 00000014  4800      LDR         R0,=0xE0090020
 00000016  6804      LDR         R4,[R0,#0x0]
  380:   } while ((cnt & PKT_RDY) == 0);
 00000018  1C20      MOV         R0,R4 ; cnt
 0000001A  4800      LDR         R2,=0x800
 0000001C  4210      TST         R0,R2 ; cnt
 0000001E  D0F9      BEQ         L_41  ; T=0x00000014
  381:   cnt &= PKT_LNGTH_MASK;
 00000020  4800      LDR         R0,=0x3FF
 00000022  4004      AND         R4,R0
  383:   for (n = 0; n < (cnt + 3) / 4; n++) {
 00000024  2000      MOV         R0,#0x0
 00000026  ---- Variable 'n' assigned to Register 'R0' ----
 00000026  E00B      B           L_47  ; T=0x00000040
 00000028          L_48:
  384:     *((__packed DWORD *)pData) = RX_DATA;
 00000028  4800      LDR         R2,=0xE0090018
 0000002A  6816      LDR         R6,[R2,#0x0]
 0000002C  1C0D      MOV         R5,R1 ; pData
 0000002E  702E      STRB        R6,[R5,#0x0] ; pData
 00000030  0A36      LSR         R6,R6,#0x8
 00000032  706E      STRB        R6,[R5,#0x1] ; pData
 00000034  0A36      LSR         R6,R6,#0x8
 00000036  70AE      STRB        R6,[R5,#0x2] ; pData
 00000038  0A36      LSR         R6,R6,#0x8
 0000003A  70EE      STRB        R6,[R5,#0x3] ; pData
ARM COMPILER V2.50a,  usbhw                                                                04/04/06  11:13:56  PAGE 22  

  385:     pData += 4;
 0000003C  3104      ADD         R1,#0x4
  386:   }
 0000003E  3001      ADD         R0,#0x1
 00000040          L_47:
 00000040  1C25      MOV         R5,R4 ; cnt
 00000042  3503      ADD         R5,#0x3
 00000044  08AD      LSR         R5,R5,#0x2
 00000046  1C02      MOV         R2,R0 ; n
 00000048  42AA      CMP         R2,R5 ; n
 0000004A  D3ED      BCC         L_48  ; T=0x00000028
  388:   USB_CTRL = 0;
 0000004C  2100      MOV         R1,#0x0
 0000004E  4800      LDR         R0,=0xE0090028
 00000050  6001      STR         R1,[R0,#0x0]
  390:   if (((EP_MSK_ISO >> EPNum) & 1) == 0) {   /* Non-Isochronous Endpoint */
 00000052  1C19      MOV         R1,R3 ; EPNum
 00000054  4800      LDR         R0,=0x1248
 00000056  4108      ASR         R0,R1
 00000058  2101      MOV         R1,#0x1
 0000005A  4208      TST         R0,R1
 0000005C  D10A      BNE         L_50  ; T=0x00000074
  391:     WrCmd(CMD_SEL_EP(EPAdr(EPNum)));
 0000005E  1C18      MOV         R0,R3 ; EPNum
 00000060  F7FF      BL          EPAdr?T  ; T=0x0001  (1)
 00000062  FFCE      BL          EPAdr?T  ; T=0x0001  (2)
 00000064  0400      LSL         R0,R0,#0x10 ; EPAdr?T
 00000066  4800      LDR         R1,=0x500
 00000068  4308      ORR         R0,R1
 0000006A  F7FF      BL          WrCmd?T  ; T=0x0001  (1)
 0000006C  FFC9      BL          WrCmd?T  ; T=0x0001  (2)
  392:     WrCmd(CMD_CLR_BUF);
 0000006E  4800      LDR         R0,=0xF20500
 00000070  F7FF      BL          WrCmd?T  ; T=0x0001  (1)
 00000072  FFC6      BL          WrCmd?T  ; T=0x0001  (2)
  393:   }
 00000074          L_50:
  395:   return (cnt);
 00000074  1C20      MOV         R0,R4 ; cnt
 00000076            ; SCOPE-END
  396: }
 00000076  BC70      POP         {R4-R6}
 00000078  BC08      POP         {R3}
 0000007A  4718      BX          R3
 0000007C          ENDP ; 'USB_ReadEP?T'


*** CODE SEGMENT '?PR?USB_WriteEP?T?usbhw':
  409: DWORD USB_WriteEP (DWORD EPNum, BYTE *pData, DWORD cnt) {
 00000000  B570      PUSH        {R4-R6,LR}
 00000002  1C14      MOV         R4,R2 ; cnt
 00000004  ---- Variable 'cnt' assigned to Register 'R4' ----
 00000004  ---- Variable 'pData' assigned to Register 'R1' ----
 00000004  1C03      MOV         R3,R0 ; EPNum
 00000006  ---- Variable 'EPNum' assigned to Register 'R3' ----
 00000006            ; SCOPE-START
  412:   USB_CTRL = ((EPNum & 0x0F) << 2) | CTRL_WR_EN;
 00000006  1C1A      MOV         R2,R3 ; EPNum
 00000008  200F      MOV         R0,#0xF
 0000000A  4002      AND         R2,R0
 0000000C  0092      LSL         R2,R2,#0x2
 0000000E  2002      MOV         R0,#0x2
 00000010  4302      ORR         R2,R0
 00000012  4800      LDR         R0,=0xE0090028
 00000014  6002      STR         R2,[R0,#0x0]
  414:   TX_PLENGTH = cnt;
 00000016  1C22      MOV         R2,R4 ; cnt
 00000018  4800      LDR         R0,=0xE0090024
ARM COMPILER V2.50a,  usbhw                                                                04/04/06  11:13:56  PAGE 23  

 0000001A  6002      STR         R2,[R0,#0x0]
  416:   for (n = 0; n < (cnt + 3) / 4; n++) {
 0000001C  2500      MOV         R5,#0x0
 0000001E  ---- Variable 'n' assigned to Register 'R5' ----
 0000001E  E00E      B           L_54  ; T=0x0000003E
 00000020          L_55:
  417:     TX_DATA = *((__packed DWORD *)pData);
 00000020  1C0E      MOV         R6,R1 ; pData
 00000022  7832      LDRB        R2,[R6,#0x0] ; pData
 00000024  7870      LDRB        R0,[R6,#0x1] ; pData
 00000026  0200      LSL         R0,R0,#0x8
 00000028  4302      ORR         R2,R0
 0000002A  78B0      LDRB        R0,[R6,#0x2] ; pData
 0000002C  0400      LSL         R0,R0,#0x10
 0000002E  4302      ORR         R2,R0
 00000030  78F0      LDRB        R0,[R6,#0x3] ; pData
 00000032  0600      LSL         R0,R0,#0x18
 00000034  4302      ORR         R2,R0
 00000036  4800      LDR         R0,=0xE009001C
 00000038  6002      STR         R2,[R0,#0x0]
  418:     pData += 4;
 0000003A  3104      ADD         R1,#0x4
  419:   }
 0000003C  3501      ADD         R5,#0x1
 0000003E          L_54:
 0000003E  1C22      MOV         R2,R4 ; cnt
 00000040  3203      ADD         R2,#0x3
 00000042  0892      LSR         R

⌨️ 快捷键说明

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