⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdc_enumerate.lst

📁 高性能USB转串口(可高达10Mbps)完整的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 285 002e 1B02     		b	.L55
 286 0030 0B63     	.L53:
 287 0032 7AE1     		.loc 1 228 0
 288              		ldr	r3, [sp, #4]
 289              		mov	r2, #1
 290 0034 019B     		tst	r3, r2
 291 0036 0122     		bne	.LCB295
 292 0038 1342     		b	.L55	@long jump
 293 003a 00D1     	.LCB295:
 294 003c 75E1     		.loc 1 229 0
 295              		str	r2, [r1, #32]
 296              	.LBB4:
 297 003e 0A62     	.LBB5:
 298              		.loc 1 376 0
 299              		ldr	r4, [r0]
 369:cdc_enumerate.c **** 
 370:cdc_enumerate.c **** //*----------------------------------------------------------------------------
 371:cdc_enumerate.c **** //* \fn    AT91F_CDC_Enumerate
 372:cdc_enumerate.c **** //* \brief This function is a callback invoked when a SETUP packet is received
 373:cdc_enumerate.c **** //*----------------------------------------------------------------------------
 374:cdc_enumerate.c **** static void AT91F_CDC_Enumerate(AT91PS_CDC pCdc)
 375:cdc_enumerate.c **** {
 376:cdc_enumerate.c **** 	AT91PS_UDP pUDP = pCdc->pUdp;
 300              	CB306
 301 0040 0468     		b	.L55	@long jump
 302              	.LCB306:
 377:cdc_enumerate.c **** 	uchar bmRequestType, bRequest;
 378:cdc_enumerate.c **** 	ushort wValue, wIndex, wLength, wStatus;
 379:cdc_enumerate.c **** 
 380:cdc_enumerate.c **** 
 381:cdc_enumerate.c **** 	if ( !(pUDP->UDP_CSR[0] & AT91C_UDP_RXSETUP) )
 303              	L18:
 304 0042 236B     		.loc 1 384 0
 305 0044 5807     		ldr	r0, [r4, #80]
 306 0046 00D4     		lsl	r0, r0, #24
 307 0048 6FE1     		.loc 1 385 0
 308              		ldr	r6, [r4, #80]
 309              		.loc 1 386 0
 382:cdc_enumerate.c **** 		return;
 383:cdc_enumerate.c **** 
 384:cdc_enumerate.c **** 	bmRequestType = pUDP->UDP_FDR[0];
 310              	, [r4, #80]
 311 004a 206D     		mov	r1, #255
 312 004c 0006     	.LVL19:
 385:cdc_enumerate.c **** 	bRequest      = pUDP->UDP_FDR[0];
 313              	d	r2, r2, r1
 314 004e 266D     	.LVL20:
 386:cdc_enumerate.c **** 	wValue        = (pUDP->UDP_FDR[0] & 0xFF);
 315              	loc 1 387 0
 316 0050 226D     		ldr	r3, [r4, #80]
 317 0052 FF21     		lsl	r3, r3, #8
 318              		orr	r2, r2, r3
 319 0054 0A40     	.LVL21:
 320              		lsl	r2, r2, #16
 387:cdc_enumerate.c **** 	wValue       |= (pUDP->UDP_FDR[0] << 8);
 321              	2, r2, #16
 322 0056 236D     		mov	r8, r2
 323 0058 1B02     	.LVL22:
 324 005a 1A43     		.loc 1 388 0
 325              		ldr	r3, [r4, #80]
 326 005c 1204     		and	r3, r3, r1
 327 005e 120C     	.LVL23:
 328 0060 9046     		.loc 1 389 0
 329              		ldr	r2, [r4, #80]
 388:cdc_enumerate.c **** 	wIndex        = (pUDP->UDP_FDR[0] & 0xFF);
 330              	r2, #8
 331 0062 236D     		orr	r3, r3, r2
 332 0064 0B40     	.LVL24:
 333              		lsl	r3, r3, #16
 389:cdc_enumerate.c **** 	wIndex       |= (pUDP->UDP_FDR[0] << 8);
 334              		r3, r3, #16
 335 0066 226D     		mov	ip, r3
 336 0068 1202     	.LVL25:
 337 006a 1343     		.loc 1 390 0
 338              		ldr	r3, [r4, #80]
 339 006c 1B04     		and	r3, r3, r1
 340 006e 1B0C     	.LVL26:
 341 0070 9C46     		.loc 1 391 0
 342              		ldr	r2, [r4, #80]
 390:cdc_enumerate.c **** 	wLength       = (pUDP->UDP_FDR[0] & 0xFF);
 343              	r2, #8
 344 0072 236D     		orr	r3, r3, r2
 345 0074 0B40     	.LVL27:
 346              		lsl	r3, r3, #16
 391:cdc_enumerate.c **** 	wLength      |= (pUDP->UDP_FDR[0] << 8);
 347              		r7, r3, #16
 348 0076 226D     	.LVL28:
 349 0078 1202     		.loc 1 393 0
 350 007a 1343     		lsr	r1, r0, #24
 351              	.LVL29:
 352 007c 1B04     		cmp	r0, #0
 353 007e 1F0C     		bge	.L58
 354              		.loc 1 394 0
 392:cdc_enumerate.c **** 
 393:cdc_enumerate.c **** 	if (bmRequestType & 0x80) {
 355              	 [r4, #48]
 356 0080 010E     		mov	r2, #128
 357              		orr	r3, r3, r2
 358 0082 0028     		str	r3, [r4, #48]
 359 0084 06DA     	.L60:
 394:cdc_enumerate.c **** 		pUDP->UDP_CSR[0] |= AT91C_UDP_DIR;
 360              	 1 395 0
 361 0086 236B     		ldr	r3, [r4, #48]
 362 0088 8022     		tst	r3, r2
 363 008a 1343     		beq	.L60
 364 008c 2363     	.L58:
 365              		.loc 1 397 0
 395:cdc_enumerate.c **** 		while ( !(pUDP->UDP_CSR[0] & AT91C_UDP_DIR) );
 366              	3, [r4, #48]
 367 008e 236B     		mov	r2, #4
 368 0090 1342     		bic	r3, r3, r2
 369 0092 FCD0     		str	r3, [r4, #48]
 370              	.L61:
 396:cdc_enumerate.c **** 	}
 397:cdc_enumerate.c **** 	pUDP->UDP_CSR[0] &= ~AT91C_UDP_RXSETUP;
 371              	 1 398 0
 372 0094 236B     		ldr	r3, [r4, #48]
 373 0096 0422     		tst	r3, r2
 374 0098 9343     		bne	.L61
 375 009a 2363     		.loc 1 401 0
 376              		lsl	r3, r6, #24
 398:cdc_enumerate.c **** 	while ( (pUDP->UDP_CSR[0]  & AT91C_UDP_RXSETUP)  );
 377              	3, r3, #16
 378 009c 236B     		mov	r0, r3
 379 009e 1342     		orr	r0, r0, r1
 380 00a0 FCD1     		ldr	r3, .L129
 399:cdc_enumerate.c **** 
 400:cdc_enumerate.c **** 	// Handle supported standard device request Cf Table 9-3 in USB specification Rev 1.1
 401:cdc_enumerate.c **** 	switch ((bRequest << 8) | bmRequestType) {
 381              		r0, r3
 382 00a2 3306     		bne	.LCB393
 383 00a4 1B0C     		b	.L71	@long jump
 384 00a6 181C     	.LCB393:
 385 00a8 0843     		cmp	r0, r3
 386 00aa A34B     		bgt	.L80
 387 00ac 9842     		mov	r3, #128
 388 00ae 00D1     		lsl	r3, r3, #1
 389 00b0 D4E0     		cmp	r0, r3
 390              		bne	.LCB399
 391 00b2 9842     		b	.L67	@long jump
 392 00b4 1EDC     	.LCB399:
 393 00b6 8023     		cmp	r0, r3
 394 00b8 5B00     		bgt	.L81
 395 00ba 9842     		cmp	r0, #129
 396 00bc 00D1     		bne	.LCB403
 397 00be E5E0     		b	.L65	@long jump
 398              	.LCB403:
 399 00c0 9842     		cmp	r0, #130
 400 00c2 09DC     		bne	.LCB405
 401 00c4 8128     		b	.L66	@long jump
 402 00c6 00D1     	.LCB405:
 403 00c8 8EE0     		cmp	r0, #128
 404              		beq	.LCB407
 405 00ca 8228     		b	.L63	@long jump
 406 00cc 00D1     	.LCB407:
 407 00ce 94E0     		b	.L64
 408              	.L81:
 409 00d0 8028     		mov	r3, #129
 410 00d2 00D0     		lsl	r3, r3, #1
 411 00d4 1FE1     		cmp	r0, r3
 412              		bne	.LCB415
 413 00d6 7EE0     		b	.L69	@long jump
 414              	.LCB415:
 415 00d8 8123     		cmp	r0, r3
 416 00da 5B00     		bge	.LCB417
 417 00dc 9842     		b	.L68	@long jump
 418 00de 00D1     	.LCB417:
 419 00e0 DCE0     		mov	r3, #192
 420              		lsl	r3, r3, #2
 421 00e2 9842     		cmp	r0, r3
 422 00e4 00DA     		beq	.LCB421
 423 00e6 D5E0     		b	.L63	@long jump
 424              	.LCB421:
 425 00e8 C023     		b	.L70
 426 00ea 9B00     	.L80:
 427 00ec 9842     		mov	r3, #136
 428 00ee 00D0     		lsl	r3, r3, #4
 429 00f0 11E1     		cmp	r0, r3
 430              		beq	.L75
 431 00f2 AFE0     		cmp	r0, r3
 432              		bgt	.L82
 433 00f4 8823     		mov	r3, #160
 434 00f6 1B01     		lsl	r3, r3, #3
 435 00f8 9842     		cmp	r0, r3
 436 00fa 66D0     		beq	.L73
 437 00fc 9842     		mov	r3, #208
 438 00fe 0CDC     		lsl	r3, r3, #3
 439 0100 A023     		cmp	r0, r3
 440 0102 DB00     		beq	.L74
 441 0104 9842     		ldr	r3, .L129+4
 442 0106 3DD0     		cmp	r0, r3
 443 0108 D023     		beq	.LCB442
 444 010a DB00     		b	.L63	@long jump
 445 010c 9842     	.LCB442:
 446 010e 19D0     		b	.L72
 447 0110 8A4B     	.L82:
 448 0112 9842     		ldr	r3, .L129+8
 449 0114 00D0     		cmp	r0, r3
 450 0116 FEE0     		bne	.LCB449
 451              		b	.L123	@long jump
 452 0118 A4E0     	.LCB449:
 453              		cmp	r0, r3
 454 011a 894B     		bgt	.L83
 455 011c 9842     		mov	r3, #144
 456 011e 00D1     		lsl	r3, r3, #4
 457 0120 DEE0     		cmp	r0, r3
 458              		beq	.LCB455
 459 0122 9842     		b	.L63	@long jump
 460 0124 05DC     	.LCB455:
 461 0126 9023     		b	.L76
 462 0128 1B01     	.L83:
 463 012a 9842     		ldr	r3, .L129+12
 464 012c 00D0     		cmp	r0, r3
 465 012e F2E0     		bne	.LCB462
 466              		b	.L78	@long jump
 467 0130 36E0     	.LCB462:
 468              		add	r3, r3, #128
 469 0132 844B     		cmp	r0, r3
 470 0134 9842     		beq	.LCB465
 471 0136 00D1     		b	.L63	@long jump
 472 0138 DDE0     	.LCB465:
 473              		b	.L79
 474 013a 8033     	.L74:
 475 013c 9842     		.loc 1 403 0
 476 013e 00D0     		mov	r3, #128
 477 0140 E9E0     		lsl	r3, r3, #1
 478              		cmp	r8, r3
 479 0142 E2E0     		bne	.L84
 480              		.loc 1 404 0
 402:cdc_enumerate.c **** 	case STD_GET_DESCRIPTOR:
 403:cdc_enumerate.c **** 		if (wValue == 0x100)       // Return Device Descriptor
 481              	0, r4
 482 0144 8023     		bl	AT91F_USB_SendData
 483 0146 5B00     	.LVL31:
 484 0148 9845     		b	.L55
 485 014a 09D1     	.LVL32:
 404:cdc_enumerate.c **** 			AT91F_USB_SendData(pUDP, devDescriptor, MIN(sizeof(devDescriptor), wLength));
 486              	
 487 014c 122F     		.loc 1 405 0
 488 014e 01D9     		mov	r3, #128
 489 0150 1222     		lsl	r3, r3, #2
 490 0152 00E0     		cmp	r8, r3
 491              		bne	.L89
 492 0154 3A1C     		.loc 1 406 0
 493              		cmp	r7, #67
 494 0156 7C49     		bls	.L91
 495              		mov	r2, #67
 496 0158 201C     		b	.L93
 497 015a FFF7FEFF 	.L91:
 498              		mov	r2, r7
 499 015e E4E0     	.L93:
 500              		ldr	r1, .L129+20
 501              	.LVL33:
 405:cdc_enumerate.c **** 		else if (wValue == 0x200)  // Return Configuration Descriptor
 502              		AT91F_USB_SendData
 503 0160 8023     	.LVL34:
 504 0162 9B00     		b	.L55
 505 0164 9845     	.LVL35:
 506 0166 09D1     	.L89:
 406:cdc_enumerate.c **** 			AT91F_USB_SendData(pUDP, cfgDescriptor, MIN(sizeof(cfgDescriptor), wLength));
 507              	 1 408 0
 508 0168 432F     		mov	r0, r4
 509 016a 01D9     		bl	AT91F_USB_SendStall
 510 016c 4322     	.LVL36:
 511 016e 00E0     		b	.L55
 512              	.LVL37:
 513 0170 3A1C     	.L73:
 514              		.loc 1 411 0
 515 0172 7649     		mov	r0, r4
 516              		bl	AT91F_USB_SendZlp
 517 0174 201C     	.LVL38:
 518 0176 FFF7FEFF 		.loc 1 412 0
 519              		mov	r3, #128
 520 017a D6E0     		lsl	r3, r3, #1
 521              		mov	r2, r8
 522              		orr	r3, r3, r2
 407:cdc_enumerate.c **** 		else
 408:cdc_enumerate.c **** 			AT91F_USB_SendStall(pUDP);
 523              	]
 524 017c 201C     		mov	r3, #0
 525 017e FFF7FEFF 		cmp	r2, #0
 526              		beq	.L94
 527 0182 D2E0     		mov	r3, #1
 528              	.L94:
 529              		.loc 1 413 0
 409:cdc_enumerate.c **** 		break;
 410:cdc_enumerate.c **** 	case STD_SET_ADDRESS:
 411:cdc_enumerate.c **** 		AT91F_USB_SendZlp(pUDP);
 530              	, [r4, #4]
 531 0184 201C     		b	.L55
 532 0186 FFF7FEFF 	.LVL39:
 533              	.L76:
 412:cdc_enumerate.c **** 		pUDP->UDP_FADDR = (AT91C_UDP_FEN | wValue);
 534              	40:
 535 018a 8023     		.loc 1 416 0
 536 018c 5B00     		mov	r3, r8
 537 018e 4246     		strb	r3, [r5, #4]
 538 0190 1343     		.loc 1 417 0
 539 0192 A360     		mov	r0, r4
 540 0194 0023     		bl	AT91F_USB_SendZlp
 541 0196 002A     	.LVL41:
 542 0198 00D0     	.LVL42:
 543 019a 0123     		.loc 1 418 0
 544              		mov	r0, r8
 413:cdc_enumerate.c **** 		pUDP->UDP_GLBSTATE  = (wValue) ? AT91C_UDP_FADDEN : 0;
 545              	
 546 019c 6360     		bne	.LCB573
 547 019e C4E0     		b	.L95	@long jump
 548              	.LCB573:
 549              		mov	r3, #2
 550              		str	r3, [r4, #4]
 414:cdc_enumerate.c **** 		break;
 415:cdc_enumerate.c **** 	case STD_SET_CONFIGURATION:
 416:cdc_enumerate.c **** 		pCdc->currentConfiguration = wValue;
 551              	 1 419 0
 552 01a0 4346     		mov	r3, #130
 553 01a2 2B71     		lsl	r3, r3, #8
 417:cdc_enumerate.c **** 		AT91F_USB_SendZlp(pUDP);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -