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

📄 usbhw.lst

📁 针对飞利浦LPC214x的虚拟串口程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 00000046  3503      ADD         R5,#0x3
 00000048  08AD      LSR         R5,R5,#0x2
 0000004A  1C02      MOV         R2,R0 ; n
 0000004C  42AA      CMP         R2,R5 ; n
 0000004E  D3ED      BCC         L_52  ; T=0x0000002C
  358:     USB_CTRL = 0;
 00000050  2100      MOV         R1,#0x0
 00000052  4800      LDR         R0,=0xE0090028
 00000054  6001      STR         R1,[R0,#0x0]
  360:     WrCmd(CMD_SEL_EP(EPAdr(EPNum)));
 00000056  1C18      MOV         R0,R3 ; EPNum
 00000058  0600      LSL         R0,R0,#0x18 ; EPNum
 0000005A  0E00      LSR         R0,R0,#0x18
 0000005C  F7FF      BL          EPAdr?T  ; T=0x0001  (1)
 0000005E  FFD0      BL          EPAdr?T  ; T=0x0001  (2)
 00000060  0400      LSL         R0,R0,#0x10 ; EPAdr?T
 00000062  4800      LDR         R1,=0x500
 00000064  4308      ORR         R0,R1
 00000066  F7FF      BL          WrCmd?T  ; T=0x0001  (1)
 00000068  FFCB      BL          WrCmd?T  ; T=0x0001  (2)
  361:     WrCmd(CMD_CLR_BUF);
 0000006A  4800      LDR         R0,=0xF20500
 0000006C  F7FF      BL          WrCmd?T  ; T=0x0001  (1)
 0000006E  FFC8      BL          WrCmd?T  ; T=0x0001  (2)
  363:     return (cnt);
 00000070  1C20      MOV         R0,R4 ; cnt
 00000072            ; SCOPE-END
  364: }
 00000072  BC70      POP         {R4-R6}
 00000074  BC08      POP         {R3}
 00000076  4718      BX          R3
 00000078          ENDP ; 'USB_ReadEP?T'


