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

📄 usb_to_232.lss

📁 采用atmel公司的mega8芯片设计的USB cdc类
💻 LSS
📖 第 1 页 / 共 5 页
字号:

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 + -