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

📄 d12ic.lst

📁 AVR单片机控制的PDIUSBD12原程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 339               	.global	D12_ReadLastTransactionStatus
 341               	D12_ReadLastTransactionStatus:
  79:d12ic.c       **** //读取端点最后处理状态
  80:d12ic.c       **** unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
  81:d12ic.c       **** {
 343               	.LM26:
 344               	/* prologue: frame size=0 */
 345               	/* prologue end (size=0) */
  82:d12ic.c       **** 	unsigned char c;
  83:d12ic.c       **** 	outportb(D12_COMMAND,0x40+bEndp);
 347               	.LM27:
 348 00ea 9927      		clr r25
 349 00ec 805C      		subi r24,lo8(-(64))
 350 00ee 9F4F      		sbci r25,hi8(-(64))
 351 00f0 BC01      		movw r22,r24
 352 00f2 83E0      		ldi r24,lo8(3)
 353 00f4 90E0      		ldi r25,hi8(3)
 354 00f6 0E94 0000 		call outportb
  84:d12ic.c       **** 	c=inportb(D12_DATA);
 356               	.LM28:
 357 00fa 82E0      		ldi r24,lo8(2)
 358 00fc 90E0      		ldi r25,hi8(2)
 359 00fe 0E94 0000 		call inportb
  85:d12ic.c       **** 	return c;
  86:d12ic.c       **** }
 361               	.LM29:
 362 0102 9927      		clr r25
 363               	/* epilogue: frame size=0 */
 364 0104 0895      		ret
 365               	/* epilogue end (size=1) */
 366               	/* function D12_ReadLastTransactionStatus size 14 (13) */
 368               	.Lscope6:
 372               	.global	D12_SetEndpointStatus
 374               	D12_SetEndpointStatus:
  87:d12ic.c       **** //设置端点状态
  88:d12ic.c       **** void D12_SetEndpointStatus(unsigned char bEndp,unsigned char bStalled)
  89:d12ic.c       **** {
 376               	.LM30:
 377               	/* prologue: frame size=0 */
 378 0106 1F93      		push r17
 379               	/* prologue end (size=1) */
 380 0108 162F      		mov r17,r22
  90:d12ic.c       **** 	outportb(D12_COMMAND,0x40+bEndp);
 382               	.LM31:
 383 010a 9927      		clr r25
 384 010c 805C      		subi r24,lo8(-(64))
 385 010e 9F4F      		sbci r25,hi8(-(64))
 386 0110 BC01      		movw r22,r24
 387 0112 83E0      		ldi r24,lo8(3)
 388 0114 90E0      		ldi r25,hi8(3)
 389 0116 0E94 0000 		call outportb
  91:d12ic.c       **** 	outportb(D12_DATA,bStalled);
 391               	.LM32:
 392 011a 812F      		mov r24,r17
 393 011c 9927      		clr r25
 394 011e BC01      		movw r22,r24
 395 0120 82E0      		ldi r24,lo8(2)
 396 0122 90E0      		ldi r25,hi8(2)
 397 0124 0E94 0000 		call outportb
 398               	/* epilogue: frame size=0 */
 399 0128 1F91      		pop r17
 400 012a 0895      		ret
 401               	/* epilogue end (size=2) */
 402               	/* function D12_SetEndpointStatus size 19 (16) */
 404               	.Lscope7:
 407               	.global	D12_ReadEndpointStatus
 409               	D12_ReadEndpointStatus:
  92:d12ic.c       **** }
  93:d12ic.c       **** //读取端点状态
  94:d12ic.c       **** unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
  95:d12ic.c       **** {
 411               	.LM33:
 412               	/* prologue: frame size=0 */
 413               	/* prologue end (size=0) */
  96:d12ic.c       **** 	unsigned char temp;
  97:d12ic.c       **** 	outportb(D12_COMMAND,0x80+bEndp);
 415               	.LM34:
 416 012c 9927      		clr r25
 417 012e 8058      		subi r24,lo8(-(128))
 418 0130 9F4F      		sbci r25,hi8(-(128))
 419 0132 BC01      		movw r22,r24
 420 0134 83E0      		ldi r24,lo8(3)
 421 0136 90E0      		ldi r25,hi8(3)
 422 0138 0E94 0000 		call outportb
  98:d12ic.c       **** 	temp=inportb(D12_DATA);
 424               	.LM35:
 425 013c 82E0      		ldi r24,lo8(2)
 426 013e 90E0      		ldi r25,hi8(2)
 427 0140 0E94 0000 		call inportb
  99:d12ic.c       **** 	return temp;
 100:d12ic.c       **** }
 429               	.LM36:
 430 0144 9927      		clr r25
 431               	/* epilogue: frame size=0 */
 432 0146 0895      		ret
 433               	/* epilogue end (size=1) */
 434               	/* function D12_ReadEndpointStatus size 14 (13) */
 436               	.Lscope8:
 438               	.global	D12_SendResume
 440               	D12_SendResume:
 101:d12ic.c       **** //发送恢复命令
 102:d12ic.c       **** void D12_SendResume(void)
 103:d12ic.c       **** {
 442               	.LM37:
 443               	/* prologue: frame size=0 */
 444               	/* prologue end (size=0) */
 104:d12ic.c       **** 	outportb(D12_COMMAND,0xF6);
 446               	.LM38:
 447 0148 66EF      		ldi r22,lo8(246)
 448 014a 70E0      		ldi r23,hi8(246)
 449 014c 83E0      		ldi r24,lo8(3)
 450 014e 90E0      		ldi r25,hi8(3)
 451 0150 0E94 0000 		call outportb
 452               	/* epilogue: frame size=0 */
 453 0154 0895      		ret
 454               	/* epilogue end (size=1) */
 455               	/* function D12_SendResume size 7 (6) */
 457               	.Lscope9:
 459               	.global	D12_ReadCurrentFrameNumber
 461               	D12_ReadCurrentFrameNumber:
 105:d12ic.c       **** }
 106:d12ic.c       **** //读取当前帧标志
 107:d12ic.c       **** unsigned short D12_ReadCurrentFrameNumber(void)
 108:d12ic.c       **** {
 463               	.LM39:
 464               	/* prologue: frame size=0 */
 465 0156 0F93      		push r16
 466 0158 1F93      		push r17
 467               	/* prologue end (size=2) */
 109:d12ic.c       **** 	unsigned short i,j;
 110:d12ic.c       **** 	outportb(D12_COMMAND,0xF5);
 469               	.LM40:
 470 015a 65EF      		ldi r22,lo8(245)
 471 015c 70E0      		ldi r23,hi8(245)
 472 015e 83E0      		ldi r24,lo8(3)
 473 0160 90E0      		ldi r25,hi8(3)
 474 0162 0E94 0000 		call outportb
 111:d12ic.c       **** 	i=inportb(D12_DATA);
 476               	.LM41:
 477 0166 82E0      		ldi r24,lo8(2)
 478 0168 90E0      		ldi r25,hi8(2)
 479 016a 0E94 0000 		call inportb
 480 016e 8C01      		movw r16,r24
 112:d12ic.c       **** 	j=inportb(D12_DATA);
 482               	.LM42:
 483 0170 82E0      		ldi r24,lo8(2)
 484 0172 90E0      		ldi r25,hi8(2)
 485 0174 0E94 0000 		call inportb
 113:d12ic.c       **** 	i+=(j<<8);
 487               	.LM43:
 488 0178 982F      		mov r25,r24
 489 017a 8827      		clr r24
 114:d12ic.c       **** 	return i;
 115:d12ic.c       **** }
 491               	.LM44:
 492 017c 800F      		add r24,r16
 493 017e 911F      		adc r25,r17
 494               	/* epilogue: frame size=0 */
 495 0180 1F91      		pop r17
 496 0182 0F91      		pop r16
 497 0184 0895      		ret
 498               	/* epilogue end (size=3) */
 499               	/* function D12_ReadCurrentFrameNumber size 24 (19) */
 504               	.Lscope10:
 509               	.global	D12_ReadEndpoint
 511               	D12_ReadEndpoint:
 116:d12ic.c       **** //读取端点数据
 117:d12ic.c       **** unsigned char D12_ReadEndpoint(unsigned char endp,unsigned char len,unsigned char *buf)
 118:d12ic.c       **** {
 513               	.LM45:
 514               	/* prologue: frame size=0 */
 515 0186 DF92      		push r13
 516 0188 EF92      		push r14
 517 018a FF92      		push r15
 518 018c 0F93      		push r16
 519 018e 1F93      		push r17
 520 0190 CF93      		push r28
 521 0192 DF93      		push r29
 522               	/* prologue end (size=7) */
 523 0194 E82E      		mov r14,r24
 524 0196 D62E      		mov r13,r22
 525 0198 8A01      		movw r16,r20
 119:d12ic.c       **** 	unsigned char i,j;
 120:d12ic.c       **** 	outportb(D12_COMMAND,endp);		//读取端点缓冲区状态
 527               	.LM46:
 528 019a C82F      		mov r28,r24
 529 019c DD27      		clr r29
 530 019e BE01      		movw r22,r28
 531 01a0 83E0      		ldi r24,lo8(3)
 532 01a2 90E0      		ldi r25,hi8(3)
 533 01a4 0E94 0000 		call outportb
 534               	.LBB2:
 121:d12ic.c       **** 	if((inportb(D12_DATA) & D12_FULLEMPTY)==0)
 536               	.LM47:
 537 01a8 82E0      		ldi r24,lo8(2)
 538 01aa 90E0      		ldi r25,hi8(2)
 539 01ac 0E94 0000 		call inportb
 540 01b0 80FD      		sbrc r24,0
 541 01b2 03C0      		rjmp .L16
 122:d12ic.c       **** 		return 0;							//当前缓冲区为空,返回
 543               	.LM48:
 544 01b4 80E0      		ldi r24,lo8(0)
 545 01b6 90E0      		ldi r25,hi8(0)
 546 01b8 42C0      		rjmp .L15
 547               	.L16:
 548               	.LBE2:
 123:d12ic.c       **** 	outportb(D12_COMMAND,0x80+endp);		//读取端点状态
 550               	.LM49:
 551 01ba C058      		subi r28,lo8(-(128))
 552 01bc DF4F      		sbci r29,hi8(-(128))
 553 01be BE01      		movw r22,r28
 554 01c0 83E0      		ldi r24,lo8(3)
 555 01c2 90E0      		ldi r25,hi8(3)
 556 01c4 0E94 0000 		call outportb
 124:d12ic.c       **** 	i=inportb(D12_DATA);
 558               	.LM50:
 559 01c8 82E0      		ldi r24,lo8(2)
 560 01ca 90E0      		ldi r25,hi8(2)
 561 01cc 0E94 0000 		call inportb
 125:d12ic.c       **** 	i=i & 0x60;
 563               	.LM51:
 564 01d0 C82F      		mov r28,r24
 565 01d2 C076      		andi r28,lo8(96)
 126:d12ic.c       **** 	if(endp==4)
 567               	.LM52:
 568 01d4 84E0      		ldi r24,lo8(4)
 569 01d6 E816      		cp r14,r24
 570 01d8 49F4      		brne .L17
 571 01da 8091 0000 		lds r24,bEPPflags+1
 127:d12ic.c       **** 	{
 128:d12ic.c       **** 		if(i==0x60)
 573               	.LM53:
 574 01de C036      		cpi r28,lo8(96)
 575 01e0 11F4      		brne .L18
 129:d12ic.c       **** 			bEPPflags.bits.ep2buf_full=1;	//标志端点2缓冲区全满
 577               	.LM54:
 578 01e2 8061      		ori r24,lo8(16)
 579 01e4 01C0      		rjmp .L27
 580               	.L18:
 130:d12ic.c       **** 		else
 131:d12ic.c       **** 			bEPPflags.bits.ep2buf_full=0;
 582               	.LM55:
 583 01e6 8F7E      		andi r24,lo8(-17)
 584               	.L27:
 585 01e8 8093 0000 		sts bEPPflags+1,r24
 586               	.L17:
 132:d12ic.c       **** 	}
 133:d12ic.c       **** 	outportb(D12_COMMAND,0xF0);
 588               	.LM56:
 589 01ec 60EF      		ldi r22,lo8(240)
 590 01ee 70E0      		ldi r23,hi8(240)
 591 01f0 83E0      		ldi r24,lo8(3)
 592 01f2 90E0      		ldi r25,hi8(3)
 593 01f4 0E94 0000 		call outportb
 134:d12ic.c       **** 	j=inportb(D12_DATA);
 595               	.LM57:
 596 01f8 82E0      		ldi r24,lo8(2)
 597 01fa 90E0      		ldi r25,hi8(2)
 598 01fc 0E94 0000 		call inportb
 135:d12ic.c       **** 	j=inportb(D12_DATA);
 600               	.LM58:
 601 0200 82E0      		ldi r24,lo8(2)
 602 0202 90E0      		ldi r25,hi8(2)
 603 0204 0E94 0000 		call inportb
 604 0208 F82E      		mov r15,r24
 136:d12ic.c       **** 	if(j>len)

⌨️ 快捷键说明

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