📄 cdc_enumerate.lst
字号:
269:cdc_enumerate.c **** //* \brief Send through endpoint 2
270:cdc_enumerate.c **** //*----------------------------------------------------------------------------
271:cdc_enumerate.c **** static uint AT91F_UDP_Write(AT91PS_CDC pCdc, const char *pData, uint length)
272:cdc_enumerate.c **** {
273:cdc_enumerate.c **** AT91PS_UDP pUdp = pCdc->pUdp;
274:cdc_enumerate.c **** uint cpt = 0;
275:cdc_enumerate.c ****
276:cdc_enumerate.c **** // Send the first packet
277:cdc_enumerate.c **** cpt = MIN(length, AT91C_EP_IN_SIZE);
278:cdc_enumerate.c **** length -= cpt;
279:cdc_enumerate.c **** while (cpt--) pUdp->UDP_FDR[AT91C_EP_IN] = *pData++;
280:cdc_enumerate.c **** pUdp->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
281:cdc_enumerate.c ****
282:cdc_enumerate.c **** while (length) {
283:cdc_enumerate.c **** // Fill the second bank
284:cdc_enumerate.c **** cpt = MIN(length, AT91C_EP_IN_SIZE);
285:cdc_enumerate.c **** length -= cpt;
286:cdc_enumerate.c **** while (cpt--) pUdp->UDP_FDR[AT91C_EP_IN] = *pData++;
287:cdc_enumerate.c **** // Wait for the the first bank to be sent
288:cdc_enumerate.c **** while ( !(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP) )
289:cdc_enumerate.c **** if ( !AT91F_UDP_IsConfigured(pCdc) ) return length;
290:cdc_enumerate.c **** pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
291:cdc_enumerate.c **** while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
292:cdc_enumerate.c **** pUdp->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
293:cdc_enumerate.c **** }
294:cdc_enumerate.c **** // Wait for the end of transfer
295:cdc_enumerate.c **** while ( !(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP) )
296:cdc_enumerate.c **** if ( !AT91F_UDP_IsConfigured(pCdc) ) return length;
297:cdc_enumerate.c **** pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
298:cdc_enumerate.c **** while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
299:cdc_enumerate.c ****
300:cdc_enumerate.c **** return length;
301:cdc_enumerate.c **** }
302:cdc_enumerate.c ****
303:cdc_enumerate.c **** //*----------------------------------------------------------------------------
304:cdc_enumerate.c **** //* \fn AT91F_USB_SendData
305:cdc_enumerate.c **** //* \brief Send Data through the control endpoint
306:cdc_enumerate.c **** //*----------------------------------------------------------------------------
307:cdc_enumerate.c **** unsigned int csrTab[100];
308:cdc_enumerate.c **** unsigned char csrIdx = 0;
309:cdc_enumerate.c ****
310:cdc_enumerate.c **** static void AT91F_USB_SendData(AT91PS_UDP pUdp, const char *pData, uint length)
311:cdc_enumerate.c **** {
61 lr}
62 0000 70B5 .LCFI0:
63 .LVL2:
64 sub sp, sp, #4
65 0002 81B0 .LCFI1:
66 mov r6, r1
67 0004 0E1C mov r5, r2
68 0006 151C .LVL3:
69 .L6:
70 .loc 1 316 0
312:cdc_enumerate.c **** uint cpt = 0;
313:cdc_enumerate.c **** AT91_REG csr;
314:cdc_enumerate.c ****
315:cdc_enumerate.c **** do {
316:cdc_enumerate.c **** cpt = MIN(length, 8);
71 5
72 0008 2C1C cmp r5, #8
73 000a 082D bls .L7
74 000c 00D9 mov r4, #8
75 000e 0824 .L7:
76 .loc 1 319 0
317:cdc_enumerate.c **** length -= cpt;
318:cdc_enumerate.c ****
319:cdc_enumerate.c **** while (cpt--)
77 1, r4, #1
78 0010 611E bcc .L8
79 0012 06D3 .LVL4:
80 mov r2, r6
81 0014 321C .LVL5:
82 .L10:
83 .loc 1 320 0
320:cdc_enumerate.c **** pUdp->UDP_FDR[0] = *pData++;
84 3, [r2]
85 0016 1378 str r3, [r0, #80]
86 0018 0365 add r2, r2, #1
87 001a 0132 .loc 1 319 0
88 sub r1, r1, #1
89 001c 0139 bcs .L10
90 001e FAD2 add r6, r6, r4
91 0020 3619 .LVL6:
92 .L8:
93 .loc 1 322 0
321:cdc_enumerate.c ****
322:cdc_enumerate.c **** if (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
94 r0, #48]
95 0022 036B mov r2, #1
96 0024 0122 .LVL7:
97 tst r3, r2
98 0026 1342 beq .L12
99 0028 05D0 .loc 1 323 0
323:cdc_enumerate.c **** pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
100 3, [r0, #48]
101 002a 036B bic r3, r3, r2
102 002c 9343 str r3, [r0, #48]
103 002e 0363 .L14:
104 .loc 1 324 0
324:cdc_enumerate.c **** while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
105 r3, [r0, #48]
106 0030 036B tst r3, r2
107 0032 1342 bne .L14
108 0034 FCD1 .L12:
109 .loc 1 327 0
325:cdc_enumerate.c **** }
326:cdc_enumerate.c ****
327:cdc_enumerate.c **** pUdp->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
110 r3, [r0, #48]
111 0036 036B mov r2, #16
112 0038 1022 orr r3, r3, r2
113 003a 1343 str r3, [r0, #48]
114 003c 0363 mov r1, #2
115 003e 0221 .LVL8:
116 .L15:
117 .loc 1 329 0
328:cdc_enumerate.c **** do {
329:cdc_enumerate.c **** csr = pUdp->UDP_CSR[0];
118 [r0, #48]
119 0040 036B str r3, [sp]
120 0042 0093 .loc 1 332 0
330:cdc_enumerate.c ****
331:cdc_enumerate.c **** // Data IN stage has been stopped by a status OUT
332:cdc_enumerate.c **** if (csr & AT91C_UDP_RX_DATA_BK0) {
121 r r3, [sp]
122 0044 009B tst r3, r1
123 0046 0B42 beq .L16
124 0048 03D0 .loc 1 333 0
333:cdc_enumerate.c **** pUdp->UDP_CSR[0] &= ~(AT91C_UDP_RX_DATA_BK0);
125 r3, [r0, #48]
126 004a 036B bic r3, r3, r1
127 004c 8B43 str r3, [r0, #48]
128 004e 0363 b .L23
129 0050 0FE0 .L16:
130 .loc 1 336 0
334:cdc_enumerate.c **** return;
335:cdc_enumerate.c **** }
336:cdc_enumerate.c **** } while ( !(csr & AT91C_UDP_TXCOMP) );
131 3, [sp]
132 0052 009B mov r2, #1
133 0054 0122 tst r3, r2
134 0056 1342 beq .L15
135 0058 F2D0 .loc 1 317 0
136 sub r5, r5, r4
137 005a 2D1B .loc 1 338 0
337:cdc_enumerate.c ****
338:cdc_enumerate.c **** } while (length);
138 , #0
139 005c 002D bne .L6
140 005e D3D1 .loc 1 340 0
339:cdc_enumerate.c ****
340:cdc_enumerate.c **** if (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
141 r r3, [r0, #48]
142 0060 036B tst r3, r2
143 0062 1342 beq .L23
144 0064 05D0 .loc 1 341 0
341:cdc_enumerate.c **** pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
145 r3, [r0, #48]
146 0066 036B bic r3, r3, r2
147 0068 9343 str r3, [r0, #48]
148 006a 0363 .L22:
149 .loc 1 342 0
342:cdc_enumerate.c **** while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
150 r3, [r0, #48]
151 006c 036B tst r3, r2
152 006e 1342 bne .L22
153 0070 FCD1 .L23:
154 .loc 1 344 0
343:cdc_enumerate.c **** }
344:cdc_enumerate.c **** }
155 sp, sp, #4
156 0072 01B0 @ sp needed for prologue
157 .LVL9:
158 .LVL10:
159 .LVL11:
160 pop {r4, r5, r6}
161 0074 70BC pop {r0}
162 0076 01BC bx r0
163 0078 0047 .LFE294:
165 .section .text.AT91F_USB_SendZlp,"ax",%progbits
166 007a C046 .align 2
167 .global AT91F_USB_SendZlp
168 .code 16
169 .thumb_func
171 AT91F_USB_SendZlp:
172 .LFB295:
173 .loc 1 351 0
345:cdc_enumerate.c ****
346:cdc_enumerate.c **** //*----------------------------------------------------------------------------
347:cdc_enumerate.c **** //* \fn AT91F_USB_SendZlp
348:cdc_enumerate.c **** //* \brief Send zero length packet through the control endpoint
349:cdc_enumerate.c **** //*----------------------------------------------------------------------------
350:cdc_enumerate.c **** void AT91F_USB_SendZlp(AT91PS_UDP pUdp)
351:cdc_enumerate.c **** {
174 d for prologue
175 .loc 1 352 0
176 ldr r3, [r0, #48]
352:cdc_enumerate.c **** pUdp->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
177 v r2, #16
178 0000 036B orr r3, r3, r2
179 0002 1022 str r3, [r0, #48]
180 0004 1343 mov r2, #1
181 0006 0363 .L33:
182 0008 0122 .loc 1 353 0
183 ldr r3, [r0, #48]
353:cdc_enumerate.c **** while ( !(pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) );
184 , r2
185 000a 036B beq .L33
186 000c 1342 .loc 1 354 0
187 000e FCD0 ldr r3, [r0, #48]
354:cdc_enumerate.c **** pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
188 r3, r3, r2
189 0010 036B str r3, [r0, #48]
190 0012 9343 mov r2, #1
191 0014 0363 .L35:
192 0016 0122 .loc 1 355 0
193 ldr r3, [r0, #48]
355:cdc_enumerate.c **** while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
194 3, r2
195 0018 036B bne .L35
196 001a 1342 .loc 1 356 0
197 001c FCD1 @ sp needed for prologue
356:cdc_enumerate.c **** }
198 lr
199 .LFE295:
201 .section .text.AT91F_USB_SendStall,"ax",%progbits
202 .align 2
203 .global AT91F_USB_SendStall
204 .code 16
205 .thumb_func
207 AT91F_USB_SendStall:
208 .LFB296:
209 .loc 1 363 0
210 .LVL13:
357:cdc_enumerate.c ****
358:cdc_enumerate.c **** //*----------------------------------------------------------------------------
359:cdc_enumerate.c **** //* \fn AT91F_USB_SendStall
360:cdc_enumerate.c **** //* \brief Stall the control endpoint
361:cdc_enumerate.c **** //*----------------------------------------------------------------------------
362:cdc_enumerate.c **** void AT91F_USB_SendStall(AT91PS_UDP pUdp)
363:cdc_enumerate.c **** {
211 for prologue
212 .loc 1 364 0
213 ldr r3, [r0, #48]
364:cdc_enumerate.c **** pUdp->UDP_CSR[0] |= AT91C_UDP_FORCESTALL;
214 v r2, #32
215 0000 036B orr r3, r3, r2
216 0002 2022 str r3, [r0, #48]
217 0004 1343 mov r2, #8
218 0006 0363 .L43:
219 0008 0822 .loc 1 365 0
220 ldr r3, [r0, #48]
365:cdc_enumerate.c **** while ( !(pUdp->UDP_CSR[0] & AT91C_UDP_ISOERROR) );
221 , r2
222 000a 036B beq .L43
223 000c 1342 .loc 1 366 0
224 000e FCD0 ldr r3, [r0, #48]
366:cdc_enumerate.c **** pUdp->UDP_CSR[0] &= ~(AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR);
225 r2, #40
226 0010 036B bic r3, r3, r2
227 0012 2822 str r3, [r0, #48]
228 0014 9343 .L45:
229 0016 0363 .loc 1 367 0
230 ldr r3, [r0, #48]
367:cdc_enumerate.c **** while (pUdp->UDP_CSR[0] & (AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR));
231 3, r2
232 0018 036B bne .L45
233 001a 1342 .loc 1 368 0
234 001c FCD1 @ sp needed for prologue
368:cdc_enumerate.c **** }
235 lr
236 .LFE296:
238 .section .text.AT91F_UDP_IsConfigured,"ax",%progbits
239 .align 2
240 .code 16
241 .thumb_func
243 AT91F_UDP_IsConfigured:
244 .LFB291:
245 .loc 1 214 0
246 push {r4, r5, r6, r7, lr}
247 .LCFI2:
248 0000 F0B5 mov r7, r8
249 push {r7}
250 0002 4746 .LCFI3:
251 0004 80B4 .LVL14:
252 sub sp, sp, #8
253 .LCFI4:
254 0006 82B0 mov r5, r0
255 .loc 1 215 0
256 0008 051C ldr r1, [r0]
257 .LVL15:
258 000a 0168 .loc 1 216 0
259 ldr r3, [r1, #28]
260 str r3, [sp, #4]
261 000c CB69 .LVL16:
262 000e 0193 .loc 1 218 0
263 ldr r3, [sp, #4]
264 mov r2, #128
265 0010 019B lsl r2, r2, #5
266 0012 8022 tst r3, r2
267 0014 5201 beq .L53
268 0016 1342 .loc 1 219 0
269 0018 0CD0 str r2, [r1, #32]
270 .loc 1 221 0
271 001a 0A62 mov r3, #1
272 neg r3, r3
273 001c 0123 str r3, [r1, #40]
274 001e 5B42 .loc 1 222 0
275 0020 8B62 mov r3, #0
276 str r3, [r1, #40]
277 0022 0023 .loc 1 224 0
278 0024 8B62 mov r3, #128
279 lsl r3, r3, #1
280 0026 8023 str r3, [r1, #8]
281 0028 5B00 .loc 1 226 0
282 002a 8B60 mov r3, #128
283 lsl r3, r3, #8
284 002c 8023 str r3, [r1, #48]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -