📄 usbhw.lst
字号:
55: AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_UDP);
00000018 4800 LDR R0,=0xFFFFF120
0000001A 6001 STR R1,[R0,#0x0]
59: AT91C_BASE_PIOA->PIO_PER = AT91C_PIO_PA16;
0000001C 4800 LDR R1,=0x10000
0000001E 4800 LDR R0,=0xFFFFF400
00000020 6001 STR R1,[R0,#0x0]
60: AT91C_BASE_PIOA->PIO_SODR = AT91C_PIO_PA16;
00000022 4800 LDR R0,=0xFFFFF430
00000024 6001 STR R1,[R0,#0x0]
61: AT91C_BASE_PIOA->PIO_OER = AT91C_PIO_PA16;
00000026 4800 LDR R0,=0xFFFFF410
00000028 6001 STR R1,[R0,#0x0]
62: }
0000002A 4770 BX R14
0000002C ENDP ; 'USB_Init?T'
*** CODE SEGMENT '?PR?USB_Connect?T?usbhw':
72: void USB_Connect (BOOL con) {
00000000 1C01 MOV R1,R0 ; con
00000002 ---- Variable 'con' assigned to Register 'R1' ----
74: if (con) {
00000002 1C08 MOV R0,R1 ; con
00000004 2800 CMP R0,#0x0 ; con
00000006 D003 BEQ L_1 ; T=0x00000010
76: AT91C_BASE_PIOA->PIO_CODR = AT91C_PIO_PA16;
00000008 4800 LDR R1,=0x10000
0000000A 4800 LDR R0,=0xFFFFF434
0000000C 6001 STR R1,[R0,#0x0]
77: } else {
0000000E E002 B L_2 ; T=0x00000016
00000010 L_1:
79: AT91C_BASE_PIOA->PIO_SODR = AT91C_PIO_PA16;
00000010 4800 LDR R1,=0x10000
00000012 4800 LDR R0,=0xFFFFF430
00000014 6001 STR R1,[R0,#0x0]
80: }
00000016 L_2:
81: }
00000016 4770 BX R14
00000018 ENDP ; 'USB_Connect?T'
*** CODE SEGMENT '?PR?USB_Reset?T?usbhw':
90: void USB_Reset (void) {
00000000 ; SCOPE-START
94: pUDP->UDP_GLBSTATE &= ~(AT91C_UDP_FADDEN | AT91C_UDP_CONFG | AT91C_UDP_RMWUPE);
00000000 4800 LDR R0,=pUDP ; pUDP
00000002 6801 LDR R1,[R0,#0x0] ; pUDP
00000004 6848 LDR R0,[R1,#0x4]
00000006 2213 MOV R2,#0x13
00000008 4390 BIC R0,R2
0000000A 6048 STR R0,[R1,#0x4]
95: pUDP->UDP_FADDR = AT91C_UDP_FEN;
0000000C 4840 LDR R0,=0x100
ARM COMPILER V2.51a, usbhw 16/08/06 09:38:29 PAGE 11
0000000E 4800 LDR R1,=pUDP ; pUDP
00000010 6809 LDR R1,[R1,#0x0] ; pUDP
00000012 6088 STR R0,[R1,#0x8]
96: pUDP->UDP_ICR = 0xFFFFFFFF;
00000014 4800 LDR R0,=0xFFFFFFFF
00000016 4800 LDR R1,=pUDP ; pUDP
00000018 6809 LDR R1,[R1,#0x0] ; pUDP
0000001A 6208 STR R0,[R1,#0x20]
99: for (n = 0; n < USB_EP_NUM; n++) {
0000001C 2000 MOV R0,#0x0
0000001E ---- Variable 'n' assigned to Register 'R0' ----
0000001E L_6:
100: pUDP->UDP_CSR[n] = 0;
0000001E 2100 MOV R1,#0x0
00000020 1C03 MOV R3,R0 ; n
00000022 009B LSL R3,R3,#0x2 ; n
00000024 4800 LDR R2,=pUDP ; pUDP
00000026 6812 LDR R2,[R2,#0x0] ; pUDP
00000028 18D2 ADD R2,R3
0000002A 6311 STR R1,[R2,#0x30]
101: RxDataBank[n] = 0;
0000002C 2100 MOV R1,#0x0
0000002E 1C03 MOV R3,R0 ; n
00000030 4800 LDR R2,=RxDataBank ; RxDataBank
00000032 54D1 STRB R1,[R2,R3]
102: TxDataBank[n] = 0;
00000034 1C03 MOV R3,R0 ; n
00000036 4800 LDR R2,=TxDataBank ; TxDataBank
00000038 54D1 STRB R1,[R2,R3]
103: }
0000003A 3001 ADD R0,#0x1
0000003C 1C01 MOV R1,R0 ; n
0000003E 2904 CMP R1,#0x4 ; n
00000040 D3ED BCC L_6 ; T=0x0000001E
104: pUDP->UDP_RSTEP = 0xFFFFFFFF;
00000042 4800 LDR R0,=0xFFFFFFFF
00000044 4800 LDR R1,=pUDP ; pUDP
00000046 6809 LDR R1,[R1,#0x0] ; pUDP
00000048 6288 STR R0,[R1,#0x28]
105: pUDP->UDP_RSTEP = 0;
0000004A 2000 MOV R0,#0x0
0000004C 4800 LDR R1,=pUDP ; pUDP
0000004E 6809 LDR R1,[R1,#0x0] ; pUDP
00000050 6288 STR R0,[R1,#0x28]
109: AT91C_UDP_SOFINT | (2^USB_EP_NUM - 1);
00000052 4800 LDR R0,=0xF01
00000054 4800 LDR R1,=pUDP ; pUDP
00000056 6809 LDR R1,[R1,#0x0] ; pUDP
00000058 6108 STR R0,[R1,#0x10]
112: pUDP->UDP_CSR[0] = AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_CTRL;
0000005A 4800 LDR R0,=0x8000
0000005C 4800 LDR R1,=pUDP ; pUDP
0000005E 6809 LDR R1,[R1,#0x0] ; pUDP
00000060 6308 STR R0,[R1,#0x30]
00000062 ; SCOPE-END
113: }
00000062 4770 BX R14
00000064 ENDP ; 'USB_Reset?T'
*** CODE SEGMENT '?PR?USB_Suspend?T?usbhw':
124: }
00000000 4770 BX R14
00000002 ENDP ; 'USB_Suspend?T'
*** CODE SEGMENT '?PR?USB_Resume?T?usbhw':
135: }
00000000 4770 BX R14
00000002 ENDP ; 'USB_Resume?T'
ARM COMPILER V2.51a, usbhw 16/08/06 09:38:29 PAGE 12
*** CODE SEGMENT '?PR?USB_WakeUp?T?usbhw':
146: }
00000000 4770 BX R14
00000002 ENDP ; 'USB_WakeUp?T'
*** CODE SEGMENT '?PR?USB_WakeUpCfg?T?usbhw':
155: void USB_WakeUpCfg (BOOL cfg) {
00000000 1C01 MOV R1,R0 ; cfg
00000002 ---- Variable 'cfg' assigned to Register 'R1' ----
157: if (cfg) {
00000002 1C08 MOV R0,R1 ; cfg
00000004 2800 CMP R0,#0x0 ; cfg
00000006 D006 BEQ L_8 ; T=0x00000016
158: pUDP->UDP_GLBSTATE |= AT91C_UDP_RMWUPE;
00000008 4800 LDR R0,=pUDP ; pUDP
0000000A 6801 LDR R1,[R0,#0x0] ; pUDP
0000000C 6848 LDR R0,[R1,#0x4]
0000000E 2210 MOV R2,#0x10
00000010 4310 ORR R0,R2
00000012 6048 STR R0,[R1,#0x4]
159: } else {
00000014 E005 B L_9 ; T=0x00000022
00000016 L_8:
160: pUDP->UDP_GLBSTATE &= ~AT91C_UDP_RMWUPE;
00000016 4800 LDR R0,=pUDP ; pUDP
00000018 6801 LDR R1,[R0,#0x0] ; pUDP
0000001A 6848 LDR R0,[R1,#0x4]
0000001C 2210 MOV R2,#0x10
0000001E 4390 BIC R0,R2
00000020 6048 STR R0,[R1,#0x4]
161: }
00000022 L_9:
162: }
00000022 4770 BX R14
00000024 ENDP ; 'USB_WakeUpCfg?T'
*** CODE SEGMENT '?PR?USB_SetAddress?T?usbhw':
171: void USB_SetAddress (DWORD adr) {
00000000 1C01 MOV R1,R0 ; adr
00000002 ---- Variable 'adr' assigned to Register 'R1' ----
173: pUDP->UDP_FADDR = AT91C_UDP_FEN | adr;
00000002 1C08 MOV R0,R1 ; adr
00000004 4A40 LDR R2,=0x100
00000006 4310 ORR R0,R2
00000008 4800 LDR R2,=pUDP ; pUDP
0000000A 6812 LDR R2,[R2,#0x0] ; pUDP
0000000C 6090 STR R0,[R2,#0x8]
174: if (adr) {
0000000E 1C08 MOV R0,R1 ; adr
00000010 2800 CMP R0,#0x0 ; adr
00000012 D006 BEQ L_10 ; T=0x00000022
175: pUDP->UDP_GLBSTATE |= AT91C_UDP_FADDEN;
00000014 4800 LDR R0,=pUDP ; pUDP
00000016 6801 LDR R1,[R0,#0x0] ; pUDP
00000018 6848 LDR R0,[R1,#0x4]
0000001A 2201 MOV R2,#0x1
0000001C 4310 ORR R0,R2
0000001E 6048 STR R0,[R1,#0x4]
176: } else {
00000020 E005 B L_11 ; T=0x0000002E
00000022 L_10:
177: pUDP->UDP_GLBSTATE &= ~AT91C_UDP_FADDEN;
00000022 4800 LDR R0,=pUDP ; pUDP
00000024 6801 LDR R1,[R0,#0x0] ; pUDP
00000026 6848 LDR R0,[R1,#0x4]
00000028 2201 MOV R2,#0x1
0000002A 4390 BIC R0,R2
0000002C 6048 STR R0,[R1,#0x4]
ARM COMPILER V2.51a, usbhw 16/08/06 09:38:29 PAGE 13
178: }
0000002E L_11:
179: }
0000002E 4770 BX R14
00000030 ENDP ; 'USB_SetAddress?T'
*** CODE SEGMENT '?PR?USB_Configure?T?usbhw':
188: void USB_Configure (BOOL cfg) {
00000000 1C01 MOV R1,R0 ; cfg
00000002 ---- Variable 'cfg' assigned to Register 'R1' ----
190: if (cfg) {
00000002 1C08 MOV R0,R1 ; cfg
00000004 2800 CMP R0,#0x0 ; cfg
00000006 D006 BEQ L_12 ; T=0x00000016
191: pUDP->UDP_GLBSTATE |= AT91C_UDP_CONFG;
00000008 4800 LDR R0,=pUDP ; pUDP
0000000A 6801 LDR R1,[R0,#0x0] ; pUDP
0000000C 6848 LDR R0,[R1,#0x4]
0000000E 2202 MOV R2,#0x2
00000010 4310 ORR R0,R2
00000012 6048 STR R0,[R1,#0x4]
192: } else {
00000014 E005 B L_13 ; T=0x00000022
00000016 L_12:
193: pUDP->UDP_GLBSTATE &= ~AT91C_UDP_CONFG;
00000016 4800 LDR R0,=pUDP ; pUDP
00000018 6801 LDR R1,[R0,#0x0] ; pUDP
0000001A 6848 LDR R0,[R1,#0x4]
0000001C 2202 MOV R2,#0x2
0000001E 4390 BIC R0,R2
00000020 6048 STR R0,[R1,#0x4]
194: }
00000022 L_13:
195: }
00000022 4770 BX R14
00000024 ENDP ; 'USB_Configure?T'
*** CODE SEGMENT '?PR?USB_ConfigEP?T?usbhw':
204: void USB_ConfigEP (USB_ENDPOINT_DESCRIPTOR *pEPD) {
00000000 B410 PUSH {R4}
00000002 1C03 MOV R3,R0 ; pEPD
00000004 ---- Variable 'pEPD' assigned to Register 'R3' ----
00000004 ; SCOPE-START
207: num = pEPD->bEndpointAddress & 0x0F;
00000004 1C18 MOV R0,R3 ; pEPD
00000006 7880 LDRB R0,[R0,#0x2]
00000008 1C02 MOV R2,R0
0000000A 210F MOV R1,#0xF
0000000C 4011 AND R1,R2
0000000E ---- Variable 'num' assigned to Register 'R1' ----
208: dir = pEPD->bEndpointAddress & USB_ENDPOINT_DIRECTION_MASK;
0000000E 2080 MOV R0,#0x80
00000010 4002 AND R2,R0
00000012 ---- Variable 'dir' assigned to Register 'R2' ----
210: switch (pEPD->bmAttributes & USB_ENDPOINT_TYPE_MASK) {
00000012 1C18 MOV R0,R3 ; pEPD
00000014 78C0 LDRB R0,[R0,#0x3]
00000016 2303 MOV R3,#0x3
00000018 4018 AND R0,R3
0000001A 2801 CMP R0,#0x1
0000001C D00D BEQ L_17 ; T=0x0000003A
0000001E 2802 CMP R0,#0x2
00000020 D01E BEQ L_18 ; T=0x00000060
00000022 2803 CMP R0,#0x3
00000024 D02F BEQ L_19 ; T=0x00000086
00000026 2800 CMP R0,#0x0
00000028 D140 BNE L_16 ; T=0x000000AC
211: case USB_ENDPOINT_TYPE_CONTROL:
ARM COMPILER V2.51a, usbhw 16/08/06 09:38:29 PAGE 14
0000002A L_15:
212: pUDP->UDP_CSR[num] = AT91C_UDP_EPTYPE_CTRL;
0000002A 2000 MOV R0,#0x0
0000002C 1C0C MOV R4,R1 ; num
0000002E 00A4 LSL R4,R4,#0x2 ; num
00000030 4800 LDR R3,=pUDP ; pUDP
00000032 681B LDR R3,[R3,#0x0] ; pUDP
00000034 191B ADD R3,R4
00000036 6318 STR R0,[R3,#0x30]
213: break;
00000038 E03F B L_14 ; T=0x000000BA
214: case USB_ENDPOINT_TYPE_ISOCHRONOUS:
0000003A L_17:
215: if (dir) {
0000003A 1C10 MOV R0,R2 ; dir
0000003C 2800 CMP R0,#0x0 ; dir
0000003E D007 BEQ L_20 ; T=0x00000050
216: pUDP->UDP_CSR[num] = AT91C_UDP_EPTYPE_ISO_IN;
00000040 4800 LDR R0,=0x500
00000042 1C0C MOV R4,R1 ; num
00000044 00A4 LSL R4,R4,#0x2 ; num
00000046 4800 LDR R3,=pUDP ; pUDP
00000048 681B LDR R3,[R3,#0x0] ; pUDP
0000004A 191B ADD R3,R4
0000004C 6318 STR R0,[R3,#0x30]
217: } else {
0000004E E034 B L_14 ; T=0x000000BA
00000050 L_20:
218: pUDP->UDP_CSR[num] = AT91C_UDP_EPTYPE_ISO_OUT;
00000050 4840 LDR R0,=0x100
00000052 1C0C MOV R4,R1 ; num
00000054 00A4 LSL R4,R4,#0x2 ; num
00000056 4800 LDR R3,=pUDP ; pUDP
00000058 681B LDR R3,[R3,#0x0] ; pUDP
0000005A 191B ADD R3,R4
0000005C 6318 STR R0,[R3,#0x30]
220: break;
0000005E E02C B L_14 ; T=0x000000BA
221: case USB_ENDPOINT_TYPE_BULK:
00000060 L_18:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -