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

📄 usb_to_232.lss

📁 超简单AVRUSB软件模似串口(COMx)数据发送、接收。
💻 LSS
📖 第 1 页 / 共 4 页
字号:

usb_to_232.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000009ec  00000000  00000000  00000094  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000000e  00800060  000009ec  00000a80  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          000000ac  0080006e  0080006e  00000a8e  2**0
                  ALLOC
  3 .stab         00000378  00000000  00000000  00000a90  2**2
                  CONTENTS, READONLY, DEBUGGING
  4 .stabstr      00000071  00000000  00000000  00000e08  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_aranges 00000060  00000000  00000000  00000e79  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 000002c1  00000000  00000000  00000ed9  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   00000e8a  00000000  00000000  0000119a  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 000005ac  00000000  00000000  00002024  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   00000a17  00000000  00000000  000025d0  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_frame  00000100  00000000  00000000  00002fe8  2**2
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_str    0000049c  00000000  00000000  000030e8  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_loc    0000073e  00000000  00000000  00003584  2**0
                  CONTENTS, READONLY, DEBUGGING
 13 .debug_ranges 00000070  00000000  00000000  00003cc2  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	58 c0       	rjmp	.+176    	; 0xb2 <__ctors_end>
   2:	a5 c1       	rjmp	.+842    	; 0x34e <__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:	ec ee       	ldi	r30, 0xEC	; 236
  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:	81 c4       	rjmp	.+2306   	; 0x9ea <_exit>

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

000000ea <main>:



