📄 usbhw.lst
字号:
219: WrCmdDat(CMD_SET_ADDR, DAT_WR_BYTE(DEV_EN | adr)); /* Don't wait for next */
00000004 1C18 MOV R0,R3 ; adr
00000006 0601 LSL R1,R0,#0x18 ; adr
00000008 0E09 LSR R1,R1,#0x18
0000000A 2080 MOV R0,#0x80
0000000C 4301 ORR R1,R0
0000000E 0409 LSL R1,R1,#0x10
00000010 4840 LDR R0,=0x100
00000012 4301 ORR R1,R0
00000014 4800 LDR R0,=0xD00500
00000016 F7FF BL WrCmdDat?T ; T=0x0001 (1)
00000018 FFF3 BL WrCmdDat?T ; T=0x0001 (2)
220: WrCmdDat(CMD_SET_ADDR, DAT_WR_BYTE(DEV_EN | adr)); /* Setup Status Phase */
0000001A 1C18 MOV R0,R3 ; adr
0000001C 0601 LSL R1,R0,#0x18 ; adr
0000001E 0E09 LSR R1,R1,#0x18
00000020 2080 MOV R0,#0x80
00000022 4301 ORR R1,R0
00000024 0409 LSL R1,R1,#0x10
00000026 4840 LDR R0,=0x100
00000028 4301 ORR R1,R0
0000002A 4800 LDR R0,=0xD00500
0000002C F7FF BL WrCmdDat?T ; T=0x0001 (1)
0000002E FFE8 BL WrCmdDat?T ; T=0x0001 (2)
221: }
00000030 BC08 POP {R3}
00000032 4718 BX R3
00000034 ENDP ; 'USB_SetAddress?T'
*** CODE SEGMENT '?PR?USB_Configure?T?usbhw':
230: void USB_Configure (BOOL cfg) {
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; cfg
00000004 ---- Variable 'cfg' assigned to Register 'R1' ----
232: WrCmdDat(CMD_CFG_DEV, DAT_WR_BYTE(cfg ? CONF_DVICE : 0));
00000004 1C08 MOV R0,R1 ; cfg
00000006 2800 CMP R0,#0x0 ; cfg
00000008 D001 BEQ L_35 ; T=0x0000000E
0000000A 2101 MOV R1,#0x1
0000000C E000 B L_36 ; T=0x00000010
0000000E L_35:
0000000E 2100 MOV R1,#0x0
00000010 L_36:
00000010 0409 LSL R1,R1,#0x10
00000012 4840 LDR R0,=0x100
00000014 4301 ORR R1,R0
00000016 4800 LDR R0,=0xD80500
00000018 F7FF BL WrCmdDat?T ; T=0x0001 (1)
0000001A FFF2 BL WrCmdDat?T ; T=0x0001 (2)
234: REALIZE_EP = 0x00000003;
0000001C 2103 MOV R1,#0x3
0000001E 4800 LDR R0,=0xE0090044
00000020 6001 STR R1,[R0,#0x0]
235: while ((DEV_INT_STAT & EP_RLZED_INT) == 0);
00000022 L_37:
00000022 4800 LDR R0,=0xE0090000
00000024 6800 LDR R0,[R0,#0x0]
00000026 4940 LDR R1,=0x100
00000028 4208 TST R0,R1
0000002A D0FA BEQ L_37 ; T=0x00000022
236: DEV_INT_CLR = EP_RLZED_INT;
0000002C 4800 LDR R0,=0xE0090008
ARM COMPILER V2.53, usbhw 09/06/07 15:42:23 PAGE 15
0000002E 6001 STR R1,[R0,#0x0]
237: }
00000030 BC08 POP {R3}
00000032 4718 BX R3
00000034 ENDP ; 'USB_Configure?T'
*** CODE SEGMENT '?PR?USB_ConfigEP?T?usbhw':
246: void USB_ConfigEP (USB_ENDPOINT_DESCRIPTOR *pEPD) {
00000000 B510 PUSH {R4,LR}
00000002 1C04 MOV R4,R0 ; pEPD
00000004 ---- Variable 'pEPD' assigned to Register 'R4' ----
00000004 ; SCOPE-START
249: 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' ----
250: 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]
251: EP_INDEX = num;
0000001A 1C01 MOV R1,R0 ; num
0000001C 4800 LDR R0,=0xE0090048
0000001E 6001 STR R1,[R0,#0x0]
252: 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]
253: while ((DEV_INT_STAT & EP_RLZED_INT) == 0);
00000032 L_41:
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_41 ; T=0x00000032
254: DEV_INT_CLR = EP_RLZED_INT;
0000003C 4800 LDR R0,=0xE0090008
0000003E 6001 STR R1,[R0,#0x0]
00000040 ; SCOPE-END
255: }
00000040 BC10 POP {R4}
00000042 BC08 POP {R3}
00000044 4718 BX R3
00000046 ENDP ; 'USB_ConfigEP?T'
*** CODE SEGMENT '?PR?USB_DirCtrlEP?T?usbhw':
266: }
00000000 4770 BX R14
00000002 ENDP ; 'USB_DirCtrlEP?T'
*** CODE SEGMENT '?PR?USB_EnableEP?T?usbhw':
277: void USB_EnableEP (BYTE EPNum) {
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; EPNum
00000004 ---- Variable 'EPNum' assigned to Register 'R1' ----
278: WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(0));
00000004 1C08 MOV R0,R1 ; EPNum
ARM COMPILER V2.53, usbhw 09/06/07 15:42:23 PAGE 16
00000006 0600 LSL R0,R0,#0x18 ; EPNum
00000008 0E00 LSR R0,R0,#0x18
0000000A F7FF BL EPAdr?T ; T=0x0001 (1)
0000000C FFF9 BL EPAdr?T ; T=0x0001 (2)
0000000E 0400 LSL R0,R0,#0x10 ; EPAdr?T
00000010 4800 LDR R1,=0x400500
00000012 4308 ORR R0,R1
00000014 4940 LDR R1,=0x100
00000016 F7FF BL WrCmdDat?T ; T=0x0001 (1)
00000018 FFF3 BL WrCmdDat?T ; T=0x0001 (2)
279: }
0000001A BC08 POP {R3}
0000001C 4718 BX R3
0000001E ENDP ; 'USB_EnableEP?T'
*** CODE SEGMENT '?PR?USB_DisableEP?T?usbhw':
290: void USB_DisableEP (BYTE EPNum) {
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; EPNum
00000004 ---- Variable 'EPNum' assigned to Register 'R1' ----
291: WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(EP_STAT_DA));
00000004 1C08 MOV R0,R1 ; EPNum
00000006 0600 LSL R0,R0,#0x18 ; EPNum
00000008 0E00 LSR R0,R0,#0x18
0000000A F7FF BL EPAdr?T ; T=0x0001 (1)
0000000C FFF9 BL EPAdr?T ; T=0x0001 (2)
0000000E 0400 LSL R0,R0,#0x10 ; EPAdr?T
00000010 4800 LDR R1,=0x400500
00000012 4308 ORR R0,R1
00000014 4800 LDR R1,=0x200100
00000016 F7FF BL WrCmdDat?T ; T=0x0001 (1)
00000018 FFF3 BL WrCmdDat?T ; T=0x0001 (2)
292: }
0000001A BC08 POP {R3}
0000001C 4718 BX R3
0000001E ENDP ; 'USB_DisableEP?T'
*** CODE SEGMENT '?PR?USB_ResetEP?T?usbhw':
303: void USB_ResetEP (BYTE EPNum) {
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; EPNum
00000004 ---- Variable 'EPNum' assigned to Register 'R1' ----
304: WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(0));
00000004 1C08 MOV R0,R1 ; EPNum
00000006 0600 LSL R0,R0,#0x18 ; EPNum
00000008 0E00 LSR R0,R0,#0x18
0000000A F7FF BL EPAdr?T ; T=0x0001 (1)
0000000C FFF9 BL EPAdr?T ; T=0x0001 (2)
0000000E 0400 LSL R0,R0,#0x10 ; EPAdr?T
00000010 4800 LDR R1,=0x400500
00000012 4308 ORR R0,R1
00000014 4940 LDR R1,=0x100
00000016 F7FF BL WrCmdDat?T ; T=0x0001 (1)
00000018 FFF3 BL WrCmdDat?T ; T=0x0001 (2)
305: }
0000001A BC08 POP {R3}
0000001C 4718 BX R3
0000001E ENDP ; 'USB_ResetEP?T'
*** CODE SEGMENT '?PR?USB_SetStallEP?T?usbhw':
316: void USB_SetStallEP (BYTE EPNum) {
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; EPNum
00000004 ---- Variable 'EPNum' assigned to Register 'R1' ----
317: WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(EP_STAT_ST));
00000004 1C08 MOV R0,R1 ; EPNum
00000006 0600 LSL R0,R0,#0x18 ; EPNum
00000008 0E00 LSR R0,R0,#0x18
0000000A F7FF BL EPAdr?T ; T=0x0001 (1)
ARM COMPILER V2.53, usbhw 09/06/07 15:42:23 PAGE 17
0000000C FFF9 BL EPAdr?T ; T=0x0001 (2)
0000000E 0400 LSL R0,R0,#0x10 ; EPAdr?T
00000010 4800 LDR R1,=0x400500
00000012 4308 ORR R0,R1
00000014 4800 LDR R1,=0x10100
00000016 F7FF BL WrCmdDat?T ; T=0x0001 (1)
00000018 FFF3 BL WrCmdDat?T ; T=0x0001 (2)
318: }
0000001A BC08 POP {R3}
0000001C 4718 BX R3
0000001E ENDP ; 'USB_SetStallEP?T'
*** CODE SEGMENT '?PR?USB_ClrStallEP?T?usbhw':
329: void USB_ClrStallEP (BYTE EPNum) {
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; EPNum
00000004 ---- Variable 'EPNum' assigned to Register 'R1' ----
330: WrCmdDat(CMD_SET_EP_STAT(EPAdr(EPNum)), DAT_WR_BYTE(0));
00000004 1C08 MOV R0,R1 ; EPNum
00000006 0600 LSL R0,R0,#0x18 ; EPNum
00000008 0E00 LSR R0,R0,#0x18
0000000A F7FF BL EPAdr?T ; T=0x0001 (1)
0000000C FFF9 BL EPAdr?T ; T=0x0001 (2)
0000000E 0400 LSL R0,R0,#0x10 ; EPAdr?T
00000010 4800 LDR R1,=0x400500
00000012 4308 ORR R0,R1
00000014 4940 LDR R1,=0x100
00000016 F7FF BL WrCmdDat?T ; T=0x0001 (1)
00000018 FFF3 BL WrCmdDat?T ; T=0x0001 (2)
331: }
0000001A BC08 POP {R3}
0000001C 4718 BX R3
0000001E ENDP ; 'USB_ClrStallEP?T'
*** CODE SEGMENT '?PR?USB_ReadEP?T?usbhw':
343: DWORD USB_ReadEP (BYTE 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 ; SCOPE-START
346: USB_CTRL = ((EPNum & 0x0F) << 2) | CTRL_RD_EN;
00000004 1C18 MOV R0,R3 ; EPNum
00000006 0602 LSL R2,R0,#0x18 ; EPNum
00000008 0E12 LSR R2,R2,#0x18
0000000A 200F MOV R0,#0xF
0000000C 4002 AND R2,R0
0000000E 0092 LSL R2,R2,#0x2
00000010 2001 MOV R0,#0x1
00000012 4302 ORR R2,R0
00000014 4800 LDR R0,=0xE0090028
00000016 6002 STR R2,[R0,#0x0]
348: do {
00000018 L_45:
349: cnt = RX_PLENGTH;
00000018 4800 LDR R0,=0xE0090020
0000001A 6804 LDR R4,[R0,#0x0]
0000001C ---- Variable 'cnt' assigned to Register 'R4' ----
350: } while ((cnt & PKT_RDY) == 0);
0000001C 1C20 MOV R0,R4 ; cnt
0000001E 4800 LDR R2,=0x800
00000020 4210 TST R0,R2 ; cnt
00000022 D0F9 BEQ L_45 ; T=0x00000018
351: cnt &= PKT_LNGTH_MASK;
00000024 4800 LDR R0,=0x3FF
00000026 4004 AND R4,R0
353: for (n = 0; n < (cnt + 3) / 4; n++) {
00000028 2000 MOV R0,#0x0
ARM COMPILER V2.53, usbhw 09/06/07 15:42:23 PAGE 18
0000002A ---- Variable 'n' assigned to Register 'R0' ----
0000002A E00B B L_51 ; T=0x00000044
0000002C L_52:
354: *((__packed DWORD *)pData) = RX_DATA;
0000002C 4800 LDR R2,=0xE0090018
0000002E 6816 LDR R6,[R2,#0x0]
00000030 1C0D MOV R5,R1 ; pData
00000032 702E STRB R6,[R5,#0x0] ; pData
00000034 0A36 LSR R6,R6,#0x8
00000036 706E STRB R6,[R5,#0x1] ; pData
00000038 0A36 LSR R6,R6,#0x8
0000003A 70AE STRB R6,[R5,#0x2] ; pData
0000003C 0A36 LSR R6,R6,#0x8
0000003E 70EE STRB R6,[R5,#0x3] ; pData
355: pData += 4;
00000040 3104 ADD R1,#0x4
356: }
00000042 3001 ADD R0,#0x1
00000044 L_51:
00000044 1C25 MOV R5,R4 ; cnt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -