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

📄 cdc_enumerate.lst

📁 关于usb的一段程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \                     AT91F_CDC_Enumerate:
   \   00000000   F3B5               PUSH        {R0,R1,R4-R7,LR}
   \   00000002   011C               MOV         R1,R0
    551          	AT91PS_UDP pUDP = pCdc->pUdp;
   \   00000004   0468               LDR         R4,[R0, #+0]
    552          	uchar bmRequestType, bRequest;
    553          	ushort wValue, wIndex, wLength, wStatus;
    554          
    555          
    556          	if ( !(pUDP->UDP_CSR[0] & AT91C_UDP_RXSETUP) )
   \   00000006   206B               LDR         R0,[R4, #+48]
   \   00000008   4007               LSL         R0,R0,#+29
   \   0000000A   67D5               BPL         ??AT91F_CDC_Enumerate_0
    557          		return;
    558          
    559          	bmRequestType = pUDP->UDP_FDR[0];
   \   0000000C   206D               LDR         R0,[R4, #+80]
   \   0000000E   0006               LSL         R0,R0,#+24
   \   00000010   000E               LSR         R0,R0,#+24
   \   00000012   0190               STR         R0,[SP, #+4]
    560          	bRequest      = pUDP->UDP_FDR[0];
   \   00000014   236D               LDR         R3,[R4, #+80]
   \   00000016   1B06               LSL         R3,R3,#+24
   \   00000018   1B0E               LSR         R3,R3,#+24
    561          	wValue        = (pUDP->UDP_FDR[0] & 0xFF);
   \   0000001A   FF26               MOV         R6,#+255
   \   0000001C   206D               LDR         R0,[R4, #+80]
   \   0000001E   3040               AND         R0,R6
    562          	wValue       |= (pUDP->UDP_FDR[0] << 8);
   \   00000020   226D               LDR         R2,[R4, #+80]
   \   00000022   1502               LSL         R5,R2,#+8
   \   00000024   0543               ORR         R5,R0
   \   00000026   2D04               LSL         R5,R5,#+16
   \   00000028   2D0C               LSR         R5,R5,#+16
    563          	wIndex        = (pUDP->UDP_FDR[0] & 0xFF);
   \   0000002A   226D               LDR         R2,[R4, #+80]
   \   0000002C   3240               AND         R2,R6
    564          	wIndex       |= (pUDP->UDP_FDR[0] << 8);
   \   0000002E   206D               LDR         R0,[R4, #+80]
   \   00000030   0002               LSL         R0,R0,#+8
   \   00000032   1043               ORR         R0,R2
    565          	wLength       = (pUDP->UDP_FDR[0] & 0xFF);
   \   00000034   226D               LDR         R2,[R4, #+80]
   \   00000036   1640               AND         R6,R2
    566          	wLength      |= (pUDP->UDP_FDR[0] << 8);
   \   00000038   226D               LDR         R2,[R4, #+80]
   \   0000003A   1202               LSL         R2,R2,#+8
   \   0000003C   3243               ORR         R2,R6
   \   0000003E   1204               LSL         R2,R2,#+16
   \   00000040   120C               LSR         R2,R2,#+16
    567          
    568          	if (bmRequestType & 0x80) {
   \   00000042   019E               LDR         R6,[SP, #+4]
   \   00000044   3606               LSL         R6,R6,#+24
   \   00000046   06D5               BPL         ??AT91F_CDC_Enumerate_1
    569          		pUDP->UDP_CSR[0] |= AT91C_UDP_DIR;
   \   00000048   266B               LDR         R6,[R4, #+48]
   \   0000004A   8027               MOV         R7,#+128
   \   0000004C   3743               ORR         R7,R6
   \   0000004E   2763               STR         R7,[R4, #+48]
    570          		while ( !(pUDP->UDP_CSR[0] & AT91C_UDP_DIR) );
   \                     ??AT91F_CDC_Enumerate_2:
   \   00000050   266B               LDR         R6,[R4, #+48]
   \   00000052   3606               LSL         R6,R6,#+24
   \   00000054   FCD5               BPL         ??AT91F_CDC_Enumerate_2
    571          	}
    572          	pUDP->UDP_CSR[0] &= ~AT91C_UDP_RXSETUP;
   \                     ??AT91F_CDC_Enumerate_1:
   \   00000056   266B               LDR         R6,[R4, #+48]
   \   00000058   0427               MOV         R7,#+4
   \   0000005A   BE43               BIC         R6,R7
   \   0000005C   2663               STR         R6,[R4, #+48]
    573          	while ( (pUDP->UDP_CSR[0]  & AT91C_UDP_RXSETUP)  );
   \                     ??AT91F_CDC_Enumerate_3:
   \   0000005E   266B               LDR         R6,[R4, #+48]
   \   00000060   7607               LSL         R6,R6,#+29
   \   00000062   FCD4               BMI         ??AT91F_CDC_Enumerate_3
    574          
    575          	// Handle supported standard device request Cf Table 9-3 in USB specification Rev 1.1
    576          	switch ((bRequest << 8) | bmRequestType) {
   \   00000064   0007               LSL         R0,R0,#+28
   \   00000066   000F               LSR         R0,R0,#+28
   \   00000068   0026               MOV         R6,#+0
   \   0000006A   1F02               LSL         R7,R3,#+8
   \   0000006C   019B               LDR         R3,[SP, #+4]
   \   0000006E   1B06               LSL         R3,R3,#+24
   \   00000070   1B0E               LSR         R3,R3,#+24
   \   00000072   3B43               ORR         R3,R7
   \   00000074   803B               SUB         R3,#+128
   \   00000076   012B               CMP         R3,#+1
   \   00000078   6CD9               BLS         ??AT91F_CDC_Enumerate_4
   \   0000007A   9B1E               SUB         R3,R3,#+2
   \   0000007C   6FD0               BEQ         ??AT91F_CDC_Enumerate_5
   \   0000007E   7F3B               SUB         R3,#+127
   \   00000080   04D0               BEQ         ??AT91F_CDC_Enumerate_6
   \   00000082   5B1E               SUB         R3,R3,#+1
   \   00000084   ....               BNE         .+5
   \   00000086   9DE0               B           ??AT91F_CDC_Enumerate_7
   \   00000088   624F               LDR         R7,??AT91F_CDC_Enumerate_8  ;; 0x1ff
   \   0000008A   DB1B               SUB         R3,R3,R7
   \                     ??AT91F_CDC_Enumerate_6:
   \   0000008C   ....               BNE         .+5
   \   0000008E   95E0               B           ??AT91F_CDC_Enumerate_9
   \   00000090   5B1E               SUB         R3,R3,#+1
   \   00000092   ....               BNE         .+5
   \   00000094   89E0               B           ??AT91F_CDC_Enumerate_10
   \   00000096   7F1E               SUB         R7,R7,#+1
   \   00000098   DB1B               SUB         R3,R3,R7
   \   0000009A   2ED0               BEQ         ??AT91F_CDC_Enumerate_11
   \   0000009C   7E3F               SUB         R7,#+126
   \   0000009E   DB1B               SUB         R3,R3,R7
   \   000000A0   11D0               BEQ         ??AT91F_CDC_Enumerate_12
   \   000000A2   8037               ADD         R7,#+128
   \   000000A4   DB1B               SUB         R3,R3,R7
   \   000000A6   52D0               BEQ         ??AT91F_CDC_Enumerate_13
   \   000000A8   803B               SUB         R3,#+128
   \   000000AA   32D0               BEQ         ??AT91F_CDC_Enumerate_14
   \   000000AC   5A4F               LDR         R7,??AT91F_CDC_Enumerate_8+0x4  ;; 0x1721
   \   000000AE   DB1B               SUB         R3,R3,R7
   \   000000B0   ....               BNE         .+5
   \   000000B2   9FE0               B           ??AT91F_CDC_Enumerate_15
   \   000000B4   C027               MOV         R7,#+192
   \   000000B6   7F00               LSL         R7,R7,#+1          ;; #+384
   \   000000B8   DB1B               SUB         R3,R3,R7
   \   000000BA   ....               BNE         .+5
   \   000000BC   A2E0               B           ??AT91F_CDC_Enumerate_16
   \   000000BE   803B               SUB         R3,#+128
   \   000000C0   ....               BNE         .+5
   \   000000C2   A4E0               B           ??AT91F_CDC_Enumerate_17
   \   000000C4   15E0               B           ??AT91F_CDC_Enumerate_18
    577          	case STD_GET_DESCRIPTOR:
    578          		if (wValue == 0x100)       // Return Device Descriptor
   \                     ??AT91F_CDC_Enumerate_12:
   \   000000C6   5549               LDR         R1,??AT91F_CDC_Enumerate_8+0x8  ;; devDescriptor
   \   000000C8   8023               MOV         R3,#+128
   \   000000CA   5B00               LSL         R3,R3,#+1          ;; #+256
   \   000000CC   9D42               CMP         R5,R3
   \   000000CE   08D1               BNE         ??AT91F_CDC_Enumerate_19
    579          			AT91F_USB_SendData(pUDP, devDescriptor, MIN(sizeof(devDescriptor), wLength));
   \   000000D0   132A               CMP         R2,#+19
   \   000000D2   00D3               BCC         ??AT91F_CDC_Enumerate_20
   \   000000D4   1222               MOV         R2,#+18
   \                     ??AT91F_CDC_Enumerate_20:
   \   000000D6   201C               MOV         R0,R4
   \   000000D8   ........           BL          AT91F_USB_SendData
   \                     ??AT91F_CDC_Enumerate_0:
   \   000000DC   FCBC               POP         {R2-R7}
   \   000000DE   01BC               POP         {R0}
   \   000000E0   0047               BX          R0                 ;; return
    580          		else if (wValue == 0x200)  // Return Configuration Descriptor
   \                     ??AT91F_CDC_Enumerate_19:
   \   000000E2   5800               LSL         R0,R3,#+1
   \   000000E4   8542               CMP         R5,R0
   \   000000E6   04D1               BNE         ??AT91F_CDC_Enumerate_18
    581          			AT91F_USB_SendData(pUDP, cfgDescriptor, MIN(sizeof(cfgDescriptor), wLength));
   \   000000E8   442A               CMP         R2,#+68
   \   000000EA   00D3               BCC         ??AT91F_CDC_Enumerate_21
   \   000000EC   4322               MOV         R2,#+67
   \                     ??AT91F_CDC_Enumerate_21:
   \   000000EE   1431               ADD         R1,#+20
   \   000000F0   F1E7               B           ??AT91F_CDC_Enumerate_20
    582          		else
    583          			AT91F_USB_SendStall(pUDP);
   \                     ??AT91F_CDC_Enumerate_18:
   \   000000F2   201C               MOV         R0,R4
   \   000000F4   ........           BL          AT91F_USB_SendStall
   \   000000F8   F0E7               B           ??AT91F_CDC_Enumerate_0
    584          		break;
    585          	case STD_SET_ADDRESS:
    586          		AT91F_USB_SendZlp(pUDP);
   \                     ??AT91F_CDC_Enumerate_11:
   \   000000FA   201C               MOV         R0,R4
   \   000000FC   ........           BL          AT91F_USB_SendZlp
    587          		pUDP->UDP_FADDR = (AT91C_UDP_FEN | wValue);
   \   00000100   8020               MOV         R0,#+128
   \   00000102   4000               LSL         R0,R0,#+1          ;; #+256
   \   00000104   2843               ORR         R0,R5
   \   00000106   A060               STR         R0,[R4, #+8]
    588          		pUDP->UDP_GLBSTATE  = (wValue) ? AT91C_UDP_FADDEN : 0;
   \   00000108   281C               MOV         R0,R5
   \   0000010A   00D0               BEQ         ??AT91F_CDC_Enumerate_22
   \   0000010C   0120               MOV         R0,#+1
   \                     ??AT91F_CDC_Enumerate_22:
   \   0000010E   6060               STR         R0,[R4, #+4]
   \   00000110   E4E7               B           ??AT91F_CDC_Enumerate_0
    589          		break;
    590          	case STD_SET_CONFIGURATION:
    591          		pCdc->currentConfiguration = wValue;
   \                     ??AT91F_CDC_Enumerate_14:
   \   00000112   0D71               STRB        R5,[R1, #+4]
    592          		AT91F_USB_SendZlp(pUDP);
   \   00000114   201C               MOV         R0,R4
   \   00000116   ........           BL          AT91F_USB_SendZlp
    593          		pUDP->UDP_GLBSTATE  = (wValue) ? AT91C_UDP_CONFG : AT91C_UDP_FADDEN;
   \   0000011A   281C               MOV         R0,R5
   \   0000011C   01D0               BEQ         ??AT91F_CDC_Enumerate_23
   \   0000011E   0220               MOV         R0,#+2
   \   00000120   00E0               B           ??AT91F_CDC_Enumerate_24
   \                     ??AT91F_CDC_Enumerate_23:
   \   00000122   0120               MOV         R0,#+1
   \                     ??AT91F_CDC_Enumerate_24:
   \   00000124   6060               STR         R0,[R4, #+4]
    594          		pUDP->UDP_CSR[1] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT) : 0;
   \   00000126   281C               MOV         R0,R5
   \   00000128   02D0               BEQ         ??AT91F_CDC_Enumerate_25
   \   0000012A   8220               MOV         R0,#+130
   \   0000012C   0002               LSL         R0,R0,#+8          ;; #+33280
   \   0000012E   00E0               B           ??AT91F_CDC_Enumerate_26
   \                     ??AT91F_CDC_Enumerate_25:
   \   00000130   0020               MOV         R0,#+0
   \                     ??AT91F_CDC_Enumerate_26:
   \   00000132   6063               STR         R0,[R4, #+52]
    595          		pUDP->UDP_CSR[2] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN)  : 0;
   \   00000134   281C               MOV         R0,R5
   \   00000136   02D0               BEQ         ??AT91F_CDC_Enumerate_27
   \   00000138   8620               MOV         R0,#+134
   \   0000013A   0002               LSL         R0,R0,#+8          ;; #+34304
   \   0000013C   00E0               B           ??AT91F_CDC_Enumerate_28
   \                     ??AT91F_CDC_Enumerate_27:
   \   0000013E   0020               MOV         R0,#+0
   \                     ??AT91F_CDC_Enumerate_28:
   \   00000140   A063               STR         R0,[R4, #+56]
    596          		pUDP->UDP_CSR[3] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_INT_IN)   : 0;
   \   00000142   002D               CMP         R5,#+0
   \   00000144   01D0               BEQ         ??AT91F_CDC_Enumerate_29
   \   00000146   8726               MOV         R6,#+135
   \   00000148   3602               LSL         R6,R6,#+8          ;; #+34560
   \                     ??AT91F_CDC_Enumerate_29:
   \   0000014A   E663               STR         R6,[R4, #+60]
   \   0000014C   C6E7               B           ??AT91F_CDC_Enumerate_0
    597          		break;
    598          	case STD_GET_CONFIGURATION:
    599          		AT91F_USB_SendData(pUDP, (char *) &(pCdc->currentConfiguration), sizeof(pCdc->currentConfiguration));
   \                     ??AT91F_CDC_Enumerate_13:
   \   0000014E   0122               MOV         R2,#+1
   \   00000150   091D               ADD         R1,R1,#+4
   \   00000152   C0E7     

⌨️ 快捷键说明

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