📄 main.c.lss
字号:
main.c.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000cb8 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000080 00800060 00000cb8 00000d4c 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000005a 008000e0 008000e0 00000dcc 2**0
ALLOC
3 .noinit 00000000 0080013a 0080013a 00000dcc 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00000dcc 2**0
CONTENTS
5 .stab 000029a0 00000000 00000000 00000dcc 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 000019d5 00000000 00000000 0000376c 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54 <__ctors_end>
4: 0c 94 78 00 jmp 0xf0 <__vector_1>
8: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
10: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
14: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
18: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
1c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
20: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
24: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
28: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
2c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
30: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
34: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
38: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
3c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
40: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
44: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
48: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
4c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
50: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
00000054 <__ctors_end>:
54: 11 24 eor r1, r1
56: 1f be out 0x3f, r1 ; 63
58: cf e5 ldi r28, 0x5F ; 95
5a: d4 e0 ldi r29, 0x04 ; 4
5c: de bf out 0x3e, r29 ; 62
5e: cd bf out 0x3d, r28 ; 61
00000060 <__do_copy_data>:
60: 10 e0 ldi r17, 0x00 ; 0
62: a0 e6 ldi r26, 0x60 ; 96
64: b0 e0 ldi r27, 0x00 ; 0
66: e8 eb ldi r30, 0xB8 ; 184
68: fc e0 ldi r31, 0x0C ; 12
6a: 02 c0 rjmp .+4 ; 0x70 <.do_copy_data_start>
0000006c <.do_copy_data_loop>:
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
00000070 <.do_copy_data_start>:
70: a0 3e cpi r26, 0xE0 ; 224
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c <.do_copy_data_loop>
00000076 <__do_clear_bss>:
76: 11 e0 ldi r17, 0x01 ; 1
78: a0 ee ldi r26, 0xE0 ; 224
7a: b0 e0 ldi r27, 0x00 ; 0
7c: 01 c0 rjmp .+2 ; 0x80 <.do_clear_bss_start>
0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1
00000080 <.do_clear_bss_start>:
80: aa 33 cpi r26, 0x3A ; 58
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0c 94 da 00 jmp 0x1b4 <main>
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0 <__vectors>
0000008e <LED>:
#define MCU_D12_CS_1() PORTB|=(1<<CS_N)
#define LEDon() PORTB&=~(1<<PB1)
#define LEDoff() PORTB|=(1<<PB1)
void LED(void)
{
8e: 8f ef ldi r24, 0xFF ; 255
while(1)
{
PORTC=0xff;
90: 85 bb out 0x15, r24 ; 21
92: fe cf rjmp .-4 ; 0x90 <LED+0x2>
00000094 <IO_Init>:
}
}
void IO_Init(void)
{
DDRB=(1<<CS_N)|(1<<RD_N)|(1<<WR_N)|(1<<RESET_N)|(1<<ALE);
94: 88 ef ldi r24, 0xF8 ; 248
96: 87 bb out 0x17, r24 ; 23
PORTB=(1<<CS_N)|(1<<RD_N)|(1<<WR_N)|(1<<RESET_N)|(1<<ALE);
98: 88 bb out 0x18, r24 ; 24
DDRD=(0<<INT_N)|(1<<TXD232);
9a: 82 e0 ldi r24, 0x02 ; 2
9c: 81 bb out 0x11, r24 ; 17
DDRC=0xff;
9e: 8f ef ldi r24, 0xFF ; 255
a0: 84 bb out 0x14, r24 ; 20
PORTC=0;
a2: 15 ba out 0x15, r1 ; 21
a4: 08 95 ret
000000a6 <USART_Init>:
}
//USART初始化
void USART_Init(void)
{
/*设置波特率*/
UCSRA = 0x00;
a6: 1b b8 out 0x0b, r1 ; 11
//*接收器与发送器使能,接收结束中断使能*/
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
a8: 88 e9 ldi r24, 0x98 ; 152
aa: 8a b9 out 0x0a, r24 ; 10
/*设置帧格式:8个数据位,1个停止位,偶校验位*/
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)|(1<<UPM1);
ac: 86 ea ldi r24, 0xA6 ; 166
ae: 80 bd out 0x20, r24 ; 32
UBRRH =(F_IO/baud/16-1)/256;
b0: 83 e0 ldi r24, 0x03 ; 3
b2: 80 bd out 0x20, r24 ; 32
UBRRL =(F_IO/baud/16-1)%256;
b4: 80 e4 ldi r24, 0x40 ; 64
b6: 89 b9 out 0x09, r24 ; 9
b8: 08 95 ret
000000ba <put_c>:
}
//串口发送数据
void put_c(unsigned char cData) //发送采用查询方式
{
while( !(UCSRA & (1<<UDRE)) );
ba: 5d 9b sbis 0x0b, 5 ; 11
bc: fe cf rjmp .-4 ; 0xba <put_c>
UDR=cData;
be: 8c b9 out 0x0c, r24 ; 12
c0: 08 95 ret
000000c2 <put_s>:
}
void put_s(unsigned char *ptr)
{
c2: cf 93 push r28
c4: df 93 push r29
c6: ec 01 movw r28, r24
while (*ptr)
{
put_c(*ptr++);
c8: 88 81 ld r24, Y
ca: 88 23 and r24, r24
cc: 21 f0 breq .+8 ; 0xd6 <put_s+0x14>
ce: 89 91 ld r24, Y+
d0: 0e 94 5d 00 call 0xba <put_c>
d4: f9 cf rjmp .-14 ; 0xc8 <put_s+0x6>
}
put_c(0x0D);
d6: 8d e0 ldi r24, 0x0D ; 13
d8: 0e 94 5d 00 call 0xba <put_c>
put_c(0x0A); //结尾发送回车换行
dc: 8a e0 ldi r24, 0x0A ; 10
de: 0e 94 5d 00 call 0xba <put_c>
e2: df 91 pop r29
e4: cf 91 pop r28
e6: 08 95 ret
000000e8 <Inter_Init>:
}
//中断初始化
void Inter_Init(void)
{
MCUCR=0; //int0低电平中断
e8: 15 be out 0x35, r1 ; 53
GICR=(1<<INT0);
ea: 80 e4 ldi r24, 0x40 ; 64
ec: 8b bf out 0x3b, r24 ; 59
ee: 08 95 ret
000000f0 <__vector_1>:
}
SIGNAL(SIG_INTERRUPT0)
{
f0: 1f 92 push r1
f2: 0f 92 push r0
f4: 0f b6 in r0, 0x3f ; 63
f6: 0f 92 push r0
f8: 11 24 eor r1, r1
fa: 2f 93 push r18
fc: 3f 93 push r19
fe: 4f 93 push r20
100: 5f 93 push r21
102: 6f 93 push r22
104: 7f 93 push r23
106: 8f 93 push r24
108: 9f 93 push r25
10a: af 93 push r26
10c: bf 93 push r27
10e: ef 93 push r30
110: ff 93 push r31
fn_usb_isr();
112: 0e 94 c9 03 call 0x792 <fn_usb_isr>
116: ff 91 pop r31
118: ef 91 pop r30
11a: bf 91 pop r27
11c: af 91 pop r26
11e: 9f 91 pop r25
120: 8f 91 pop r24
122: 7f 91 pop r23
124: 6f 91 pop r22
126: 5f 91 pop r21
128: 4f 91 pop r20
12a: 3f 91 pop r19
12c: 2f 91 pop r18
12e: 0f 90 pop r0
130: 0f be out 0x3f, r0 ; 63
132: 0f 90 pop r0
134: 1f 90 pop r1
136: 18 95 reti
00000138 <disconnect_USB>:
}
void main(void)
{
IO_Init();
USART_Init();
Inter_Init();
bEPPflags.value=0; //清除事件标志寄存器bEPPflags
reconnect_USB();
sei();
while(1)
{
if (bEPPflags.bits.bus_reset) //总线复位处理
{
bEPPflags.bits.bus_reset = 0; //清标志
}
if (bEPPflags.bits.suspend) //总线挂起处理
{
bEPPflags.bits.suspend= 0; //清标志
}
if (bEPPflags.bits.setup_packet) //协议处理
{
bEPPflags.bits.setup_packet = 0; //清标志
control_handler();
}
}
}
//断开USB总线
void disconnect_USB(void)
{
//初始化D12工作状态,断开Soft Connect上拉电阻
D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
138: 65 e4 ldi r22, 0x45 ; 69
13a: 82 e0 ldi r24, 0x02 ; 2
13c: 0e 94 4b 01 call 0x296 <D12_SetMode>
140: 08 95 ret
00000142 <connect_USB>:
}
//连接USB总线
void connect_USB(void)
{
DISABLE;
142: f8 94 cli
bEPPflags.value=0; //清除事件标志
144: 10 92 23 01 sts 0x0123, r1
148: 10 92 22 01 sts 0x0122, r1
ENABLE;
14c: 78 94 sei
//初始化D12工作状态,接通Soft Connect上拉电阻
D12_SetDMA(0);
14e: 80 e0 ldi r24, 0x00 ; 0
150: 0e 94 66 01 call 0x2cc <D12_SetDMA>
D12_SetMode(D12_NOLAZYCLOCK | D12_SOFTCONNECT,D12_SETTOONE | D12_CLOCK_12M );
154: 65 e4 ldi r22, 0x45 ; 69
156: 82 e1 ldi r24, 0x12 ; 18
158: 0e 94 4b 01 call 0x296 <D12_SetMode>
15c: 08 95 ret
0000015e <reconnect_USB>:
}
//重新连接到USB
void reconnect_USB(void)
{
unsigned long clk_cnt;
disconnect_USB();
15e: 0e 94 9c 00 call 0x138 <disconnect_USB>
162: 8f e4 ldi r24, 0x4F ; 79
164: 93 ec ldi r25, 0xC3 ; 195
166: a0 e0 ldi r26, 0x00 ; 0
168: b0 e0 ldi r27, 0x00 ; 0
for(clk_cnt=0;clk_cnt<50000;clk_cnt++);
16a: c2 97 sbiw r24, 0x32 ; 50
16c: a1 09 sbc r26, r1
16e: b1 09 sbc r27, r1
170: b7 ff sbrs r27, 7
172: fb cf rjmp .-10 ; 0x16a <reconnect_USB+0xc>
connect_USB();
174: 0e 94 a1 00 call 0x142 <connect_USB>
178: 08 95 ret
0000017a <control_handler>:
}
//USB处理子程序
void control_handler(void)
{
unsigned char type,req;
type=ControlData.DeviceRequest.bmRequestType & USB_REQUSET_TYPE_MASK;
17a: 80 91 24 01 lds r24, 0x0124
17e: 80 76 andi r24, 0x60 ; 96
req=ControlData.DeviceRequest.bRequest & USB_REQUSET_MASK;
180: e0 91 25 01 lds r30, 0x0125
184: ef 70 andi r30, 0x0F ; 15
// put_c(req);
if(type == USB_STANDERD_REQUEST)
186: 88 23 and r24, r24
188: 31 f4 brne .+12 ; 0x196 <control_handler+0x1c>
(*StandardDeviceRequest[req])();
18a: ff 27 eor r31, r31
18c: ee 0f add r30, r30
18e: ff 1f adc r31, r31
190: e0 56 subi r30, 0x60 ; 96
192: ff 4f sbci r31, 0xFF ; 255
194: 07 c0 rjmp .+14 ; 0x1a4 <control_handler+0x2a>
else
if(type==USB_VENDOR_REQUEST)
196: 80 34 cpi r24, 0x40 ; 64
198: 51 f4 brne .+20 ; 0x1ae <control_handler+0x34>
(*VendorDeviceRequest[req])();
19a: ff 27 eor r31, r31
19c: ee 0f add r30, r30
19e: ff 1f adc r31, r31
1a0: e0 54 subi r30, 0x40 ; 64
1a2: ff 4f sbci r31, 0xFF ; 255
1a4: 01 90 ld r0, Z+
1a6: f0 81 ld r31, Z
1a8: e0 2d mov r30, r0
1aa: 09 95 icall
1ac: 08 95 ret
else
stall_ep0();
1ae: 0e 94 aa 02 call 0x554 <stall_ep0>
1b2: 08 95 ret
000001b4 <main>:
1b4: cf e5 ldi r28, 0x5F ; 95
1b6: d4 e0 ldi r29, 0x04 ; 4
1b8: de bf out 0x3e, r29 ; 62
1ba: cd bf out 0x3d, r28 ; 61
1bc: 0e 94 4a 00 call 0x94 <IO_Init>
1c0: 0e 94 53 00 call 0xa6 <USART_Init>
1c4: 0e 94 74 00 call 0xe8 <Inter_Init>
1c8: 10 92 23 01 sts 0x0123, r1
1cc: 10 92 22 01 sts 0x0122, r1
1d0: 0e 94 af 00 call 0x15e <reconnect_USB>
1d4: 78 94 sei
1d6: 80 91 22 01 lds r24, 0x0122
1da: 81 ff sbrs r24, 1
1dc: 03 c0 rjmp .+6 ; 0x1e4 <main+0x30>
1de: 8d 7f andi r24, 0xFD ; 253
1e0: 80 93 22 01 sts 0x0122, r24
1e4: 80 91 22 01 lds r24, 0x0122
1e8: 82 ff sbrs r24, 2
1ea: 03 c0 rjmp .+6 ; 0x1f2 <main+0x3e>
1ec: 8b 7f andi r24, 0xFB ; 251
1ee: 80 93 22 01 sts 0x0122, r24
1f2: 80 91 22 01 lds r24, 0x0122
1f6: 83 ff sbrs r24, 3
1f8: ee cf rjmp .-36 ; 0x1d6 <main+0x22>
1fa: 87 7f andi r24, 0xF7 ; 247
1fc: 80 93 22 01 sts 0x0122, r24
200: 0e 94 bd 00 call 0x17a <control_handler>
204: e8 cf rjmp .-48 ; 0x1d6 <main+0x22>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -