📄 chap_9.lst
字号:
ARM COMPILER V2.53, Chap_9 28/06/07 09:54:11 PAGE 14
0000002E A801 ADD R0,R13,#0x4
00000030 7001 STRB R1,[R0,#0x0] ; txdat
00000032 E002 B L_7 ; T=0x0000003A
00000034 L_6:
182: txdat[0] = 1; /* 不支持以上两个功能 not support two function above */
00000034 2101 MOV R1,#0x1
00000036 A801 ADD R0,R13,#0x4
00000038 7001 STRB R1,[R0,#0x0] ; txdat
0000003A L_7:
183: txdat[1]=0; /* 高 8 位清 0 upper 8-bit clear */
0000003A 2100 MOV R1,#0x0
0000003C 2005 MOV R0,#0x5
0000003E 4468 ADD R0,R13
00000040 7001 STRB R1,[R0,#0x0] ; txdat+1
184: single_transmit(txdat, 2); /* 发送16ibt到USB主机 transmit 16-bit to USB host */
00000042 A801 ADD R0,R13,#0x4
00000044 2102 MOV R1,#0x2
00000046 F7FF BL single_transmit?T ; T=0x0001 (1)
00000048 FFDB BL single_transmit?T ; T=0x0001 (2)
185: }
0000004A E048 B L_8 ; T=0x000000DE
0000004C L_5:
187: else if (bRecipient == USB_RECIPIENT_INTERFACE)
0000004C A803 ADD R0,R13,#0xC
0000004E 7800 LDRB R0,[R0,#0x0] ; bRecipient
00000050 2801 CMP R0,#0x1
00000052 D10B BNE L_9 ; T=0x0000006C
189: txdat[0]=0;
00000054 2100 MOV R1,#0x0
00000056 A801 ADD R0,R13,#0x4
00000058 7001 STRB R1,[R0,#0x0] ; txdat
190: txdat[1]=0;
0000005A 2100 MOV R1,#0x0
0000005C 2005 MOV R0,#0x5
0000005E 4468 ADD R0,R13
00000060 7001 STRB R1,[R0,#0x0] ; txdat+1
191: single_transmit(txdat, 2); /* 发送16ibt到USB主机 transmit 16-bit to USB host */
00000062 A801 ADD R0,R13,#0x4
00000064 2102 MOV R1,#0x2
00000066 F7FF BL single_transmit?T ; T=0x0001 (1)
00000068 FFCB BL single_transmit?T ; T=0x0001 (2)
192: }
0000006A E038 B L_8 ; T=0x000000DE
0000006C L_9:
194: else if (bRecipient == USB_RECIPIENT_ENDPOINT)
0000006C A803 ADD R0,R13,#0xC
0000006E 7800 LDRB R0,[R0,#0x0] ; bRecipient
00000070 2802 CMP R0,#0x2
00000072 D132 BNE L_11 ; T=0x000000DA
196: endp = (INT8U)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
00000074 4800 LDR R0,=ControlData + 0x4 ; ControlData+4
00000076 8800 LDRH R0,[R0,#0x0] ; ControlData+4
00000078 1C01 MOV R1,R0
0000007A 2003 MOV R0,#0x3
0000007C 4001 AND R1,R0
0000007E 0609 LSL R1,R1,#0x18
00000080 0E09 LSR R1,R1,#0x18
00000082 A800 ADD R0,R13,#0x0
00000084 7001 STRB R1,[R0,#0x0] ; endp
197: if (ControlData.DeviceRequest.wIndex & (INT8U)USB_ENDPOINT_DIRECTION_MASK)
00000086 4800 LDR R0,=ControlData + 0x4 ; ControlData+4
00000088 8800 LDRH R0,[R0,#0x0] ; ControlData+4
0000008A 2180 MOV R1,#0x80
0000008C 4208 TST R0,R1
0000008E D008 BEQ L_12 ; T=0x000000A2
202: c = USB_SelectEndpoint(endp * 2 + 1); /* 读 IN 端点状态 read status of the IN endpoint */
ARM COMPILER V2.53, Chap_9 28/06/07 09:54:11 PAGE 15
00000090 A800 ADD R0,R13,#0x0
00000092 7800 LDRB R0,[R0,#0x0] ; endp
00000094 0040 LSL R0,R0,#0x1
00000096 3001 ADD R0,#0x1
00000098 F7FF BL USB_SelectEndpoint?T ; T=0x0001 (1)
0000009A FFB2 BL USB_SelectEndpoint?T ; T=0x0001 (2)
0000009C A902 ADD R1,R13,#0x8
0000009E 7008 STRB R0,[R1,#0x0] ; c
000000A0 E006 B L_13 ; T=0x000000B0
000000A2 L_12:
204: c = USB_SelectEndpoint(endp * 2); /* 读 OUT 端点状态 read status of the OUT endpoint */
000000A2 A800 ADD R0,R13,#0x0
000000A4 7800 LDRB R0,[R0,#0x0] ; endp
000000A6 0040 LSL R0,R0,#0x1
000000A8 F7FF BL USB_SelectEndpoint?T ; T=0x0001 (1)
000000AA FFAA BL USB_SelectEndpoint?T ; T=0x0001 (2)
000000AC A902 ADD R1,R13,#0x8
000000AE 7008 STRB R0,[R1,#0x0] ; c
000000B0 L_13:
205: if(c & USB_STALL)
000000B0 A802 ADD R0,R13,#0x8
000000B2 7800 LDRB R0,[R0,#0x0] ; c
000000B4 2102 MOV R1,#0x2
000000B6 4208 TST R0,R1
000000B8 D003 BEQ L_14 ; T=0x000000C2
206: txdat[0] = 1; /* 端点已被禁止 the endpoint is stalled */
000000BA 2101 MOV R1,#0x1
000000BC A801 ADD R0,R13,#0x4
000000BE 7001 STRB R1,[R0,#0x0] ; txdat
000000C0 E002 B L_15 ; T=0x000000C8
000000C2 L_14:
208: txdat[0] = 0; /* 端点已解禁 the endpoint is unstalled */
000000C2 2100 MOV R1,#0x0
000000C4 A801 ADD R0,R13,#0x4
000000C6 7001 STRB R1,[R0,#0x0] ; txdat
000000C8 L_15:
209: txdat[1] = 0;
000000C8 2100 MOV R1,#0x0
000000CA 2005 MOV R0,#0x5
000000CC 4468 ADD R0,R13
000000CE 7001 STRB R1,[R0,#0x0] ; txdat+1
210: single_transmit(txdat, 2); /* 发送16ibt到USB主机 transmit 16-bit to USB host */
000000D0 A801 ADD R0,R13,#0x4
000000D2 2102 MOV R1,#0x2
000000D4 F7FF BL single_transmit?T ; T=0x0001 (1)
000000D6 FF94 BL single_transmit?T ; T=0x0001 (2)
212: }
000000D8 E001 B L_8 ; T=0x000000DE
000000DA L_11:
214: stall_ep0(); /* 非标准请求,禁止逻辑端点0 */
000000DA F7FF BL stall_ep0?T ; T=0x0001 (1)
000000DC FF91 BL stall_ep0?T ; T=0x0001 (2)
000000DE L_8:
000000DE ; SCOPE-END
216: }
000000DE B004 ADD R13,#0x10
000000E0 BC08 POP {R3}
000000E2 4718 BX R3
000000E4 ENDP ; 'get_status?T'
*** CODE SEGMENT '?PR?clear_feature?T?Chap_9':
223: void clear_feature(void)
00000000 B500 PUSH {LR}
00000002 B082 SUB R13,#0x8
224: {
00000004 ; SCOPE-START
226: INT8U bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
ARM COMPILER V2.53, Chap_9 28/06/07 09:54:11 PAGE 16
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 A801 ADD R0,R13,#0x4
00000014 7001 STRB R1,[R0,#0x0] ; bRecipient
228: if (bRecipient == USB_RECIPIENT_DEVICE
00000016 A801 ADD R0,R13,#0x4
00000018 7800 LDRB R0,[R0,#0x0] ; bRecipient
0000001A 2800 CMP R0,#0x0
0000001C D111 BNE L_17 ; T=0x00000042
0000001E 4800 LDR R0,=ControlData + 0x2 ; ControlData+2
00000020 8800 LDRH R0,[R0,#0x0] ; ControlData+2
00000022 2801 CMP R0,#0x1
00000024 D10D BNE L_17 ; T=0x00000042
231: DISABLE();
00000026 F7FF BL DISABLE?T ; T=0x0001 (1)
00000028 FFEB BL DISABLE?T ; T=0x0001 (2)
232: bEPPflags.bits.remote_wakeup = 0; /* 清除远程唤醒特性 clear reamote wakeup feature */
0000002A 4800 LDR R0,=bEPPflags ; bEPPflags
0000002C 6801 LDR R1,[R0,#0x0] ; bEPPflags
0000002E 2210 MOV R2,#0x10
00000030 4391 BIC R1,R2
00000032 6001 STR R1,[R0,#0x0] ; bEPPflags
233: ENABLE();
00000034 F7FF BL ENABLE?T ; T=0x0001 (1)
00000036 FFE4 BL ENABLE?T ; T=0x0001 (2)
234: single_transmit(0, 0); /* 返回一个空包 return an empty packet */
00000038 2000 MOV R0,#0x0
0000003A 2100 MOV R1,#0x0
0000003C F7FF BL single_transmit?T ; T=0x0001 (1)
0000003E FFE0 BL single_transmit?T ; T=0x0001 (2)
235: }
00000040 E02A B L_18 ; T=0x00000098
00000042 L_17:
237: else if (bRecipient == USB_RECIPIENT_ENDPOINT
00000042 A801 ADD R0,R13,#0x4
00000044 7800 LDRB R0,[R0,#0x0] ; bRecipient
00000046 2802 CMP R0,#0x2
00000048 D124 BNE L_19 ; T=0x00000094
0000004A 4800 LDR R0,=ControlData + 0x2 ; ControlData+2
0000004C 8800 LDRH R0,[R0,#0x0] ; ControlData+2
0000004E 2800 CMP R0,#0x0
00000050 D120 BNE L_19 ; T=0x00000094
241: endp = (INT8U)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
00000052 4800 LDR R0,=ControlData + 0x4 ; ControlData+4
00000054 8800 LDRH R0,[R0,#0x0] ; ControlData+4
00000056 1C01 MOV R1,R0
00000058 2003 MOV R0,#0x3
0000005A 4001 AND R1,R0
0000005C 0609 LSL R1,R1,#0x18
0000005E 0E09 LSR R1,R1,#0x18
00000060 A800 ADD R0,R13,#0x0
00000062 7001 STRB R1,[R0,#0x0] ; endp
242: if (ControlData.DeviceRequest.wIndex & (INT8U)USB_ENDPOINT_DIRECTION_MASK)
00000064 4800 LDR R0,=ControlData + 0x4 ; ControlData+4
00000066 8800 LDRH R0,[R0,#0x0] ; ControlData+4
00000068 2180 MOV R1,#0x80
0000006A 4208 TST R0,R1
0000006C D007 BEQ L_20 ; T=0x0000007E
243: USB_SetEndpointStatus(endp * 2 + 1, 0); /* 解禁 IN 端点 the IN endpoint is unstalled */
0000006E A800 ADD R0,R13,#0x0
00000070 7800 LDRB R0,[R0,#0x0] ; endp
ARM COMPILER V2.53, Chap_9 28/06/07 09:54:11 PAGE 17
00000072 0040 LSL R0,R0,#0x1
00000074 3001 ADD R0,#0x1
00000076 2100 MOV R1,#0x0
00000078 F7FF BL USB_SetEndpointStatus?T ; T=0x0001 (1)
0000007A FFC2 BL USB_SetEndpointStatus?T ; T=0x0001 (2)
0000007C E005 B L_21 ; T=0x0000008A
0000007E L_20:
245: USB_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -