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

📄 cdc_enumerate.lst

📁 关于usb的一段程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   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 + -