int main(void)
{
  ea:	88 e1       	ldi	r24, 0x18	; 24
  ec:	90 e0       	ldi	r25, 0x00	; 0
  ee:	2e e0       	ldi	r18, 0x0E	; 14
  f0:	0f b6       	in	r0, 0x3f	; 63
  f2:	f8 94       	cli
  f4:	a8 95       	wdr
  f6:	81 bd       	out	0x21, r24	; 33
  f8:	0f be       	out	0x3f, r0	; 63
  fa:	21 bd       	out	0x21, r18	; 33
    uint8_t ch;

    wdt_enable(WDTO_1S);
    usbcdc_init();
  fc:	7d d0       	rcall	.+250    	; 0x1f8 <usbcdc_init>

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

    sei();
 108:	78 94       	sei
    for(;;) 
	{
		wdt_reset();
 10a:	a8 95       	wdr
		poll();
 10c:	8d d0       	rcall	.+282    	; 0x228 <usbcdc_poll>
		GREEN_TOG();
 10e:	85 b3       	in	r24, 0x15	; 21
 110:	91 e0       	ldi	r25, 0x01	; 1
 112:	89 27       	eor	r24, r25
 114:	85 bb       	out	0x15, r24	; 21
		//AVRprog V1.4 超简单的应用范例
		//AVRUSB模似串口一定要在CM1-CM4内
		ch = getc();		//由USB接收到模似串口数据
 116:	cf d0       	rcall	.+414    	; 0x2b6 <usbcdc_getc>
		if (ch == 'S')		// get Software
 118:	83 35       	cpi	r24, 0x53	; 83
 11a:	71 f4       	brne	.+28     	; 0x138 <main+0x4e>
		{ 
			putc('A');   	// AVR ISP
 11c:	81 e4       	ldi	r24, 0x41	; 65
 11e:	e4 d0       	rcall	.+456    	; 0x2e8 <usbcdc_putc>
			putc('V');
 120:	86 e5       	ldi	r24, 0x56	; 86
 122:	e2 d0       	rcall	.+452    	; 0x2e8 <usbcdc_putc>
			putc('R');
 124:	82 e5       	ldi	r24, 0x52	; 82
 126:	e0 d0       	rcall	.+448    	; 0x2e8 <usbcdc_putc>
			putc(' ');
 128:	80 e2       	ldi	r24, 0x20	; 32
 12a:	de d0       	rcall	.+444    	; 0x2e8 <usbcdc_putc>
			putc('9');
 12c:	89 e3       	ldi	r24, 0x39	; 57
 12e:	dc d0       	rcall	.+440    	; 0x2e8 <usbcdc_putc>
			putc('1');
 130:	81 e3       	ldi	r24, 0x31	; 49
 132:	da d0       	rcall	.+436    	; 0x2e8 <usbcdc_putc>
			putc('0');
 134:	80 e3       	ldi	r24, 0x30	; 48
 136:	2b c0       	rjmp	.+86     	; 0x18e <main+0xa4>

		}
		else if (ch == 'p')	// get Programmer Type 
 138:	80 37       	cpi	r24, 0x70	; 112
 13a:	11 f4       	brne	.+4      	; 0x140 <main+0x56>
		{ 
			putc('S');		// Serial
 13c:	83 e5       	ldi	r24, 0x53	; 83
 13e:	27 c0       	rjmp	.+78     	; 0x18e <main+0xa4>
		} 
		else if (ch == 'V' || ch == 'v') // get Version 'V':sw 'v':hw
 140:	86 35       	cpi	r24, 0x56	; 86
 142:	11 f0       	breq	.+4      	; 0x148 <main+0x5e>
 144:	86 37       	cpi	r24, 0x76	; 118
 146:	41 f4       	brne	.+16     	; 0x158 <main+0x6e>
		{ 
			extmode = 0;
 148:	10 92 6e 00 	sts	0x006E, r1
			pgmmode = 0;
 14c:	10 92 6f 00 	sts	0x006F, r1
			putc('2');
 150:	82 e3       	ldi	r24, 0x32	; 50
 152:	ca d0       	rcall	.+404    	; 0x2e8 <usbcdc_putc>
			putc('4');
 154:	84 e3       	ldi	r24, 0x34	; 52
 156:	1b c0       	rjmp	.+54     	; 0x18e <main+0xa4>
		} 
		else if (ch == 'a') // Report autoincrement address
 158:	81 36       	cpi	r24, 0x61	; 97
 15a:	31 f4       	brne	.+12     	; 0x168 <main+0x7e>
		{ 
			extmode = 0;
 15c:	10 92 6e 00 	sts	0x006E, r1
			pgmmode = 0;
 160:	10 92 6f 00 	sts	0x006F, r1
			putc('Y');		// Yes!
 164:	89 e5       	ldi	r24, 0x59	; 89
 166:	13 c0       	rjmp	.+38     	; 0x18e <main+0xa4>
		}
		else if (ch == 'A') // Set Write Address
 168:	81 34       	cpi	r24, 0x41	; 65
 16a:	11 f4       	brne	.+4      	; 0x170 <main+0x86>
		{ 
			getc();			//addr_hi=getc();
 16c:	a4 d0       	rcall	.+328    	; 0x2b6 <usbcdc_getc>
 16e:	08 c0       	rjmp	.+16     	; 0x180 <main+0x96>
			getc();			//addr_lo=getc();
			putc('\r');		// ACK
		}
		else if (ch == 't') // get supported Device Types
 170:	84 37       	cpi	r24, 0x74	; 116
 172:	21 f4       	brne	.+8      	; 0x17c <main+0x92>
		{
			putc(0x20); 	// dummy 
 174:	80 e2       	ldi	r24, 0x20	; 32
 176:	b8 d0       	rcall	.+368    	; 0x2e8 <usbcdc_putc>
			putc(0);
 178:	80 e0       	ldi	r24, 0x00	; 0
 17a:	09 c0       	rjmp	.+18     	; 0x18e <main+0xa4>
		}
		else if (ch == 'T')  // set Device Types: ignore but ACK
 17c:	84 35       	cpi	r24, 0x54	; 84
 17e:	11 f4       	brne	.+4      	; 0x184 <main+0x9a>
		{
			getc();
 180:	9a d0       	rcall	.+308    	; 0x2b6 <usbcdc_getc>
 182:	04 c0       	rjmp	.+8      	; 0x18c <main+0xa2>
			putc('\r');

		} 
		else if (ch == 'x' || ch == 'y')  // Set/Clear LED
 184:	88 57       	subi	r24, 0x78	; 120
 186:	82 30       	cpi	r24, 0x02	; 2
 188:	08 f0       	brcs	.+2      	; 0x18c <main+0xa2>
 18a:	bf cf       	rjmp	.-130    	; 0x10a <main+0x20>
		{
			putc('\r'); // ACK
 18c:	8d e0       	ldi	r24, 0x0D	; 13
 18e:	ac d0       	rcall	.+344    	; 0x2e8 <usbcdc_putc>
 190:	bc cf       	rjmp	.-136    	; 0x10a <main+0x20>

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

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

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

        if( rq->bRequest==GET_LINE_CODING || rq->bRequest==SET_LINE_CODING )
 19c:	91 81       	ldd	r25, Z+1	; 0x01
 19e:	89 2f       	mov	r24, r25
 1a0:	80 52       	subi	r24, 0x20	; 32
 1a2:	82 30       	cpi	r24, 0x02	; 2
 1a4:	18 f4       	brcc	.+6      	; 0x1ac <usbFunctionSetup+0x1a>
 1a6:	8f ef       	ldi	r24, 0xFF	; 255
 1a8:	90 e0       	ldi	r25, 0x00	; 0
 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:	31 f4       	brne	.+12     	; 0x1bc <usbFunctionSetup+0x2a>
		{
            /* 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:	90 e0       	ldi	r25, 0x00	; 0
 1ba:	08 95       	ret
 1bc:	80 e0       	ldi	r24, 0x00	; 0
 1be:	90 e0       	ldi	r25, 0x00	; 0
#if USE_DCD_REPORTING
            intr3Status = 2;
#endif
        }
    }

    return 0;
}
 1c0:	08 95       	ret

000001c2 <usbFunctionWriteOut>:


/*---------------------------------------------------------------------------*/
/* usbFunctionRead                                                          */
/*---------------------------------------------------------------------------*/

uchar usbFunctionRead( uchar *data, uchar len )
{

#ifndef USE_MODEBUF
    data[0] = baud.bytes[0];
    data[1] = baud.bytes[1];
    data[2] = baud.bytes[2];
    data[3] = baud.bytes[3];
    data[4] = stopbit;
    data[5] = parity;
    data[6] = databit;
#else
    memcpy(data, modeBuffer, 7);
#endif

    return 7;
}


/*---------------------------------------------------------------------------*/
/* usbFunctionWrite                                                          */
/*---------------------------------------------------------------------------*/

uchar usbFunctionWrite( uchar *data, uchar len )
{

#ifndef USE_MODEBUF
    /*   SET_LINE_CODING    */
    baud.bytes[0] = data[0];
    baud.bytes[1] = data[1];
    baud.bytes[2] = data[2];
    baud.bytes[3] = data[3];

    //resetUart();
#else
    usbTxPacketCnt1 = 1;    /* enforce DATA0 token for next transfer */
    //iwptr = urptr;
    //irptr = uwptr;
    sendEmptyFrame = 1;
    memcpy(modeBuffer, data, 7);
#endif

    return 1;
}


void usbFunctionWriteOut( uchar *data, uchar len )
{
 1c2:	dc 01       	movw	r26, r24
    /*    usb -> rs232c:  transmit char    */
    usbDisableAllRequests();
 1c4:	8f ef       	ldi	r24, 0xFF	; 255
 1c6:	80 93 16 01 	sts	0x0116, r24
 1ca:	13 c0       	rjmp	.+38     	; 0x1f2 <usbFunctionWriteOut+0x30>
    for( ; len; len-- ) 
	{
        uartTxBufAppend(*data++);
 1cc:	2c 91       	ld	r18, X
 1ce:	90 91 eb 00 	lds	r25, 0x00EB
 1d2:	9f 5f       	subi	r25, 0xFF	; 255
 1d4:	9f 73       	andi	r25, 0x3F	; 63
 1d6:	80 91 ec 00 	lds	r24, 0x00EC
 1da:	98 17       	cp	r25, r24
 1dc:	41 f0       	breq	.+16     	; 0x1ee <usbFunctionWriteOut+0x2c>
 1de:	e0 91 eb 00 	lds	r30, 0x00EB

⌨️ 快捷键说明

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