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

📄 usb_to_232.lss

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

usb_to_232.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000009f2  00000000  00000000  00000094  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000000e  00800060  000009f2  00000a86  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          000000ac  0080006e  0080006e  00000a94  2**0
                  ALLOC
  3 .debug_aranges 00000060  00000000  00000000  00000a94  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_pubnames 000002c1  00000000  00000000  00000af4  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_info   00000ea5  00000000  00000000  00000db5  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_abbrev 000005f1  00000000  00000000  00001c5a  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_line   0000095f  00000000  00000000  0000224b  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_frame  00000100  00000000  00000000  00002bac  2**2
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    00000523  00000000  00000000  00002cac  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_loc    000007b7  00000000  00000000  000031cf  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_ranges 00000050  00000000  00000000  00003986  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
   0:	58 c0       	rjmp	.+176    	; 0xb2 <__ctors_end>
   2:	98 c1       	rjmp	.+816    	; 0x334 <__vector_1>
   4:	71 c0       	rjmp	.+226    	; 0xe8 <__bad_interrupt>
   6:	70 c0       	rjmp	.+224    	; 0xe8 <__bad_interrupt>
   8:	6f c0       	rjmp	.+222    	; 0xe8 <__bad_interrupt>
   a:	6e c0       	rjmp	.+220    	; 0xe8 <__bad_interrupt>
   c:	6d c0       	rjmp	.+218    	; 0xe8 <__bad_interrupt>
   e:	6c c0       	rjmp	.+216    	; 0xe8 <__bad_interrupt>
  10:	6b c0       	rjmp	.+214    	; 0xe8 <__bad_interrupt>
  12:	6a c0       	rjmp	.+212    	; 0xe8 <__bad_interrupt>
  14:	69 c0       	rjmp	.+210    	; 0xe8 <__bad_interrupt>
  16:	68 c0       	rjmp	.+208    	; 0xe8 <__bad_interrupt>
  18:	67 c0       	rjmp	.+206    	; 0xe8 <__bad_interrupt>
  1a:	66 c0       	rjmp	.+204    	; 0xe8 <__bad_interrupt>
  1c:	65 c0       	rjmp	.+202    	; 0xe8 <__bad_interrupt>
  1e:	64 c0       	rjmp	.+200    	; 0xe8 <__bad_interrupt>
  20:	63 c0       	rjmp	.+198    	; 0xe8 <__bad_interrupt>
  22:	62 c0       	rjmp	.+196    	; 0xe8 <__bad_interrupt>
  24:	61 c0       	rjmp	.+194    	; 0xe8 <__bad_interrupt>

00000026 <usbDescrConfig>:
  26:	09 02 43 00 02 01 00 80 32 09 04 00 00 01 02 02     ..C.....2.......
  36:	01 00 05 24 00 10 01 04 24 02 02 05 24 06 00 01     ...$....$...$...
  46:	05 24 01 03 01 07 05 83 03 08 00 64 09 04 01 00     .$.........d....
  56:	02 0a 00 00 00 07 05 01 02 06 00 00 07 05 81 02     ................
  66:	08 00 00                                            ...

00000069 <usbDescrDevice>:
  69:	12 01 01 01 02 00 00 08 c0 16 e1 05 00 01 01 02     ................
  79:	00 01                                               ..

0000007b <usbDescrString0>:
  7b:	04 03 09 04                                         ....

0000007f <usbDescrString1>:
  7f:	22 03 77 00 77 00 77 00 2e 00 72 00 65 00 63 00     ".w.w.w...r.e.c.
  8f:	75 00 72 00 73 00 69 00 6f 00 6e 00 2e 00 6a 00     u.r.s.i.o.n...j.
  9f:	70 00                                               p.

000000a1 <usbDescrString2>:
  a1:	10 03 55 00 53 00 42 00 2d 00 32 00 33 00 32 00     ..U.S.B.-.2.3.2.
	...

000000b2 <__ctors_end>:
  b2:	11 24       	eor	r1, r1
  b4:	1f be       	out	0x3f, r1	; 63
  b6:	cf e5       	ldi	r28, 0x5F	; 95
  b8:	d4 e0       	ldi	r29, 0x04	; 4
  ba:	de bf       	out	0x3e, r29	; 62
  bc:	cd bf       	out	0x3d, r28	; 61

