📄 d12ic.lst
字号:
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 + -