*** CODE SEGMENT '?PR?USB_WriteEP?T?usbhw':
  377: DWORD USB_WriteEP (BYTE 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
  380:     USB_CTRL = ((EPNum & 0x0F) << 2) | CTRL_WR_EN;
 00000006  1C18      MOV         R0,R3 ; EPNum
 00000008  0602      LSL         R2,R0,#0x18 ; EPNum
 0000000A  0E12      LSR         R2,R2,#0x18
 0000000C  200F      MOV         R0,#0xF
ARM COMPILER V2.53,  usbhw                                                                 09/06/07  15:42:23  PAGE 19  

 0000000E  4002      AND         R2,R0
 00000010  0092      LSL         R2,R2,#0x2
 00000012  2002      MOV         R0,#0x2
 00000014  4302      ORR         R2,R0
 00000016  4800      LDR         R0,=0xE0090028
 00000018  6002      STR         R2,[R0,#0x0]
  382:     TX_PLENGTH = cnt;
 0000001A  1C22      MOV         R2,R4 ; cnt
 0000001C  4800      LDR         R0,=0xE0090024
 0000001E  6002      STR         R2,[R0,#0x0]
  384:     for (n = 0; n < (cnt + 3) / 4; n++) {
 00000020  2500      MOV         R5,#0x0
 00000022  ---- Variable 'n' assigned to Register 'R5' ----
 00000022  E00E      B           L_57  ; T=0x00000042
 00000024          L_58:
  385:         TX_DATA = *((__packed DWORD *)pData);
 00000024  1C0E      MOV         R6,R1 ; pData
 00000026  7832      LDRB        R2,[R6,#0x0] ; pData
 00000028  7870      LDRB        R0,[R6,#0x1] ; pData
 0000002A  0200      LSL         R0,R0,#0x8
 0000002C  4302      ORR         R2,R0
 0000002E  78B0      LDRB        R0,[R6,#0x2] ; pData
 00000030  0400      LSL         R0,R0,#0x10
 00000032  4302      ORR         R2,R0
 00000034  78F0      LDRB        R0,[R6,#0x3] ; pData
 00000036  0600      LSL         R0,R0,#0x18
 00000038  4302      ORR         R2,R0
 0000003A  4800      LDR         R0,=0xE009001C
 0000003C  6002      STR         R2,[R0,#0x0]
  386:         pData += 4;
 0000003E  3104      ADD         R1,#0x4
  387:     }
 00000040  3501      ADD         R5,#0x1
 00000042          L_57:
 00000042  1C22      MOV         R2,R4 ; cnt
 00000044  3203      ADD         R2,#0x3
 00000046  0892      LSR         R2,R2,#0x2
 00000048  1C28      MOV         R0,R5 ; n
 0000004A  4290      CMP         R0,R2 ; n
 0000004C  D3EA      BCC         L_58  ; T=0x00000024
  389:     USB_CTRL = 0;
 0000004E  2100      MOV         R1,#0x0
 00000050  4800      LDR         R0,=0xE0090028
 00000052  6001      STR         R1,[R0,#0x0]
  391:     WrCmd(CMD_SEL_EP(EPAdr(EPNum)));
 00000054  1C18      MOV         R0,R3 ; EPNum
 00000056  0600      LSL         R0,R0,#0x18 ; EPNum
 00000058  0E00      LSR         R0,R0,#0x18
 0000005A  F7FF      BL          EPAdr?T  ; T=0x0001  (1)
 0000005C  FFD1      BL          EPAdr?T  ; T=0x0001  (2)
 0000005E  0400      LSL         R0,R0,#0x10 ; EPAdr?T
 00000060  4800      LDR         R1,=0x500
 00000062  4308      ORR         R0,R1
 00000064  F7FF      BL          WrCmd?T  ; T=0x0001  (1)
 00000066  FFCC      BL          WrCmd?T  ; T=0x0001  (2)
  392:     WrCmd(CMD_VALID_BUF);
 00000068  4800      LDR         R0,=0xFA0500
 0000006A  F7FF      BL          WrCmd?T  ; T=0x0001  (1)
 0000006C  FFC9      BL          WrCmd?T  ; T=0x0001  (2)
  394:     return (cnt);
 0000006E  1C20      MOV         R0,R4 ; cnt
 00000070            ; SCOPE-END
  395: }
 00000070  BC70      POP         {R4-R6}
 00000072  BC08      POP         {R3}
 00000074  4718      BX          R3
ARM COMPILER V2.53,  usbhw                                                                 09/06/07  15:42:23  PAGE 20  

 00000076          ENDP ; 'USB_WriteEP?T'


*** CODE SEGMENT '?PR?USB_ISR?A?usbhw':
  402: void USB_ISR (void) __irq {
 00000000  E92D5FFF  STMDB       R13!,{R0-R12,LR}
 00000004  E24DD004  SUB         R13,R13,#0x0004
 00000008  ---- Variable 'val' assigned to Register 'R4' ----
 00000008            ; SCOPE-START
  405:     disr = DEV_INT_STAT;                      /* Device Interrupt Status */
 00000008  E5100000  LDR         R0,=0xE0090000
 0000000C  E5905000  LDR         R5,[R0,#0x0]
 00000010  ---- Variable 'disr' assigned to Register 'R5' ----
  408:     if (disr & DEV_STAT_INT) {
 00000010  E1A00005  MOV         R0,R5 ; disr
 00000014  E3100008  TST         R0,#0x0008 ; disr
 00000018  0A000017  BEQ         L_61  ; Targ=0x7C
  409:         WrCmd(CMD_GET_DEV_STAT);
 0000001C  E5100000  LDR         R0,=0xFE0500
 00000020  EBFFFFF6  BL          WrCmd?A  ; Targ=0x0
  410:         val = RdCmdDat(DAT_GET_DEV_STAT);       /* Device Status */
 00000024  E5100000  LDR         R0,=0xFE0200
 00000028  EBFFFFF4  BL          RdCmdDat?A  ; Targ=0x0
 0000002C  E1A04000  MOV         R4,R0 ; val
  411:         if (val & DEV_RST) {                    /* Reset */
 00000030  E1A00004  MOV         R0,R4 ; val
 00000034  E3100010  TST         R0,#0x0010 ; val
 00000038  0A000002  BEQ         L_62  ; Targ=0x48
  412:             USB_Reset();
 0000003C  EBFFFFEF  BL          USB_Reset?A  ; Targ=0x0
  414:             USB_Reset_Event();
 00000040  EBFFFFEE  BL          USB_Reset_Event?A  ; Targ=0x0
  416:             goto isr_end;
 00000044  EAFFFFEC  B           isr_end  ; Targ=0xFFFFFFFC
  417:         }
 00000048          L_62:
  418:         if (val & DEV_SUS_CH) {                 /* Suspend/Resume */
 00000048  E1A00004  MOV         R0,R4 ; val
 0000004C  E3100008  TST         R0,#0x0008 ; val
 00000050  0A000006  BEQ         L_64  ; Targ=0x70
  419:             if (val & DEV_SUS) {                  /* Suspend */
 00000054  E1A00004  MOV         R0,R4 ; val
 00000058  E3100004  TST         R0,#0x0004 ; val
 0000005C  0A000001  BEQ         L_65  ; Targ=0x68
  420:                 USB_Suspend();
 00000060  EBFFFFE6  BL          USB_Suspend?A  ; Targ=0x0
  424:             } else {                              /* Resume */
 00000064  EAFFFFE4  B           isr_end  ; Targ=0xFFFFFFFC
 00000068          L_65:
  425:                 USB_Resume();
 00000068  EBFFFFE4  BL          USB_Resume?A  ; Targ=0x0
  430:             goto isr_end;
 0000006C  EAFFFFE2  B           isr_end  ; Targ=0xFFFFFFFC
  431:         }
 00000070          L_64:
  432:         if (val & DEV_CON_CH) {                 /* Connect change */
 00000070  E1A00004  MOV         R0,R4 ; val
 00000074  E3100002  TST         R0,#0x0002 ; val
 00000078  1AFFFFDF  BNE         isr_end  ; Targ=0xFFFFFFFC
  438:     }
 0000007C          L_61:
  477:     if (disr & EP_SLOW_INT) {
 0000007C  E1A00005  MOV         R0,R5 ; disr
 00000080  E3100004  TST         R0,#0x0004 ; disr
 00000084  0AFFFFDC  BEQ         isr_end  ; Targ=0xFFFFFFFC
  479:         while ( eisr = EP_INT_STAT ) {           /* Endpoint Interrupt Status */
 00000088  EA000045  B           L_69  ; Targ=0x1A4
  481:             for (n = 0; n < USB_EP_NUM; n++) {
ARM COMPILER V2.53,  usbhw                                                                 09/06/07  15:42:23  PAGE 21  

 0000008C          L_77:
 0000008C  E3A06000  MOV         R6,#0x0
 00000090  ---- Variable 'n' assigned to Register 'R6' ----
 00000090          L_76:
  482:                 if (eisr & (1 << n)) {
 00000090  E1A00006  MOV         R0,R6 ; n
 00000094  E3A01001  MOV         R1,#0x1
 00000098  E1A01011  MOV         R1,R1,LSL R0
 0000009C  E59D0000  LDR         R0,[R13,#0x0] ; eisr
 000000A0  E0000001  AND         R0,R0,R1
 000000A4  E3500000  CMP         R0,#0x0000
 000000A8  0A000039  BEQ         L_73  ; Targ=0x194
  483:                     m = n >> 1;
 000000AC  E1A07006  MOV         R7,R6 ; n
 000000B0  E1A070A7  MOV         R7,R7,LSR #1 ; n
 000000B4  ---- Variable 'm' assigned to Register 'R7' ----
  485:                     EP_INT_CLR = 1 << n;
 000000B4  E1A00006  MOV         R0,R6 ; n
 000000B8  E3A01001  MOV         R1,#0x1
 000000BC  E1A01011  MOV         R1,R1,LSL R0
 000000C0  E5100000  LDR         R0,=0xE0090038
 000000C4  E5801000  STR         R1,[R0,#0x0]
  486:                     while ((DEV_INT_STAT & CDFULL_INT) == 0);
 000000C8          L_79:
 000000C8  E5100000  LDR         R0,=0xE0090000
 000000CC  E5900000  LDR         R0,[R0,#0x0]
 000000D0  E3100020  TST         R0,#0x0020
 000000D4  0AFFFFFB  BEQ         L_79  ; Targ=0xC8
  487:                     val = CMD_DATA;
 000000D8  E5100000  LDR         R0,=0xE0090014
 000000DC  E5904000  LDR         R4,[R0,#0x0]
  488:                     DEV_INT_CLR = CDFULL_INT;
 000000E0  E3A01020  MOV         R1,#0x20
 000000E4  E5100000  LDR         R0,=0xE0090008
 000000E8  E5801000  STR         R1,[R0,#0x0]
  490:                     if ((n & 1) == 0) {
 000000EC  E1A00006  MOV         R0,R6 ; n
 000000F0  E3100001  TST         R0,#0x0001 ; n
 000000F4  1A00001B  BNE         L_83  ; Targ=0x168
  492:                         if (n == 0) {                     /* Control OUT Endpoint */
 000000F8  E1A00006  MOV         R0,R6 ; n
 000000FC  E3500000  CMP         R0,#0x0000 ; n
 00000100  1A00000C  BNE         L_84  ; Targ=0x138
  493:                             if (val & EP_SEL_STP) {         /* Setup Packet */
 00000104  E1A00004  MOV         R0,R4 ; val
 00000108  E3100004  TST         R0,#0x0004 ; val
 0000010C  0A000009  BEQ         L_84  ; Targ=0x138
  494:                                 if (USB_P_EP[0]) {
 00000110  E5100000  LDR         R0,=USB_P_EP ; USB_P_EP
 00000114  E5900000  LDR         R0,[R0,#0x0] ; USB_P_EP
 00000118  E3500000  CMP         R0,#0x0000
 0000011C  0A000005  BEQ         L_84  ; Targ=0x138
  495:                                     USB_P_EP[0](USB_EVT_SETUP);
 00000120  E3A00001  MOV         R0,#0x1
 00000124  E5101000  LDR         R1,=USB_P_EP ; USB_P_EP
 00000128  E5911000  LDR         R1,[R1,#0x0] ; USB_P_EP
 0000012C  E1A0E00F  MOV         R14,R15
 00000130  E12FFF11  BX          R1
  496:                                     continue;
 00000134  EA000016  B           L_73  ; Targ=0x194
  499:                         }
 00000138          L_84:
  500:                         if (USB_P_EP[m]) {
 00000138  E1A02007  MOV         R2,R7 ; m
 0000013C  E1A02102  MOV         R2,R2,LSL #2 ; m
 00000140  E5100000  LDR         R0,=USB_P_EP ; USB_P_EP
ARM COMPILER V2.53,  usbhw                                                                 09/06/07  15:42:23  PAGE 22  

 00000144  E7900002  LDR         R0,[R0,+R2]
 00000148  E3500000  CMP         R0,#0x0000
 0000014C  0A000010  BEQ         L_73  ; Targ=0x194
  501:                             USB_P_EP[m](USB_EVT_OUT);
 00000150  E3A00002  MOV         R0,#0x2
 00000154  E5101000  LDR         R1,=USB_P_EP ; USB_P_EP
 00000158  E7911002  LDR         R1,[R1,+R2]
 0000015C  E1A0E00F  MOV         R14,R15
 00000160  E12FFF11  BX          R1
  503:                     } else {
 00000164  EA00000A  B           L_73  ; Targ=0x194
 00000168          L_83:
  505:                         if (USB_P_EP[m]) {
 00000168  E1A02007  MOV         R2,R7 ; m
 0000016C  E1A02102  MOV         R2,R2,LSL #2 ; m
 00000170  E5100000  LDR         R0,=USB_P_EP ; USB_P_EP
 00000174  E7900002  LDR         R0,[R0,+R2]
 00000178  E3500000  CMP         R0,#0x0000
 0000017C  0A000004  BEQ         L_73  ; Targ=0x194
  506:                             USB_P_EP[m](USB_EVT_IN);
 00000180  E3A00003  MOV         R0,#0x3
 00000184  E5101000  LDR         R1,=USB_P_EP ; USB_P_EP
 00000188  E7911002  LDR         R1,[R1,+R2]
 0000018C  E1A0E00F  MOV         R14,R15
 00000190  E12FFF11  BX          R1
  510:             }
 00000194          L_73:
 00000194  E2866001  ADD         R6,R6,#0x0001 ; n
 00000198  E1A00006  MOV         R0,R6 ; n
 0000019C  E3500020  CMP         R0,#0x0020 ; n
 000001A0  3AFFFFBA  BCC         L_76  ; Targ=0x90
  511:         }
 000001A4          L_69:
 000001A4  E5100000  LDR         R0,=0xE0090030
 000001A8  E5900000  LDR         R0,[R0,#0x0]
 000001AC  E58D0000  STR         R0,[R13,#0x0] ; eisr
 000001B0  E3500000  CMP         R0,#0x0000
 000001B4  1AFFFFB4  BNE         L_77  ; Targ=0x8C
  514: isr_end:
 000001B8          isr_end:
  515:     DEV_INT_CLR = disr;
 000001B8  E1A01005  MOV         R1,R5 ; disr
 000001BC  E5100000  LDR         R0,=0xE0090008
 000001C0  E5801000  STR         R1,[R0,#0x0]
  516:     VICVectAddr = 0;                          /* Acknowledge Interrupt */
 000001C4  E3A01000  MOV         R1,#0x0
 000001C8  E5100000  LDR         R0,=0xFFFFF030
 000001CC  E58010

⌨️ 快捷键说明

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