000000be <__do_copy_data>:
  be:	10 e0       	ldi	r17, 0x00	; 0
  c0:	a0 e6       	ldi	r26, 0x60	; 96
  c2:	b0 e0       	ldi	r27, 0x00	; 0
  c4:	e2 ef       	ldi	r30, 0xF2	; 242
  c6:	f9 e0       	ldi	r31, 0x09	; 9
  c8:	02 c0       	rjmp	.+4      	; 0xce <.do_copy_data_start>

000000ca <.do_copy_data_loop>:
  ca:	05 90       	lpm	r0, Z+
  cc:	0d 92       	st	X+, r0

000000ce <.do_copy_data_start>:
  ce:	ae 36       	cpi	r26, 0x6E	; 110
  d0:	b1 07       	cpc	r27, r17
  d2:	d9 f7       	brne	.-10     	; 0xca <.do_copy_data_loop>

000000d4 <__do_clear_bss>:
  d4:	11 e0       	ldi	r17, 0x01	; 1
  d6:	ae e6       	ldi	r26, 0x6E	; 110
  d8:	b0 e0       	ldi	r27, 0x00	; 0
  da:	01 c0       	rjmp	.+2      	; 0xde <.do_clear_bss_start>

000000dc <.do_clear_bss_loop>:
  dc:	1d 92       	st	X+, r1

000000de <.do_clear_bss_start>:
  de:	aa 31       	cpi	r26, 0x1A	; 26
  e0:	b1 07       	cpc	r27, r17
  e2:	e1 f7       	brne	.-8      	; 0xdc <.do_clear_bss_loop>
  e4:	02 d0       	rcall	.+4      	; 0xea <main>
  e6:	83 c4       	rjmp	.+2310   	; 0x9ee <_exit>

000000e8 <__bad_interrupt>:
  e8:	8b cf       	rjmp	.-234    	; 0x0 <__vectors>

000000ea <main>:
**************************************/



int main(void)
{
  ea:	1f 93       	push	r17
    uint8_t ch;

    wdt_enable(WDTO_1S);
  ec:	8e e0       	ldi	r24, 0x0E	; 14
  ee:	28 e1       	ldi	r18, 0x18	; 24
  f0:	30 e0       	ldi	r19, 0x00	; 0
  f2:	0f b6       	in	r0, 0x3f	; 63
  f4:	f8 94       	cli
  f6:	a8 95       	wdr
  f8:	21 bd       	out	0x21, r18	; 33
  fa:	0f be       	out	0x3f, r0	; 63
  fc:	81 bd       	out	0x21, r24	; 33
    usbcdc_init();
  fe:	7a d0       	rcall	.+244    	; 0x1f4 <usbcdc_init>

  	PORTC= (1<<PC1)|(1<<PC0);
 100:	83 e0       	ldi	r24, 0x03	; 3
 102:	85 bb       	out	0x15, r24	; 21
  	DDRC = (1<<PC1)|(1<<PC0);
 104:	84 bb       	out	0x14, r24	; 20
	RED_ON();
 106:	a9 98       	cbi	0x15, 1	; 21
	GREEN_OFF();
 108:	a8 9a       	sbi	0x15, 0	; 21

    sei();
 10a:	78 94       	sei
    for(;;) 
	{
		wdt_reset();
		poll();
		GREEN_TOG();
 10c:	11 e0       	ldi	r17, 0x01	; 1
	GREEN_OFF();

    sei();
    for(;;) 
	{
		wdt_reset();
 10e:	a8 95       	wdr
		poll();
 110:	83 d0       	rcall	.+262    	; 0x218 <usbcdc_poll>
		GREEN_TOG();
 112:	85 b3       	in	r24, 0x15	; 21
 114:	81 27       	eor	r24, r17
 116:	85 bb       	out	0x15, r24	; 21
		//AVRprog V1.4 超简单的应用范例
		//AVRUSB模似串口一定要在CM1-CM4内
		ch = getc();		//由USB接收到模似串口数据
 118:	c4 d0       	rcall	.+392    	; 0x2a2 <usbcdc_getc>
		if (ch == 'S')		// get Software
 11a:	83 35       	cpi	r24, 0x53	; 83
 11c:	71 f4       	brne	.+28     	; 0x13a <main+0x50>
		{ 
			putc('A');   	// AVR ISP
 11e:	81 e4       	ldi	r24, 0x41	; 65
 120:	d8 d0       	rcall	.+432    	; 0x2d2 <usbcdc_putc>
			putc('V');
 122:	86 e5       	ldi	r24, 0x56	; 86
 124:	d6 d0       	rcall	.+428    	; 0x2d2 <usbcdc_putc>
			putc('R');
 126:	82 e5       	ldi	r24, 0x52	; 82
 128:	d4 d0       	rcall	.+424    	; 0x2d2 <usbcdc_putc>
			putc(' ');
 12a:	80 e2       	ldi	r24, 0x20	; 32
 12c:	d2 d0       	rcall	.+420    	; 0x2d2 <usbcdc_putc>
			putc('9');
 12e:	89 e3       	ldi	r24, 0x39	; 57
 130:	d0 d0       	rcall	.+416    	; 0x2d2 <usbcdc_putc>
			putc('1');
 132:	81 e3       	ldi	r24, 0x31	; 49
 134:	ce d0       	rcall	.+412    	; 0x2d2 <usbcdc_putc>
			putc('0');
 136:	80 e3       	ldi	r24, 0x30	; 48
 138:	2b c0       	rjmp	.+86     	; 0x190 <main+0xa6>

		}
		else if (ch == 'p')	// get Programmer Type 
 13a:	80 37       	cpi	r24, 0x70	; 112
 13c:	11 f4       	brne	.+4      	; 0x142 <main+0x58>
		{ 
			putc('S');		// Serial
 13e:	83 e5       	ldi	r24, 0x53	; 83
 140:	27 c0       	rjmp	.+78     	; 0x190 <main+0xa6>
		} 
		else if (ch == 'V' || ch == 'v') // get Version 'V':sw 'v':hw
 142:	86 35       	cpi	r24, 0x56	; 86
 144:	11 f0       	breq	.+4      	; 0x14a <main+0x60>
 146:	86 37       	cpi	r24, 0x76	; 118
 148:	41 f4       	brne	.+16     	; 0x15a <main+0x70>
		{ 
			extmode = 0;
 14a:	10 92 6e 00 	sts	0x006E, r1
			pgmmode = 0;
 14e:	10 92 6f 00 	sts	0x006F, r1
			putc('2');
 152:	82 e3       	ldi	r24, 0x32	; 50
 154:	be d0       	rcall	.+380    	; 0x2d2 <usbcdc_putc>
			putc('4');
 156:	84 e3       	ldi	r24, 0x34	; 52
 158:	1b c0       	rjmp	.+54     	; 0x190 <main+0xa6>
		} 
		else if (ch == 'a') // Report autoincrement address
 15a:	81 36       	cpi	r24, 0x61	; 97
 15c:	31 f4       	brne	.+12     	; 0x16a <main+0x80>
		{ 
			extmode = 0;
 15e:	10 92 6e 00 	sts	0x006E, r1
			pgmmode = 0;
 162:	10 92 6f 00 	sts	0x006F, r1
			putc('Y');		// Yes!
 166:	89 e5       	ldi	r24, 0x59	; 89
 168:	13 c0       	rjmp	.+38     	; 0x190 <main+0xa6>
		}
		else if (ch == 'A') // Set Write Address
 16a:	81 34       	cpi	r24, 0x41	; 65
 16c:	11 f4       	brne	.+4      	; 0x172 <main+0x88>
		{ 
			getc();			//addr_hi=getc();
 16e:	99 d0       	rcall	.+306    	; 0x2a2 <usbcdc_getc>
 170:	08 c0       	rjmp	.+16     	; 0x182 <main+0x98>
			getc();			//addr_lo=getc();
			putc('\r');		// ACK
		}
		else if (ch == 't') // get supported Device Types
 172:	84 37       	cpi	r24, 0x74	; 116
 174:	21 f4       	brne	.+8      	; 0x17e <main+0x94>
		{
			putc(0x20); 	// dummy 
 176:	80 e2       	ldi	r24, 0x20	; 32
 178:	ac d0       	rcall	.+344    	; 0x2d2 <usbcdc_putc>
			putc(0);
 17a:	80 e0       	ldi	r24, 0x00	; 0
 17c:	09 c0       	rjmp	.+18     	; 0x190 <main+0xa6>
		}
		else if (ch == 'T')  // set Device Types: ignore but ACK
 17e:	84 35       	cpi	r24, 0x54	; 84
 180:	11 f4       	brne	.+4      	; 0x186 <main+0x9c>
		{
			getc();
 182:	8f d0       	rcall	.+286    	; 0x2a2 <usbcdc_getc>
 184:	04 c0       	rjmp	.+8      	; 0x18e <main+0xa4>
			putc('\r');

		} 
		else if (ch == 'x' || ch == 'y')  // Set/Clear LED
 186:	88 57       	subi	r24, 0x78	; 120
 188:	82 30       	cpi	r24, 0x02	; 2
 18a:	08 f0       	brcs	.+2      	; 0x18e <main+0xa4>
 18c:	c0 cf       	rjmp	.-128    	; 0x10e <main+0x24>
		{
			putc('\r'); // ACK
 18e:	8d e0       	ldi	r24, 0x0D	; 13
 190:	a0 d0       	rcall	.+320    	; 0x2d2 <usbcdc_putc>
 192:	bd cf       	rjmp	.-134    	; 0x10e <main+0x24>

00000194 <usbFunctionSetup>:
/* ----------------------------- USB interface ----------------------------- */
/* ------------------------------------------------------------------------- */

uchar usbFunctionSetup(uchar data[8])
{
usbRequest_t    *rq = (void *)data;
 194:	fc 01       	movw	r30, r24

    if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS)
 196:	80 81       	ld	r24, Z
 198:	80 76       	andi	r24, 0x60	; 96
 19a:	80 32       	cpi	r24, 0x20	; 32
 19c:	71 f4       	brne	.+28     	; 0x1ba <usbFunctionSetup+0x26>
	{    /* class request type */

        if( rq->bRequest==GET_LINE_CODING || rq->bRequest==SET_LINE_CODING )
 19e:	91 81       	ldd	r25, Z+1	; 0x01
 1a0:	89 2f       	mov	r24, r25
 1a2:	80 52       	subi	r24, 0x20	; 32
 1a4:	82 30       	cpi	r24, 0x02	; 2
 1a6:	10 f4       	brcc	.+4      	; 0x1ac <usbFunctionSetup+0x18>
 1a8:	8f ef       	ldi	r24, 0xFF	; 255
 1aa:	08 95       	ret
		{
            return 0xff;
        /*    GET_LINE_CODING -> usbFunctionRead()    */
        /*    SET_LINE_CODING -> usbFunctionWrite()    */
        }
        if(rq->bRequest == SET_CONTROL_LINE_STATE)
 1ac:	92 32       	cpi	r25, 0x22	; 34
 1ae:	29 f4       	brne	.+10     	; 0x1ba <usbFunctionSetup+0x26>
		{
            /* Report serial state (carrier detect). On several Unix platforms,
             * tty devices can only be opened when carrier detect is set.
             */
    	    sendEmptyFrame = 1;
 1b0:	81 e0       	ldi	r24, 0x01	; 1
 1b2:	80 93 88 00 	sts	0x0088, r24
 1b6:	80 e0       	ldi	r24, 0x00	; 0
 1b8:	08 95       	ret
 1ba:	80 e0       	ldi	r24, 0x00	; 0
#endif
        }
    }

    return 0;
}
 1bc:	08 95       	ret

000001be <usbFunctionWriteOut>:
    return 1;
}


void usbFunctionWriteOut( uchar *data, uchar len )
{
 1be:	dc 01       	movw	r26, r24
    /*    usb -> rs232c:  transmit char    */
    usbDisableAllRequests();
 1c0:	8f ef       	ldi	r24, 0xFF	; 255
 1c2:	80 93 16 01 	sts	0x0116, r24
 1c6:	13 c0       	rjmp	.+38     	; 0x1ee <usbFunctionWriteOut+0x30>
    for( ; len; len-- ) 
	{
        uartTxBufAppend(*data++);
 1c8:	2c 91       	ld	r18, X

static inline void  uartTxBufAppend(uchar c)
{
uchar   uwnxt;

    uwnxt = (uwptr+1) & TX_MASK;
 1ca:	90 91 eb 00 	lds	r25, 0x00EB
 1ce:	9f 5f       	subi	r25, 0xFF	; 255
 1d0:	9f 73       	andi	r25, 0x3F	; 63
    if( uwnxt==irptr )
 1d2:	80 91 ec 00 	lds	r24, 0x00EC
 1d6:	98 17       	cp	r25, r24
 1d8:	41 f0       	breq	.+16     	; 0x1ea <usbFunctionWriteOut+0x2c>
        return;         /* buffer overflow */
    tx_buf[uwptr] = c;
 1da:	e0 91 eb 00 	lds	r30, 0x00EB
 1de:	f0 e0       	ldi	r31, 0x00	; 0
 1e0:	e6 55       	subi	r30, 0x56	; 86
 1e2:	ff 4f       	sbci	r31, 0xFF	; 255
 1e4:	20 83       	st	Z, r18
    uwptr = uwnxt;
 1e6:	90 93 eb 00 	sts	0x00EB, r25
{

⌨️ 快捷键说明

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