📄 usb_to_232.lss
字号:
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 + -