📄 at90can128_uart.lss
字号:
at90can128_uart.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000002d6 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .bss 00000004 00800100 00800100 0000034a 2**0
ALLOC
2 .stab 00000414 00000000 00000000 0000034c 2**2
CONTENTS, READONLY, DEBUGGING
3 .stabstr 00000071 00000000 00000000 00000760 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_aranges 00000020 00000000 00000000 000007d1 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_pubnames 0000005a 00000000 00000000 000007f1 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_info 0000022b 00000000 00000000 0000084b 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_abbrev 0000009e 00000000 00000000 00000a76 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_line 00000168 00000000 00000000 00000b14 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_frame 00000060 00000000 00000000 00000c7c 2**2
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 4a 00 jmp 0x94 ; 0x94 <__ctors_end>
4: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
8: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
c: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
10: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
14: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
18: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
1c: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
20: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
24: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
28: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
2c: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
30: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
34: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
38: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
3c: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
40: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
44: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
48: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
4c: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
50: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
54: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
58: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
5c: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
60: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
64: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
68: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
6c: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
70: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
74: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
78: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
7c: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
80: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
84: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
88: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
8c: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
90: 0c 94 69 00 jmp 0xd2 ; 0xd2 <__bad_interrupt>
00000094 <__ctors_end>:
94: 11 24 eor r1, r1
96: 1f be out 0x3f, r1 ; 63
98: cf ef ldi r28, 0xFF ; 255
9a: d0 e1 ldi r29, 0x10 ; 16
9c: de bf out 0x3e, r29 ; 62
9e: cd bf out 0x3d, r28 ; 61
000000a0 <__do_copy_data>:
a0: 11 e0 ldi r17, 0x01 ; 1
a2: a0 e0 ldi r26, 0x00 ; 0
a4: b1 e0 ldi r27, 0x01 ; 1
a6: e6 ed ldi r30, 0xD6 ; 214
a8: f2 e0 ldi r31, 0x02 ; 2
aa: 00 e0 ldi r16, 0x00 ; 0
ac: 0b bf out 0x3b, r16 ; 59
ae: 02 c0 rjmp .+4 ; 0xb4 <__do_copy_data+0x14>
b0: 07 90 elpm r0, Z+
b2: 0d 92 st X+, r0
b4: a0 30 cpi r26, 0x00 ; 0
b6: b1 07 cpc r27, r17
b8: d9 f7 brne .-10 ; 0xb0 <__do_copy_data+0x10>
000000ba <__do_clear_bss>:
ba: 11 e0 ldi r17, 0x01 ; 1
bc: a0 e0 ldi r26, 0x00 ; 0
be: b1 e0 ldi r27, 0x01 ; 1
c0: 01 c0 rjmp .+2 ; 0xc4 <.do_clear_bss_start>
000000c2 <.do_clear_bss_loop>:
c2: 1d 92 st X+, r1
000000c4 <.do_clear_bss_start>:
c4: a4 30 cpi r26, 0x04 ; 4
c6: b1 07 cpc r27, r17
c8: e1 f7 brne .-8 ; 0xc2 <.do_clear_bss_loop>
ca: 0e 94 23 01 call 0x246 ; 0x246 <main>
ce: 0c 94 6a 01 jmp 0x2d4 ; 0x2d4 <_exit>
000000d2 <__bad_interrupt>:
d2: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000d6 <PORT_Init>:
#define __AVR_ATMEGA128__ 1
#define OSCSPEED 16000000 /* in Hz */
void PORT_Init()
{
d6: cf 93 push r28
d8: df 93 push r29
da: cd b7 in r28, 0x3d ; 61
dc: de b7 in r29, 0x3e ; 62
//PORTA = 0b00000000; DDRA = 0b01000000; //Relay set as output (Bit6 = 1)
PORTB = 0b00000000; DDRB = 0b00000000;
de: e5 e2 ldi r30, 0x25 ; 37
e0: f0 e0 ldi r31, 0x00 ; 0
e2: 10 82 st Z, r1
e4: e4 e2 ldi r30, 0x24 ; 36
e6: f0 e0 ldi r31, 0x00 ; 0
e8: 10 82 st Z, r1
PORTC = 0b00000000; DDRC = 0b00000111;
ea: e8 e2 ldi r30, 0x28 ; 40
ec: f0 e0 ldi r31, 0x00 ; 0
ee: 10 82 st Z, r1
f0: e7 e2 ldi r30, 0x27 ; 39
f2: f0 e0 ldi r31, 0x00 ; 0
f4: 87 e0 ldi r24, 0x07 ; 7
f6: 80 83 st Z, r24
//PORTD = 0b11000000; DDRD = 0b00001000;
PORTE = 0b00000000; DDRE = 0b0000010; //TX set as output (Bit1 = 1)
f8: ee e2 ldi r30, 0x2E ; 46
fa: f0 e0 ldi r31, 0x00 ; 0
fc: 10 82 st Z, r1
fe: ed e2 ldi r30, 0x2D ; 45
100: f0 e0 ldi r31, 0x00 ; 0
102: 82 e0 ldi r24, 0x02 ; 2
104: 80 83 st Z, r24
PORTF = 0b00000000; DDRF = 0b00000000;
106: e1 e3 ldi r30, 0x31 ; 49
108: f0 e0 ldi r31, 0x00 ; 0
10a: 10 82 st Z, r1
10c: e0 e3 ldi r30, 0x30 ; 48
10e: f0 e0 ldi r31, 0x00 ; 0
110: 10 82 st Z, r1
112: df 91 pop r29
114: cf 91 pop r28
116: 08 95 ret
00000118 <UART_Init>:
}
void UART_Init(uint32_t Baud)
{
118: cf 93 push r28
11a: df 93 push r29
11c: cd b7 in r28, 0x3d ; 61
11e: de b7 in r29, 0x3e ; 62
120: 26 97 sbiw r28, 0x06 ; 6
122: 0f b6 in r0, 0x3f ; 63
124: f8 94 cli
126: de bf out 0x3e, r29 ; 62
128: 0f be out 0x3f, r0 ; 63
12a: cd bf out 0x3d, r28 ; 61
12c: 6b 83 std Y+3, r22 ; 0x03
12e: 7c 83 std Y+4, r23 ; 0x04
130: 8d 83 std Y+5, r24 ; 0x05
132: 9e 83 std Y+6, r25 ; 0x06
unsigned int BaudRate = OSCSPEED / (16 * Baud) - 1; /* as per pg. 173 of the user manual */
134: 8b 81 ldd r24, Y+3 ; 0x03
136: 9c 81 ldd r25, Y+4 ; 0x04
138: ad 81 ldd r26, Y+5 ; 0x05
13a: be 81 ldd r27, Y+6 ; 0x06
13c: 88 0f add r24, r24
13e: 99 1f adc r25, r25
140: aa 1f adc r26, r26
142: bb 1f adc r27, r27
144: 88 0f add r24, r24
146: 99 1f adc r25, r25
148: aa 1f adc r26, r26
14a: bb 1f adc r27, r27
14c: 88 0f add r24, r24
14e: 99 1f adc r25, r25
150: aa 1f adc r26, r26
152: bb 1f adc r27, r27
154: 88 0f add r24, r24
156: 99 1f adc r25, r25
158: aa 1f adc r26, r26
15a: bb 1f adc r27, r27
15c: 9c 01 movw r18, r24
15e: ad 01 movw r20, r26
160: 80 e0 ldi r24, 0x00 ; 0
162: 94 e2 ldi r25, 0x24 ; 36
164: a4 ef ldi r26, 0xF4 ; 244
166: b0 e0 ldi r27, 0x00 ; 0
168: bc 01 movw r22, r24
16a: cd 01 movw r24, r26
16c: 0e 94 48 01 call 0x290 ; 0x290 <__udivmodsi4>
170: da 01 movw r26, r20
172: c9 01 movw r24, r18
174: 01 97 sbiw r24, 0x01 ; 1
176: 9a 83 std Y+2, r25 ; 0x02
178: 89 83 std Y+1, r24 ; 0x01
//set BaudRate to registers UBRR1H and UBRR1L
UBRR0H = (unsigned char) (BaudRate>>8);
17a: e5 ec ldi r30, 0xC5 ; 197
17c: f0 e0 ldi r31, 0x00 ; 0
17e: 89 81 ldd r24, Y+1 ; 0x01
180: 9a 81 ldd r25, Y+2 ; 0x02
182: 89 2f mov r24, r25
184: 99 27 eor r25, r25
186: 80 83 st Z, r24
UBRR0L = (unsigned char) BaudRate;
188: e4 ec ldi r30, 0xC4 ; 196
18a: f0 e0 ldi r31, 0x00 ; 0
18c: 89 81 ldd r24, Y+1 ; 0x01
18e: 80 83 st Z, r24
UCSR0B = UCSR0B | 0b00011000; //enable Receiver and Transmitter (Bit3 = 1, Bit4 = 1)
190: a1 ec ldi r26, 0xC1 ; 193
192: b0 e0 ldi r27, 0x00 ; 0
194: e1 ec ldi r30, 0xC1 ; 193
196: f0 e0 ldi r31, 0x00 ; 0
198: 80 81 ld r24, Z
19a: 88 61 ori r24, 0x18 ; 24
19c: 8c 93 st X, r24
UCSR0C = UCSR0C | 0b10000110; //Set frame format: disabled parity, 8 data (Bit1 = 1, Bit2 = 1), 1 stop bit (Bit3 = 0)
19e: a2 ec ldi r26, 0xC2 ; 194
1a0: b0 e0 ldi r27, 0x00 ; 0
1a2: e2 ec ldi r30, 0xC2 ; 194
1a4: f0 e0 ldi r31, 0x00 ; 0
1a6: 80 81 ld r24, Z
1a8: 86 68 ori r24, 0x86 ; 134
1aa: 8c 93 st X, r24
1ac: 26 96 adiw r28, 0x06 ; 6
1ae: 0f b6 in r0, 0x3f ; 63
1b0: f8 94 cli
1b2: de bf out 0x3e, r29 ; 62
1b4: 0f be out 0x3f, r0 ; 63
1b6: cd bf out 0x3d, r28 ; 61
1b8: df 91 pop r29
1ba: cf 91 pop r28
1bc: 08 95 ret
000001be <UART_Receive>:
}
unsigned char UART_Receive()
{
1be: cf 93 push r28
1c0: df 93 push r29
1c2: cd b7 in r28, 0x3d ; 61
1c4: de b7 in r29, 0x3e ; 62
1c6: 22 97 sbiw r28, 0x02 ; 2
1c8: 0f b6 in r0, 0x3f ; 63
1ca: f8 94 cli
1cc: de bf out 0x3e, r29 ; 62
1ce: 0f be out 0x3f, r0 ; 63
1d0: cd bf out 0x3d, r28 ; 61
if (UCSR0A & 0b10000000) //if there is unreaded data
1d2: e0 ec ldi r30, 0xC0 ; 192
1d4: f0 e0 ldi r31, 0x00 ; 0
1d6: 80 81 ld r24, Z
1d8: 88 23 and r24, r24
1da: 44 f4 brge .+16 ; 0x1ec <UART_Receive+0x2e>
return UDR0;
1dc: e6 ec ldi r30, 0xC6 ; 198
1de: f0 e0 ldi r31, 0x00 ; 0
1e0: 80 81 ld r24, Z
1e2: 28 2f mov r18, r24
1e4: 33 27 eor r19, r19
1e6: 3a 83 std Y+2, r19 ; 0x02
1e8: 29 83 std Y+1, r18 ; 0x01
1ea: 02 c0 rjmp .+4 ; 0x1f0 <UART_Receive+0x32>
else //no unreaded data
return 0;
1ec: 1a 82 std Y+2, r1 ; 0x02
1ee: 19 82 std Y+1, r1 ; 0x01
1f0: 89 81 ldd r24, Y+1 ; 0x01
1f2: 9a 81 ldd r25, Y+2 ; 0x02
1f4: 22 96 adiw r28, 0x02 ; 2
1f6: 0f b6 in r0, 0x3f ; 63
1f8: f8 94 cli
1fa: de bf out 0x3e, r29 ; 62
1fc: 0f be out 0x3f, r0 ; 63
1fe: cd bf out 0x3d, r28 ; 61
200: df 91 pop r29
202: cf 91 pop r28
204: 08 95 ret
00000206 <UART_Transmit>:
}
void UART_Transmit(unsigned char data)
{
206: cf 93 push r28
208: df 93 push r29
20a: cd b7 in r28, 0x3d ; 61
20c: de b7 in r29, 0x3e ; 62
20e: 21 97 sbiw r28, 0x01 ; 1
210: 0f b6 in r0, 0x3f ; 63
212: f8 94 cli
214: de bf out 0x3e, r29 ; 62
216: 0f be out 0x3f, r0 ; 63
218: cd bf out 0x3d, r28 ; 61
21a: 89 83 std Y+1, r24 ; 0x01
while (!(UCSR0A & 0b00100000)); //waiting until buffer is ready to receive
21c: e0 ec ldi r30, 0xC0 ; 192
21e: f0 e0 ldi r31, 0x00 ; 0
220: 80 81 ld r24, Z
222: 99 27 eor r25, r25
224: 80 72 andi r24, 0x20 ; 32
226: 90 70 andi r25, 0x00 ; 0
228: 00 97 sbiw r24, 0x00 ; 0
22a: c1 f3 breq .-16 ; 0x21c <UART_Transmit+0x16>
UDR0 = data;
22c: e6 ec ldi r30, 0xC6 ; 198
22e: f0 e0 ldi r31, 0x00 ; 0
230: 89 81 ldd r24, Y+1 ; 0x01
232: 80 83 st Z, r24
234: 21 96 adiw r28, 0x01 ; 1
236: 0f b6 in r0, 0x3f ; 63
238: f8 94 cli
23a: de bf out 0x3e, r29 ; 62
23c: 0f be out 0x3f, r0 ; 63
23e: cd bf out 0x3d, r28 ; 61
240: df 91 pop r29
242: cf 91 pop r28
244: 08 95 ret
00000246 <main>:
}
int main()
{
246: cf 93 push r28
248: df 93 push r29
24a: cd b7 in r28, 0x3d ; 61
24c: de b7 in r29, 0x3e ; 62
static int uart_flag=0;
static unsigned char Ch1,Ch2;
PORT_Init();
24e: 0e 94 6b 00 call 0xd6 ; 0xd6 <PORT_Init>
UART_Init(9600);
252: 60 e8 ldi r22, 0x80 ; 128
254: 75 e2 ldi r23, 0x25 ; 37
256: 80 e0 ldi r24, 0x00 ; 0
258: 90 e0 ldi r25, 0x00 ; 0
25a: 0e 94 8c 00 call 0x118 ; 0x118 <UART_Init>
25e: 00 c0 rjmp .+0 ; 0x260 <main+0x1a>
while (1)
{
Ch1='0';
260: 80 e3 ldi r24, 0x30 ; 48
262: 80 93 01 01 sts 0x0101, r24
UART_Transmit(Ch1);
266: 80 91 01 01 lds r24, 0x0101
26a: 0e 94 03 01 call 0x206 ; 0x206 <UART_Transmit>
Ch2 = UART_Receive();
26e: 0e 94 df 00 call 0x1be ; 0x1be <UART_Receive>
272: 80 93 00 01 sts 0x0100, r24
if (Ch1==Ch2)
276: 90 91 01 01 lds r25, 0x0101
27a: 80 91 00 01 lds r24, 0x0100
27e: 98 17 cp r25, r24
280: 79 f7 brne .-34 ; 0x260 <main+0x1a>
{
uart_flag=1;
282: 81 e0 ldi r24, 0x01 ; 1
284: 90 e0 ldi r25, 0x00 ; 0
286: 90 93 03 01 sts 0x0103, r25
28a: 80 93 02 01 sts 0x0102, r24
}
}
28e: e8 cf rjmp .-48 ; 0x260 <main+0x1a>
00000290 <__udivmodsi4>:
290: a1 e2 ldi r26, 0x21 ; 33
292: 1a 2e mov r1, r26
294: aa 1b sub r26, r26
296: bb 1b sub r27, r27
298: fd 01 movw r30, r26
29a: 0d c0 rjmp .+26 ; 0x2b6 <__udivmodsi4_ep>
0000029c <__udivmodsi4_loop>:
29c: aa 1f adc r26, r26
29e: bb 1f adc r27, r27
2a0: ee 1f adc r30, r30
2a2: ff 1f adc r31, r31
2a4: a2 17 cp r26, r18
2a6: b3 07 cpc r27, r19
2a8: e4 07 cpc r30, r20
2aa: f5 07 cpc r31, r21
2ac: 20 f0 brcs .+8 ; 0x2b6 <__udivmodsi4_ep>
2ae: a2 1b sub r26, r18
2b0: b3 0b sbc r27, r19
2b2: e4 0b sbc r30, r20
2b4: f5 0b sbc r31, r21
000002b6 <__udivmodsi4_ep>:
2b6: 66 1f adc r22, r22
2b8: 77 1f adc r23, r23
2ba: 88 1f adc r24, r24
2bc: 99 1f adc r25, r25
2be: 1a 94 dec r1
2c0: 69 f7 brne .-38 ; 0x29c <__udivmodsi4_loop>
2c2: 60 95 com r22
2c4: 70 95 com r23
2c6: 80 95 com r24
2c8: 90 95 com r25
2ca: 9b 01 movw r18, r22
2cc: ac 01 movw r20, r24
2ce: bd 01 movw r22, r26
2d0: cf 01 movw r24, r30
2d2: 08 95 ret
000002d4 <_exit>:
2d4: ff cf rjmp .-2 ; 0x2d4 <_exit>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -