📄 dl_device_usbwin.cod
字号:
00044 0a000017 beq |$L43638|
; 451 : {
; 452 : while (word_count)
00048 e59d3008 ldr r3, [sp, #8]
0004c e3530000 cmp r3, #0
00050 0a000014 beq |$L43638|
00054 |$L43637|
; 453 : {
; 454 : rx_word1 = UDC_DR_0( pUSBDrvInfo );
00054 e5963098 ldr r3, [r6, #0x98]
00058 e5933300 ldr r3, [r3, #0x300]
0005c e58d3000 str r3, [sp]
; 455 : //pRxWord[0] = rx_word1;
; 456 : //pRxWord++;
; 457 :
; 458 : pData[0] = (BYTE) (rx_word1 & 0xFF);
00060 e59d4000 ldr r4, [sp]
; 459 : pData[1] = (BYTE) ((rx_word1>>8) & 0xFF);
00064 e59d2000 ldr r2, [sp]
; 460 : pData[2] = (BYTE) ((rx_word1>>16) & 0xFF);
00068 e59d1000 ldr r1, [sp]
; 461 : pData[3] = (BYTE) ((rx_word1>>24) & 0xFF);
0006c e59d0000 ldr r0, [sp]
; 462 :
; 463 : pData +=4;
; 464 : word_count--;
00070 e59d3008 ldr r3, [sp, #8]
00074 e1a0e422 mov lr, r2, lsr #8
00078 e1a01821 mov r1, r1, lsr #16
0007c e2433001 sub r3, r3, #1
00080 e58d3008 str r3, [sp, #8]
00084 e1a03c20 mov r3, r0, lsr #24
00088 e59d2008 ldr r2, [sp, #8]
0008c e5c54000 strb r4, [r5]
00090 e5c5e001 strb lr, [r5, #1]
00094 e5c51002 strb r1, [r5, #2]
00098 e5c53003 strb r3, [r5, #3]
0009c e3520000 cmp r2, #0
000a0 e2855004 add r5, r5, #4
000a4 1affffea bne |$L43637|
000a8 |$L43638|
; 465 : }
; 466 : }
; 467 :
; 468 : if (byte_count)
000a8 e59d3004 ldr r3, [sp, #4]
000ac e3530000 cmp r3, #0
000b0 0a00001e beq |$L43644|
; 469 : {
; 470 : //temp_byte_count = byte_count;
; 471 : rx_word1 = UDC_DR_0( pUSBDrvInfo );
000b4 e5963098 ldr r3, [r6, #0x98]
000b8 e5933300 ldr r3, [r3, #0x300]
000bc e58d3000 str r3, [sp]
; 472 :
; 473 : //while (temp_byte_count)
; 474 : //{
; 475 : // pData[0] = (BYTE) (rx_word1 & 0xFF);
; 476 : // pData++;
; 477 : // rx_word1 = (rx_word1>>8);
; 478 : // temp_byte_count--;
; 479 : //}
; 480 :
; 481 : if (byte_count == 1)
000c0 e59d3004 ldr r3, [sp, #4]
000c4 e3530001 cmp r3, #1
; 482 : {
; 483 : pData[0] = (BYTE) (rx_word1 & 0xFF);
000c8 059d3000 ldreq r3, [sp]
000cc 05c53000 streqb r3, [r5]
000d0 0a000011 beq |$L43653|
; 484 : }
; 485 : else if (byte_count == 2)
000d4 e59d3004 ldr r3, [sp, #4]
000d8 e3530002 cmp r3, #2
; 486 : {
; 487 : pData[0] = (BYTE) (rx_word1 & 0xFF);
000dc 059d3000 ldreq r3, [sp]
; 488 : pData[1] = (BYTE) ((rx_word1>>8) & 0xFF);
000e0 059d2000 ldreq r2, [sp]
000e4 05c53000 streqb r3, [r5]
000e8 01a03422 moveq r3, r2, lsr #8
000ec 05c53001 streqb r3, [r5, #1]
000f0 0a000009 beq |$L43653|
; 489 : }
; 490 : else if (byte_count == 3)
000f4 e59d3004 ldr r3, [sp, #4]
000f8 e3530003 cmp r3, #3
; 491 : {
; 492 : pData[0] = (BYTE) (rx_word1 & 0xFF);
000fc 059d3000 ldreq r3, [sp]
; 493 : pData[1] = (BYTE) ((rx_word1>>8) & 0xFF);
00100 059d2000 ldreq r2, [sp]
; 494 : pData[2] = (BYTE) ((rx_word1>>16) & 0xFF);
00104 059d1000 ldreq r1, [sp]
00108 05c53000 streqb r3, [r5]
0010c 01a02422 moveq r2, r2, lsr #8
00110 01a03821 moveq r3, r1, lsr #16
00114 05c53002 streqb r3, [r5, #2]
00118 05c52001 streqb r2, [r5, #1]
0011c |$L43653|
; 495 : }
; 496 :
; 497 : pData+= byte_count;
0011c e59d2004 ldr r2, [sp, #4]
; 498 : byte_count -= byte_count;
00120 e59d1004 ldr r1, [sp, #4]
00124 e59d3004 ldr r3, [sp, #4]
00128 e0413003 sub r3, r1, r3
0012c e58d3004 str r3, [sp, #4]
00130 |$L43644|
; 499 : }
; 500 :
; 501 : //SA_USB_Dump_Data( (PBYTE)dataP, bytes_to_read );
; 502 :
; 503 : udcStats.readCount++;
00130 e59f2018 ldr r2, [pc, #0x18]
; 504 :
; 505 : return 0;
00134 e3a00000 mov r0, #0
00138 e5923014 ldr r3, [r2, #0x14]
0013c e2833001 add r3, r3, #1
00140 e5823014 str r3, [r2, #0x14]
; 506 : }
00144 e28dd00c add sp, sp, #0xC
00148 e8bd4070 ldmia sp!, {r4 - r6, lr}
0014c e12fff1e bx lr
00150 |$L44866|
00150 00000000 DCD |udcStats|
00154 |$M44862|
ENDP ; |getCommand|
00000 AREA |.text| { |getCommandEightBytes| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$getCommandEightBytes|, PDATA, SELECTION=5, ASSOC=|.text| { |getCommandEightBytes| } ; comdat associative
|$T44877| DCD |$L44876|
DCD 0x40000400
; Function compile flags: /Ogsy
00000 AREA |.text| { |getCommandEightBytes| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |getCommandEightBytes| PROC
; 519 : {
00000 |$L44876|
00000 |$M44874|
00000 |$L43667|
; 520 : unsigned long * bufP_a = (unsigned long*) dataP;
; 521 : unsigned int nTotalBytes = 8;
; 522 :
; 523 : while (nTotalBytes)
; 524 : {
; 525 : *bufP_a++ = (unsigned long) UDC_DR_0(pUSBDrvInfo);
00000 e5903098 ldr r3, [r0, #0x98]
00004 e5933300 ldr r3, [r3, #0x300]
00008 e4813004 str r3, [r1], #4
0000c eafffffb b |$L43667|
00010 |$M44875|
ENDP ; |getCommandEightBytes|
EXPORT |XmitEP0Data|
EXPORT |??_C@_0CG@FFDMAMJO@XmitEP0Data?3?5Premature?5status?5st@| [ DATA ] ; `string'
EXPORT |??_C@_0BH@HMBKGDNO@XmitEP0Data?3?5a?5stall?$AN?6?$AA@| [ DATA ] ; `string'
00000 AREA |.text| { |XmitEP0Data| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XmitEP0Data|, PDATA, SELECTION=5, ASSOC=|.text| { |XmitEP0Data| } ; comdat associative
|$T44905| DCD |$L44904|
DCD 0x40006701
00000 AREA |.rdata| { |??_C@_0BH@HMBKGDNO@XmitEP0Data?3?5a?5stall?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BH@HMBKGDNO@XmitEP0Data?3?5a?5stall?$AN?6?$AA@| DCB "XmitEP0Data:"
DCB " a stall", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CG@FFDMAMJO@XmitEP0Data?3?5Premature?5status?5st@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CG@FFDMAMJO@XmitEP0Data?3?5Premature?5status?5st@| DCB "XmitEP0Da"
DCB "ta: Premature status stage", 0xd, 0xa, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |XmitEP0Data| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XmitEP0Data| PROC
; 541 : {
00000 |$L44904|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 |$M44902|
00004 e1a04000 mov r4, r0
; 542 : int nXferCount, nIndex;
; 543 : BOOL bSetIPR = FALSE;
; 544 : PBYTE pData;
; 545 : unsigned int lastPacketLen = 0;
; 546 : unsigned int word_count, byte_count;
; 547 : unsigned long tx_word; //*pTxWord,
; 548 : //unsigned char *pTxByte;
; 549 : volatile BYTE *pEP0FIFO = NULL;
; 550 : BYTE ch1, ch2, ch3;
; 551 :
; 552 : pEP0FIFO = (volatile BYTE *) &(UDC_DR_0( pUSBDrvInfo ));
00008 e594e098 ldr lr, [r4, #0x98]
0000c e3a07000 mov r7, #0
; 553 :
; 554 : // Check for premature status stage.
; 555 : if(UDC_CSR0( pUSBDrvInfo) & XLLP_UDC_UDCCSR0_OPR && !(UDC_CSR0(pUSBDrvInfo) & XLLP_UDC_UDCCSR0_SA))
00010 e59e3100 ldr r3, [lr, #0x100]
00014 e3130001 tst r3, #1
00018 0a000012 beq |$L43692|
0001c e59e3100 ldr r3, [lr, #0x100]
00020 e3130080 tst r3, #0x80
00024 1a00000f bne |$L43692|
; 556 : {
; 557 : // Premature status stage. Flush the xmit fifo and return back to
; 558 : // a wait for setup state.
; 559 : EdbgOutputDebugString( "XmitEP0Data: Premature status stage\r\n" );
00028 e59f0168 ldr r0, [pc, #0x168]
0002c eb000000 bl EdbgOutputDebugString
; 560 :
; 561 : // Clear the xmit fifo
; 562 : UDC_CSR0_MWRITE( UDC_CSR0(pUSBDrvInfo), XLLP_UDC_UDCCSR0_FTF );
00030 e5942098 ldr r2, [r4, #0x98]
; 563 :
; 564 : // Clear the OPR bit
; 565 : UDC_CSR0_MWRITE( UDC_CSR0(pUSBDrvInfo), XLLP_UDC_UDCCSR0_OPR );
00034 e5923100 ldr r3, [r2, #0x100]
; 566 :
; 567 : // Go back to waiting for setup.
; 568 : UDC_STATE( pUSBDrvInfo ) = WAIT_FOR_SETUP;
00038 e3c33091 bic r3, r3, #0x91
0003c e3833004 orr r3, r3, #4
00040 e5823100 str r3, [r2, #0x100]
00044 e5942098 ldr r2, [r4, #0x98]
00048 e5923100 ldr r3, [r2, #0x100]
0004c e3c33090 bic r3, r3, #0x90
00050 e3833001 orr r3, r3, #1
00054 |$L44901|
00054 e3a01001 mov r1, #1
00058 e5823100 str r3, [r2, #0x100]
0005c e58410a4 str r1, [r4, #0xA4]
; 665 : }
; 666 : }
00060 e8bd43f0 ldmia sp!, {r4 - r9, lr}
00064 e12fff1e bx lr
00068 |$L43692|
; 569 :
; 570 : return;
; 571 : }
; 572 :
; 573 : // Is there a stall?
; 574 : if( UDC_CSR0( pUSBDrvInfo ) & XLLP_UDC_UDCCSR0_SST )
00068 e59e3100 ldr r3, [lr, #0x100]
0006c e3130010 tst r3, #0x10
00070 0a00000b beq |$L43699|
; 575 : {
; 576 : // Stall has been detected. Clear the condition and go back to wait for setup.
; 577 : EdbgOutputDebugString( "XmitEP0Data: a stall\r\n" );
00074 e59f0118 ldr r0, [pc, #0x118]
00078 eb000000 bl EdbgOutputDebugString
; 578 :
; 579 : UDC_CSR0_MWRITE( UDC_CSR0(pUSBDrvInfo), XLLP_UDC_UDCCSR0_SST );
0007c e5942098 ldr r2, [r4, #0x98]
; 580 : UDC_CSR0_MWRITE( UDC_CSR0(pUSBDrvInfo), XLLP_UDC_UDCCSR0_FTF );
00080 e5923100 ldr r3, [r2, #0x100]
; 581 :
; 582 : UDC_STATE( pUSBDrvInfo ) = WAIT_FOR_SETUP;
00084 e3c33081 bic r3, r3, #0x81
00088 e3833010 orr r3, r3, #0x10
0008c e5823100 str r3, [r2, #0x100]
00090 e5942098 ldr r2, [r4, #0x98]
00094 e5923100 ldr r3, [r2, #0x100]
00098 e3c33091 bic r3, r3, #0x91
0009c e3833004 orr r3, r3, #4
; 583 :
; 584 : return;
000a0 eaffffeb b |$L44901|
000a4 |$L43699|
; 585 : }
; 586 :
; 587 : // The ParseSetup has already setup the structure to determine how much
; 588 : // data to send. Determine if this is the last data packet.
; 589 : if( pUSBDrvInfo->nXmitLength < EP0Len )
000a4 e59430a8 ldr r3, [r4, #0xA8]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -