📄 cdc_enumerate.lst
字号:
\ 00000054 011C MOV R1,R0
\ 00000056 401E SUB R0,R0,#+1
\ 00000058 0029 CMP R1,#+0
\ 0000005A F8D1 BNE ??AT91F_UDP_Write_11
\ ??AT91F_UDP_Write_12:
\ 0000005C A06B LDR R0,[R4, #+56]
\ 0000005E C007 LSL R0,R0,#+31
\ 00000060 E0D4 BMI ??AT91F_UDP_Write_5
\ 00000062 0098 LDR R0,[SP, #+0]
\ 00000064 ........ BL AT91F_UDP_IsConfigured
\ 00000068 0028 CMP R0,#+0
\ 0000006A F7D1 BNE ??AT91F_UDP_Write_12
\ ??AT91F_UDP_Write_13:
\ 0000006C 301C MOV R0,R6
\ 0000006E F8BC POP {R3-R7}
\ 00000070 02BC POP {R1}
\ 00000072 0847 BX R1 ;; return
468 }
469 // Wait for the end of transfer
470 while ( !(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP) )
471 if ( !AT91F_UDP_IsConfigured(pCdc) ) return length;
\ ??AT91F_UDP_Write_14:
\ 00000074 0098 LDR R0,[SP, #+0]
\ 00000076 ........ BL AT91F_UDP_IsConfigured
\ 0000007A 0028 CMP R0,#+0
\ 0000007C F6D0 BEQ ??AT91F_UDP_Write_13
\ ??AT91F_UDP_Write_7:
\ 0000007E A06B LDR R0,[R4, #+56]
\ 00000080 C007 LSL R0,R0,#+31
\ 00000082 F7D5 BPL ??AT91F_UDP_Write_14
472 pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
\ 00000084 A06B LDR R0,[R4, #+56]
\ 00000086 0740 AND R7,R0
\ 00000088 A763 STR R7,[R4, #+56]
473 while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
\ ??AT91F_UDP_Write_15:
\ 0000008A A06B LDR R0,[R4, #+56]
\ 0000008C C007 LSL R0,R0,#+31
\ 0000008E FCD4 BMI ??AT91F_UDP_Write_15
\ 00000090 ECE7 B ??AT91F_UDP_Write_13
474
475 return length;
476 }
477
478 //*----------------------------------------------------------------------------
479 //* \fn AT91F_USB_SendData
480 //* \brief Send Data through the control endpoint
481 //*----------------------------------------------------------------------------
\ In segment DATA_Z, align 4, align-sorted
482 unsigned int csrTab[100];
\ csrTab:
\ 00000000 DS8 400
\ In segment DATA_Z, align 1, align-sorted
483 unsigned char csrIdx = 0;
\ csrIdx:
\ 00000000 DS8 1
484
\ In segment CODE, align 4, keep-with-next
485 static void AT91F_USB_SendData(AT91PS_UDP pUdp, const char *pData, uint length)
486 {
\ AT91F_USB_SendData:
\ 00000000 31B5 PUSH {R0,R4,R5,LR}
487 uint cpt = 0;
488 AT91_REG csr;
489
490 do {
491 cpt = MIN(length, 8);
\ ??AT91F_USB_SendData_0:
\ 00000002 082A CMP R2,#+8
\ 00000004 01D2 BCS ??AT91F_USB_SendData_1
\ 00000006 131C MOV R3,R2
\ 00000008 00E0 B ??AT91F_USB_SendData_2
\ ??AT91F_USB_SendData_1:
\ 0000000A 0823 MOV R3,#+8
492 length -= cpt;
\ ??AT91F_USB_SendData_2:
\ 0000000C D21A SUB R2,R2,R3
\ 0000000E 02E0 B ??AT91F_USB_SendData_3
493
494 while (cpt--)
495 pUdp->UDP_FDR[0] = *pData++;
\ ??AT91F_USB_SendData_4:
\ 00000010 0C78 LDRB R4,[R1, #+0]
\ 00000012 0465 STR R4,[R0, #+80]
\ 00000014 491C ADD R1,R1,#+1
\ ??AT91F_USB_SendData_3:
\ 00000016 1C1C MOV R4,R3
\ 00000018 5B1E SUB R3,R3,#+1
\ 0000001A 002C CMP R4,#+0
\ 0000001C F8D1 BNE ??AT91F_USB_SendData_4
496
497 if (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
\ 0000001E 0123 MOV R3,#+1
\ 00000020 DB43 MVN R3,R3 ;; #-2
\ 00000022 046B LDR R4,[R0, #+48]
\ 00000024 E407 LSL R4,R4,#+31
\ 00000026 05D5 BPL ??AT91F_USB_SendData_5
498 pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
\ 00000028 046B LDR R4,[R0, #+48]
\ 0000002A 1C40 AND R4,R3
\ 0000002C 0463 STR R4,[R0, #+48]
499 while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
\ ??AT91F_USB_SendData_6:
\ 0000002E 046B LDR R4,[R0, #+48]
\ 00000030 E407 LSL R4,R4,#+31
\ 00000032 FCD4 BMI ??AT91F_USB_SendData_6
500 }
501
502 pUdp->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
\ ??AT91F_USB_SendData_5:
\ 00000034 046B LDR R4,[R0, #+48]
\ 00000036 1025 MOV R5,#+16
\ 00000038 2543 ORR R5,R4
\ 0000003A 0563 STR R5,[R0, #+48]
503 do {
504 csr = pUdp->UDP_CSR[0];
\ ??AT91F_USB_SendData_7:
\ 0000003C 046B LDR R4,[R0, #+48]
\ 0000003E 0094 STR R4,[SP, #+0]
505
506 // Data IN stage has been stopped by a status OUT
507 if (csr & AT91C_UDP_RX_DATA_BK0) {
\ 00000040 009C LDR R4,[SP, #+0]
\ 00000042 A407 LSL R4,R4,#+30
\ 00000044 04D5 BPL ??AT91F_USB_SendData_8
508 pUdp->UDP_CSR[0] &= ~(AT91C_UDP_RX_DATA_BK0);
\ 00000046 016B LDR R1,[R0, #+48]
\ 00000048 0222 MOV R2,#+2
\ 0000004A 9143 BIC R1,R2
\ 0000004C 0163 STR R1,[R0, #+48]
509 return;
\ 0000004E 0DE0 B ??AT91F_USB_SendData_9
510 }
511 } while ( !(csr & AT91C_UDP_TXCOMP) );
\ ??AT91F_USB_SendData_8:
\ 00000050 009C LDR R4,[SP, #+0]
\ 00000052 E407 LSL R4,R4,#+31
\ 00000054 F2D5 BPL ??AT91F_USB_SendData_7
512
513 } while (length);
\ 00000056 002A CMP R2,#+0
\ 00000058 D3D1 BNE ??AT91F_USB_SendData_0
514
515 if (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
\ 0000005A 016B LDR R1,[R0, #+48]
\ 0000005C C907 LSL R1,R1,#+31
\ 0000005E 05D5 BPL ??AT91F_USB_SendData_9
516 pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
\ 00000060 016B LDR R1,[R0, #+48]
\ 00000062 0B40 AND R3,R1
\ 00000064 0363 STR R3,[R0, #+48]
517 while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
\ ??AT91F_USB_SendData_10:
\ 00000066 016B LDR R1,[R0, #+48]
\ 00000068 C907 LSL R1,R1,#+31
\ 0000006A FCD4 BMI ??AT91F_USB_SendData_10
\ ??AT91F_USB_SendData_9:
\ 0000006C 38BC POP {R3-R5}
\ 0000006E 01BC POP {R0}
\ 00000070 0047 BX R0 ;; return
518 }
519 }
520
521 //*----------------------------------------------------------------------------
522 //* \fn AT91F_USB_SendZlp
523 //* \brief Send zero length packet through the control endpoint
524 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
525 void AT91F_USB_SendZlp(AT91PS_UDP pUdp)
526 {
527 pUdp->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
\ AT91F_USB_SendZlp:
\ 00000000 016B LDR R1,[R0, #+48]
\ 00000002 1022 MOV R2,#+16
\ 00000004 0A43 ORR R2,R1
\ 00000006 0263 STR R2,[R0, #+48]
528 while ( !(pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) );
\ ??AT91F_USB_SendZlp_0:
\ 00000008 016B LDR R1,[R0, #+48]
\ 0000000A C907 LSL R1,R1,#+31
\ 0000000C FCD5 BPL ??AT91F_USB_SendZlp_0
529 pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
\ 0000000E 016B LDR R1,[R0, #+48]
\ 00000010 0122 MOV R2,#+1
\ 00000012 9143 BIC R1,R2
\ 00000014 0163 STR R1,[R0, #+48]
530 while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
\ ??AT91F_USB_SendZlp_1:
\ 00000016 016B LDR R1,[R0, #+48]
\ 00000018 C907 LSL R1,R1,#+31
\ 0000001A FCD4 BMI ??AT91F_USB_SendZlp_1
531 }
\ 0000001C 7047 BX LR ;; return
532
533 //*----------------------------------------------------------------------------
534 //* \fn AT91F_USB_SendStall
535 //* \brief Stall the control endpoint
536 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
537 void AT91F_USB_SendStall(AT91PS_UDP pUdp)
538 {
539 pUdp->UDP_CSR[0] |= AT91C_UDP_FORCESTALL;
\ AT91F_USB_SendStall:
\ 00000000 016B LDR R1,[R0, #+48]
\ 00000002 2022 MOV R2,#+32
\ 00000004 0A43 ORR R2,R1
\ 00000006 0263 STR R2,[R0, #+48]
540 while ( !(pUdp->UDP_CSR[0] & AT91C_UDP_ISOERROR) );
\ ??AT91F_USB_SendStall_0:
\ 00000008 016B LDR R1,[R0, #+48]
\ 0000000A 0907 LSL R1,R1,#+28
\ 0000000C FCD5 BPL ??AT91F_USB_SendStall_0
541 pUdp->UDP_CSR[0] &= ~(AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR);
\ 0000000E 016B LDR R1,[R0, #+48]
\ 00000010 2822 MOV R2,#+40
\ 00000012 9143 BIC R1,R2
\ 00000014 0163 STR R1,[R0, #+48]
542 while (pUdp->UDP_CSR[0] & (AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR));
\ ??AT91F_USB_SendStall_1:
\ 00000016 016B LDR R1,[R0, #+48]
\ 00000018 1142 TST R1,R2
\ 0000001A FCD1 BNE ??AT91F_USB_SendStall_1
543 }
\ 0000001C 7047 BX LR ;; return
544
545 //*----------------------------------------------------------------------------
546 //* \fn AT91F_CDC_Enumerate
547 //* \brief This function is a callback invoked when a SETUP packet is received
548 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
549 static void AT91F_CDC_Enumerate(AT91PS_CDC pCdc)
550 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -