📄 usb_to_232.lss
字号:
000005be <txLoop>:
5be: 20 ff sbrs r18, 0
5c0: 05 27 eor r16, r21
5c2: 08 bb out 0x18, r16 ; 24
5c4: 27 95 ror r18
5c6: 17 95 ror r17
000005c8 <didStuff0>:
5c8: 1c 3f cpi r17, 0xFC ; 252
5ca: 50 f7 brcc .-44 ; 0x5a0 <bitstuff0>
5cc: 20 ff sbrs r18, 0
5ce: 05 27 eor r16, r21
5d0: 27 95 ror r18
5d2: 08 bb out 0x18, r16 ; 24
5d4: 17 95 ror r17
5d6: 1c 3f cpi r17, 0xFC ; 252
000005d8 <didStuff1>:
5d8: 38 f7 brcc .-50 ; 0x5a8 <bitstuff1>
5da: 20 ff sbrs r18, 0
5dc: 05 27 eor r16, r21
5de: 27 95 ror r18
5e0: 17 95 ror r17
000005e2 <didStuff2>:
5e2: 08 bb out 0x18, r16 ; 24
5e4: 1c 3f cpi r17, 0xFC ; 252
5e6: 28 f7 brcc .-54 ; 0x5b2 <bitstuff2>
5e8: 20 ff sbrs r18, 0
5ea: 05 27 eor r16, r21
5ec: 27 95 ror r18
5ee: 17 95 ror r17
000005f0 <didStuff3>:
5f0: 1c 3f cpi r17, 0xFC ; 252
5f2: 08 bb out 0x18, r16 ; 24
5f4: 08 f7 brcc .-62 ; 0x5b8 <bitstuff3>
5f6: 00 c0 rjmp .+0 ; 0x5f8 <didStuff3+0x8>
5f8: 49 91 ld r20, Y+
5fa: 20 ff sbrs r18, 0
5fc: 05 27 eor r16, r21
5fe: 08 bb out 0x18, r16 ; 24
600: 27 95 ror r18
602: 17 95 ror r17
00000604 <didStuff4>:
604: 1c 3f cpi r17, 0xFC ; 252
606: 80 f5 brcc .+96 ; 0x668 <bitstuff4>
608: 20 ff sbrs r18, 0
60a: 05 27 eor r16, r21
60c: 27 95 ror r18
60e: 08 bb out 0x18, r16 ; 24
610: 17 95 ror r17
612: 1c 3f cpi r17, 0xFC ; 252
00000614 <didStuff5>:
614: 68 f5 brcc .+90 ; 0x670 <bitstuff5>
616: 20 ff sbrs r18, 0
618: 05 27 eor r16, r21
61a: 27 95 ror r18
61c: 17 95 ror r17
0000061e <didStuff6>:
61e: 08 bb out 0x18, r16 ; 24
620: 1c 3f cpi r17, 0xFC ; 252
622: 58 f5 brcc .+86 ; 0x67a <bitstuff6>
624: 20 ff sbrs r18, 0
626: 05 27 eor r16, r21
628: 27 95 ror r18
62a: 17 95 ror r17
0000062c <didStuff7>:
62c: 1c 3f cpi r17, 0xFC ; 252
62e: 08 bb out 0x18, r16 ; 24
630: 38 f5 brcc .+78 ; 0x680 <bitstuff7>
632: 24 2f mov r18, r20
634: 3a 95 dec r19
636: 19 f6 brne .-122 ; 0x5be <txLoop>
638: 0c 7f andi r16, 0xFC ; 252
63a: 5f 91 pop r21
63c: 08 bb out 0x18, r16 ; 24
63e: 32 e0 ldi r19, 0x02 ; 2
00000640 <se0Delay>:
640: 3a 95 dec r19
642: f1 f7 brne .-4 ; 0x640 <se0Delay>
644: 10 91 17 01 lds r17, 0x0117
648: ce 56 subi r28, 0x6E ; 110
64a: d0 40 sbci r29, 0x00 ; 0
64c: 11 f0 breq .+4 ; 0x652 <skipAddrAssign>
64e: 10 93 11 01 sts 0x0111, r17
00000652 <skipAddrAssign>:
652: 01 60 ori r16, 0x01 ; 1
654: 17 b3 in r17, 0x17 ; 23
656: 1c 7f andi r17, 0xFC ; 252
658: 08 bb out 0x18, r16 ; 24
65a: 0c 7f andi r16, 0xFC ; 252
65c: 4f 91 pop r20
65e: cf 91 pop r28
660: 17 bb out 0x17, r17 ; 23
662: 08 bb out 0x18, r16 ; 24
664: df 91 pop r29
666: 6c cf rjmp .-296 ; 0x540 <sofError>
00000668 <bitstuff4>:
668: 05 27 eor r16, r21
66a: 10 e0 ldi r17, 0x00 ; 0
66c: 08 bb out 0x18, r16 ; 24
66e: ca cf rjmp .-108 ; 0x604 <didStuff4>
00000670 <bitstuff5>:
670: 05 27 eor r16, r21
672: 10 e0 ldi r17, 0x00 ; 0
674: 08 94 sec
676: 08 bb out 0x18, r16 ; 24
678: cd cf rjmp .-102 ; 0x614 <didStuff5>
0000067a <bitstuff6>:
67a: 05 27 eor r16, r21
67c: 10 e0 ldi r17, 0x00 ; 0
67e: cf cf rjmp .-98 ; 0x61e <didStuff6>
00000680 <bitstuff7>:
680: 05 27 eor r16, r21
682: 10 e0 ldi r17, 0x00 ; 0
684: d3 cf rjmp .-90 ; 0x62c <didStuff7>
00000686 <usbCrc16>:
686: a8 2f mov r26, r24
688: b9 2f mov r27, r25
68a: 8f ef ldi r24, 0xFF ; 255
68c: 9f ef ldi r25, 0xFF ; 255
68e: 41 e0 ldi r20, 0x01 ; 1
690: 50 ea ldi r21, 0xA0 ; 160
00000692 <crcByteLoop>:
692: 61 50 subi r22, 0x01 ; 1
694: 70 f0 brcs .+28 ; 0x6b2 <crcReady>
696: 2d 91 ld r18, X+
698: 38 e0 ldi r19, 0x08 ; 8
0000069a <crcBitLoop>:
69a: 72 2f mov r23, r18
69c: 78 27 eor r23, r24
69e: 96 95 lsr r25
6a0: 87 95 ror r24
6a2: 26 95 lsr r18
6a4: 70 ff sbrs r23, 0
6a6: 02 c0 rjmp .+4 ; 0x6ac <crcNoXor>
6a8: 84 27 eor r24, r20
6aa: 95 27 eor r25, r21
000006ac <crcNoXor>:
6ac: 3a 95 dec r19
6ae: a9 f7 brne .-22 ; 0x69a <crcBitLoop>
6b0: f0 cf rjmp .-32 ; 0x692 <crcByteLoop>
000006b2 <crcReady>:
6b2: 80 95 com r24
6b4: 90 95 com r25
6b6: 08 95 ret
000006b8 <usbCrc16Append>:
6b8: e6 df rcall .-52 ; 0x686 <usbCrc16>
6ba: 8d 93 st X+, r24
6bc: 9d 93 st X+, r25
6be: 08 95 ret
000006c0 <usbInit>:
/* ------------------------------------------------------------------------- */
void usbInit(void)
{
usbInputBuf = (uchar)usbRxBuf[0];
6c0: 80 e7 ldi r24, 0x70 ; 112
6c2: 90 e0 ldi r25, 0x00 ; 0
6c4: 80 93 10 01 sts 0x0110, r24
usbAppBuf = (uchar)usbRxBuf[1];
6c8: 0b 96 adiw r24, 0x0b ; 11
6ca: 80 93 04 01 sts 0x0104, r24
#if USB_INTR_CFG_SET != 0
USB_INTR_CFG |= USB_INTR_CFG_SET;
6ce: 85 b7 in r24, 0x35 ; 53
6d0: 83 60 ori r24, 0x03 ; 3
6d2: 85 bf out 0x35, r24 ; 53
#endif
#if USB_INTR_CFG_CLR != 0
USB_INTR_CFG &= ~(USB_INTR_CFG_CLR);
#endif
USB_INTR_ENABLE |= (1 << USB_INTR_ENABLE_BIT);
6d4: 8b b7 in r24, 0x3b ; 59
6d6: 80 64 ori r24, 0x40 ; 64
6d8: 8b bf out 0x3b, r24 ; 59
}
6da: 08 95 ret
000006dc <usbSetInterrupt3>:
#if USB_CFG_HAVE_INTRIN_ENDPOINT3
uchar usbTxPacketCnt3;
void usbSetInterrupt3(const uchar *data, uchar len)
{
6dc: 1f 93 push r17
6de: dc 01 movw r26, r24
6e0: 16 2f mov r17, r22
uchar *p, i;
i = USBPID_DATA1;
if(usbTxPacketCnt3 & 1)
6e2: 90 91 03 01 lds r25, 0x0103
6e6: 90 fd sbrc r25, 0
6e8: 02 c0 rjmp .+4 ; 0x6ee <usbSetInterrupt3+0x12>
6ea: 2b e4 ldi r18, 0x4B ; 75
6ec: 01 c0 rjmp .+2 ; 0x6f0 <usbSetInterrupt3+0x14>
6ee: 23 ec ldi r18, 0xC3 ; 195
i = USBPID_DATA0;
if(usbTxLen3 < 0){ /* packet buffer was empty */
6f0: 80 91 6a 00 lds r24, 0x006A
6f4: 87 ff sbrs r24, 7
6f6: 04 c0 rjmp .+8 ; 0x700 <usbSetInterrupt3+0x24>
usbTxPacketCnt3++;
6f8: 9f 5f subi r25, 0xFF ; 255
6fa: 90 93 03 01 sts 0x0103, r25
6fe: 03 c0 rjmp .+6 ; 0x706 <usbSetInterrupt3+0x2a>
}else{
usbTxLen3 = -1; /* avoid sending incomplete interrupt data */
700: 8f ef ldi r24, 0xFF ; 255
702: 80 93 6a 00 sts 0x006A, r24
}
p = usbTxBuf3;
*p++ = i;
706: 20 93 f8 00 sts 0x00F8, r18
70a: 91 2f mov r25, r17
70c: e9 ef ldi r30, 0xF9 ; 249
70e: f0 e0 ldi r31, 0x00 ; 0
710: 03 c0 rjmp .+6 ; 0x718 <usbSetInterrupt3+0x3c>
for(i=len;i--;) {
*p++ = *data++;
712: 8d 91 ld r24, X+
714: 81 93 st Z+, r24
716: 91 50 subi r25, 0x01 ; 1
}else{
usbTxLen3 = -1; /* avoid sending incomplete interrupt data */
}
p = usbTxBuf3;
*p++ = i;
for(i=len;i--;) {
718: 99 23 and r25, r25
71a: d9 f7 brne .-10 ; 0x712 <usbSetInterrupt3+0x36>
*p++ = *data++;
}
usbCrc16Append(&usbTxBuf3[1], len);
71c: 89 ef ldi r24, 0xF9 ; 249
71e: 90 e0 ldi r25, 0x00 ; 0
720: 61 2f mov r22, r17
722: ca df rcall .-108 ; 0x6b8 <usbCrc16Append>
usbTxLen3 = len + 4; /* len must be given including sync byte */
724: 1c 5f subi r17, 0xFC ; 252
726: 10 93 6a 00 sts 0x006A, r17
#if DEBUG_LEVEL > 1
DBG2(0x23, usbTxBuf3, usbTxLen3 - 1);
#else
DBG1(0x23, usbTxBuf3 + 1, 2);
#endif
}
72a: 1f 91 pop r17
72c: 08 95 ret
0000072e <usbSetInterrupt>:
#if USB_CFG_IMPLEMENT_HALT
static uchar usbHalted1; /* not 0 if endpoint 1 is halted */
#endif
void usbSetInterrupt(uchar *data, uchar len)
{
72e: 1f 93 push r17
730: dc 01 movw r26, r24
732: 16 2f mov r17, r22
#if 0 /* No runtime checks! Caller is responsible for valid data! */
if(len > 8) /* interrupt transfers are limited to 8 bytes */
len = 8;
#endif
i = USBPID_DATA1;
if(usbTxPacketCnt1 & 1)
734: 90 91 15 01 lds r25, 0x0115
738: 90 fd sbrc r25, 0
73a: 02 c0 rjmp .+4 ; 0x740 <usbSetInterrupt+0x12>
73c: 2b e4 ldi r18, 0x4B ; 75
73e: 01 c0 rjmp .+2 ; 0x742 <usbSetInterrupt+0x14>
740: 23 ec ldi r18, 0xC3 ; 195
i = USBPID_DATA0;
if(usbTxLen1 < 0){ /* packet buffer was empty */
742: 80 91 69 00 lds r24, 0x0069
746: 87 ff sbrs r24, 7
748: 04 c0 rjmp .+8 ; 0x752 <usbSetInterrupt+0x24>
usbTxPacketCnt1++;
74a: 9f 5f subi r25, 0xFF ; 255
74c: 90 93 15 01 sts 0x0115, r25
750: 03 c0 rjmp .+6 ; 0x758 <usbSetInterrupt+0x2a>
}else{
usbTxLen1 = -1; /* avoid sending incomplete interrupt data */
752: 8f ef ldi r24, 0xFF ; 255
754: 80 93 69 00 sts 0x0069, r24
}
p = usbTxBuf1;
*p++ = i;
758: 20 93 05 01 sts 0x0105, r18
75c: 91 2f mov r25, r17
75e: e6 e0 ldi r30, 0x06 ; 6
760: f1 e0 ldi r31, 0x01 ; 1
762: 03 c0 rjmp .+6 ; 0x76a <usbSetInterrupt+0x3c>
for(i=len;i--;)
*p++ = *data++;
764: 8d 91 ld r24, X+
766: 81 93 st Z+, r24
768: 91 50 subi r25, 0x01 ; 1
}else{
usbTxLen1 = -1; /* avoid sending incomplete interrupt data */
}
p = usbTxBuf1;
*p++ = i;
for(i=len;i--;)
76a: 99 23 and r25, r25
76c: d9 f7 brne .-10 ; 0x764 <usbSetInterrupt+0x36>
*p++ = *data++;
usbCrc16Append(&usbTxBuf1[1], len);
76e: 86 e0 ldi r24, 0x06 ; 6
770: 91 e0 ldi r25, 0x01 ; 1
772: 61 2f mov r22, r17
774: a1 df rcall .-190 ; 0x6b8 <usbCrc16Append>
usbTxLen1 = len + 4; /* len must be given including sync byte */
776: 1c 5f subi r17, 0xFC ; 252
778: 10 93 69 00 sts 0x0069, r17
#if DEBUG_LEVEL > 1
DBG2(0x21, usbTxBuf1, len + 3);
#else
DBG1(0x21, usbTxBuf1 + 1, 2);
#endif
}
77c: 1f 91 pop r17
77e: 08 95 ret
00000780 <usbPoll>:
}
/* ------------------------------------------------------------------------- */
void usbPoll(void)
{
780: 0f 93 push r16
782: 1f 93 push r17
784: cf 93 push r28
786: df 93 push r29
uchar len;
if((len = usbRxLen) > 0){
788: 60 91 16 01 lds r22, 0x0116
78c: 66 23 and r22, r22
78e: 09 f4 brne .+2 ; 0x792 <usbPoll+0x12>
790: b2 c0 rjmp .+356 ; 0x8f6 <usbPoll+0x176>
* need data integrity checks with this driver, check the CRC in your app
* code and report errors back to the host. Since the ACK was already sent,
* retries must be handled on application level.
* unsigned crc = usbCrc16((uchar *)(unsigned)(usbAppBuf + 1), usbRxLen - 3);
*/
len -= 3; /* remove PID and CRC */
792: 63 50 subi r22, 0x03 ; 3
if(len < 128){ /* no overflow */
794: 67 fd sbrc r22, 7
796: a9 c0 rjmp .+338 ; 0x8ea <usbPoll+0x16a>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -