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