📄 usbhw.lst
字号:
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 + -