0,0 → 1,777 |
|
main.elf: file format elf32-avr |
|
Sections: |
Idx Name Size VMA LMA File off Algn |
0 .text 0000047e 00000000 00000000 00000094 2**1 |
CONTENTS, ALLOC, LOAD, READONLY, CODE |
1 .data 00000002 00800060 0000047e 00000512 2**0 |
CONTENTS, ALLOC, LOAD, DATA |
2 .bss 000000ea 00800062 00800062 00000514 2**0 |
ALLOC |
3 .stab 00000378 00000000 00000000 00000514 2**2 |
CONTENTS, READONLY, DEBUGGING |
4 .stabstr 00000071 00000000 00000000 0000088c 2**0 |
CONTENTS, READONLY, DEBUGGING |
5 .debug_aranges 00000020 00000000 00000000 000008fd 2**0 |
CONTENTS, READONLY, DEBUGGING |
6 .debug_pubnames 0000011d 00000000 00000000 0000091d 2**0 |
CONTENTS, READONLY, DEBUGGING |
7 .debug_info 000003bf 00000000 00000000 00000a3a 2**0 |
CONTENTS, READONLY, DEBUGGING |
8 .debug_abbrev 0000011c 00000000 00000000 00000df9 2**0 |
CONTENTS, READONLY, DEBUGGING |
9 .debug_line 00000367 00000000 00000000 00000f15 2**0 |
CONTENTS, READONLY, DEBUGGING |
10 .debug_frame 00000070 00000000 00000000 0000127c 2**2 |
CONTENTS, READONLY, DEBUGGING |
11 .debug_str 000001dc 00000000 00000000 000012ec 2**0 |
CONTENTS, READONLY, DEBUGGING |
12 .debug_loc 00000220 00000000 00000000 000014c8 2**0 |
CONTENTS, READONLY, DEBUGGING |
Disassembly of section .text: |
|
00000000 <__vectors>: |
0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end> |
2: 2c c0 rjmp .+88 ; 0x5c <__bad_interrupt> |
4: 2b c0 rjmp .+86 ; 0x5c <__bad_interrupt> |
6: 2a c0 rjmp .+84 ; 0x5c <__bad_interrupt> |
8: 29 c0 rjmp .+82 ; 0x5c <__bad_interrupt> |
a: 28 c0 rjmp .+80 ; 0x5c <__bad_interrupt> |
c: 27 c0 rjmp .+78 ; 0x5c <__bad_interrupt> |
e: 26 c0 rjmp .+76 ; 0x5c <__bad_interrupt> |
10: 25 c0 rjmp .+74 ; 0x5c <__bad_interrupt> |
12: 24 c0 rjmp .+72 ; 0x5c <__bad_interrupt> |
14: 23 c0 rjmp .+70 ; 0x5c <__bad_interrupt> |
16: 5c c0 rjmp .+184 ; 0xd0 <__vector_11> |
18: 21 c0 rjmp .+66 ; 0x5c <__bad_interrupt> |
1a: 25 c0 rjmp .+74 ; 0x66 <__vector_13> |
1c: 1f c0 rjmp .+62 ; 0x5c <__bad_interrupt> |
1e: 1e c0 rjmp .+60 ; 0x5c <__bad_interrupt> |
20: 1d c0 rjmp .+58 ; 0x5c <__bad_interrupt> |
22: 1c c0 rjmp .+56 ; 0x5c <__bad_interrupt> |
24: 1b c0 rjmp .+54 ; 0x5c <__bad_interrupt> |
|
00000026 <__ctors_end>: |
26: 11 24 eor r1, r1 |
28: 1f be out 0x3f, r1 ; 63 |
2a: cf e5 ldi r28, 0x5F ; 95 |
2c: d4 e0 ldi r29, 0x04 ; 4 |
2e: de bf out 0x3e, r29 ; 62 |
30: cd bf out 0x3d, r28 ; 61 |
|
00000032 <__do_copy_data>: |
32: 10 e0 ldi r17, 0x00 ; 0 |
34: a0 e6 ldi r26, 0x60 ; 96 |
36: b0 e0 ldi r27, 0x00 ; 0 |
38: ee e7 ldi r30, 0x7E ; 126 |
3a: f4 e0 ldi r31, 0x04 ; 4 |
3c: 02 c0 rjmp .+4 ; 0x42 <.do_copy_data_start> |
|
0000003e <.do_copy_data_loop>: |
3e: 05 90 lpm r0, Z+ |
40: 0d 92 st X+, r0 |
|
00000042 <.do_copy_data_start>: |
42: a2 36 cpi r26, 0x62 ; 98 |
44: b1 07 cpc r27, r17 |
46: d9 f7 brne .-10 ; 0x3e <__SP_H__> |
|
00000048 <__do_clear_bss>: |
48: 11 e0 ldi r17, 0x01 ; 1 |
4a: a2 e6 ldi r26, 0x62 ; 98 |
4c: b0 e0 ldi r27, 0x00 ; 0 |
4e: 01 c0 rjmp .+2 ; 0x52 <.do_clear_bss_start> |
|
00000050 <.do_clear_bss_loop>: |
50: 1d 92 st X+, r1 |
|
00000052 <.do_clear_bss_start>: |
52: ac 34 cpi r26, 0x4C ; 76 |
54: b1 07 cpc r27, r17 |
56: e1 f7 brne .-8 ; 0x50 <.do_clear_bss_loop> |
58: d4 d1 rcall .+936 ; 0x402 <main> |
5a: 10 c2 rjmp .+1056 ; 0x47c <_exit> |
|
0000005c <__bad_interrupt>: |
5c: d1 cf rjmp .-94 ; 0x0 <__heap_end> |
|
0000005e <uart_putchar>: |
struct str_Exception Exception; |
|
// -------------------------------------------------------------------------- |
int uart_putchar (char c) |
{ |
5e: 8c b9 out 0x0c, r24 ; 12 |
UDR = c; |
return (0); |
} |
60: 80 e0 ldi r24, 0x00 ; 0 |
62: 90 e0 ldi r25, 0x00 ; 0 |
64: 08 95 ret |
|
00000066 <__vector_13>: |
|
// -------------------------------------------------------------------------- |
SIGNAL(SIG_UART_TRANS) |
{ |
66: 1f 92 push r1 |
68: 0f 92 push r0 |
6a: 0f b6 in r0, 0x3f ; 63 |
6c: 0f 92 push r0 |
6e: 11 24 eor r1, r1 |
70: 8f 93 push r24 |
72: 9f 93 push r25 |
74: ef 93 push r30 |
76: ff 93 push r31 |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
78: 80 91 60 00 lds r24, 0x0060 |
7c: 88 23 and r24, r24 |
7e: d9 f4 brne .+54 ; 0xb6 <__vector_13+0x50> |
{ |
ptr++; // die [0] wurde schon gesendet |
80: 80 91 6c 00 lds r24, 0x006C |
84: 90 91 6d 00 lds r25, 0x006D |
88: 01 96 adiw r24, 0x01 ; 1 |
8a: 90 93 6d 00 sts 0x006D, r25 |
8e: 80 93 6c 00 sts 0x006C, r24 |
tmp_tx = TxdBuffer[ptr]; |
92: fc 01 movw r30, r24 |
94: e9 52 subi r30, 0x29 ; 41 |
96: ff 4f sbci r31, 0xFF ; 255 |
98: e0 81 ld r30, Z |
if((tmp_tx == '\r') || (ptr == MAX_TX_BUF)) |
9a: ed 30 cpi r30, 0x0D ; 13 |
9c: 19 f0 breq .+6 ; 0xa4 <__vector_13+0x3e> |
9e: 84 36 cpi r24, 0x64 ; 100 |
a0: 91 05 cpc r25, r1 |
a2: 39 f4 brne .+14 ; 0xb2 <__vector_13+0x4c> |
{ |
ptr = 0; |
a4: 10 92 6d 00 sts 0x006D, r1 |
a8: 10 92 6c 00 sts 0x006C, r1 |
UebertragungAbgeschlossen = 1; |
ac: 81 e0 ldi r24, 0x01 ; 1 |
ae: 80 93 60 00 sts 0x0060, r24 |
} |
UDR = tmp_tx; |
b2: ec b9 out 0x0c, r30 ; 12 |
b4: 04 c0 rjmp .+8 ; 0xbe <__vector_13+0x58> |
} |
else ptr = 0; |
b6: 10 92 6d 00 sts 0x006D, r1 |
ba: 10 92 6c 00 sts 0x006C, r1 |
be: ff 91 pop r31 |
c0: ef 91 pop r30 |
c2: 9f 91 pop r25 |
c4: 8f 91 pop r24 |
c6: 0f 90 pop r0 |
c8: 0f be out 0x3f, r0 ; 63 |
ca: 0f 90 pop r0 |
cc: 1f 90 pop r1 |
ce: 18 95 reti |
|
000000d0 <__vector_11>: |
} |
|
// -------------------------------------------------------------------------- |
SIGNAL(SIG_UART_RECV) |
{ |
d0: 1f 92 push r1 |
d2: 0f 92 push r0 |
d4: 0f b6 in r0, 0x3f ; 63 |
d6: 0f 92 push r0 |
d8: 11 24 eor r1, r1 |
da: 2f 93 push r18 |
dc: 3f 93 push r19 |
de: 4f 93 push r20 |
e0: 5f 93 push r21 |
e2: 6f 93 push r22 |
e4: 7f 93 push r23 |
e6: 8f 93 push r24 |
e8: 9f 93 push r25 |
ea: af 93 push r26 |
ec: bf 93 push r27 |
ee: ef 93 push r30 |
f0: ff 93 push r31 |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
|
SioTmp = UDR; |
f2: 8c b1 in r24, 0x0c ; 12 |
f4: 80 93 62 00 sts 0x0062, r24 |
|
if(buf_ptr >= MAX_RX_BUF) |
f8: 50 91 67 00 lds r21, 0x0067 |
fc: 54 36 cpi r21, 0x64 ; 100 |
fe: 10 f0 brcs .+4 ; 0x104 <__vector_11+0x34> |
UartState = 0; |
100: 10 92 66 00 sts 0x0066, r1 |
if(SioTmp == '\r' && UartState == 2) |
104: 80 91 62 00 lds r24, 0x0062 |
108: 8d 30 cpi r24, 0x0D ; 13 |
10a: 09 f0 breq .+2 ; 0x10e <__vector_11+0x3e> |
10c: 56 c0 rjmp .+172 ; 0x1ba <__vector_11+0xea> |
10e: 80 91 66 00 lds r24, 0x0066 |
112: 82 30 cpi r24, 0x02 ; 2 |
114: 09 f0 breq .+2 ; 0x118 <__vector_11+0x48> |
116: 51 c0 rjmp .+162 ; 0x1ba <__vector_11+0xea> |
{ |
UartState = 0; |
118: 10 92 66 00 sts 0x0066, r1 |
crc -= RxdBuffer[buf_ptr-2]; |
11c: 65 2f mov r22, r21 |
11e: 77 27 eor r23, r23 |
120: fb 01 movw r30, r22 |
122: 32 97 sbiw r30, 0x02 ; 2 |
124: 23 e7 ldi r18, 0x73 ; 115 |
126: 30 e0 ldi r19, 0x00 ; 0 |
128: e2 0f add r30, r18 |
12a: f3 1f adc r31, r19 |
12c: 40 81 ld r20, Z |
crc -= RxdBuffer[buf_ptr-1]; |
12e: cb 01 movw r24, r22 |
130: 01 97 sbiw r24, 0x01 ; 1 |
132: dc 01 movw r26, r24 |
134: a2 0f add r26, r18 |
136: b3 1f adc r27, r19 |
138: 2c 91 ld r18, X |
crc %= 4096; |
13a: 80 91 6a 00 lds r24, 0x006A |
13e: 90 91 6b 00 lds r25, 0x006B |
142: 84 1b sub r24, r20 |
144: 91 09 sbc r25, r1 |
146: 82 1b sub r24, r18 |
148: 91 09 sbc r25, r1 |
14a: 9f 70 andi r25, 0x0F ; 15 |
14c: 90 93 6b 00 sts 0x006B, r25 |
150: 80 93 6a 00 sts 0x006A, r24 |
crc1 = '=' + crc / 64; |
154: 9c 01 movw r18, r24 |
156: 00 24 eor r0, r0 |
158: 22 0f add r18, r18 |
15a: 33 1f adc r19, r19 |
15c: 00 1c adc r0, r0 |
15e: 22 0f add r18, r18 |
160: 33 1f adc r19, r19 |
162: 00 1c adc r0, r0 |
164: 23 2f mov r18, r19 |
166: 30 2d mov r19, r0 |
168: 23 5c subi r18, 0xC3 ; 195 |
16a: 20 93 69 00 sts 0x0069, r18 |
crc2 = '=' + crc % 64; |
16e: 8f 73 andi r24, 0x3F ; 63 |
170: 38 2f mov r19, r24 |
172: 33 5c subi r19, 0xC3 ; 195 |
174: 30 93 68 00 sts 0x0068, r19 |
CrcOkay = 0; |
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) |
178: 80 81 ld r24, Z |
17a: 28 17 cp r18, r24 |
17c: 29 f4 brne .+10 ; 0x188 <__vector_11+0xb8> |
17e: 8c 91 ld r24, X |
180: 38 17 cp r19, r24 |
182: 11 f4 brne .+4 ; 0x188 <__vector_11+0xb8> |
184: 91 e0 ldi r25, 0x01 ; 1 |
186: 06 c0 rjmp .+12 ; 0x194 <__vector_11+0xc4> |
{ |
CrcOkay = 1; |
} |
else |
{ |
CrcOkay = 0; |
CntCrcError++; |
188: 80 91 64 00 lds r24, 0x0064 |
18c: 8f 5f subi r24, 0xFF ; 255 |
18e: 80 93 64 00 sts 0x0064, r24 |
192: 90 e0 ldi r25, 0x00 ; 0 |
} |
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet |
194: 80 91 63 00 lds r24, 0x0063 |
198: 88 23 and r24, r24 |
19a: 09 f0 breq .+2 ; 0x19e <__vector_11+0xce> |
19c: 6c c0 rjmp .+216 ; 0x276 <__vector_11+0x1a6> |
19e: 99 23 and r25, r25 |
1a0: 09 f4 brne .+2 ; 0x1a4 <__vector_11+0xd4> |
1a2: 69 c0 rjmp .+210 ; 0x276 <__vector_11+0x1a6> |
{ |
NeuerDatensatzEmpfangen = 1; |
1a4: 81 e0 ldi r24, 0x01 ; 1 |
1a6: 80 93 63 00 sts 0x0063, r24 |
AnzahlEmpfangsBytes = buf_ptr; |
1aa: 50 93 65 00 sts 0x0065, r21 |
RxdBuffer[buf_ptr] = '\r'; |
1ae: fb 01 movw r30, r22 |
1b0: ed 58 subi r30, 0x8D ; 141 |
1b2: ff 4f sbci r31, 0xFF ; 255 |
1b4: 8d e0 ldi r24, 0x0D ; 13 |
1b6: 80 83 st Z, r24 |
1b8: 5e c0 rjmp .+188 ; 0x276 <__vector_11+0x1a6> |
} |
} |
else |
switch(UartState) |
1ba: 80 91 66 00 lds r24, 0x0066 |
1be: 81 30 cpi r24, 0x01 ; 1 |
1c0: 01 f1 breq .+64 ; 0x202 <__vector_11+0x132> |
1c2: 81 30 cpi r24, 0x01 ; 1 |
1c4: 20 f0 brcs .+8 ; 0x1ce <__vector_11+0xfe> |
1c6: 82 30 cpi r24, 0x02 ; 2 |
1c8: 09 f0 breq .+2 ; 0x1cc <__vector_11+0xfc> |
1ca: 53 c0 rjmp .+166 ; 0x272 <__vector_11+0x1a2> |
1cc: 35 c0 rjmp .+106 ; 0x238 <__vector_11+0x168> |
{ |
case 0: |
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet |
1ce: 80 91 62 00 lds r24, 0x0062 |
1d2: 83 32 cpi r24, 0x23 ; 35 |
1d4: 39 f4 brne .+14 ; 0x1e4 <__vector_11+0x114> |
1d6: 80 91 63 00 lds r24, 0x0063 |
1da: 88 23 and r24, r24 |
1dc: 19 f4 brne .+6 ; 0x1e4 <__vector_11+0x114> |
1de: 81 e0 ldi r24, 0x01 ; 1 |
1e0: 80 93 66 00 sts 0x0066, r24 |
buf_ptr = 0; |
RxdBuffer[buf_ptr++] = SioTmp; |
1e4: 80 91 62 00 lds r24, 0x0062 |
1e8: 80 93 73 00 sts 0x0073, r24 |
1ec: 81 e0 ldi r24, 0x01 ; 1 |
1ee: 80 93 67 00 sts 0x0067, r24 |
crc = SioTmp; |
1f2: 80 91 62 00 lds r24, 0x0062 |
1f6: 99 27 eor r25, r25 |
1f8: 90 93 6b 00 sts 0x006B, r25 |
1fc: 80 93 6a 00 sts 0x006A, r24 |
200: 3a c0 rjmp .+116 ; 0x276 <__vector_11+0x1a6> |
|
break; |
case 1: // Adresse auswerten |
UartState++; |
202: 82 e0 ldi r24, 0x02 ; 2 |
204: 80 93 66 00 sts 0x0066, r24 |
RxdBuffer[buf_ptr++] = SioTmp; |
208: 80 91 62 00 lds r24, 0x0062 |
20c: e3 e7 ldi r30, 0x73 ; 115 |
20e: f0 e0 ldi r31, 0x00 ; 0 |
210: e5 0f add r30, r21 |
212: f1 1d adc r31, r1 |
214: 80 83 st Z, r24 |
216: 85 2f mov r24, r21 |
218: 8f 5f subi r24, 0xFF ; 255 |
21a: 80 93 67 00 sts 0x0067, r24 |
crc += SioTmp; |
21e: 20 91 62 00 lds r18, 0x0062 |
222: 80 91 6a 00 lds r24, 0x006A |
226: 90 91 6b 00 lds r25, 0x006B |
22a: 82 0f add r24, r18 |
22c: 91 1d adc r25, r1 |
22e: 90 93 6b 00 sts 0x006B, r25 |
232: 80 93 6a 00 sts 0x006A, r24 |
236: 1f c0 rjmp .+62 ; 0x276 <__vector_11+0x1a6> |
|
break; |
case 2: // Eingangsdaten sammeln |
RxdBuffer[buf_ptr] = SioTmp; |
238: 80 91 62 00 lds r24, 0x0062 |
23c: e3 e7 ldi r30, 0x73 ; 115 |
23e: f0 e0 ldi r31, 0x00 ; 0 |
240: e5 0f add r30, r21 |
242: f1 1d adc r31, r1 |
244: 80 83 st Z, r24 |
if(buf_ptr < MAX_RX_BUF) buf_ptr++; |
246: 54 36 cpi r21, 0x64 ; 100 |
248: 28 f4 brcc .+10 ; 0x254 <__vector_11+0x184> |
24a: 85 2f mov r24, r21 |
24c: 8f 5f subi r24, 0xFF ; 255 |
24e: 80 93 67 00 sts 0x0067, r24 |
252: 02 c0 rjmp .+4 ; 0x258 <__vector_11+0x188> |
else UartState = 0; |
254: 10 92 66 00 sts 0x0066, r1 |
crc += SioTmp; |
258: 20 91 62 00 lds r18, 0x0062 |
25c: 80 91 6a 00 lds r24, 0x006A |
260: 90 91 6b 00 lds r25, 0x006B |
264: 82 0f add r24, r18 |
266: 91 1d adc r25, r1 |
268: 90 93 6b 00 sts 0x006B, r25 |
26c: 80 93 6a 00 sts 0x006A, r24 |
270: 02 c0 rjmp .+4 ; 0x276 <__vector_11+0x1a6> |
|
break; |
default: |
UartState = 0; |
272: 10 92 66 00 sts 0x0066, r1 |
276: ff 91 pop r31 |
278: ef 91 pop r30 |
27a: bf 91 pop r27 |
27c: af 91 pop r26 |
27e: 9f 91 pop r25 |
280: 8f 91 pop r24 |
282: 7f 91 pop r23 |
284: 6f 91 pop r22 |
286: 5f 91 pop r21 |
288: 4f 91 pop r20 |
28a: 3f 91 pop r19 |
28c: 2f 91 pop r18 |
28e: 0f 90 pop r0 |
290: 0f be out 0x3f, r0 ; 63 |
292: 0f 90 pop r0 |
294: 1f 90 pop r1 |
296: 18 95 reti |
|
00000298 <AddCRC>: |
break; |
} |
} |
|
// -------------------------------------------------------------------------- |
void AddCRC(unsigned int wieviele) |
{ |
298: dc 01 movw r26, r24 |
unsigned int tmpCRC = 0,i; |
for(i = 0; i < wieviele;i++) |
29a: 89 2b or r24, r25 |
29c: 29 f4 brne .+10 ; 0x2a8 <AddCRC+0x10> |
29e: 20 e0 ldi r18, 0x00 ; 0 |
2a0: 30 e0 ldi r19, 0x00 ; 0 |
2a2: a0 e0 ldi r26, 0x00 ; 0 |
2a4: b0 e0 ldi r27, 0x00 ; 0 |
2a6: 11 c0 rjmp .+34 ; 0x2ca <AddCRC+0x32> |
2a8: 20 e0 ldi r18, 0x00 ; 0 |
2aa: 30 e0 ldi r19, 0x00 ; 0 |
2ac: 40 e0 ldi r20, 0x00 ; 0 |
2ae: 50 e0 ldi r21, 0x00 ; 0 |
2b0: 67 ed ldi r22, 0xD7 ; 215 |
2b2: 70 e0 ldi r23, 0x00 ; 0 |
{ |
tmpCRC += TxdBuffer[i]; |
2b4: fa 01 movw r30, r20 |
2b6: e6 0f add r30, r22 |
2b8: f7 1f adc r31, r23 |
2ba: 80 81 ld r24, Z |
2bc: 28 0f add r18, r24 |
2be: 31 1d adc r19, r1 |
2c0: 4f 5f subi r20, 0xFF ; 255 |
2c2: 5f 4f sbci r21, 0xFF ; 255 |
2c4: a4 17 cp r26, r20 |
2c6: b5 07 cpc r27, r21 |
2c8: a9 f7 brne .-22 ; 0x2b4 <AddCRC+0x1c> |
} |
tmpCRC %= 4096; |
2ca: 3f 70 andi r19, 0x0F ; 15 |
TxdBuffer[i++] = '=' + tmpCRC / 64; |
2cc: c9 01 movw r24, r18 |
2ce: 00 24 eor r0, r0 |
2d0: 88 0f add r24, r24 |
2d2: 99 1f adc r25, r25 |
2d4: 00 1c adc r0, r0 |
2d6: 88 0f add r24, r24 |
2d8: 99 1f adc r25, r25 |
2da: 00 1c adc r0, r0 |
2dc: 89 2f mov r24, r25 |
2de: 90 2d mov r25, r0 |
2e0: 83 5c subi r24, 0xC3 ; 195 |
2e2: 47 ed ldi r20, 0xD7 ; 215 |
2e4: 50 e0 ldi r21, 0x00 ; 0 |
2e6: fd 01 movw r30, r26 |
2e8: e4 0f add r30, r20 |
2ea: f5 1f adc r31, r21 |
2ec: 80 83 st Z, r24 |
2ee: 11 96 adiw r26, 0x01 ; 1 |
TxdBuffer[i++] = '=' + tmpCRC % 64; |
2f0: 2f 73 andi r18, 0x3F ; 63 |
2f2: 23 5c subi r18, 0xC3 ; 195 |
2f4: fd 01 movw r30, r26 |
2f6: e4 0f add r30, r20 |
2f8: f5 1f adc r31, r21 |
2fa: 20 83 st Z, r18 |
2fc: 11 96 adiw r26, 0x01 ; 1 |
TxdBuffer[i++] = '\r'; |
2fe: a4 0f add r26, r20 |
300: b5 1f adc r27, r21 |
302: 8d e0 ldi r24, 0x0D ; 13 |
304: 8c 93 st X, r24 |
UebertragungAbgeschlossen = 0; |
306: 10 92 60 00 sts 0x0060, r1 |
UDR = TxdBuffer[0]; |
30a: 80 91 d7 00 lds r24, 0x00D7 |
30e: 8c b9 out 0x0c, r24 ; 12 |
310: 08 95 ret |
|
00000312 <SendOutData>: |
} |
|
|
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len) |
{ |
312: ff 92 push r15 |
314: 0f 93 push r16 |
316: 1f 93 push r17 |
318: cf 93 push r28 |
31a: df 93 push r29 |
31c: 8a 01 movw r16, r20 |
31e: 72 2f mov r23, r18 |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
|
TxdBuffer[pt++] = '#'; // Startzeichen |
320: 93 e2 ldi r25, 0x23 ; 35 |
322: 90 93 d7 00 sts 0x00D7, r25 |
TxdBuffer[pt++] = modul; // Adresse (a=0; b=1,...) |
326: 60 93 d8 00 sts 0x00D8, r22 |
TxdBuffer[pt++] = cmd; // Commando |
32a: 80 93 d9 00 sts 0x00D9, r24 |
|
while(len) |
32e: 22 23 and r18, r18 |
330: 19 f4 brne .+6 ; 0x338 <SendOutData+0x26> |
332: a3 e0 ldi r26, 0x03 ; 3 |
334: b0 e0 ldi r27, 0x00 ; 0 |
336: 5d c0 rjmp .+186 ; 0x3f2 <SendOutData+0xe0> |
338: a3 e0 ldi r26, 0x03 ; 3 |
33a: b0 e0 ldi r27, 0x00 ; 0 |
33c: 60 e0 ldi r22, 0x00 ; 0 |
33e: c7 ed ldi r28, 0xD7 ; 215 |
340: d0 e0 ldi r29, 0x00 ; 0 |
{ |
if(len) { a = snd[ptr++]; len--;} else a = 0; |
342: f8 01 movw r30, r16 |
344: e6 0f add r30, r22 |
346: f1 1d adc r31, r1 |
348: 90 81 ld r25, Z |
34a: 6f 5f subi r22, 0xFF ; 255 |
34c: 71 50 subi r23, 0x01 ; 1 |
if(len) { b = snd[ptr++]; len--;} else b = 0; |
34e: 19 f4 brne .+6 ; 0x356 <SendOutData+0x44> |
350: ff 24 eor r15, r15 |
352: 40 e0 ldi r20, 0x00 ; 0 |
354: 0f c0 rjmp .+30 ; 0x374 <SendOutData+0x62> |
356: f8 01 movw r30, r16 |
358: e6 0f add r30, r22 |
35a: f1 1d adc r31, r1 |
35c: 40 81 ld r20, Z |
35e: 6f 5f subi r22, 0xFF ; 255 |
360: 71 50 subi r23, 0x01 ; 1 |
if(len) { c = snd[ptr++]; len--;} else c = 0; |
362: 11 f4 brne .+4 ; 0x368 <SendOutData+0x56> |
364: ff 24 eor r15, r15 |
366: 06 c0 rjmp .+12 ; 0x374 <SendOutData+0x62> |
368: f8 01 movw r30, r16 |
36a: e6 0f add r30, r22 |
36c: f1 1d adc r31, r1 |
36e: f0 80 ld r15, Z |
370: 6f 5f subi r22, 0xFF ; 255 |
372: 71 50 subi r23, 0x01 ; 1 |
TxdBuffer[pt++] = '=' + (a >> 2); |
374: 89 2f mov r24, r25 |
376: 86 95 lsr r24 |
378: 86 95 lsr r24 |
37a: 83 5c subi r24, 0xC3 ; 195 |
37c: fd 01 movw r30, r26 |
37e: ec 0f add r30, r28 |
380: fd 1f adc r31, r29 |
382: 80 83 st Z, r24 |
384: fd 01 movw r30, r26 |
386: 31 96 adiw r30, 0x01 ; 1 |
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
388: 55 27 eor r21, r21 |
38a: 89 2f mov r24, r25 |
38c: 99 27 eor r25, r25 |
38e: 83 70 andi r24, 0x03 ; 3 |
390: 90 70 andi r25, 0x00 ; 0 |
392: 82 95 swap r24 |
394: 92 95 swap r25 |
396: 90 7f andi r25, 0xF0 ; 240 |
398: 98 27 eor r25, r24 |
39a: 80 7f andi r24, 0xF0 ; 240 |
39c: 98 27 eor r25, r24 |
39e: 9a 01 movw r18, r20 |
3a0: 32 95 swap r19 |
3a2: 22 95 swap r18 |
3a4: 2f 70 andi r18, 0x0F ; 15 |
3a6: 23 27 eor r18, r19 |
3a8: 3f 70 andi r19, 0x0F ; 15 |
3aa: 23 27 eor r18, r19 |
3ac: 82 2b or r24, r18 |
3ae: 83 5c subi r24, 0xC3 ; 195 |
3b0: ec 0f add r30, r28 |
3b2: fd 1f adc r31, r29 |
3b4: 80 83 st Z, r24 |
3b6: fd 01 movw r30, r26 |
3b8: 32 96 adiw r30, 0x02 ; 2 |
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
3ba: 4f 70 andi r20, 0x0F ; 15 |
3bc: 50 70 andi r21, 0x00 ; 0 |
3be: 44 0f add r20, r20 |
3c0: 55 1f adc r21, r21 |
3c2: 44 0f add r20, r20 |
3c4: 55 1f adc r21, r21 |
3c6: 8f 2d mov r24, r15 |
3c8: 82 95 swap r24 |
3ca: 86 95 lsr r24 |
3cc: 86 95 lsr r24 |
3ce: 83 70 andi r24, 0x03 ; 3 |
3d0: 84 2b or r24, r20 |
3d2: 83 5c subi r24, 0xC3 ; 195 |
3d4: ec 0f add r30, r28 |
3d6: fd 1f adc r31, r29 |
3d8: 80 83 st Z, r24 |
3da: fd 01 movw r30, r26 |
3dc: 33 96 adiw r30, 0x03 ; 3 |
TxdBuffer[pt++] = '=' + ( c & 0x3f); |
3de: 8f 2d mov r24, r15 |
3e0: 8f 73 andi r24, 0x3F ; 63 |
3e2: 83 5c subi r24, 0xC3 ; 195 |
3e4: ec 0f add r30, r28 |
3e6: fd 1f adc r31, r29 |
3e8: 80 83 st Z, r24 |
3ea: 14 96 adiw r26, 0x04 ; 4 |
3ec: 77 23 and r23, r23 |
3ee: 09 f0 breq .+2 ; 0x3f2 <SendOutData+0xe0> |
3f0: a8 cf rjmp .-176 ; 0x342 <SendOutData+0x30> |
} |
AddCRC(pt); |
3f2: cd 01 movw r24, r26 |
3f4: 51 df rcall .-350 ; 0x298 <AddCRC> |
3f6: df 91 pop r29 |
3f8: cf 91 pop r28 |
3fa: 1f 91 pop r17 |
3fc: 0f 91 pop r16 |
3fe: ff 90 pop r15 |
400: 08 95 ret |
|
00000402 <main>: |
} |
|
|
//----------------------------------------------------------------------------- |
//main |
//main execution loop |
//----------------------------------------------------------------------------- |
int main(void) |
{ |
402: 0f 93 push r16 |
404: 1f 93 push r17 |
406: cf 93 push r28 |
408: df 93 push r29 |
|
// int message structures; |
VersionInfo.identifier = XIDENTIFIER_VERSION; |
40a: 81 e0 ldi r24, 0x01 ; 1 |
40c: 80 93 6e 00 sts 0x006E, r24 |
VersionInfo.majorversion = MAJORVERSION; |
410: 10 92 6f 00 sts 0x006F, r1 |
VersionInfo.minorversion = MINORVERSION; |
414: 80 93 70 00 sts 0x0070, r24 |
AnalogData.identifier = XIDENTIFIER_ANALOG; |
418: 82 e0 ldi r24, 0x02 ; 2 |
41a: 80 93 3b 01 sts 0x013B, r24 |
Exception.identifier = XIDENTIFIER_EXCEPTION; |
41e: 10 92 71 00 sts 0x0071, r1 |
|
// PORT D - unused right now |
PORTD = 0x10; |
422: 80 e1 ldi r24, 0x10 ; 16 |
424: 82 bb out 0x12, r24 ; 18 |
DDRD = 0x00; |
426: 11 ba out 0x11, r1 ; 17 |
|
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
|
// USART initialization |
// Communication Parameters: 8 Data, 1 Stop, No Parity |
// USART Receiver: On |
// USART Transmitter: On |
// USART RX/TX interrupt enable |
// USART Mode: Asynchronous |
// USART Baud rate: 57600 |
UCSRA=0x00; |
428: 1b b8 out 0x0b, r1 ; 11 |
UCSRB=0xD8; |
42a: 88 ed ldi r24, 0xD8 ; 216 |
42c: 8a b9 out 0x0a, r24 ; 10 |
UCSRC=0x86; |
42e: 86 e8 ldi r24, 0x86 ; 134 |
430: 80 bd out 0x20, r24 ; 32 |
#ifdef CPUSPEED_20 //20.000MHz |
UBRRH=0x00; |
UBRRL=0x15; |
#endif |
|
#ifdef CPUSPEED_16 //16.000MHz |
UBRRH=0x00; |
UBRRL=0x10; |
#endif |
|
#ifdef CPUSPEED_11059 //11.059MHz |
UBRRH=0x00; |
432: 10 bc out 0x20, r1 ; 32 |
UBRRL=0x0B; |
434: 8b e0 ldi r24, 0x0B ; 11 |
436: 89 b9 out 0x09, r24 ; 9 |
#endif |
|
|
// Enable interrupts |
sei(); |
438: 78 94 sei |
|
NeuerDatensatzEmpfangen = 0; |
43a: 10 92 63 00 sts 0x0063, r1 |
43e: 0e e6 ldi r16, 0x6E ; 110 |
440: 10 e0 ldi r17, 0x00 ; 0 |
442: c1 e7 ldi r28, 0x71 ; 113 |
444: d0 e0 ldi r29, 0x00 ; 0 |
|
// main loop |
while (1) |
{ |
if(NeuerDatensatzEmpfangen==1) { |
446: 80 91 63 00 lds r24, 0x0063 |
44a: 81 30 cpi r24, 0x01 ; 1 |
44c: e1 f7 brne .-8 ; 0x446 <main+0x44> |
switch(RxdBuffer[3]) |
44e: 80 91 76 00 lds r24, 0x0076 |
452: 81 30 cpi r24, 0x01 ; 1 |
454: 19 f0 breq .+6 ; 0x45c <main+0x5a> |
456: 82 30 cpi r24, 0x02 ; 2 |
458: 39 f4 brne .+14 ; 0x468 <__stack+0x9> |
45a: 0d c0 rjmp .+26 ; 0x476 <__stack+0x17> |
{ |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
// version request |
case XIDENTIFIER_VERSION: |
SendOutData('X',0x00,(unsigned char *) &VersionInfo,sizeof(VersionInfo)); |
45c: 23 e0 ldi r18, 0x03 ; 3 |
45e: a8 01 movw r20, r16 |
460: 60 e0 ldi r22, 0x00 ; 0 |
462: 88 e5 ldi r24, 0x58 ; 88 |
464: 56 df rcall .-340 ; 0x312 <SendOutData> |
466: 07 c0 rjmp .+14 ; 0x476 <__stack+0x17> |
break; |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
case XIDENTIFIER_ANALOG: |
break; |
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
default: |
Exception.errorcode = ERRORCODE_NOTIMPLEMENTED; |
468: 10 92 72 00 sts 0x0072, r1 |
SendOutData('X',0x00,(unsigned char *) &Exception,sizeof(VersionInfo)); |
46c: 23 e0 ldi r18, 0x03 ; 3 |
46e: ae 01 movw r20, r28 |
470: 60 e0 ldi r22, 0x00 ; 0 |
472: 88 e5 ldi r24, 0x58 ; 88 |
474: 4e df rcall .-356 ; 0x312 <SendOutData> |
} |
NeuerDatensatzEmpfangen=0; |
476: 10 92 63 00 sts 0x0063, r1 |
47a: e5 cf rjmp .-54 ; 0x446 <main+0x44> |
|
0000047c <_exit>: |
47c: ff cf rjmp .-2 ; 0x47c <_exit> |