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

📄 cdc_enumerate.lst

📁 高性能USB转串口(可高达10Mbps)完整的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 269:cdc_enumerate.c **** //* \brief Send through endpoint 2
 270:cdc_enumerate.c **** //*----------------------------------------------------------------------------
 271:cdc_enumerate.c **** static uint AT91F_UDP_Write(AT91PS_CDC pCdc, const char *pData, uint length)
 272:cdc_enumerate.c **** {
 273:cdc_enumerate.c **** 	AT91PS_UDP pUdp = pCdc->pUdp;
 274:cdc_enumerate.c **** 	uint cpt = 0;
 275:cdc_enumerate.c **** 
 276:cdc_enumerate.c **** 	// Send the first packet
 277:cdc_enumerate.c **** 	cpt = MIN(length, AT91C_EP_IN_SIZE);
 278:cdc_enumerate.c **** 	length -= cpt;
 279:cdc_enumerate.c **** 	while (cpt--) pUdp->UDP_FDR[AT91C_EP_IN] = *pData++;
 280:cdc_enumerate.c **** 	pUdp->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
 281:cdc_enumerate.c **** 
 282:cdc_enumerate.c **** 	while (length) {
 283:cdc_enumerate.c **** 		// Fill the second bank
 284:cdc_enumerate.c **** 		cpt = MIN(length, AT91C_EP_IN_SIZE);
 285:cdc_enumerate.c **** 		length -= cpt;
 286:cdc_enumerate.c **** 		while (cpt--) pUdp->UDP_FDR[AT91C_EP_IN] = *pData++;
 287:cdc_enumerate.c **** 		// Wait for the the first bank to be sent
 288:cdc_enumerate.c **** 		while ( !(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP) )
 289:cdc_enumerate.c **** 			if ( !AT91F_UDP_IsConfigured(pCdc) ) return length;
 290:cdc_enumerate.c **** 		pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
 291:cdc_enumerate.c **** 		while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
 292:cdc_enumerate.c **** 		pUdp->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
 293:cdc_enumerate.c **** 	}
 294:cdc_enumerate.c **** 	// Wait for the end of transfer
 295:cdc_enumerate.c **** 	while ( !(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP) )
 296:cdc_enumerate.c **** 		if ( !AT91F_UDP_IsConfigured(pCdc) ) return length;
 297:cdc_enumerate.c **** 	pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
 298:cdc_enumerate.c **** 	while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
 299:cdc_enumerate.c **** 
 300:cdc_enumerate.c **** 	return length;
 301:cdc_enumerate.c **** }
 302:cdc_enumerate.c **** 
 303:cdc_enumerate.c **** //*----------------------------------------------------------------------------
 304:cdc_enumerate.c **** //* \fn    AT91F_USB_SendData
 305:cdc_enumerate.c **** //* \brief Send Data through the control endpoint
 306:cdc_enumerate.c **** //*----------------------------------------------------------------------------
 307:cdc_enumerate.c **** unsigned int csrTab[100];
 308:cdc_enumerate.c **** unsigned char csrIdx = 0;
 309:cdc_enumerate.c **** 
 310:cdc_enumerate.c **** static void AT91F_USB_SendData(AT91PS_UDP pUdp, const char *pData, uint length)
 311:cdc_enumerate.c **** {
  61              	 lr}
  62 0000 70B5     	.LCFI0:
  63              	.LVL2:
  64              		sub	sp, sp, #4
  65 0002 81B0     	.LCFI1:
  66              		mov	r6, r1
  67 0004 0E1C     		mov	r5, r2
  68 0006 151C     	.LVL3:
  69              	.L6:
  70              		.loc 1 316 0
 312:cdc_enumerate.c **** 	uint cpt = 0;
 313:cdc_enumerate.c **** 	AT91_REG csr;
 314:cdc_enumerate.c **** 
 315:cdc_enumerate.c **** 	do {
 316:cdc_enumerate.c **** 		cpt = MIN(length, 8);
  71              	5
  72 0008 2C1C     		cmp	r5, #8
  73 000a 082D     		bls	.L7
  74 000c 00D9     		mov	r4, #8
  75 000e 0824     	.L7:
  76              		.loc 1 319 0
 317:cdc_enumerate.c **** 		length -= cpt;
 318:cdc_enumerate.c **** 
 319:cdc_enumerate.c **** 		while (cpt--)
  77              	1, r4, #1
  78 0010 611E     		bcc	.L8
  79 0012 06D3     	.LVL4:
  80              		mov	r2, r6
  81 0014 321C     	.LVL5:
  82              	.L10:
  83              		.loc 1 320 0
 320:cdc_enumerate.c **** 			pUdp->UDP_FDR[0] = *pData++;
  84              	3, [r2]
  85 0016 1378     		str	r3, [r0, #80]
  86 0018 0365     		add	r2, r2, #1
  87 001a 0132     		.loc 1 319 0
  88              		sub	r1, r1, #1
  89 001c 0139     		bcs	.L10
  90 001e FAD2     		add	r6, r6, r4
  91 0020 3619     	.LVL6:
  92              	.L8:
  93              		.loc 1 322 0
 321:cdc_enumerate.c **** 
 322:cdc_enumerate.c **** 		if (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
  94              	r0, #48]
  95 0022 036B     		mov	r2, #1
  96 0024 0122     	.LVL7:
  97              		tst	r3, r2
  98 0026 1342     		beq	.L12
  99 0028 05D0     		.loc 1 323 0
 323:cdc_enumerate.c **** 			pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
 100              	3, [r0, #48]
 101 002a 036B     		bic	r3, r3, r2
 102 002c 9343     		str	r3, [r0, #48]
 103 002e 0363     	.L14:
 104              		.loc 1 324 0
 324:cdc_enumerate.c **** 			while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
 105              	r3, [r0, #48]
 106 0030 036B     		tst	r3, r2
 107 0032 1342     		bne	.L14
 108 0034 FCD1     	.L12:
 109              		.loc 1 327 0
 325:cdc_enumerate.c **** 		}
 326:cdc_enumerate.c **** 
 327:cdc_enumerate.c **** 		pUdp->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
 110              	r3, [r0, #48]
 111 0036 036B     		mov	r2, #16
 112 0038 1022     		orr	r3, r3, r2
 113 003a 1343     		str	r3, [r0, #48]
 114 003c 0363     		mov	r1, #2
 115 003e 0221     	.LVL8:
 116              	.L15:
 117              		.loc 1 329 0
 328:cdc_enumerate.c **** 		do {
 329:cdc_enumerate.c **** 			csr = pUdp->UDP_CSR[0];
 118              	 [r0, #48]
 119 0040 036B     		str	r3, [sp]
 120 0042 0093     		.loc 1 332 0
 330:cdc_enumerate.c **** 
 331:cdc_enumerate.c **** 			// Data IN stage has been stopped by a status OUT
 332:cdc_enumerate.c **** 			if (csr & AT91C_UDP_RX_DATA_BK0) {
 121              	r	r3, [sp]
 122 0044 009B     		tst	r3, r1
 123 0046 0B42     		beq	.L16
 124 0048 03D0     		.loc 1 333 0
 333:cdc_enumerate.c **** 				pUdp->UDP_CSR[0] &= ~(AT91C_UDP_RX_DATA_BK0);
 125              		r3, [r0, #48]
 126 004a 036B     		bic	r3, r3, r1
 127 004c 8B43     		str	r3, [r0, #48]
 128 004e 0363     		b	.L23
 129 0050 0FE0     	.L16:
 130              		.loc 1 336 0
 334:cdc_enumerate.c **** 				return;
 335:cdc_enumerate.c **** 			}
 336:cdc_enumerate.c **** 		} while ( !(csr & AT91C_UDP_TXCOMP) );
 131              	3, [sp]
 132 0052 009B     		mov	r2, #1
 133 0054 0122     		tst	r3, r2
 134 0056 1342     		beq	.L15
 135 0058 F2D0     		.loc 1 317 0
 136              		sub	r5, r5, r4
 137 005a 2D1B     		.loc 1 338 0
 337:cdc_enumerate.c **** 
 338:cdc_enumerate.c **** 	} while (length);
 138              	, #0
 139 005c 002D     		bne	.L6
 140 005e D3D1     		.loc 1 340 0
 339:cdc_enumerate.c **** 
 340:cdc_enumerate.c **** 	if (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
 141              	r	r3, [r0, #48]
 142 0060 036B     		tst	r3, r2
 143 0062 1342     		beq	.L23
 144 0064 05D0     		.loc 1 341 0
 341:cdc_enumerate.c **** 		pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
 145              		r3, [r0, #48]
 146 0066 036B     		bic	r3, r3, r2
 147 0068 9343     		str	r3, [r0, #48]
 148 006a 0363     	.L22:
 149              		.loc 1 342 0
 342:cdc_enumerate.c **** 		while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
 150              	r3, [r0, #48]
 151 006c 036B     		tst	r3, r2
 152 006e 1342     		bne	.L22
 153 0070 FCD1     	.L23:
 154              		.loc 1 344 0
 343:cdc_enumerate.c **** 	}
 344:cdc_enumerate.c **** }
 155              	sp, sp, #4
 156 0072 01B0     		@ sp needed for prologue
 157              	.LVL9:
 158              	.LVL10:
 159              	.LVL11:
 160              		pop	{r4, r5, r6}
 161 0074 70BC     		pop	{r0}
 162 0076 01BC     		bx	r0
 163 0078 0047     	.LFE294:
 165              		.section	.text.AT91F_USB_SendZlp,"ax",%progbits
 166 007a C046     		.align	2
 167              		.global	AT91F_USB_SendZlp
 168              		.code 16
 169              		.thumb_func
 171              	AT91F_USB_SendZlp:
 172              	.LFB295:
 173              		.loc 1 351 0
 345:cdc_enumerate.c **** 
 346:cdc_enumerate.c **** //*----------------------------------------------------------------------------
 347:cdc_enumerate.c **** //* \fn    AT91F_USB_SendZlp
 348:cdc_enumerate.c **** //* \brief Send zero length packet through the control endpoint
 349:cdc_enumerate.c **** //*----------------------------------------------------------------------------
 350:cdc_enumerate.c **** void AT91F_USB_SendZlp(AT91PS_UDP pUdp)
 351:cdc_enumerate.c **** {
 174              	d for prologue
 175              		.loc 1 352 0
 176              		ldr	r3, [r0, #48]
 352:cdc_enumerate.c **** 	pUdp->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
 177              	v	r2, #16
 178 0000 036B     		orr	r3, r3, r2
 179 0002 1022     		str	r3, [r0, #48]
 180 0004 1343     		mov	r2, #1
 181 0006 0363     	.L33:
 182 0008 0122     		.loc 1 353 0
 183              		ldr	r3, [r0, #48]
 353:cdc_enumerate.c **** 	while ( !(pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP) );
 184              	, r2
 185 000a 036B     		beq	.L33
 186 000c 1342     		.loc 1 354 0
 187 000e FCD0     		ldr	r3, [r0, #48]
 354:cdc_enumerate.c **** 	pUdp->UDP_CSR[0] &= ~(AT91C_UDP_TXCOMP);
 188              		r3, r3, r2
 189 0010 036B     		str	r3, [r0, #48]
 190 0012 9343     		mov	r2, #1
 191 0014 0363     	.L35:
 192 0016 0122     		.loc 1 355 0
 193              		ldr	r3, [r0, #48]
 355:cdc_enumerate.c **** 	while (pUdp->UDP_CSR[0] & AT91C_UDP_TXCOMP);
 194              	3, r2
 195 0018 036B     		bne	.L35
 196 001a 1342     		.loc 1 356 0
 197 001c FCD1     		@ sp needed for prologue
 356:cdc_enumerate.c **** }
 198              	lr
 199              	.LFE295:
 201              		.section	.text.AT91F_USB_SendStall,"ax",%progbits
 202              		.align	2
 203              		.global	AT91F_USB_SendStall
 204              		.code 16
 205              		.thumb_func
 207              	AT91F_USB_SendStall:
 208              	.LFB296:
 209              		.loc 1 363 0
 210              	.LVL13:
 357:cdc_enumerate.c **** 
 358:cdc_enumerate.c **** //*----------------------------------------------------------------------------
 359:cdc_enumerate.c **** //* \fn    AT91F_USB_SendStall
 360:cdc_enumerate.c **** //* \brief Stall the control endpoint
 361:cdc_enumerate.c **** //*----------------------------------------------------------------------------
 362:cdc_enumerate.c **** void AT91F_USB_SendStall(AT91PS_UDP pUdp)
 363:cdc_enumerate.c **** {
 211              	for prologue
 212              		.loc 1 364 0
 213              		ldr	r3, [r0, #48]
 364:cdc_enumerate.c **** 	pUdp->UDP_CSR[0] |= AT91C_UDP_FORCESTALL;
 214              	v	r2, #32
 215 0000 036B     		orr	r3, r3, r2
 216 0002 2022     		str	r3, [r0, #48]
 217 0004 1343     		mov	r2, #8
 218 0006 0363     	.L43:
 219 0008 0822     		.loc 1 365 0
 220              		ldr	r3, [r0, #48]
 365:cdc_enumerate.c **** 	while ( !(pUdp->UDP_CSR[0] & AT91C_UDP_ISOERROR) );
 221              	, r2
 222 000a 036B     		beq	.L43
 223 000c 1342     		.loc 1 366 0
 224 000e FCD0     		ldr	r3, [r0, #48]
 366:cdc_enumerate.c **** 	pUdp->UDP_CSR[0] &= ~(AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR);
 225              		r2, #40
 226 0010 036B     		bic	r3, r3, r2
 227 0012 2822     		str	r3, [r0, #48]
 228 0014 9343     	.L45:
 229 0016 0363     		.loc 1 367 0
 230              		ldr	r3, [r0, #48]
 367:cdc_enumerate.c **** 	while (pUdp->UDP_CSR[0] & (AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR));
 231              	3, r2
 232 0018 036B     		bne	.L45
 233 001a 1342     		.loc 1 368 0
 234 001c FCD1     		@ sp needed for prologue
 368:cdc_enumerate.c **** }
 235              	lr
 236              	.LFE296:
 238              		.section	.text.AT91F_UDP_IsConfigured,"ax",%progbits
 239              		.align	2
 240              		.code 16
 241              		.thumb_func
 243              	AT91F_UDP_IsConfigured:
 244              	.LFB291:
 245              		.loc 1 214 0
 246              		push	{r4, r5, r6, r7, lr}
 247              	.LCFI2:
 248 0000 F0B5     		mov	r7, r8
 249              		push	{r7}
 250 0002 4746     	.LCFI3:
 251 0004 80B4     	.LVL14:
 252              		sub	sp, sp, #8
 253              	.LCFI4:
 254 0006 82B0     		mov	r5, r0
 255              		.loc 1 215 0
 256 0008 051C     		ldr	r1, [r0]
 257              	.LVL15:
 258 000a 0168     		.loc 1 216 0
 259              		ldr	r3, [r1, #28]
 260              		str	r3, [sp, #4]
 261 000c CB69     	.LVL16:
 262 000e 0193     		.loc 1 218 0
 263              		ldr	r3, [sp, #4]
 264              		mov	r2, #128
 265 0010 019B     		lsl	r2, r2, #5
 266 0012 8022     		tst	r3, r2
 267 0014 5201     		beq	.L53
 268 0016 1342     		.loc 1 219 0
 269 0018 0CD0     		str	r2, [r1, #32]
 270              		.loc 1 221 0
 271 001a 0A62     		mov	r3, #1
 272              		neg	r3, r3
 273 001c 0123     		str	r3, [r1, #40]
 274 001e 5B42     		.loc 1 222 0
 275 0020 8B62     		mov	r3, #0
 276              		str	r3, [r1, #40]
 277 0022 0023     		.loc 1 224 0
 278 0024 8B62     		mov	r3, #128
 279              		lsl	r3, r3, #1
 280 0026 8023     		str	r3, [r1, #8]
 281 0028 5B00     		.loc 1 226 0
 282 002a 8B60     		mov	r3, #128
 283              		lsl	r3, r3, #8
 284 002c 8023     		str	r3, [r1, #48]

⌨️ 快捷键说明

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