📄 main.lss
字号:
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 + -