📄 chap_9.lst
字号:
*** CODE SEGMENT '?PR?stall_ep0?T?Chap_9':
76: void stall_ep0(void)
00000000 B500 PUSH {LR}
ARM COMPILER V2.53, Chap_9 28/06/07 09:54:11 PAGE 11
78: USB_SetEndpointStatus(0, 1);
00000002 2000 MOV R0,#0x0
00000004 2101 MOV R1,#0x1
00000006 F7FF BL USB_SetEndpointStatus?T ; T=0x0001 (1)
00000008 FFFB BL USB_SetEndpointStatus?T ; T=0x0001 (2)
79: USB_SetEndpointStatus(1, 1);
0000000A 2001 MOV R0,#0x1
0000000C 2101 MOV R1,#0x1
0000000E F7FF BL USB_SetEndpointStatus?T ; T=0x0001 (1)
00000010 FFF7 BL USB_SetEndpointStatus?T ; T=0x0001 (2)
80: }
00000012 BC08 POP {R3}
00000014 4718 BX R3
00000016 ENDP ; 'stall_ep0?T'
*** CODE SEGMENT '?PR?reserved?T?Chap_9':
86: void reserved(void)
00000000 B500 PUSH {LR}
88: stall_ep0();
00000002 F7FF BL stall_ep0?T ; T=0x0001 (1)
00000004 FFFD BL stall_ep0?T ; T=0x0001 (2)
89: }
00000006 BC08 POP {R3}
00000008 4718 BX R3
0000000A ENDP ; 'reserved?T'
*** CODE SEGMENT '?PR?init_unconfig?T?Chap_9':
95: void init_unconfig(void)
00000000 B500 PUSH {LR}
97: USB_SetEndpointEnable(0);
00000002 2000 MOV R0,#0x0
00000004 F7FF BL USB_SetEndpointEnable?T ; T=0x0001 (1)
00000006 FFFC BL USB_SetEndpointEnable?T ; T=0x0001 (2)
98: }
00000008 BC08 POP {R3}
0000000A 4718 BX R3
0000000C ENDP ; 'init_unconfig?T'
*** CODE SEGMENT '?PR?init_config?T?Chap_9':
104: void init_config(void)
00000000 B500 PUSH {LR}
106: USB_SetEndpointEnable(1);
00000002 2001 MOV R0,#0x1
00000004 F7FF BL USB_SetEndpointEnable?T ; T=0x0001 (1)
00000006 FFFC BL USB_SetEndpointEnable?T ; T=0x0001 (2)
107: }
00000008 BC08 POP {R3}
0000000A 4718 BX R3
0000000C ENDP ; 'init_config?T'
*** CODE SEGMENT '?PR?single_transmit?T?Chap_9':
116: void single_transmit(INT8U * buf, INT8U len)
00000000 B503 PUSH {R0-R1,LR}
119: if( len <= EP0_PACKET_SIZE)
00000002 A801 ADD R0,R13,#0x4
00000004 7800 LDRB R0,[R0,#0x0] ; len
00000006 2840 CMP R0,#0x40
00000008 DC07 BGT L_1 ; T=0x0000001A
121: USB_WriteEndpoint(1, len, buf);
0000000A A801 ADD R0,R13,#0x4
0000000C 7800 LDRB R0,[R0,#0x0] ; len
0000000E 1C01 MOV R1,R0
00000010 A800 ADD R0,R13,#0x0
00000012 6802 LDR R2,[R0,#0x0] ; buf
00000014 2001 MOV R0,#0x1
00000016 F7FF BL USB_WriteEndpoint?T ; T=0x0001 (1)
00000018 FFF3 BL USB_WriteEndpoint?T ; T=0x0001 (2)
122: }
0000001A L_1:
123: }
ARM COMPILER V2.53, Chap_9 28/06/07 09:54:11 PAGE 12
0000001A B002 ADD R13,#0x8
0000001C BC08 POP {R3}
0000001E 4718 BX R3
00000020 ENDP ; 'single_transmit?T'
*** CODE SEGMENT '?PR?code_transmit?T?Chap_9':
133: void code_transmit(INT8U * pRomData, INT16U len)
00000000 B503 PUSH {R0-R1,LR}
135: ControlData.wCount = 0;
00000002 2100 MOV R1,#0x0
00000004 4800 LDR R0,=ControlData + 0xA ; ControlData+10
00000006 8001 STRH R1,[R0,#0x0] ; ControlData+10
137: if(ControlData.wLength > len)
00000008 A801 ADD R0,R13,#0x4
0000000A 8800 LDRH R0,[R0,#0x0] ; len
0000000C 1C01 MOV R1,R0
0000000E 4800 LDR R0,=ControlData + 0x8 ; ControlData+8
00000010 8800 LDRH R0,[R0,#0x0] ; ControlData+8
00000012 4288 CMP R0,R1
00000014 D903 BLS L_2 ; T=0x0000001E
138: ControlData.wLength = len; /* 长度要小于len the wLength can't above len */
00000016 A801 ADD R0,R13,#0x4
00000018 8801 LDRH R1,[R0,#0x0] ; len
0000001A 4800 LDR R0,=ControlData + 0x8 ; ControlData+8
0000001C 8001 STRH R1,[R0,#0x0] ; ControlData+8
0000001E L_2:
140: ControlData.pData = pRomData;
0000001E A800 ADD R0,R13,#0x0
00000020 6801 LDR R1,[R0,#0x0] ; pRomData
00000022 4800 LDR R0,=ControlData + 0xC ; ControlData+12
00000024 6001 STR R1,[R0,#0x0] ; ControlData+12
141: if( ControlData.wLength >= EP0_PACKET_SIZE)
00000026 4800 LDR R0,=ControlData + 0x8 ; ControlData+8
00000028 8800 LDRH R0,[R0,#0x0] ; ControlData+8
0000002A 2840 CMP R0,#0x40
0000002C D316 BCC L_3 ; T=0x0000005C
143: USB_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
0000002E 4800 LDR R0,=ControlData + 0xC ; ControlData+12
00000030 6802 LDR R2,[R0,#0x0] ; ControlData+12
00000032 2001 MOV R0,#0x1
00000034 2140 MOV R1,#0x40
00000036 F7FF BL USB_WriteEndpoint?T ; T=0x0001 (1)
00000038 FFE3 BL USB_WriteEndpoint?T ; T=0x0001 (2)
144: ControlData.wCount += EP0_PACKET_SIZE; /* 计数器累加 count number have been sent */
0000003A 4800 LDR R0,=ControlData + 0xA ; ControlData+10
0000003C 8801 LDRH R1,[R0,#0x0] ; ControlData+10
0000003E 3140 ADD R1,#0x40
00000040 4800 LDR R0,=ControlData + 0xA ; ControlData+10
00000042 8001 STRH R1,[R0,#0x0] ; ControlData+10
146: DISABLE();
00000044 F7FF BL DISABLE?T ; T=0x0001 (1)
00000046 FFDC BL DISABLE?T ; T=0x0001 (2)
147: bEPPflags.bits.control_state = USB_TRANSMIT; /* 标识发送状态 flag transmit state */
00000048 4800 LDR R0,=bEPPflags ; bEPPflags
0000004A 6801 LDR R1,[R0,#0x0] ; bEPPflags
0000004C 22C0 MOV R2,#0xC0
0000004E 4391 BIC R1,R2
00000050 2240 MOV R2,#0x40
00000052 4311 ORR R1,R2
00000054 6001 STR R1,[R0,#0x0] ; bEPPflags
148: ENABLE();
00000056 F7FF BL ENABLE?T ; T=0x0001 (1)
00000058 FFD3 BL ENABLE?T ; T=0x0001 (2)
149: }
0000005A E017 B L_4 ; T=0x0000008C
0000005C L_3:
152: USB_WriteEndpoint(1, ControlData.wLength, pRomData); /* 将全部数据写入端点 write all data into endpoint */
ARM COMPILER V2.53, Chap_9 28/06/07 09:54:11 PAGE 13
0000005C 4800 LDR R0,=ControlData + 0x8 ; ControlData+8
0000005E 8800 LDRH R0,[R0,#0x0] ; ControlData+8
00000060 1C01 MOV R1,R0
00000062 A800 ADD R0,R13,#0x0
00000064 6802 LDR R2,[R0,#0x0] ; pRomData
00000066 2001 MOV R0,#0x1
00000068 F7FF BL USB_WriteEndpoint?T ; T=0x0001 (1)
0000006A FFCA BL USB_WriteEndpoint?T ; T=0x0001 (2)
153: ControlData.wCount += ControlData.wLength; /* 计数器累加 count number have been sent */
0000006C 4800 LDR R0,=ControlData + 0x8 ; ControlData+8
0000006E 8800 LDRH R0,[R0,#0x0] ; ControlData+8
00000070 4800 LDR R1,=ControlData + 0xA ; ControlData+10
00000072 8809 LDRH R1,[R1,#0x0] ; ControlData+10
00000074 1809 ADD R1,R0
00000076 4800 LDR R0,=ControlData + 0xA ; ControlData+10
00000078 8001 STRH R1,[R0,#0x0] ; ControlData+10
154: DISABLE();
0000007A F7FF BL DISABLE?T ; T=0x0001 (1)
0000007C FFC1 BL DISABLE?T ; T=0x0001 (2)
155: bEPPflags.bits.control_state = USB_IDLE; /* 标识空闲状态 flag IDLE state */
0000007E 4800 LDR R0,=bEPPflags ; bEPPflags
00000080 6801 LDR R1,[R0,#0x0] ; bEPPflags
00000082 22C0 MOV R2,#0xC0
00000084 4391 BIC R1,R2
00000086 6001 STR R1,[R0,#0x0] ; bEPPflags
156: ENABLE();
00000088 F7FF BL ENABLE?T ; T=0x0001 (1)
0000008A FFBA BL ENABLE?T ; T=0x0001 (2)
157: }
0000008C L_4:
158: }
0000008C B002 ADD R13,#0x8
0000008E BC08 POP {R3}
00000090 4718 BX R3
00000092 ENDP ; 'code_transmit?T'
*** CODE SEGMENT '?PR?get_status?T?Chap_9':
172: void get_status(void)
00000000 B500 PUSH {LR}
00000002 B084 SUB R13,#0x10
173: {
00000004 ; SCOPE-START
175: INT8U bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
00000004 4800 LDR R0,=ControlData ; ControlData
00000006 7800 LDRB R0,[R0,#0x0] ; ControlData
00000008 1C01 MOV R1,R0
0000000A 201F MOV R0,#0x1F
0000000C 4001 AND R1,R0
0000000E 0609 LSL R1,R1,#0x18
00000010 0E09 LSR R1,R1,#0x18
00000012 A803 ADD R0,R13,#0xC
00000014 7001 STRB R1,[R0,#0x0] ; bRecipient
177: if (bRecipient == USB_RECIPIENT_DEVICE)
00000016 A803 ADD R0,R13,#0xC
00000018 7800 LDRB R0,[R0,#0x0] ; bRecipient
0000001A 2800 CMP R0,#0x0
0000001C D116 BNE L_5 ; T=0x0000004C
179: if(bEPPflags.bits.remote_wakeup == 1)
0000001E 4800 LDR R0,=bEPPflags ; bEPPflags
00000020 6800 LDR R0,[R0,#0x0] ; bEPPflags
00000022 0900 LSR R0,R0,#0x4
00000024 2101 MOV R1,#0x1
00000026 4008 AND R0,R1
00000028 2801 CMP R0,#0x1
0000002A D103 BNE L_6 ; T=0x00000034
180: txdat[0] = 3; /* 支持远程唤醒和自供电 support reamote wakeup and power itself */
0000002C 2103 MOV R1,#0x3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -