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

📄 main.lss

📁 高性能USB转串口(可高达10Mbps)完整的源代码
💻 LSS
📖 第 1 页 / 共 5 页
字号:
  100360:	d003      	beq.n	10036a <AT91F_USB_SendData+0x52>
				pUdp->UDP_CSR[0] &= ~(AT91C_UDP_RX_DATA_BK0);
  100362:	6b03      	ldr	r3, [r0, #48]
  100364:	438b      	bics	r3, r1
  100366:	6303      	str	r3, [r0, #48]
  100368:	e00f      	b.n	10038a <AT91F_USB_SendData+0x72>
				return;
			}
		} while ( !(csr & AT91C_UDP_TXCOMP) );
  10036a:	9b00      	ldr	r3, [sp, #0]
  10036c:	2201      	movs	r2, #1
  10036e:	4213      	tst	r3, r2
  100370:	d0f2      	beq.n	100358 <AT91F_USB_SendData+0x40>
  100372:	1b2d      	subs	r5, r5, r4

	} while (length);
  100374:	2d00      	cmp	r5, #0
  100376:	d1d3      	bne.n	100320 <AT91F_USB_SendData+0x8>

	if (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
  100378:	6b03      	ldr	r3, [r0, #48]
  10037a:	4213      	tst	r3, r2
  10037c:	d005      	beq.n	10038a <AT91F_USB_SendData+0x72>
		pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
  10037e:	6b03      	ldr	r3, [r0, #48]
  100380:	4393      	bics	r3, r2
  100382:	6303      	str	r3, [r0, #48]
		while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
  100384:	6b03      	ldr	r3, [r0, #48]
  100386:	4213      	tst	r3, r2
  100388:	d1fc      	bne.n	100384 <AT91F_USB_SendData+0x6c>
	}
}
  10038a:	b001      	add	sp, #4
  10038c:	bc70      	pop	{r4, r5, r6}
  10038e:	bc01      	pop	{r0}
  100390:	4700      	bx	r0
  100392:	46c0      	nop			(mov r8, r8)

00100394 <AT91F_USB_SendZlp>:

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_SendZlp
//* \brief Send zero length packet through the control endpoint
//*----------------------------------------------------------------------------
void AT91F_USB_SendZlp(AT91PS_UDP pUdp)
{
	pUdp->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
  100394:	6b03      	ldr	r3, [r0, #48]
  100396:	2210      	movs	r2, #16
  100398:	4313      	orrs	r3, r2
  10039a:	6303      	str	r3, [r0, #48]
  10039c:	2201      	movs	r2, #1
	while ( !(pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) );
  10039e:	6b03      	ldr	r3, [r0, #48]
  1003a0:	4213      	tst	r3, r2
  1003a2:	d0fc      	beq.n	10039e <AT91F_USB_SendZlp+0xa>
	pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
  1003a4:	6b03      	ldr	r3, [r0, #48]
  1003a6:	4393      	bics	r3, r2
  1003a8:	6303      	str	r3, [r0, #48]
  1003aa:	2201      	movs	r2, #1
	while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
  1003ac:	6b03      	ldr	r3, [r0, #48]
  1003ae:	4213      	tst	r3, r2
  1003b0:	d1fc      	bne.n	1003ac <AT91F_USB_SendZlp+0x18>
}
  1003b2:	4770      	bx	lr

001003b4 <AT91F_USB_SendStall>:

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_SendStall
//* \brief Stall the control endpoint
//*----------------------------------------------------------------------------
void AT91F_USB_SendStall(AT91PS_UDP pUdp)
{
	pUdp->UDP_CSR[0] |= AT91C_UDP_FORCESTALL;
  1003b4:	6b03      	ldr	r3, [r0, #48]
  1003b6:	2220      	movs	r2, #32
  1003b8:	4313      	orrs	r3, r2
  1003ba:	6303      	str	r3, [r0, #48]
  1003bc:	2208      	movs	r2, #8
	while ( !(pUdp->UDP_CSR[0] & AT91C_UDP_ISOERROR) );
  1003be:	6b03      	ldr	r3, [r0, #48]
  1003c0:	4213      	tst	r3, r2
  1003c2:	d0fc      	beq.n	1003be <AT91F_USB_SendStall+0xa>
	pUdp->UDP_CSR[0] &= ~(AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR);
  1003c4:	6b03      	ldr	r3, [r0, #48]
  1003c6:	2228      	movs	r2, #40
  1003c8:	4393      	bics	r3, r2
  1003ca:	6303      	str	r3, [r0, #48]
	while (pUdp->UDP_CSR[0] & (AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR));
  1003cc:	6b03      	ldr	r3, [r0, #48]
  1003ce:	4213      	tst	r3, r2
  1003d0:	d1fc      	bne.n	1003cc <AT91F_USB_SendStall+0x18>
}
  1003d2:	4770      	bx	lr

001003d4 <AT91F_UDP_IsConfigured>:
  1003d4:	b5f0      	push	{r4, r5, r6, r7, lr}
  1003d6:	4647      	mov	r7, r8
  1003d8:	b480      	push	{r7}
  1003da:	b082      	sub	sp, #8
  1003dc:	1c05      	adds	r5, r0, #0
  1003de:	6801      	ldr	r1, [r0, #0]
  1003e0:	69cb      	ldr	r3, [r1, #28]
  1003e2:	9301      	str	r3, [sp, #4]
  1003e4:	9b01      	ldr	r3, [sp, #4]
  1003e6:	2280      	movs	r2, #128
  1003e8:	0152      	lsls	r2, r2, #5
  1003ea:	4213      	tst	r3, r2
  1003ec:	d00c      	beq.n	100408 <AT91F_UDP_IsConfigured+0x34>
  1003ee:	620a      	str	r2, [r1, #32]
  1003f0:	2301      	movs	r3, #1
  1003f2:	425b      	negs	r3, r3
  1003f4:	628b      	str	r3, [r1, #40]
  1003f6:	2300      	movs	r3, #0
  1003f8:	628b      	str	r3, [r1, #40]
  1003fa:	2380      	movs	r3, #128
  1003fc:	005b      	lsls	r3, r3, #1
  1003fe:	608b      	str	r3, [r1, #8]
  100400:	2380      	movs	r3, #128
  100402:	021b      	lsls	r3, r3, #8
  100404:	630b      	str	r3, [r1, #48]
  100406:	e17a      	b.n	1006fe <AT91F_UDP_IsConfigured+0x32a>
  100408:	9b01      	ldr	r3, [sp, #4]
  10040a:	2201      	movs	r2, #1
  10040c:	4213      	tst	r3, r2
  10040e:	d100      	bne.n	100412 <AT91F_UDP_IsConfigured+0x3e>
  100410:	e175      	b.n	1006fe <AT91F_UDP_IsConfigured+0x32a>
  100412:	620a      	str	r2, [r1, #32]

//*----------------------------------------------------------------------------
//* \fn    AT91F_CDC_Enumerate
//* \brief This function is a callback invoked when a SETUP packet is received
//*----------------------------------------------------------------------------
static void AT91F_CDC_Enumerate(AT91PS_CDC pCdc)
{
	AT91PS_UDP pUDP = pCdc->pUdp;
  100414:	6804      	ldr	r4, [r0, #0]
	uchar bmRequestType, bRequest;
	ushort wValue, wIndex, wLength, wStatus;


	if ( !(pUDP->UDP_CSR[0] & AT91C_UDP_RXSETUP) )
  100416:	6b23      	ldr	r3, [r4, #48]
  100418:	0758      	lsls	r0, r3, #29
  10041a:	d400      	bmi.n	10041e <AT91F_UDP_IsConfigured+0x4a>
  10041c:	e16f      	b.n	1006fe <AT91F_UDP_IsConfigured+0x32a>
		return;

	bmRequestType = pUDP->UDP_FDR[0];
  10041e:	6d20      	ldr	r0, [r4, #80]
  100420:	0600      	lsls	r0, r0, #24
	bRequest      = pUDP->UDP_FDR[0];
  100422:	6d26      	ldr	r6, [r4, #80]
	wValue        = (pUDP->UDP_FDR[0] & 0xFF);
  100424:	6d22      	ldr	r2, [r4, #80]
  100426:	21ff      	movs	r1, #255
  100428:	400a      	ands	r2, r1
	wValue       |= (pUDP->UDP_FDR[0] << 8);
  10042a:	6d23      	ldr	r3, [r4, #80]
  10042c:	021b      	lsls	r3, r3, #8
  10042e:	431a      	orrs	r2, r3
  100430:	0412      	lsls	r2, r2, #16
  100432:	0c12      	lsrs	r2, r2, #16
  100434:	4690      	mov	r8, r2
	wIndex        = (pUDP->UDP_FDR[0] & 0xFF);
  100436:	6d23      	ldr	r3, [r4, #80]
  100438:	400b      	ands	r3, r1
	wIndex       |= (pUDP->UDP_FDR[0] << 8);
  10043a:	6d22      	ldr	r2, [r4, #80]
  10043c:	0212      	lsls	r2, r2, #8
  10043e:	4313      	orrs	r3, r2
  100440:	041b      	lsls	r3, r3, #16
  100442:	0c1b      	lsrs	r3, r3, #16
  100444:	469c      	mov	ip, r3
	wLength       = (pUDP->UDP_FDR[0] & 0xFF);
  100446:	6d23      	ldr	r3, [r4, #80]
  100448:	400b      	ands	r3, r1
	wLength      |= (pUDP->UDP_FDR[0] << 8);
  10044a:	6d22      	ldr	r2, [r4, #80]
  10044c:	0212      	lsls	r2, r2, #8
  10044e:	4313      	orrs	r3, r2
  100450:	041b      	lsls	r3, r3, #16
  100452:	0c1f      	lsrs	r7, r3, #16

	if (bmRequestType & 0x80) {
  100454:	0e01      	lsrs	r1, r0, #24
  100456:	2800      	cmp	r0, #0
  100458:	da06      	bge.n	100468 <AT91F_UDP_IsConfigured+0x94>
		pUDP->UDP_CSR[0] |= AT91C_UDP_DIR;
  10045a:	6b23      	ldr	r3, [r4, #48]
  10045c:	2280      	movs	r2, #128
  10045e:	4313      	orrs	r3, r2
  100460:	6323      	str	r3, [r4, #48]
		while ( !(pUDP->UDP_CSR[0] & AT91C_UDP_DIR) );
  100462:	6b23      	ldr	r3, [r4, #48]
  100464:	4213      	tst	r3, r2
  100466:	d0fc      	beq.n	100462 <AT91F_UDP_IsConfigured+0x8e>
	}
	pUDP->UDP_CSR[0] &= ~AT91C_UDP_RXSETUP;
  100468:	6b23      	ldr	r3, [r4, #48]
  10046a:	2204      	movs	r2, #4
  10046c:	4393      	bics	r3, r2
  10046e:	6323      	str	r3, [r4, #48]
	while ( (pUDP->UDP_CSR[0]  & AT91C_UDP_RXSETUP)  );
  100470:	6b23      	ldr	r3, [r4, #48]
  100472:	4213      	tst	r3, r2
  100474:	d1fc      	bne.n	100470 <AT91F_UDP_IsConfigured+0x9c>

	// Handle supported standard device request Cf Table 9-3 in USB specification Rev 1.1
	switch ((bRequest << 8) | bmRequestType) {
  100476:	0633      	lsls	r3, r6, #24
  100478:	0c1b      	lsrs	r3, r3, #16
  10047a:	1c18      	adds	r0, r3, #0
  10047c:	4308      	orrs	r0, r1
  10047e:	4ba3      	ldr	r3, [pc, #652]	(10070c <.text+0x70c>)
  100480:	4298      	cmp	r0, r3
  100482:	d100      	bne.n	100486 <AT91F_UDP_IsConfigured+0xb2>
  100484:	e0d4      	b.n	100630 <AT91F_UDP_IsConfigured+0x25c>
  100486:	4298      	cmp	r0, r3
  100488:	dc1e      	bgt.n	1004c8 <AT91F_UDP_IsConfigured+0xf4>
  10048a:	2380      	movs	r3, #128
  10048c:	005b      	lsls	r3, r3, #1
  10048e:	4298      	cmp	r0, r3
  100490:	d100      	bne.n	100494 <AT91F_UDP_IsConfigured+0xc0>
  100492:	e0e5      	b.n	100660 <AT91F_UDP_IsConfigured+0x28c>
  100494:	4298      	cmp	r0, r3
  100496:	dc09      	bgt.n	1004ac <AT91F_UDP_IsConfigured+0xd8>
  100498:	2881      	cmp	r0, #129
  10049a:	d100      	bne.n	10049e <AT91F_UDP_IsConfigured+0xca>
  10049c:	e08e      	b.n	1005bc <AT91F_UDP_IsConfigured+0x1e8>
  10049e:	2882      	cmp	r0, #130
  1004a0:	d100      	bne.n	1004a4 <AT91F_UDP_IsConfigured+0xd0>
  1004a2:	e094      	b.n	1005ce <AT91F_UDP_IsConfigured+0x1fa>
  1004a4:	2880      	cmp	r0, #128
  1004a6:	d000      	beq.n	1004aa <AT91F_UDP_IsConfigured+0xd6>
  1004a8:	e11f      	b.n	1006ea <AT91F_UDP_IsConfigured+0x316>
  1004aa:	e07e      	b.n	1005aa <AT91F_UDP_IsConfigured+0x1d6>
  1004ac:	2381      	movs	r3, #129
  1004ae:	005b      	lsls	r3, r3, #1
  1004b0:	4298      	cmp	r0, r3
  1004b2:	d100      	bne.n	1004b6 <AT91F_UDP_IsConfigured+0xe2>
  1004b4:	e0dc      	b.n	100670 <AT91F_UDP_IsConfigured+0x29c>
  1004b6:	4298      	cmp	r0, r3
  1004b8:	da00      	bge.n	1004bc <AT91F_UDP_IsConfigured+0xe8>
  1004ba:	e0d5      	b.n	100668 <AT91F_UDP_IsConfigured+0x294>
  1004bc:	23c0      	movs	r3, #192
  1004be:	009b      	lsls	r3, r3, #2
  1004c0:	4298      	cmp	r0, r3
  1004c2:	d000      	beq.n	1004c6 <AT91F_UDP_IsConfigured+0xf2>
  1004c4:	e111      	b.n	1006ea <AT91F_UDP_IsConfigured+0x316>
  1004c6:	e0af      	b.n	100628 <AT91F_UDP_IsConfigured+0x254>
  1004c8:	2388      	movs	r3, #136
  1004ca:	011b      	lsls	r3, r3, #4
  1004cc:	4298      	cmp	r0, r3
  1004ce:	d066      	beq.n	10059e <AT91F_UDP_IsConfigured+0x1ca>
  1004d0:	4298      	cmp	r0, r3
  1004d2:	dc0c      	bgt.n	1004ee <AT91F_UDP_IsConfigured+0x11a>
  1004d4:	23a0      	movs	r3, #160
  1004d6:	00db      	lsls	r3, r3, #3
  1004d8:	4298      	cmp	r0, r3
  1004da:	d03d      	beq.n	100558 <AT91F_UDP_IsConfigured+0x184>
  1004dc:	23d0      	movs	r3, #208
  1004de:	00db      	lsls	r3, r3, #3
  1004e0:	4298      	cmp	r0, r3
  1004e2:	d019      	beq.n	100518 <AT91F_UDP_IsConfigured+0x144>
  1004e4:	4b8a      	ldr	r3, [pc, #552]	(100710 <.text+0x710>)
  1004e6:	4298      	cmp	r0, r3
  1004e8:	d000      	beq.n	1004ec <AT91F_UDP_IsConfigured+0x118>
  1004ea:	e0fe      	b.n	1006ea <AT91F_UDP_IsConfigured+0x316>
  1004ec:	e0a4      	b.n	100638 <AT91F_UDP_IsConfigured+0x264>
  1004ee:	4b89      	ldr	r3, [pc, #548]	(100714 <.text+0x714>)
  1004f0:	4298      	cmp	r0, r3
  1004f2:	d100      	bne.n	1004f6 <AT91F_UDP_IsConfigured+0x122>
  1004f4:	e0de      	b.n	1006b4 <AT91F_UDP_IsConfigured+0x2e0>
  1004f6:	4298      	cmp	r0, r3
  1004f8:	dc05      	bgt.n	100506 <AT91F_UDP_IsConfigured+0x132>
  1004fa:	2390      	movs	r3, #144
  1004fc:	011b      	lsls	r3, r3, #4
  1004fe:	4298      	cmp	r0, r3
  100500:	d000      	beq.n	100504 <AT91F_UDP_IsConfigured+0x130>
  100502:	e0f2      	b.n	1006ea <AT91F_UDP_IsConfigured+0x316>
  100504:	e036      	b.n	100574 <AT91F_UDP_IsConfigured+0x1a0>
  100506:	4b84      	ldr	r3, [pc, #528]	(100718 <.text+0x718>)
  100508:	4298      	cmp	r0, r3
  10050a:	d100      	bne.n	10050e <AT91F_UDP_IsConfigured+0x13a>
  10050c:	e0dd      	b.n	1006ca <AT91F_UDP_IsConfigured+0x2f6>
  10050e:	3380      	adds	r3, #128
  100510:	4298      	cmp	r0, r3
  100512:	d000      	beq.n	100516 <AT91F_UDP_IsConfigured+0x142>
  100514:	e0e9      	b.n	1006ea <AT91F_UDP_IsConfigured+0x316>
  100516:	e0e2      	b.n	1006de <AT91F_UDP_IsConfigured+0x30a>
	case STD_GET_DESCRIPTOR:
		if (wValue == 0x100)       // Return Device Descriptor
  100518:	2380      	movs	r3, #128
  10051a:	005b      	lsls	r3, r3, #1
  10051c:	4598      	cmp	r8, r3
  10051e:	d109      	bne.n	100534 <AT91F_UDP_IsConfigured+0x160>
			AT91F_USB_SendData(pUDP, devDescriptor, MIN(sizeof(devDescriptor), wLength));
  100520:	2f12      	cmp	r7, #18
  100522:	d901      	bls.n	100528 <AT91F_UDP_IsConfigured+0x154>
  100524:	2212      	movs	r2, #18
  100526:	e000      	b.n	10052a <AT91F_UDP_IsConfigured+0x156>
  100528:	1c3a      	adds	r2, r7, #0
  10052a:	497c      	ldr	r1, [pc, #496]	(10071c <.text+0x71c>)
  10052c:	1c20      	adds	r0, r4, #0
  10052e:	f7ff fef3 	bl	100318 <AT91F_USB_SendData>
  100532:	e0e4      	b.n	1006fe <AT91F_UDP_IsConfigured+0x32a>
		else if (wValue == 0x200)  // Return Configuration Descriptor
  100534:	2380      	movs	r3, #128
  100536:	009b      	lsls	r3, r3, #2
  100538:	4598      	cmp	r8, r3
  10053a:	d109      	bne.n	100550 <AT91F_UDP_IsConfigured+0x17c>
			AT91F_USB_SendData(pUDP, cfgDescriptor, MIN(sizeof(cfgDescriptor), wLength));
  10053c:	2f43      	cmp	r7, #67
  10053e:	d901      	bls.n	100544 <AT91F_UDP_IsConfigured+0x170>
  100540:	2243      	movs	r2, #67
  100542:	e000      	b.n	100546 <AT91F_UDP_IsConfigured+0x172>
  100544:	1c3a      	adds	r2, r7, #0
  100546:	4976      	ldr	r1, [pc, #472]	(100720 <.text+0x720>)
  100548:	1c20      	adds	r0, r4, #0
  10054a:	f7ff fee5 	bl	100318 <AT91F_USB_SendData>
  10054e:	e0d6      	b.n	1006fe <AT91F_UDP_IsConfigured+0x32a>
		else
			AT91F_USB_SendStall(pUDP);
  100550:	1c20      	adds	r0, r4, #0
  100552:	f7ff ff2f 	bl	1003b4 <AT91F_USB_SendStall>
  100556:	e0d2      	b.n	1006fe <AT91F_UDP_IsConfigured+0x32a>
		break;
	case STD_SET_ADDRESS:
		AT91F_USB_SendZlp(pUDP);

⌨️ 快捷键说明

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