Blame | Last modification | View Log | RSS feed
FlightCtrl.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 000001ea 00800100 000164ce 00016562 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 000164ce 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 000009ef 008002ea 008002ea 0001674c 2**0
ALLOC
3 .comment 00000030 00000000 00000000 0001674c 2**0
CONTENTS, READONLY
4 .debug_aranges 00000580 00000000 00000000 00016780 2**3
CONTENTS, READONLY, DEBUGGING
5 .debug_info 00011ffe 00000000 00000000 00016d00 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 00002459 00000000 00000000 00028cfe 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 0000a084 00000000 00000000 0002b157 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_frame 00001cc8 00000000 00000000 000351dc 2**2
CONTENTS, READONLY, DEBUGGING
9 .debug_str 000030b7 00000000 00000000 00036ea4 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_loc 000082f5 00000000 00000000 00039f5b 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_ranges 00000468 00000000 00000000 00042250 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 f0 0c jmp 0x19e0 ; 0x19e0 <__ctors_end>
4: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
8: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
c: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
10: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
14: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
18: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
1c: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
20: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
24: 0c 94 6d 9f jmp 0x13eda ; 0x13eda <__vector_9>
28: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
2c: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
30: 0c 94 b3 91 jmp 0x12366 ; 0x12366 <__vector_12>
34: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
38: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
3c: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
40: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
44: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
48: 0c 94 64 9b jmp 0x136c8 ; 0x136c8 <__vector_18>
4c: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
50: 0c 94 da a5 jmp 0x14bb4 ; 0x14bb4 <__vector_20>
54: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
58: 0c 94 9e a5 jmp 0x14b3c ; 0x14b3c <__vector_22>
5c: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
60: 0c 94 05 1c jmp 0x380a ; 0x380a <__vector_24>
64: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
68: 0c 94 33 a1 jmp 0x14266 ; 0x14266 <__vector_26>
6c: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
70: 0c 94 a1 1a jmp 0x3542 ; 0x3542 <__vector_28>
74: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
78: 0c 94 f6 0f jmp 0x1fec ; 0x1fec <__vector_30>
7c: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
80: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
84: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
88: 0c 94 4a 0d jmp 0x1a94 ; 0x1a94 <__bad_interrupt>
8c: 32 1c adc r3, r2
8e: 3e 1c adc r3, r14
90: 49 1c adc r4, r9
92: 56 1c adc r5, r6
94: 71 1c adc r7, r1
96: 8b 1c adc r8, r11
98: 9d 1c adc r9, r13
9a: af 1c adc r10, r15
9c: 33 1d adc r19, r3
9e: bc 1f adc r27, r28
a0: 5b 1e adc r5, r27
a2: 6d 1e adc r6, r29
a4: 7e 1e adc r7, r30
a6: 95 1e adc r9, r21
a8: b6 1e adc r11, r22
aa: d6 1e adc r13, r22
ac: 27 1f adc r18, r23
ae: 78 1f adc r23, r24
b0: 62 66 ori r22, 0x62 ; 98
b2: a8 6a ori r26, 0xA8 ; 168
b4: a0 70 andi r26, 0x00 ; 0
b6: 13 74 andi r17, 0x43 ; 67
b8: cf 75 andi r28, 0x5F ; 95
ba: 71 77 andi r23, 0x71 ; 113
bc: 4c 79 andi r20, 0x9C ; 156
be: 72 66 ori r23, 0x62 ; 98
c0: 3c 67 ori r19, 0x7C ; 124
c2: 0b 68 ori r16, 0x8B ; 139
c4: 8a 68 ori r24, 0x8A ; 138
c6: d9 68 ori r29, 0x89 ; 137
c8: 71 69 ori r23, 0x91 ; 145
ca: 99 7b andi r25, 0xB9 ; 185
cc: fa 69 ori r31, 0x9A ; 154
ce: 7e 6a ori r23, 0xAE ; 174
d0: 7e 6a ori r23, 0xAE ; 174
d2: 7e 6a ori r23, 0xAE ; 174
d4: 7e 6a ori r23, 0xAE ; 174
d6: 7e 6a ori r23, 0xAE ; 174
d8: 7e 6a ori r23, 0xAE ; 174
da: 7e 6a ori r23, 0xAE ; 174
dc: 7e 6a ori r23, 0xAE ; 174
de: 7e 6a ori r23, 0xAE ; 174
e0: b8 6a ori r27, 0xA8 ; 168
e2: 76 6b ori r23, 0xB6 ; 182
e4: 1a 6c ori r17, 0xCA ; 202
e6: 57 6c ori r21, 0xC7 ; 199
e8: cd 6c ori r28, 0xCD ; 205
ea: 4e 6d ori r20, 0xDE ; 222
ec: 43 6e ori r20, 0xE3 ; 227
ee: ed 6f ori r30, 0xFD ; 253
f0: 71 70 andi r23, 0x01 ; 1
f2: 71 70 andi r23, 0x01 ; 1
f4: 71 70 andi r23, 0x01 ; 1
f6: 71 70 andi r23, 0x01 ; 1
f8: 71 70 andi r23, 0x01 ; 1
fa: 71 70 andi r23, 0x01 ; 1
fc: 71 70 andi r23, 0x01 ; 1
fe: 71 70 andi r23, 0x01 ; 1
100: 71 70 andi r23, 0x01 ; 1
102: b0 70 andi r27, 0x00 ; 0
104: cf 70 andi r28, 0x0F ; 15
106: fe 70 andi r31, 0x0E ; 14
108: a3 71 andi r26, 0x13 ; 19
10a: 0e 72 andi r16, 0x2E ; 46
10c: ad 72 andi r26, 0x2D ; 45
10e: ef 72 andi r30, 0x2F ; 47
110: 87 73 andi r24, 0x37 ; 55
112: 99 7b andi r25, 0xB9 ; 185
114: e5 73 andi r30, 0x35 ; 53
116: e5 73 andi r30, 0x35 ; 53
118: e5 73 andi r30, 0x35 ; 53
11a: e5 73 andi r30, 0x35 ; 53
11c: e5 73 andi r30, 0x35 ; 53
11e: e5 73 andi r30, 0x35 ; 53
120: e5 73 andi r30, 0x35 ; 53
122: e5 73 andi r30, 0x35 ; 53
124: 9f 87 std Y+15, r25 ; 0x0f
126: d4 88 ldd r13, Z+20 ; 0x14
128: 71 89 ldd r23, Z+17 ; 0x11
12a: f4 89 ldd r31, Z+20 ; 0x14
12c: 36 8a std Z+22, r3 ; 0x16
12e: da 8a std Y+18, r13 ; 0x12
130: 64 8b std Z+20, r22 ; 0x14
132: cb 8b std Y+19, r28 ; 0x13
134: 5a 8c ldd r5, Y+26 ; 0x1a
136: 98 8c ldd r9, Y+24 ; 0x18
138: 15 8d ldd r17, Z+29 ; 0x1d
13a: 43 8d ldd r20, Z+27 ; 0x1b
13c: 71 8d ldd r23, Z+25 ; 0x19
13e: cd 8d ldd r28, Y+29 ; 0x1d
140: 21 8e std Z+25, r2 ; 0x19
142: 7f 8e std Y+31, r7 ; 0x1f
144: cd 8e std Y+29, r12 ; 0x1d
146: 17 8f std Z+31, r17 ; 0x1f
148: 8a 8f std Y+26, r24 ; 0x1a
14a: a6 90 elpm r10, Z
14c: 19 97 sbiw r26, 0x09 ; 9
14e: 7f 98 cbi 0x0f, 7 ; 15
150: fa 98 cbi 0x1f, 2 ; 31
152: b5 99 sbic 0x16, 5 ; 22
154: 53 99 sbic 0x0a, 3 ; 10
156: 85 99 sbic 0x10, 5 ; 16
158: 58 97 sbiw r26, 0x18 ; 24
15a: 27 98 cbi 0x04, 7 ; 4
15c: b5 99 sbic 0x16, 5 ; 22
15e: b9 97 sbiw r30, 0x29 ; 41
160: 53 a1 ldd r21, Z+35 ; 0x23
162: b2 a1 ldd r27, Z+34 ; 0x22
164: f1 a1 ldd r31, Z+33 ; 0x21
166: 51 a2 std Z+33, r5 ; 0x21
168: 70 a2 std Z+32, r7 ; 0x20
16a: b1 a2 std Z+33, r11 ; 0x21
16c: 6a a3 std Y+34, r22 ; 0x22
16e: 7d a8 ldd r7, Y+53 ; 0x35
170: 73 ab std Z+51, r23 ; 0x33
172: 73 ab std Z+51, r23 ; 0x33
174: 73 ab std Z+51, r23 ; 0x33
176: 73 ab std Z+51, r23 ; 0x33
178: 73 ab std Z+51, r23 ; 0x33
17a: 73 ab std Z+51, r23 ; 0x33
17c: 73 ab std Z+51, r23 ; 0x33
17e: 73 ab std Z+51, r23 ; 0x33
180: 73 ab std Z+51, r23 ; 0x33
182: 73 ab std Z+51, r23 ; 0x33
184: 73 ab std Z+51, r23 ; 0x33
186: 73 ab std Z+51, r23 ; 0x33
188: 73 ab std Z+51, r23 ; 0x33
18a: 73 ab std Z+51, r23 ; 0x33
18c: 73 ab std Z+51, r23 ; 0x33
18e: 73 ab std Z+51, r23 ; 0x33
190: 73 ab std Z+51, r23 ; 0x33
192: 73 ab std Z+51, r23 ; 0x33
194: 73 ab std Z+51, r23 ; 0x33
196: 73 ab std Z+51, r23 ; 0x33
198: 73 ab std Z+51, r23 ; 0x33
19a: 73 ab std Z+51, r23 ; 0x33
19c: 73 ab std Z+51, r23 ; 0x33
19e: 73 ab std Z+51, r23 ; 0x33
1a0: 73 ab std Z+51, r23 ; 0x33
1a2: 73 ab std Z+51, r23 ; 0x33
1a4: ea a9 ldd r30, Y+50 ; 0x32
1a6: 73 ab std Z+51, r23 ; 0x33
1a8: 73 ab std Z+51, r23 ; 0x33
1aa: 73 ab std Z+51, r23 ; 0x33
1ac: e8 aa std Y+48, r14 ; 0x30
1ae: 73 ab std Z+51, r23 ; 0x33
1b0: 73 ab std Z+51, r23 ; 0x33
1b2: d6 a8 ldd r13, Z+54 ; 0x36
1b4: af a8 ldd r10, Y+55 ; 0x37
1b6: 73 ab std Z+51, r23 ; 0x33
1b8: 05 a9 ldd r16, Z+53 ; 0x35
1ba: 0c a9 ldd r16, Y+52 ; 0x34
1bc: 73 ab std Z+51, r23 ; 0x33
1be: 88 a9 ldd r24, Y+48 ; 0x30
1c0: 88 a8 ldd r8, Y+48 ; 0x30
1c2: 3e aa std Y+54, r3 ; 0x36
1c4: 73 ab std Z+51, r23 ; 0x33
1c6: 93 aa std Z+51, r9 ; 0x33
1c8: 73 ab std Z+51, r23 ; 0x33
1ca: 22 aa std Z+50, r2 ; 0x32
1cc: bd ab std Y+53, r27 ; 0x35
1ce: aa ac ldd r10, Y+58 ; 0x3a
1d0: aa ac ldd r10, Y+58 ; 0x3a
1d2: aa ac ldd r10, Y+58 ; 0x3a
1d4: aa ac ldd r10, Y+58 ; 0x3a
1d6: aa ac ldd r10, Y+58 ; 0x3a
1d8: aa ac ldd r10, Y+58 ; 0x3a
1da: aa ac ldd r10, Y+58 ; 0x3a
1dc: aa ac ldd r10, Y+58 ; 0x3a
1de: aa ac ldd r10, Y+58 ; 0x3a
1e0: aa ac ldd r10, Y+58 ; 0x3a
1e2: aa ac ldd r10, Y+58 ; 0x3a
1e4: aa ac ldd r10, Y+58 ; 0x3a
1e6: aa ac ldd r10, Y+58 ; 0x3a
1e8: aa ac ldd r10, Y+58 ; 0x3a
1ea: aa ac ldd r10, Y+58 ; 0x3a
1ec: aa ac ldd r10, Y+58 ; 0x3a
1ee: aa ac ldd r10, Y+58 ; 0x3a
1f0: aa ac ldd r10, Y+58 ; 0x3a
1f2: aa ac ldd r10, Y+58 ; 0x3a
1f4: aa ac ldd r10, Y+58 ; 0x3a
1f6: aa ac ldd r10, Y+58 ; 0x3a
1f8: c8 ab std Y+48, r28 ; 0x30
1fa: d9 ab std Y+49, r29 ; 0x31
1fc: ec ab std Y+52, r30 ; 0x34
1fe: 29 ac ldd r2, Y+57 ; 0x39
200: aa ac ldd r10, Y+58 ; 0x3a
202: aa ac ldd r10, Y+58 ; 0x3a
204: a7 ac ldd r10, Z+63 ; 0x3f
206: 4f ac ldd r4, Y+63 ; 0x3f
208: aa ac ldd r10, Y+58 ; 0x3a
20a: aa ac ldd r10, Y+58 ; 0x3a
20c: aa ac ldd r10, Y+58 ; 0x3a
20e: 87 ac ldd r8, Z+63 ; 0x3f
210: aa ac ldd r10, Y+58 ; 0x3a
212: aa ac ldd r10, Y+58 ; 0x3a
214: aa ac ldd r10, Y+58 ; 0x3a
216: aa ac ldd r10, Y+58 ; 0x3a
218: aa ac ldd r10, Y+58 ; 0x3a
21a: aa ac ldd r10, Y+58 ; 0x3a
21c: aa ac ldd r10, Y+58 ; 0x3a
21e: 80 ab std Z+48, r24 ; 0x30
220: aa ac ldd r10, Y+58 ; 0x3a
222: 95 ac ldd r9, Z+61 ; 0x3d
224: a3 18 sub r10, r3
226: a6 18 sub r10, r6
228: a6 18 sub r10, r6
22a: a6 18 sub r10, r6
22c: af 18 sub r10, r15
22e: b2 18 sub r11, r2
230: b5 18 sub r11, r5
232: c7 18 sub r12, r7
234: c4 18 sub r12, r4
00000236 <__trampolines_end>:
236: 2e 00 .word 0x002e ; ????
00000238 <__c.3073>:
238: 0a 0d 4d 69 78 65 72 2d 43 6f 6e 66 69 67 3a 20 ..Mixer-Config:
248: 27 25 73 27 20 28 25 75 20 4d 6f 74 6f 72 73 29 '%s' (%u Motors)
...
00000259 <__c.3068>:
259: 0a 0d 47 65 6e 65 72 61 74 69 6e 67 20 64 65 66 ..Generating def
269: 61 75 6c 74 20 4d 69 78 65 72 20 54 61 62 6c 65 ault Mixer Table
...
0000027a <__c.3066>:
27a: 0a 0d 55 73 69 6e 67 20 50 61 72 61 6d 65 74 65 ..Using Paramete
28a: 72 20 53 65 74 20 25 64 00 r Set %d.
00000293 <__c.3057>:
293: 0a 0d 47 65 6e 65 72 61 74 69 6e 67 20 64 65 66 ..Generating def
2a3: 61 75 6c 74 20 50 61 72 61 6d 65 74 65 72 20 53 ault Parameter S
2b3: 65 74 20 25 64 00 et %d.
000002b9 <__c.3054>:
2b9: 0a 0d 2d 2d 3e 20 48 61 72 64 77 61 72 65 20 56 ..--> Hardware V
2c9: 65 72 73 69 6f 6e 20 42 79 74 65 20 43 68 61 6e ersion Byte Chan
2d9: 67 65 64 20 3c 2d 2d 00 ged <--.
000002e1 <__c.3166>:
2e1: 0a 0d 47 79 72 6f 20 63 61 6c 69 62 72 61 74 69 ..Gyro calibrati
2f1: 6f 6e 20 64 61 74 61 20 6e 6f 74 20 76 61 6c 69 on data not vali
301: 64 0d 0a 00 d...
00000305 <__c.3161>:
305: 0a 0d 41 43 43 20 6e 6f 74 20 63 61 6c 69 62 72 ..ACC not calibr
315: 61 74 65 64 21 0d 0a 00 ated!...
0000031d <__c.3040>:
31d: 1b 5b 32 4a 46 43 2d 53 74 61 72 74 21 0a 0d 46 .[2JFC-Start!..F
32d: 6c 75 67 7a 65 69 74 3a 20 25 64 20 6d 69 6e 00 lugzeit: %d min.
0000033d <__c.3038>:
33d: 0a 0d 46 6c 69 67 68 74 2d 74 69 6d 65 20 25 75 ..Flight-time %u
34d: 20 6d 69 6e 20 54 6f 74 61 6c 3a 25 75 20 6d 69 min Total:%u mi
35d: 6e 00 n.
0000035f <__c.3036>:
35f: 4f 4b 0a 0d 00 OK...
00000364 <__c.3031>:
364: 0a 0d 43 61 6c 69 62 72 61 74 69 6e 67 20 70 72 ..Calibrating pr
374: 65 73 73 75 72 65 20 73 65 6e 73 6f 72 2e 2e 00 essure sensor...
00000384 <__c.3029>:
384: 3c 2d 2d 20 77 61 72 6e 69 6e 67 20 6f 6c 64 20 <-- warning old
394: 56 65 72 73 69 6f 6e 21 00 Version!.
0000039d <__c.3027>:
39d: 0a 0d 42 4c 2d 46 69 72 6d 77 61 72 65 20 25 64 ..BL-Firmware %d
3ad: 2e 25 30 32 64 00 .%02d.
000003b3 <__c.3022>:
3b3: 0a 0d 0a 0d 21 21 20 4d 49 53 53 49 4e 47 20 42 ....!! MISSING B
3c3: 4c 2d 43 54 52 4c 3a 20 25 64 20 21 21 00 L-CTRL: %d !!.
000003d1 <__c.3017>:
3d1: 25 64 00 %d.
000003d4 <__c.3008>:
3d4: 0a 0d 46 6f 75 6e 64 20 42 4c 2d 43 74 72 6c 3a ..Found BL-Ctrl:
3e4: 20 00 .
000003e6 <__c.2999>:
3e6: 0a 0d 4f 6c 64 20 46 43 20 48 61 72 64 77 61 72 ..Old FC Hardwar
3f6: 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 e not supported
406: 62 79 20 74 68 69 73 20 46 69 72 6d 77 61 72 65 by this Firmware
416: 21 00 !.
00000418 <__c.2985>:
418: 20 20 41 75 74 6f 6c 61 6e 64 69 6e 67 3a 20 25 Autolanding: %
428: 64 2e 25 64 56 00 d.%dV.
0000042e <__c.2983>:
42e: 20 20 41 75 74 6f 2d 43 48 3a 20 25 64 2e 25 64 Auto-CH: %d.%d
43e: 56 00 V.
00000440 <__c.2981>:
440: 20 4c 6f 77 20 77 61 72 6e 69 6e 67 3a 20 25 64 Low warning: %d
450: 2e 25 64 56 00 .%dV.
00000455 <__c.2979>:
455: 20 25 64 20 43 65 6c 6c 73 20 00 %d Cells .
00000460 <__c.2977>:
460: 0a 0d 42 61 74 74 3a 00 ..Batt:.
00000468 <__c.2968>:
468: 0a 0d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..==============
478: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
488: 3d 3d 3d 3d 3d 00 =====.
0000048e <__c.3496>:
48e: 25 73 00 %s.
00000491 <__c.3494>:
491: 28 53 65 74 20 2d 3e 20 4c 6f 61 64 29 00 (Set -> Load).
0000049f <__c.3492>:
49f: 4e 6f 20 53 44 2d 43 61 72 64 20 20 20 00 No SD-Card .
000004ad <__c.3490>:
4ad: 2d 2d 00 --.
000004b0 <__c.3488>:
4b0: 25 32 64 00 %2d.
000004b4 <__c.3486>:
4b4: 20 20 20 00 .
000004b8 <__c.3484>:
4b8: 6c 6f 61 64 20 70 6f 69 6e 74 3a 00 load point:.
000004c4 <__c.3479>:
4c4: 43 61 6d 3a 20 25 33 69 00 Cam: %3i.
000004cd <__c.3477>:
4cd: 44 49 52 3a 20 25 33 64 25 63 00 DIR: %3d%c.
000004d8 <__c.3475>:
4d8: 41 4c 54 3a 25 34 69 6d 20 20 20 20 00 ALT:%4im .
000004e5 <__c.3473>:
4e5: 41 4c 54 3a 25 34 69 2f 25 69 6d 20 00 ALT:%4i/%im .
000004f2 <__c.3470>:
4f2: 57 50 3a 25 32 64 2f 25 64 20 44 69 73 74 3a 25 WP:%2d/%d Dist:%
502: 33 64 6d 20 00 3dm .
00000507 <__c.3468>:
507: 20 25 32 69 3a 25 30 32 69 20 00 %2i:%02i .
00000512 <__c.3466>:
512: 20 25 32 69 2e 25 31 69 56 20 00 %2i.%1iV .
0000051d <__c.3462>:
51d: 4c 6f 61 64 20 73 69 6e 67 6c 65 20 50 6f 73 69 Load single Posi
52d: 74 69 6f 6e 00 tion.
00000532 <__c.3455>:
532: 21 4e 6f 20 47 50 53 2d 46 69 78 21 20 00 !No GPS-Fix! .
00000540 <__c.3453>:
540: 28 53 65 74 20 2d 3e 20 53 74 6f 72 65 29 00 (Set -> Store).
0000054f <__c.3451>:
54f: 4e 6f 20 53 44 2d 43 61 72 64 20 20 20 00 No SD-Card .
0000055d <__c.3449>:
55d: 2d 2d 00 --.
00000560 <__c.3447>:
560: 25 32 64 20 00 %2d .
00000565 <__c.3445>:
565: 20 20 20 00 .
00000569 <__c.3443>:
569: 53 74 6f 72 65 20 70 6f 69 6e 74 3a 00 Store point:.
00000576 <__c.3438>:
576: 43 61 6d 3a 20 25 33 69 00 Cam: %3i.
0000057f <__c.3436>:
57f: 44 49 52 3a 20 25 33 64 25 63 00 DIR: %3d%c.
0000058a <__c.3434>:
58a: 41 4c 54 3a 25 34 69 6d 00 ALT:%4im.
00000593 <__c.3431>:
593: 20 25 32 69 3a 25 30 32 69 20 00 %2i:%02i .
0000059e <__c.3429>:
59e: 20 25 32 69 2e 25 31 69 56 20 00 %2i.%1iV .
000005a9 <__c.3425>:
5a9: 53 74 6f 72 65 20 73 69 6e 67 6c 65 20 50 6f 73 Store single Pos
5b9: 69 74 69 6f 6e 00 ition.
000005bf <__c.3418>:
5bf: 20 20 20 20 20 20 20 20 20 20 20 20 20 00 .
000005cd <__c.3416>:
5cd: 28 53 65 74 20 2d 3e 20 4c 6f 61 64 29 00 (Set -> Load).
000005db <__c.3414>:
5db: 4e 6f 20 53 44 2d 43 61 72 64 20 20 20 00 No SD-Card .
000005e9 <__c.3412>:
5e9: 20 2d 2d 00 --.
000005ed <__c.3410>:
5ed: 25 32 64 20 28 46 49 58 29 00 %2d (FIX).
000005f7 <__c.3408>:
5f7: 20 20 20 00 .
000005fb <__c.3406>:
5fb: 4c 6f 61 64 20 6c 69 73 74 3a 00 Load list:.
00000606 <__c.3401>:
606: 25 73 00 %s.
00000609 <__c.3399>:
609: 25 32 69 2e 25 31 69 56 20 00 %2i.%1iV .
00000613 <__c.3396>:
613: 4e 6f 20 57 50 73 20 61 63 74 69 76 65 20 20 20 No WPs active
623: 20 00 .
00000625 <__c.3394>:
625: 41 63 74 69 76 65 20 57 50 3a 25 32 64 2f 25 64 Active WP:%2d/%d
635: 20 00 .
00000637 <__c.3390>:
637: 28 46 69 78 65 64 20 50 6f 73 69 74 69 6f 6e 73 (Fixed Positions
647: 29 00 ).
00000649 <__c.3388>:
649: 4c 6f 61 64 20 57 61 79 70 6f 69 6e 74 73 00 Load Waypoints.
00000658 <__c.3381>:
658: 21 4e 6f 20 47 50 53 2d 46 69 78 21 20 00 !No GPS-Fix! .
00000666 <__c.3379>:
666: 20 20 20 20 20 20 20 20 20 20 20 20 20 00 .
00000674 <__c.3377>:
674: 28 53 65 74 20 2d 3e 20 4c 6f 61 64 29 00 (Set -> Load).
00000682 <__c.3375>:
682: 4e 6f 20 53 44 2d 43 61 72 64 20 20 20 00 No SD-Card .
00000690 <__c.3373>:
690: 4c 6f 61 64 20 6c 69 73 74 3a 20 2d 2d 20 00 Load list: -- .
0000069f <__c.3371>:
69f: 4c 6f 61 64 20 6c 69 73 74 3a 00 Load list:.
000006aa <__c.3369>:
6aa: 25 32 69 20 20 20 00 %2i .
000006b1 <__c.3367>:
6b1: 20 20 20 00 .
000006b5 <__c.3362>:
6b5: 25 73 00 %s.
000006b8 <__c.3360>:
6b8: 25 32 69 2e 25 31 69 56 20 00 %2i.%1iV .
000006c2 <__c.3357>:
6c2: 4e 6f 20 57 50 73 20 61 63 74 69 76 65 20 20 20 No WPs active
6d2: 20 20 00 .
000006d5 <__c.3355>:
6d5: 41 63 74 69 76 65 20 57 50 3a 25 32 64 2f 25 64 Active WP:%2d/%d
6e5: 20 00 .
000006e7 <__c.3351>:
6e7: 28 52 65 6c 61 74 69 76 65 20 50 6f 73 69 74 69 (Relative Positi
6f7: 6f 6e 73 29 00 ons).
000006fc <__c.3349>:
6fc: 4c 6f 61 64 20 57 61 79 70 6f 69 6e 74 73 00 Load Waypoints.
0000070b <__c.3333>:
70b: 43 4f 4d 50 41 53 53 20 4f 46 46 21 20 00 COMPASS OFF! .
00000719 <__c.3331>:
719: 48 48 21 20 00 HH! .
0000071e <__c.3329>:
71e: 4c 4f 4f 50 49 4e 47 21 20 00 LOOPING! .
00000728 <__c.3327>:
728: 43 4f 55 50 4c 49 4e 47 20 4f 46 46 21 20 00 COUPLING OFF! .
00000737 <__c.3324>:
737: 50 34 3a 25 34 69 20 50 35 3a 25 34 69 20 36 3a P4:%4i P5:%4i 6:
747: 25 33 69 00 %3i.
0000074b <__c.3322>:
74b: 50 31 3a 25 34 69 20 50 32 3a 25 34 69 20 33 3a P1:%4i P2:%4i 3:
75b: 25 33 69 00 %3i.
0000075f <__c.3320>:
75f: 47 73 3a 25 34 69 20 59 61 3a 25 34 69 20 00 Gs:%4i Ya:%4i .
0000076e <__c.3318>:
76e: 4e 69 3a 25 34 69 20 52 6f 3a 25 34 69 20 43 3a Ni:%4i Ro:%4i C:
77e: 25 33 69 00 %3i.
00000782 <__c.3315>:
782: 48 4f 4c 44 20 00 HOLD .
00000788 <__c.3313>:
788: 25 75 6d 00 %um.
0000078c <__c.3311>:
78c: 48 4f 4d 45 20 41 4c 54 3a 00 HOME ALT:.
00000796 <__c.3308>:
796: 20 46 53 3a 25 75 73 65 6b 20 00 FS:%usek .
000007a1 <__c.3306>:
7a1: 28 48 4f 4c 44 29 00 (HOLD).
000007a8 <__c.3304>:
7a8: 28 41 49 44 29 20 00 (AID) .
000007af <__c.3302>:
7af: 28 48 4f 4d 45 29 00 (HOME).
000007b6 <__c.3300>:
7b6: 28 46 52 45 45 29 00 (FREE).
000007bd <__c.3298>:
7bd: 44 49 53 41 42 4c 45 44 00 DISABLED.
000007c6 <__c.3296>:
7c6: 47 50 53 3a 00 GPS:.
000007cb <__c.3293>:
7cb: 20 54 45 41 43 48 00 TEACH.
000007d2 <__c.3291>:
7d2: 20 28 4f 46 46 29 00 (OFF).
000007d9 <__c.3289>:
7d9: 20 28 4f 4e 29 20 00 (ON) .
000007e0 <__c.3287>:
7e0: 44 49 53 41 42 4c 45 44 00 DISABLED.
000007e9 <__c.3285>:
7e9: 43 46 3a 00 CF:.
000007ed <__c.3282>:
7ed: 44 49 53 41 42 4c 45 44 00 DISABLED.
000007f6 <__c.3280>:
7f6: 56 41 52 49 4f 00 VARIO.
000007fc <__c.3278>:
7fc: 4c 49 4d 49 54 00 LIMIT.
00000802 <__c.3276>:
802: 28 4f 46 46 29 20 00 (OFF) .
00000809 <__c.3274>:
809: 28 4f 4e 29 20 20 00 (ON) .
00000810 <__c.3272>:
810: 50 4f 54 49 3a 25 33 75 20 00 POTI:%3u .
0000081a <__c.3270>:
81a: 41 4c 54 3a 00 ALT:.
0000081f <__c.3267>:
81f: 4d 69 6e 3a 25 32 69 2e 25 31 69 56 20 25 73 20 Min:%2i.%1iV %s
...
00000830 <__c.3263>:
830: 53 65 74 74 69 6e 67 3a 25 75 20 25 73 20 00 Setting:%u %s .
0000083f <__c.3249>:
83f: 20 77 77 77 2e 4d 69 6b 72 6f 4b 6f 70 74 65 72 www.MikroKopter
84f: 2e 64 65 20 20 00 .de .
00000855 <__c.3247>:
855: 21 21 20 4c 69 50 6f 20 76 6f 6c 74 61 67 65 20 !! LiPo voltage
865: 21 21 00 !!.
00000868 <__c.3245>:
868: 45 52 52 3a 20 00 ERR: .
0000086e <__c.3243>:
86e: 45 52 52 3a 20 25 32 64 20 21 00 ERR: %2d !.
00000879 <__c.3240>:
879: 25 33 69 20 25 33 69 20 25 33 69 20 25 33 69 25 %3i %3i %3i %3i%
889: 63 43 00 cC.
0000088c <__c.3238>:
88c: 25 33 69 20 25 33 69 25 63 43 20 20 20 20 20 20 %3i %3i%cC
89c: 20 20 00 .
0000089f <__c.3236>:
89f: 25 32 69 2e 25 69 20 25 32 69 2e 25 69 20 25 32 %2i.%i %2i.%i %2
8af: 69 2e 25 69 20 25 32 69 2e 25 69 41 00 i.%i %2i.%iA.
000008bc <__c.3234>:
8bc: 25 32 69 2e 25 69 20 25 32 69 2e 25 69 41 00 %2i.%i %2i.%iA.
000008cb <__c.3231>:
8cb: 25 33 69 20 25 33 69 20 25 33 69 20 25 33 69 25 %3i %3i %3i %3i%
8db: 63 43 00 cC.
000008de <__c.3229>:
8de: 25 32 69 2e 25 69 20 25 32 69 2e 25 69 20 25 32 %2i.%i %2i.%i %2
8ee: 69 2e 25 69 20 25 32 69 2e 25 69 41 00 i.%i %2i.%iA.
000008fb <__c.3226>:
8fb: 20 20 20 4e 6f 20 4e 61 76 69 43 74 72 6c 20 20 No NaviCtrl
90b: 20 20 20 20 20 00 .
00000911 <__c.3224>:
911: 44 47 50 53 20 00 DGPS .
00000917 <__c.3222>:
917: 4e 4f 46 49 58 00 NOFIX.
0000091d <__c.3218>:
91d: 20 20 33 44 20 00 3D .
00000923 <__c.3215>:
923: 47 50 53 3a 25 32 75 6d 2f 73 20 53 41 54 3a 25 GPS:%2um/s SAT:%
933: 64 20 00 d .
00000936 <__c.3212>:
936: 20 20 00 .
00000939 <__c.3210>:
939: 43 46 00 CF.
0000093c <__c.3208>:
93c: 50 57 52 3a 25 32 69 2e 25 31 69 41 20 28 25 69 PWR:%2i.%1iA (%i
94c: 57 29 20 00 W) .
00000950 <__c.3205>:
950: 48 4d 3a 25 33 64 25 63 20 20 44 49 53 54 3a 25 HM:%3d%c DIST:%
960: 33 64 6d 20 25 63 00 3dm %c.
00000967 <__c.3202>:
967: 25 63 00 %c.
0000096a <__c.3200>:
96a: 41 4c 54 3a 2d 2d 2d 2d 20 00 ALT:---- .
00000974 <__c.3198>:
974: 41 4c 54 3a 25 34 69 6d 00 ALT:%4im.
0000097d <__c.3196>:
97d: 41 4c 54 3a 25 34 69 6d 00 ALT:%4im.
00000986 <__c.3194>:
986: 44 49 52 3a 25 33 64 25 63 00 DIR:%3d%c.
00000990 <__c.3190>:
990: 20 25 32 69 3a 25 30 32 69 20 20 25 32 69 2e 25 %2i:%02i %2i.%
9a0: 31 69 56 20 25 34 69 6d 41 68 00 1iV %4imAh.
000009ab <__c.3188>:
9ab: 20 25 32 69 3a 25 30 32 69 20 20 25 32 69 2e 25 %2i:%02i %2i.%
9bb: 31 69 56 20 25 34 69 6d 41 68 00 1iV %4imAh.
000009c6 <__c.3173>:
9c6: 20 77 77 77 2e 4d 69 6b 72 6f 4b 6f 70 74 65 72 www.MikroKopter
9d6: 2e 64 65 20 20 00 .de .
000009dc <__c.3171>:
9dc: 21 21 20 4c 69 50 6f 20 76 6f 6c 74 61 67 65 20 !! LiPo voltage
9ec: 21 21 00 !!.
000009ef <__c.3169>:
9ef: 45 52 52 3a 20 00 ERR: .
000009f5 <__c.3167>:
9f5: 45 52 52 3a 20 25 32 64 20 21 00 ERR: %2d !.
00000a00 <__c.3163>:
a00: 20 20 20 20 25 32 75 6d 2f 73 3a 20 20 48 4d 3a %2um/s: HM:
a10: 25 33 64 25 63 20 25 63 00 %3d%c %c.
00000a19 <__c.3161>:
a19: 69 6e 63 6c 3a 25 32 64 25 63 28 25 32 69 29 00 incl:%2d%c(%2i).
00000a29 <__c.3159>:
a29: 48 4d 3a 25 33 64 25 63 20 25 63 00 HM:%3d%c %c.
00000a35 <__c.3157>:
a35: 4d 41 47 3a 25 33 75 25 25 20 00 MAG:%3u%% .
00000a40 <__c.3154>:
a40: 21 21 00 !!.
00000a43 <__c.3150>:
a43: 33 44 00 3D.
00000a46 <__c.3148>:
a46: 44 20 00 D .
00000a49 <__c.3145>:
a49: 44 49 53 54 3a 25 33 64 6d 00 DIST:%3dm.
00000a53 <__c.3143>:
a53: 53 41 54 3a 25 32 64 20 00 SAT:%2d .
00000a5c <__c.3141>:
a5c: 3a 00 :.
00000a5e <__c.3138>:
a5e: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
a6e: 2d 2d 2d 2d 2d 00 -----.
00000a74 <__c.3136>:
a74: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b 2d 2d 2d 2d 2d 2d ---------+------
a84: 2d 2d 2d 2d 2d 00 -----.
00000a8a <__c.3134>:
a8a: 3a 00 :.
00000a8c <__c.3132>:
a8c: 3a 00 :.
00000a8e <__c.3130>:
a8e: 3a 00 :.
00000a90 <__c.3127>:
a90: 49 3a 25 32 69 2e 25 31 69 41 20 00 I:%2i.%1iA .
00000a9c <__c.3125>:
a9c: 20 20 25 35 69 20 20 00 %5i .
00000aa4 <__c.3123>:
aa4: 20 20 25 35 69 20 20 00 %5i .
00000aac <__c.3120>:
aac: 20 00 .
00000aae <__c.3118>:
aae: 43 00 C.
00000ab0 <__c.3116>:
ab0: 44 49 52 3a 20 25 33 64 25 63 00 DIR: %3d%c.
00000abb <__c.3114>:
abb: 20 20 25 32 69 3a 25 30 32 69 20 20 00 %2i:%02i .
00000ac8 <__c.3112>:
ac8: 20 20 25 32 69 3a 25 30 32 69 20 20 00 %2i:%02i .
00000ad5 <__c.3108>:
ad5: 41 4c 54 3a 2d 2d 2d 2d 20 00 ALT:---- .
00000adf <__c.3106>:
adf: 41 4c 54 3a 25 34 69 6d 20 20 00 ALT:%4im .
00000aea <__c.3104>:
aea: 41 4c 54 3a 25 34 69 6d 20 25 63 00 ALT:%4im %c.
00000af6 <__c.3102>:
af6: 20 20 25 32 69 2e 25 31 69 56 20 20 00 %2i.%1iV .
00000b03 <__c.3100>:
b03: 20 20 25 32 69 2e 25 31 69 56 20 20 00 %2i.%1iV .
00000b10 <__c.2991>:
b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b20: 20 20 20 20 20 00 .
00000b26 <HOTT_ERROR>:
b26: 00 00 05 00 05 00 04 01 06 01 08 00 06 01 02 00 ................
b36: 04 00 04 00 07 00 07 00 07 00 07 00 07 00 07 00 ................
b46: 07 00 03 01 03 01 05 00 17 01 0f 01 06 00 09 01 ................
b56: 0a 01 19 01 05 01 05 01 19 01 1a 01 0f 01 01 00 ................
b66: 09 00 06 00 06 00 ......
00000b6c <NC_ERROR_TEXT>:
b6c: 4e 6f 20 45 72 72 6f 72 20 20 20 20 20 20 20 20 No Error
b7c: 00 4e 6f 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 .Not compatible
b8c: 20 00 4d 4b 33 4d 61 67 20 6e 6f 74 20 63 6f 6d .MK3Mag not com
b9c: 70 61 00 4e 6f 20 46 43 20 63 6f 6d 6d 75 6e 69 pa.No FC communi
bac: 63 61 74 00 43 6f 6d 70 61 73 73 20 63 6f 6d 6d cat.Compass comm
bbc: 75 6e 69 63 00 47 50 53 20 63 6f 6d 6d 75 6e 69 unic.GPS communi
bcc: 63 61 74 69 6f 00 63 6f 6d 70 61 73 73 20 76 61 catio.compass va
bdc: 6c 75 65 20 20 20 00 52 43 20 53 69 67 6e 61 6c lue .RC Signal
bec: 20 6c 6f 73 74 20 20 00 46 43 20 73 70 69 20 72 lost .FC spi r
bfc: 78 20 65 72 72 6f 72 20 00 4e 6f 20 4e 43 20 63 x error .No NC c
c0c: 6f 6d 6d 75 6e 69 63 61 74 00 46 43 20 4e 69 63 ommunicat.FC Nic
c1c: 6b 20 47 79 72 6f 20 20 20 20 00 46 43 20 52 6f k Gyro .FC Ro
c2c: 6c 6c 20 47 79 72 6f 20 20 20 20 00 46 43 20 59 ll Gyro .FC Y
c3c: 61 77 20 47 79 72 6f 20 20 20 20 20 00 46 43 20 aw Gyro .FC
c4c: 4e 69 63 6b 20 41 43 43 20 20 20 20 20 00 46 43 Nick ACC .FC
c5c: 20 52 6f 6c 6c 20 41 43 43 20 20 20 20 20 00 46 Roll ACC .F
c6c: 43 20 5a 2d 41 43 43 20 20 20 20 20 20 20 20 00 C Z-ACC .
c7c: 50 72 65 73 73 75 72 65 20 73 65 6e 73 6f 72 20 Pressure sensor
c8c: 00 49 32 43 20 46 43 2d 3e 42 4c 2d 43 74 72 6c .I2C FC->BL-Ctrl
c9c: 20 00 42 6c 20 4d 69 73 73 69 6e 67 20 20 20 20 .Bl Missing
cac: 20 20 00 4d 69 78 65 72 20 45 72 72 6f 72 20 20 .Mixer Error
cbc: 20 20 20 00 43 61 72 65 66 72 65 65 20 45 72 72 .Carefree Err
ccc: 6f 72 20 20 00 47 50 53 20 46 69 78 20 6c 6f 73 or .GPS Fix los
cdc: 74 20 20 20 20 00 4d 61 67 6e 65 74 20 45 72 72 t .Magnet Err
cec: 6f 72 20 20 20 20 00 4d 6f 74 6f 72 20 72 65 73 or .Motor res
cfc: 74 61 72 74 20 20 20 00 42 4c 20 4c 69 6d 69 74 tart .BL Limit
d0c: 61 74 69 6f 6e 20 20 20 00 47 50 53 20 52 61 6e ation .GPS Ran
d1c: 67 65 20 20 20 20 20 20 20 00 4e 6f 20 53 44 2d ge .No SD-
d2c: 43 61 72 64 20 20 20 20 20 20 00 53 44 2d 4c 6f Card .SD-Lo
d3c: 67 67 69 6e 67 20 65 72 72 6f 72 00 46 6c 79 69 gging error.Flyi
d4c: 6e 67 20 72 61 6e 67 65 21 20 20 20 00 4d 61 78 ng range! .Max
d5c: 20 41 6c 74 69 74 75 64 65 21 20 20 20 00 4e 6f Altitude! .No
d6c: 20 47 50 53 20 66 69 78 20 20 20 20 20 20 00 63 GPS fix .c
d7c: 6f 6d 70 61 73 73 20 6e 6f 74 20 63 61 6c 2e 00 ompass not cal..
d8c: 42 4c 2d 53 65 6c 66 74 65 73 74 20 20 20 20 20 BL-Selftest
d9c: 00 6e 6f 20 65 78 74 2e 20 63 6f 6d 70 61 73 73 .no ext. compass
dac: 20 00 63 6f 6d 70 61 73 73 20 73 65 6e 73 6f 72 .compass sensor
dbc: 20 20 00 .
00000dbf <SETTING>:
dbf: 53 65 74 20 20 3a 00 Set :.
00000dc6 <BOAT_MODE>:
dc6: 20 4d 69 6b 72 6f 4b 6f 70 74 65 72 20 28 42 6f MikroKopter (Bo
dd6: 61 74 29 20 20 00 at) .
00000ddc <SIMULATION>:
ddc: 20 20 53 49 4d 55 4c 41 54 49 4f 4e 20 61 63 74 SIMULATION act
dec: 69 76 65 20 20 00 ive .
00000df2 <LANDING>:
df2: 20 21 21 20 20 20 4c 41 4e 44 49 4e 47 20 20 20 !! LANDING
e02: 20 21 21 20 20 00 !! .
00000e08 <UNDERVOLTAGE>:
e08: 20 21 21 20 4c 69 50 6f 20 76 6f 6c 74 61 67 65 !! LiPo voltage
e18: 20 21 21 20 20 00 !! .
00000e1e <MIKROKOPTER>:
e1e: 20 20 20 20 20 4d 69 6b 72 6f 4b 6f 70 74 65 72 MikroKopter
e2e: 20 20 20 20 20 00 .
00000e34 <__c.3126>:
e34: 4e 6f 20 4e 61 76 69 43 74 72 6c 21 00 No NaviCtrl!.
00000e41 <__c.3124>:
e41: 48 6f 6d 65 3a 25 33 64 6d 20 25 33 64 25 63 20 Home:%3dm %3d%c
e51: 25 63 00 %c.
00000e54 <__c.3122>:
e54: 44 47 50 53 00 DGPS.
00000e59 <__c.3120>:
e59: 4e 6f 46 78 00 NoFx.
00000e5e <__c.3116>:
e5e: 20 20 33 44 00 3D.
00000e63 <__c.3113>:
e63: 25 32 75 6d 2f 73 20 53 61 74 3a 25 64 20 00 %2um/s Sat:%d .
00000e72 <__c.3108>:
e72: 20 20 00 .
00000e75 <__c.3106>:
e75: 2d 3e 00 ->.
00000e78 <__c.3104>:
e78: 2d 2d 2f 2d 2d 00 --/--.
00000e7e <__c.3102>:
e7e: 25 32 64 2f 25 64 20 00 %2d/%d .
00000e86 <__c.3100>:
e86: 23 25 32 64 20 57 50 73 3a 00 #%2d WPs:.
00000e90 <__c.3098>:
e90: 6e 6f 20 47 50 53 2d 46 69 78 00 no GPS-Fix.
00000e9b <__c.3096>:
e9b: 6e 6f 20 53 44 2d 43 61 72 64 00 no SD-Card.
00000ea6 <__c.3094>:
ea6: 52 65 6c 3a 25 73 00 Rel:%s.
00000ead <__c.3092>:
ead: 52 65 6c 61 74 69 76 65 20 57 50 73 20 00 Relative WPs .
00000ebb <__c.3085>:
ebb: 20 20 00 .
00000ebe <__c.3083>:
ebe: 2d 3e 00 ->.
00000ec1 <__c.3081>:
ec1: 2d 2d 2f 2d 2d 00 --/--.
00000ec7 <__c.3079>:
ec7: 25 32 64 2f 25 64 20 00 %2d/%d .
00000ecf <__c.3077>:
ecf: 23 25 32 64 20 57 50 3a 00 #%2d WP:.
00000ed8 <__c.3075>:
ed8: 6e 6f 20 53 44 2d 43 61 72 64 00 no SD-Card.
00000ee3 <__c.3073>:
ee3: 46 49 58 3a 25 73 00 FIX:%s.
00000eea <__c.3071>:
eea: 46 49 58 20 57 61 79 70 6f 69 6e 74 73 00 FIX Waypoints.
00000ef8 <__c.3064>:
ef8: 20 20 00 .
00000efb <__c.3062>:
efb: 2d 3e 00 ->.
00000efe <__c.3060>:
efe: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
...
00000f0f <__c.3058>:
f0f: 44 69 73 74 3a 25 33 64 20 41 6c 74 3a 25 33 64 Dist:%3d Alt:%3d
f1f: 20 00 .
00000f21 <__c.3056>:
f21: 25 32 64 00 %2d.
00000f25 <__c.3054>:
f25: 6e 6f 20 53 44 2d 43 61 72 64 00 no SD-Card.
00000f30 <__c.3052>:
f30: 4c 6f 61 64 20 50 6f 69 6e 74 00 Load Point.
00000f3b <__c.3045>:
f3b: 20 20 00 .
00000f3e <__c.3043>:
f3e: 2d 3e 00 ->.
00000f41 <__c.3041>:
f41: 44 69 72 3a 25 33 64 20 41 6c 74 3a 25 33 64 6d Dir:%3d Alt:%3dm
...
00000f52 <__c.3039>:
f52: 25 32 64 00 %2d.
00000f56 <__c.3037>:
f56: 6e 6f 20 47 50 53 2d 46 69 78 00 no GPS-Fix.
00000f61 <__c.3035>:
f61: 6e 6f 20 53 44 2d 43 61 72 64 00 no SD-Card.
00000f6c <__c.3033>:
f6c: 53 61 76 65 20 50 6f 69 6e 74 3a 00 Save Point:.
00000f78 <__c.3026>:
f78: 53 61 76 65 20 73 69 6e 67 6c 2e 50 6f 69 6e 74 Save singl.Point
...
00000f89 <__c.3021>:
f89: 4c 6f 61 64 20 73 69 6e 67 6c 2e 50 6f 69 6e 74 Load singl.Point
...
00000f9a <__c.3016>:
f9a: 28 52 65 6c 61 74 69 76 65 29 20 20 20 00 (Relative) .
00000fa8 <__c.3014>:
fa8: 4c 6f 61 64 20 57 61 79 70 6f 69 6e 74 73 00 Load Waypoints.
00000fb7 <__c.3009>:
fb7: 28 46 69 78 65 64 29 20 20 20 20 20 20 00 (Fixed) .
00000fc5 <__c.3007>:
fc5: 4c 6f 61 64 20 57 61 79 70 6f 69 6e 74 73 00 Load Waypoints.
00000fd4 <__c.3002>:
fd4: 49 6e 63 6c 69 2e 3a 25 33 69 25 63 20 28 25 69 Incli.:%3i%c (%i
fe4: 29 20 00 ) .
00000fe7 <__c.3000>:
fe7: 4d 61 67 6e 65 74 3a 25 33 69 25 25 20 25 33 69 Magnet:%3i%% %3i
ff7: 25 63 00 %c.
00000ffa <__c.2995>:
ffa: 25 34 69 57 20 25 36 69 6d 41 68 00 %4iW %6imAh.
00001006 <__c.2993>:
1006: 25 32 69 2e 25 31 69 56 20 25 33 69 2e 25 31 69 %2i.%1iV %3i.%1i
1016: 41 00 A.
00001018 <__c.2988>:
1018: 25 63 43 20 20 20 20 20 00 %cC .
00001021 <__c.2986>:
1021: 54 65 6d 70 65 72 61 74 75 72 65 73 20 20 20 20 Temperatures
...
00001032 <__c.2984>:
1032: 25 33 69 20 25 33 69 20 25 33 69 20 25 33 69 00 %3i %3i %3i %3i.
00001042 <__c.2982>:
1042: 25 33 69 20 25 33 69 20 25 33 69 20 25 33 69 00 %3i %3i %3i %3i.
00001052 <__c.2977>:
1052: 52 00 R.
00001054 <__c.2975>:
1054: 25 34 69 6d 25 63 00 %4im%c.
0000105b <__c.2973>:
105b: 25 34 69 20 25 32 69 3a 25 30 32 69 00 %4i %2i:%02i.
00001068 <__c.2971>:
1068: 28 42 6f 61 74 2d 4d 6f 64 65 29 00 (Boat-Mode).
00001074 <__c.2969>:
1074: 53 65 74 25 64 3a 25 73 00 Set%d:%s.
0000107d <__c.2967>:
107d: 53 49 4d 55 4c 41 54 49 4f 4e 00 SIMULATION.
00001088 <__c.2965>:
1088: 45 52 52 4f 52 3a 20 25 32 64 20 00 ERROR: %2d .
00001094 <__c.2961>:
1094: 53 74 61 74 75 73 20 20 20 20 00 Status .
0000109f <__c.2959>:
109f: 25 33 64 25 63 20 25 33 64 6d 25 63 00 %3d%c %3dm%c.
000010ac <__c.2957>:
10ac: 25 32 69 2e 25 31 69 56 00 %2i.%1iV.
000010b5 <JetiBox_Menu>:
10b5: 08 01 00 00 ea 81 00 02 01 01 b0 7b 01 03 02 02 ...........{....
10c5: 2f 7c 02 04 03 03 35 81 03 05 04 09 ec 7c 04 06 /|....5......|..
10d5: 05 0a 17 7d 05 07 06 0b 42 7d 06 08 07 0c 57 7d ...}....B}....W}
10e5: 07 00 08 06 a8 7c 04 09 09 09 31 7f 05 0a 0a 0a .....|....1.....
10f5: 26 80 06 0b 0b 0b 4c 7e 07 0c 0c 0c 6c 7d &.....L~....l}
00001103 <JETI_CODE>:
1103: 00 4f 50 51 52 53 54 53 56 57 48 00 58 59 00 5a .OPQRSTSVWH.XY.Z
1113: 55 45 46 47 48 41 00 49 42 4a 4a 00 00 00 00 00 UEFGHA.IBJJ.....
1123: 00 00 00 00 00 00 44 4c 4d 00 00 00 00 00 4e 00 ......DLM.....N.
1133: 00 00 4b 00 43 ..K.C
00001138 <__c.3160>:
1138: 25 31 64 2e 25 30 32 64 20 25 31 64 2e 25 30 32 %1d.%02d %1d.%02
1148: 64 20 25 31 64 2e 25 30 32 64 20 25 31 64 2e 25 d %1d.%02d %1d.%
1158: 30 32 64 00 02d.
0000115c <__c.3158>:
115c: 42 4c 20 56 65 72 73 69 6f 6e 73 00 BL Versions.
00001168 <__c.3155>:
1168: 31 32 00 12.
0000116b <__c.3153>:
116b: 31 31 00 11.
0000116e <__c.3151>:
116e: 31 30 00 10.
00001171 <__c.3149>:
1171: 20 25 63 20 20 20 2d 20 20 20 2d 20 20 20 2d 20 %c - - -
...
00001182 <__c.3147>:
1182: 20 25 63 20 20 20 25 63 20 20 20 25 63 20 20 20 %c %c %c
1192: 25 63 20 00 %c .
00001196 <__c.3145>:
1196: 20 25 63 20 20 20 25 63 20 20 20 25 63 20 20 20 %c %c %c
11a6: 25 63 20 00 %c .
000011aa <__c.3143>:
11aa: 42 4c 2d 43 74 72 6c 20 66 6f 75 6e 64 20 00 BL-Ctrl found .
000011b9 <__c.3137>:
11b9: 25 33 64 20 25 33 64 20 25 33 64 20 25 33 64 20 %3d %3d %3d %3d
...
000011ca <__c.3135>:
11ca: 28 69 6e 20 30 2e 31 41 29 00 (in 0.1A).
000011d4 <__c.3133>:
11d4: 42 4c 20 43 75 72 72 65 6e 74 00 BL Current.
000011df <__c.3127>:
11df: 25 33 64 20 25 33 64 20 25 33 64 20 25 33 64 20 %3d %3d %3d %3d
...
000011f0 <__c.3125>:
11f0: 42 4c 20 54 65 6d 70 65 72 61 74 75 72 65 00 BL Temperature.
000011ff <__c.3119>:
11ff: 25 33 64 20 25 33 64 20 25 33 64 20 25 33 64 20 %3d %3d %3d %3d
...
00001210 <__c.3117>:
1210: 42 4c 2d 43 74 72 6c 20 45 72 72 6f 72 73 20 00 BL-Ctrl Errors .
00001220 <__c.3114>:
1220: 52 61 6e 67 65 3a 25 33 69 2d 25 33 69 00 Range:%3i-%3i.
0000122e <__c.3112>:
122e: 50 6f 73 69 74 69 6f 6e 3a 20 25 33 69 00 Position: %3i.
0000123c <__c.3110>:
123c: 53 65 74 70 6f 69 6e 74 20 20 25 33 69 00 Setpoint %3i.
0000124a <__c.3108>:
124a: 53 65 72 76 6f 20 20 00 Servo .
00001252 <__c.3105>:
1252: 54 72 75 65 3a 20 20 20 20 20 25 35 69 00 True: %5i.
00001260 <__c.3103>:
1260: 47 79 72 6f 3a 20 20 20 20 20 25 35 69 00 Gyro: %5i.
0000126e <__c.3101>:
126e: 4d 61 67 6e 65 74 3a 20 20 20 25 35 69 00 Magnet: %5i.
0000127c <__c.3099>:
127c: 43 6f 6d 70 61 73 73 00 Compass.
00001284 <__c.3096>:
1284: 28 72 65 73 65 74 29 00 (reset).
0000128c <__c.3094>:
128c: 41 63 74 3a 20 20 25 35 75 6d 69 6e 00 Act: %5umin.
00001299 <__c.3092>:
1299: 54 6f 74 61 6c 3a 25 35 75 6d 69 6e 00 Total:%5umin.
000012a6 <__c.3090>:
12a6: 46 6c 69 67 68 74 2d 54 69 6d 65 20 20 00 Flight-Time .
000012b4 <__c.3084>:
12b4: 50 6f 74 69 25 69 3a 20 20 25 33 69 00 Poti%i: %3i.
000012c1 <__c.3078>:
12c1: 50 6f 74 69 25 69 3a 20 20 25 33 69 00 Poti%i: %3i.
000012ce <__c.3075>:
12ce: 4c 61 6e 64 3a 20 25 32 64 2e 25 64 56 00 Land: %2d.%dV.
000012dc <__c.3073>:
12dc: 48 6f 6d 65 3a 20 25 32 64 2e 25 64 56 00 Home: %2d.%dV.
000012ea <__c.3071>:
12ea: 57 61 72 6e 3a 20 25 32 64 2e 25 64 56 00 Warn: %2d.%dV.
000012f8 <__c.3069>:
12f8: 55 6e 64 65 72 76 6f 6c 74 61 67 65 73 20 20 00 Undervoltages .
00001308 <__c.3066>:
1308: 52 43 2d 43 68 61 6e 6e 65 6c 73 3a 25 34 69 00 RC-Channels:%4i.
00001318 <__c.3064>:
1318: 52 43 2d 51 75 61 6c 69 74 79 3a 20 25 34 69 00 RC-Quality: %4i.
00001328 <__c.3062>:
1328: 52 65 63 65 69 76 65 72 00 Receiver.
00001331 <__c.3059>:
1331: 44 69 73 63 68 61 72 67 65 3a 20 25 35 69 6d 41 Discharge: %5imA
1341: 68 00 h.
00001343 <__c.3057>:
1343: 50 6f 77 65 72 3a 20 20 20 20 20 25 34 69 57 00 Power: %4iW.
00001353 <__c.3055>:
1353: 43 75 72 72 65 6e 74 3a 20 20 20 25 33 69 2e 25 Current: %3i.%
1363: 31 69 41 00 1iA.
00001367 <__c.3053>:
1367: 56 6f 6c 74 61 67 65 3a 20 20 20 25 33 69 2e 25 Voltage: %3i.%
1377: 31 69 56 00 1iV.
0000137b <__c.3050>:
137b: 5a 20 20 20 20 25 34 69 20 28 25 33 69 29 00 Z %4i (%3i).
0000138a <__c.3048>:
138a: 52 6f 6c 6c 20 25 34 69 20 28 25 33 69 29 00 Roll %4i (%3i).
00001399 <__c.3046>:
1399: 4e 69 63 6b 20 25 34 69 20 28 25 33 69 29 00 Nick %4i (%3i).
000013a8 <__c.3044>:
13a8: 41 43 43 20 2d 20 53 65 6e 73 6f 72 00 ACC - Sensor.
000013b5 <__c.3041>:
13b5: 59 61 77 20 20 25 34 69 20 28 25 34 69 29 00 Yaw %4i (%4i).
000013c4 <__c.3039>:
13c4: 52 6f 6c 6c 20 25 34 69 20 28 25 34 69 29 00 Roll %4i (%4i).
000013d3 <__c.3037>:
13d3: 4e 69 63 6b 20 25 34 69 20 28 25 34 69 29 00 Nick %4i (%4i).
000013e2 <__c.3035>:
13e2: 47 79 72 6f 20 2d 20 53 65 6e 73 6f 72 00 Gyro - Sensor.
000013f0 <__c.3032>:
13f0: 50 33 3a 25 34 69 20 20 50 34 3a 25 34 69 20 00 P3:%4i P4:%4i .
00001400 <__c.3030>:
1400: 50 31 3a 25 34 69 20 20 50 32 3a 25 34 69 20 00 P1:%4i P2:%4i .
00001410 <__c.3028>:
1410: 47 73 3a 25 34 69 20 20 47 69 3a 25 34 69 20 00 Gs:%4i Gi:%4i .
00001420 <__c.3026>:
1420: 4e 69 3a 25 34 69 20 20 52 6f 3a 25 34 69 20 00 Ni:%4i Ro:%4i .
00001430 <__c.3020>:
1430: 4b 25 69 3a 25 34 69 20 20 4b 25 69 3a 25 34 69 K%i:%4i K%i:%4i
1440: 20 00 .
00001442 <__c.3017>:
1442: 43 6f 6d 70 61 73 73 3a 20 20 20 25 35 69 00 Compass: %5i.
00001451 <__c.3015>:
1451: 52 6f 6c 6c 3a 20 20 20 20 20 20 25 35 69 00 Roll: %5i.
00001460 <__c.3013>:
1460: 4e 69 63 6b 3a 20 20 20 20 20 20 25 35 69 00 Nick: %5i.
0000146f <__c.3011>:
146f: 61 63 74 2e 20 62 65 61 72 69 6e 67 00 act. bearing.
0000147c <__c.3008>:
147c: 25 69 00 %i.
0000147f <__c.3006>:
147f: 28 41 29 00 (A).
00001483 <__c.3004>:
1483: 4f 66 66 73 65 74 3a 20 20 25 35 69 00 Offset: %5i.
00001490 <__c.3002>:
1490: 50 72 65 73 73 75 72 65 3a 25 35 69 00 Pressure:%5i.
0000149d <__c.3000>:
149d: 53 65 74 70 6f 69 6e 74 3a 25 35 69 00 Setpoint:%5i.
000014aa <__c.2998>:
14aa: 48 65 69 67 68 74 3a 20 20 25 35 69 00 Height: %5i.
000014b7 <__c.2994>:
14b7: 42 4c 2d 53 65 6c 66 74 65 73 74 20 45 72 72 3a BL-Selftest Err:
14c7: 25 32 64 00 %2d.
000014cb <__c.2992>:
14cb: 49 32 43 20 45 52 52 4f 52 21 21 21 00 I2C ERROR!!!.
000014d8 <__c.2990>:
14d8: 4d 69 73 73 69 6e 67 20 42 4c 2d 43 74 72 6c 3a Missing BL-Ctrl:
14e8: 25 64 20 21 21 00 %d !!.
000014ee <__c.2988>:
14ee: 48 61 72 64 77 61 72 65 20 45 72 72 6f 72 20 31 Hardware Error 1
14fe: 3a 25 64 20 21 21 00 :%d !!.
00001505 <__c.2986>:
1505: 45 52 52 25 32 64 3a 00 ERR%2d:.
0000150d <__c.2984>:
150d: 4d 69 78 65 72 20 45 72 72 6f 72 21 00 Mixer Error!.
0000151a <__c.2982>:
151a: 42 4f 41 54 00 BOAT.
0000151f <__c.2980>:
151f: 53 65 74 3a 25 64 20 25 73 00 Set:%d %s.
00001529 <__c.2978>:
1529: 48 57 3a 56 25 64 2e 25 64 20 53 57 3a 25 64 2e HW:V%d.%d SW:%d.
1539: 25 30 32 64 25 63 20 00 %02d%c .
00001541 <__c.2976>:
1541: 2b 20 4d 69 6b 72 6f 4b 6f 70 74 65 72 20 2b 00 + MikroKopter +.
00001551 <__c.2973>:
1551: 5b 25 69 5d 00 [%i].
00001556 <__c.2971>:
1556: 5b 25 69 5d 00 [%i].
0000155b <pgm_sinlookup>:
155b: 00 00 8f 00 1e 01 ad 01 3b 02 ca 02 58 03 e6 03 ........;...X...
156b: 74 04 02 05 8f 05 1b 06 a7 06 33 07 be 07 48 08 t.........3...H.
157b: d2 08 5b 09 e3 09 6b 0a f2 0a 78 0b fd 0b 81 0c ..[...k...x.....
158b: 04 0d 86 0d 07 0e 87 0e 06 0f 84 0f 00 10 7b 10 ..............{.
159b: f5 10 6e 11 e5 11 5b 12 cf 12 42 13 b3 13 23 14 ..n...[...B...#.
15ab: 92 14 fe 14 6a 15 d3 15 3b 16 a1 16 05 17 67 17 ....j...;.....g.
15bb: c8 17 27 18 83 18 de 18 37 19 8e 19 e3 19 36 1a ..'.....7.....6.
15cb: 87 1a d6 1a 23 1b 6e 1b b6 1b fd 1b 41 1c 83 1c ....#.n.....A...
15db: c3 1c 00 1d 3c 1d 75 1d ab 1d e0 1d 12 1e 42 1e ....<.u.......B.
15eb: 6f 1e 9a 1e c3 1e e9 1e 0d 1f 2e 1f 4d 1f 69 1f o...........M.i.
15fb: 84 1f 9b 1f b0 1f c3 1f d3 1f e1 1f ec 1f f5 1f ................
160b: fb 1f ff 1f 00 20 .....
00001611 <__c.3146>:
1611: 56 65 72 73 69 6f 6e 20 67 65 73 65 6e 64 65 74 Version gesendet
...
00001622 <__c.3143>:
1622: 21 21 21 20 49 4e 43 4f 4d 50 41 54 49 42 4c 45 !!! INCOMPATIBLE
1632: 20 21 21 21 00 !!!.
00001637 <__c.3101>:
1637: 57 72 69 74 69 6e 67 20 42 4c 20 25 64 00 Writing BL %d.
00001645 <__c.3095>:
1645: 52 65 61 64 69 6e 67 20 42 4c 20 25 64 00 Reading BL %d.
00001653 <__c.3080>:
1653: 4c 65 73 65 20 53 65 74 74 69 6e 67 20 25 64 00 Lese Setting %d.
00001663 <__c.3069>:
1663: 4d 69 78 65 72 20 6c 65 73 65 6e 00 Mixer lesen.
0000166f <ANALOG_TEXT>:
166f: 41 6e 67 6c 65 4e 69 63 6b 20 20 20 20 20 20 20 AngleNick
167f: 41 6e 67 6c 65 52 6f 6c 6c 20 20 20 20 20 20 20 AngleRoll
168f: 41 63 63 4e 69 63 6b 20 20 20 20 20 20 20 20 20 AccNick
169f: 41 63 63 52 6f 6c 6c 20 20 20 20 20 20 20 20 20 AccRoll
16af: 59 61 77 47 79 72 6f 20 20 20 20 20 20 20 20 20 YawGyro
16bf: 41 6c 74 69 74 75 64 65 20 5b 30 2e 31 6d 5d 20 Altitude [0.1m]
16cf: 41 63 63 5a 20 20 20 20 20 20 20 20 20 20 20 20 AccZ
16df: 47 61 73 20 20 20 20 20 20 20 20 20 20 20 20 20 Gas
16ef: 43 6f 6d 70 61 73 73 20 56 61 6c 75 65 20 20 20 Compass Value
16ff: 56 6f 6c 74 61 67 65 20 5b 30 2e 31 56 5d 20 20 Voltage [0.1V]
170f: 52 65 63 65 69 76 65 72 20 4c 65 76 65 6c 20 20 Receiver Level
171f: 47 79 72 6f 20 43 6f 6d 70 61 73 73 20 20 20 20 Gyro Compass
172f: 4d 6f 74 6f 72 20 31 20 20 20 20 20 20 20 20 20 Motor 1
173f: 4d 6f 74 6f 72 20 32 20 20 20 20 20 20 20 20 20 Motor 2
174f: 4d 6f 74 6f 72 20 33 20 20 20 20 20 20 20 20 20 Motor 3
175f: 4d 6f 74 6f 72 20 34 20 20 20 20 20 20 20 20 20 Motor 4
176f: 31 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16
177f: 31 37 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17
178f: 31 38 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18
179f: 31 39 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19
17af: 53 65 72 76 6f 20 20 20 20 20 20 20 20 20 20 20 Servo
17bf: 48 6f 76 65 72 67 61 73 20 20 20 20 20 20 20 20 Hovergas
17cf: 43 75 72 72 65 6e 74 20 5b 30 2e 31 41 5d 20 20 Current [0.1A]
17df: 43 61 70 61 63 69 74 79 20 5b 6d 41 68 5d 20 20 Capacity [mAh]
17ef: 48 65 69 67 68 74 20 53 65 74 70 6f 69 6e 74 20 Height Setpoint
17ff: 32 35 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25
180f: 32 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26
181f: 32 37 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27
182f: 49 32 43 2d 45 72 72 6f 72 20 20 20 20 20 20 20 I2C-Error
183f: 42 4c 20 4c 69 6d 69 74 20 20 20 20 20 20 20 20 BL Limit
184f: 47 50 53 5f 4e 69 63 6b 20 20 20 20 20 20 20 20 GPS_Nick
185f: 47 50 53 5f 52 6f 6c 6c 20 20 20 20 20 20 20 20 GPS_Roll
0000186f <Msg2>:
186f: 0a 0d 77 77 77 2e 4d 69 6b 72 6f 4b 6f 70 74 65 ..www.MikroKopte
187f: 72 2e 64 65 20 28 63 29 20 48 69 53 79 73 74 65 r.de (c) HiSyste
188f: 6d 73 20 47 6d 62 48 00 ms GmbH.
00001897 <Msg1>:
1897: 0a 0d 74 68 65 20 75 73 65 20 6f 66 20 74 68 69 ..the use of thi
18a7: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 6f 6e s software is on
18b7: 6c 79 20 70 65 72 6d 69 74 74 65 64 20 0a 0d 6f ly permitted ..o
18c7: 6e 20 6f 72 69 67 69 6e 61 6c 20 4d 69 6b 72 6f n original Mikro
18d7: 4b 6f 70 74 65 72 2d 48 61 72 64 77 61 72 65 00 Kopter-Hardware.
000018e7 <Rec_USER>:
18e7: 55 73 65 72 00 User.
000018ec <Rec_HoTT>:
18ec: 48 6f 54 54 20 56 34 00 HoTT V4.
000018f4 <Rec_ACT_DSL>:
18f4: 41 43 54 20 44 53 4c 00 ACT DSL.
000018fc <Rec_Jeti>:
18fc: 4a 65 74 69 00 Jeti.
00001901 <Rec_Spektrum>:
1901: 53 70 65 6b 74 72 75 6d 00 Spektrum.
0000190a <Rec_PPM>:
190a: 50 50 4d 00 PPM.
0000190e <__c.6>:
190e: 0a 0d 52 65 63 65 69 76 65 72 3a 20 00 ..Receiver: .
0000191b <__c.7>:
191b: 53 2e 42 75 73 00 S.Bus.
00001921 <__c.8>:
1921: 75 6e 6b 6e 6f 77 6e 2e 20 55 73 69 6e 67 20 50 unknown. Using P
1931: 50 4d 2e 2e 2e 00 PM....
00001937 <__c.9>:
1937: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62 79 not supported by
1947: 20 68 61 72 64 77 61 72 65 21 00 hardware!.
00001952 <__c.3>:
1952: 0a 0d 20 2d 20 4c 49 42 20 4e 4f 54 20 43 4f 4d .. - LIB NOT COM
1962: 50 41 54 49 42 4c 45 20 21 21 21 21 00 PATIBLE !!!!.
0000196f <__c.4>:
196f: 0a 0d 0a 0d 21 21 20 42 6f 6f 74 6c 6f 61 64 65 ....!! Bootloade
197f: 72 20 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c 65 r not compatible
198f: 20 74 6f 20 48 61 72 64 77 61 72 65 20 3e 20 32 to Hardware > 2
199f: 2e 32 20 21 21 0a 0d 0a 0d 00 .2 !!.....
000019a9 <__c.5>:
19a9: 0a 0d 46 6c 69 67 68 74 43 6f 6e 74 72 6f 6c 0a ..FlightControl.
19b9: 0d 48 61 72 64 77 61 72 65 3a 25 64 2e 25 64 0a .Hardware:%d.%d.
19c9: 0d 53 6f 66 74 77 61 72 65 3a 56 25 64 2e 25 30 .Software:V%d.%0
19d9: 32 64 25 63 20 00 00 2d%c ..
000019e0 <__ctors_end>:
19e0: 11 24 eor r1, r1
19e2: 1f be out 0x3f, r1 ; 63
19e4: cf ef ldi r28, 0xFF ; 255
19e6: d0 e4 ldi r29, 0x40 ; 64
19e8: de bf out 0x3e, r29 ; 62
19ea: cd bf out 0x3d, r28 ; 61
000019ec <__do_copy_data>:
19ec: 12 e0 ldi r17, 0x02 ; 2
19ee: a0 e0 ldi r26, 0x00 ; 0
19f0: b1 e0 ldi r27, 0x01 ; 1
19f2: ee ec ldi r30, 0xCE ; 206
19f4: f4 e6 ldi r31, 0x64 ; 100
19f6: 01 e0 ldi r16, 0x01 ; 1
19f8: 0b bf out 0x3b, r16 ; 59
19fa: 02 c0 rjmp .+4 ; 0x1a00 <__do_copy_data+0x14>
19fc: 07 90 elpm r0, Z+
19fe: 0d 92 st X+, r0
1a00: aa 3e cpi r26, 0xEA ; 234
1a02: b1 07 cpc r27, r17
1a04: d9 f7 brne .-10 ; 0x19fc <__do_copy_data+0x10>
00001a06 <__do_clear_bss>:
1a06: 2c e0 ldi r18, 0x0C ; 12
1a08: aa ee ldi r26, 0xEA ; 234
1a0a: b2 e0 ldi r27, 0x02 ; 2
1a0c: 01 c0 rjmp .+2 ; 0x1a10 <.do_clear_bss_start>
00001a0e <.do_clear_bss_loop>:
1a0e: 1d 92 st X+, r1
00001a10 <.do_clear_bss_start>:
1a10: a9 3d cpi r26, 0xD9 ; 217
1a12: b2 07 cpc r27, r18
1a14: e1 f7 brne .-8 ; 0x1a0e <.do_clear_bss_loop>
00001a16 <ndfcvbghs>:
1a16: 7a ea ldi r23, 0xAA ; 170
1a18: e2 e0 ldi r30, 0x02 ; 2
1a1a: f0 e0 ldi r31, 0x00 ; 0
1a1c: 81 e2 ldi r24, 0x21 ; 33
1a1e: 80 93 57 00 sts 0x0057, r24
1a22: 14 91 lpm r17, Z
1a24: 20 ef ldi r18, 0xF0 ; 240
1a26: 37 ef ldi r19, 0xF7 ; 247
1a28: 41 e0 ldi r20, 0x01 ; 1
1a2a: 50 e0 ldi r21, 0x00 ; 0
1a2c: c6 e1 ldi r28, 0x16 ; 22
1a2e: d3 e0 ldi r29, 0x03 ; 3
1a30: 6f e0 ldi r22, 0x0F ; 15
1a32: da 01 movw r26, r20
1a34: c9 01 movw r24, r18
1a36: 2f 5f subi r18, 0xFF ; 255
1a38: 3f 4f sbci r19, 0xFF ; 255
1a3a: 4f 4f sbci r20, 0xFF ; 255
1a3c: 5f 4f sbci r21, 0xFF ; 255
1a3e: ab bf out 0x3b, r26 ; 59
1a40: fc 01 movw r30, r24
1a42: 87 91 elpm r24, Z+
1a44: 89 93 st Y+, r24
1a46: 61 50 subi r22, 0x01 ; 1
1a48: 67 ff sbrs r22, 7
1a4a: f3 cf rjmp .-26 ; 0x1a32 <ndfcvbghs+0x1c>
1a4c: 84 ee ldi r24, 0xE4 ; 228
1a4e: 8a bd out 0x2a, r24 ; 42
1a50: 80 91 1e 03 lds r24, 0x031E
1a54: 80 93 ea 02 sts 0x02EA, r24
1a58: 89 31 cpi r24, 0x19 ; 25
1a5a: 38 f0 brcs .+14 ; 0x1a6a <ndfcvbghs+0x54>
1a5c: 86 e0 ldi r24, 0x06 ; 6
1a5e: 80 93 0b 01 sts 0x010B, r24
1a62: 87 e0 ldi r24, 0x07 ; 7
1a64: 80 93 0a 01 sts 0x010A, r24
1a68: 7b ea ldi r23, 0xAB ; 171
1a6a: e6 e1 ldi r30, 0x16 ; 22
1a6c: f3 e0 ldi r31, 0x03 ; 3
1a6e: 6e e0 ldi r22, 0x0E ; 14
1a70: 81 91 ld r24, Z+
1a72: 78 27 eor r23, r24
1a74: 70 95 com r23
1a76: 61 50 subi r22, 0x01 ; 1
1a78: 67 ff sbrs r22, 7
1a7a: fa cf rjmp .-12 ; 0x1a70 <ndfcvbghs+0x5a>
1a7c: 80 91 25 03 lds r24, 0x0325
1a80: 78 17 cp r23, r24
1a82: 21 f0 breq .+8 ; 0x1a8c <ndfcvbghs+0x76>
1a84: 17 39 cpi r17, 0x97 ; 151
1a86: 11 f4 brne .+4 ; 0x1a8c <ndfcvbghs+0x76>
1a88: 00 00 nop
1a8a: fe cf rjmp .-4 ; 0x1a88 <ndfcvbghs+0x72>
1a8c: 0e 94 9e 5a call 0xb53c ; 0xb53c <main>
1a90: 0c 94 65 b2 jmp 0x164ca ; 0x164ca <_exit>
00001a94 <__bad_interrupt>:
1a94: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00001a98 <isqrt32>:
.global isqrt32
.func isqrt32
isqrt32:
clr r0
1a98: 00 24 eor r0, r0
clr r18
1a9a: 22 27 eor r18, r18
clr r19
1a9c: 33 27 eor r19, r19
clr r20
1a9e: 44 27 eor r20, r20
ldi r21, 1
1aa0: 51 e0 ldi r21, 0x01 ; 1
clr r27
1aa2: bb 27 eor r27, r27
clr r30
1aa4: ee 27 eor r30, r30
clr r31
1aa6: ff 27 eor r31, r31
ldi r26, 16
1aa8: a0 e1 ldi r26, 0x10 ; 16
1: lsl r22
1aaa: 66 0f add r22, r22
rol r23
1aac: 77 1f adc r23, r23
rol r24
1aae: 88 1f adc r24, r24
rol r25
1ab0: 99 1f adc r25, r25
rol r0
1ab2: 00 1c adc r0, r0
rol r18
1ab4: 22 1f adc r18, r18
rol r19
1ab6: 33 1f adc r19, r19
rol r20
1ab8: 44 1f adc r20, r20
lsl r22
1aba: 66 0f add r22, r22
rol r23
1abc: 77 1f adc r23, r23
rol r24
1abe: 88 1f adc r24, r24
rol r25
1ac0: 99 1f adc r25, r25
rol r0
1ac2: 00 1c adc r0, r0
rol r18
1ac4: 22 1f adc r18, r18
rol r19
1ac6: 33 1f adc r19, r19
rol r20
1ac8: 44 1f adc r20, r20
brpl 2f
1aca: 2a f4 brpl .+10 ; 0x1ad6 <isqrt32+0x3e>
add r0, r21
1acc: 05 0e add r0, r21
adc r18, r27
1ace: 2b 1f adc r18, r27
adc r19, r30
1ad0: 3e 1f adc r19, r30
adc r20, r31
1ad2: 4f 1f adc r20, r31
rjmp 3f
1ad4: 04 c0 rjmp .+8 ; 0x1ade <isqrt32+0x46>
2: sub r0, r21
1ad6: 05 1a sub r0, r21
sbc r18, r27
1ad8: 2b 0b sbc r18, r27
sbc r19, r30
1ada: 3e 0b sbc r19, r30
sbc r20, r31
1adc: 4f 0b sbc r20, r31
3: lsl r21
1ade: 55 0f add r21, r21
rol r27
1ae0: bb 1f adc r27, r27
rol r30
1ae2: ee 1f adc r30, r30
andi r21, 0b11111000
1ae4: 58 7f andi r21, 0xF8 ; 248
ori r21, 0b00000101
1ae6: 55 60 ori r21, 0x05 ; 5
sbrc r20, 7
1ae8: 47 fd sbrc r20, 7
subi r21, 2
1aea: 52 50 subi r21, 0x02 ; 2
dec r26
1aec: aa 95 dec r26
brne 1b
1aee: e9 f6 brne .-70 ; 0x1aaa <isqrt32+0x12>
lsr r30
1af0: e6 95 lsr r30
ror r27
1af2: b7 95 ror r27
ror r21
1af4: 57 95 ror r21
lsr r30
1af6: e6 95 lsr r30
ror r27
1af8: b7 95 ror r27
ror r21
1afa: 57 95 ror r21
mov r24, r21
1afc: 85 2f mov r24, r21
mov r25, r27
1afe: 9b 2f mov r25, r27
ret
1b00: 08 95 ret
00001b02 <isqrt16>:
.global isqrt16
.func isqrt16
isqrt16:
clr r18
1b02: 22 27 eor r18, r18
clr r19
1b04: 33 27 eor r19, r19
ldi r20, 1
1b06: 41 e0 ldi r20, 0x01 ; 1
clr r21
1b08: 55 27 eor r21, r21
ldi r22, 8
1b0a: 68 e0 ldi r22, 0x08 ; 8
1: lsl r24
1b0c: 88 0f add r24, r24
rol r25
1b0e: 99 1f adc r25, r25
rol r18
1b10: 22 1f adc r18, r18
rol r19
1b12: 33 1f adc r19, r19
lsl r24
1b14: 88 0f add r24, r24
rol r25
1b16: 99 1f adc r25, r25
rol r18
1b18: 22 1f adc r18, r18
rol r19
1b1a: 33 1f adc r19, r19
brpl 2f
1b1c: 1a f4 brpl .+6 ; 0x1b24 <isqrt16+0x22>
add r18, r20
1b1e: 24 0f add r18, r20
adc r19, r21
1b20: 35 1f adc r19, r21
rjmp 3f
1b22: 02 c0 rjmp .+4 ; 0x1b28 <isqrt16+0x26>
2: sub r18, r20
1b24: 24 1b sub r18, r20
sbc r19, r21
1b26: 35 0b sbc r19, r21
3: lsl r20
1b28: 44 0f add r20, r20
rol r21
1b2a: 55 1f adc r21, r21
andi r20, 0b11111000
1b2c: 48 7f andi r20, 0xF8 ; 248
ori r20, 0b00000101
1b2e: 45 60 ori r20, 0x05 ; 5
sbrc r19, 7
1b30: 37 fd sbrc r19, 7
subi r20, 2
1b32: 42 50 subi r20, 0x02 ; 2
dec r22
1b34: 6a 95 dec r22
brne 1b
1b36: 51 f7 brne .-44 ; 0x1b0c <isqrt16+0xa>
lsr r21
1b38: 56 95 lsr r21
ror r20
1b3a: 47 95 ror r20
lsr r21
1b3c: 56 95 lsr r21
ror r20
1b3e: 47 95 ror r20
mov r24, r20
1b40: 84 2f mov r24, r20
ret
1b42: 08 95 ret
00001b44 <ihypot>:
.global ihypot
.func ihypot
ihypot:
clr r26
1b44: aa 27 eor r26, r26
sbrs r25, 7
1b46: 97 ff sbrs r25, 7
rjmp 1f
1b48: 04 c0 rjmp .+8 ; 0x1b52 <ihypot+0xe>
com r24
1b4a: 80 95 com r24
com r25
1b4c: 90 95 com r25
adc r24, r26
1b4e: 8a 1f adc r24, r26
adc r25, r26
1b50: 9a 1f adc r25, r26
1: sbrs r23, 7
1b52: 77 ff sbrs r23, 7
rjmp 2f
1b54: 04 c0 rjmp .+8 ; 0x1b5e <ihypot+0x1a>
com r22
1b56: 60 95 com r22
com r23
1b58: 70 95 com r23
adc r22, r26
1b5a: 6a 1f adc r22, r26
adc r23, r26
1b5c: 7a 1f adc r23, r26
2: mul r22, r22
1b5e: 66 9f mul r22, r22
movw r18, r0
1b60: 90 01 movw r18, r0
mul r23, r23
1b62: 77 9f mul r23, r23
movw r20, r0
1b64: a0 01 movw r20, r0
mul r22, r23
1b66: 67 9f mul r22, r23
add r19, r0
1b68: 30 0d add r19, r0
adc r20, r1
1b6a: 41 1d adc r20, r1
adc r21, r26
1b6c: 5a 1f adc r21, r26
add r19, r0
1b6e: 30 0d add r19, r0
adc r20, r1
1b70: 41 1d adc r20, r1
adc r21, r26
1b72: 5a 1f adc r21, r26
mul r24, r24
1b74: 88 9f mul r24, r24
movw r30, r0
1b76: f0 01 movw r30, r0
mul r25, r25
1b78: 99 9f mul r25, r25
add r18, r30
1b7a: 2e 0f add r18, r30
adc r19, r31
1b7c: 3f 1f adc r19, r31
adc r20, r0
1b7e: 40 1d adc r20, r0
adc r21, r1
1b80: 51 1d adc r21, r1
mul r24, r25
1b82: 89 9f mul r24, r25
add r19, r0
1b84: 30 0d add r19, r0
adc r20, r1
1b86: 41 1d adc r20, r1
adc r21, r26
1b88: 5a 1f adc r21, r26
add r19, r0
1b8a: 30 0d add r19, r0
adc r20, r1
1b8c: 41 1d adc r20, r1
adc r21, r26
1b8e: 5a 1f adc r21, r26
movw r24, r20
1b90: ca 01 movw r24, r20
movw r22, r18
1b92: b9 01 movw r22, r18
clr r1
1b94: 11 24 eor r1, r1
rjmp isqrt32
1b96: 80 cf rjmp .-256 ; 0x1a98 <isqrt32>
00001b98 <fomklkdtn89SFGrsgt9rf>:
1b98: 4f b7 in r20, 0x3f ; 63
1b9a: 20 e4 ldi r18, 0x40 ; 64
1b9c: 30 e0 ldi r19, 0x00 ; 0
1b9e: f8 94 cli
1ba0: 80 91 c9 00 lds r24, 0x00C9
1ba4: 8f 77 andi r24, 0x7F ; 127
1ba6: 80 93 c9 00 sts 0x00C9, r24
1baa: 80 91 c9 00 lds r24, 0x00C9
1bae: 8f 7b andi r24, 0xBF ; 191
1bb0: 80 93 c9 00 sts 0x00C9, r24
1bb4: 80 91 c9 00 lds r24, 0x00C9
1bb8: 8f 7d andi r24, 0xDF ; 223
1bba: 80 93 c9 00 sts 0x00C9, r24
1bbe: 83 2f mov r24, r19
1bc0: 99 27 eor r25, r25
1bc2: 80 93 cd 00 sts 0x00CD, r24
1bc6: 20 93 cc 00 sts 0x00CC, r18
1bca: 80 91 c8 00 lds r24, 0x00C8
1bce: 82 60 ori r24, 0x02 ; 2
1bd0: 80 93 c8 00 sts 0x00C8, r24
1bd4: 88 e1 ldi r24, 0x18 ; 24
1bd6: 80 93 c9 00 sts 0x00C9, r24
1bda: 80 91 ca 00 lds r24, 0x00CA
1bde: 8f 77 andi r24, 0x7F ; 127
1be0: 80 93 ca 00 sts 0x00CA, r24
1be4: 80 91 ca 00 lds r24, 0x00CA
1be8: 8f 7b andi r24, 0xBF ; 191
1bea: 80 93 ca 00 sts 0x00CA, r24
1bee: 80 91 ca 00 lds r24, 0x00CA
1bf2: 8f 7d andi r24, 0xDF ; 223
1bf4: 80 93 ca 00 sts 0x00CA, r24
1bf8: 80 91 ca 00 lds r24, 0x00CA
1bfc: 8f 7e andi r24, 0xEF ; 239
1bfe: 80 93 ca 00 sts 0x00CA, r24
1c02: 80 91 ca 00 lds r24, 0x00CA
1c06: 87 7f andi r24, 0xF7 ; 247
1c08: 80 93 ca 00 sts 0x00CA, r24
1c0c: 80 91 c9 00 lds r24, 0x00C9
1c10: 8b 7f andi r24, 0xFB ; 251
1c12: 80 93 c9 00 sts 0x00C9, r24
1c16: 80 91 ca 00 lds r24, 0x00CA
1c1a: 84 60 ori r24, 0x04 ; 4
1c1c: 80 93 ca 00 sts 0x00CA, r24
1c20: 80 91 ca 00 lds r24, 0x00CA
1c24: 82 60 ori r24, 0x02 ; 2
1c26: 80 93 ca 00 sts 0x00CA, r24
1c2a: 80 91 c8 00 lds r24, 0x00C8
1c2e: 87 ff sbrs r24, 7
1c30: 03 c0 rjmp .+6 ; 0x1c38 <fomklkdtn89SFGrsgt9rf+0xa0>
1c32: 80 91 ce 00 lds r24, 0x00CE
1c36: f9 cf rjmp .-14 ; 0x1c2a <fomklkdtn89SFGrsgt9rf+0x92>
1c38: 80 91 c9 00 lds r24, 0x00C9
1c3c: 80 68 ori r24, 0x80 ; 128
1c3e: 80 93 c9 00 sts 0x00C9, r24
1c42: 4f bf out 0x3f, r20 ; 63
1c44: 08 95 ret
00001c46 <FGRT0589rge90gj459gg4>:
1c46: 0f 93 push r16
1c48: 1f 93 push r17
1c4a: cf 93 push r28
1c4c: df 93 push r29
1c4e: 48 2f mov r20, r24
1c50: 4f 5f subi r20, 0xFF ; 255
1c52: 89 31 cpi r24, 0x19 ; 25
1c54: 08 f0 brcs .+2 ; 0x1c58 <FGRT0589rge90gj459gg4+0x12>
1c56: 8b c0 rjmp .+278 ; 0x1d6e <FGRT0589rge90gj459gg4+0x128>
1c58: 80 91 30 08 lds r24, 0x0830
1c5c: 84 17 cp r24, r20
1c5e: 20 f4 brcc .+8 ; 0x1c68 <FGRT0589rge90gj459gg4+0x22>
1c60: 4f 5f subi r20, 0xFF ; 255
1c62: 40 93 30 08 sts 0x0830, r20
1c66: 41 50 subi r20, 0x01 ; 1
1c68: cb 01 movw r24, r22
1c6a: 83 53 subi r24, 0x33 ; 51
1c6c: 9b 42 sbci r25, 0x2B ; 43
1c6e: 68 e1 ldi r22, 0x18 ; 24
1c70: 70 e0 ldi r23, 0x00 ; 0
1c72: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
1c76: a4 2f mov r26, r20
1c78: bb 27 eor r27, r27
1c7a: fd 01 movw r30, r26
1c7c: ea 0f add r30, r26
1c7e: fb 1f adc r31, r27
1c80: ef 5c subi r30, 0xCF ; 207
1c82: f7 4f sbci r31, 0xF7 ; 247
1c84: 80 81 ld r24, Z
1c86: 91 81 ldd r25, Z+1 ; 0x01
1c88: 9b 01 movw r18, r22
1c8a: 28 1b sub r18, r24
1c8c: 39 0b sbc r19, r25
1c8e: c9 01 movw r24, r18
1c90: 37 ff sbrs r19, 7
1c92: 03 c0 rjmp .+6 ; 0x1c9a <FGRT0589rge90gj459gg4+0x54>
1c94: 90 95 com r25
1c96: 81 95 neg r24
1c98: 9f 4f sbci r25, 0xFF ; 255
1c9a: 06 97 sbiw r24, 0x06 ; 6
1c9c: 94 f4 brge .+36 ; 0x1cc2 <FGRT0589rge90gj459gg4+0x7c>
1c9e: 80 91 04 04 lds r24, 0x0404
1ca2: 88 3c cpi r24, 0xC8 ; 200
1ca4: 30 f4 brcc .+12 ; 0x1cb2 <FGRT0589rge90gj459gg4+0x6c>
1ca6: 80 91 04 04 lds r24, 0x0404
1caa: 86 5f subi r24, 0xF6 ; 246
1cac: 80 93 04 04 sts 0x0404, r24
1cb0: 08 c0 rjmp .+16 ; 0x1cc2 <FGRT0589rge90gj459gg4+0x7c>
1cb2: 88 ec ldi r24, 0xC8 ; 200
1cb4: 80 93 04 04 sts 0x0404, r24
1cb8: 80 91 6f 00 lds r24, 0x006F
1cbc: 8f 7d andi r24, 0xDF ; 223
1cbe: 80 93 6f 00 sts 0x006F, r24
1cc2: fd 01 movw r30, r26
1cc4: ea 0f add r30, r26
1cc6: fb 1f adc r31, r27
1cc8: ef 5c subi r30, 0xCF ; 207
1cca: f7 4f sbci r31, 0xF7 ; 247
1ccc: 80 81 ld r24, Z
1cce: 91 81 ldd r25, Z+1 ; 0x01
1cd0: 9c 01 movw r18, r24
1cd2: 22 0f add r18, r18
1cd4: 33 1f adc r19, r19
1cd6: 28 0f add r18, r24
1cd8: 39 1f adc r19, r25
1cda: 26 0f add r18, r22
1cdc: 37 1f adc r19, r23
1cde: 37 ff sbrs r19, 7
1ce0: 02 c0 rjmp .+4 ; 0x1ce6 <FGRT0589rge90gj459gg4+0xa0>
1ce2: 2d 5f subi r18, 0xFD ; 253
1ce4: 3f 4f sbci r19, 0xFF ; 255
1ce6: e9 01 movw r28, r18
1ce8: d5 95 asr r29
1cea: c7 95 ror r28
1cec: d5 95 asr r29
1cee: c7 95 ror r28
1cf0: cb 01 movw r24, r22
1cf2: 01 96 adiw r24, 0x01 ; 1
1cf4: 8c 17 cp r24, r28
1cf6: 9d 07 cpc r25, r29
1cf8: 14 f4 brge .+4 ; 0x1cfe <FGRT0589rge90gj459gg4+0xb8>
1cfa: 21 97 sbiw r28, 0x01 ; 1
1cfc: 06 c0 rjmp .+12 ; 0x1d0a <FGRT0589rge90gj459gg4+0xc4>
1cfe: 61 50 subi r22, 0x01 ; 1
1d00: 70 40 sbci r23, 0x00 ; 0
1d02: c6 17 cp r28, r22
1d04: d7 07 cpc r29, r23
1d06: 0c f4 brge .+2 ; 0x1d0a <FGRT0589rge90gj459gg4+0xc4>
1d08: 21 96 adiw r28, 0x01 ; 1
1d0a: 80 91 04 04 lds r24, 0x0404
1d0e: 84 3b cpi r24, 0xB4 ; 180
1d10: d8 f0 brcs .+54 ; 0x1d48 <FGRT0589rge90gj459gg4+0x102>
1d12: 8d 01 movw r16, r26
1d14: 0a 0f add r16, r26
1d16: 1b 1f adc r17, r27
1d18: f8 01 movw r30, r16
1d1a: ef 5c subi r30, 0xCF ; 207
1d1c: f7 4f sbci r31, 0xF7 ; 247
1d1e: 80 81 ld r24, Z
1d20: 91 81 ldd r25, Z+1 ; 0x01
1d22: fe 01 movw r30, r28
1d24: e8 1b sub r30, r24
1d26: f9 0b sbc r31, r25
1d28: cf 01 movw r24, r30
1d2a: 63 e0 ldi r22, 0x03 ; 3
1d2c: 70 e0 ldi r23, 0x00 ; 0
1d2e: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
1d32: cb 01 movw r24, r22
1d34: 88 0f add r24, r24
1d36: 99 1f adc r25, r25
1d38: 86 0f add r24, r22
1d3a: 97 1f adc r25, r23
1d3c: 09 58 subi r16, 0x89 ; 137
1d3e: 17 4f sbci r17, 0xF7 ; 247
1d40: f8 01 movw r30, r16
1d42: 91 83 std Z+1, r25 ; 0x01
1d44: 80 83 st Z, r24
1d46: 07 c0 rjmp .+14 ; 0x1d56 <FGRT0589rge90gj459gg4+0x110>
1d48: aa 0f add r26, r26
1d4a: bb 1f adc r27, r27
1d4c: a9 58 subi r26, 0x89 ; 137
1d4e: b7 4f sbci r27, 0xF7 ; 247
1d50: 11 96 adiw r26, 0x01 ; 1
1d52: 1c 92 st X, r1
1d54: 1e 92 st -X, r1
1d56: e4 2f mov r30, r20
1d58: ff 27 eor r31, r31
1d5a: ee 0f add r30, r30
1d5c: ff 1f adc r31, r31
1d5e: ef 5c subi r30, 0xCF ; 207
1d60: f7 4f sbci r31, 0xF7 ; 247
1d62: d1 83 std Z+1, r29 ; 0x01
1d64: c0 83 st Z, r28
1d66: 44 30 cpi r20, 0x04 ; 4
1d68: 11 f4 brne .+4 ; 0x1d6e <FGRT0589rge90gj459gg4+0x128>
1d6a: 10 92 93 02 sts 0x0293, r1
1d6e: df 91 pop r29
1d70: cf 91 pop r28
1d72: 1f 91 pop r17
1d74: 0f 91 pop r16
1d76: 08 95 ret
00001d78 <DFGeefWEF43tgt5uGreg5>:
1d78: cf 93 push r28
1d7a: df 93 push r29
1d7c: 20 91 aa 0c lds r18, 0x0CAA
1d80: 82 2f mov r24, r18
1d82: 99 27 eor r25, r25
1d84: 80 7f andi r24, 0xF0 ; 240
1d86: 90 70 andi r25, 0x00 ; 0
1d88: 40 97 sbiw r24, 0x10 ; 16
1d8a: 09 f0 breq .+2 ; 0x1d8e <DFGeefWEF43tgt5uGreg5+0x16>
1d8c: 64 c0 rjmp .+200 ; 0x1e56 <DFGeefWEF43tgt5uGreg5+0xde>
1d8e: 2f 31 cpi r18, 0x1F ; 31
1d90: 09 f0 breq .+2 ; 0x1d94 <DFGeefWEF43tgt5uGreg5+0x1c>
1d92: 40 c0 rjmp .+128 ; 0x1e14 <DFGeefWEF43tgt5uGreg5+0x9c>
1d94: 80 91 ab 0c lds r24, 0x0CAB
1d98: 80 93 f4 02 sts 0x02F4, r24
1d9c: 90 91 ad 0c lds r25, 0x0CAD
1da0: 90 93 f6 02 sts 0x02F6, r25
1da4: 80 91 ae 0c lds r24, 0x0CAE
1da8: 80 93 f5 02 sts 0x02F5, r24
1dac: 99 23 and r25, r25
1dae: 09 f0 breq .+2 ; 0x1db2 <DFGeefWEF43tgt5uGreg5+0x3a>
1db0: 52 c0 rjmp .+164 ; 0x1e56 <DFGeefWEF43tgt5uGreg5+0xde>
1db2: 80 91 3f 05 lds r24, 0x053F
1db6: 28 2f mov r18, r24
1db8: 33 27 eor r19, r19
1dba: 22 0f add r18, r18
1dbc: 33 1f adc r19, r19
1dbe: f9 01 movw r30, r18
1dc0: e9 58 subi r30, 0x89 ; 137
1dc2: f7 4f sbci r31, 0xF7 ; 247
1dc4: 11 82 std Z+1, r1 ; 0x01
1dc6: 10 82 st Z, r1
1dc8: 80 91 40 05 lds r24, 0x0540
1dcc: a8 2f mov r26, r24
1dce: bb 27 eor r27, r27
1dd0: aa 0f add r26, r26
1dd2: bb 1f adc r27, r27
1dd4: fd 01 movw r30, r26
1dd6: e9 58 subi r30, 0x89 ; 137
1dd8: f7 4f sbci r31, 0xF7 ; 247
1dda: 11 82 std Z+1, r1 ; 0x01
1ddc: 10 82 st Z, r1
1dde: 80 91 42 05 lds r24, 0x0542
1de2: e8 2f mov r30, r24
1de4: ff 27 eor r31, r31
1de6: ee 0f add r30, r30
1de8: ff 1f adc r31, r31
1dea: cf 01 movw r24, r30
1dec: 89 58 subi r24, 0x89 ; 137
1dee: 97 4f sbci r25, 0xF7 ; 247
1df0: ec 01 movw r28, r24
1df2: 19 82 std Y+1, r1 ; 0x01
1df4: 18 82 st Y, r1
1df6: 2f 5c subi r18, 0xCF ; 207
1df8: 37 4f sbci r19, 0xF7 ; 247
1dfa: e9 01 movw r28, r18
1dfc: 19 82 std Y+1, r1 ; 0x01
1dfe: 18 82 st Y, r1
1e00: af 5c subi r26, 0xCF ; 207
1e02: b7 4f sbci r27, 0xF7 ; 247
1e04: 11 96 adiw r26, 0x01 ; 1
1e06: 1c 92 st X, r1
1e08: 1e 92 st -X, r1
1e0a: ef 5c subi r30, 0xCF ; 207
1e0c: f7 4f sbci r31, 0xF7 ; 247
1e0e: 11 82 std Z+1, r1 ; 0x01
1e10: 10 82 st Z, r1
1e12: 21 c0 rjmp .+66 ; 0x1e56 <DFGeefWEF43tgt5uGreg5+0xde>
1e14: c2 2f mov r28, r18
1e16: cf 70 andi r28, 0x0F ; 15
1e18: ca 30 cpi r28, 0x0A ; 10
1e1a: e8 f4 brcc .+58 ; 0x1e56 <DFGeefWEF43tgt5uGreg5+0xde>
1e1c: 80 91 ab 0c lds r24, 0x0CAB
1e20: 80 93 d6 0c sts 0x0CD6, r24
1e24: 80 91 ac 0c lds r24, 0x0CAC
1e28: 80 93 d5 0c sts 0x0CD5, r24
1e2c: 80 91 ad 0c lds r24, 0x0CAD
1e30: 80 93 d8 0c sts 0x0CD8, r24
1e34: 80 91 ae 0c lds r24, 0x0CAE
1e38: 80 93 d7 0c sts 0x0CD7, r24
1e3c: 60 91 d5 0c lds r22, 0x0CD5
1e40: 70 91 d6 0c lds r23, 0x0CD6
1e44: 8c 2f mov r24, r28
1e46: ff de rcall .-514 ; 0x1c46 <FGRT0589rge90gj459gg4>
1e48: 60 91 d7 0c lds r22, 0x0CD7
1e4c: 70 91 d8 0c lds r23, 0x0CD8
1e50: 8c 2f mov r24, r28
1e52: 8f 5f subi r24, 0xFF ; 255
1e54: f8 de rcall .-528 ; 0x1c46 <FGRT0589rge90gj459gg4>
1e56: df 91 pop r29
1e58: cf 91 pop r28
1e5a: 08 95 ret
00001e5c <FGtj76uzh56z3grEg5t45>:
1e5c: cf 93 push r28
1e5e: c8 2f mov r28, r24
1e60: 8f 3f cpi r24, 0xFF ; 255
1e62: 49 f4 brne .+18 ; 0x1e76 <FGtj76uzh56z3grEg5t45+0x1a>
1e64: 80 91 f7 02 lds r24, 0x02F7
1e68: 8f 3f cpi r24, 0xFF ; 255
1e6a: 29 f4 brne .+10 ; 0x1e76 <FGtj76uzh56z3grEg5t45+0x1a>
1e6c: 10 92 f9 02 sts 0x02F9, r1
1e70: 10 92 f8 02 sts 0x02F8, r1
1e74: 31 c0 rjmp .+98 ; 0x1ed8 <FGtj76uzh56z3grEg5t45+0x7c>
1e76: 20 91 f9 02 lds r18, 0x02F9
1e7a: 22 23 and r18, r18
1e7c: 39 f4 brne .+14 ; 0x1e8c <FGtj76uzh56z3grEg5t45+0x30>
1e7e: cf 31 cpi r28, 0x1F ; 31
1e80: 11 f4 brne .+4 ; 0x1e86 <FGtj76uzh56z3grEg5t45+0x2a>
1e82: 85 e0 ldi r24, 0x05 ; 5
1e84: 01 c0 rjmp .+2 ; 0x1e88 <FGtj76uzh56z3grEg5t45+0x2c>
1e86: 84 e0 ldi r24, 0x04 ; 4
1e88: 80 93 fa 02 sts 0x02FA, r24
1e8c: 80 91 fa 02 lds r24, 0x02FA
1e90: 90 91 f8 02 lds r25, 0x02F8
1e94: 82 17 cp r24, r18
1e96: 98 f4 brcc .+38 ; 0x1ebe <FGtj76uzh56z3grEg5t45+0x62>
1e98: 89 2f mov r24, r25
1e9a: 80 95 com r24
1e9c: 80 93 f8 02 sts 0x02F8, r24
1ea0: 8f 3f cpi r24, 0xFF ; 255
1ea2: 19 f4 brne .+6 ; 0x1eaa <FGtj76uzh56z3grEg5t45+0x4e>
1ea4: 8e ef ldi r24, 0xFE ; 254
1ea6: 80 93 f8 02 sts 0x02F8, r24
1eaa: 80 91 f8 02 lds r24, 0x02F8
1eae: c8 17 cp r28, r24
1eb0: 09 f4 brne .+2 ; 0x1eb4 <FGtj76uzh56z3grEg5t45+0x58>
1eb2: 62 df rcall .-316 ; 0x1d78 <DFGeefWEF43tgt5uGreg5>
1eb4: 10 92 f9 02 sts 0x02F9, r1
1eb8: 10 92 f8 02 sts 0x02F8, r1
1ebc: 0b c0 rjmp .+22 ; 0x1ed4 <FGtj76uzh56z3grEg5t45+0x78>
1ebe: e2 2f mov r30, r18
1ec0: ff 27 eor r31, r31
1ec2: e6 55 subi r30, 0x56 ; 86
1ec4: f3 4f sbci r31, 0xF3 ; 243
1ec6: c0 83 st Z, r28
1ec8: 2f 5f subi r18, 0xFF ; 255
1eca: 20 93 f9 02 sts 0x02F9, r18
1ece: 9c 0f add r25, r28
1ed0: 90 93 f8 02 sts 0x02F8, r25
1ed4: c0 93 f7 02 sts 0x02F7, r28
1ed8: cf 91 pop r28
1eda: 08 95 ret
00001edc <LIBFC_JetiBox_Putchar>:
1edc: 90 91 f3 02 lds r25, 0x02F3
1ee0: 93 32 cpi r25, 0x23 ; 35
1ee2: 40 f4 brcc .+16 ; 0x1ef4 <LIBFC_JetiBox_Putchar+0x18>
1ee4: e9 2f mov r30, r25
1ee6: ff 27 eor r31, r31
1ee8: ee 54 subi r30, 0x4E ; 78
1eea: f3 4f sbci r31, 0xF3 ; 243
1eec: 80 83 st Z, r24
1eee: 9f 5f subi r25, 0xFF ; 255
1ef0: 90 93 f3 02 sts 0x02F3, r25
1ef4: 08 95 ret
00001ef6 <LIBFC_JetiBox_SetPos>:
1ef6: 83 32 cpi r24, 0x23 ; 35
1ef8: 18 f4 brcc .+6 ; 0x1f00 <LIBFC_JetiBox_SetPos+0xa>
1efa: 8d 5f subi r24, 0xFD ; 253
1efc: 80 93 f3 02 sts 0x02F3, r24
1f00: 08 95 ret
00001f02 <LIBFC_JetiBox_Clear>:
1f02: 90 e2 ldi r25, 0x20 ; 32
1f04: e5 eb ldi r30, 0xB5 ; 181
1f06: fc e0 ldi r31, 0x0C ; 12
1f08: 8f e1 ldi r24, 0x1F ; 31
1f0a: 91 93 st Z+, r25
1f0c: 81 50 subi r24, 0x01 ; 1
1f0e: 87 ff sbrs r24, 7
1f10: fc cf rjmp .-8 ; 0x1f0a <LIBFC_JetiBox_Clear+0x8>
1f12: 08 95 ret
00001f14 <INiuzBtergGIBuB76T0G5>:
1f14: cf 93 push r28
1f16: cf b7 in r28, 0x3f ; 63
1f18: 23 e0 ldi r18, 0x03 ; 3
1f1a: 31 e0 ldi r19, 0x01 ; 1
1f1c: f8 94 cli
1f1e: 80 91 c9 00 lds r24, 0x00C9
1f22: 8f 77 andi r24, 0x7F ; 127
1f24: 80 93 c9 00 sts 0x00C9, r24
1f28: 80 91 c9 00 lds r24, 0x00C9
1f2c: 8f 7b andi r24, 0xBF ; 191
1f2e: 80 93 c9 00 sts 0x00C9, r24
1f32: 80 91 c9 00 lds r24, 0x00C9
1f36: 8f 7d andi r24, 0xDF ; 223
1f38: 80 93 c9 00 sts 0x00C9, r24
1f3c: 83 2f mov r24, r19
1f3e: 99 27 eor r25, r25
1f40: 80 93 cd 00 sts 0x00CD, r24
1f44: 20 93 cc 00 sts 0x00CC, r18
1f48: 80 91 c8 00 lds r24, 0x00C8
1f4c: 82 60 ori r24, 0x02 ; 2
1f4e: 80 93 c8 00 sts 0x00C8, r24
1f52: 88 e1 ldi r24, 0x18 ; 24
1f54: 80 93 c9 00 sts 0x00C9, r24
1f58: 80 91 ca 00 lds r24, 0x00CA
1f5c: 8f 77 andi r24, 0x7F ; 127
1f5e: 80 93 ca 00 sts 0x00CA, r24
1f62: 80 91 ca 00 lds r24, 0x00CA
1f66: 8f 7b andi r24, 0xBF ; 191
1f68: 80 93 ca 00 sts 0x00CA, r24
1f6c: 80 91 ca 00 lds r24, 0x00CA
1f70: 80 62 ori r24, 0x20 ; 32
1f72: 80 93 ca 00 sts 0x00CA, r24
1f76: 80 91 ca 00 lds r24, 0x00CA
1f7a: 80 61 ori r24, 0x10 ; 16
1f7c: 80 93 ca 00 sts 0x00CA, r24
1f80: 80 91 ca 00 lds r24, 0x00CA
1f84: 88 60 ori r24, 0x08 ; 8
1f86: 80 93 ca 00 sts 0x00CA, r24
1f8a: 80 91 c9 00 lds r24, 0x00C9
1f8e: 84 60 ori r24, 0x04 ; 4
1f90: 80 93 c9 00 sts 0x00C9, r24
1f94: 80 91 ca 00 lds r24, 0x00CA
1f98: 84 60 ori r24, 0x04 ; 4
1f9a: 80 93 ca 00 sts 0x00CA, r24
1f9e: 80 91 ca 00 lds r24, 0x00CA
1fa2: 82 60 ori r24, 0x02 ; 2
1fa4: 80 93 ca 00 sts 0x00CA, r24
1fa8: 80 91 c8 00 lds r24, 0x00C8
1fac: 87 ff sbrs r24, 7
1fae: 03 c0 rjmp .+6 ; 0x1fb6 <INiuzBtergGIBuB76T0G5+0xa2>
1fb0: 80 91 ce 00 lds r24, 0x00CE
1fb4: f9 cf rjmp .-14 ; 0x1fa8 <INiuzBtergGIBuB76T0G5+0x94>
1fb6: 80 91 c9 00 lds r24, 0x00C9
1fba: 80 68 ori r24, 0x80 ; 128
1fbc: 80 93 c9 00 sts 0x00C9, r24
1fc0: 80 91 c9 00 lds r24, 0x00C9
1fc4: 80 64 ori r24, 0x40 ; 64
1fc6: 80 93 c9 00 sts 0x00C9, r24
1fca: 9b df rcall .-202 ; 0x1f02 <LIBFC_JetiBox_Clear>
1fcc: cf bf out 0x3f, r28 ; 63
1fce: cf 91 pop r28
1fd0: 08 95 ret
00001fd2 <KLNMIOHMUHG76GFGr43r3>:
1fd2: 28 2f mov r18, r24
1fd4: 99 27 eor r25, r25
1fd6: 8f 70 andi r24, 0x0F ; 15
1fd8: 90 70 andi r25, 0x00 ; 0
1fda: 89 2b or r24, r25
1fdc: 31 f4 brne .+12 ; 0x1fea <KLNMIOHMUHG76GFGr43r3+0x18>
1fde: 20 95 com r18
1fe0: 80 91 f2 02 lds r24, 0x02F2
1fe4: 82 2b or r24, r18
1fe6: 80 93 f2 02 sts 0x02F2, r24
1fea: 08 95 ret
00001fec <__vector_30>:
1fec: 1f 92 push r1
1fee: 0f 92 push r0
1ff0: 0f b6 in r0, 0x3f ; 63
1ff2: 0f 92 push r0
1ff4: 11 24 eor r1, r1
1ff6: 8f 93 push r24
1ff8: ef 93 push r30
1ffa: ff 93 push r31
1ffc: 80 91 06 01 lds r24, 0x0106
2000: 88 23 and r24, r24
2002: 09 f0 breq .+2 ; 0x2006 <__vector_30+0x1a>
2004: 68 c0 rjmp .+208 ; 0x20d6 <__vector_30+0xea>
2006: e0 91 fc 02 lds r30, 0x02FC
200a: ee 23 and r30, r30
200c: 89 f4 brne .+34 ; 0x2030 <__vector_30+0x44>
200e: 80 91 fb 02 lds r24, 0x02FB
2012: 88 23 and r24, r24
2014: 69 f4 brne .+26 ; 0x2030 <__vector_30+0x44>
2016: 80 91 b2 0c lds r24, 0x0CB2
201a: 88 23 and r24, r24
201c: 21 f0 breq .+8 ; 0x2026 <__vector_30+0x3a>
201e: 81 e0 ldi r24, 0x01 ; 1
2020: 80 93 fd 02 sts 0x02FD, r24
2024: 05 c0 rjmp .+10 ; 0x2030 <__vector_30+0x44>
2026: 80 91 c9 00 lds r24, 0x00C9
202a: 81 60 ori r24, 0x01 ; 1
202c: 80 93 c9 00 sts 0x00C9, r24
2030: 80 91 fd 02 lds r24, 0x02FD
2034: 88 23 and r24, r24
2036: 79 f4 brne .+30 ; 0x2056 <__vector_30+0x6a>
2038: ef 5f subi r30, 0xFF ; 255
203a: e0 93 fc 02 sts 0x02FC, r30
203e: 80 91 89 0c lds r24, 0x0C89
2042: 8e 17 cp r24, r30
2044: 20 f4 brcc .+8 ; 0x204e <__vector_30+0x62>
2046: 81 e0 ldi r24, 0x01 ; 1
2048: 80 93 fd 02 sts 0x02FD, r24
204c: 1c c0 rjmp .+56 ; 0x2086 <__vector_30+0x9a>
204e: ff 27 eor r31, r31
2050: e7 57 subi r30, 0x77 ; 119
2052: f3 4f sbci r31, 0xF3 ; 243
2054: 3c c0 rjmp .+120 ; 0x20ce <__vector_30+0xe2>
2056: 80 91 fb 02 lds r24, 0x02FB
205a: 88 23 and r24, r24
205c: 61 f4 brne .+24 ; 0x2076 <__vector_30+0x8a>
205e: 80 91 b2 0c lds r24, 0x0CB2
2062: 88 23 and r24, r24
2064: 11 f4 brne .+4 ; 0x206a <__vector_30+0x7e>
2066: 83 e0 ldi r24, 0x03 ; 3
2068: 03 c0 rjmp .+6 ; 0x2070 <__vector_30+0x84>
206a: 81 39 cpi r24, 0x91 ; 145
206c: 99 f4 brne .+38 ; 0x2094 <__vector_30+0xa8>
206e: 81 e0 ldi r24, 0x01 ; 1
2070: 80 93 fb 02 sts 0x02FB, r24
2074: 0f c0 rjmp .+30 ; 0x2094 <__vector_30+0xa8>
2076: 83 30 cpi r24, 0x03 ; 3
2078: 99 f4 brne .+38 ; 0x20a0 <__vector_30+0xb4>
207a: 80 91 b2 0c lds r24, 0x0CB2
207e: 88 23 and r24, r24
2080: 49 f0 breq .+18 ; 0x2094 <__vector_30+0xa8>
2082: 10 92 b2 0c sts 0x0CB2, r1
2086: 80 91 c9 00 lds r24, 0x00C9
208a: 8e 7f andi r24, 0xFE ; 254
208c: 80 93 c9 00 sts 0x00C9, r24
2090: 8e ef ldi r24, 0xFE ; 254
2092: 1e c0 rjmp .+60 ; 0x20d0 <__vector_30+0xe4>
2094: 80 91 c9 00 lds r24, 0x00C9
2098: 81 60 ori r24, 0x01 ; 1
209a: 80 93 c9 00 sts 0x00C9, r24
209e: 0e c0 rjmp .+28 ; 0x20bc <__vector_30+0xd0>
20a0: 83 32 cpi r24, 0x23 ; 35
20a2: 61 f4 brne .+24 ; 0x20bc <__vector_30+0xd0>
20a4: 80 91 c9 00 lds r24, 0x00C9
20a8: 8e 7f andi r24, 0xFE ; 254
20aa: 80 93 c9 00 sts 0x00C9, r24
20ae: 8f ef ldi r24, 0xFF ; 255
20b0: 80 93 ce 00 sts 0x00CE, r24
20b4: 81 e0 ldi r24, 0x01 ; 1
20b6: 80 93 06 01 sts 0x0106, r24
20ba: 18 c0 rjmp .+48 ; 0x20ec <__vector_30+0x100>
20bc: 80 91 fb 02 lds r24, 0x02FB
20c0: e8 2f mov r30, r24
20c2: ff 27 eor r31, r31
20c4: ee 54 subi r30, 0x4E ; 78
20c6: f3 4f sbci r31, 0xF3 ; 243
20c8: 8f 5f subi r24, 0xFF ; 255
20ca: 80 93 fb 02 sts 0x02FB, r24
20ce: 80 81 ld r24, Z
20d0: 80 93 ce 00 sts 0x00CE, r24
20d4: 0b c0 rjmp .+22 ; 0x20ec <__vector_30+0x100>
20d6: 10 92 fb 02 sts 0x02FB, r1
20da: 10 92 fc 02 sts 0x02FC, r1
20de: 10 92 fd 02 sts 0x02FD, r1
20e2: 80 91 c9 00 lds r24, 0x00C9
20e6: 80 61 ori r24, 0x10 ; 16
20e8: 80 93 c9 00 sts 0x00C9, r24
20ec: ff 91 pop r31
20ee: ef 91 pop r30
20f0: 8f 91 pop r24
20f2: 0f 90 pop r0
20f4: 0f be out 0x3f, r0 ; 63
20f6: 0f 90 pop r0
20f8: 1f 90 pop r1
20fa: 18 95 reti
000020fc <update_crc>:
20fc: 68 27 eor r22, r24
20fe: 27 e0 ldi r18, 0x07 ; 7
2100: 32 2f mov r19, r18
2102: 67 ff sbrs r22, 7
2104: 06 c0 rjmp .+12 ; 0x2112 <update_crc+0x16>
2106: 86 2f mov r24, r22
2108: 99 27 eor r25, r25
210a: 88 0f add r24, r24
210c: 99 1f adc r25, r25
210e: 83 27 eor r24, r19
2110: 02 c0 rjmp .+4 ; 0x2116 <update_crc+0x1a>
2112: 86 2f mov r24, r22
2114: 88 0f add r24, r24
2116: 68 2f mov r22, r24
2118: 21 50 subi r18, 0x01 ; 1
211a: 27 ff sbrs r18, 7
211c: f2 cf rjmp .-28 ; 0x2102 <update_crc+0x6>
211e: 99 27 eor r25, r25
2120: 08 95 ret
00002122 <crc8>:
2122: 0f 93 push r16
2124: 1f 93 push r17
2126: cf 93 push r28
2128: df 93 push r29
212a: 06 2f mov r16, r22
212c: 60 e0 ldi r22, 0x00 ; 0
212e: 16 2f mov r17, r22
2130: 60 17 cp r22, r16
2132: 38 f4 brcc .+14 ; 0x2142 <crc8+0x20>
2134: ec 01 movw r28, r24
2136: 89 91 ld r24, Y+
2138: e1 df rcall .-62 ; 0x20fc <update_crc>
213a: 68 2f mov r22, r24
213c: 1f 5f subi r17, 0xFF ; 255
213e: 10 17 cp r17, r16
2140: d0 f3 brcs .-12 ; 0x2136 <crc8+0x14>
2142: 86 2f mov r24, r22
2144: 99 27 eor r25, r25
2146: df 91 pop r29
2148: cf 91 pop r28
214a: 1f 91 pop r17
214c: 0f 91 pop r16
214e: 08 95 ret
00002150 <JetiEX_GetLength>:
2150: dc 01 movw r26, r24
2152: 90 e0 ldi r25, 0x00 ; 0
2154: 96 17 cp r25, r22
2156: 58 f4 brcc .+22 ; 0x216e <JetiEX_GetLength+0x1e>
2158: 8c 91 ld r24, X
215a: 80 32 cpi r24, 0x20 ; 32
215c: 41 f0 breq .+16 ; 0x216e <JetiEX_GetLength+0x1e>
215e: 9f 5f subi r25, 0xFF ; 255
2160: 96 17 cp r25, r22
2162: 28 f4 brcc .+10 ; 0x216e <JetiEX_GetLength+0x1e>
2164: fd 01 movw r30, r26
2166: e9 0f add r30, r25
2168: f1 1d adc r31, r1
216a: 80 81 ld r24, Z
216c: f6 cf rjmp .-20 ; 0x215a <JetiEX_GetLength+0xa>
216e: 89 2f mov r24, r25
2170: 99 27 eor r25, r25
2172: 08 95 ret
00002174 <JetiEX_CreatePacket>:
2174: a0 e0 ldi r26, 0x00 ; 0
2176: b0 e0 ldi r27, 0x00 ; 0
2178: e0 ec ldi r30, 0xC0 ; 192
217a: f0 e1 ldi r31, 0x10 ; 16
217c: 0c 94 e1 b1 jmp 0x163c2 ; 0x163c2 <__prologue_saves__+0x12>
2180: 8f e9 ldi r24, 0x9F ; 159
2182: 80 93 8a 0c sts 0x0C8A, r24
2186: 80 e1 ldi r24, 0x10 ; 16
2188: 80 93 8c 0c sts 0x0C8C, r24
218c: 84 ea ldi r24, 0xA4 ; 164
218e: 80 93 8d 0c sts 0x0C8D, r24
2192: 85 e5 ldi r24, 0x55 ; 85
2194: 80 93 8e 0c sts 0x0C8E, r24
2198: 8d e5 ldi r24, 0x5D ; 93
219a: 80 93 8f 0c sts 0x0C8F, r24
219e: 10 92 90 0c sts 0x0C90, r1
21a2: 80 91 ff 02 lds r24, 0x02FF
21a6: 88 23 and r24, r24
21a8: 09 f0 breq .+2 ; 0x21ac <JetiEX_CreatePacket+0x38>
21aa: 67 c0 rjmp .+206 ; 0x227a <JetiEX_CreatePacket+0x106>
21ac: 80 91 fe 02 lds r24, 0x02FE
21b0: 13 e1 ldi r17, 0x13 ; 19
21b2: 81 9f mul r24, r17
21b4: c0 01 movw r24, r0
21b6: 11 24 eor r1, r1
21b8: 63 e0 ldi r22, 0x03 ; 3
21ba: 88 59 subi r24, 0x98 ; 152
21bc: 9e 4f sbci r25, 0xFE ; 254
21be: c8 df rcall .-112 ; 0x2150 <JetiEX_GetLength>
21c0: 08 2f mov r16, r24
21c2: 80 91 fe 02 lds r24, 0x02FE
21c6: 81 9f mul r24, r17
21c8: c0 01 movw r24, r0
21ca: 11 24 eor r1, r1
21cc: 6a e0 ldi r22, 0x0A ; 10
21ce: 82 5a subi r24, 0xA2 ; 162
21d0: 9e 4f sbci r25, 0xFE ; 254
21d2: be df rcall .-132 ; 0x2150 <JetiEX_GetLength>
21d4: 98 2f mov r25, r24
21d6: 80 0f add r24, r16
21d8: 86 5f subi r24, 0xF6 ; 246
21da: 80 93 89 0c sts 0x0C89, r24
21de: 2e ef ldi r18, 0xFE ; 254
21e0: b2 2e mov r11, r18
21e2: b8 0e add r11, r24
21e4: b0 92 8b 0c sts 0x0C8B, r11
21e8: 20 91 fe 02 lds r18, 0x02FE
21ec: 20 93 91 0c sts 0x0C91, r18
21f0: e9 2e mov r14, r25
21f2: ff 24 eor r15, r15
21f4: c7 01 movw r24, r14
21f6: 13 e0 ldi r17, 0x03 ; 3
21f8: 88 0f add r24, r24
21fa: 99 1f adc r25, r25
21fc: 1a 95 dec r17
21fe: e1 f7 brne .-8 ; 0x21f8 <JetiEX_CreatePacket+0x84>
2200: 80 2b or r24, r16
2202: 80 93 92 0c sts 0x0C92, r24
2206: 82 2f mov r24, r18
2208: 99 27 eor r25, r25
220a: c3 e1 ldi r28, 0x13 ; 19
220c: cc 2e mov r12, r28
220e: d1 2c mov r13, r1
2210: 8c 9d mul r24, r12
2212: 90 01 movw r18, r0
2214: 8d 9d mul r24, r13
2216: 30 0d add r19, r0
2218: 9c 9d mul r25, r12
221a: 30 0d add r19, r0
221c: 11 24 eor r1, r1
221e: c9 01 movw r24, r18
2220: 82 5a subi r24, 0xA2 ; 162
2222: 9e 4f sbci r25, 0xFE ; 254
2224: a7 01 movw r20, r14
2226: bc 01 movw r22, r24
2228: 83 e9 ldi r24, 0x93 ; 147
222a: 9c e0 ldi r25, 0x0C ; 12
222c: 0e 94 25 b2 call 0x1644a ; 0x1644a <memcpy>
2230: 11 27 eor r17, r17
2232: 80 91 fe 02 lds r24, 0x02FE
2236: 99 27 eor r25, r25
2238: 8c 9d mul r24, r12
223a: e0 01 movw r28, r0
223c: 8d 9d mul r24, r13
223e: d0 0d add r29, r0
2240: 9c 9d mul r25, r12
2242: d0 0d add r29, r0
2244: 11 24 eor r1, r1
2246: ce 01 movw r24, r28
2248: 88 59 subi r24, 0x98 ; 152
224a: 9e 4f sbci r25, 0xFE ; 254
224c: a8 01 movw r20, r16
224e: bc 01 movw r22, r24
2250: c7 01 movw r24, r14
2252: 8d 56 subi r24, 0x6D ; 109
2254: 93 4f sbci r25, 0xF3 ; 243
2256: 0e 94 25 b2 call 0x1644a ; 0x1644a <memcpy>
225a: 07 57 subi r16, 0x77 ; 119
225c: 13 4f sbci r17, 0xF3 ; 243
225e: 0e 0d add r16, r14
2260: 1f 1d adc r17, r15
2262: 6b 2d mov r22, r11
2264: 8b e8 ldi r24, 0x8B ; 139
2266: 9c e0 ldi r25, 0x0C ; 12
2268: 5c df rcall .-328 ; 0x2122 <crc8>
226a: f8 01 movw r30, r16
226c: 82 87 std Z+10, r24 ; 0x0a
226e: 80 91 ff 02 lds r24, 0x02FF
2272: 8f 5f subi r24, 0xFF ; 255
2274: 80 93 ff 02 sts 0x02FF, r24
2278: 92 c0 rjmp .+292 ; 0x239e <JetiEX_CreatePacket+0x22a>
227a: c0 90 90 0c lds r12, 0x0C90
227e: 1c 2d mov r17, r12
2280: 0e 94 b8 84 call 0x10970 ; 0x10970 <JetiEX_Update>
2284: 30 91 07 01 lds r19, 0x0107
2288: 30 31 cpi r19, 0x10 ; 16
228a: 08 f0 brcs .+2 ; 0x228e <JetiEX_CreatePacket+0x11a>
228c: 58 c0 rjmp .+176 ; 0x233e <JetiEX_CreatePacket+0x1ca>
228e: b3 e1 ldi r27, 0x13 ; 19
2290: eb 2e mov r14, r27
2292: f1 2c mov r15, r1
2294: 63 2f mov r22, r19
2296: 81 2f mov r24, r17
2298: 99 27 eor r25, r25
229a: fc 01 movw r30, r24
229c: ee 0f add r30, r30
229e: ff 1f adc r31, r31
22a0: e8 0f add r30, r24
22a2: f9 1f adc r31, r25
22a4: ec 0d add r30, r12
22a6: f1 1d adc r31, r1
22a8: e7 57 subi r30, 0x77 ; 119
22aa: f3 4f sbci r31, 0xF3 ; 243
22ac: 83 2f mov r24, r19
22ae: 99 27 eor r25, r25
22b0: 8e 9d mul r24, r14
22b2: d0 01 movw r26, r0
22b4: 8f 9d mul r24, r15
22b6: b0 0d add r27, r0
22b8: 9e 9d mul r25, r14
22ba: b0 0d add r27, r0
22bc: 11 24 eor r1, r1
22be: a2 5a subi r26, 0xA2 ; 162
22c0: be 4f sbci r27, 0xFE ; 254
22c2: ed 01 movw r28, r26
22c4: 2d 85 ldd r18, Y+13 ; 0x0d
22c6: 74 e0 ldi r23, 0x04 ; 4
22c8: 88 0f add r24, r24
22ca: 99 1f adc r25, r25
22cc: 7a 95 dec r23
22ce: e1 f7 brne .-8 ; 0x22c8 <JetiEX_CreatePacket+0x154>
22d0: 28 2b or r18, r24
22d2: 20 87 std Z+8, r18 ; 0x08
22d4: 3e 30 cpi r19, 0x0E ; 14
22d6: 88 f4 brcc .+34 ; 0x22fa <JetiEX_CreatePacket+0x186>
22d8: 2e 85 ldd r18, Y+14 ; 0x0e
22da: 3f 85 ldd r19, Y+15 ; 0x0f
22dc: 3f 79 andi r19, 0x9F ; 159
22de: 8a 89 ldd r24, Y+18 ; 0x12
22e0: 99 27 eor r25, r25
22e2: 98 2f mov r25, r24
22e4: 88 27 eor r24, r24
22e6: 92 95 swap r25
22e8: 99 0f add r25, r25
22ea: 90 7e andi r25, 0xE0 ; 224
22ec: 28 2b or r18, r24
22ee: 39 2b or r19, r25
22f0: 21 87 std Z+9, r18 ; 0x09
22f2: 83 2f mov r24, r19
22f4: 99 27 eor r25, r25
22f6: 82 87 std Z+10, r24 ; 0x0a
22f8: 16 c0 rjmp .+44 ; 0x2326 <JetiEX_CreatePacket+0x1b2>
22fa: ed 01 movw r28, r26
22fc: 2e 85 ldd r18, Y+14 ; 0x0e
22fe: 3f 85 ldd r19, Y+15 ; 0x0f
2300: 48 89 ldd r20, Y+16 ; 0x10
2302: 59 89 ldd r21, Y+17 ; 0x11
2304: 21 87 std Z+9, r18 ; 0x09
2306: bb 27 eor r27, r27
2308: a5 2f mov r26, r21
230a: 94 2f mov r25, r20
230c: 83 2f mov r24, r19
230e: 82 87 std Z+10, r24 ; 0x0a
2310: ca 01 movw r24, r20
2312: aa 27 eor r26, r26
2314: bb 27 eor r27, r27
2316: 83 87 std Z+11, r24 ; 0x0b
2318: 85 2f mov r24, r21
231a: 99 27 eor r25, r25
231c: aa 27 eor r26, r26
231e: bb 27 eor r27, r27
2320: 84 87 std Z+12, r24 ; 0x0c
2322: e2 e0 ldi r30, 0x02 ; 2
2324: ce 0e add r12, r30
2326: 86 2f mov r24, r22
2328: 8f 5f subi r24, 0xFF ; 255
232a: 68 2f mov r22, r24
232c: 1f 5f subi r17, 0xFF ; 255
232e: 16 30 cpi r17, 0x06 ; 6
2330: 20 f4 brcc .+8 ; 0x233a <JetiEX_CreatePacket+0x1c6>
2332: 38 2f mov r19, r24
2334: 80 31 cpi r24, 0x10 ; 16
2336: 08 f4 brcc .+2 ; 0x233a <JetiEX_CreatePacket+0x1c6>
2338: ae cf rjmp .-164 ; 0x2296 <JetiEX_CreatePacket+0x122>
233a: 80 93 07 01 sts 0x0107, r24
233e: 83 e0 ldi r24, 0x03 ; 3
2340: 18 9f mul r17, r24
2342: c0 01 movw r24, r0
2344: 11 24 eor r1, r1
2346: 2c 2d mov r18, r12
2348: 28 0f add r18, r24
234a: 28 5f subi r18, 0xF8 ; 248
234c: 20 93 89 0c sts 0x0C89, r18
2350: 22 5c subi r18, 0xC2 ; 194
2352: 20 93 8b 0c sts 0x0C8B, r18
2356: 81 2f mov r24, r17
2358: 99 27 eor r25, r25
235a: 8c 01 movw r16, r24
235c: 00 0f add r16, r16
235e: 11 1f adc r17, r17
2360: 08 0f add r16, r24
2362: 19 1f adc r17, r25
2364: 0c 0d add r16, r12
2366: 11 1d adc r17, r1
2368: 07 57 subi r16, 0x77 ; 119
236a: 13 4f sbci r17, 0xF3 ; 243
236c: 20 54 subi r18, 0x40 ; 64
236e: 62 2f mov r22, r18
2370: 8b e8 ldi r24, 0x8B ; 139
2372: 9c e0 ldi r25, 0x0C ; 12
2374: d6 de rcall .-596 ; 0x2122 <crc8>
2376: e8 01 movw r28, r16
2378: 88 87 std Y+8, r24 ; 0x08
237a: 80 91 07 01 lds r24, 0x0107
237e: 80 31 cpi r24, 0x10 ; 16
2380: 70 f0 brcs .+28 ; 0x239e <JetiEX_CreatePacket+0x22a>
2382: 81 e0 ldi r24, 0x01 ; 1
2384: 80 93 07 01 sts 0x0107, r24
2388: 10 92 ff 02 sts 0x02FF, r1
238c: 80 91 fe 02 lds r24, 0x02FE
2390: 8f 5f subi r24, 0xFF ; 255
2392: 80 93 fe 02 sts 0x02FE, r24
2396: 80 31 cpi r24, 0x10 ; 16
2398: 10 f0 brcs .+4 ; 0x239e <JetiEX_CreatePacket+0x22a>
239a: 10 92 fe 02 sts 0x02FE, r1
239e: e9 e0 ldi r30, 0x09 ; 9
23a0: cd b7 in r28, 0x3d ; 61
23a2: de b7 in r29, 0x3e ; 62
23a4: 0c 94 fd b1 jmp 0x163fa ; 0x163fa <__epilogue_restores__+0x12>
000023a8 <a48784362857632195659>:
23a8: 80 91 06 01 lds r24, 0x0106
23ac: 88 23 and r24, r24
23ae: 09 f4 brne .+2 ; 0x23b2 <a48784362857632195659+0xa>
23b0: 46 c0 rjmp .+140 ; 0x243e <a48784362857632195659+0x96>
23b2: 80 91 cb 03 lds r24, 0x03CB
23b6: 85 fd sbrc r24, 5
23b8: 04 c0 rjmp .+8 ; 0x23c2 <a48784362857632195659+0x1a>
23ba: 80 91 5c 04 lds r24, 0x045C
23be: 88 23 and r24, r24
23c0: 81 f0 breq .+32 ; 0x23e2 <a48784362857632195659+0x3a>
23c2: 82 e9 ldi r24, 0x92 ; 146
23c4: 80 93 b2 0c sts 0x0CB2, r24
23c8: 83 e2 ldi r24, 0x23 ; 35
23ca: 80 93 b3 0c sts 0x0CB3, r24
23ce: 80 91 5c 04 lds r24, 0x045C
23d2: 88 23 and r24, r24
23d4: 09 f4 brne .+2 ; 0x23d8 <a48784362857632195659+0x30>
23d6: 85 e5 ldi r24, 0x55 ; 85
23d8: 80 93 b4 0c sts 0x0CB4, r24
23dc: 10 92 5c 04 sts 0x045C, r1
23e0: 02 c0 rjmp .+4 ; 0x23e6 <a48784362857632195659+0x3e>
23e2: 80 93 b2 0c sts 0x0CB2, r24
23e6: 80 91 08 01 lds r24, 0x0108
23ea: 8f 30 cpi r24, 0x0F ; 15
23ec: 71 f4 brne .+28 ; 0x240a <a48784362857632195659+0x62>
23ee: 80 91 f2 02 lds r24, 0x02F2
23f2: 0e 94 ad 83 call 0x1075a ; 0x1075a <JetiBox_Update>
23f6: 88 23 and r24, r24
23f8: 41 f0 breq .+16 ; 0x240a <a48784362857632195659+0x62>
23fa: 81 e9 ldi r24, 0x91 ; 145
23fc: 80 93 b2 0c sts 0x0CB2, r24
2400: 80 93 b3 0c sts 0x0CB3, r24
2404: 81 e3 ldi r24, 0x31 ; 49
2406: 80 93 b4 0c sts 0x0CB4, r24
240a: 10 92 06 01 sts 0x0106, r1
240e: 80 91 c8 00 lds r24, 0x00C8
2412: 85 ff sbrs r24, 5
2414: fc cf rjmp .-8 ; 0x240e <a48784362857632195659+0x66>
2416: 80 91 c9 00 lds r24, 0x00C9
241a: 8f 7e andi r24, 0xEF ; 239
241c: 80 93 c9 00 sts 0x00C9, r24
2420: 80 91 c9 00 lds r24, 0x00C9
2424: 8e 7f andi r24, 0xFE ; 254
2426: 80 93 c9 00 sts 0x00C9, r24
242a: a4 de rcall .-696 ; 0x2174 <JetiEX_CreatePacket>
242c: 8e e7 ldi r24, 0x7E ; 126
242e: 80 93 ce 00 sts 0x00CE, r24
2432: 80 91 f2 02 lds r24, 0x02F2
2436: 80 93 08 01 sts 0x0108, r24
243a: 10 92 f2 02 sts 0x02F2, r1
243e: 08 95 ret
00002440 <njkvnfuhgbuzrgezgf483>:
2440: ef 92 push r14
2442: ff 92 push r15
2444: 0f 93 push r16
2446: 1f 93 push r17
2448: cf 93 push r28
244a: df 93 push r29
244c: 7c 01 movw r14, r24
244e: 8b 01 movw r16, r22
2450: ea 01 movw r28, r20
2452: 45 2b or r20, r21
2454: 39 f0 breq .+14 ; 0x2464 <njkvnfuhgbuzrgezgf483+0x24>
2456: f8 01 movw r30, r16
2458: 81 91 ld r24, Z+
245a: 8f 01 movw r16, r30
245c: f7 01 movw r30, r14
245e: 09 95 icall
2460: 21 97 sbiw r28, 0x01 ; 1
2462: c9 f7 brne .-14 ; 0x2456 <njkvnfuhgbuzrgezgf483+0x16>
2464: e6 e0 ldi r30, 0x06 ; 6
2466: cd b7 in r28, 0x3d ; 61
2468: de b7 in r29, 0x3e ; 62
246a: 0c 94 00 b2 jmp 0x16400 ; 0x16400 <__epilogue_restores__+0x18>
0000246e <lkvgnfdgun57th38rgh84>:
246e: ef 92 push r14
2470: ff 92 push r15
2472: 0f 93 push r16
2474: 1f 93 push r17
2476: cf 93 push r28
2478: df 93 push r29
247a: 7c 01 movw r14, r24
247c: 8b 01 movw r16, r22
247e: ea 01 movw r28, r20
2480: 45 2b or r20, r21
2482: 41 f0 breq .+16 ; 0x2494 <lkvgnfdgun57th38rgh84+0x26>
2484: f8 01 movw r30, r16
2486: 0f 5f subi r16, 0xFF ; 255
2488: 1f 4f sbci r17, 0xFF ; 255
248a: 84 91 lpm r24, Z
248c: f7 01 movw r30, r14
248e: 09 95 icall
2490: 21 97 sbiw r28, 0x01 ; 1
2492: c1 f7 brne .-16 ; 0x2484 <lkvgnfdgun57th38rgh84+0x16>
2494: e6 e0 ldi r30, 0x06 ; 6
2496: cd b7 in r28, 0x3d ; 61
2498: de b7 in r29, 0x3e ; 62
249a: 0c 94 00 b2 jmp 0x16400 ; 0x16400 <__epilogue_restores__+0x18>
0000249e <fgmjgnrtuth587th9rTrw>:
249e: 0f 93 push r16
24a0: 1f 93 push r17
24a2: cf 93 push r28
24a4: 8c 01 movw r16, r24
24a6: c6 2f mov r28, r22
24a8: 16 16 cp r1, r22
24aa: 34 f4 brge .+12 ; 0x24b8 <fgmjgnrtuth587th9rTrw+0x1a>
24ac: 80 e2 ldi r24, 0x20 ; 32
24ae: f8 01 movw r30, r16
24b0: 09 95 icall
24b2: c1 50 subi r28, 0x01 ; 1
24b4: 1c 16 cp r1, r28
24b6: d4 f3 brlt .-12 ; 0x24ac <fgmjgnrtuth587th9rTrw+0xe>
24b8: cf 91 pop r28
24ba: 1f 91 pop r17
24bc: 0f 91 pop r16
24be: 08 95 ret
000024c0 <wqqeRT45jth8g758735h4>:
24c0: 0f 93 push r16
24c2: 1f 93 push r17
24c4: cf 93 push r28
24c6: 8c 01 movw r16, r24
24c8: c6 2f mov r28, r22
24ca: 16 16 cp r1, r22
24cc: 34 f4 brge .+12 ; 0x24da <wqqeRT45jth8g758735h4+0x1a>
24ce: 80 e3 ldi r24, 0x30 ; 48
24d0: f8 01 movw r30, r16
24d2: 09 95 icall
24d4: c1 50 subi r28, 0x01 ; 1
24d6: 1c 16 cp r1, r28
24d8: d4 f3 brlt .-12 ; 0x24ce <wqqeRT45jth8g758735h4+0xe>
24da: cf 91 pop r28
24dc: 1f 91 pop r17
24de: 0f 91 pop r16
24e0: 08 95 ret
000024e2 <IIllllIllIlllIIlllII>:
24e2: a5 e3 ldi r26, 0x35 ; 53
24e4: b0 e0 ldi r27, 0x00 ; 0
24e6: e7 e7 ldi r30, 0x77 ; 119
24e8: f2 e1 ldi r31, 0x12 ; 18
24ea: 0c 94 d8 b1 jmp 0x163b0 ; 0x163b0 <__prologue_saves__>
24ee: 2e 96 adiw r28, 0x0e ; 14
24f0: ee ad ldd r30, Y+62 ; 0x3e
24f2: ff ad ldd r31, Y+63 ; 0x3f
24f4: 2e 97 sbiw r28, 0x0e ; 14
24f6: 88 24 eor r8, r8
24f8: 99 24 eor r9, r9
24fa: 54 01 movw r10, r8
24fc: 80 91 ec 02 lds r24, 0x02EC
2500: 88 23 and r24, r24
2502: 21 f4 brne .+8 ; 0x250c <IIllllIllIlllIIlllII+0x2a>
2504: 2c 96 adiw r28, 0x0c ; 12
2506: 1f ae std Y+63, r1 ; 0x3f
2508: 1e ae std Y+62, r1 ; 0x3e
250a: 2c 97 sbiw r28, 0x0c ; 12
250c: ae e4 ldi r26, 0x4E ; 78
250e: 4a 2e mov r4, r26
2510: 51 2c mov r5, r1
2512: 4c 0e add r4, r28
2514: 5d 1e adc r5, r29
2516: 6f 01 movw r12, r30
2518: b6 01 movw r22, r12
251a: 05 c0 rjmp .+10 ; 0x2526 <IIllllIllIlllIIlllII+0x44>
251c: 15 32 cpi r17, 0x25 ; 37
251e: 39 f0 breq .+14 ; 0x252e <IIllllIllIlllIIlllII+0x4c>
2520: 08 94 sec
2522: c1 1c adc r12, r1
2524: d1 1c adc r13, r1
2526: f6 01 movw r30, r12
2528: 14 91 lpm r17, Z
252a: 11 23 and r17, r17
252c: b9 f7 brne .-18 ; 0x251c <IIllllIllIlllIIlllII+0x3a>
252e: a6 01 movw r20, r12
2530: 46 1b sub r20, r22
2532: 57 0b sbc r21, r23
2534: 29 f0 breq .+10 ; 0x2540 <IIllllIllIlllIIlllII+0x5e>
2536: 2c 96 adiw r28, 0x0c ; 12
2538: 8e ad ldd r24, Y+62 ; 0x3e
253a: 9f ad ldd r25, Y+63 ; 0x3f
253c: 2c 97 sbiw r28, 0x0c ; 12
253e: 97 df rcall .-210 ; 0x246e <lkvgnfdgun57th38rgh84>
2540: 11 23 and r17, r17
2542: 09 f4 brne .+2 ; 0x2546 <IIllllIllIlllIIlllII+0x64>
2544: 64 c2 rjmp .+1224 ; 0x2a0e <IIllllIllIlllIIlllII+0x52c>
2546: 08 94 sec
2548: c1 1c adc r12, r1
254a: d1 1c adc r13, r1
254c: ff 24 eor r15, r15
254e: fd a6 std Y+45, r15 ; 0x2d
2550: fc a6 std Y+44, r15 ; 0x2c
2552: ef ef ldi r30, 0xFF ; 255
2554: ee 2e mov r14, r30
2556: f9 a6 std Y+41, r15 ; 0x29
2558: f6 01 movw r30, r12
255a: 08 94 sec
255c: c1 1c adc r12, r1
255e: d1 1c adc r13, r1
2560: 14 91 lpm r17, Z
2562: 15 37 cpi r17, 0x75 ; 117
2564: 21 f0 breq .+8 ; 0x256e <IIllllIllIlllIIlllII+0x8c>
2566: 81 2f mov r24, r17
2568: 80 62 ori r24, 0x20 ; 32
256a: 88 37 cpi r24, 0x78 ; 120
256c: b1 f4 brne .+44 ; 0x259a <IIllllIllIlllIIlllII+0xb8>
256e: f0 fe sbrs r15, 0
2570: 0a c0 rjmp .+20 ; 0x2586 <IIllllIllIlllIIlllII+0xa4>
2572: f2 01 movw r30, r4
2574: 24 e0 ldi r18, 0x04 ; 4
2576: 30 e0 ldi r19, 0x00 ; 0
2578: 42 0e add r4, r18
257a: 53 1e adc r5, r19
257c: 80 80 ld r8, Z
257e: 91 80 ldd r9, Z+1 ; 0x01
2580: a2 80 ldd r10, Z+2 ; 0x02
2582: b3 80 ldd r11, Z+3 ; 0x03
2584: 0a c0 rjmp .+20 ; 0x259a <IIllllIllIlllIIlllII+0xb8>
2586: f2 01 movw r30, r4
2588: 42 e0 ldi r20, 0x02 ; 2
258a: 50 e0 ldi r21, 0x00 ; 0
258c: 44 0e add r4, r20
258e: 55 1e adc r5, r21
2590: 80 81 ld r24, Z
2592: 91 81 ldd r25, Z+1 ; 0x01
2594: 4c 01 movw r8, r24
2596: aa 24 eor r10, r10
2598: bb 24 eor r11, r11
259a: 10 32 cpi r17, 0x20 ; 32
259c: 21 f4 brne .+8 ; 0x25a6 <IIllllIllIlllIIlllII+0xc4>
259e: 89 a5 ldd r24, Y+41 ; 0x29
25a0: 88 23 and r24, r24
25a2: d1 f6 brne .-76 ; 0x2558 <IIllllIllIlllIIlllII+0x76>
25a4: 1d c0 rjmp .+58 ; 0x25e0 <IIllllIllIlllIIlllII+0xfe>
25a6: 13 32 cpi r17, 0x23 ; 35
25a8: 19 f4 brne .+6 ; 0x25b0 <IIllllIllIlllIIlllII+0xce>
25aa: 58 e0 ldi r21, 0x08 ; 8
25ac: f5 2a or r15, r21
25ae: d4 cf rjmp .-88 ; 0x2558 <IIllllIllIlllIIlllII+0x76>
25b0: 1a 32 cpi r17, 0x2A ; 42
25b2: 11 f0 breq .+4 ; 0x25b8 <IIllllIllIlllIIlllII+0xd6>
25b4: 1d 32 cpi r17, 0x2D ; 45
25b6: 91 f4 brne .+36 ; 0x25dc <IIllllIllIlllIIlllII+0xfa>
25b8: 1a 32 cpi r17, 0x2A ; 42
25ba: 59 f4 brne .+22 ; 0x25d2 <IIllllIllIlllIIlllII+0xf0>
25bc: f2 01 movw r30, r4
25be: 82 e0 ldi r24, 0x02 ; 2
25c0: 90 e0 ldi r25, 0x00 ; 0
25c2: 48 0e add r4, r24
25c4: 59 1e adc r5, r25
25c6: e0 81 ld r30, Z
25c8: ec a7 std Y+44, r30 ; 0x2c
25ca: ee 23 and r30, r30
25cc: 2c f6 brge .-118 ; 0x2558 <IIllllIllIlllIIlllII+0x76>
25ce: e1 95 neg r30
25d0: ec a7 std Y+44, r30 ; 0x2c
25d2: 90 e1 ldi r25, 0x10 ; 16
25d4: f9 2a or r15, r25
25d6: af ed ldi r26, 0xDF ; 223
25d8: fa 22 and r15, r26
25da: be cf rjmp .-132 ; 0x2558 <IIllllIllIlllIIlllII+0x76>
25dc: 1b 32 cpi r17, 0x2B ; 43
25de: 11 f4 brne .+4 ; 0x25e4 <IIllllIllIlllIIlllII+0x102>
25e0: 19 a7 std Y+41, r17 ; 0x29
25e2: ba cf rjmp .-140 ; 0x2558 <IIllllIllIlllIIlllII+0x76>
25e4: 1e 32 cpi r17, 0x2E ; 46
25e6: c1 f5 brne .+112 ; 0x2658 <IIllllIllIlllIIlllII+0x176>
25e8: f6 01 movw r30, r12
25ea: 08 94 sec
25ec: c1 1c adc r12, r1
25ee: d1 1c adc r13, r1
25f0: 14 91 lpm r17, Z
25f2: 1a 32 cpi r17, 0x2A ; 42
25f4: 79 f4 brne .+30 ; 0x2614 <IIllllIllIlllIIlllII+0x132>
25f6: f2 01 movw r30, r4
25f8: 22 e0 ldi r18, 0x02 ; 2
25fa: 30 e0 ldi r19, 0x00 ; 0
25fc: 42 0e add r4, r18
25fe: 53 1e adc r5, r19
2600: 40 81 ld r20, Z
2602: 51 81 ldd r21, Z+1 ; 0x01
2604: 3f ef ldi r19, 0xFF ; 255
2606: 4f 3f cpi r20, 0xFF ; 255
2608: 53 07 cpc r21, r19
260a: 14 f4 brge .+4 ; 0x2610 <IIllllIllIlllIIlllII+0x12e>
260c: 4f ef ldi r20, 0xFF ; 255
260e: 5f ef ldi r21, 0xFF ; 255
2610: e4 2e mov r14, r20
2612: a2 cf rjmp .-188 ; 0x2558 <IIllllIllIlllIIlllII+0x76>
2614: 40 e0 ldi r20, 0x00 ; 0
2616: 50 e0 ldi r21, 0x00 ; 0
2618: 81 2f mov r24, r17
261a: 80 53 subi r24, 0x30 ; 48
261c: 8a 30 cpi r24, 0x0A ; 10
261e: a0 f4 brcc .+40 ; 0x2648 <IIllllIllIlllIIlllII+0x166>
2620: ca 01 movw r24, r20
2622: 73 e0 ldi r23, 0x03 ; 3
2624: 88 0f add r24, r24
2626: 99 1f adc r25, r25
2628: 7a 95 dec r23
262a: e1 f7 brne .-8 ; 0x2624 <IIllllIllIlllIIlllII+0x142>
262c: 84 0f add r24, r20
262e: 95 1f adc r25, r21
2630: 48 0f add r20, r24
2632: 59 1f adc r21, r25
2634: 41 0f add r20, r17
2636: 51 1d adc r21, r1
2638: 40 53 subi r20, 0x30 ; 48
263a: 50 40 sbci r21, 0x00 ; 0
263c: f6 01 movw r30, r12
263e: 08 94 sec
2640: c1 1c adc r12, r1
2642: d1 1c adc r13, r1
2644: 14 91 lpm r17, Z
2646: e8 cf rjmp .-48 ; 0x2618 <IIllllIllIlllIIlllII+0x136>
2648: 8f ef ldi r24, 0xFF ; 255
264a: 4f 3f cpi r20, 0xFF ; 255
264c: 58 07 cpc r21, r24
264e: 14 f4 brge .+4 ; 0x2654 <IIllllIllIlllIIlllII+0x172>
2650: 4f ef ldi r20, 0xFF ; 255
2652: 5f ef ldi r21, 0xFF ; 255
2654: e4 2e mov r14, r20
2656: 85 cf rjmp .-246 ; 0x2562 <IIllllIllIlllIIlllII+0x80>
2658: 10 33 cpi r17, 0x30 ; 48
265a: 29 f4 brne .+10 ; 0x2666 <IIllllIllIlllIIlllII+0x184>
265c: f4 fc sbrc r15, 4
265e: 7c cf rjmp .-264 ; 0x2558 <IIllllIllIlllIIlllII+0x76>
2660: 90 e2 ldi r25, 0x20 ; 32
2662: f9 2a or r15, r25
2664: 79 cf rjmp .-270 ; 0x2558 <IIllllIllIlllIIlllII+0x76>
2666: 81 2f mov r24, r17
2668: 81 53 subi r24, 0x31 ; 49
266a: 89 30 cpi r24, 0x09 ; 9
266c: d8 f4 brcc .+54 ; 0x26a4 <IIllllIllIlllIIlllII+0x1c2>
266e: 40 e0 ldi r20, 0x00 ; 0
2670: 50 e0 ldi r21, 0x00 ; 0
2672: ca 01 movw r24, r20
2674: 63 e0 ldi r22, 0x03 ; 3
2676: 88 0f add r24, r24
2678: 99 1f adc r25, r25
267a: 6a 95 dec r22
267c: e1 f7 brne .-8 ; 0x2676 <IIllllIllIlllIIlllII+0x194>
267e: 84 0f add r24, r20
2680: 95 1f adc r25, r21
2682: 48 0f add r20, r24
2684: 59 1f adc r21, r25
2686: 41 0f add r20, r17
2688: 51 1d adc r21, r1
268a: 40 53 subi r20, 0x30 ; 48
268c: 50 40 sbci r21, 0x00 ; 0
268e: f6 01 movw r30, r12
2690: 08 94 sec
2692: c1 1c adc r12, r1
2694: d1 1c adc r13, r1
2696: 14 91 lpm r17, Z
2698: 81 2f mov r24, r17
269a: 80 53 subi r24, 0x30 ; 48
269c: 8a 30 cpi r24, 0x0A ; 10
269e: 48 f3 brcs .-46 ; 0x2672 <IIllllIllIlllIIlllII+0x190>
26a0: 4c a7 std Y+44, r20 ; 0x2c
26a2: 5f cf rjmp .-322 ; 0x2562 <IIllllIllIlllIIlllII+0x80>
26a4: 18 36 cpi r17, 0x68 ; 104
26a6: 19 f4 brne .+6 ; 0x26ae <IIllllIllIlllIIlllII+0x1cc>
26a8: a4 e0 ldi r26, 0x04 ; 4
26aa: fa 2a or r15, r26
26ac: 55 cf rjmp .-342 ; 0x2558 <IIllllIllIlllIIlllII+0x76>
26ae: 1c 36 cpi r17, 0x6C ; 108
26b0: 19 f4 brne .+6 ; 0x26b8 <IIllllIllIlllIIlllII+0x1d6>
26b2: b1 e0 ldi r27, 0x01 ; 1
26b4: fb 2a or r15, r27
26b6: 50 cf rjmp .-352 ; 0x2558 <IIllllIllIlllIIlllII+0x76>
26b8: 13 36 cpi r17, 0x63 ; 99
26ba: 61 f4 brne .+24 ; 0x26d4 <IIllllIllIlllIIlllII+0x1f2>
26bc: 3e 01 movw r6, r28
26be: 08 94 sec
26c0: 61 1c adc r6, r1
26c2: 71 1c adc r7, r1
26c4: f2 01 movw r30, r4
26c6: 22 e0 ldi r18, 0x02 ; 2
26c8: 30 e0 ldi r19, 0x00 ; 0
26ca: 42 0e add r4, r18
26cc: 53 1e adc r5, r19
26ce: 80 81 ld r24, Z
26d0: 89 83 std Y+1, r24 ; 0x01
26d2: 3c c1 rjmp .+632 ; 0x294c <IIllllIllIlllIIlllII+0x46a>
26d4: 14 34 cpi r17, 0x44 ; 68
26d6: 21 f0 breq .+8 ; 0x26e0 <IIllllIllIlllIIlllII+0x1fe>
26d8: 14 36 cpi r17, 0x64 ; 100
26da: 11 f0 breq .+4 ; 0x26e0 <IIllllIllIlllIIlllII+0x1fe>
26dc: 19 36 cpi r17, 0x69 ; 105
26de: 51 f5 brne .+84 ; 0x2734 <IIllllIllIlllIIlllII+0x252>
26e0: 14 34 cpi r17, 0x44 ; 68
26e2: 11 f4 brne .+4 ; 0x26e8 <IIllllIllIlllIIlllII+0x206>
26e4: 31 e0 ldi r19, 0x01 ; 1
26e6: f3 2a or r15, r19
26e8: f0 fe sbrs r15, 0
26ea: 0a c0 rjmp .+20 ; 0x2700 <IIllllIllIlllIIlllII+0x21e>
26ec: f2 01 movw r30, r4
26ee: 44 e0 ldi r20, 0x04 ; 4
26f0: 50 e0 ldi r21, 0x00 ; 0
26f2: 44 0e add r4, r20
26f4: 55 1e adc r5, r21
26f6: 80 80 ld r8, Z
26f8: 91 80 ldd r9, Z+1 ; 0x01
26fa: a2 80 ldd r10, Z+2 ; 0x02
26fc: b3 80 ldd r11, Z+3 ; 0x03
26fe: 0c c0 rjmp .+24 ; 0x2718 <IIllllIllIlllIIlllII+0x236>
2700: f2 01 movw r30, r4
2702: 82 e0 ldi r24, 0x02 ; 2
2704: 90 e0 ldi r25, 0x00 ; 0
2706: 48 0e add r4, r24
2708: 59 1e adc r5, r25
270a: 80 81 ld r24, Z
270c: 91 81 ldd r25, Z+1 ; 0x01
270e: 4c 01 movw r8, r24
2710: aa 24 eor r10, r10
2712: 97 fc sbrc r9, 7
2714: a0 94 com r10
2716: ba 2c mov r11, r10
2718: b7 fe sbrs r11, 7
271a: 0a c0 rjmp .+20 ; 0x2730 <IIllllIllIlllIIlllII+0x24e>
271c: b0 94 com r11
271e: a0 94 com r10
2720: 90 94 com r9
2722: 80 94 com r8
2724: 81 1c adc r8, r1
2726: 91 1c adc r9, r1
2728: a1 1c adc r10, r1
272a: b1 1c adc r11, r1
272c: 8d e2 ldi r24, 0x2D ; 45
272e: 89 a7 std Y+41, r24 ; 0x29
2730: 0a e0 ldi r16, 0x0A ; 10
2732: 6f c0 rjmp .+222 ; 0x2812 <IIllllIllIlllIIlllII+0x330>
2734: 1f 34 cpi r17, 0x4F ; 79
2736: 11 f0 breq .+4 ; 0x273c <IIllllIllIlllIIlllII+0x25a>
2738: 1f 36 cpi r17, 0x6F ; 111
273a: 31 f4 brne .+12 ; 0x2748 <IIllllIllIlllIIlllII+0x266>
273c: 1f 34 cpi r17, 0x4F ; 79
273e: 11 f4 brne .+4 ; 0x2744 <IIllllIllIlllIIlllII+0x262>
2740: 91 e0 ldi r25, 0x01 ; 1
2742: f9 2a or r15, r25
2744: 08 e0 ldi r16, 0x08 ; 8
2746: 64 c0 rjmp .+200 ; 0x2810 <IIllllIllIlllIIlllII+0x32e>
2748: 10 37 cpi r17, 0x70 ; 112
274a: 79 f4 brne .+30 ; 0x276a <IIllllIllIlllIIlllII+0x288>
274c: f2 01 movw r30, r4
274e: a2 e0 ldi r26, 0x02 ; 2
2750: b0 e0 ldi r27, 0x00 ; 0
2752: 4a 0e add r4, r26
2754: 5b 1e adc r5, r27
2756: 80 81 ld r24, Z
2758: 91 81 ldd r25, Z+1 ; 0x01
275a: 4c 01 movw r8, r24
275c: aa 24 eor r10, r10
275e: bb 24 eor r11, r11
2760: 00 e1 ldi r16, 0x10 ; 16
2762: b0 e4 ldi r27, 0x40 ; 64
2764: fb 2a or r15, r27
2766: 18 e7 ldi r17, 0x78 ; 120
2768: 53 c0 rjmp .+166 ; 0x2810 <IIllllIllIlllIIlllII+0x32e>
276a: 13 37 cpi r17, 0x73 ; 115
276c: c1 f5 brne .+112 ; 0x27de <IIllllIllIlllIIlllII+0x2fc>
276e: f2 01 movw r30, r4
2770: 22 e0 ldi r18, 0x02 ; 2
2772: 30 e0 ldi r19, 0x00 ; 0
2774: 42 0e add r4, r18
2776: 53 1e adc r5, r19
2778: 60 80 ld r6, Z
277a: 71 80 ldd r7, Z+1 ; 0x01
277c: 61 14 cp r6, r1
277e: 71 04 cpc r7, r1
2780: 89 f4 brne .+34 ; 0x27a4 <IIllllIllIlllIIlllII+0x2c2>
2782: 3e 01 movw r6, r28
2784: 08 94 sec
2786: 61 1c adc r6, r1
2788: 71 1c adc r7, r1
278a: 88 e2 ldi r24, 0x28 ; 40
278c: 89 83 std Y+1, r24 ; 0x01
278e: 8e e6 ldi r24, 0x6E ; 110
2790: f3 01 movw r30, r6
2792: 81 83 std Z+1, r24 ; 0x01
2794: 85 e7 ldi r24, 0x75 ; 117
2796: 8b 83 std Y+3, r24 ; 0x03
2798: 8c e6 ldi r24, 0x6C ; 108
279a: 8c 83 std Y+4, r24 ; 0x04
279c: 8d 83 std Y+5, r24 ; 0x05
279e: 89 e2 ldi r24, 0x29 ; 41
27a0: 8e 83 std Y+6, r24 ; 0x06
27a2: 1f 82 std Y+7, r1 ; 0x07
27a4: e7 fc sbrc r14, 7
27a6: 13 c0 rjmp .+38 ; 0x27ce <IIllllIllIlllIIlllII+0x2ec>
27a8: 8e 2d mov r24, r14
27aa: 99 27 eor r25, r25
27ac: 87 fd sbrc r24, 7
27ae: 90 95 com r25
27b0: ac 01 movw r20, r24
27b2: 60 e0 ldi r22, 0x00 ; 0
27b4: 70 e0 ldi r23, 0x00 ; 0
27b6: c3 01 movw r24, r6
27b8: 0e 94 18 b2 call 0x16430 ; 0x16430 <memchr>
27bc: 00 97 sbiw r24, 0x00 ; 0
27be: 29 f0 breq .+10 ; 0x27ca <IIllllIllIlllIIlllII+0x2e8>
27c0: 38 2e mov r3, r24
27c2: 36 18 sub r3, r6
27c4: e3 14 cp r14, r3
27c6: 0c f0 brlt .+2 ; 0x27ca <IIllllIllIlllIIlllII+0x2e8>
27c8: c3 c0 rjmp .+390 ; 0x2950 <IIllllIllIlllIIlllII+0x46e>
27ca: 3e 2c mov r3, r14
27cc: c1 c0 rjmp .+386 ; 0x2950 <IIllllIllIlllIIlllII+0x46e>
27ce: f3 01 movw r30, r6
27d0: 01 90 ld r0, Z+
27d2: 00 20 and r0, r0
27d4: e9 f7 brne .-6 ; 0x27d0 <IIllllIllIlllIIlllII+0x2ee>
27d6: 31 97 sbiw r30, 0x01 ; 1
27d8: 3e 2e mov r3, r30
27da: 36 18 sub r3, r6
27dc: b9 c0 rjmp .+370 ; 0x2950 <IIllllIllIlllIIlllII+0x46e>
27de: 15 35 cpi r17, 0x55 ; 85
27e0: 11 f0 breq .+4 ; 0x27e6 <IIllllIllIlllIIlllII+0x304>
27e2: 15 37 cpi r17, 0x75 ; 117
27e4: 31 f4 brne .+12 ; 0x27f2 <IIllllIllIlllIIlllII+0x310>
27e6: 15 35 cpi r17, 0x55 ; 85
27e8: 11 f4 brne .+4 ; 0x27ee <IIllllIllIlllIIlllII+0x30c>
27ea: f1 e0 ldi r31, 0x01 ; 1
27ec: ff 2a or r15, r31
27ee: 0a e0 ldi r16, 0x0A ; 10
27f0: 0f c0 rjmp .+30 ; 0x2810 <IIllllIllIlllIIlllII+0x32e>
27f2: 18 35 cpi r17, 0x58 ; 88
27f4: 19 f0 breq .+6 ; 0x27fc <IIllllIllIlllIIlllII+0x31a>
27f6: 18 37 cpi r17, 0x78 ; 120
27f8: 09 f0 breq .+2 ; 0x27fc <IIllllIllIlllIIlllII+0x31a>
27fa: a0 c0 rjmp .+320 ; 0x293c <IIllllIllIlllIIlllII+0x45a>
27fc: 00 e1 ldi r16, 0x10 ; 16
27fe: f3 fe sbrs r15, 3
2800: 07 c0 rjmp .+14 ; 0x2810 <IIllllIllIlllIIlllII+0x32e>
2802: 81 14 cp r8, r1
2804: 91 04 cpc r9, r1
2806: a1 04 cpc r10, r1
2808: b1 04 cpc r11, r1
280a: 11 f0 breq .+4 ; 0x2810 <IIllllIllIlllIIlllII+0x32e>
280c: 20 e4 ldi r18, 0x40 ; 64
280e: f2 2a or r15, r18
2810: 19 a6 std Y+41, r1 ; 0x29
2812: ed a6 std Y+45, r14 ; 0x2d
2814: e7 fc sbrc r14, 7
2816: 02 c0 rjmp .+4 ; 0x281c <IIllllIllIlllIIlllII+0x33a>
2818: 3f ed ldi r19, 0xDF ; 223
281a: f3 22 and r15, r19
281c: 49 e2 ldi r20, 0x29 ; 41
281e: 64 2e mov r6, r20
2820: 71 2c mov r7, r1
2822: 6c 0e add r6, r28
2824: 7d 1e adc r7, r29
2826: 81 14 cp r8, r1
2828: 91 04 cpc r9, r1
282a: a1 04 cpc r10, r1
282c: b1 04 cpc r11, r1
282e: 21 f4 brne .+8 ; 0x2838 <IIllllIllIlllIIlllII+0x356>
2830: 4d a5 ldd r20, Y+45 ; 0x2d
2832: 44 23 and r20, r20
2834: 09 f4 brne .+2 ; 0x2838 <IIllllIllIlllIIlllII+0x356>
2836: 7b c0 rjmp .+246 ; 0x292e <IIllllIllIlllIIlllII+0x44c>
2838: 80 2f mov r24, r16
283a: 99 27 eor r25, r25
283c: aa 27 eor r26, r26
283e: bb 27 eor r27, r27
2840: 8e a7 std Y+46, r24 ; 0x2e
2842: 9f a7 std Y+47, r25 ; 0x2f
2844: a8 ab std Y+48, r26 ; 0x30
2846: b9 ab std Y+49, r27 ; 0x31
2848: 20 2e mov r2, r16
284a: 33 24 eor r3, r3
284c: 90 e0 ldi r25, 0x00 ; 0
284e: 89 16 cp r8, r25
2850: 90 e0 ldi r25, 0x00 ; 0
2852: 99 06 cpc r9, r25
2854: 91 e0 ldi r25, 0x01 ; 1
2856: a9 06 cpc r10, r25
2858: 90 e0 ldi r25, 0x00 ; 0
285a: b9 06 cpc r11, r25
285c: 48 f0 brcs .+18 ; 0x2870 <IIllllIllIlllIIlllII+0x38e>
285e: c5 01 movw r24, r10
2860: b4 01 movw r22, r8
2862: 2e a5 ldd r18, Y+46 ; 0x2e
2864: 3f a5 ldd r19, Y+47 ; 0x2f
2866: 48 a9 ldd r20, Y+48 ; 0x30
2868: 59 a9 ldd r21, Y+49 ; 0x31
286a: 0e 94 69 b1 call 0x162d2 ; 0x162d2 <__udivmodsi4>
286e: 17 c0 rjmp .+46 ; 0x289e <IIllllIllIlllIIlllII+0x3bc>
2870: af ef ldi r26, 0xFF ; 255
2872: 8a 16 cp r8, r26
2874: 91 04 cpc r9, r1
2876: a1 04 cpc r10, r1
2878: b1 04 cpc r11, r1
287a: 49 f0 breq .+18 ; 0x288e <IIllllIllIlllIIlllII+0x3ac>
287c: 40 f0 brcs .+16 ; 0x288e <IIllllIllIlllIIlllII+0x3ac>
287e: c4 01 movw r24, r8
2880: b1 01 movw r22, r2
2882: 0e 94 42 b1 call 0x16284 ; 0x16284 <__udivmodhi4>
2886: 9b 01 movw r18, r22
2888: 44 27 eor r20, r20
288a: 55 27 eor r21, r21
288c: 08 c0 rjmp .+16 ; 0x289e <IIllllIllIlllIIlllII+0x3bc>
288e: 88 2d mov r24, r8
2890: 60 2f mov r22, r16
2892: 0e 94 36 b1 call 0x1626c ; 0x1626c <__udivmodqi4>
2896: 28 2f mov r18, r24
2898: 33 27 eor r19, r19
289a: 44 27 eor r20, r20
289c: 55 27 eor r21, r21
289e: 2a ab std Y+50, r18 ; 0x32
28a0: 3b ab std Y+51, r19 ; 0x33
28a2: 4c ab std Y+52, r20 ; 0x34
28a4: 5d ab std Y+53, r21 ; 0x35
28a6: 0a 30 cpi r16, 0x0A ; 10
28a8: 59 f4 brne .+22 ; 0x28c0 <IIllllIllIlllIIlllII+0x3de>
28aa: 8a a9 ldd r24, Y+50 ; 0x32
28ac: 88 0f add r24, r24
28ae: 88 0f add r24, r24
28b0: 88 0f add r24, r24
28b2: 9a a9 ldd r25, Y+50 ; 0x32
28b4: 99 0f add r25, r25
28b6: 89 0f add r24, r25
28b8: 38 2d mov r19, r8
28ba: 38 1b sub r19, r24
28bc: 83 2f mov r24, r19
28be: 10 c0 rjmp .+32 ; 0x28e0 <IIllllIllIlllIIlllII+0x3fe>
28c0: 00 31 cpi r16, 0x10 ; 16
28c2: 39 f4 brne .+14 ; 0x28d2 <IIllllIllIlllIIlllII+0x3f0>
28c4: 8a a9 ldd r24, Y+50 ; 0x32
28c6: 82 95 swap r24
28c8: 80 7f andi r24, 0xF0 ; 240
28ca: 48 2d mov r20, r8
28cc: 48 1b sub r20, r24
28ce: 84 2f mov r24, r20
28d0: 07 c0 rjmp .+14 ; 0x28e0 <IIllllIllIlllIIlllII+0x3fe>
28d2: 8a a9 ldd r24, Y+50 ; 0x32
28d4: 88 0f add r24, r24
28d6: 88 0f add r24, r24
28d8: 88 0f add r24, r24
28da: 58 2d mov r21, r8
28dc: 58 1b sub r21, r24
28de: 85 2f mov r24, r21
28e0: 90 e0 ldi r25, 0x00 ; 0
28e2: 2e a5 ldd r18, Y+46 ; 0x2e
28e4: 3f a5 ldd r19, Y+47 ; 0x2f
28e6: 48 a9 ldd r20, Y+48 ; 0x30
28e8: 59 a9 ldd r21, Y+49 ; 0x31
28ea: 82 16 cp r8, r18
28ec: 93 06 cpc r9, r19
28ee: a4 06 cpc r10, r20
28f0: b5 06 cpc r11, r21
28f2: 08 f0 brcs .+2 ; 0x28f6 <IIllllIllIlllIIlllII+0x414>
28f4: 91 e0 ldi r25, 0x01 ; 1
28f6: 8a a8 ldd r8, Y+50 ; 0x32
28f8: 9b a8 ldd r9, Y+51 ; 0x33
28fa: ac a8 ldd r10, Y+52 ; 0x34
28fc: bd a8 ldd r11, Y+53 ; 0x35
28fe: 8a 30 cpi r24, 0x0A ; 10
2900: 10 f4 brcc .+4 ; 0x2906 <IIllllIllIlllIIlllII+0x424>
2902: 80 5d subi r24, 0xD0 ; 208
2904: 04 c0 rjmp .+8 ; 0x290e <IIllllIllIlllIIlllII+0x42c>
2906: 89 5a subi r24, 0xA9 ; 169
2908: 18 35 cpi r17, 0x58 ; 88
290a: 09 f4 brne .+2 ; 0x290e <IIllllIllIlllIIlllII+0x42c>
290c: 8f 7d andi r24, 0xDF ; 223
290e: d3 01 movw r26, r6
2910: 8e 93 st -X, r24
2912: 3d 01 movw r6, r26
2914: 99 23 and r25, r25
2916: 09 f0 breq .+2 ; 0x291a <IIllllIllIlllIIlllII+0x438>
2918: 99 cf rjmp .-206 ; 0x284c <IIllllIllIlllIIlllII+0x36a>
291a: 08 30 cpi r16, 0x08 ; 8
291c: 41 f4 brne .+16 ; 0x292e <IIllllIllIlllIIlllII+0x44c>
291e: f3 fe sbrs r15, 3
2920: 06 c0 rjmp .+12 ; 0x292e <IIllllIllIlllIIlllII+0x44c>
2922: 80 33 cpi r24, 0x30 ; 48
2924: 21 f0 breq .+8 ; 0x292e <IIllllIllIlllIIlllII+0x44c>
2926: 80 e3 ldi r24, 0x30 ; 48
2928: fd 01 movw r30, r26
292a: 82 93 st -Z, r24
292c: 3f 01 movw r6, r30
292e: ce 01 movw r24, r28
2930: 01 96 adiw r24, 0x01 ; 1
2932: 38 2e mov r3, r24
2934: 36 18 sub r3, r6
2936: f8 e2 ldi r31, 0x28 ; 40
2938: 3f 0e add r3, r31
293a: 0b c0 rjmp .+22 ; 0x2952 <IIllllIllIlllIIlllII+0x470>
293c: 11 23 and r17, r17
293e: 09 f4 brne .+2 ; 0x2942 <IIllllIllIlllIIlllII+0x460>
2940: 66 c0 rjmp .+204 ; 0x2a0e <IIllllIllIlllIIlllII+0x52c>
2942: 3e 01 movw r6, r28
2944: 08 94 sec
2946: 61 1c adc r6, r1
2948: 71 1c adc r7, r1
294a: 19 83 std Y+1, r17 ; 0x01
294c: 31 e0 ldi r19, 0x01 ; 1
294e: 33 2e mov r3, r19
2950: 19 a6 std Y+41, r1 ; 0x29
2952: 03 2d mov r16, r3
2954: 2d a4 ldd r2, Y+45 ; 0x2d
2956: 23 18 sub r2, r3
2958: 27 fc sbrc r2, 7
295a: 22 24 eor r2, r2
295c: 89 a5 ldd r24, Y+41 ; 0x29
295e: 88 23 and r24, r24
2960: 11 f0 breq .+4 ; 0x2966 <IIllllIllIlllIIlllII+0x484>
2962: 0f 5f subi r16, 0xFF ; 255
2964: 02 c0 rjmp .+4 ; 0x296a <IIllllIllIlllIIlllII+0x488>
2966: f6 fc sbrc r15, 6
2968: 0e 5f subi r16, 0xFE ; 254
296a: 02 0d add r16, r2
296c: ef 2c mov r14, r15
296e: ff 24 eor r15, r15
2970: c7 01 movw r24, r14
2972: 80 73 andi r24, 0x30 ; 48
2974: 90 70 andi r25, 0x00 ; 0
2976: 89 2b or r24, r25
2978: 41 f4 brne .+16 ; 0x298a <IIllllIllIlllIIlllII+0x4a8>
297a: 8c a5 ldd r24, Y+44 ; 0x2c
297c: 80 1b sub r24, r16
297e: 68 2f mov r22, r24
2980: 2c 96 adiw r28, 0x0c ; 12
2982: 8e ad ldd r24, Y+62 ; 0x3e
2984: 9f ad ldd r25, Y+63 ; 0x3f
2986: 2c 97 sbiw r28, 0x0c ; 12
2988: 8a dd rcall .-1260 ; 0x249e <fgmjgnrtuth587th9rTrw>
298a: 89 a5 ldd r24, Y+41 ; 0x29
298c: 88 23 and r24, r24
298e: 31 f0 breq .+12 ; 0x299c <IIllllIllIlllIIlllII+0x4ba>
2990: 41 e0 ldi r20, 0x01 ; 1
2992: 50 e0 ldi r21, 0x00 ; 0
2994: be 01 movw r22, r28
2996: 67 5d subi r22, 0xD7 ; 215
2998: 7f 4f sbci r23, 0xFF ; 255
299a: 0a c0 rjmp .+20 ; 0x29b0 <IIllllIllIlllIIlllII+0x4ce>
299c: e6 fe sbrs r14, 6
299e: 0d c0 rjmp .+26 ; 0x29ba <IIllllIllIlllIIlllII+0x4d8>
29a0: 80 e3 ldi r24, 0x30 ; 48
29a2: 8a a7 std Y+42, r24 ; 0x2a
29a4: 1b a7 std Y+43, r17 ; 0x2b
29a6: 42 e0 ldi r20, 0x02 ; 2
29a8: 50 e0 ldi r21, 0x00 ; 0
29aa: be 01 movw r22, r28
29ac: 66 5d subi r22, 0xD6 ; 214
29ae: 7f 4f sbci r23, 0xFF ; 255
29b0: 2c 96 adiw r28, 0x0c ; 12
29b2: 8e ad ldd r24, Y+62 ; 0x3e
29b4: 9f ad ldd r25, Y+63 ; 0x3f
29b6: 2c 97 sbiw r28, 0x0c ; 12
29b8: 43 dd rcall .-1402 ; 0x2440 <njkvnfuhgbuzrgezgf483>
29ba: c7 01 movw r24, r14
29bc: 80 73 andi r24, 0x30 ; 48
29be: 90 70 andi r25, 0x00 ; 0
29c0: 80 97 sbiw r24, 0x20 ; 32
29c2: 41 f4 brne .+16 ; 0x29d4 <IIllllIllIlllIIlllII+0x4f2>
29c4: 8c a5 ldd r24, Y+44 ; 0x2c
29c6: 80 1b sub r24, r16
29c8: 68 2f mov r22, r24
29ca: 2c 96 adiw r28, 0x0c ; 12
29cc: 8e ad ldd r24, Y+62 ; 0x3e
29ce: 9f ad ldd r25, Y+63 ; 0x3f
29d0: 2c 97 sbiw r28, 0x0c ; 12
29d2: 76 dd rcall .-1300 ; 0x24c0 <wqqeRT45jth8g758735h4>
29d4: 62 2d mov r22, r2
29d6: 2c 96 adiw r28, 0x0c ; 12
29d8: 8e ad ldd r24, Y+62 ; 0x3e
29da: 9f ad ldd r25, Y+63 ; 0x3f
29dc: 2c 97 sbiw r28, 0x0c ; 12
29de: 70 dd rcall .-1312 ; 0x24c0 <wqqeRT45jth8g758735h4>
29e0: 83 2d mov r24, r3
29e2: 99 27 eor r25, r25
29e4: 87 fd sbrc r24, 7
29e6: 90 95 com r25
29e8: ac 01 movw r20, r24
29ea: b3 01 movw r22, r6
29ec: 2c 96 adiw r28, 0x0c ; 12
29ee: 8e ad ldd r24, Y+62 ; 0x3e
29f0: 9f ad ldd r25, Y+63 ; 0x3f
29f2: 2c 97 sbiw r28, 0x0c ; 12
29f4: 25 dd rcall .-1462 ; 0x2440 <njkvnfuhgbuzrgezgf483>
29f6: e4 fe sbrs r14, 4
29f8: 8f cd rjmp .-1250 ; 0x2518 <IIllllIllIlllIIlllII+0x36>
29fa: 2c a5 ldd r18, Y+44 ; 0x2c
29fc: 20 1b sub r18, r16
29fe: 2c a7 std Y+44, r18 ; 0x2c
2a00: 62 2f mov r22, r18
2a02: 2c 96 adiw r28, 0x0c ; 12
2a04: 8e ad ldd r24, Y+62 ; 0x3e
2a06: 9f ad ldd r25, Y+63 ; 0x3f
2a08: 2c 97 sbiw r28, 0x0c ; 12
2a0a: 49 dd rcall .-1390 ; 0x249e <fgmjgnrtuth587th9rTrw>
2a0c: 85 cd rjmp .-1270 ; 0x2518 <IIllllIllIlllIIlllII+0x36>
2a0e: e2 e1 ldi r30, 0x12 ; 18
2a10: cb 5c subi r28, 0xCB ; 203
2a12: 0c 94 f4 b1 jmp 0x163e8 ; 0x163e8 <__epilogue_restores__>
00002a16 <LIBFC_HoTT_Putchar>:
2a16: 98 2f mov r25, r24
2a18: 80 91 b1 0c lds r24, 0x0CB1
2a1c: 88 3a cpi r24, 0xA8 ; 168
2a1e: 50 f4 brcc .+20 ; 0x2a34 <LIBFC_HoTT_Putchar+0x1e>
2a20: 80 91 b1 0c lds r24, 0x0CB1
2a24: e8 2f mov r30, r24
2a26: ff 27 eor r31, r31
2a28: e8 5f subi r30, 0xF8 ; 248
2a2a: f8 4f sbci r31, 0xF8 ; 248
2a2c: 93 83 std Z+3, r25 ; 0x03
2a2e: 8f 5f subi r24, 0xFF ; 255
2a30: 80 93 b1 0c sts 0x0CB1, r24
2a34: 08 95 ret
00002a36 <LIBFC_HoTT_Putchar_INV>:
2a36: 98 2f mov r25, r24
2a38: 80 91 b1 0c lds r24, 0x0CB1
2a3c: 88 3a cpi r24, 0xA8 ; 168
2a3e: 58 f4 brcc .+22 ; 0x2a56 <LIBFC_HoTT_Putchar_INV+0x20>
2a40: 80 91 b1 0c lds r24, 0x0CB1
2a44: e8 2f mov r30, r24
2a46: ff 27 eor r31, r31
2a48: e8 5f subi r30, 0xF8 ; 248
2a4a: f8 4f sbci r31, 0xF8 ; 248
2a4c: 90 68 ori r25, 0x80 ; 128
2a4e: 93 83 std Z+3, r25 ; 0x03
2a50: 8f 5f subi r24, 0xFF ; 255
2a52: 80 93 b1 0c sts 0x0CB1, r24
2a56: 08 95 ret
00002a58 <LIBFC_HoTT_Putchar_BLINK>:
2a58: 98 2f mov r25, r24
2a5a: 80 91 ed 02 lds r24, 0x02ED
2a5e: 88 23 and r24, r24
2a60: 11 f0 breq .+4 ; 0x2a66 <LIBFC_HoTT_Putchar_BLINK+0xe>
2a62: 89 2f mov r24, r25
2a64: e8 cf rjmp .-48 ; 0x2a36 <LIBFC_HoTT_Putchar_INV>
2a66: 89 2f mov r24, r25
2a68: d6 cf rjmp .-84 ; 0x2a16 <LIBFC_HoTT_Putchar>
00002a6a <LIBFC_HoTT_SetPos>:
2a6a: 88 3a cpi r24, 0xA8 ; 168
2a6c: 10 f4 brcc .+4 ; 0x2a72 <LIBFC_HoTT_SetPos+0x8>
2a6e: 80 93 b1 0c sts 0x0CB1, r24
2a72: 08 95 ret
00002a74 <LIBFC_HoTT_Clear>:
2a74: 80 e0 ldi r24, 0x00 ; 0
2a76: 90 e2 ldi r25, 0x20 ; 32
2a78: eb e0 ldi r30, 0x0B ; 11
2a7a: f7 e0 ldi r31, 0x07 ; 7
2a7c: 91 93 st Z+, r25
2a7e: 8f 5f subi r24, 0xFF ; 255
2a80: 88 3a cpi r24, 0xA8 ; 168
2a82: e0 f3 brcs .-8 ; 0x2a7c <LIBFC_HoTT_Clear+0x8>
2a84: 08 95 ret
00002a86 <HoTT_Init>:
2a86: 4f b7 in r20, 0x3f ; 63
2a88: 21 e8 ldi r18, 0x81 ; 129
2a8a: 30 e0 ldi r19, 0x00 ; 0
2a8c: f8 94 cli
2a8e: 80 91 c9 00 lds r24, 0x00C9
2a92: 8f 77 andi r24, 0x7F ; 127
2a94: 80 93 c9 00 sts 0x00C9, r24
2a98: 80 91 c9 00 lds r24, 0x00C9
2a9c: 8f 7b andi r24, 0xBF ; 191
2a9e: 80 93 c9 00 sts 0x00C9, r24
2aa2: 80 91 c9 00 lds r24, 0x00C9
2aa6: 8f 7d andi r24, 0xDF ; 223
2aa8: 80 93 c9 00 sts 0x00C9, r24
2aac: 83 2f mov r24, r19
2aae: 99 27 eor r25, r25
2ab0: 80 93 cd 00 sts 0x00CD, r24
2ab4: 20 93 cc 00 sts 0x00CC, r18
2ab8: 80 91 c8 00 lds r24, 0x00C8
2abc: 82 60 ori r24, 0x02 ; 2
2abe: 80 93 c8 00 sts 0x00C8, r24
2ac2: 88 e1 ldi r24, 0x18 ; 24
2ac4: 80 93 c9 00 sts 0x00C9, r24
2ac8: 80 91 ca 00 lds r24, 0x00CA
2acc: 8f 77 andi r24, 0x7F ; 127
2ace: 80 93 ca 00 sts 0x00CA, r24
2ad2: 80 91 ca 00 lds r24, 0x00CA
2ad6: 8f 7b andi r24, 0xBF ; 191
2ad8: 80 93 ca 00 sts 0x00CA, r24
2adc: 80 91 ca 00 lds r24, 0x00CA
2ae0: 8f 7d andi r24, 0xDF ; 223
2ae2: 80 93 ca 00 sts 0x00CA, r24
2ae6: 80 91 ca 00 lds r24, 0x00CA
2aea: 8f 7e andi r24, 0xEF ; 239
2aec: 80 93 ca 00 sts 0x00CA, r24
2af0: 80 91 ca 00 lds r24, 0x00CA
2af4: 87 7f andi r24, 0xF7 ; 247
2af6: 80 93 ca 00 sts 0x00CA, r24
2afa: 80 91 c9 00 lds r24, 0x00C9
2afe: 84 60 ori r24, 0x04 ; 4
2b00: 80 93 c9 00 sts 0x00C9, r24
2b04: 80 91 ca 00 lds r24, 0x00CA
2b08: 84 60 ori r24, 0x04 ; 4
2b0a: 80 93 ca 00 sts 0x00CA, r24
2b0e: 80 91 ca 00 lds r24, 0x00CA
2b12: 82 60 ori r24, 0x02 ; 2
2b14: 80 93 ca 00 sts 0x00CA, r24
2b18: 80 91 c9 00 lds r24, 0x00C9
2b1c: 81 60 ori r24, 0x01 ; 1
2b1e: 80 93 c9 00 sts 0x00C9, r24
2b22: 80 91 c8 00 lds r24, 0x00C8
2b26: 87 ff sbrs r24, 7
2b28: 03 c0 rjmp .+6 ; 0x2b30 <HoTT_Init+0xaa>
2b2a: 80 91 ce 00 lds r24, 0x00CE
2b2e: f9 cf rjmp .-14 ; 0x2b22 <HoTT_Init+0x9c>
2b30: 80 91 c9 00 lds r24, 0x00C9
2b34: 80 68 ori r24, 0x80 ; 128
2b36: 80 93 c9 00 sts 0x00C9, r24
2b3a: 4f bf out 0x3f, r20 ; 63
2b3c: 3c e7 ldi r19, 0x7C ; 124
2b3e: 30 93 7a 06 sts 0x067A, r19
2b42: 2d e7 ldi r18, 0x7D ; 125
2b44: 20 93 a5 06 sts 0x06A5, r18
2b48: 8e e8 ldi r24, 0x8E ; 142
2b4a: 80 93 7b 06 sts 0x067B, r24
2b4e: 10 92 97 06 sts 0x0697, r1
2b52: 10 92 96 06 sts 0x0696, r1
2b56: 10 92 80 06 sts 0x0680, r1
2b5a: 80 ee ldi r24, 0xE0 ; 224
2b5c: 80 93 7d 06 sts 0x067D, r24
2b60: 30 93 dc 06 sts 0x06DC, r19
2b64: 20 93 07 07 sts 0x0707, r18
2b68: 10 92 e8 06 sts 0x06E8, r1
2b6c: 10 92 e7 06 sts 0x06E7, r1
2b70: 10 92 ea 06 sts 0x06EA, r1
2b74: 10 92 e9 06 sts 0x06E9, r1
2b78: 10 92 ec 06 sts 0x06EC, r1
2b7c: 10 92 eb 06 sts 0x06EB, r1
2b80: 84 ef ldi r24, 0xF4 ; 244
2b82: 91 e0 ldi r25, 0x01 ; 1
2b84: 90 93 e6 06 sts 0x06E6, r25
2b88: 80 93 e5 06 sts 0x06E5, r24
2b8c: 90 93 e4 06 sts 0x06E4, r25
2b90: 80 93 e3 06 sts 0x06E3, r24
2b94: 90 93 e2 06 sts 0x06E2, r25
2b98: 80 93 e1 06 sts 0x06E1, r24
2b9c: 10 92 de 06 sts 0x06DE, r1
2ba0: 89 e8 ldi r24, 0x89 ; 137
2ba2: 80 93 dd 06 sts 0x06DD, r24
2ba6: 10 92 05 07 sts 0x0705, r1
2baa: 10 92 06 07 sts 0x0706, r1
2bae: 80 e9 ldi r24, 0x90 ; 144
2bb0: 80 93 df 06 sts 0x06DF, r24
2bb4: 30 93 b4 07 sts 0x07B4, r19
2bb8: 20 93 df 07 sts 0x07DF, r18
2bbc: 10 92 b6 07 sts 0x07B6, r1
2bc0: 8a e8 ldi r24, 0x8A ; 138
2bc2: 80 93 b5 07 sts 0x07B5, r24
2bc6: 10 92 bc 07 sts 0x07BC, r1
2bca: 10 92 bb 07 sts 0x07BB, r1
2bce: 10 92 ba 07 sts 0x07BA, r1
2bd2: 10 92 be 07 sts 0x07BE, r1
2bd6: 10 92 bf 07 sts 0x07BF, r1
2bda: 10 92 c0 07 sts 0x07C0, r1
2bde: 10 92 c1 07 sts 0x07C1, r1
2be2: 10 92 c3 07 sts 0x07C3, r1
2be6: 10 92 c4 07 sts 0x07C4, r1
2bea: 10 92 c5 07 sts 0x07C5, r1
2bee: 10 92 c6 07 sts 0x07C6, r1
2bf2: 10 92 ca 07 sts 0x07CA, r1
2bf6: 10 92 c9 07 sts 0x07C9, r1
2bfa: 10 92 c8 07 sts 0x07C8, r1
2bfe: 10 92 c7 07 sts 0x07C7, r1
2c02: 80 ea ldi r24, 0xA0 ; 160
2c04: 80 93 b7 07 sts 0x07B7, r24
2c08: 30 93 a6 06 sts 0x06A6, r19
2c0c: 20 93 d1 06 sts 0x06D1, r18
2c10: 10 92 a8 06 sts 0x06A8, r1
2c14: 8d e8 ldi r24, 0x8D ; 141
2c16: 80 93 a7 06 sts 0x06A7, r24
2c1a: 10 92 d0 06 sts 0x06D0, r1
2c1e: 80 ed ldi r24, 0xD0 ; 208
2c20: 80 93 a9 06 sts 0x06A9, r24
2c24: 8b e7 ldi r24, 0x7B ; 123
2c26: 80 93 08 07 sts 0x0708, r24
2c2a: 80 e8 ldi r24, 0x80 ; 128
2c2c: 80 93 09 07 sts 0x0709, r24
2c30: 10 92 0a 07 sts 0x070A, r1
2c34: 80 91 80 06 lds r24, 0x0680
2c38: 90 e2 ldi r25, 0x20 ; 32
2c3a: eb e0 ldi r30, 0x0B ; 11
2c3c: f7 e0 ldi r31, 0x07 ; 7
2c3e: 91 93 st Z+, r25
2c40: 8f 5f subi r24, 0xFF ; 255
2c42: 88 3a cpi r24, 0xA8 ; 168
2c44: e0 f3 brcs .-8 ; 0x2c3e <HoTT_Init+0x1b8>
2c46: 8d e7 ldi r24, 0x7D ; 125
2c48: 80 93 b3 07 sts 0x07B3, r24
2c4c: 08 95 ret
00002c4e <HoTT_Parser>:
2c4e: cf 93 push r28
2c50: c8 2f mov r28, r24
2c52: 80 91 00 03 lds r24, 0x0300
2c56: 80 38 cpi r24, 0x80 ; 128
2c58: 79 f4 brne .+30 ; 0x2c78 <HoTT_Parser+0x2a>
2c5a: 8c 2f mov r24, r28
2c5c: 0e 94 f5 61 call 0xc3ea ; 0xc3ea <HoTT_Telemety>
2c60: 80 93 ef 02 sts 0x02EF, r24
2c64: 80 91 ef 02 lds r24, 0x02EF
2c68: 88 23 and r24, r24
2c6a: 31 f1 breq .+76 ; 0x2cb8 <HoTT_Parser+0x6a>
2c6c: c0 93 b0 0c sts 0x0CB0, r28
2c70: 80 91 ef 02 lds r24, 0x02EF
2c74: 8f 5f subi r24, 0xFF ; 255
2c76: 16 c0 rjmp .+44 ; 0x2ca4 <HoTT_Parser+0x56>
2c78: 8f 37 cpi r24, 0x7F ; 127
2c7a: f1 f4 brne .+60 ; 0x2cb8 <HoTT_Parser+0x6a>
2c7c: 80 91 a9 0c lds r24, 0x0CA9
2c80: 88 23 and r24, r24
2c82: 29 f4 brne .+10 ; 0x2c8e <HoTT_Parser+0x40>
2c84: 8c 2f mov r24, r28
2c86: 80 95 com r24
2c88: 8f 70 andi r24, 0x0F ; 15
2c8a: 80 93 a9 0c sts 0x0CA9, r24
2c8e: 0e 94 cc 60 call 0xc198 ; 0xc198 <HoTT_Waring>
2c92: 80 93 0a 07 sts 0x070A, r24
2c96: 88 e0 ldi r24, 0x08 ; 8
2c98: 97 e0 ldi r25, 0x07 ; 7
2c9a: 90 93 f1 02 sts 0x02F1, r25
2c9e: 80 93 f0 02 sts 0x02F0, r24
2ca2: 8d ea ldi r24, 0xAD ; 173
2ca4: 80 93 ef 02 sts 0x02EF, r24
2ca8: 80 91 c9 00 lds r24, 0x00C9
2cac: 8f 7e andi r24, 0xEF ; 239
2cae: 80 93 c9 00 sts 0x00C9, r24
2cb2: 82 e0 ldi r24, 0x02 ; 2
2cb4: 80 93 ee 02 sts 0x02EE, r24
2cb8: c0 93 00 03 sts 0x0300, r28
2cbc: cf 91 pop r28
2cbe: 08 95 ret
00002cc0 <HoTT_Polling>:
2cc0: 30 91 ee 02 lds r19, 0x02EE
2cc4: 33 23 and r19, r19
2cc6: 31 f0 breq .+12 ; 0x2cd4 <HoTT_Polling+0x14>
2cc8: 80 91 ee 02 lds r24, 0x02EE
2ccc: 81 50 subi r24, 0x01 ; 1
2cce: 80 93 ee 02 sts 0x02EE, r24
2cd2: 08 95 ret
2cd4: 80 91 ef 02 lds r24, 0x02EF
2cd8: 88 23 and r24, r24
2cda: 61 f1 breq .+88 ; 0x2d34 <HoTT_Polling+0x74>
2cdc: 40 91 ef 02 lds r20, 0x02EF
2ce0: 90 91 01 03 lds r25, 0x0301
2ce4: 41 30 cpi r20, 0x01 ; 1
2ce6: 69 f4 brne .+26 ; 0x2d02 <HoTT_Polling+0x42>
2ce8: 29 2f mov r18, r25
2cea: 30 93 01 03 sts 0x0301, r19
2cee: 80 91 ed 02 lds r24, 0x02ED
2cf2: 88 23 and r24, r24
2cf4: 19 f0 breq .+6 ; 0x2cfc <HoTT_Polling+0x3c>
2cf6: 30 93 ed 02 sts 0x02ED, r19
2cfa: 10 c0 rjmp .+32 ; 0x2d1c <HoTT_Polling+0x5c>
2cfc: 40 93 ed 02 sts 0x02ED, r20
2d00: 0d c0 rjmp .+26 ; 0x2d1c <HoTT_Polling+0x5c>
2d02: e0 91 f0 02 lds r30, 0x02F0
2d06: f0 91 f1 02 lds r31, 0x02F1
2d0a: 81 91 ld r24, Z+
2d0c: f0 93 f1 02 sts 0x02F1, r31
2d10: e0 93 f0 02 sts 0x02F0, r30
2d14: 28 2f mov r18, r24
2d16: 98 0f add r25, r24
2d18: 90 93 01 03 sts 0x0301, r25
2d1c: 80 91 c8 00 lds r24, 0x00C8
2d20: 85 ff sbrs r24, 5
2d22: fc cf rjmp .-8 ; 0x2d1c <HoTT_Polling+0x5c>
2d24: 20 93 ce 00 sts 0x00CE, r18
2d28: 80 91 ef 02 lds r24, 0x02EF
2d2c: 81 50 subi r24, 0x01 ; 1
2d2e: 80 93 ef 02 sts 0x02EF, r24
2d32: 08 95 ret
2d34: 80 91 c9 00 lds r24, 0x00C9
2d38: 80 61 ori r24, 0x10 ; 16
2d3a: 80 93 c9 00 sts 0x00C9, r24
2d3e: 08 95 ret
00002d40 <ACC_AltitudeFusion>:
2d40: 6f 92 push r6
2d42: 7f 92 push r7
2d44: 8f 92 push r8
2d46: 9f 92 push r9
2d48: af 92 push r10
2d4a: bf 92 push r11
2d4c: cf 92 push r12
2d4e: df 92 push r13
2d50: ef 92 push r14
2d52: ff 92 push r15
2d54: 0f 93 push r16
2d56: 1f 93 push r17
2d58: 88 23 and r24, r24
2d5a: 61 f1 breq .+88 ; 0x2db4 <ACC_AltitudeFusion+0x74>
2d5c: 82 30 cpi r24, 0x02 ; 2
2d5e: 41 f4 brne .+16 ; 0x2d70 <ACC_AltitudeFusion+0x30>
2d60: 10 92 0a 03 sts 0x030A, r1
2d64: 10 92 0b 03 sts 0x030B, r1
2d68: 10 92 0c 03 sts 0x030C, r1
2d6c: 10 92 0d 03 sts 0x030D, r1
2d70: 20 91 fe 03 lds r18, 0x03FE
2d74: 30 91 ff 03 lds r19, 0x03FF
2d78: 40 91 00 04 lds r20, 0x0400
2d7c: 50 91 01 04 lds r21, 0x0401
2d80: da 01 movw r26, r20
2d82: c9 01 movw r24, r18
2d84: 19 e0 ldi r17, 0x09 ; 9
2d86: 88 0f add r24, r24
2d88: 99 1f adc r25, r25
2d8a: aa 1f adc r26, r26
2d8c: bb 1f adc r27, r27
2d8e: 1a 95 dec r17
2d90: d1 f7 brne .-12 ; 0x2d86 <ACC_AltitudeFusion+0x46>
2d92: 80 93 57 03 sts 0x0357, r24
2d96: 90 93 58 03 sts 0x0358, r25
2d9a: a0 93 59 03 sts 0x0359, r26
2d9e: b0 93 5a 03 sts 0x035A, r27
2da2: 20 93 02 03 sts 0x0302, r18
2da6: 30 93 03 03 sts 0x0303, r19
2daa: 40 93 04 03 sts 0x0304, r20
2dae: 50 93 05 03 sts 0x0305, r21
2db2: 26 c1 rjmp .+588 ; 0x3000 <ACC_AltitudeFusion+0x2c0>
2db4: a0 90 fe 03 lds r10, 0x03FE
2db8: b0 90 ff 03 lds r11, 0x03FF
2dbc: c0 90 00 04 lds r12, 0x0400
2dc0: d0 90 01 04 lds r13, 0x0401
2dc4: 80 91 02 03 lds r24, 0x0302
2dc8: 90 91 03 03 lds r25, 0x0303
2dcc: a0 91 04 03 lds r26, 0x0304
2dd0: b0 91 05 03 lds r27, 0x0305
2dd4: 35 01 movw r6, r10
2dd6: 46 01 movw r8, r12
2dd8: 68 1a sub r6, r24
2dda: 79 0a sbc r7, r25
2ddc: 8a 0a sbc r8, r26
2dde: 9b 0a sbc r9, r27
2de0: 60 92 06 03 sts 0x0306, r6
2de4: 70 92 07 03 sts 0x0307, r7
2de8: 80 92 08 03 sts 0x0308, r8
2dec: 90 92 09 03 sts 0x0309, r9
2df0: 80 91 5b 03 lds r24, 0x035B
2df4: 90 91 5c 03 lds r25, 0x035C
2df8: 84 55 subi r24, 0x54 ; 84
2dfa: 9f 4f sbci r25, 0xFF ; 255
2dfc: 7c 01 movw r14, r24
2dfe: 00 27 eor r16, r16
2e00: f7 fc sbrc r15, 7
2e02: 00 95 com r16
2e04: 10 2f mov r17, r16
2e06: 80 91 2d 06 lds r24, 0x062D
2e0a: 90 91 2e 06 lds r25, 0x062E
2e0e: 9c 01 movw r18, r24
2e10: 44 27 eor r20, r20
2e12: 37 fd sbrc r19, 7
2e14: 40 95 com r20
2e16: 54 2f mov r21, r20
2e18: c8 01 movw r24, r16
2e1a: b7 01 movw r22, r14
2e1c: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
2e20: 97 ff sbrs r25, 7
2e22: 04 c0 rjmp .+8 ; 0x2e2c <ACC_AltitudeFusion+0xec>
2e24: 61 50 subi r22, 0x01 ; 1
2e26: 70 4e sbci r23, 0xE0 ; 224
2e28: 8f 4f sbci r24, 0xFF ; 255
2e2a: 9f 4f sbci r25, 0xFF ; 255
2e2c: ab 01 movw r20, r22
2e2e: bc 01 movw r22, r24
2e30: fd e0 ldi r31, 0x0D ; 13
2e32: 75 95 asr r23
2e34: 67 95 ror r22
2e36: 57 95 ror r21
2e38: 47 95 ror r20
2e3a: fa 95 dec r31
2e3c: d1 f7 brne .-12 ; 0x2e32 <ACC_AltitudeFusion+0xf2>
2e3e: 4c 5a subi r20, 0xAC ; 172
2e40: 50 40 sbci r21, 0x00 ; 0
2e42: 60 40 sbci r22, 0x00 ; 0
2e44: 70 40 sbci r23, 0x00 ; 0
2e46: 40 93 0e 03 sts 0x030E, r20
2e4a: 50 93 0f 03 sts 0x030F, r21
2e4e: 60 93 10 03 sts 0x0310, r22
2e52: 70 93 11 03 sts 0x0311, r23
2e56: 20 91 ec 08 lds r18, 0x08EC
2e5a: 30 91 ed 08 lds r19, 0x08ED
2e5e: 37 ff sbrs r19, 7
2e60: 02 c0 rjmp .+4 ; 0x2e66 <ACC_AltitudeFusion+0x126>
2e62: 21 5f subi r18, 0xF1 ; 241
2e64: 3f 4f sbci r19, 0xFF ; 255
2e66: e4 e0 ldi r30, 0x04 ; 4
2e68: 35 95 asr r19
2e6a: 27 95 ror r18
2e6c: ea 95 dec r30
2e6e: e1 f7 brne .-8 ; 0x2e68 <ACC_AltitudeFusion+0x128>
2e70: 80 91 5f 03 lds r24, 0x035F
2e74: 90 91 60 03 lds r25, 0x0360
2e78: 82 9f mul r24, r18
2e7a: d0 01 movw r26, r0
2e7c: 83 9f mul r24, r19
2e7e: b0 0d add r27, r0
2e80: 92 9f mul r25, r18
2e82: b0 0d add r27, r0
2e84: 11 24 eor r1, r1
2e86: cd 01 movw r24, r26
2e88: b7 ff sbrs r27, 7
2e8a: 02 c0 rjmp .+4 ; 0x2e90 <ACC_AltitudeFusion+0x150>
2e8c: 81 50 subi r24, 0x01 ; 1
2e8e: 9f 4f sbci r25, 0xFF ; 255
2e90: e9 2f mov r30, r25
2e92: ff 27 eor r31, r31
2e94: e7 fd sbrc r30, 7
2e96: fa 95 dec r31
2e98: 20 91 ea 08 lds r18, 0x08EA
2e9c: 30 91 eb 08 lds r19, 0x08EB
2ea0: 37 ff sbrs r19, 7
2ea2: 02 c0 rjmp .+4 ; 0x2ea8 <ACC_AltitudeFusion+0x168>
2ea4: 21 5f subi r18, 0xF1 ; 241
2ea6: 3f 4f sbci r19, 0xFF ; 255
2ea8: 84 e0 ldi r24, 0x04 ; 4
2eaa: 35 95 asr r19
2eac: 27 95 ror r18
2eae: 8a 95 dec r24
2eb0: e1 f7 brne .-8 ; 0x2eaa <ACC_AltitudeFusion+0x16a>
2eb2: 80 91 5d 03 lds r24, 0x035D
2eb6: 90 91 5e 03 lds r25, 0x035E
2eba: 82 9f mul r24, r18
2ebc: d0 01 movw r26, r0
2ebe: 83 9f mul r24, r19
2ec0: b0 0d add r27, r0
2ec2: 92 9f mul r25, r18
2ec4: b0 0d add r27, r0
2ec6: 11 24 eor r1, r1
2ec8: cd 01 movw r24, r26
2eca: b7 ff sbrs r27, 7
2ecc: 02 c0 rjmp .+4 ; 0x2ed2 <ACC_AltitudeFusion+0x192>
2ece: 81 50 subi r24, 0x01 ; 1
2ed0: 9f 4f sbci r25, 0xFF ; 255
2ed2: 89 2f mov r24, r25
2ed4: 99 0f add r25, r25
2ed6: 99 0b sbc r25, r25
2ed8: e8 0f add r30, r24
2eda: f9 1f adc r31, r25
2edc: cf 01 movw r24, r30
2ede: aa 27 eor r26, r26
2ee0: 97 fd sbrc r25, 7
2ee2: a0 95 com r26
2ee4: ba 2f mov r27, r26
2ee6: 84 0f add r24, r20
2ee8: 95 1f adc r25, r21
2eea: a6 1f adc r26, r22
2eec: b7 1f adc r27, r23
2eee: 80 93 0e 03 sts 0x030E, r24
2ef2: 90 93 0f 03 sts 0x030F, r25
2ef6: a0 93 10 03 sts 0x0310, r26
2efa: b0 93 11 03 sts 0x0311, r27
2efe: bc 01 movw r22, r24
2f00: cd 01 movw r24, r26
2f02: 2d e0 ldi r18, 0x0D ; 13
2f04: 30 e0 ldi r19, 0x00 ; 0
2f06: 40 e0 ldi r20, 0x00 ; 0
2f08: 50 e0 ldi r21, 0x00 ; 0
2f0a: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
2f0e: 7b 01 movw r14, r22
2f10: 8c 01 movw r16, r24
2f12: c4 01 movw r24, r8
2f14: b3 01 movw r22, r6
2f16: 24 ef ldi r18, 0xF4 ; 244
2f18: 31 e0 ldi r19, 0x01 ; 1
2f1a: 40 e0 ldi r20, 0x00 ; 0
2f1c: 50 e0 ldi r21, 0x00 ; 0
2f1e: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
2f22: dc 01 movw r26, r24
2f24: cb 01 movw r24, r22
2f26: e8 0e add r14, r24
2f28: f9 1e adc r15, r25
2f2a: 0a 1f adc r16, r26
2f2c: 1b 1f adc r17, r27
2f2e: 80 91 0a 03 lds r24, 0x030A
2f32: 90 91 0b 03 lds r25, 0x030B
2f36: a0 91 0c 03 lds r26, 0x030C
2f3a: b0 91 0d 03 lds r27, 0x030D
2f3e: 20 91 12 03 lds r18, 0x0312
2f42: 30 91 13 03 lds r19, 0x0313
2f46: 40 91 14 03 lds r20, 0x0314
2f4a: 50 91 15 03 lds r21, 0x0315
2f4e: 82 1b sub r24, r18
2f50: 93 0b sbc r25, r19
2f52: a4 0b sbc r26, r20
2f54: b5 0b sbc r27, r21
2f56: e8 0e add r14, r24
2f58: f9 1e adc r15, r25
2f5a: 0a 1f adc r16, r26
2f5c: 1b 1f adc r17, r27
2f5e: e0 92 0a 03 sts 0x030A, r14
2f62: f0 92 0b 03 sts 0x030B, r15
2f66: 00 93 0c 03 sts 0x030C, r16
2f6a: 10 93 0d 03 sts 0x030D, r17
2f6e: d8 01 movw r26, r16
2f70: c7 01 movw r24, r14
2f72: 80 50 subi r24, 0x00 ; 0
2f74: 9e 4f sbci r25, 0xFE ; 254
2f76: af 4f sbci r26, 0xFF ; 255
2f78: bf 4f sbci r27, 0xFF ; 255
2f7a: b7 ff sbrs r27, 7
2f7c: 06 c0 rjmp .+12 ; 0x2f8a <ACC_AltitudeFusion+0x24a>
2f7e: d8 01 movw r26, r16
2f80: c7 01 movw r24, r14
2f82: 81 50 subi r24, 0x01 ; 1
2f84: 9a 4f sbci r25, 0xFA ; 250
2f86: af 4f sbci r26, 0xFF ; 255
2f88: bf 4f sbci r27, 0xFF ; 255
2f8a: 1a e0 ldi r17, 0x0A ; 10
2f8c: b5 95 asr r27
2f8e: a7 95 ror r26
2f90: 97 95 ror r25
2f92: 87 95 ror r24
2f94: 1a 95 dec r17
2f96: d1 f7 brne .-12 ; 0x2f8c <ACC_AltitudeFusion+0x24c>
2f98: 80 93 12 03 sts 0x0312, r24
2f9c: 90 93 13 03 sts 0x0313, r25
2fa0: a0 93 14 03 sts 0x0314, r26
2fa4: b0 93 15 03 sts 0x0315, r27
2fa8: a0 92 02 03 sts 0x0302, r10
2fac: b0 92 03 03 sts 0x0303, r11
2fb0: c0 92 04 03 sts 0x0304, r12
2fb4: d0 92 05 03 sts 0x0305, r13
2fb8: 20 91 57 03 lds r18, 0x0357
2fbc: 30 91 58 03 lds r19, 0x0358
2fc0: 40 91 59 03 lds r20, 0x0359
2fc4: 50 91 5a 03 lds r21, 0x035A
2fc8: e0 90 4a 03 lds r14, 0x034A
2fcc: f0 90 4b 03 lds r15, 0x034B
2fd0: 00 91 4c 03 lds r16, 0x034C
2fd4: 10 91 4d 03 lds r17, 0x034D
2fd8: 2e 19 sub r18, r14
2fda: 3f 09 sbc r19, r15
2fdc: 40 0b sbc r20, r16
2fde: 51 0b sbc r21, r17
2fe0: 28 0f add r18, r24
2fe2: 39 1f adc r19, r25
2fe4: 4a 1f adc r20, r26
2fe6: 5b 1f adc r21, r27
2fe8: 2a 0d add r18, r10
2fea: 3b 1d adc r19, r11
2fec: 4c 1d adc r20, r12
2fee: 5d 1d adc r21, r13
2ff0: 20 93 57 03 sts 0x0357, r18
2ff4: 30 93 58 03 sts 0x0358, r19
2ff8: 40 93 59 03 sts 0x0359, r20
2ffc: 50 93 5a 03 sts 0x035A, r21
3000: 80 91 12 03 lds r24, 0x0312
3004: 90 91 13 03 lds r25, 0x0313
3008: 90 93 55 03 sts 0x0355, r25
300c: 80 93 54 03 sts 0x0354, r24
3010: 80 91 57 03 lds r24, 0x0357
3014: 90 91 58 03 lds r25, 0x0358
3018: a0 91 59 03 lds r26, 0x0359
301c: b0 91 5a 03 lds r27, 0x035A
3020: bc 01 movw r22, r24
3022: cd 01 movw r24, r26
3024: 1f 91 pop r17
3026: 0f 91 pop r16
3028: ff 90 pop r15
302a: ef 90 pop r14
302c: df 90 pop r13
302e: cf 90 pop r12
3030: bf 90 pop r11
3032: af 90 pop r10
3034: 9f 90 pop r9
3036: 8f 90 pop r8
3038: 7f 90 pop r7
303a: 6f 90 pop r6
303c: 08 95 ret
0000303e <LIBFC_GetCPUType>:
303e: 2f b7 in r18, 0x3f ; 63
3040: 40 e0 ldi r20, 0x00 ; 0
3042: f8 94 cli
3044: e0 e0 ldi r30, 0x00 ; 0
3046: f0 e0 ldi r31, 0x00 ; 0
3048: 81 e2 ldi r24, 0x21 ; 33
304a: 80 93 57 00 sts 0x0057, r24
304e: 94 91 lpm r25, Z
3050: e2 e0 ldi r30, 0x02 ; 2
3052: f0 e0 ldi r31, 0x00 ; 0
3054: 80 93 57 00 sts 0x0057, r24
3058: 34 91 lpm r19, Z
305a: e4 e0 ldi r30, 0x04 ; 4
305c: f0 e0 ldi r31, 0x00 ; 0
305e: 80 93 57 00 sts 0x0057, r24
3062: 84 91 lpm r24, Z
3064: 2f bf out 0x3f, r18 ; 63
3066: 9e 31 cpi r25, 0x1E ; 30
3068: 99 f4 brne .+38 ; 0x3090 <LIBFC_GetCPUType+0x52>
306a: 36 39 cpi r19, 0x96 ; 150
306c: 41 f4 brne .+16 ; 0x307e <LIBFC_GetCPUType+0x40>
306e: 89 30 cpi r24, 0x09 ; 9
3070: 11 f4 brne .+4 ; 0x3076 <LIBFC_GetCPUType+0x38>
3072: 41 e0 ldi r20, 0x01 ; 1
3074: 0d c0 rjmp .+26 ; 0x3090 <LIBFC_GetCPUType+0x52>
3076: 8a 30 cpi r24, 0x0A ; 10
3078: 59 f4 brne .+22 ; 0x3090 <LIBFC_GetCPUType+0x52>
307a: 42 e0 ldi r20, 0x02 ; 2
307c: 09 c0 rjmp .+18 ; 0x3090 <LIBFC_GetCPUType+0x52>
307e: 37 39 cpi r19, 0x97 ; 151
3080: 39 f4 brne .+14 ; 0x3090 <LIBFC_GetCPUType+0x52>
3082: 86 30 cpi r24, 0x06 ; 6
3084: 11 f4 brne .+4 ; 0x308a <LIBFC_GetCPUType+0x4c>
3086: 43 e0 ldi r20, 0x03 ; 3
3088: 03 c0 rjmp .+6 ; 0x3090 <LIBFC_GetCPUType+0x52>
308a: 85 30 cpi r24, 0x05 ; 5
308c: 09 f4 brne .+2 ; 0x3090 <LIBFC_GetCPUType+0x52>
308e: 44 e0 ldi r20, 0x04 ; 4
3090: 84 2f mov r24, r20
3092: 99 27 eor r25, r25
3094: 08 95 ret
00003096 <awokdjwqdjcjuhcuweih>:
3096: 9f b7 in r25, 0x3f ; 63
3098: f8 94 cli
309a: 80 91 c9 00 lds r24, 0x00C9
309e: 87 7f andi r24, 0xF7 ; 247
30a0: 80 93 c9 00 sts 0x00C9, r24
30a4: 80 91 c9 00 lds r24, 0x00C9
30a8: 8f 7e andi r24, 0xEF ; 239
30aa: 80 93 c9 00 sts 0x00C9, r24
30ae: 80 91 c9 00 lds r24, 0x00C9
30b2: 8f 77 andi r24, 0x7F ; 127
30b4: 80 93 c9 00 sts 0x00C9, r24
30b8: 80 91 c9 00 lds r24, 0x00C9
30bc: 8f 7b andi r24, 0xBF ; 191
30be: 80 93 c9 00 sts 0x00C9, r24
30c2: 80 91 c9 00 lds r24, 0x00C9
30c6: 8f 7d andi r24, 0xDF ; 223
30c8: 80 93 c9 00 sts 0x00C9, r24
30cc: 9f bf out 0x3f, r25 ; 63
30ce: 08 95 ret
000030d0 <LIBFC_ReceiverInit>:
30d0: 1f 93 push r17
30d2: cf 93 push r28
30d4: df 93 push r29
30d6: 18 2f mov r17, r24
30d8: 80 91 ec 02 lds r24, 0x02EC
30dc: 88 23 and r24, r24
30de: 09 f4 brne .+2 ; 0x30e2 <LIBFC_ReceiverInit+0x12>
30e0: a4 c0 rjmp .+328 ; 0x322a <LIBFC_ReceiverInit+0x15a>
30e2: 80 91 05 01 lds r24, 0x0105
30e6: 18 17 cp r17, r24
30e8: 09 f4 brne .+2 ; 0x30ec <LIBFC_ReceiverInit+0x1c>
30ea: 9f c0 rjmp .+318 ; 0x322a <LIBFC_ReceiverInit+0x15a>
30ec: 80 91 eb 02 lds r24, 0x02EB
30f0: 88 23 and r24, r24
30f2: 19 f4 brne .+6 ; 0x30fa <LIBFC_ReceiverInit+0x2a>
30f4: a4 df rcall .-184 ; 0x303e <LIBFC_GetCPUType>
30f6: 80 93 eb 02 sts 0x02EB, r24
30fa: 82 ed ldi r24, 0xD2 ; 210
30fc: 91 e0 ldi r25, 0x01 ; 1
30fe: 90 93 92 02 sts 0x0292, r25
3102: 80 93 91 02 sts 0x0291, r24
3106: 8e e0 ldi r24, 0x0E ; 14
3108: 99 e1 ldi r25, 0x19 ; 25
310a: 9f 93 push r25
310c: 8f 93 push r24
310e: c7 eb ldi r28, 0xB7 ; 183
3110: dc ea ldi r29, 0xAC ; 172
3112: df 93 push r29
3114: cf 93 push r28
3116: e0 91 78 06 lds r30, 0x0678
311a: f0 91 79 06 lds r31, 0x0679
311e: 09 95 icall
3120: 0f 90 pop r0
3122: 0f 90 pop r0
3124: 0f 90 pop r0
3126: 0f 90 pop r0
3128: 81 2f mov r24, r17
312a: 99 27 eor r25, r25
312c: aa 27 eor r26, r26
312e: bb 27 eor r27, r27
3130: fc 01 movw r30, r24
3132: 09 97 sbiw r24, 0x09 ; 9
3134: 78 f5 brcc .+94 ; 0x3194 <LIBFC_ReceiverInit+0xc4>
3136: ee 5e subi r30, 0xEE ; 238
3138: fe 4f sbci r31, 0xFE ; 254
313a: 20 91 78 06 lds r18, 0x0678
313e: 30 91 79 06 lds r19, 0x0679
3142: 0c 94 a7 b1 jmp 0x1634e ; 0x1634e <__tablejump2__>
3146: 8a e0 ldi r24, 0x0A ; 10
3148: 99 e1 ldi r25, 0x19 ; 25
314a: 02 c0 rjmp .+4 ; 0x3150 <LIBFC_ReceiverInit+0x80>
314c: 81 e0 ldi r24, 0x01 ; 1
314e: 99 e1 ldi r25, 0x19 ; 25
3150: 9f 93 push r25
3152: 8f 93 push r24
3154: df 93 push r29
3156: cf 93 push r28
3158: f9 01 movw r30, r18
315a: 09 95 icall
315c: 27 c0 rjmp .+78 ; 0x31ac <LIBFC_ReceiverInit+0xdc>
315e: 8c ef ldi r24, 0xFC ; 252
3160: 98 e1 ldi r25, 0x18 ; 24
3162: f6 cf rjmp .-20 ; 0x3150 <LIBFC_ReceiverInit+0x80>
3164: 84 ef ldi r24, 0xF4 ; 244
3166: 98 e1 ldi r25, 0x18 ; 24
3168: f3 cf rjmp .-26 ; 0x3150 <LIBFC_ReceiverInit+0x80>
316a: 8c ee ldi r24, 0xEC ; 236
316c: 98 e1 ldi r25, 0x18 ; 24
316e: 9f 93 push r25
3170: 8f 93 push r24
3172: df 93 push r29
3174: cf 93 push r28
3176: f9 01 movw r30, r18
3178: 09 95 icall
317a: 88 ed ldi r24, 0xD8 ; 216
317c: 91 e0 ldi r25, 0x01 ; 1
317e: 90 93 92 02 sts 0x0292, r25
3182: 80 93 91 02 sts 0x0291, r24
3186: 12 c0 rjmp .+36 ; 0x31ac <LIBFC_ReceiverInit+0xdc>
3188: 87 ee ldi r24, 0xE7 ; 231
318a: 98 e1 ldi r25, 0x18 ; 24
318c: e1 cf rjmp .-62 ; 0x3150 <LIBFC_ReceiverInit+0x80>
318e: 8b e1 ldi r24, 0x1B ; 27
3190: 99 e1 ldi r25, 0x19 ; 25
3192: de cf rjmp .-68 ; 0x3150 <LIBFC_ReceiverInit+0x80>
3194: 81 e2 ldi r24, 0x21 ; 33
3196: 99 e1 ldi r25, 0x19 ; 25
3198: 9f 93 push r25
319a: 8f 93 push r24
319c: df 93 push r29
319e: cf 93 push r28
31a0: e0 91 78 06 lds r30, 0x0678
31a4: f0 91 79 06 lds r31, 0x0679
31a8: 09 95 icall
31aa: 10 e0 ldi r17, 0x00 ; 0
31ac: 0f 90 pop r0
31ae: 0f 90 pop r0
31b0: 0f 90 pop r0
31b2: 0f 90 pop r0
31b4: 80 91 eb 02 lds r24, 0x02EB
31b8: 84 30 cpi r24, 0x04 ; 4
31ba: 11 f0 breq .+4 ; 0x31c0 <LIBFC_ReceiverInit+0xf0>
31bc: 82 30 cpi r24, 0x02 ; 2
31be: 01 f5 brne .+64 ; 0x3200 <LIBFC_ReceiverInit+0x130>
31c0: 6a df rcall .-300 ; 0x3096 <awokdjwqdjcjuhcuweih>
31c2: 81 2f mov r24, r17
31c4: 81 50 subi r24, 0x01 ; 1
31c6: 83 30 cpi r24, 0x03 ; 3
31c8: 18 f4 brcc .+6 ; 0x31d0 <LIBFC_ReceiverInit+0x100>
31ca: 0e 94 1c 94 call 0x12838 ; 0x12838 <SpektrumUartInit>
31ce: 2b c0 rjmp .+86 ; 0x3226 <LIBFC_ReceiverInit+0x156>
31d0: 14 30 cpi r17, 0x04 ; 4
31d2: 19 f4 brne .+6 ; 0x31da <LIBFC_ReceiverInit+0x10a>
31d4: 0e 94 8a 0f call 0x1f14 ; 0x1f14 <INiuzBtergGIBuB76T0G5>
31d8: 26 c0 rjmp .+76 ; 0x3226 <LIBFC_ReceiverInit+0x156>
31da: 18 30 cpi r17, 0x08 ; 8
31dc: 19 f4 brne .+6 ; 0x31e4 <LIBFC_ReceiverInit+0x114>
31de: 0e 94 06 b0 call 0x1600c ; 0x1600c <User_Receiver_Init>
31e2: 21 c0 rjmp .+66 ; 0x3226 <LIBFC_ReceiverInit+0x156>
31e4: 15 30 cpi r17, 0x05 ; 5
31e6: 19 f4 brne .+6 ; 0x31ee <LIBFC_ReceiverInit+0x11e>
31e8: 0e 94 cc 0d call 0x1b98 ; 0x1b98 <fomklkdtn89SFGrsgt9rf>
31ec: 1c c0 rjmp .+56 ; 0x3226 <LIBFC_ReceiverInit+0x156>
31ee: 16 30 cpi r17, 0x06 ; 6
31f0: 11 f4 brne .+4 ; 0x31f6 <LIBFC_ReceiverInit+0x126>
31f2: 49 dc rcall .-1902 ; 0x2a86 <HoTT_Init>
31f4: 18 c0 rjmp .+48 ; 0x3226 <LIBFC_ReceiverInit+0x156>
31f6: 17 30 cpi r17, 0x07 ; 7
31f8: b1 f4 brne .+44 ; 0x3226 <LIBFC_ReceiverInit+0x156>
31fa: 0e 94 c5 92 call 0x1258a ; 0x1258a <SbusUartInit>
31fe: 13 c0 rjmp .+38 ; 0x3226 <LIBFC_ReceiverInit+0x156>
3200: 11 23 and r17, r17
3202: 89 f0 breq .+34 ; 0x3226 <LIBFC_ReceiverInit+0x156>
3204: 87 e3 ldi r24, 0x37 ; 55
3206: 99 e1 ldi r25, 0x19 ; 25
3208: 9f 93 push r25
320a: 8f 93 push r24
320c: 87 eb ldi r24, 0xB7 ; 183
320e: 9c ea ldi r25, 0xAC ; 172
3210: 9f 93 push r25
3212: 8f 93 push r24
3214: e0 91 78 06 lds r30, 0x0678
3218: f0 91 79 06 lds r31, 0x0679
321c: 09 95 icall
321e: 0f 90 pop r0
3220: 0f 90 pop r0
3222: 0f 90 pop r0
3224: 0f 90 pop r0
3226: 10 93 05 01 sts 0x0105, r17
322a: df 91 pop r29
322c: cf 91 pop r28
322e: 1f 91 pop r17
3230: 08 95 ret
00003232 <LIBFC_Init>:
3232: 0f 93 push r16
3234: 1f 93 push r17
3236: 08 2f mov r16, r24
3238: 81 e0 ldi r24, 0x01 ; 1
323a: 80 93 ec 02 sts 0x02EC, r24
323e: 40 91 04 01 lds r20, 0x0104
3242: e7 e9 ldi r30, 0x97 ; 151
3244: f8 e1 ldi r31, 0x18 ; 24
3246: 20 e0 ldi r18, 0x00 ; 0
3248: 30 e0 ldi r19, 0x00 ; 0
324a: 5f e4 ldi r21, 0x4F ; 79
324c: 84 91 lpm r24, Z
324e: 99 27 eor r25, r25
3250: 2f 5f subi r18, 0xFF ; 255
3252: 3f 4f sbci r19, 0xFF ; 255
3254: 82 9f mul r24, r18
3256: b0 01 movw r22, r0
3258: 83 9f mul r24, r19
325a: 70 0d add r23, r0
325c: 92 9f mul r25, r18
325e: 70 0d add r23, r0
3260: 11 24 eor r1, r1
3262: 46 27 eor r20, r22
3264: 51 50 subi r21, 0x01 ; 1
3266: 31 96 adiw r30, 0x01 ; 1
3268: 57 ff sbrs r21, 7
326a: f0 cf rjmp .-32 ; 0x324c <LIBFC_Init+0x1a>
326c: 40 93 04 01 sts 0x0104, r20
3270: ef e6 ldi r30, 0x6F ; 111
3272: f8 e1 ldi r31, 0x18 ; 24
3274: 20 e0 ldi r18, 0x00 ; 0
3276: 30 e0 ldi r19, 0x00 ; 0
3278: 57 e2 ldi r21, 0x27 ; 39
327a: 84 91 lpm r24, Z
327c: 99 27 eor r25, r25
327e: 2f 5f subi r18, 0xFF ; 255
3280: 3f 4f sbci r19, 0xFF ; 255
3282: 82 9f mul r24, r18
3284: b0 01 movw r22, r0
3286: 83 9f mul r24, r19
3288: 70 0d add r23, r0
328a: 92 9f mul r25, r18
328c: 70 0d add r23, r0
328e: 11 24 eor r1, r1
3290: 46 27 eor r20, r22
3292: 51 50 subi r21, 0x01 ; 1
3294: 31 96 adiw r30, 0x01 ; 1
3296: 57 ff sbrs r21, 7
3298: f0 cf rjmp .-32 ; 0x327a <LIBFC_Init+0x48>
329a: 40 93 04 01 sts 0x0104, r20
329e: 80 91 eb 02 lds r24, 0x02EB
32a2: 88 23 and r24, r24
32a4: 19 f4 brne .+6 ; 0x32ac <LIBFC_Init+0x7a>
32a6: cb de rcall .-618 ; 0x303e <LIBFC_GetCPUType>
32a8: 80 93 eb 02 sts 0x02EB, r24
32ac: 81 e7 ldi r24, 0x71 ; 113
32ae: 92 e1 ldi r25, 0x12 ; 18
32b0: 90 93 79 06 sts 0x0679, r25
32b4: 80 93 78 06 sts 0x0678, r24
32b8: 80 91 04 01 lds r24, 0x0104
32bc: 83 34 cpi r24, 0x43 ; 67
32be: 59 f0 breq .+22 ; 0x32d6 <LIBFC_Init+0xa4>
32c0: 88 e1 ldi r24, 0x18 ; 24
32c2: 90 e0 ldi r25, 0x00 ; 0
32c4: 29 e2 ldi r18, 0x29 ; 41
32c6: 0f b6 in r0, 0x3f ; 63
32c8: f8 94 cli
32ca: a8 95 wdr
32cc: 80 93 60 00 sts 0x0060, r24
32d0: 0f be out 0x3f, r0 ; 63
32d2: 20 93 60 00 sts 0x0060, r18
32d6: 07 30 cpi r16, 0x07 ; 7
32d8: 91 f0 breq .+36 ; 0x32fe <LIBFC_Init+0xcc>
32da: 82 e5 ldi r24, 0x52 ; 82
32dc: 99 e1 ldi r25, 0x19 ; 25
32de: 9f 93 push r25
32e0: 8f 93 push r24
32e2: 87 eb ldi r24, 0xB7 ; 183
32e4: 9c ea ldi r25, 0xAC ; 172
32e6: 9f 93 push r25
32e8: 8f 93 push r24
32ea: e0 91 78 06 lds r30, 0x0678
32ee: f0 91 79 06 lds r31, 0x0679
32f2: 09 95 icall
32f4: 0f 90 pop r0
32f6: 0f 90 pop r0
32f8: 0f 90 pop r0
32fa: 0f 90 pop r0
32fc: ee cf rjmp .-36 ; 0x32da <LIBFC_Init+0xa8>
32fe: 80 91 54 01 lds r24, 0x0154
3302: 89 31 cpi r24, 0x19 ; 25
3304: 58 f1 brcs .+86 ; 0x335c <LIBFC_Init+0x12a>
3306: 80 91 ea 02 lds r24, 0x02EA
330a: 88 23 and r24, r24
330c: a9 f4 brne .+42 ; 0x3338 <LIBFC_Init+0x106>
330e: 8f e6 ldi r24, 0x6F ; 111
3310: 99 e1 ldi r25, 0x19 ; 25
3312: 9f 93 push r25
3314: 8f 93 push r24
3316: 87 eb ldi r24, 0xB7 ; 183
3318: 9c ea ldi r25, 0xAC ; 172
331a: 9f 93 push r25
331c: 8f 93 push r24
331e: e0 91 78 06 lds r30, 0x0678
3322: f0 91 79 06 lds r31, 0x0679
3326: 09 95 icall
3328: 87 e1 ldi r24, 0x17 ; 23
332a: 80 93 54 01 sts 0x0154, r24
332e: 0f 90 pop r0
3330: 0f 90 pop r0
3332: 0f 90 pop r0
3334: 0f 90 pop r0
3336: 12 c0 rjmp .+36 ; 0x335c <LIBFC_Init+0x12a>
3338: 15 bc out 0x25, r1 ; 37
333a: 87 31 cpi r24, 0x17 ; 23
333c: 19 f4 brne .+6 ; 0x3344 <LIBFC_Init+0x112>
333e: 80 93 54 01 sts 0x0154, r24
3342: 06 c0 rjmp .+12 ; 0x3350 <LIBFC_Init+0x11e>
3344: 87 e0 ldi r24, 0x07 ; 7
3346: 80 93 0b 01 sts 0x010B, r24
334a: 86 e0 ldi r24, 0x06 ; 6
334c: 80 93 0a 01 sts 0x010A, r24
3350: e0 91 02 01 lds r30, 0x0102
3354: f0 91 03 01 lds r31, 0x0103
3358: 8d ef ldi r24, 0xFD ; 253
335a: 09 95 icall
335c: 0e 94 4b 59 call 0xb296 ; 0xb296 <PrintLine>
3360: 81 e6 ldi r24, 0x61 ; 97
3362: 90 e0 ldi r25, 0x00 ; 0
3364: 9f 93 push r25
3366: 8f 93 push r24
3368: 88 e0 ldi r24, 0x08 ; 8
336a: 90 e0 ldi r25, 0x00 ; 0
336c: 9f 93 push r25
336e: 8f 93 push r24
3370: 82 e0 ldi r24, 0x02 ; 2
3372: 90 e0 ldi r25, 0x00 ; 0
3374: 9f 93 push r25
3376: 8f 93 push r24
3378: 80 91 54 01 lds r24, 0x0154
337c: 6a e0 ldi r22, 0x0A ; 10
337e: 0e 94 36 b1 call 0x1626c ; 0x1626c <__udivmodqi4>
3382: 89 2f mov r24, r25
3384: 99 27 eor r25, r25
3386: 9f 93 push r25
3388: 8f 93 push r24
338a: 80 91 54 01 lds r24, 0x0154
338e: 0e 94 36 b1 call 0x1626c ; 0x1626c <__udivmodqi4>
3392: 99 27 eor r25, r25
3394: 9f 93 push r25
3396: 8f 93 push r24
3398: 89 ea ldi r24, 0xA9 ; 169
339a: 99 e1 ldi r25, 0x19 ; 25
339c: 9f 93 push r25
339e: 8f 93 push r24
33a0: 07 eb ldi r16, 0xB7 ; 183
33a2: 1c ea ldi r17, 0xAC ; 172
33a4: 1f 93 push r17
33a6: 0f 93 push r16
33a8: e0 91 78 06 lds r30, 0x0678
33ac: f0 91 79 06 lds r31, 0x0679
33b0: 09 95 icall
33b2: 87 e9 ldi r24, 0x97 ; 151
33b4: 98 e1 ldi r25, 0x18 ; 24
33b6: 9f 93 push r25
33b8: 8f 93 push r24
33ba: 1f 93 push r17
33bc: 0f 93 push r16
33be: e0 91 78 06 lds r30, 0x0678
33c2: f0 91 79 06 lds r31, 0x0679
33c6: 09 95 icall
33c8: 8f e6 ldi r24, 0x6F ; 111
33ca: 98 e1 ldi r25, 0x18 ; 24
33cc: 9f 93 push r25
33ce: 8f 93 push r24
33d0: 1f 93 push r17
33d2: 0f 93 push r16
33d4: e0 91 78 06 lds r30, 0x0678
33d8: f0 91 79 06 lds r31, 0x0679
33dc: 09 95 icall
33de: 0e 94 4b 59 call 0xb296 ; 0xb296 <PrintLine>
33e2: 83 ec ldi r24, 0xC3 ; 195
33e4: 80 93 81 00 sts 0x0081, r24
33e8: 80 91 6f 00 lds r24, 0x006F
33ec: 80 62 ori r24, 0x20 ; 32
33ee: 80 93 6f 00 sts 0x006F, r24
33f2: 8d b7 in r24, 0x3d ; 61
33f4: 9e b7 in r25, 0x3e ; 62
33f6: 46 96 adiw r24, 0x16 ; 22
33f8: 8d bf out 0x3d, r24 ; 61
33fa: 1f 91 pop r17
33fc: 0f 91 pop r16
33fe: 08 95 ret
00003400 <LIBFC_CheckSettings>:
3400: 80 91 a6 05 lds r24, 0x05A6
3404: 8d 33 cpi r24, 0x3D ; 61
3406: 38 f0 brcs .+14 ; 0x3416 <LIBFC_CheckSettings+0x16>
3408: 80 91 d7 08 lds r24, 0x08D7
340c: 87 fd sbrc r24, 7
340e: 03 c0 rjmp .+6 ; 0x3416 <LIBFC_CheckSettings+0x16>
3410: 8c e3 ldi r24, 0x3C ; 60
3412: 80 93 a6 05 sts 0x05A6, r24
3416: 80 91 54 05 lds r24, 0x0554
341a: 88 23 and r24, r24
341c: 31 f0 breq .+12 ; 0x342a <LIBFC_CheckSettings+0x2a>
341e: 80 55 subi r24, 0x50 ; 80
3420: 85 36 cpi r24, 0x65 ; 101
3422: 18 f0 brcs .+6 ; 0x342a <LIBFC_CheckSettings+0x2a>
3424: 8f e7 ldi r24, 0x7F ; 127
3426: 80 93 54 05 sts 0x0554, r24
342a: 08 95 ret
0000342c <LIBFC_Polling>:
342c: 80 91 ec 02 lds r24, 0x02EC
3430: 88 23 and r24, r24
3432: 09 f4 brne .+2 ; 0x3436 <LIBFC_Polling+0xa>
3434: 85 c0 rjmp .+266 ; 0x3540 <LIBFC_Polling+0x114>
3436: 80 91 26 03 lds r24, 0x0326
343a: 81 50 subi r24, 0x01 ; 1
343c: 80 93 26 03 sts 0x0326, r24
3440: 88 23 and r24, r24
3442: 09 f0 breq .+2 ; 0x3446 <LIBFC_Polling+0x1a>
3444: 69 c0 rjmp .+210 ; 0x3518 <LIBFC_Polling+0xec>
3446: 89 e1 ldi r24, 0x19 ; 25
3448: 80 93 26 03 sts 0x0326, r24
344c: 80 91 a6 05 lds r24, 0x05A6
3450: 8e 33 cpi r24, 0x3E ; 62
3452: 38 f0 brcs .+14 ; 0x3462 <LIBFC_Polling+0x36>
3454: 80 91 d7 08 lds r24, 0x08D7
3458: 87 fd sbrc r24, 7
345a: 03 c0 rjmp .+6 ; 0x3462 <LIBFC_Polling+0x36>
345c: 8d e3 ldi r24, 0x3D ; 61
345e: 80 93 a6 05 sts 0x05A6, r24
3462: 80 91 04 04 lds r24, 0x0404
3466: 82 38 cpi r24, 0x82 ; 130
3468: a0 f5 brcc .+104 ; 0x34d2 <LIBFC_Polling+0xa6>
346a: 80 91 cc 03 lds r24, 0x03CC
346e: 90 91 cd 03 lds r25, 0x03CD
3472: 80 5d subi r24, 0xD0 ; 208
3474: 97 40 sbci r25, 0x07 ; 7
3476: 20 f0 brcs .+8 ; 0x3480 <LIBFC_Polling+0x54>
3478: 80 91 1b 05 lds r24, 0x051B
347c: 84 36 cpi r24, 0x64 ; 100
347e: 20 f4 brcc .+8 ; 0x3488 <LIBFC_Polling+0x5c>
3480: 10 92 28 03 sts 0x0328, r1
3484: 10 92 27 03 sts 0x0327, r1
3488: 20 91 27 03 lds r18, 0x0327
348c: 30 91 28 03 lds r19, 0x0328
3490: 21 15 cp r18, r1
3492: 31 05 cpc r19, r1
3494: b1 f1 breq .+108 ; 0x3502 <LIBFC_Polling+0xd6>
3496: c9 01 movw r24, r18
3498: 01 97 sbiw r24, 0x01 ; 1
349a: 90 93 28 03 sts 0x0328, r25
349e: 80 93 27 03 sts 0x0327, r24
34a2: 41 97 sbiw r24, 0x11 ; 17
34a4: 98 f1 brcs .+102 ; 0x350c <LIBFC_Polling+0xe0>
34a6: 80 91 d7 08 lds r24, 0x08D7
34aa: 84 ff sbrs r24, 4
34ac: 2f c0 rjmp .+94 ; 0x350c <LIBFC_Polling+0xe0>
34ae: 80 91 ca 03 lds r24, 0x03CA
34b2: 84 60 ori r24, 0x04 ; 4
34b4: 80 93 ca 03 sts 0x03CA, r24
34b8: 80 91 e5 08 lds r24, 0x08E5
34bc: 87 ff sbrs r24, 7
34be: 26 c0 rjmp .+76 ; 0x350c <LIBFC_Polling+0xe0>
34c0: 80 91 8d 04 lds r24, 0x048D
34c4: 88 23 and r24, r24
34c6: 11 f1 breq .+68 ; 0x350c <LIBFC_Polling+0xe0>
34c8: 30 93 28 03 sts 0x0328, r19
34cc: 20 93 27 03 sts 0x0327, r18
34d0: 1d c0 rjmp .+58 ; 0x350c <LIBFC_Polling+0xe0>
34d2: 80 91 04 04 lds r24, 0x0404
34d6: 85 3b cpi r24, 0xB5 ; 181
34d8: c8 f0 brcs .+50 ; 0x350c <LIBFC_Polling+0xe0>
34da: 90 91 a6 05 lds r25, 0x05A6
34de: 84 e1 ldi r24, 0x14 ; 20
34e0: 98 9f mul r25, r24
34e2: c0 01 movw r24, r0
34e4: 11 24 eor r1, r1
34e6: 40 96 adiw r24, 0x10 ; 16
34e8: 20 91 27 03 lds r18, 0x0327
34ec: 30 91 28 03 lds r19, 0x0328
34f0: 28 17 cp r18, r24
34f2: 39 07 cpc r19, r25
34f4: 30 f4 brcc .+12 ; 0x3502 <LIBFC_Polling+0xd6>
34f6: 2f 5f subi r18, 0xFF ; 255
34f8: 3f 4f sbci r19, 0xFF ; 255
34fa: 30 93 28 03 sts 0x0328, r19
34fe: 20 93 27 03 sts 0x0327, r18
3502: 80 91 ca 03 lds r24, 0x03CA
3506: 8b 7f andi r24, 0xFB ; 251
3508: 80 93 ca 03 sts 0x03CA, r24
350c: 80 91 04 01 lds r24, 0x0104
3510: 83 34 cpi r24, 0x43 ; 67
3512: 11 f0 breq .+4 ; 0x3518 <LIBFC_Polling+0xec>
3514: 10 92 ec 02 sts 0x02EC, r1
3518: 90 91 05 01 lds r25, 0x0105
351c: 96 30 cpi r25, 0x06 ; 6
351e: 09 f4 brne .+2 ; 0x3522 <LIBFC_Polling+0xf6>
3520: cf cb rjmp .-2146 ; 0x2cc0 <HoTT_Polling>
3522: 80 91 09 01 lds r24, 0x0109
3526: 88 23 and r24, r24
3528: 21 f0 breq .+8 ; 0x3532 <LIBFC_Polling+0x106>
352a: 81 50 subi r24, 0x01 ; 1
352c: 80 93 09 01 sts 0x0109, r24
3530: 08 95 ret
3532: 8b e4 ldi r24, 0x4B ; 75
3534: 80 93 09 01 sts 0x0109, r24
3538: 94 30 cpi r25, 0x04 ; 4
353a: 11 f4 brne .+4 ; 0x3540 <LIBFC_Polling+0x114>
353c: 0c 94 d4 11 jmp 0x23a8 ; 0x23a8 <a48784362857632195659>
3540: 08 95 ret
00003542 <__vector_28>:
3542: 1f 92 push r1
3544: 0f 92 push r0
3546: 0f b6 in r0, 0x3f ; 63
3548: 0f 92 push r0
354a: 11 24 eor r1, r1
354c: 2f 93 push r18
354e: 3f 93 push r19
3550: 4f 93 push r20
3552: 5f 93 push r21
3554: 6f 93 push r22
3556: 7f 93 push r23
3558: 8f 93 push r24
355a: 9f 93 push r25
355c: af 93 push r26
355e: bf 93 push r27
3560: ef 93 push r30
3562: ff 93 push r31
3564: 90 91 ce 00 lds r25, 0x00CE
3568: 80 91 ec 04 lds r24, 0x04EC
356c: 88 23 and r24, r24
356e: b9 f0 breq .+46 ; 0x359e <__vector_28+0x5c>
3570: 90 93 c6 00 sts 0x00C6, r25
3574: 80 91 ec 04 lds r24, 0x04EC
3578: 82 30 cpi r24, 0x02 ; 2
357a: 09 f0 breq .+2 ; 0x357e <__vector_28+0x3c>
357c: 3e c0 rjmp .+124 ; 0x35fa <__vector_28+0xb8>
357e: 9f 3f cpi r25, 0xFF ; 255
3580: e1 f5 brne .+120 ; 0x35fa <__vector_28+0xb8>
3582: 8f ef ldi r24, 0xFF ; 255
3584: 94 e3 ldi r25, 0x34 ; 52
3586: ac e0 ldi r26, 0x0C ; 12
3588: b0 e0 ldi r27, 0x00 ; 0
358a: c2 97 sbiw r24, 0x32 ; 50
358c: a1 09 sbc r26, r1
358e: b1 09 sbc r27, r1
3590: b7 ff sbrs r27, 7
3592: fb cf rjmp .-10 ; 0x358a <__vector_28+0x48>
3594: 80 91 8c 0a lds r24, 0x0A8C
3598: 80 93 ce 00 sts 0x00CE, r24
359c: 2e c0 rjmp .+92 ; 0x35fa <__vector_28+0xb8>
359e: 20 91 05 01 lds r18, 0x0105
35a2: 82 2f mov r24, r18
35a4: 81 50 subi r24, 0x01 ; 1
35a6: 83 30 cpi r24, 0x03 ; 3
35a8: 20 f4 brcc .+8 ; 0x35b2 <__vector_28+0x70>
35aa: 89 2f mov r24, r25
35ac: 0e 94 65 94 call 0x128ca ; 0x128ca <SpektrumParser>
35b0: 24 c0 rjmp .+72 ; 0x35fa <__vector_28+0xb8>
35b2: 24 30 cpi r18, 0x04 ; 4
35b4: 21 f4 brne .+8 ; 0x35be <__vector_28+0x7c>
35b6: 89 2f mov r24, r25
35b8: 0e 94 e9 0f call 0x1fd2 ; 0x1fd2 <KLNMIOHMUHG76GFGr43r3>
35bc: 1e c0 rjmp .+60 ; 0x35fa <__vector_28+0xb8>
35be: 28 30 cpi r18, 0x08 ; 8
35c0: 21 f4 brne .+8 ; 0x35ca <__vector_28+0x88>
35c2: 89 2f mov r24, r25
35c4: 0e 94 07 b0 call 0x1600e ; 0x1600e <User_RX_Parser>
35c8: 18 c0 rjmp .+48 ; 0x35fa <__vector_28+0xb8>
35ca: 80 91 54 01 lds r24, 0x0154
35ce: 89 31 cpi r24, 0x19 ; 25
35d0: 20 f0 brcs .+8 ; 0x35da <__vector_28+0x98>
35d2: 80 91 ea 02 lds r24, 0x02EA
35d6: 88 23 and r24, r24
35d8: 81 f0 breq .+32 ; 0x35fa <__vector_28+0xb8>
35da: 25 30 cpi r18, 0x05 ; 5
35dc: 21 f4 brne .+8 ; 0x35e6 <__vector_28+0xa4>
35de: 89 2f mov r24, r25
35e0: 0e 94 2e 0f call 0x1e5c ; 0x1e5c <FGtj76uzh56z3grEg5t45>
35e4: 0a c0 rjmp .+20 ; 0x35fa <__vector_28+0xb8>
35e6: 26 30 cpi r18, 0x06 ; 6
35e8: 19 f4 brne .+6 ; 0x35f0 <__vector_28+0xae>
35ea: 89 2f mov r24, r25
35ec: 30 db rcall .-2464 ; 0x2c4e <HoTT_Parser>
35ee: 05 c0 rjmp .+10 ; 0x35fa <__vector_28+0xb8>
35f0: 27 30 cpi r18, 0x07 ; 7
35f2: 19 f4 brne .+6 ; 0x35fa <__vector_28+0xb8>
35f4: 89 2f mov r24, r25
35f6: 0e 94 11 93 call 0x12622 ; 0x12622 <SbusParser>
35fa: ff 91 pop r31
35fc: ef 91 pop r30
35fe: bf 91 pop r27
3600: af 91 pop r26
3602: 9f 91 pop r25
3604: 8f 91 pop r24
3606: 7f 91 pop r23
3608: 6f 91 pop r22
360a: 5f 91 pop r21
360c: 4f 91 pop r20
360e: 3f 91 pop r19
3610: 2f 91 pop r18
3612: 0f 90 pop r0
3614: 0f be out 0x3f, r0 ; 63
3616: 0f 90 pop r0
3618: 1f 90 pop r1
361a: 18 95 reti
0000361c <ADC_Init>:
//#######################################################################################
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
361c: 10 92 7c 00 sts 0x007C, r1
ANALOG_ON;
3620: 8f ec ldi r24, 0xCF ; 207
3622: 80 93 7a 00 sts 0x007A, r24
3626: 08 95 ret
00003628 <CalcExpandBaroStep>:
#define DESIRED_H_ADC 800
void CalcExpandBaroStep(void)
{
if(ACC_AltitudeControl) ExpandBaroStep = BaroStep * (long)ExpandBaro;
3628: 80 91 c2 03 lds r24, 0x03C2
362c: 88 23 and r24, r24
362e: a1 f0 breq .+40 ; 0x3658 <CalcExpandBaroStep+0x30>
3630: 20 91 0d 01 lds r18, 0x010D
3634: 30 91 0e 01 lds r19, 0x010E
3638: a0 91 56 03 lds r26, 0x0356
363c: bb 27 eor r27, r27
363e: a7 fd sbrc r26, 7
3640: b0 95 com r27
3642: 0e 94 c2 b1 call 0x16384 ; 0x16384 <__usmulhisi3>
3646: 60 93 4e 03 sts 0x034E, r22
364a: 70 93 4f 03 sts 0x034F, r23
364e: 80 93 50 03 sts 0x0350, r24
3652: 90 93 51 03 sts 0x0351, r25
3656: 08 95 ret
else ExpandBaroStep = (16 * BaroStep) * (long)ExpandBaro - 4;
3658: 20 91 0d 01 lds r18, 0x010D
365c: 30 91 0e 01 lds r19, 0x010E
3660: 22 95 swap r18
3662: 32 95 swap r19
3664: 30 7f andi r19, 0xF0 ; 240
3666: 32 27 eor r19, r18
3668: 20 7f andi r18, 0xF0 ; 240
366a: 32 27 eor r19, r18
366c: a0 91 56 03 lds r26, 0x0356
3670: bb 27 eor r27, r27
3672: a7 fd sbrc r26, 7
3674: b0 95 com r27
3676: 0e 94 c2 b1 call 0x16384 ; 0x16384 <__usmulhisi3>
367a: dc 01 movw r26, r24
367c: cb 01 movw r24, r22
367e: 04 97 sbiw r24, 0x04 ; 4
3680: a1 09 sbc r26, r1
3682: b1 09 sbc r27, r1
3684: 80 93 4e 03 sts 0x034E, r24
3688: 90 93 4f 03 sts 0x034F, r25
368c: a0 93 50 03 sts 0x0350, r26
3690: b0 93 51 03 sts 0x0351, r27
3694: 08 95 ret
00003696 <SucheLuftruckOffset>:
}
void SucheLuftruckOffset(void)
{
3696: ef 92 push r14
3698: ff 92 push r15
369a: 0f 93 push r16
369c: 1f 93 push r17
369e: cf 93 push r28
36a0: df 93 push r29
unsigned int off;
ExpandBaro = 0;
36a2: 10 92 56 03 sts 0x0356, r1
CalcExpandBaroStep();
36a6: c0 df rcall .-128 ; 0x3628 <CalcExpandBaroStep>
off = GetParamByte(PID_PRESSURE_OFFSET);
36a8: 83 e0 ldi r24, 0x03 ; 3
36aa: 90 e0 ldi r25, 0x00 ; 0
36ac: 0e 94 42 25 call 0x4a84 ; 0x4a84 <GetParamByte>
36b0: c8 2f mov r28, r24
36b2: d0 e0 ldi r29, 0x00 ; 0
if(off < 240) off += 10;
36b4: c0 3f cpi r28, 0xF0 ; 240
36b6: d1 05 cpc r29, r1
36b8: 08 f4 brcc .+2 ; 0x36bc <SucheLuftruckOffset+0x26>
36ba: 2a 96 adiw r28, 0x0a ; 10
OCR0A = off;
36bc: c7 bd out 0x27, r28 ; 39
OCR0B = 255-off;
36be: 8c 2f mov r24, r28
36c0: 80 95 com r24
36c2: 88 bd out 0x28, r24 ; 40
Delay_ms_Mess(150);
36c4: 86 e9 ldi r24, 0x96 ; 150
36c6: 90 e0 ldi r25, 0x00 ; 0
36c8: 0e 94 6e 9c call 0x138dc ; 0x138dc <Delay_ms_Mess>
if(MessLuftdruck > DESIRED_H_ADC) off = 240;
36cc: 80 91 10 01 lds r24, 0x0110
36d0: 90 91 11 01 lds r25, 0x0111
36d4: 81 32 cpi r24, 0x21 ; 33
36d6: 93 40 sbci r25, 0x03 ; 3
36d8: 58 f0 brcs .+22 ; 0x36f0 <SucheLuftruckOffset+0x5a>
36da: c0 ef ldi r28, 0xF0 ; 240
36dc: d0 e0 ldi r29, 0x00 ; 0
for(; off > 5; off--)
{
OCR0A = off;
OCR0B = 255-off;
Delay_ms_Mess(100);
printf(".");
36de: 0f 2e mov r0, r31
36e0: f6 e3 ldi r31, 0x36 ; 54
36e2: ef 2e mov r14, r31
36e4: f2 e0 ldi r31, 0x02 ; 2
36e6: ff 2e mov r15, r31
36e8: f0 2d mov r31, r0
36ea: 07 eb ldi r16, 0xB7 ; 183
36ec: 1c ea ldi r17, 0xAC ; 172
36ee: 04 c0 rjmp .+8 ; 0x36f8 <SucheLuftruckOffset+0x62>
if(off < 240) off += 10;
OCR0A = off;
OCR0B = 255-off;
Delay_ms_Mess(150);
if(MessLuftdruck > DESIRED_H_ADC) off = 240;
for(; off > 5; off--)
36f0: c6 30 cpi r28, 0x06 ; 6
36f2: d1 05 cpc r29, r1
36f4: a0 f7 brcc .-24 ; 0x36de <SucheLuftruckOffset+0x48>
36f6: 20 c0 rjmp .+64 ; 0x3738 <SucheLuftruckOffset+0xa2>
{
OCR0A = off;
36f8: 8c 2f mov r24, r28
36fa: c7 bd out 0x27, r28 ; 39
36fc: 80 95 com r24
OCR0B = 255-off;
36fe: 88 bd out 0x28, r24 ; 40
Delay_ms_Mess(100);
3700: 84 e6 ldi r24, 0x64 ; 100
3702: 90 e0 ldi r25, 0x00 ; 0
3704: 0e 94 6e 9c call 0x138dc ; 0x138dc <Delay_ms_Mess>
printf(".");
3708: ff 92 push r15
370a: ef 92 push r14
370c: 1f 93 push r17
370e: 0f 93 push r16
3710: e0 91 78 06 lds r30, 0x0678
3714: f0 91 79 06 lds r31, 0x0679
3718: 09 95 icall
if(MessLuftdruck > DESIRED_H_ADC) break;
371a: 80 91 10 01 lds r24, 0x0110
371e: 90 91 11 01 lds r25, 0x0111
3722: 0f 90 pop r0
3724: 0f 90 pop r0
3726: 0f 90 pop r0
3728: 0f 90 pop r0
372a: 81 32 cpi r24, 0x21 ; 33
372c: 93 40 sbci r25, 0x03 ; 3
372e: 20 f4 brcc .+8 ; 0x3738 <SucheLuftruckOffset+0xa2>
if(off < 240) off += 10;
OCR0A = off;
OCR0B = 255-off;
Delay_ms_Mess(150);
if(MessLuftdruck > DESIRED_H_ADC) off = 240;
for(; off > 5; off--)
3730: 21 97 sbiw r28, 0x01 ; 1
3732: c6 30 cpi r28, 0x06 ; 6
3734: d1 05 cpc r29, r1
3736: 00 f7 brcc .-64 ; 0x36f8 <SucheLuftruckOffset+0x62>
OCR0B = 255-off;
Delay_ms_Mess(100);
printf(".");
if(MessLuftdruck > DESIRED_H_ADC) break;
}
DruckOffsetSetting = off;
3738: c0 93 12 05 sts 0x0512, r28
SetParamByte(PID_PRESSURE_OFFSET, off);
373c: 6c 2f mov r22, r28
373e: 83 e0 ldi r24, 0x03 ; 3
3740: 90 e0 ldi r25, 0x00 ; 0
3742: 0e 94 45 25 call 0x4a8a ; 0x4a8a <SetParamByte>
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) && (DruckOffsetSetting < 10 || DruckOffsetSetting >= 230)) VersionInfo.HardwareError[0] |= FC_ERROR0_PRESSURE;
3746: 80 91 4b 05 lds r24, 0x054B
374a: 80 ff sbrs r24, 0
374c: 0a c0 rjmp .+20 ; 0x3762 <SucheLuftruckOffset+0xcc>
374e: 80 91 12 05 lds r24, 0x0512
3752: 8a 50 subi r24, 0x0A ; 10
3754: 8c 3d cpi r24, 0xDC ; 220
3756: 28 f0 brcs .+10 ; 0x3762 <SucheLuftruckOffset+0xcc>
3758: e2 e6 ldi r30, 0x62 ; 98
375a: fa e0 ldi r31, 0x0A ; 10
375c: 80 81 ld r24, Z
375e: 80 64 ori r24, 0x40 ; 64
3760: 80 83 st Z, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + correction of the altitude error in higher altitudes
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CalAthmospheare = 16;
3762: 80 e1 ldi r24, 0x10 ; 16
3764: 80 93 0c 01 sts 0x010C, r24
if(ACC_AltitudeControl)
3768: 80 91 c2 03 lds r24, 0x03C2
376c: 88 23 and r24, r24
376e: 69 f1 breq .+90 ; 0x37ca <SucheLuftruckOffset+0x134>
{
if(PlatinenVersion < 23) { if(off < 140) CalAthmospheare += (160 - off) / 26; }
3770: 80 91 54 01 lds r24, 0x0154
3774: 87 31 cpi r24, 0x17 ; 23
3776: a8 f4 brcc .+42 ; 0x37a2 <SucheLuftruckOffset+0x10c>
3778: cc 38 cpi r28, 0x8C ; 140
377a: d1 05 cpc r29, r1
377c: 30 f5 brcc .+76 ; 0x37ca <SucheLuftruckOffset+0x134>
377e: 20 ea ldi r18, 0xA0 ; 160
3780: 30 e0 ldi r19, 0x00 ; 0
3782: 2c 1b sub r18, r28
3784: 3d 0b sbc r19, r29
3786: a5 ec ldi r26, 0xC5 ; 197
3788: be e4 ldi r27, 0x4E ; 78
378a: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
378e: 96 95 lsr r25
3790: 87 95 ror r24
3792: 96 95 lsr r25
3794: 87 95 ror r24
3796: 96 95 lsr r25
3798: 87 95 ror r24
379a: 80 5f subi r24, 0xF0 ; 240
379c: 80 93 0c 01 sts 0x010C, r24
37a0: 14 c0 rjmp .+40 ; 0x37ca <SucheLuftruckOffset+0x134>
else { if(off < 170) CalAthmospheare += (188 - off) / 19; }
37a2: ca 3a cpi r28, 0xAA ; 170
37a4: d1 05 cpc r29, r1
37a6: 88 f4 brcc .+34 ; 0x37ca <SucheLuftruckOffset+0x134>
37a8: 2c eb ldi r18, 0xBC ; 188
37aa: 30 e0 ldi r19, 0x00 ; 0
37ac: 2c 1b sub r18, r28
37ae: 3d 0b sbc r19, r29
37b0: a5 e9 ldi r26, 0x95 ; 149
37b2: b7 ed ldi r27, 0xD7 ; 215
37b4: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
37b8: 92 95 swap r25
37ba: 82 95 swap r24
37bc: 8f 70 andi r24, 0x0F ; 15
37be: 89 27 eor r24, r25
37c0: 9f 70 andi r25, 0x0F ; 15
37c2: 89 27 eor r24, r25
37c4: 80 5f subi r24, 0xF0 ; 240
37c6: 80 93 0c 01 sts 0x010C, r24
}
Luftdruck = MessLuftdruck * CalAthmospheare;
37ca: 20 91 10 01 lds r18, 0x0110
37ce: 30 91 11 01 lds r19, 0x0111
37d2: 40 91 0c 01 lds r20, 0x010C
37d6: 42 9f mul r20, r18
37d8: c0 01 movw r24, r0
37da: 43 9f mul r20, r19
37dc: 90 0d add r25, r0
37de: 11 24 eor r1, r1
37e0: a0 e0 ldi r26, 0x00 ; 0
37e2: b0 e0 ldi r27, 0x00 ; 0
37e4: 80 93 12 01 sts 0x0112, r24
37e8: 90 93 13 01 sts 0x0113, r25
37ec: a0 93 14 01 sts 0x0114, r26
37f0: b0 93 15 01 sts 0x0115, r27
#endif
Delay_ms_Mess(300);
37f4: 8c e2 ldi r24, 0x2C ; 44
37f6: 91 e0 ldi r25, 0x01 ; 1
37f8: 0e 94 6e 9c call 0x138dc ; 0x138dc <Delay_ms_Mess>
}
37fc: df 91 pop r29
37fe: cf 91 pop r28
3800: 1f 91 pop r17
3802: 0f 91 pop r16
3804: ff 90 pop r15
3806: ef 90 pop r14
3808: 08 95 ret
0000380a <__vector_24>:
//#######################################################################################
//
ISR(ADC_vect)
//#######################################################################################
{
380a: 1f 92 push r1
380c: 0f 92 push r0
380e: 0f b6 in r0, 0x3f ; 63
3810: 0f 92 push r0
3812: 11 24 eor r1, r1
3814: 0b b6 in r0, 0x3b ; 59
3816: 0f 92 push r0
3818: 8f 92 push r8
381a: 9f 92 push r9
381c: af 92 push r10
381e: bf 92 push r11
3820: cf 92 push r12
3822: df 92 push r13
3824: ef 92 push r14
3826: ff 92 push r15
3828: 0f 93 push r16
382a: 1f 93 push r17
382c: 2f 93 push r18
382e: 3f 93 push r19
3830: 4f 93 push r20
3832: 5f 93 push r21
3834: 6f 93 push r22
3836: 7f 93 push r23
3838: 8f 93 push r24
383a: 9f 93 push r25
383c: af 93 push r26
383e: bf 93 push r27
3840: ef 93 push r30
3842: ff 93 push r31
static signed int subcount = 0;
static signed int gier1, roll1, nick1, nick_filter, roll_filter;
static signed int accy, accx;
static long tmpLuftdruck = 0;
static char messanzahl_Druck = 0;
switch(state++)
3844: 80 91 41 03 lds r24, 0x0341
3848: 91 e0 ldi r25, 0x01 ; 1
384a: 98 0f add r25, r24
384c: 90 93 41 03 sts 0x0341, r25
3850: 90 e0 ldi r25, 0x00 ; 0
3852: 82 31 cpi r24, 0x12 ; 18
3854: 91 05 cpc r25, r1
3856: 08 f0 brcs .+2 ; 0x385a <__vector_24+0x50>
3858: 5d c5 rjmp .+2746 ; 0x4314 <__stack+0x215>
385a: fc 01 movw r30, r24
385c: ea 5b subi r30, 0xBA ; 186
385e: ff 4f sbci r31, 0xFF ; 255
3860: 0c 94 a7 b1 jmp 0x1634e ; 0x1634e <__tablejump2__>
{
case 0:
nick1 = ADC;
3864: 80 91 78 00 lds r24, 0x0078
3868: 90 91 79 00 lds r25, 0x0079
386c: 90 93 40 03 sts 0x0340, r25
3870: 80 93 3f 03 sts 0x033F, r24
kanal = AD_ROLL;
3874: 81 e0 ldi r24, 0x01 ; 1
3876: 80 93 3e 03 sts 0x033E, r24
break;
387a: 51 c5 rjmp .+2722 ; 0x431e <__stack+0x21f>
case 1:
roll1 = ADC;
387c: 80 91 78 00 lds r24, 0x0078
3880: 90 91 79 00 lds r25, 0x0079
3884: 90 93 3d 03 sts 0x033D, r25
3888: 80 93 3c 03 sts 0x033C, r24
kanal = AD_GIER;
388c: 10 92 3e 03 sts 0x033E, r1
break;
3890: 46 c5 rjmp .+2700 ; 0x431e <__stack+0x21f>
case 2:
gier1 = ADC;
3892: 80 91 78 00 lds r24, 0x0078
3896: 90 91 79 00 lds r25, 0x0079
389a: 90 93 3b 03 sts 0x033B, r25
389e: 80 93 3a 03 sts 0x033A, r24
kanal = AD_ACC_Y;
38a2: 80 91 0b 01 lds r24, 0x010B
38a6: 80 93 3e 03 sts 0x033E, r24
break;
38aa: 39 c5 rjmp .+2674 ; 0x431e <__stack+0x21f>
case 3:
Aktuell_ay = NeutralAccY - ADC;
38ac: 20 91 78 00 lds r18, 0x0078
38b0: 30 91 79 00 lds r19, 0x0079
38b4: 80 91 4b 04 lds r24, 0x044B
38b8: 90 91 4c 04 lds r25, 0x044C
38bc: 82 1b sub r24, r18
38be: 93 0b sbc r25, r19
38c0: 90 93 05 05 sts 0x0505, r25
38c4: 80 93 04 05 sts 0x0504, r24
accy = Aktuell_ay;
38c8: 80 91 04 05 lds r24, 0x0504
38cc: 90 91 05 05 lds r25, 0x0505
38d0: 90 93 39 03 sts 0x0339, r25
38d4: 80 93 38 03 sts 0x0338, r24
kanal = AD_ACC_X;
38d8: 80 91 0a 01 lds r24, 0x010A
38dc: 80 93 3e 03 sts 0x033E, r24
break;
38e0: 1e c5 rjmp .+2620 ; 0x431e <__stack+0x21f>
case 4:
Aktuell_ax = ADC - NeutralAccX;
38e2: 80 91 78 00 lds r24, 0x0078
38e6: 90 91 79 00 lds r25, 0x0079
38ea: 20 91 4d 04 lds r18, 0x044D
38ee: 30 91 4e 04 lds r19, 0x044E
38f2: 82 1b sub r24, r18
38f4: 93 0b sbc r25, r19
38f6: 90 93 11 05 sts 0x0511, r25
38fa: 80 93 10 05 sts 0x0510, r24
accx = Aktuell_ax;
38fe: 80 91 10 05 lds r24, 0x0510
3902: 90 91 11 05 lds r25, 0x0511
3906: 90 93 37 03 sts 0x0337, r25
390a: 80 93 36 03 sts 0x0336, r24
kanal = AD_NICK;
390e: 82 e0 ldi r24, 0x02 ; 2
3910: 80 93 3e 03 sts 0x033E, r24
break;
3914: 04 c5 rjmp .+2568 ; 0x431e <__stack+0x21f>
case 5:
nick1 += ADC;
3916: 80 91 78 00 lds r24, 0x0078
391a: 90 91 79 00 lds r25, 0x0079
391e: 20 91 3f 03 lds r18, 0x033F
3922: 30 91 40 03 lds r19, 0x0340
3926: 82 0f add r24, r18
3928: 93 1f adc r25, r19
392a: 90 93 40 03 sts 0x0340, r25
392e: 80 93 3f 03 sts 0x033F, r24
kanal = AD_ROLL;
3932: 81 e0 ldi r24, 0x01 ; 1
3934: 80 93 3e 03 sts 0x033E, r24
break;
3938: f2 c4 rjmp .+2532 ; 0x431e <__stack+0x21f>
case 6:
roll1 += ADC;
393a: 80 91 78 00 lds r24, 0x0078
393e: 90 91 79 00 lds r25, 0x0079
3942: 20 91 3c 03 lds r18, 0x033C
3946: 30 91 3d 03 lds r19, 0x033D
394a: 82 0f add r24, r18
394c: 93 1f adc r25, r19
394e: 90 93 3d 03 sts 0x033D, r25
3952: 80 93 3c 03 sts 0x033C, r24
kanal = AD_UBAT;
3956: 84 e0 ldi r24, 0x04 ; 4
3958: 80 93 3e 03 sts 0x033E, r24
break;
395c: e0 c4 rjmp .+2496 ; 0x431e <__stack+0x21f>
case 7:
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(EE_Parameter.ExtraConfig & CFG_3_3V_REFERENCE) UBat = (3 * UBat + (11 * ADC) / 30) / 4; // there were some single FC2.1 with 3.3V reference
395e: 80 91 b8 05 lds r24, 0x05B8
3962: 83 ff sbrs r24, 3
3964: 29 c0 rjmp .+82 ; 0x39b8 <__vector_24+0x1ae>
3966: 40 91 1a 01 lds r20, 0x011A
396a: 50 91 1b 01 lds r21, 0x011B
396e: 80 91 78 00 lds r24, 0x0078
3972: 90 91 79 00 lds r25, 0x0079
3976: 6b e0 ldi r22, 0x0B ; 11
3978: 68 9f mul r22, r24
397a: 90 01 movw r18, r0
397c: 69 9f mul r22, r25
397e: 30 0d add r19, r0
3980: 11 24 eor r1, r1
3982: a9 e8 ldi r26, 0x89 ; 137
3984: b8 e8 ldi r27, 0x88 ; 136
3986: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
398a: 92 95 swap r25
398c: 82 95 swap r24
398e: 8f 70 andi r24, 0x0F ; 15
3990: 89 27 eor r24, r25
3992: 9f 70 andi r25, 0x0F ; 15
3994: 89 27 eor r24, r25
3996: 9a 01 movw r18, r20
3998: 22 0f add r18, r18
399a: 33 1f adc r19, r19
399c: 42 0f add r20, r18
399e: 53 1f adc r21, r19
39a0: 48 0f add r20, r24
39a2: 59 1f adc r21, r25
39a4: ca 01 movw r24, r20
39a6: 96 95 lsr r25
39a8: 87 95 ror r24
39aa: 96 95 lsr r25
39ac: 87 95 ror r24
39ae: 90 93 1b 01 sts 0x011B, r25
39b2: 80 93 1a 01 sts 0x011A, r24
39b6: 53 c0 rjmp .+166 ; 0x3a5e <__vector_24+0x254>
else
#endif
{
static unsigned int tmpVoltage = 0;
if(!tmpVoltage) tmpVoltage = (10 * ADC);
39b8: 80 91 34 03 lds r24, 0x0334
39bc: 90 91 35 03 lds r25, 0x0335
39c0: 89 2b or r24, r25
39c2: 99 f4 brne .+38 ; 0x39ea <__vector_24+0x1e0>
39c4: 80 91 78 00 lds r24, 0x0078
39c8: 90 91 79 00 lds r25, 0x0079
39cc: 9c 01 movw r18, r24
39ce: 22 0f add r18, r18
39d0: 33 1f adc r19, r19
39d2: 88 0f add r24, r24
39d4: 99 1f adc r25, r25
39d6: 88 0f add r24, r24
39d8: 99 1f adc r25, r25
39da: 88 0f add r24, r24
39dc: 99 1f adc r25, r25
39de: 82 0f add r24, r18
39e0: 93 1f adc r25, r19
39e2: 90 93 35 03 sts 0x0335, r25
39e6: 80 93 34 03 sts 0x0334, r24
if(tmpVoltage <= (10 * ADC)) tmpVoltage += 2; else tmpVoltage -= 2;
39ea: 20 91 78 00 lds r18, 0x0078
39ee: 30 91 79 00 lds r19, 0x0079
39f2: 80 91 34 03 lds r24, 0x0334
39f6: 90 91 35 03 lds r25, 0x0335
39fa: a9 01 movw r20, r18
39fc: 44 0f add r20, r20
39fe: 55 1f adc r21, r21
3a00: 22 0f add r18, r18
3a02: 33 1f adc r19, r19
3a04: 22 0f add r18, r18
3a06: 33 1f adc r19, r19
3a08: 22 0f add r18, r18
3a0a: 33 1f adc r19, r19
3a0c: 24 0f add r18, r20
3a0e: 35 1f adc r19, r21
3a10: 28 17 cp r18, r24
3a12: 39 07 cpc r19, r25
3a14: 30 f0 brcs .+12 ; 0x3a22 <__vector_24+0x218>
3a16: 02 96 adiw r24, 0x02 ; 2
3a18: 90 93 35 03 sts 0x0335, r25
3a1c: 80 93 34 03 sts 0x0334, r24
3a20: 05 c0 rjmp .+10 ; 0x3a2c <__vector_24+0x222>
3a22: 02 97 sbiw r24, 0x02 ; 2
3a24: 90 93 35 03 sts 0x0335, r25
3a28: 80 93 34 03 sts 0x0334, r24
UBat = tmpVoltage / 31;
3a2c: 40 91 34 03 lds r20, 0x0334
3a30: 50 91 35 03 lds r21, 0x0335
3a34: 9a 01 movw r18, r20
3a36: a3 e4 ldi r26, 0x43 ; 67
3a38: b8 e0 ldi r27, 0x08 ; 8
3a3a: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
3a3e: 48 1b sub r20, r24
3a40: 59 0b sbc r21, r25
3a42: 56 95 lsr r21
3a44: 47 95 ror r20
3a46: 84 0f add r24, r20
3a48: 95 1f adc r25, r21
3a4a: 92 95 swap r25
3a4c: 82 95 swap r24
3a4e: 8f 70 andi r24, 0x0F ; 15
3a50: 89 27 eor r24, r25
3a52: 9f 70 andi r25, 0x0F ; 15
3a54: 89 27 eor r24, r25
3a56: 90 93 1b 01 sts 0x011B, r25
3a5a: 80 93 1a 01 sts 0x011A, r24
}
kanal = AD_ACC_Z;
3a5e: 85 e0 ldi r24, 0x05 ; 5
3a60: 80 93 3e 03 sts 0x033E, r24
break;
3a64: 5c c4 rjmp .+2232 ; 0x431e <__stack+0x21f>
case 8:
Aktuell_az = ADC;
3a66: 80 91 78 00 lds r24, 0x0078
3a6a: 90 91 79 00 lds r25, 0x0079
3a6e: 90 93 07 05 sts 0x0507, r25
3a72: 80 93 06 05 sts 0x0506, r24
AdWertAccHoch = Aktuell_az - NeutralAccZ - (int) NeutralAccZfine;
3a76: 20 91 06 05 lds r18, 0x0506
3a7a: 30 91 07 05 lds r19, 0x0507
3a7e: 80 91 47 04 lds r24, 0x0447
3a82: 90 91 48 04 lds r25, 0x0448
3a86: 40 91 46 04 lds r20, 0x0446
3a8a: 28 1b sub r18, r24
3a8c: 39 0b sbc r19, r25
3a8e: 24 1b sub r18, r20
3a90: 31 09 sbc r19, r1
3a92: 47 fd sbrc r20, 7
3a94: 33 95 inc r19
3a96: 30 93 5c 03 sts 0x035C, r19
3a9a: 20 93 5b 03 sts 0x035B, r18
if(!ACC_AltitudeControl) // The Offset must be corrected, because of the ACC-Drift from vibrations
3a9e: 20 91 c2 03 lds r18, 0x03C2
3aa2: 21 11 cpse r18, r1
3aa4: 72 c0 rjmp .+228 ; 0x3b8a <__vector_24+0x380>
{
if(AdWertAccHoch > 1)
3aa6: 20 91 5b 03 lds r18, 0x035B
3aaa: 30 91 5c 03 lds r19, 0x035C
3aae: 22 30 cpi r18, 0x02 ; 2
3ab0: 31 05 cpc r19, r1
3ab2: 8c f1 brlt .+98 ; 0x3b16 <__vector_24+0x30c>
{
if(NeutralAccZ < 750)
3ab4: 8e 3e cpi r24, 0xEE ; 238
3ab6: 22 e0 ldi r18, 0x02 ; 2
3ab8: 92 07 cpc r25, r18
3aba: 0c f0 brlt .+2 ; 0x3abe <__vector_24+0x2b4>
3abc: ad c0 rjmp .+346 ; 0x3c18 <__vector_24+0x40e>
{
subcount += 5;
3abe: 20 91 32 03 lds r18, 0x0332
3ac2: 30 91 33 03 lds r19, 0x0333
3ac6: a9 01 movw r20, r18
3ac8: 4b 5f subi r20, 0xFB ; 251
3aca: 5f 4f sbci r21, 0xFF ; 255
3acc: 50 93 33 03 sts 0x0333, r21
3ad0: 40 93 32 03 sts 0x0332, r20
if(modell_fliegt < 500) subcount += 10;
3ad4: 40 91 cc 03 lds r20, 0x03CC
3ad8: 50 91 cd 03 lds r21, 0x03CD
3adc: 44 3f cpi r20, 0xF4 ; 244
3ade: 51 40 sbci r21, 0x01 ; 1
3ae0: 30 f4 brcc .+12 ; 0x3aee <__vector_24+0x2e4>
3ae2: 21 5f subi r18, 0xF1 ; 241
3ae4: 3f 4f sbci r19, 0xFF ; 255
3ae6: 30 93 33 03 sts 0x0333, r19
3aea: 20 93 32 03 sts 0x0332, r18
if(subcount > 100) { NeutralAccZ++; subcount -= 100;}
3aee: 20 91 32 03 lds r18, 0x0332
3af2: 30 91 33 03 lds r19, 0x0333
3af6: 25 36 cpi r18, 0x65 ; 101
3af8: 31 05 cpc r19, r1
3afa: 0c f4 brge .+2 ; 0x3afe <__vector_24+0x2f4>
3afc: 8d c0 rjmp .+282 ; 0x3c18 <__vector_24+0x40e>
3afe: 01 96 adiw r24, 0x01 ; 1
3b00: 90 93 48 04 sts 0x0448, r25
3b04: 80 93 47 04 sts 0x0447, r24
3b08: 24 56 subi r18, 0x64 ; 100
3b0a: 31 09 sbc r19, r1
3b0c: 30 93 33 03 sts 0x0333, r19
3b10: 20 93 32 03 sts 0x0332, r18
3b14: 81 c0 rjmp .+258 ; 0x3c18 <__vector_24+0x40e>
}
}
else if(AdWertAccHoch < -1)
3b16: 20 91 5b 03 lds r18, 0x035B
3b1a: 30 91 5c 03 lds r19, 0x035C
3b1e: 2f 3f cpi r18, 0xFF ; 255
3b20: 3f 4f sbci r19, 0xFF ; 255
3b22: 0c f0 brlt .+2 ; 0x3b26 <__vector_24+0x31c>
3b24: 79 c0 rjmp .+242 ; 0x3c18 <__vector_24+0x40e>
{
if(NeutralAccZ > 550)
3b26: 87 32 cpi r24, 0x27 ; 39
3b28: 22 e0 ldi r18, 0x02 ; 2
3b2a: 92 07 cpc r25, r18
3b2c: 0c f4 brge .+2 ; 0x3b30 <__vector_24+0x326>
3b2e: 74 c0 rjmp .+232 ; 0x3c18 <__vector_24+0x40e>
{
subcount -= 5;
3b30: 20 91 32 03 lds r18, 0x0332
3b34: 30 91 33 03 lds r19, 0x0333
3b38: a9 01 movw r20, r18
3b3a: 45 50 subi r20, 0x05 ; 5
3b3c: 51 09 sbc r21, r1
3b3e: 50 93 33 03 sts 0x0333, r21
3b42: 40 93 32 03 sts 0x0332, r20
if(modell_fliegt < 500) subcount -= 10;
3b46: 40 91 cc 03 lds r20, 0x03CC
3b4a: 50 91 cd 03 lds r21, 0x03CD
3b4e: 44 3f cpi r20, 0xF4 ; 244
3b50: 51 40 sbci r21, 0x01 ; 1
3b52: 30 f4 brcc .+12 ; 0x3b60 <__vector_24+0x356>
3b54: 2f 50 subi r18, 0x0F ; 15
3b56: 31 09 sbc r19, r1
3b58: 30 93 33 03 sts 0x0333, r19
3b5c: 20 93 32 03 sts 0x0332, r18
if(subcount < -100) { NeutralAccZ--; subcount += 100;}
3b60: 20 91 32 03 lds r18, 0x0332
3b64: 30 91 33 03 lds r19, 0x0333
3b68: 2c 39 cpi r18, 0x9C ; 156
3b6a: ef ef ldi r30, 0xFF ; 255
3b6c: 3e 07 cpc r19, r30
3b6e: 0c f0 brlt .+2 ; 0x3b72 <__vector_24+0x368>
3b70: 53 c0 rjmp .+166 ; 0x3c18 <__vector_24+0x40e>
3b72: 01 97 sbiw r24, 0x01 ; 1
3b74: 90 93 48 04 sts 0x0448, r25
3b78: 80 93 47 04 sts 0x0447, r24
3b7c: 2c 59 subi r18, 0x9C ; 156
3b7e: 3f 4f sbci r19, 0xFF ; 255
3b80: 30 93 33 03 sts 0x0333, r19
3b84: 20 93 32 03 sts 0x0332, r18
3b88: 47 c0 rjmp .+142 ; 0x3c18 <__vector_24+0x40e>
}
}
}
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
else
if(CosAttitude > 8192 - 50) // horizontal leveled within 6°
3b8a: 80 91 2d 06 lds r24, 0x062D
3b8e: 90 91 2e 06 lds r25, 0x062E
3b92: 8f 3c cpi r24, 0xCF ; 207
3b94: 9f 41 sbci r25, 0x1F ; 31
3b96: 0c f4 brge .+2 ; 0x3b9a <__vector_24+0x390>
3b98: 3f c0 rjmp .+126 ; 0x3c18 <__vector_24+0x40e>
{
if(AdWertAccHoch > 1)
3b9a: 80 91 5b 03 lds r24, 0x035B
3b9e: 90 91 5c 03 lds r25, 0x035C
3ba2: 02 97 sbiw r24, 0x02 ; 2
3ba4: cc f0 brlt .+50 ; 0x3bd8 <__vector_24+0x3ce>
{
if(++subcount > 5000)
3ba6: 20 91 32 03 lds r18, 0x0332
3baa: 30 91 33 03 lds r19, 0x0333
3bae: c9 01 movw r24, r18
3bb0: 01 96 adiw r24, 0x01 ; 1
3bb2: 90 93 33 03 sts 0x0333, r25
3bb6: 80 93 32 03 sts 0x0332, r24
3bba: 89 38 cpi r24, 0x89 ; 137
3bbc: 93 41 sbci r25, 0x13 ; 19
3bbe: 64 f1 brlt .+88 ; 0x3c18 <__vector_24+0x40e>
{
if(NeutralAccZfine < 6) NeutralAccZfine++;
3bc0: 46 30 cpi r20, 0x06 ; 6
3bc2: 1c f4 brge .+6 ; 0x3bca <__vector_24+0x3c0>
3bc4: 4f 5f subi r20, 0xFF ; 255
3bc6: 40 93 46 04 sts 0x0446, r20
subcount -= 5000;
3bca: 27 58 subi r18, 0x87 ; 135
3bcc: 33 41 sbci r19, 0x13 ; 19
3bce: 30 93 33 03 sts 0x0333, r19
3bd2: 20 93 32 03 sts 0x0332, r18
3bd6: 20 c0 rjmp .+64 ; 0x3c18 <__vector_24+0x40e>
}
}
else
if(AdWertAccHoch < -1)
3bd8: 80 91 5b 03 lds r24, 0x035B
3bdc: 90 91 5c 03 lds r25, 0x035C
3be0: 8f 3f cpi r24, 0xFF ; 255
3be2: 9f 4f sbci r25, 0xFF ; 255
3be4: cc f4 brge .+50 ; 0x3c18 <__vector_24+0x40e>
{
if(--subcount < -5000)
3be6: 80 91 32 03 lds r24, 0x0332
3bea: 90 91 33 03 lds r25, 0x0333
3bee: 9c 01 movw r18, r24
3bf0: 21 50 subi r18, 0x01 ; 1
3bf2: 31 09 sbc r19, r1
3bf4: 30 93 33 03 sts 0x0333, r19
3bf8: 20 93 32 03 sts 0x0332, r18
3bfc: 28 37 cpi r18, 0x78 ; 120
3bfe: 3c 4e sbci r19, 0xEC ; 236
3c00: 5c f4 brge .+22 ; 0x3c18 <__vector_24+0x40e>
{
if(NeutralAccZfine > -6) NeutralAccZfine--;
3c02: 4b 3f cpi r20, 0xFB ; 251
3c04: 1c f0 brlt .+6 ; 0x3c0c <__vector_24+0x402>
3c06: 41 50 subi r20, 0x01 ; 1
3c08: 40 93 46 04 sts 0x0446, r20
subcount += 5000;
3c0c: 89 57 subi r24, 0x79 ; 121
3c0e: 9c 4e sbci r25, 0xEC ; 236
3c10: 90 93 33 03 sts 0x0333, r25
3c14: 80 93 32 03 sts 0x0332, r24
}
}
}
#endif
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren
3c18: 80 91 5b 03 lds r24, 0x035B
3c1c: 90 91 5c 03 lds r25, 0x035C
3c20: 40 91 1e 04 lds r20, 0x041E
3c24: 50 91 1f 04 lds r21, 0x041F
3c28: 60 91 20 04 lds r22, 0x0420
3c2c: 70 91 21 04 lds r23, 0x0421
3c30: aa 27 eor r26, r26
3c32: 97 fd sbrc r25, 7
3c34: a0 95 com r26
3c36: ba 2f mov r27, r26
3c38: 84 0f add r24, r20
3c3a: 95 1f adc r25, r21
3c3c: a6 1f adc r26, r22
3c3e: b7 1f adc r27, r23
3c40: 80 93 1e 04 sts 0x041E, r24
3c44: 90 93 1f 04 sts 0x041F, r25
3c48: a0 93 20 04 sts 0x0420, r26
3c4c: b0 93 21 04 sts 0x0421, r27
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
3c50: c0 90 1e 04 lds r12, 0x041E
3c54: d0 90 1f 04 lds r13, 0x041F
3c58: e0 90 20 04 lds r14, 0x0420
3c5c: f0 90 21 04 lds r15, 0x0421
3c60: 80 91 1e 04 lds r24, 0x041E
3c64: 90 91 1f 04 lds r25, 0x041F
3c68: a0 91 20 04 lds r26, 0x0420
3c6c: b0 91 21 04 lds r27, 0x0421
3c70: bb 23 and r27, r27
3c72: 24 f4 brge .+8 ; 0x3c7c <__vector_24+0x472>
3c74: 81 50 subi r24, 0x01 ; 1
3c76: 9c 4f sbci r25, 0xFC ; 252
3c78: af 4f sbci r26, 0xFF ; 255
3c7a: bf 4f sbci r27, 0xFF ; 255
3c7c: ac 01 movw r20, r24
3c7e: bd 01 movw r22, r26
3c80: 03 2e mov r0, r19
3c82: 3a e0 ldi r19, 0x0A ; 10
3c84: 75 95 asr r23
3c86: 67 95 ror r22
3c88: 57 95 ror r21
3c8a: 47 95 ror r20
3c8c: 3a 95 dec r19
3c8e: d1 f7 brne .-12 ; 0x3c84 <__vector_24+0x47a>
3c90: 30 2d mov r19, r0
3c92: d7 01 movw r26, r14
3c94: c6 01 movw r24, r12
3c96: 84 1b sub r24, r20
3c98: 95 0b sbc r25, r21
3c9a: a6 0b sbc r26, r22
3c9c: b7 0b sbc r27, r23
3c9e: 80 93 1e 04 sts 0x041E, r24
3ca2: 90 93 1f 04 sts 0x041F, r25
3ca6: a0 93 20 04 sts 0x0420, r26
3caa: b0 93 21 04 sts 0x0421, r27
kanal = AD_DRUCK;
3cae: 83 e0 ldi r24, 0x03 ; 3
3cb0: 80 93 3e 03 sts 0x033E, r24
break;
3cb4: 34 c3 rjmp .+1640 ; 0x431e <__stack+0x21f>
// "case 9:" fehlt hier absichtlich
case 10:
nick1 += ADC;
3cb6: 80 91 78 00 lds r24, 0x0078
3cba: 90 91 79 00 lds r25, 0x0079
3cbe: 20 91 3f 03 lds r18, 0x033F
3cc2: 30 91 40 03 lds r19, 0x0340
3cc6: 82 0f add r24, r18
3cc8: 93 1f adc r25, r19
3cca: 90 93 40 03 sts 0x0340, r25
3cce: 80 93 3f 03 sts 0x033F, r24
kanal = AD_ROLL;
3cd2: 81 e0 ldi r24, 0x01 ; 1
3cd4: 80 93 3e 03 sts 0x033E, r24
break;
3cd8: 22 c3 rjmp .+1604 ; 0x431e <__stack+0x21f>
case 11:
roll1 += ADC;
3cda: 80 91 78 00 lds r24, 0x0078
3cde: 90 91 79 00 lds r25, 0x0079
3ce2: 20 91 3c 03 lds r18, 0x033C
3ce6: 30 91 3d 03 lds r19, 0x033D
3cea: 82 0f add r24, r18
3cec: 93 1f adc r25, r19
3cee: 90 93 3d 03 sts 0x033D, r25
3cf2: 80 93 3c 03 sts 0x033C, r24
kanal = AD_GIER;
3cf6: 10 92 3e 03 sts 0x033E, r1
break;
3cfa: 11 c3 rjmp .+1570 ; 0x431e <__stack+0x21f>
/* if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 1) / 2;
else
if(PlatinenVersion >= 20) AdWertGier = 2047 - (ADC + gier1);
else AdWertGier = (ADC + gier1);
*/
AdWertGier = 2047 - (ADC + gier1);
3cfc: 20 91 78 00 lds r18, 0x0078
3d00: 30 91 79 00 lds r19, 0x0079
3d04: 8f ef ldi r24, 0xFF ; 255
3d06: 97 e0 ldi r25, 0x07 ; 7
3d08: 82 1b sub r24, r18
3d0a: 93 0b sbc r25, r19
3d0c: 20 91 3a 03 lds r18, 0x033A
3d10: 30 91 3b 03 lds r19, 0x033B
3d14: 82 1b sub r24, r18
3d16: 93 0b sbc r25, r19
3d18: 90 93 62 03 sts 0x0362, r25
3d1c: 80 93 61 03 sts 0x0361, r24
kanal = AD_ACC_Y;
3d20: 80 91 0b 01 lds r24, 0x010B
3d24: 80 93 3e 03 sts 0x033E, r24
break;
3d28: fa c2 rjmp .+1524 ; 0x431e <__stack+0x21f>
case 13:
Aktuell_ay = NeutralAccY - ADC;
3d2a: 20 91 78 00 lds r18, 0x0078
3d2e: 30 91 79 00 lds r19, 0x0079
3d32: 80 91 4b 04 lds r24, 0x044B
3d36: 90 91 4c 04 lds r25, 0x044C
3d3a: 82 1b sub r24, r18
3d3c: 93 0b sbc r25, r19
3d3e: 90 93 05 05 sts 0x0505, r25
3d42: 80 93 04 05 sts 0x0504, r24
AdWertAccRoll = (Aktuell_ay + accy);
3d46: 20 91 04 05 lds r18, 0x0504
3d4a: 30 91 05 05 lds r19, 0x0505
3d4e: 80 91 38 03 lds r24, 0x0338
3d52: 90 91 39 03 lds r25, 0x0339
3d56: 82 0f add r24, r18
3d58: 93 1f adc r25, r19
3d5a: 90 93 60 03 sts 0x0360, r25
3d5e: 80 93 5f 03 sts 0x035F, r24
kanal = AD_ACC_X;
3d62: 80 91 0a 01 lds r24, 0x010A
3d66: 80 93 3e 03 sts 0x033E, r24
break;
3d6a: d9 c2 rjmp .+1458 ; 0x431e <__stack+0x21f>
case 14:
Aktuell_ax = ADC - NeutralAccX;
3d6c: 80 91 78 00 lds r24, 0x0078
3d70: 90 91 79 00 lds r25, 0x0079
3d74: 20 91 4d 04 lds r18, 0x044D
3d78: 30 91 4e 04 lds r19, 0x044E
3d7c: 82 1b sub r24, r18
3d7e: 93 0b sbc r25, r19
3d80: 90 93 11 05 sts 0x0511, r25
3d84: 80 93 10 05 sts 0x0510, r24
AdWertAccNick = (Aktuell_ax + accx);
3d88: 20 91 10 05 lds r18, 0x0510
3d8c: 30 91 11 05 lds r19, 0x0511
3d90: 80 91 36 03 lds r24, 0x0336
3d94: 90 91 37 03 lds r25, 0x0337
3d98: 82 0f add r24, r18
3d9a: 93 1f adc r25, r19
3d9c: 90 93 5e 03 sts 0x035E, r25
3da0: 80 93 5d 03 sts 0x035D, r24
kanal = AD_NICK;
3da4: 82 e0 ldi r24, 0x02 ; 2
3da6: 80 93 3e 03 sts 0x033E, r24
break;
3daa: b9 c2 rjmp .+1394 ; 0x431e <__stack+0x21f>
case 15:
nick1 += ADC;
3dac: 20 91 78 00 lds r18, 0x0078
3db0: 30 91 79 00 lds r19, 0x0079
3db4: 80 91 3f 03 lds r24, 0x033F
3db8: 90 91 40 03 lds r25, 0x0340
3dbc: 82 0f add r24, r18
3dbe: 93 1f adc r25, r19
//if(PlatinenVersion == 10) nick1 *= 2; else
nick1 *= 4;
3dc0: 88 0f add r24, r24
3dc2: 99 1f adc r25, r25
3dc4: 88 0f add r24, r24
3dc6: 99 1f adc r25, r25
3dc8: 90 93 40 03 sts 0x0340, r25
3dcc: 80 93 3f 03 sts 0x033F, r24
AdWertNick = nick1 / 8;
3dd0: 9c 01 movw r18, r24
3dd2: 99 23 and r25, r25
3dd4: 14 f4 brge .+4 ; 0x3dda <__vector_24+0x5d0>
3dd6: 29 5f subi r18, 0xF9 ; 249
3dd8: 3f 4f sbci r19, 0xFF ; 255
3dda: 35 95 asr r19
3ddc: 27 95 ror r18
3dde: 35 95 asr r19
3de0: 27 95 ror r18
3de2: 35 95 asr r19
3de4: 27 95 ror r18
3de6: 30 93 66 03 sts 0x0366, r19
3dea: 20 93 65 03 sts 0x0365, r18
nick_filter = (nick_filter + nick1) / 2;
3dee: 20 91 30 03 lds r18, 0x0330
3df2: 30 91 31 03 lds r19, 0x0331
3df6: 82 0f add r24, r18
3df8: 93 1f adc r25, r19
3dfa: 99 23 and r25, r25
3dfc: 0c f4 brge .+2 ; 0x3e00 <__vector_24+0x5f6>
3dfe: 01 96 adiw r24, 0x01 ; 1
3e00: 95 95 asr r25
3e02: 87 95 ror r24
3e04: 90 93 31 03 sts 0x0331, r25
3e08: 80 93 30 03 sts 0x0330, r24
HiResNick = nick_filter - AdNeutralNick;
3e0c: 20 91 57 04 lds r18, 0x0457
3e10: 30 91 58 04 lds r19, 0x0458
3e14: 82 1b sub r24, r18
3e16: 93 0b sbc r25, r19
3e18: 90 93 19 01 sts 0x0119, r25
3e1c: 80 93 18 01 sts 0x0118, r24
AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2;
3e20: 20 91 69 03 lds r18, 0x0369
3e24: 30 91 6a 03 lds r19, 0x036A
3e28: 80 91 18 01 lds r24, 0x0118
3e2c: 90 91 19 01 lds r25, 0x0119
3e30: 82 0f add r24, r18
3e32: 93 1f adc r25, r19
3e34: 99 23 and r25, r25
3e36: 0c f4 brge .+2 ; 0x3e3a <__vector_24+0x630>
3e38: 01 96 adiw r24, 0x01 ; 1
3e3a: 95 95 asr r25
3e3c: 87 95 ror r24
3e3e: 90 93 6a 03 sts 0x036A, r25
3e42: 80 93 69 03 sts 0x0369, r24
kanal = AD_ROLL;
3e46: 81 e0 ldi r24, 0x01 ; 1
3e48: 80 93 3e 03 sts 0x033E, r24
break;
3e4c: 68 c2 rjmp .+1232 ; 0x431e <__stack+0x21f>
case 16:
roll1 += ADC;
3e4e: 20 91 78 00 lds r18, 0x0078
3e52: 30 91 79 00 lds r19, 0x0079
3e56: 80 91 3c 03 lds r24, 0x033C
3e5a: 90 91 3d 03 lds r25, 0x033D
3e5e: 82 0f add r24, r18
3e60: 93 1f adc r25, r19
//if(PlatinenVersion == 10) roll1 *= 2; else
roll1 *= 4;
3e62: 88 0f add r24, r24
3e64: 99 1f adc r25, r25
3e66: 88 0f add r24, r24
3e68: 99 1f adc r25, r25
3e6a: 90 93 3d 03 sts 0x033D, r25
3e6e: 80 93 3c 03 sts 0x033C, r24
AdWertRoll = roll1 / 8;
3e72: 9c 01 movw r18, r24
3e74: 99 23 and r25, r25
3e76: 14 f4 brge .+4 ; 0x3e7c <__vector_24+0x672>
3e78: 29 5f subi r18, 0xF9 ; 249
3e7a: 3f 4f sbci r19, 0xFF ; 255
3e7c: 35 95 asr r19
3e7e: 27 95 ror r18
3e80: 35 95 asr r19
3e82: 27 95 ror r18
3e84: 35 95 asr r19
3e86: 27 95 ror r18
3e88: 30 93 64 03 sts 0x0364, r19
3e8c: 20 93 63 03 sts 0x0363, r18
roll_filter = (roll_filter + roll1) / 2;
3e90: 20 91 2e 03 lds r18, 0x032E
3e94: 30 91 2f 03 lds r19, 0x032F
3e98: 82 0f add r24, r18
3e9a: 93 1f adc r25, r19
3e9c: 99 23 and r25, r25
3e9e: 0c f4 brge .+2 ; 0x3ea2 <__vector_24+0x698>
3ea0: 01 96 adiw r24, 0x01 ; 1
3ea2: 95 95 asr r25
3ea4: 87 95 ror r24
3ea6: 90 93 2f 03 sts 0x032F, r25
3eaa: 80 93 2e 03 sts 0x032E, r24
HiResRoll = roll_filter - AdNeutralRoll;
3eae: 20 91 55 04 lds r18, 0x0455
3eb2: 30 91 56 04 lds r19, 0x0456
3eb6: 82 1b sub r24, r18
3eb8: 93 0b sbc r25, r19
3eba: 90 93 17 01 sts 0x0117, r25
3ebe: 80 93 16 01 sts 0x0116, r24
AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2;
3ec2: 20 91 67 03 lds r18, 0x0367
3ec6: 30 91 68 03 lds r19, 0x0368
3eca: 80 91 16 01 lds r24, 0x0116
3ece: 90 91 17 01 lds r25, 0x0117
3ed2: 82 0f add r24, r18
3ed4: 93 1f adc r25, r19
3ed6: 99 23 and r25, r25
3ed8: 0c f4 brge .+2 ; 0x3edc <__vector_24+0x6d2>
3eda: 01 96 adiw r24, 0x01 ; 1
3edc: 95 95 asr r25
3ede: 87 95 ror r24
3ee0: 90 93 68 03 sts 0x0368, r25
3ee4: 80 93 67 03 sts 0x0367, r24
kanal = AD_DRUCK;
3ee8: 83 e0 ldi r24, 0x03 ; 3
3eea: 80 93 3e 03 sts 0x033E, r24
break;
3eee: 17 c2 rjmp .+1070 ; 0x431e <__stack+0x21f>
case 17:
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(ACC_AltitudeControl)
3ef0: 80 91 c2 03 lds r24, 0x03C2
3ef4: 88 23 and r24, r24
3ef6: 11 f1 breq .+68 ; 0x3f3c <__vector_24+0x732>
{
HoehenWertF_Mess = (ACC_AltitudeFusion(0) + SA_FILTER/2)/SA_FILTER; // cm
3ef8: 80 e0 ldi r24, 0x00 ; 0
3efa: 0e 94 a0 16 call 0x2d40 ; 0x2d40 <ACC_AltitudeFusion>
3efe: ab 01 movw r20, r22
3f00: bc 01 movw r22, r24
3f02: 5f 5f subi r21, 0xFF ; 255
3f04: 6f 4f sbci r22, 0xFF ; 255
3f06: 7f 4f sbci r23, 0xFF ; 255
3f08: db 01 movw r26, r22
3f0a: ca 01 movw r24, r20
3f0c: 77 23 and r23, r23
3f0e: 24 f4 brge .+8 ; 0x3f18 <__vector_24+0x70e>
3f10: 81 50 subi r24, 0x01 ; 1
3f12: 9e 4f sbci r25, 0xFE ; 254
3f14: af 4f sbci r26, 0xFF ; 255
3f16: bf 4f sbci r27, 0xFF ; 255
3f18: 07 2e mov r0, r23
3f1a: 79 e0 ldi r23, 0x09 ; 9
3f1c: b5 95 asr r27
3f1e: a7 95 ror r26
3f20: 97 95 ror r25
3f22: 87 95 ror r24
3f24: 7a 95 dec r23
3f26: d1 f7 brne .-12 ; 0x3f1c <__vector_24+0x712>
3f28: 70 2d mov r23, r0
3f2a: 80 93 42 03 sts 0x0342, r24
3f2e: 90 93 43 03 sts 0x0343, r25
3f32: a0 93 44 03 sts 0x0344, r26
3f36: b0 93 45 03 sts 0x0345, r27
3f3a: 10 c0 rjmp .+32 ; 0x3f5c <__vector_24+0x752>
}
else HoehenWertF_Mess = HoehenWert;
3f3c: 80 91 fe 03 lds r24, 0x03FE
3f40: 90 91 ff 03 lds r25, 0x03FF
3f44: a0 91 00 04 lds r26, 0x0400
3f48: b0 91 01 04 lds r27, 0x0401
3f4c: 80 93 42 03 sts 0x0342, r24
3f50: 90 93 43 03 sts 0x0343, r25
3f54: a0 93 44 03 sts 0x0344, r26
3f58: b0 93 45 03 sts 0x0345, r27
#endif
state = 0;
3f5c: 10 92 41 03 sts 0x0341, r1
AdReady = 1;
3f60: 81 e0 ldi r24, 0x01 ; 1
3f62: 80 93 0f 01 sts 0x010F, r24
ZaehlMessungen++;
3f66: 80 91 52 03 lds r24, 0x0352
3f6a: 90 91 53 03 lds r25, 0x0353
3f6e: 01 96 adiw r24, 0x01 ; 1
3f70: 90 93 53 03 sts 0x0353, r25
3f74: 80 93 52 03 sts 0x0352, r24
// "break" fehlt hier absichtlich
case 9:
MessLuftdruck = ADC;
3f78: 80 91 78 00 lds r24, 0x0078
3f7c: 90 91 79 00 lds r25, 0x0079
3f80: 90 93 11 01 sts 0x0111, r25
3f84: 80 93 10 01 sts 0x0110, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(ACC_AltitudeControl)
3f88: 80 91 c2 03 lds r24, 0x03C2
3f8c: 88 23 and r24, r24
3f8e: 09 f4 brne .+2 ; 0x3f92 <__vector_24+0x788>
3f90: 6e c0 rjmp .+220 ; 0x406e <__vector_24+0x864>
{
// ExpandBaroStep = BaroStep * (long)ExpandBaro; // wird in fc.c aufgerufen
// tmpLuftdruck = MessLuftdruck - BaroStep * (long)ExpandBaro; // -523 counts per offset step
tmpLuftdruck = MessLuftdruck - ExpandBaroStep; // -523 counts per offset step
3f92: c0 90 10 01 lds r12, 0x0110
3f96: d0 90 11 01 lds r13, 0x0111
3f9a: e1 2c mov r14, r1
3f9c: f1 2c mov r15, r1
3f9e: 80 91 4e 03 lds r24, 0x034E
3fa2: 90 91 4f 03 lds r25, 0x034F
3fa6: a0 91 50 03 lds r26, 0x0350
3faa: b0 91 51 03 lds r27, 0x0351
3fae: c8 1a sub r12, r24
3fb0: d9 0a sbc r13, r25
3fb2: ea 0a sbc r14, r26
3fb4: fb 0a sbc r15, r27
3fb6: c0 92 2a 03 sts 0x032A, r12
3fba: d0 92 2b 03 sts 0x032B, r13
3fbe: e0 92 2c 03 sts 0x032C, r14
3fc2: f0 92 2d 03 sts 0x032D, r15
Luftdruck -= Luftdruck / CalAthmospheare; // 16
3fc6: 80 90 12 01 lds r8, 0x0112
3fca: 90 90 13 01 lds r9, 0x0113
3fce: a0 90 14 01 lds r10, 0x0114
3fd2: b0 90 15 01 lds r11, 0x0115
3fd6: 60 91 12 01 lds r22, 0x0112
3fda: 70 91 13 01 lds r23, 0x0113
3fde: 80 91 14 01 lds r24, 0x0114
3fe2: 90 91 15 01 lds r25, 0x0115
3fe6: 20 91 0c 01 lds r18, 0x010C
3fea: 30 e0 ldi r19, 0x00 ; 0
3fec: 40 e0 ldi r20, 0x00 ; 0
3fee: 50 e0 ldi r21, 0x00 ; 0
3ff0: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
3ff4: 82 1a sub r8, r18
3ff6: 93 0a sbc r9, r19
3ff8: a4 0a sbc r10, r20
3ffa: b5 0a sbc r11, r21
3ffc: 80 92 12 01 sts 0x0112, r8
4000: 90 92 13 01 sts 0x0113, r9
4004: a0 92 14 01 sts 0x0114, r10
4008: b0 92 15 01 sts 0x0115, r11
Luftdruck += tmpLuftdruck;
400c: 80 91 12 01 lds r24, 0x0112
4010: 90 91 13 01 lds r25, 0x0113
4014: a0 91 14 01 lds r26, 0x0114
4018: b0 91 15 01 lds r27, 0x0115
401c: c8 0e add r12, r24
401e: d9 1e adc r13, r25
4020: ea 1e adc r14, r26
4022: fb 1e adc r15, r27
4024: c0 92 12 01 sts 0x0112, r12
4028: d0 92 13 01 sts 0x0113, r13
402c: e0 92 14 01 sts 0x0114, r14
4030: f0 92 15 01 sts 0x0115, r15
HoehenWert_Mess = StartLuftdruck - Luftdruck; // cm
4034: 80 91 08 05 lds r24, 0x0508
4038: 90 91 09 05 lds r25, 0x0509
403c: a0 91 0a 05 lds r26, 0x050A
4040: b0 91 0b 05 lds r27, 0x050B
4044: 40 91 12 01 lds r20, 0x0112
4048: 50 91 13 01 lds r21, 0x0113
404c: 60 91 14 01 lds r22, 0x0114
4050: 70 91 15 01 lds r23, 0x0115
4054: 84 1b sub r24, r20
4056: 95 0b sbc r25, r21
4058: a6 0b sbc r26, r22
405a: b7 0b sbc r27, r23
405c: 80 93 46 03 sts 0x0346, r24
4060: 90 93 47 03 sts 0x0347, r25
4064: a0 93 48 03 sts 0x0348, r26
4068: b0 93 49 03 sts 0x0349, r27
406c: 4f c1 rjmp .+670 ; 0x430c <__stack+0x20d>
}
else
#endif
{ // old version (until FC V2.1)
tmpLuftdruck += MessLuftdruck;
406e: 20 91 10 01 lds r18, 0x0110
4072: 30 91 11 01 lds r19, 0x0111
4076: 80 91 2a 03 lds r24, 0x032A
407a: 90 91 2b 03 lds r25, 0x032B
407e: a0 91 2c 03 lds r26, 0x032C
4082: b0 91 2d 03 lds r27, 0x032D
4086: 82 0f add r24, r18
4088: 93 1f adc r25, r19
408a: a1 1d adc r26, r1
408c: b1 1d adc r27, r1
408e: 80 93 2a 03 sts 0x032A, r24
4092: 90 93 2b 03 sts 0x032B, r25
4096: a0 93 2c 03 sts 0x032C, r26
409a: b0 93 2d 03 sts 0x032D, r27
if(++messanzahl_Druck >= 16) // war bis 0.86 "18"
409e: 20 91 29 03 lds r18, 0x0329
40a2: 2f 5f subi r18, 0xFF ; 255
40a4: 20 93 29 03 sts 0x0329, r18
40a8: 20 31 cpi r18, 0x10 ; 16
40aa: 08 f4 brcc .+2 ; 0x40ae <__vector_24+0x8a4>
40ac: 2f c1 rjmp .+606 ; 0x430c <__stack+0x20d>
{
signed int tmp;
// Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * BaroStep) * (long)ExpandBaro + 4) / 8; // -523.19 counts per 10 counts offset step
// ExpandBaroStep = (16 * BaroStep) * (long)ExpandBaro - 4; // wird in fc.c aufgerufen
Luftdruck = (7 * Luftdruck + tmpLuftdruck - ExpandBaroStep) / 8; // -523.19 counts per 10 counts offset step
40ae: 40 91 12 01 lds r20, 0x0112
40b2: 50 91 13 01 lds r21, 0x0113
40b6: 60 91 14 01 lds r22, 0x0114
40ba: 70 91 15 01 lds r23, 0x0115
40be: 6a 01 movw r12, r20
40c0: 7b 01 movw r14, r22
40c2: cc 0c add r12, r12
40c4: dd 1c adc r13, r13
40c6: ee 1c adc r14, r14
40c8: ff 1c adc r15, r15
40ca: cc 0c add r12, r12
40cc: dd 1c adc r13, r13
40ce: ee 1c adc r14, r14
40d0: ff 1c adc r15, r15
40d2: cc 0c add r12, r12
40d4: dd 1c adc r13, r13
40d6: ee 1c adc r14, r14
40d8: ff 1c adc r15, r15
40da: c4 1a sub r12, r20
40dc: d5 0a sbc r13, r21
40de: e6 0a sbc r14, r22
40e0: f7 0a sbc r15, r23
40e2: c8 0e add r12, r24
40e4: d9 1e adc r13, r25
40e6: ea 1e adc r14, r26
40e8: fb 1e adc r15, r27
40ea: 40 91 4e 03 lds r20, 0x034E
40ee: 50 91 4f 03 lds r21, 0x034F
40f2: 60 91 50 03 lds r22, 0x0350
40f6: 70 91 51 03 lds r23, 0x0351
40fa: c4 1a sub r12, r20
40fc: d5 0a sbc r13, r21
40fe: e6 0a sbc r14, r22
4100: f7 0a sbc r15, r23
4102: b7 01 movw r22, r14
4104: a6 01 movw r20, r12
4106: 22 f4 brpl .+8 ; 0x4110 <__stack+0x11>
4108: 49 5f subi r20, 0xF9 ; 249
410a: 5f 4f sbci r21, 0xFF ; 255
410c: 6f 4f sbci r22, 0xFF ; 255
410e: 7f 4f sbci r23, 0xFF ; 255
4110: 68 94 set
4112: 12 f8 bld r1, 2
4114: 75 95 asr r23
4116: 67 95 ror r22
4118: 57 95 ror r21
411a: 47 95 ror r20
411c: 16 94 lsr r1
411e: d1 f7 brne .-12 ; 0x4114 <__stack+0x15>
4120: 40 93 12 01 sts 0x0112, r20
4124: 50 93 13 01 sts 0x0113, r21
4128: 60 93 14 01 sts 0x0114, r22
412c: 70 93 15 01 sts 0x0115, r23
HoehenWert_Mess = StartLuftdruck - Luftdruck;
4130: 40 91 08 05 lds r20, 0x0508
4134: 50 91 09 05 lds r21, 0x0509
4138: 60 91 0a 05 lds r22, 0x050A
413c: 70 91 0b 05 lds r23, 0x050B
4140: 00 91 12 01 lds r16, 0x0112
4144: 10 91 13 01 lds r17, 0x0113
4148: 20 91 14 01 lds r18, 0x0114
414c: 30 91 15 01 lds r19, 0x0115
4150: 40 1b sub r20, r16
4152: 51 0b sbc r21, r17
4154: 62 0b sbc r22, r18
4156: 73 0b sbc r23, r19
4158: 40 93 46 03 sts 0x0346, r20
415c: 50 93 47 03 sts 0x0347, r21
4160: 60 93 48 03 sts 0x0348, r22
4164: 70 93 49 03 sts 0x0349, r23
SummenHoehe -= SummenHoehe/SM_FILTER;
4168: 00 91 57 03 lds r16, 0x0357
416c: 10 91 58 03 lds r17, 0x0358
4170: 20 91 59 03 lds r18, 0x0359
4174: 30 91 5a 03 lds r19, 0x035A
4178: c0 90 57 03 lds r12, 0x0357
417c: d0 90 58 03 lds r13, 0x0358
4180: e0 90 59 03 lds r14, 0x0359
4184: f0 90 5a 03 lds r15, 0x035A
4188: ff 20 and r15, r15
418a: 2c f4 brge .+10 ; 0x4196 <__stack+0x97>
418c: ef e0 ldi r30, 0x0F ; 15
418e: ce 0e add r12, r30
4190: d1 1c adc r13, r1
4192: e1 1c adc r14, r1
4194: f1 1c adc r15, r1
4196: 46 01 movw r8, r12
4198: 57 01 movw r10, r14
419a: 68 94 set
419c: 13 f8 bld r1, 3
419e: b5 94 asr r11
41a0: a7 94 ror r10
41a2: 97 94 ror r9
41a4: 87 94 ror r8
41a6: 16 94 lsr r1
41a8: d1 f7 brne .-12 ; 0x419e <__stack+0x9f>
41aa: 68 01 movw r12, r16
41ac: 79 01 movw r14, r18
41ae: c8 18 sub r12, r8
41b0: d9 08 sbc r13, r9
41b2: ea 08 sbc r14, r10
41b4: fb 08 sbc r15, r11
41b6: c0 92 57 03 sts 0x0357, r12
41ba: d0 92 58 03 sts 0x0358, r13
41be: e0 92 59 03 sts 0x0359, r14
41c2: f0 92 5a 03 sts 0x035A, r15
SummenHoehe += HoehenWert_Mess;
41c6: c0 90 57 03 lds r12, 0x0357
41ca: d0 90 58 03 lds r13, 0x0358
41ce: e0 90 59 03 lds r14, 0x0359
41d2: f0 90 5a 03 lds r15, 0x035A
41d6: c4 0e add r12, r20
41d8: d5 1e adc r13, r21
41da: e6 1e adc r14, r22
41dc: f7 1e adc r15, r23
41de: c0 92 57 03 sts 0x0357, r12
41e2: d0 92 58 03 sts 0x0358, r13
41e6: e0 92 59 03 sts 0x0359, r14
41ea: f0 92 5a 03 sts 0x035A, r15
tmp = (HoehenWert_Mess - SummenHoehe/SM_FILTER);
41ee: c0 90 57 03 lds r12, 0x0357
41f2: d0 90 58 03 lds r13, 0x0358
41f6: e0 90 59 03 lds r14, 0x0359
41fa: f0 90 5a 03 lds r15, 0x035A
41fe: ff 20 and r15, r15
4200: 2c f4 brge .+10 ; 0x420c <__stack+0x10d>
4202: 2f e0 ldi r18, 0x0F ; 15
4204: c2 0e add r12, r18
4206: d1 1c adc r13, r1
4208: e1 1c adc r14, r1
420a: f1 1c adc r15, r1
420c: 68 94 set
420e: 13 f8 bld r1, 3
4210: f5 94 asr r15
4212: e7 94 ror r14
4214: d7 94 ror r13
4216: c7 94 ror r12
4218: 16 94 lsr r1
421a: d1 f7 brne .-12 ; 0x4210 <__stack+0x111>
421c: 4c 19 sub r20, r12
421e: 5d 09 sbc r21, r13
4220: 41 15 cp r20, r1
4222: 6c ef ldi r22, 0xFC ; 252
4224: 56 07 cpc r21, r22
4226: 14 f4 brge .+4 ; 0x422c <__stack+0x12d>
4228: 40 e0 ldi r20, 0x00 ; 0
422a: 5c ef ldi r21, 0xFC ; 252
422c: 41 30 cpi r20, 0x01 ; 1
422e: e4 e0 ldi r30, 0x04 ; 4
4230: 5e 07 cpc r21, r30
4232: 14 f0 brlt .+4 ; 0x4238 <__stack+0x139>
4234: 40 e0 ldi r20, 0x00 ; 0
4236: 54 e0 ldi r21, 0x04 ; 4
if(tmp > 1024) tmp = 1024; else if(tmp < -1024) tmp = -1024;
if(abs(VarioMeter) > 700) VarioMeter = (15 * VarioMeter + 8 * tmp)/16;
4238: 20 91 54 03 lds r18, 0x0354
423c: 30 91 55 03 lds r19, 0x0355
4240: 33 23 and r19, r19
4242: 1c f4 brge .+6 ; 0x424a <__stack+0x14b>
4244: 31 95 neg r19
4246: 21 95 neg r18
4248: 31 09 sbc r19, r1
424a: 2d 3b cpi r18, 0xBD ; 189
424c: 32 40 sbci r19, 0x02 ; 2
424e: 1c f1 brlt .+70 ; 0x4296 <__stack+0x197>
4250: 60 91 54 03 lds r22, 0x0354
4254: 70 91 55 03 lds r23, 0x0355
4258: ef e0 ldi r30, 0x0F ; 15
425a: e6 9f mul r30, r22
425c: 90 01 movw r18, r0
425e: e7 9f mul r30, r23
4260: 30 0d add r19, r0
4262: 11 24 eor r1, r1
4264: 44 0f add r20, r20
4266: 55 1f adc r21, r21
4268: 44 0f add r20, r20
426a: 55 1f adc r21, r21
426c: 44 0f add r20, r20
426e: 55 1f adc r21, r21
4270: 42 0f add r20, r18
4272: 53 1f adc r21, r19
4274: 55 23 and r21, r21
4276: 14 f4 brge .+4 ; 0x427c <__stack+0x17d>
4278: 41 5f subi r20, 0xF1 ; 241
427a: 5f 4f sbci r21, 0xFF ; 255
427c: 55 95 asr r21
427e: 47 95 ror r20
4280: 55 95 asr r21
4282: 47 95 ror r20
4284: 55 95 asr r21
4286: 47 95 ror r20
4288: 55 95 asr r21
428a: 47 95 ror r20
428c: 50 93 55 03 sts 0x0355, r21
4290: 40 93 54 03 sts 0x0354, r20
4294: 24 c0 rjmp .+72 ; 0x42de <__stack+0x1df>
else VarioMeter = (31 * VarioMeter + 8 * tmp)/32;
4296: 60 91 54 03 lds r22, 0x0354
429a: 70 91 55 03 lds r23, 0x0355
429e: ef e1 ldi r30, 0x1F ; 31
42a0: e6 9f mul r30, r22
42a2: 90 01 movw r18, r0
42a4: e7 9f mul r30, r23
42a6: 30 0d add r19, r0
42a8: 11 24 eor r1, r1
42aa: 44 0f add r20, r20
42ac: 55 1f adc r21, r21
42ae: 44 0f add r20, r20
42b0: 55 1f adc r21, r21
42b2: 44 0f add r20, r20
42b4: 55 1f adc r21, r21
42b6: 42 0f add r20, r18
42b8: 53 1f adc r21, r19
42ba: 55 23 and r21, r21
42bc: 14 f4 brge .+4 ; 0x42c2 <__stack+0x1c3>
42be: 41 5e subi r20, 0xE1 ; 225
42c0: 5f 4f sbci r21, 0xFF ; 255
42c2: 55 95 asr r21
42c4: 47 95 ror r20
42c6: 55 95 asr r21
42c8: 47 95 ror r20
42ca: 55 95 asr r21
42cc: 47 95 ror r20
42ce: 55 95 asr r21
42d0: 47 95 ror r20
42d2: 55 95 asr r21
42d4: 47 95 ror r20
42d6: 50 93 55 03 sts 0x0355, r21
42da: 40 93 54 03 sts 0x0354, r20
tmpLuftdruck /= 2;
42de: ac 01 movw r20, r24
42e0: bd 01 movw r22, r26
42e2: bb 23 and r27, r27
42e4: 24 f4 brge .+8 ; 0x42ee <__stack+0x1ef>
42e6: 4f 5f subi r20, 0xFF ; 255
42e8: 5f 4f sbci r21, 0xFF ; 255
42ea: 6f 4f sbci r22, 0xFF ; 255
42ec: 7f 4f sbci r23, 0xFF ; 255
42ee: 75 95 asr r23
42f0: 67 95 ror r22
42f2: 57 95 ror r21
42f4: 47 95 ror r20
42f6: 40 93 2a 03 sts 0x032A, r20
42fa: 50 93 2b 03 sts 0x032B, r21
42fe: 60 93 2c 03 sts 0x032C, r22
4302: 70 93 2d 03 sts 0x032D, r23
messanzahl_Druck = 16/2;
4306: 88 e0 ldi r24, 0x08 ; 8
4308: 80 93 29 03 sts 0x0329, r24
}
}
kanal = AD_NICK;
430c: 82 e0 ldi r24, 0x02 ; 2
430e: 80 93 3e 03 sts 0x033E, r24
break;
4312: 05 c0 rjmp .+10 ; 0x431e <__stack+0x21f>
default:
kanal = 0; state = 0; kanal = AD_NICK;
4314: 10 92 41 03 sts 0x0341, r1
4318: 82 e0 ldi r24, 0x02 ; 2
431a: 80 93 3e 03 sts 0x033E, r24
break;
}
ADMUX = kanal;
431e: 80 91 3e 03 lds r24, 0x033E
4322: 80 93 7c 00 sts 0x007C, r24
if(state != 0) ANALOG_ON;
4326: 80 91 41 03 lds r24, 0x0341
432a: 88 23 and r24, r24
432c: 19 f0 breq .+6 ; 0x4334 <__stack+0x235>
432e: 8f ec ldi r24, 0xCF ; 207
4330: 80 93 7a 00 sts 0x007A, r24
}
4334: ff 91 pop r31
4336: ef 91 pop r30
4338: bf 91 pop r27
433a: af 91 pop r26
433c: 9f 91 pop r25
433e: 8f 91 pop r24
4340: 7f 91 pop r23
4342: 6f 91 pop r22
4344: 5f 91 pop r21
4346: 4f 91 pop r20
4348: 3f 91 pop r19
434a: 2f 91 pop r18
434c: 1f 91 pop r17
434e: 0f 91 pop r16
4350: ff 90 pop r15
4352: ef 90 pop r14
4354: df 90 pop r13
4356: cf 90 pop r12
4358: bf 90 pop r11
435a: af 90 pop r10
435c: 9f 90 pop r9
435e: 8f 90 pop r8
4360: 0f 90 pop r0
4362: 0b be out 0x3b, r0 ; 59
4364: 0f 90 pop r0
4366: 0f be out 0x3f, r0 ; 63
4368: 0f 90 pop r0
436a: 1f 90 pop r1
436c: 18 95 reti
0000436e <Capacity_Init>:
Capacity_t Capacity;
// initialize capacity calculation
void Capacity_Init(void)
{
Capacity.ActualCurrent = 0;
436e: 10 92 16 05 sts 0x0516, r1
4372: 10 92 15 05 sts 0x0515, r1
Capacity.UsedCapacity = 0;
4376: 10 92 1a 05 sts 0x051A, r1
437a: 10 92 19 05 sts 0x0519, r1
Capacity.ActualPower = 0;
437e: 10 92 18 05 sts 0x0518, r1
4382: 10 92 17 05 sts 0x0517, r1
Capacity.MinOfMaxPWM = 0;
4386: 10 92 1b 05 sts 0x051B, r1
update_timer = SetDelay(CAPACITY_UPDATE_INTERVAL);
438a: 82 e3 ldi r24, 0x32 ; 50
438c: 90 e0 ldi r25, 0x00 ; 0
438e: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
4392: 90 93 74 03 sts 0x0374, r25
4396: 80 93 73 03 sts 0x0373, r24
439a: 08 95 ret
0000439c <BL3_Current>:
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55)
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
unsigned int BL3_Current(unsigned char who) // in 0,1A
{
if(Motor[who].Current == 255) return(0); // invalid
439c: 28 2f mov r18, r24
439e: 30 e0 ldi r19, 0x00 ; 0
43a0: 9f e0 ldi r25, 0x0F ; 15
43a2: 89 9f mul r24, r25
43a4: f0 01 movw r30, r0
43a6: 11 24 eor r1, r1
43a8: e9 56 subi r30, 0x69 ; 105
43aa: f6 4f sbci r31, 0xF6 ; 246
43ac: 85 81 ldd r24, Z+5 ; 0x05
43ae: 8f 3f cpi r24, 0xFF ; 255
43b0: 09 f1 breq .+66 ; 0x43f4 <BL3_Current+0x58>
if(Motor[who].Current <= 200) return(Motor[who].Current);
43b2: 89 3c cpi r24, 0xC9 ; 201
43b4: 10 f4 brcc .+4 ; 0x43ba <BL3_Current+0x1e>
43b6: 90 e0 ldi r25, 0x00 ; 0
43b8: 08 95 ret
else
{
if(Motor[who].Version & MOTOR_STATE_BL30) return(200 + 10 * ((unsigned int)Motor[who].Current-200));
43ba: 9f e0 ldi r25, 0x0F ; 15
43bc: 92 9f mul r25, r18
43be: f0 01 movw r30, r0
43c0: 93 9f mul r25, r19
43c2: f0 0d add r31, r0
43c4: 11 24 eor r1, r1
43c6: e9 56 subi r30, 0x69 ; 105
43c8: f6 4f sbci r31, 0xF6 ; 246
43ca: 90 81 ld r25, Z
43cc: 92 ff sbrs r25, 2
43ce: 10 c0 rjmp .+32 ; 0x43f0 <BL3_Current+0x54>
43d0: 28 2f mov r18, r24
43d2: 30 e0 ldi r19, 0x00 ; 0
43d4: c9 01 movw r24, r18
43d6: 88 0f add r24, r24
43d8: 99 1f adc r25, r25
43da: 22 0f add r18, r18
43dc: 33 1f adc r19, r19
43de: 22 0f add r18, r18
43e0: 33 1f adc r19, r19
43e2: 22 0f add r18, r18
43e4: 33 1f adc r19, r19
43e6: 82 0f add r24, r18
43e8: 93 1f adc r25, r19
43ea: 88 50 subi r24, 0x08 ; 8
43ec: 97 40 sbci r25, 0x07 ; 7
43ee: 08 95 ret
else return(Motor[who].Current);
43f0: 90 e0 ldi r25, 0x00 ; 0
43f2: 08 95 ret
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55)
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
unsigned int BL3_Current(unsigned char who) // in 0,1A
{
if(Motor[who].Current == 255) return(0); // invalid
43f4: 80 e0 ldi r24, 0x00 ; 0
43f6: 90 e0 ldi r25, 0x00 ; 0
else
{
if(Motor[who].Version & MOTOR_STATE_BL30) return(200 + 10 * ((unsigned int)Motor[who].Current-200));
else return(Motor[who].Current);
}
}
43f8: 08 95 ret
000043fa <Capacity_Update>:
// called in main loop at a regular interval
void Capacity_Update(void)
{
43fa: 9f 92 push r9
43fc: af 92 push r10
43fe: bf 92 push r11
4400: cf 92 push r12
4402: df 92 push r13
4404: ef 92 push r14
4406: ff 92 push r15
4408: 0f 93 push r16
440a: 1f 93 push r17
440c: cf 93 push r28
440e: df 93 push r29
static unsigned short SubCounter = 0;
static unsigned short CurrentOffset = 0;
static unsigned long SumCurrentOffset = 0;
unsigned char i, NumOfMotors, MinOfMaxPWM;
if(CheckDelay(update_timer))
4410: 80 91 73 03 lds r24, 0x0373
4414: 90 91 74 03 lds r25, 0x0374
4418: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
441c: 88 23 and r24, r24
441e: 09 f4 brne .+2 ; 0x4422 <Capacity_Update+0x28>
4420: fb c0 rjmp .+502 ; 0x4618 <Capacity_Update+0x21e>
{
update_timer += CAPACITY_UPDATE_INTERVAL; // do not use SetDelay to avoid timing leaks
4422: 80 91 73 03 lds r24, 0x0373
4426: 90 91 74 03 lds r25, 0x0374
442a: c2 96 adiw r24, 0x32 ; 50
442c: 90 93 74 03 sts 0x0374, r25
4430: 80 93 73 03 sts 0x0373, r24
// determine sum of all present BL currents and setpoints
Current = 0;
SetSum = 0;
NumOfMotors = 0;
MinOfMaxPWM = 255;
if(Capacity.MinOfMaxPWM == 254) FC_StatusFlags3 |= FC_STATUS3_REDUNDANCE;
4434: 80 91 1b 05 lds r24, 0x051B
4438: 8e 3f cpi r24, 0xFE ; 254
443a: 31 f4 brne .+12 ; 0x4448 <Capacity_Update+0x4e>
443c: 80 91 c9 03 lds r24, 0x03C9
4440: 81 60 ori r24, 0x01 ; 1
4442: 80 93 c9 03 sts 0x03C9, r24
4446: dd c0 rjmp .+442 ; 0x4602 <Capacity_Update+0x208>
else if(Capacity.MinOfMaxPWM == 255) FC_StatusFlags3 &= ~FC_STATUS3_REDUNDANCE;
4448: 8f 3f cpi r24, 0xFF ; 255
444a: 09 f0 breq .+2 ; 0x444e <Capacity_Update+0x54>
444c: da c0 rjmp .+436 ; 0x4602 <Capacity_Update+0x208>
444e: 80 91 c9 03 lds r24, 0x03C9
4452: 8e 7f andi r24, 0xFE ; 254
4454: 80 93 c9 03 sts 0x03C9, r24
4458: d4 c0 rjmp .+424 ; 0x4602 <Capacity_Update+0x208>
445a: 78 01 movw r14, r16
445c: f8 01 movw r30, r16
445e: 33 97 sbiw r30, 0x03 ; 3
for(i = 0; i < MAX_MOTORS; i++)
{
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK/* && Mixer.Motor[i][MIX_GAS]*/)
4460: 80 81 ld r24, Z
4462: 88 23 and r24, r24
4464: e4 f4 brge .+56 ; 0x449e <Capacity_Update+0xa4>
{
NumOfMotors++;
4466: b3 94 inc r11
4468: 32 96 adiw r30, 0x02 ; 2
if(Motor[i].Current > 200)
446a: 80 81 ld r24, Z
446c: 89 3c cpi r24, 0xC9 ; 201
446e: 28 f0 brcs .+10 ; 0x447a <Capacity_Update+0x80>
{
Current += BL3_Current(i); // extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55)
4470: 8a 2d mov r24, r10
4472: 94 df rcall .-216 ; 0x439c <BL3_Current>
4474: c8 0f add r28, r24
4476: d9 1f adc r29, r25
4478: 02 c0 rjmp .+4 ; 0x447e <Capacity_Update+0x84>
}
else Current += (unsigned int)(Motor[i].Current);
447a: c8 0f add r28, r24
447c: d1 1d adc r29, r1
447e: f7 01 movw r30, r14
4480: 35 97 sbiw r30, 0x05 ; 5
SetSum += (unsigned int)(Motor[i].SetPoint);
4482: 80 81 ld r24, Z
4484: c8 0e add r12, r24
4486: d1 1c adc r13, r1
if(Motor[i].MaxPWM <= MinOfMaxPWM) MinOfMaxPWM = Motor[i].MaxPWM; else FC_StatusFlags3 &= ~FC_STATUS3_REDUNDANCE;
4488: f7 01 movw r30, r14
448a: 80 81 ld r24, Z
448c: 98 16 cp r9, r24
448e: 30 f4 brcc .+12 ; 0x449c <Capacity_Update+0xa2>
4490: 80 91 c9 03 lds r24, 0x03C9
4494: 8e 7f andi r24, 0xFE ; 254
4496: 80 93 c9 03 sts 0x03C9, r24
449a: 01 c0 rjmp .+2 ; 0x449e <Capacity_Update+0xa4>
449c: 98 2e mov r9, r24
NumOfMotors = 0;
MinOfMaxPWM = 255;
if(Capacity.MinOfMaxPWM == 254) FC_StatusFlags3 |= FC_STATUS3_REDUNDANCE;
else if(Capacity.MinOfMaxPWM == 255) FC_StatusFlags3 &= ~FC_STATUS3_REDUNDANCE;
for(i = 0; i < MAX_MOTORS; i++)
449e: a3 94 inc r10
44a0: 01 5f subi r16, 0xF1 ; 241
44a2: 1f 4f sbci r17, 0xFF ; 255
44a4: fc e0 ldi r31, 0x0C ; 12
44a6: af 12 cpse r10, r31
44a8: d8 cf rjmp .-80 ; 0x445a <Capacity_Update+0x60>
else Current += (unsigned int)(Motor[i].Current);
SetSum += (unsigned int)(Motor[i].SetPoint);
if(Motor[i].MaxPWM <= MinOfMaxPWM) MinOfMaxPWM = Motor[i].MaxPWM; else FC_StatusFlags3 &= ~FC_STATUS3_REDUNDANCE;
}
}
Capacity.MinOfMaxPWM = MinOfMaxPWM;
44aa: 90 92 1b 05 sts 0x051B, r9
if(SetSum == 0) // if all setpoints are 0
44ae: cd 28 or r12, r13
44b0: 59 f5 brne .+86 ; 0x4508 <Capacity_Update+0x10e>
{ // determine offsets of motor currents
#define CURRENT_AVERAGE 8 // 8bit = 256 * 10 ms = 2.56s average time
CurrentOffset = (unsigned int)(SumCurrentOffset>>CURRENT_AVERAGE);
44b2: 40 91 6f 03 lds r20, 0x036F
44b6: 50 91 70 03 lds r21, 0x0370
44ba: 60 91 71 03 lds r22, 0x0371
44be: 70 91 72 03 lds r23, 0x0372
44c2: 05 2f mov r16, r21
44c4: 16 2f mov r17, r22
44c6: 27 2f mov r18, r23
44c8: 33 27 eor r19, r19
44ca: 10 93 6e 03 sts 0x036E, r17
44ce: 00 93 6d 03 sts 0x036D, r16
SumCurrentOffset -= CurrentOffset;
44d2: 22 27 eor r18, r18
44d4: 33 27 eor r19, r19
44d6: 40 1b sub r20, r16
44d8: 51 0b sbc r21, r17
44da: 62 0b sbc r22, r18
44dc: 73 0b sbc r23, r19
SumCurrentOffset += Current;
44de: 4c 0f add r20, r28
44e0: 5d 1f adc r21, r29
44e2: 61 1d adc r22, r1
44e4: 71 1d adc r23, r1
44e6: 40 93 6f 03 sts 0x036F, r20
44ea: 50 93 70 03 sts 0x0370, r21
44ee: 60 93 71 03 sts 0x0371, r22
44f2: 70 93 72 03 sts 0x0372, r23
// add the FC and BL Offsets
Current += FC_OFFSET_CURRENT + NumOfMotors * BL_OFFSET_CURRENT;
}
// update actual Current
Capacity.ActualCurrent = Current;
44f6: 85 e0 ldi r24, 0x05 ; 5
44f8: 90 e0 ldi r25, 0x00 ; 0
44fa: 90 93 16 05 sts 0x0516, r25
44fe: 80 93 15 05 sts 0x0515, r24
#define CURRENT_AVERAGE 8 // 8bit = 256 * 10 ms = 2.56s average time
CurrentOffset = (unsigned int)(SumCurrentOffset>>CURRENT_AVERAGE);
SumCurrentOffset -= CurrentOffset;
SumCurrentOffset += Current;
// after averaging set current to static offset
Current = FC_OFFSET_CURRENT;
4502: c5 e0 ldi r28, 0x05 ; 5
4504: d0 e0 ldi r29, 0x00 ; 0
4506: 1c c0 rjmp .+56 ; 0x4540 <Capacity_Update+0x146>
}
else // some motors are running, includes also motor test condition, where "MotorRunning" is false
{ // subtract offset
if(Current > CurrentOffset) Current -= CurrentOffset;
4508: 80 91 6d 03 lds r24, 0x036D
450c: 90 91 6e 03 lds r25, 0x036E
4510: 8c 17 cp r24, r28
4512: 9d 07 cpc r25, r29
4514: 28 f4 brcc .+10 ; 0x4520 <Capacity_Update+0x126>
4516: 9e 01 movw r18, r28
4518: 28 1b sub r18, r24
451a: 39 0b sbc r19, r25
451c: c9 01 movw r24, r18
451e: 02 c0 rjmp .+4 ; 0x4524 <Capacity_Update+0x12a>
else Current = 0;
4520: 80 e0 ldi r24, 0x00 ; 0
4522: 90 e0 ldi r25, 0x00 ; 0
// add the FC and BL Offsets
Current += FC_OFFSET_CURRENT + NumOfMotors * BL_OFFSET_CURRENT;
4524: cb 2d mov r28, r11
4526: d0 e0 ldi r29, 0x00 ; 0
4528: cc 0f add r28, r28
452a: dd 1f adc r29, r29
452c: 25 96 adiw r28, 0x05 ; 5
452e: c8 0f add r28, r24
4530: d9 1f adc r29, r25
}
// update actual Current
Capacity.ActualCurrent = Current;
4532: d0 93 16 05 sts 0x0516, r29
4536: c0 93 15 05 sts 0x0515, r28
// update actual Power
if(Current < 255) Capacity.ActualPower = (UBat * Current) / 100; // in W higher resolution
453a: cf 3f cpi r28, 0xFF ; 255
453c: d1 05 cpc r29, r1
453e: d0 f4 brcc .+52 ; 0x4574 <Capacity_Update+0x17a>
4540: 80 91 1a 01 lds r24, 0x011A
4544: 90 91 1b 01 lds r25, 0x011B
4548: c8 9f mul r28, r24
454a: 90 01 movw r18, r0
454c: c9 9f mul r28, r25
454e: 30 0d add r19, r0
4550: d8 9f mul r29, r24
4552: 30 0d add r19, r0
4554: 11 24 eor r1, r1
4556: 36 95 lsr r19
4558: 27 95 ror r18
455a: 36 95 lsr r19
455c: 27 95 ror r18
455e: ab e7 ldi r26, 0x7B ; 123
4560: b4 e1 ldi r27, 0x14 ; 20
4562: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
4566: 96 95 lsr r25
4568: 87 95 ror r24
456a: 90 93 18 05 sts 0x0518, r25
456e: 80 93 17 05 sts 0x0517, r24
4572: 25 c0 rjmp .+74 ; 0x45be <Capacity_Update+0x1c4>
else Capacity.ActualPower = (UBat * (Current/4)) / 25; // in W
4574: 80 91 1a 01 lds r24, 0x011A
4578: 90 91 1b 01 lds r25, 0x011B
457c: 9e 01 movw r18, r28
457e: 36 95 lsr r19
4580: 27 95 ror r18
4582: 36 95 lsr r19
4584: 27 95 ror r18
4586: 28 9f mul r18, r24
4588: a0 01 movw r20, r0
458a: 29 9f mul r18, r25
458c: 50 0d add r21, r0
458e: 38 9f mul r19, r24
4590: 50 0d add r21, r0
4592: 11 24 eor r1, r1
4594: 9a 01 movw r18, r20
4596: af ea ldi r26, 0xAF ; 175
4598: b7 e4 ldi r27, 0x47 ; 71
459a: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
459e: 48 1b sub r20, r24
45a0: 59 0b sbc r21, r25
45a2: 56 95 lsr r21
45a4: 47 95 ror r20
45a6: 84 0f add r24, r20
45a8: 95 1f adc r25, r21
45aa: 92 95 swap r25
45ac: 82 95 swap r24
45ae: 8f 70 andi r24, 0x0F ; 15
45b0: 89 27 eor r24, r25
45b2: 9f 70 andi r25, 0x0F ; 15
45b4: 89 27 eor r24, r25
45b6: 90 93 18 05 sts 0x0518, r25
45ba: 80 93 17 05 sts 0x0517, r24
// update used capacity
SubCounter += Current;
45be: 80 91 6b 03 lds r24, 0x036B
45c2: 90 91 6c 03 lds r25, 0x036C
45c6: c8 0f add r28, r24
45c8: d9 1f adc r29, r25
45ca: d0 93 6c 03 sts 0x036C, r29
45ce: c0 93 6b 03 sts 0x036B, r28
// 100mA * 1ms * CAPACITY_UPDATE_INTERVAL = 1 mA * 100 ms * CAPACITY_UPDATE_INTERVAL
// = 1mA * 0.1s * CAPACITY_UPDATE_INTERVAL = 1mA * 1min / (600 / CAPACITY_UPDATE_INTERVAL)
// = 1mAh / (36000 / CAPACITY_UPDATE_INTERVAL)
#define SUB_COUNTER_LIMIT (36000 / CAPACITY_UPDATE_INTERVAL)
while(SubCounter > SUB_COUNTER_LIMIT)
45d2: c1 3d cpi r28, 0xD1 ; 209
45d4: 32 e0 ldi r19, 0x02 ; 2
45d6: d3 07 cpc r29, r19
45d8: f8 f0 brcs .+62 ; 0x4618 <Capacity_Update+0x21e>
45da: 80 91 19 05 lds r24, 0x0519
45de: 90 91 1a 05 lds r25, 0x051A
{
Capacity.UsedCapacity++; // we have one mAh more
45e2: 01 96 adiw r24, 0x01 ; 1
SubCounter -= SUB_COUNTER_LIMIT; // keep the remaining sub part
45e4: c0 5d subi r28, 0xD0 ; 208
45e6: d2 40 sbci r29, 0x02 ; 2
// 100mA * 1ms * CAPACITY_UPDATE_INTERVAL = 1 mA * 100 ms * CAPACITY_UPDATE_INTERVAL
// = 1mA * 0.1s * CAPACITY_UPDATE_INTERVAL = 1mA * 1min / (600 / CAPACITY_UPDATE_INTERVAL)
// = 1mAh / (36000 / CAPACITY_UPDATE_INTERVAL)
#define SUB_COUNTER_LIMIT (36000 / CAPACITY_UPDATE_INTERVAL)
while(SubCounter > SUB_COUNTER_LIMIT)
45e8: c1 3d cpi r28, 0xD1 ; 209
45ea: e2 e0 ldi r30, 0x02 ; 2
45ec: de 07 cpc r29, r30
45ee: c8 f7 brcc .-14 ; 0x45e2 <Capacity_Update+0x1e8>
45f0: 90 93 1a 05 sts 0x051A, r25
45f4: 80 93 19 05 sts 0x0519, r24
45f8: d0 93 6c 03 sts 0x036C, r29
45fc: c0 93 6b 03 sts 0x036B, r28
4600: 0b c0 rjmp .+22 ; 0x4618 <Capacity_Update+0x21e>
4602: 0d e9 ldi r16, 0x9D ; 157
4604: 19 e0 ldi r17, 0x09 ; 9
}
}
// called in main loop at a regular interval
void Capacity_Update(void)
{
4606: 99 24 eor r9, r9
4608: 9a 94 dec r9
460a: b1 2c mov r11, r1
460c: a1 2c mov r10, r1
460e: c1 2c mov r12, r1
4610: d1 2c mov r13, r1
4612: c0 e0 ldi r28, 0x00 ; 0
4614: d0 e0 ldi r29, 0x00 ; 0
4616: 21 cf rjmp .-446 ; 0x445a <Capacity_Update+0x60>
{
Capacity.UsedCapacity++; // we have one mAh more
SubCounter -= SUB_COUNTER_LIMIT; // keep the remaining sub part
}
} // EOF check delay update timer
}
4618: df 91 pop r29
461a: cf 91 pop r28
461c: 1f 91 pop r17
461e: 0f 91 pop r16
4620: ff 90 pop r15
4622: ef 90 pop r14
4624: df 90 pop r13
4626: cf 90 pop r12
4628: bf 90 pop r11
462a: af 90 pop r10
462c: 9f 90 pop r9
462e: 08 95 ret
00004630 <Debug_Putchar>:
unsigned char SendDebugOutput = 0;
// function called from _printf_P to output character
void Debug_Putchar(char c)
{
if (!SendDebugOutput)
4630: 90 91 76 03 lds r25, 0x0376
4634: 91 11 cpse r25, r1
4636: 0f c0 rjmp .+30 ; 0x4656 <Debug_Putchar+0x26>
{
tDebug.Text[Debug_BufPtr++] = c; // copy character to buffer
4638: e0 91 75 03 lds r30, 0x0375
463c: 91 e0 ldi r25, 0x01 ; 1
463e: 9e 0f add r25, r30
4640: 90 93 75 03 sts 0x0375, r25
4644: f0 e0 ldi r31, 0x00 ; 0
4646: e4 5e subi r30, 0xE4 ; 228
4648: fa 4f sbci r31, 0xFA ; 250
464a: 81 83 std Z+1, r24 ; 0x01
if (Debug_BufPtr > 30) Debug_BufPtr = 30; // avoid buffer overflow
464c: 9f 31 cpi r25, 0x1F ; 31
464e: 18 f0 brcs .+6 ; 0x4656 <Debug_Putchar+0x26>
4650: 8e e1 ldi r24, 0x1E ; 30
4652: 80 93 75 03 sts 0x0375, r24
4656: 08 95 ret
00004658 <DebugSend>:
}
}
void DebugSend(unsigned char cmd)
{
if (!SendDebugOutput)
4658: 90 91 76 03 lds r25, 0x0376
465c: 91 11 cpse r25, r1
465e: 0d c0 rjmp .+26 ; 0x467a <DebugSend+0x22>
{
tDebug.Cmd = cmd;
4660: 80 93 1c 05 sts 0x051C, r24
tDebug.Text[Debug_BufPtr] = '\0'; // end of text marker
4664: e0 91 75 03 lds r30, 0x0375
4668: f0 e0 ldi r31, 0x00 ; 0
466a: e4 5e subi r30, 0xE4 ; 228
466c: fa 4f sbci r31, 0xFA ; 250
466e: 11 82 std Z+1, r1 ; 0x01
Debug_BufPtr = 0; // set bufferindex to 0
4670: 10 92 75 03 sts 0x0375, r1
SendDebugOutput = 1; // set flag to trasmit data the next time in serial transmit function
4674: 81 e0 ldi r24, 0x01 ; 1
4676: 80 93 76 03 sts 0x0376, r24
467a: 08 95 ret
0000467c <RAM_Checksum>:
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len)
{
uint8_t crc = 0xAA;
uint16_t i;
for(i=0; i<len; i++)
467c: 61 15 cp r22, r1
467e: 71 05 cpc r23, r1
4680: 51 f0 breq .+20 ; 0x4696 <RAM_Checksum+0x1a>
4682: fc 01 movw r30, r24
4684: 68 0f add r22, r24
4686: 79 1f adc r23, r25
uint8_t RequiredMotors;
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len)
{
uint8_t crc = 0xAA;
4688: 8a ea ldi r24, 0xAA ; 170
uint16_t i;
for(i=0; i<len; i++)
{
crc += pBuffer[i];
468a: 91 91 ld r25, Z+
468c: 89 0f add r24, r25
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len)
{
uint8_t crc = 0xAA;
uint16_t i;
for(i=0; i<len; i++)
468e: e6 17 cp r30, r22
4690: f7 07 cpc r31, r23
4692: d9 f7 brne .-10 ; 0x468a <RAM_Checksum+0xe>
4694: 08 95 ret
uint8_t RequiredMotors;
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len)
{
uint8_t crc = 0xAA;
4696: 8a ea ldi r24, 0xAA ; 170
for(i=0; i<len; i++)
{
crc += pBuffer[i];
}
return crc;
}
4698: 08 95 ret
0000469a <EEProm_Checksum>:
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len)
{
469a: ff 92 push r15
469c: 0f 93 push r16
469e: 1f 93 push r17
46a0: cf 93 push r28
46a2: df 93 push r29
uint8_t crc = 0xAA;
uint16_t off;
for(off=0; off<len; off++)
46a4: 61 15 cp r22, r1
46a6: 71 05 cpc r23, r1
46a8: 89 f0 breq .+34 ; 0x46cc <EEProm_Checksum+0x32>
46aa: 8b 01 movw r16, r22
46ac: 08 0f add r16, r24
46ae: 19 1f adc r17, r25
46b0: ec 01 movw r28, r24
return crc;
}
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len)
{
uint8_t crc = 0xAA;
46b2: 0f 2e mov r0, r31
46b4: fa ea ldi r31, 0xAA ; 170
46b6: ff 2e mov r15, r31
46b8: f0 2d mov r31, r0
uint16_t off;
for(off=0; off<len; off++)
{
crc += eeprom_read_byte((uint8_t*)(EEAddr + off));;
46ba: ce 01 movw r24, r28
46bc: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
46c0: f8 0e add r15, r24
46c2: 21 96 adiw r28, 0x01 ; 1
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len)
{
uint8_t crc = 0xAA;
uint16_t off;
for(off=0; off<len; off++)
46c4: c0 17 cp r28, r16
46c6: d1 07 cpc r29, r17
46c8: c1 f7 brne .-16 ; 0x46ba <EEProm_Checksum+0x20>
46ca: 04 c0 rjmp .+8 ; 0x46d4 <EEProm_Checksum+0x3a>
return crc;
}
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len)
{
uint8_t crc = 0xAA;
46cc: 0f 2e mov r0, r31
46ce: fa ea ldi r31, 0xAA ; 170
46d0: ff 2e mov r15, r31
46d2: f0 2d mov r31, r0
for(off=0; off<len; off++)
{
crc += eeprom_read_byte((uint8_t*)(EEAddr + off));;
}
return crc;
}
46d4: 8f 2d mov r24, r15
46d6: df 91 pop r29
46d8: cf 91 pop r28
46da: 1f 91 pop r17
46dc: 0f 91 pop r16
46de: ff 90 pop r15
46e0: 08 95 ret
000046e2 <ParamSet_DefaultStickMapping>:
void ParamSet_DefaultStickMapping(void)
{
EE_Parameter.Kanalbelegung[K_GAS] = 1;
46e2: 81 e0 ldi r24, 0x01 ; 1
46e4: 80 93 41 05 sts 0x0541, r24
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
46e8: 82 e0 ldi r24, 0x02 ; 2
46ea: 80 93 40 05 sts 0x0540, r24
EE_Parameter.Kanalbelegung[K_NICK] = 3;
46ee: 83 e0 ldi r24, 0x03 ; 3
46f0: 80 93 3f 05 sts 0x053F, r24
EE_Parameter.Kanalbelegung[K_GIER] = 4;
46f4: 84 e0 ldi r24, 0x04 ; 4
46f6: 80 93 42 05 sts 0x0542, r24
EE_Parameter.Kanalbelegung[K_POTI1] = 5;
46fa: 85 e0 ldi r24, 0x05 ; 5
46fc: 80 93 43 05 sts 0x0543, r24
EE_Parameter.Kanalbelegung[K_POTI2] = 6;
4700: 86 e0 ldi r24, 0x06 ; 6
4702: 80 93 44 05 sts 0x0544, r24
EE_Parameter.Kanalbelegung[K_POTI3] = 7;
4706: 87 e0 ldi r24, 0x07 ; 7
4708: 80 93 45 05 sts 0x0545, r24
EE_Parameter.Kanalbelegung[K_POTI4] = 8;
470c: 88 e0 ldi r24, 0x08 ; 8
470e: 80 93 46 05 sts 0x0546, r24
EE_Parameter.Kanalbelegung[K_POTI5] = 9;
4712: 89 e0 ldi r24, 0x09 ; 9
4714: 80 93 47 05 sts 0x0547, r24
EE_Parameter.Kanalbelegung[K_POTI6] = 10;
4718: 8a e0 ldi r24, 0x0A ; 10
471a: 80 93 48 05 sts 0x0548, r24
EE_Parameter.Kanalbelegung[K_POTI7] = 11;
471e: 8b e0 ldi r24, 0x0B ; 11
4720: 80 93 49 05 sts 0x0549, r24
EE_Parameter.Kanalbelegung[K_POTI8] = 12;
4724: 8c e0 ldi r24, 0x0C ; 12
4726: 80 93 4a 05 sts 0x054A, r24
472a: 08 95 ret
0000472c <CommonDefaults>:
/***************************************************/
/* Default Values for parameter set 1 */
/***************************************************/
void CommonDefaults(void)
{
EE_Parameter.Revision = EEPARAM_REVISION;
472c: 87 e6 ldi r24, 0x67 ; 103
472e: 80 93 3e 05 sts 0x053E, r24
memset(EE_Parameter.Name,0,12); // delete name
4732: 8c e0 ldi r24, 0x0C ; 12
4734: ea eb ldi r30, 0xBA ; 186
4736: f5 e0 ldi r31, 0x05 ; 5
4738: df 01 movw r26, r30
473a: 1d 92 st X+, r1
473c: 8a 95 dec r24
473e: e9 f7 brne .-6 ; 0x473a <CommonDefaults+0xe>
// if(PlatinenVersion >= 20)
{
EE_Parameter.Gyro_D = 10;
4740: 8a e0 ldi r24, 0x0A ; 10
4742: 80 93 5e 05 sts 0x055E, r24
EE_Parameter.Driftkomp = 0;
4746: 10 92 82 05 sts 0x0582, r1
EE_Parameter.GyroAccFaktor = 27;
474a: 8b e1 ldi r24, 0x1B ; 27
474c: 80 93 5a 05 sts 0x055A, r24
EE_Parameter.WinkelUmschlagNick = 78;
4750: 8e e4 ldi r24, 0x4E ; 78
4752: 80 93 7f 05 sts 0x057F, r24
EE_Parameter.WinkelUmschlagRoll = 78;
4756: 80 93 80 05 sts 0x0580, r24
EE_Parameter.GyroAccFaktor = 30;
EE_Parameter.WinkelUmschlagNick = 85;
EE_Parameter.WinkelUmschlagRoll = 85;
}
*/
EE_Parameter.GyroAccAbgleich = 32; // 1/k
475a: 80 e2 ldi r24, 0x20 ; 32
475c: 80 93 81 05 sts 0x0581, r24
EE_Parameter.BitConfig = 0; // Looping usw.
4760: 10 92 b6 05 sts 0x05B6, r1
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER;
4764: 8a e6 ldi r24, 0x6A ; 106
4766: 80 93 4b 05 sts 0x054B, r24
EE_Parameter.ExtraConfig = CFG_GPS_AID | CFG2_VARIO_BEEP | CFG_LEARNABLE_CAREFREE | CFG_NO_RCOFF_BEEPING;
476a: 82 e7 ldi r24, 0x72 ; 114
476c: 80 93 b8 05 sts 0x05B8, r24
EE_Parameter.GlobalConfig3 = CFG3_SPEAK_ALL | CFG3_NO_GPSFIX_NO_START;//
4770: 80 e5 ldi r24, 0x50 ; 80
4772: 80 93 b9 05 sts 0x05B9, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
EE_Parameter.Receiver = RECEIVER_HOTT;
4776: 86 e0 ldi r24, 0x06 ; 6
4778: 80 93 65 05 sts 0x0565, r24
#else
EE_Parameter.Receiver = RECEIVER_JETI;
#endif
EE_Parameter.MotorSafetySwitch = 0;
477c: 10 92 a3 05 sts 0x05A3, r1
EE_Parameter.ExternalControl = 0;
4780: 10 92 a0 05 sts 0x05A0, r1
EE_Parameter.Gas_Min = 8; // Wert : 0-32
4784: 88 e0 ldi r24, 0x08 ; 8
4786: 80 93 58 05 sts 0x0558, r24
EE_Parameter.Gas_Max = 230; // Wert : 33-247
478a: 86 ee ldi r24, 0xE6 ; 230
478c: 80 93 59 05 sts 0x0559, r24
EE_Parameter.KompassWirkung = 64; // Wert : 0-247
4790: 80 e4 ldi r24, 0x40 ; 64
4792: 80 93 5b 05 sts 0x055B, r24
EE_Parameter.HoeheChannel = 5; // Wert : 0-32
4796: 85 e0 ldi r24, 0x05 ; 5
4798: 80 93 4e 05 sts 0x054E, r24
EE_Parameter.Hoehe_MinGas = 30;
479c: 8e e1 ldi r24, 0x1E ; 30
479e: 80 93 4c 05 sts 0x054C, r24
EE_Parameter.Hoehe_TiltCompensation = 110; // in %
47a2: 8e e6 ldi r24, 0x6E ; 110
47a4: 80 93 53 05 sts 0x0553, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(ACC_AltitudeControl)
47a8: 80 91 c2 03 lds r24, 0x03C2
47ac: 88 23 and r24, r24
47ae: 99 f0 breq .+38 ; 0x47d6 <CommonDefaults+0xaa>
{
EE_Parameter.Hoehe_P = 20; // Wert : 0-32
47b0: 84 e1 ldi r24, 0x14 ; 20
47b2: 80 93 4f 05 sts 0x054F, r24
EE_Parameter.Luftdruck_D = 40; // Wert : 0-247
47b6: 88 e2 ldi r24, 0x28 ; 40
47b8: 80 93 4d 05 sts 0x054D, r24
EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-247
47bc: 8e e1 ldi r24, 0x1E ; 30
47be: 80 93 51 05 sts 0x0551, r24
EE_Parameter.Hoehe_HoverBand = 1; // Wert : 0-247
47c2: 81 e0 ldi r24, 0x01 ; 1
47c4: 80 93 52 05 sts 0x0552, r24
EE_Parameter.Hoehe_StickNeutralPoint = 127;// Wert : 0-247 (0 = Hover-Estimation)
47c8: 8f e7 ldi r24, 0x7F ; 127
47ca: 80 93 54 05 sts 0x0554, r24
EE_Parameter.FailSafeTime = 60; // 0 = off
47ce: 8c e3 ldi r24, 0x3C ; 60
47d0: 80 93 a6 05 sts 0x05A6, r24
47d4: 0f c0 rjmp .+30 ; 0x47f4 <CommonDefaults+0xc8>
}
else
#endif
{
EE_Parameter.Hoehe_P = 15; // Wert : 0-32
47d6: 8f e0 ldi r24, 0x0F ; 15
47d8: 80 93 4f 05 sts 0x054F, r24
EE_Parameter.Luftdruck_D = 30; // Wert : 0-247
47dc: 8e e1 ldi r24, 0x1E ; 30
47de: 80 93 4d 05 sts 0x054D, r24
EE_Parameter.Hoehe_ACC_Wirkung = 0; // Wert : 0-247
47e2: 10 92 51 05 sts 0x0551, r1
EE_Parameter.Hoehe_HoverBand = 8; // Wert : 0-247
47e6: 88 e0 ldi r24, 0x08 ; 8
47e8: 80 93 52 05 sts 0x0552, r24
EE_Parameter.Hoehe_StickNeutralPoint = 0;// Wert : 0-247 (0 = Hover-Estimation)
47ec: 10 92 54 05 sts 0x0554, r1
EE_Parameter.FailSafeTime = 0; // 0 = off
47f0: 10 92 a6 05 sts 0x05A6, r1
}
EE_Parameter.Hoehe_Verstaerkung = 15; // Wert : 0-50 (15 -> ca. +/- 5m/sek bei Stick-Voll-Ausschlag)
47f4: 8f e0 ldi r24, 0x0F ; 15
47f6: 80 93 50 05 sts 0x0550, r24
EE_Parameter.StartLandChannel = 0;
47fa: 10 92 af 05 sts 0x05AF, r1
EE_Parameter.LandingSpeed = 12;
47fe: 8c e0 ldi r24, 0x0C ; 12
4800: 80 93 b0 05 sts 0x05B0, r24
EE_Parameter.UserParam1 = 0; // zur freien Verwendung
4804: 10 92 67 05 sts 0x0567, r1
EE_Parameter.UserParam2 = 0; // zur freien Verwendung
4808: 10 92 68 05 sts 0x0568, r1
EE_Parameter.UserParam3 = 0; // zur freien Verwendung
480c: 10 92 69 05 sts 0x0569, r1
EE_Parameter.UserParam4 = 0; // zur freien Verwendung
4810: 10 92 6a 05 sts 0x056A, r1
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
4814: 10 92 84 05 sts 0x0584, r1
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
4818: 10 92 85 05 sts 0x0585, r1
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
481c: 10 92 86 05 sts 0x0586, r1
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
4820: 10 92 87 05 sts 0x0587, r1
EE_Parameter.ServoNickControl = 128; // Wert : 0-247 // Stellung des Servos
4824: 20 e8 ldi r18, 0x80 ; 128
4826: 20 93 6b 05 sts 0x056B, r18
EE_Parameter.ServoNickComp = 50; // Wert : 0-247 // Einfluss Gyro/Servo
482a: 82 e3 ldi r24, 0x32 ; 50
482c: 80 93 6c 05 sts 0x056C, r24
EE_Parameter.ServoCompInvert = 2; // Wert : 0-247 // Richtung Einfluss Gyro/Servo
4830: 52 e0 ldi r21, 0x02 ; 2
4832: 50 93 b7 05 sts 0x05B7, r21
EE_Parameter.ServoNickMin = 24; // Wert : 0-247 // Anschlag
4836: 98 e1 ldi r25, 0x18 ; 24
4838: 90 93 6d 05 sts 0x056D, r25
EE_Parameter.ServoNickMax = 230; // Wert : 0-247 // Anschlag
483c: 96 ee ldi r25, 0xE6 ; 230
483e: 90 93 6e 05 sts 0x056E, r25
EE_Parameter.ServoNickRefresh = 3;
4842: 93 e0 ldi r25, 0x03 ; 3
4844: 90 93 73 05 sts 0x0573, r25
EE_Parameter.Servo3 = 125;
4848: 9d e7 ldi r25, 0x7D ; 125
484a: 90 93 76 05 sts 0x0576, r25
EE_Parameter.Servo4 = 125;
484e: 90 93 77 05 sts 0x0577, r25
EE_Parameter.Servo5 = 125;
4852: 90 93 78 05 sts 0x0578, r25
EE_Parameter.ServoRollControl = 128; // Wert : 0-247 // Stellung des Servos
4856: 20 93 6f 05 sts 0x056F, r18
EE_Parameter.ServoRollComp = 85; // Wert : 0-247 // Einfluss Gyro/Servo
485a: 75 e5 ldi r23, 0x55 ; 85
485c: 70 93 70 05 sts 0x0570, r23
EE_Parameter.ServoRollMin = 70; // Wert : 0-247 // Anschlag
4860: 26 e4 ldi r18, 0x46 ; 70
4862: 20 93 71 05 sts 0x0571, r18
EE_Parameter.ServoRollMax = 220; // Wert : 0-247 // Anschlag
4866: 3c ed ldi r19, 0xDC ; 220
4868: 30 93 72 05 sts 0x0572, r19
EE_Parameter.ServoManualControlSpeed = 60;
486c: 3c e3 ldi r19, 0x3C ; 60
486e: 30 93 74 05 sts 0x0574, r19
EE_Parameter.CamOrientation = 0; // Wert : 0-24 -> 0-360 -> 15° steps
4872: 10 92 75 05 sts 0x0575, r1
EE_Parameter.J16Bitmask = 0xAA;
4876: 3a ea ldi r19, 0xAA ; 170
4878: 30 93 88 05 sts 0x0588, r19
EE_Parameter.J17Bitmask = 0xCC;
487c: 4c ec ldi r20, 0xCC ; 204
487e: 40 93 8a 05 sts 0x058A, r20
EE_Parameter.WARN_J16_Bitmask = 0x00;
4882: 10 92 8c 05 sts 0x058C, r1
EE_Parameter.WARN_J17_Bitmask = 0xAA;
4886: 30 93 8d 05 sts 0x058D, r19
EE_Parameter.J16Timing = 40;
488a: 48 e2 ldi r20, 0x28 ; 40
488c: 40 93 89 05 sts 0x0589, r20
EE_Parameter.J17Timing = 40;
4890: 40 93 8b 05 sts 0x058B, r20
EE_Parameter.AutoPhotoDistance = 0; // Photo release in meter
4894: 10 92 8e 05 sts 0x058E, r1
EE_Parameter.AutoPhotoAtitudes = 0; // Photo release in meter
4898: 10 92 b4 05 sts 0x05B4, r1
EE_Parameter.SingleWpSpeed = 50; // Speed when flying the single points
489c: 80 93 b5 05 sts 0x05B5, r24
EE_Parameter.LoopGasLimit = 50;
48a0: 80 93 79 05 sts 0x0579, r24
EE_Parameter.LoopThreshold = 90; // Wert: 0-247 Schwelle für Stickausschlag
48a4: 3a e5 ldi r19, 0x5A ; 90
48a6: 30 93 7a 05 sts 0x057A, r19
EE_Parameter.LoopHysterese = 50;
48aa: 80 93 7b 05 sts 0x057B, r24
EE_Parameter.NaviGpsModeChannel = 6; // Kanal 6
48ae: 66 e0 ldi r22, 0x06 ; 6
48b0: 60 93 8f 05 sts 0x058F, r22
EE_Parameter.NaviGpsGain = 100;
48b4: e4 e6 ldi r30, 0x64 ; 100
48b6: e0 93 90 05 sts 0x0590, r30
EE_Parameter.NaviGpsP = 100;
48ba: e0 93 91 05 sts 0x0591, r30
EE_Parameter.NaviGpsI = 90;
48be: 30 93 92 05 sts 0x0592, r19
EE_Parameter.NaviGpsD = 120;
48c2: e8 e7 ldi r30, 0x78 ; 120
48c4: e0 93 93 05 sts 0x0593, r30
EE_Parameter.NaviGpsA = 40;
48c8: 40 93 97 05 sts 0x0597, r20
EE_Parameter.NaviGpsPLimit = 75;
48cc: 4b e4 ldi r20, 0x4B ; 75
48ce: 40 93 94 05 sts 0x0594, r20
EE_Parameter.NaviGpsILimit = 85;
48d2: 70 93 95 05 sts 0x0595, r23
EE_Parameter.NaviGpsDLimit = 75;
48d6: 40 93 96 05 sts 0x0596, r20
EE_Parameter.NaviGpsMinSat = 6;
48da: 60 93 98 05 sts 0x0598, r22
EE_Parameter.NaviStickThreshold = 8;
48de: 48 e0 ldi r20, 0x08 ; 8
48e0: 40 93 99 05 sts 0x0599, r20
EE_Parameter.NaviWindCorrection = 50;
48e4: 80 93 9a 05 sts 0x059A, r24
EE_Parameter.NaviAccCompensation = 42;
48e8: 8a e2 ldi r24, 0x2A ; 42
48ea: 80 93 9b 05 sts 0x059B, r24
EE_Parameter.NaviMaxFlyingRange = 0;
48ee: 10 92 9c 05 sts 0x059C, r1
EE_Parameter.NaviDescendRange = 0;
48f2: 10 92 9f 05 sts 0x059F, r1
EE_Parameter.NaviAngleLimitation = 140;
48f6: 8c e8 ldi r24, 0x8C ; 140
48f8: 80 93 9d 05 sts 0x059D, r24
EE_Parameter.NaviPH_LoginTime = 2;
48fc: 50 93 9e 05 sts 0x059E, r21
EE_Parameter.OrientationAngle = 0;
4900: 10 92 a1 05 sts 0x05A1, r1
EE_Parameter.CareFreeChannel = 0;
4904: 10 92 a2 05 sts 0x05A2, r1
EE_Parameter.NotGas = 65; // Wert : 0-247 // Gaswert bei Empangsverlust (ggf. in Prozent)
4908: 41 e4 ldi r20, 0x41 ; 65
490a: 40 93 63 05 sts 0x0563, r20
EE_Parameter.NotGasZeit = 90; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
490e: 30 93 64 05 sts 0x0564, r19
EE_Parameter.MotorSmooth = 0;
4912: 10 92 a4 05 sts 0x05A4, r1
EE_Parameter.ComingHomeAltitude = 0; // 0 = don't change
4916: 10 92 a5 05 sts 0x05A5, r1
EE_Parameter.MaxAltitude = 150; // 0 = off
491a: 36 e9 ldi r19, 0x96 ; 150
491c: 30 93 a7 05 sts 0x05A7, r19
EE_Parameter.AchsKopplung1 = 125;
4920: 90 93 7c 05 sts 0x057C, r25
EE_Parameter.AchsKopplung2 = 52;
4924: 94 e3 ldi r25, 0x34 ; 52
4926: 90 93 7d 05 sts 0x057D, r25
EE_Parameter.FailsafeChannel = 0;
492a: 10 92 a8 05 sts 0x05A8, r1
EE_Parameter.ServoFilterNick = 0;
492e: 10 92 a9 05 sts 0x05A9, r1
EE_Parameter.ServoFilterRoll = 0;
4932: 10 92 aa 05 sts 0x05AA, r1
EE_Parameter.Servo3OnValue = 140;
4936: 80 93 ab 05 sts 0x05AB, r24
EE_Parameter.Servo3OffValue = 70;
493a: 20 93 ac 05 sts 0x05AC, r18
EE_Parameter.Servo4OnValue = 140;
493e: 80 93 ad 05 sts 0x05AD, r24
EE_Parameter.Servo4OffValue = 70;
4942: 20 93 ae 05 sts 0x05AE, r18
EE_Parameter.CompassOffset = 0;
4946: 10 92 b1 05 sts 0x05B1, r1
EE_Parameter.UnterspannungsWarnung = 32; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50)
494a: 80 e2 ldi r24, 0x20 ; 32
494c: 80 93 62 05 sts 0x0562, r24
EE_Parameter.ComingHomeVoltage = 31;
4950: 8f e1 ldi r24, 0x1F ; 31
4952: 80 93 b3 05 sts 0x05B3, r24
EE_Parameter.AutoLandingVoltage = 30;
4956: 8e e1 ldi r24, 0x1E ; 30
4958: 80 93 b2 05 sts 0x05B2, r24
495c: 08 95 ret
0000495e <ParamSet_DefaultSet1>:
/***************************************************/
/* Default Values for parameter set 1 */
/***************************************************/
void ParamSet_DefaultSet1(void) // normal
{
CommonDefaults();
495e: e6 de rcall .-564 ; 0x472c <CommonDefaults>
EE_Parameter.Stick_P = 10; // Wert : 1-20
4960: 8a e0 ldi r24, 0x0A ; 10
4962: 80 93 55 05 sts 0x0555, r24
EE_Parameter.Stick_D = 16; // Wert : 0-20
4966: 80 e1 ldi r24, 0x10 ; 16
4968: 80 93 56 05 sts 0x0556, r24
EE_Parameter.StickGier_P = 6; // Wert : 1-20
496c: 86 e0 ldi r24, 0x06 ; 6
496e: 80 93 57 05 sts 0x0557, r24
EE_Parameter.Gyro_P = 90; // Wert : 0-247
4972: 2a e5 ldi r18, 0x5A ; 90
4974: 20 93 5c 05 sts 0x055C, r18
EE_Parameter.Gyro_I = 120; // Wert : 0-247
4978: 98 e7 ldi r25, 0x78 ; 120
497a: 90 93 5d 05 sts 0x055D, r25
EE_Parameter.Gyro_Gier_P = 90; // Wert : 0-247
497e: 20 93 5f 05 sts 0x055F, r18
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
4982: 90 93 60 05 sts 0x0560, r25
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
4986: 80 93 61 05 sts 0x0561, r24
EE_Parameter.I_Faktor = 32;
498a: 80 e2 ldi r24, 0x20 ; 32
498c: 80 93 66 05 sts 0x0566, r24
EE_Parameter.CouplingYawCorrection = 60;
4990: 8c e3 ldi r24, 0x3C ; 60
4992: 80 93 7e 05 sts 0x057E, r24
EE_Parameter.DynamicStability = 75;
4996: 8b e4 ldi r24, 0x4B ; 75
4998: 80 93 83 05 sts 0x0583, r24
memcpy(EE_Parameter.Name, "Fast",4);
499c: 86 e4 ldi r24, 0x46 ; 70
499e: 91 e6 ldi r25, 0x61 ; 97
49a0: a3 e7 ldi r26, 0x73 ; 115
49a2: b4 e7 ldi r27, 0x74 ; 116
49a4: 80 93 ba 05 sts 0x05BA, r24
49a8: 90 93 bb 05 sts 0x05BB, r25
49ac: a0 93 bc 05 sts 0x05BC, r26
49b0: b0 93 bd 05 sts 0x05BD, r27
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
49b4: 68 e8 ldi r22, 0x88 ; 136
49b6: 70 e0 ldi r23, 0x00 ; 0
49b8: 8e e3 ldi r24, 0x3E ; 62
49ba: 95 e0 ldi r25, 0x05 ; 5
49bc: 5f de rcall .-834 ; 0x467c <RAM_Checksum>
49be: 80 93 c6 05 sts 0x05C6, r24
49c2: 08 95 ret
000049c4 <ParamSet_DefaultSet2>:
/***************************************************/
/* Default Values for parameter set 2 */
/***************************************************/
void ParamSet_DefaultSet2(void) // Agil
{
CommonDefaults();
49c4: b3 de rcall .-666 ; 0x472c <CommonDefaults>
EE_Parameter.Stick_P = 8; // Wert : 1-20
49c6: 88 e0 ldi r24, 0x08 ; 8
49c8: 80 93 55 05 sts 0x0555, r24
EE_Parameter.Stick_D = 16; // Wert : 0-20
49cc: 80 e1 ldi r24, 0x10 ; 16
49ce: 80 93 56 05 sts 0x0556, r24
EE_Parameter.StickGier_P = 6; // Wert : 1-20
49d2: 96 e0 ldi r25, 0x06 ; 6
49d4: 90 93 57 05 sts 0x0557, r25
EE_Parameter.Gyro_P = 100; // Wert : 0-247
49d8: 34 e6 ldi r19, 0x64 ; 100
49da: 30 93 5c 05 sts 0x055C, r19
EE_Parameter.Gyro_I = 120; // Wert : 0-247
49de: 28 e7 ldi r18, 0x78 ; 120
49e0: 20 93 5d 05 sts 0x055D, r18
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247
49e4: 30 93 5f 05 sts 0x055F, r19
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
49e8: 20 93 60 05 sts 0x0560, r18
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
49ec: 90 93 61 05 sts 0x0561, r25
EE_Parameter.I_Faktor = 16;
49f0: 80 93 66 05 sts 0x0566, r24
EE_Parameter.CouplingYawCorrection = 70;
49f4: 86 e4 ldi r24, 0x46 ; 70
49f6: 80 93 7e 05 sts 0x057E, r24
EE_Parameter.DynamicStability = 70;
49fa: 80 93 83 05 sts 0x0583, r24
memcpy(EE_Parameter.Name, "Agile",5);
49fe: 85 e0 ldi r24, 0x05 ; 5
4a00: e5 ec ldi r30, 0xC5 ; 197
4a02: f2 e0 ldi r31, 0x02 ; 2
4a04: aa eb ldi r26, 0xBA ; 186
4a06: b5 e0 ldi r27, 0x05 ; 5
4a08: 01 90 ld r0, Z+
4a0a: 0d 92 st X+, r0
4a0c: 8a 95 dec r24
4a0e: e1 f7 brne .-8 ; 0x4a08 <ParamSet_DefaultSet2+0x44>
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
4a10: 68 e8 ldi r22, 0x88 ; 136
4a12: 70 e0 ldi r23, 0x00 ; 0
4a14: 8e e3 ldi r24, 0x3E ; 62
4a16: 95 e0 ldi r25, 0x05 ; 5
4a18: 31 de rcall .-926 ; 0x467c <RAM_Checksum>
4a1a: 80 93 c6 05 sts 0x05C6, r24
4a1e: 08 95 ret
00004a20 <ParamSet_DefaultSet3>:
/***************************************************/
/* Default Values for parameter set 3 */
/***************************************************/
void ParamSet_DefaultSet3(void) // Easy
{
CommonDefaults();
4a20: 85 de rcall .-758 ; 0x472c <CommonDefaults>
EE_Parameter.Stick_P = 6; // Wert : 1-20
4a22: 86 e0 ldi r24, 0x06 ; 6
4a24: 80 93 55 05 sts 0x0555, r24
EE_Parameter.Stick_D = 10; // Wert : 0-20
4a28: 9a e0 ldi r25, 0x0A ; 10
4a2a: 90 93 56 05 sts 0x0556, r25
EE_Parameter.StickGier_P = 4; // Wert : 1-20
4a2e: 94 e0 ldi r25, 0x04 ; 4
4a30: 90 93 57 05 sts 0x0557, r25
EE_Parameter.Gyro_P = 100; // Wert : 0-247
4a34: 24 e6 ldi r18, 0x64 ; 100
4a36: 20 93 5c 05 sts 0x055C, r18
EE_Parameter.Gyro_I = 120; // Wert : 0-247
4a3a: 98 e7 ldi r25, 0x78 ; 120
4a3c: 90 93 5d 05 sts 0x055D, r25
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247
4a40: 20 93 5f 05 sts 0x055F, r18
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
4a44: 90 93 60 05 sts 0x0560, r25
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
4a48: 80 93 61 05 sts 0x0561, r24
EE_Parameter.I_Faktor = 16;
4a4c: 80 e1 ldi r24, 0x10 ; 16
4a4e: 80 93 66 05 sts 0x0566, r24
EE_Parameter.CouplingYawCorrection = 70;
4a52: 86 e4 ldi r24, 0x46 ; 70
4a54: 80 93 7e 05 sts 0x057E, r24
EE_Parameter.DynamicStability = 70;
4a58: 80 93 83 05 sts 0x0583, r24
memcpy(EE_Parameter.Name, "Easy", 4);
4a5c: 85 e4 ldi r24, 0x45 ; 69
4a5e: 91 e6 ldi r25, 0x61 ; 97
4a60: a3 e7 ldi r26, 0x73 ; 115
4a62: b9 e7 ldi r27, 0x79 ; 121
4a64: 80 93 ba 05 sts 0x05BA, r24
4a68: 90 93 bb 05 sts 0x05BB, r25
4a6c: a0 93 bc 05 sts 0x05BC, r26
4a70: b0 93 bd 05 sts 0x05BD, r27
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
4a74: 68 e8 ldi r22, 0x88 ; 136
4a76: 70 e0 ldi r23, 0x00 ; 0
4a78: 8e e3 ldi r24, 0x3E ; 62
4a7a: 95 e0 ldi r25, 0x05 ; 5
4a7c: ff dd rcall .-1026 ; 0x467c <RAM_Checksum>
4a7e: 80 93 c6 05 sts 0x05C6, r24
4a82: 08 95 ret
00004a84 <GetParamByte>:
/***************************************************/
/* Read Parameter from EEPROM as byte */
/***************************************************/
uint8_t GetParamByte(uint16_t param_id)
{
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id));
4a84: 0c 94 3e b2 jmp 0x1647c ; 0x1647c <__eerd_byte_m1284>
}
4a88: 08 95 ret
00004a8a <SetParamByte>:
/***************************************************/
/* Write Parameter to EEPROM as byte */
/***************************************************/
void SetParamByte(uint16_t param_id, uint8_t value)
{
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value);
4a8a: 0c 94 54 b2 jmp 0x164a8 ; 0x164a8 <__eewr_byte_m1284>
4a8e: 08 95 ret
00004a90 <GetParamWord>:
/***************************************************/
/* Read Parameter from EEPROM as word */
/***************************************************/
uint16_t GetParamWord(uint16_t param_id)
{
return eeprom_read_word((uint16_t *)(EEPROM_ADR_PARAM_BEGIN + param_id));
4a90: 0c 94 46 b2 jmp 0x1648c ; 0x1648c <__eerd_word_m1284>
}
4a94: 08 95 ret
00004a96 <SetParamWord>:
/***************************************************/
/* Write Parameter to EEPROM as word */
/***************************************************/
void SetParamWord(uint16_t param_id, uint16_t value)
{
eeprom_write_word((uint16_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value);
4a96: 0c 94 62 b2 jmp 0x164c4 ; 0x164c4 <__eewr_word_m1284>
4a9a: 08 95 ret
00004a9c <ParamSet_ReadFromEEProm>:
/***************************************************/
/* Read Parameter Set from EEPROM */
/***************************************************/
// number [1..5]
uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber)
{
4a9c: ff 92 push r15
4a9e: 0f 93 push r16
4aa0: 1f 93 push r17
4aa2: cf 93 push r28
4aa4: df 93 push r29
uint8_t crc;
uint16_t eeaddr;
// range the setnumber
if((1 > setnumber) || (setnumber > 5)) setnumber = 3;
4aa6: 9f ef ldi r25, 0xFF ; 255
4aa8: 98 0f add r25, r24
4aaa: 95 30 cpi r25, 0x05 ; 5
4aac: 08 f0 brcs .+2 ; 0x4ab0 <ParamSet_ReadFromEEProm+0x14>
4aae: 83 e0 ldi r24, 0x03 ; 3
// calculate eeprom addr
eeaddr = EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1);
4ab0: 90 e0 ldi r25, 0x00 ; 0
4ab2: 01 97 sbiw r24, 0x01 ; 1
4ab4: 29 e8 ldi r18, 0x89 ; 137
4ab6: 28 9f mul r18, r24
4ab8: e0 01 movw r28, r0
4aba: 29 9f mul r18, r25
4abc: d0 0d add r29, r0
4abe: 11 24 eor r1, r1
4ac0: 8e 01 movw r16, r28
4ac2: 0c 59 subi r16, 0x9C ; 156
4ac4: 1f 4f sbci r17, 0xFF ; 255
// calculate checksum from eeprom
crc = EEProm_Checksum(eeaddr, PARAMSET_STRUCT_LEN - 1);
4ac6: 68 e8 ldi r22, 0x88 ; 136
4ac8: 70 e0 ldi r23, 0x00 ; 0
4aca: c8 01 movw r24, r16
4acc: e6 dd rcall .-1076 ; 0x469a <EEProm_Checksum>
4ace: f8 2e mov r15, r24
// check crc
if(crc != eeprom_read_byte((uint8_t*)(eeaddr + PARAMSET_STRUCT_LEN - 1))) return 0;
4ad0: ce 01 movw r24, r28
4ad2: 84 51 subi r24, 0x14 ; 20
4ad4: 9f 4f sbci r25, 0xFF ; 255
4ad6: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
4ada: 8f 11 cpse r24, r15
4adc: 12 c0 rjmp .+36 ; 0x4b02 <ParamSet_ReadFromEEProm+0x66>
// check revision
if(eeprom_read_byte((uint8_t*)(eeaddr)) != EEPARAM_REVISION) return 0;
4ade: c8 01 movw r24, r16
4ae0: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
4ae4: 87 36 cpi r24, 0x67 ; 103
4ae6: 79 f4 brne .+30 ; 0x4b06 <ParamSet_ReadFromEEProm+0x6a>
// read paramset from eeprom
eeprom_read_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN);
4ae8: 49 e8 ldi r20, 0x89 ; 137
4aea: 50 e0 ldi r21, 0x00 ; 0
4aec: b8 01 movw r22, r16
4aee: 8e e3 ldi r24, 0x3E ; 62
4af0: 95 e0 ldi r25, 0x05 ; 5
4af2: 0e 94 2e b2 call 0x1645c ; 0x1645c <__eerd_block_m1284>
LED_Init();
4af6: 0e 94 80 85 call 0x10b00 ; 0x10b00 <LED_Init>
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
4afa: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
#endif
return 1;
4afe: 81 e0 ldi r24, 0x01 ; 1
4b00: 03 c0 rjmp .+6 ; 0x4b08 <ParamSet_ReadFromEEProm+0x6c>
// calculate checksum from eeprom
crc = EEProm_Checksum(eeaddr, PARAMSET_STRUCT_LEN - 1);
// check crc
if(crc != eeprom_read_byte((uint8_t*)(eeaddr + PARAMSET_STRUCT_LEN - 1))) return 0;
4b02: 80 e0 ldi r24, 0x00 ; 0
4b04: 01 c0 rjmp .+2 ; 0x4b08 <ParamSet_ReadFromEEProm+0x6c>
// check revision
if(eeprom_read_byte((uint8_t*)(eeaddr)) != EEPARAM_REVISION) return 0;
4b06: 80 e0 ldi r24, 0x00 ; 0
LED_Init();
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
#endif
return 1;
}
4b08: df 91 pop r29
4b0a: cf 91 pop r28
4b0c: 1f 91 pop r17
4b0e: 0f 91 pop r16
4b10: ff 90 pop r15
4b12: 08 95 ret
00004b14 <MixerTable_ReadFromEEProm>:
/***************************************************/
/* Read MixerTable from EEPROM */
/***************************************************/
uint8_t MixerTable_ReadFromEEProm(void)
{
4b14: cf 93 push r28
uint8_t crc;
// calculate checksum in eeprom
crc = EEProm_Checksum(EEPROM_ADR_MIXERTABLE, sizeof(Mixer) - 1);
4b16: 6d e4 ldi r22, 0x4D ; 77
4b18: 70 e0 ldi r23, 0x00 ; 0
4b1a: 88 ee ldi r24, 0xE8 ; 232
4b1c: 93 e0 ldi r25, 0x03 ; 3
4b1e: bd dd rcall .-1158 ; 0x469a <EEProm_Checksum>
4b20: c8 2f mov r28, r24
// check crc
if( crc != eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE + sizeof(Mixer) - 1)) ) return 0;
4b22: 85 e3 ldi r24, 0x35 ; 53
4b24: 94 e0 ldi r25, 0x04 ; 4
4b26: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
4b2a: 8c 13 cpse r24, r28
4b2c: 10 c0 rjmp .+32 ; 0x4b4e <MixerTable_ReadFromEEProm+0x3a>
// check revision
if(eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE)) != EEMIXER_REVISION) return 0;
4b2e: 88 ee ldi r24, 0xE8 ; 232
4b30: 93 e0 ldi r25, 0x03 ; 3
4b32: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
4b36: 81 30 cpi r24, 0x01 ; 1
4b38: 61 f4 brne .+24 ; 0x4b52 <MixerTable_ReadFromEEProm+0x3e>
// read mixer table
eeprom_read_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer));
4b3a: 4e e4 ldi r20, 0x4E ; 78
4b3c: 50 e0 ldi r21, 0x00 ; 0
4b3e: 68 ee ldi r22, 0xE8 ; 232
4b40: 73 e0 ldi r23, 0x03 ; 3
4b42: 87 ec ldi r24, 0xC7 ; 199
4b44: 95 e0 ldi r25, 0x05 ; 5
4b46: 0e 94 2e b2 call 0x1645c ; 0x1645c <__eerd_block_m1284>
return 1;
4b4a: 81 e0 ldi r24, 0x01 ; 1
4b4c: 03 c0 rjmp .+6 ; 0x4b54 <MixerTable_ReadFromEEProm+0x40>
// calculate checksum in eeprom
crc = EEProm_Checksum(EEPROM_ADR_MIXERTABLE, sizeof(Mixer) - 1);
// check crc
if( crc != eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE + sizeof(Mixer) - 1)) ) return 0;
4b4e: 80 e0 ldi r24, 0x00 ; 0
4b50: 01 c0 rjmp .+2 ; 0x4b54 <MixerTable_ReadFromEEProm+0x40>
// check revision
if(eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE)) != EEMIXER_REVISION) return 0;
4b52: 80 e0 ldi r24, 0x00 ; 0
// read mixer table
eeprom_read_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer));
return 1;
}
4b54: cf 91 pop r28
4b56: 08 95 ret
00004b58 <MixerTable_WriteToEEProm>:
/***************************************************/
/* Write Mixer Table to EEPROM */
/***************************************************/
uint8_t MixerTable_WriteToEEProm(void)
{
if(Mixer.Revision == EEMIXER_REVISION)
4b58: 80 91 c7 05 lds r24, 0x05C7
4b5c: 81 30 cpi r24, 0x01 ; 1
4b5e: 89 f4 brne .+34 ; 0x4b82 <MixerTable_WriteToEEProm+0x2a>
{
// update crc
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1);
4b60: 6d e4 ldi r22, 0x4D ; 77
4b62: 70 e0 ldi r23, 0x00 ; 0
4b64: 87 ec ldi r24, 0xC7 ; 199
4b66: 95 e0 ldi r25, 0x05 ; 5
4b68: 89 dd rcall .-1262 ; 0x467c <RAM_Checksum>
4b6a: 80 93 14 06 sts 0x0614, r24
// write to eeprom
eeprom_write_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer));
4b6e: 4e e4 ldi r20, 0x4E ; 78
4b70: 50 e0 ldi r21, 0x00 ; 0
4b72: 68 ee ldi r22, 0xE8 ; 232
4b74: 73 e0 ldi r23, 0x03 ; 3
4b76: 87 ec ldi r24, 0xC7 ; 199
4b78: 95 e0 ldi r25, 0x05 ; 5
4b7a: 0e 94 4b b2 call 0x16496 ; 0x16496 <__eewr_block_m1284>
return 1;
4b7e: 81 e0 ldi r24, 0x01 ; 1
4b80: 08 95 ret
}
else return 0;
4b82: 80 e0 ldi r24, 0x00 ; 0
}
4b84: 08 95 ret
00004b86 <MixerTable_Default>:
/***************************************************/
void MixerTable_Default(void) // Quadro
{
uint8_t i;
Mixer.Revision = EEMIXER_REVISION;
4b86: 81 e0 ldi r24, 0x01 ; 1
4b88: 80 93 c7 05 sts 0x05C7, r24
4b8c: e7 ed ldi r30, 0xD7 ; 215
4b8e: f5 e0 ldi r31, 0x05 ; 5
4b90: 87 e1 ldi r24, 0x17 ; 23
4b92: 96 e0 ldi r25, 0x06 ; 6
4b94: df 01 movw r26, r30
4b96: 13 97 sbiw r26, 0x03 ; 3
// clear mixer table
for(i = 0; i < 16; i++)
{
Mixer.Motor[i][MIX_GAS] = 0;
4b98: 1c 92 st X, r1
4b9a: 11 96 adiw r26, 0x01 ; 1
Mixer.Motor[i][MIX_NICK] = 0;
4b9c: 1c 92 st X, r1
4b9e: 11 96 adiw r26, 0x01 ; 1
Mixer.Motor[i][MIX_ROLL] = 0;
4ba0: 1c 92 st X, r1
Mixer.Motor[i][MIX_YAW] = 0;
4ba2: 10 82 st Z, r1
4ba4: 34 96 adiw r30, 0x04 ; 4
{
uint8_t i;
Mixer.Revision = EEMIXER_REVISION;
// clear mixer table
for(i = 0; i < 16; i++)
4ba6: e8 17 cp r30, r24
4ba8: f9 07 cpc r31, r25
4baa: a1 f7 brne .-24 ; 0x4b94 <MixerTable_Default+0xe>
Mixer.Motor[i][MIX_NICK] = 0;
Mixer.Motor[i][MIX_ROLL] = 0;
Mixer.Motor[i][MIX_YAW] = 0;
}
// default = Quadro
Mixer.Motor[0][MIX_GAS] = 64; Mixer.Motor[0][MIX_NICK] = +64; Mixer.Motor[0][MIX_ROLL] = 0; Mixer.Motor[0][MIX_YAW] = +64;
4bac: 80 e4 ldi r24, 0x40 ; 64
4bae: 80 93 d4 05 sts 0x05D4, r24
4bb2: 80 93 d5 05 sts 0x05D5, r24
4bb6: 10 92 d6 05 sts 0x05D6, r1
4bba: 80 93 d7 05 sts 0x05D7, r24
Mixer.Motor[1][MIX_GAS] = 64; Mixer.Motor[1][MIX_NICK] = -64; Mixer.Motor[1][MIX_ROLL] = 0; Mixer.Motor[1][MIX_YAW] = +64;
4bbe: 80 93 d8 05 sts 0x05D8, r24
4bc2: 90 ec ldi r25, 0xC0 ; 192
4bc4: 90 93 d9 05 sts 0x05D9, r25
4bc8: 10 92 da 05 sts 0x05DA, r1
4bcc: 80 93 db 05 sts 0x05DB, r24
Mixer.Motor[2][MIX_GAS] = 64; Mixer.Motor[2][MIX_NICK] = 0; Mixer.Motor[2][MIX_ROLL] = -64; Mixer.Motor[2][MIX_YAW] = -64;
4bd0: 80 93 dc 05 sts 0x05DC, r24
4bd4: 10 92 dd 05 sts 0x05DD, r1
4bd8: 90 93 de 05 sts 0x05DE, r25
4bdc: 90 93 df 05 sts 0x05DF, r25
Mixer.Motor[3][MIX_GAS] = 64; Mixer.Motor[3][MIX_NICK] = 0; Mixer.Motor[3][MIX_ROLL] = +64; Mixer.Motor[3][MIX_YAW] = -64;
4be0: 80 93 e0 05 sts 0x05E0, r24
4be4: 10 92 e1 05 sts 0x05E1, r1
4be8: 80 93 e2 05 sts 0x05E2, r24
4bec: 90 93 e3 05 sts 0x05E3, r25
memcpy(Mixer.Name, "Quadro\0\0\0\0\0\0", 12);
4bf0: 8c e0 ldi r24, 0x0C ; 12
4bf2: e8 eb ldi r30, 0xB8 ; 184
4bf4: f2 e0 ldi r31, 0x02 ; 2
4bf6: a8 ec ldi r26, 0xC8 ; 200
4bf8: b5 e0 ldi r27, 0x05 ; 5
4bfa: 01 90 ld r0, Z+
4bfc: 0d 92 st X+, r0
4bfe: 8a 95 dec r24
4c00: e1 f7 brne .-8 ; 0x4bfa <MixerTable_Default+0x74>
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1);
4c02: 6d e4 ldi r22, 0x4D ; 77
4c04: 70 e0 ldi r23, 0x00 ; 0
4c06: 87 ec ldi r24, 0xC7 ; 199
4c08: 95 e0 ldi r25, 0x05 ; 5
4c0a: 38 dd rcall .-1424 ; 0x467c <RAM_Checksum>
4c0c: 80 93 14 06 sts 0x0614, r24
4c10: 08 95 ret
00004c12 <GetActiveParamSet>:
/* Get active parameter set */
/***************************************************/
uint8_t GetActiveParamSet(void)
{
uint8_t setnumber;
setnumber = eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET));
4c12: 82 e0 ldi r24, 0x02 ; 2
4c14: 90 e0 ldi r25, 0x00 ; 0
4c16: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
if(setnumber > 5)
4c1a: 86 30 cpi r24, 0x06 ; 6
4c1c: 30 f0 brcs .+12 ; 0x4c2a <GetActiveParamSet+0x18>
{
setnumber = 3;
eeprom_write_byte((void*)(EEPROM_ADR_PARAM_BEGIN+PID_ACTIVE_SET), setnumber);
4c1e: 63 e0 ldi r22, 0x03 ; 3
4c20: 82 e0 ldi r24, 0x02 ; 2
4c22: 90 e0 ldi r25, 0x00 ; 0
4c24: 0e 94 54 b2 call 0x164a8 ; 0x164a8 <__eewr_byte_m1284>
{
uint8_t setnumber;
setnumber = eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET));
if(setnumber > 5)
{
setnumber = 3;
4c28: 83 e0 ldi r24, 0x03 ; 3
eeprom_write_byte((void*)(EEPROM_ADR_PARAM_BEGIN+PID_ACTIVE_SET), setnumber);
}
ActiveParamSet = setnumber;
4c2a: 80 93 52 01 sts 0x0152, r24
return(setnumber);
}
4c2e: 08 95 ret
00004c30 <SetActiveParamSet>:
/***************************************************/
/* Set active parameter set */
/***************************************************/
void SetActiveParamSet(uint8_t setnumber)
{
4c30: 86 30 cpi r24, 0x06 ; 6
4c32: 08 f0 brcs .+2 ; 0x4c36 <SetActiveParamSet+0x6>
4c34: 85 e0 ldi r24, 0x05 ; 5
if(setnumber > 5) setnumber = 5;
if(setnumber < 1) setnumber = 1;
4c36: 81 11 cpse r24, r1
4c38: 01 c0 rjmp .+2 ; 0x4c3c <SetActiveParamSet+0xc>
4c3a: 81 e0 ldi r24, 0x01 ; 1
ActiveParamSet = setnumber;
4c3c: 80 93 52 01 sts 0x0152, r24
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET), setnumber);
4c40: 68 2f mov r22, r24
4c42: 82 e0 ldi r24, 0x02 ; 2
4c44: 90 e0 ldi r25, 0x00 ; 0
4c46: 0c 94 54 b2 jmp 0x164a8 ; 0x164a8 <__eewr_byte_m1284>
4c4a: 08 95 ret
00004c4c <ParamSet_WriteToEEProm>:
/***************************************************/
/* Write Parameter Set to EEPROM */
/***************************************************/
// number [1..5]
uint8_t ParamSet_WriteToEEProm(uint8_t setnumber)
{
4c4c: cf 93 push r28
uint8_t crc;
if(EE_Parameter.Revision == EEPARAM_REVISION) // write only the right revision to eeprom
4c4e: 90 91 3e 05 lds r25, 0x053E
4c52: 97 36 cpi r25, 0x67 ; 103
4c54: 09 f0 breq .+2 ; 0x4c58 <ParamSet_WriteToEEProm+0xc>
4c56: 47 c0 rjmp .+142 ; 0x4ce6 <ParamSet_WriteToEEProm+0x9a>
4c58: c8 2f mov r28, r24
4c5a: 86 30 cpi r24, 0x06 ; 6
4c5c: 08 f0 brcs .+2 ; 0x4c60 <ParamSet_WriteToEEProm+0x14>
4c5e: c5 e0 ldi r28, 0x05 ; 5
{
if(setnumber > 5) setnumber = 5;
if(setnumber < 1) return 0;
4c60: cc 23 and r28, r28
4c62: 09 f4 brne .+2 ; 0x4c66 <ParamSet_WriteToEEProm+0x1a>
4c64: 42 c0 rjmp .+132 ; 0x4cea <ParamSet_WriteToEEProm+0x9e>
LIBFC_CheckSettings();
4c66: 0e 94 00 1a call 0x3400 ; 0x3400 <LIBFC_CheckSettings>
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) // check the Setting: Not more than 100% emergency gas
4c6a: 80 91 b9 05 lds r24, 0x05B9
4c6e: 82 ff sbrs r24, 2
4c70: 07 c0 rjmp .+14 ; 0x4c80 <ParamSet_WriteToEEProm+0x34>
{
if(EE_Parameter.NotGas > 99) EE_Parameter.NotGas = 80; // i.e. 80% of Hovergas
4c72: 80 91 63 05 lds r24, 0x0563
4c76: 84 36 cpi r24, 0x64 ; 100
4c78: 18 f0 brcs .+6 ; 0x4c80 <ParamSet_WriteToEEProm+0x34>
4c7a: 80 e5 ldi r24, 0x50 ; 80
4c7c: 80 93 63 05 sts 0x0563, r24
}
// update checksum
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
4c80: 68 e8 ldi r22, 0x88 ; 136
4c82: 70 e0 ldi r23, 0x00 ; 0
4c84: 8e e3 ldi r24, 0x3E ; 62
4c86: 95 e0 ldi r25, 0x05 ; 5
4c88: f9 dc rcall .-1550 ; 0x467c <RAM_Checksum>
4c8a: 80 93 c6 05 sts 0x05C6, r24
// write paramset to eeprom
eeprom_write_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN);
4c8e: 2c 2f mov r18, r28
4c90: 30 e0 ldi r19, 0x00 ; 0
4c92: 21 50 subi r18, 0x01 ; 1
4c94: 31 09 sbc r19, r1
4c96: 89 e8 ldi r24, 0x89 ; 137
4c98: 82 9f mul r24, r18
4c9a: b0 01 movw r22, r0
4c9c: 83 9f mul r24, r19
4c9e: 70 0d add r23, r0
4ca0: 11 24 eor r1, r1
4ca2: 6c 59 subi r22, 0x9C ; 156
4ca4: 7f 4f sbci r23, 0xFF ; 255
4ca6: 49 e8 ldi r20, 0x89 ; 137
4ca8: 50 e0 ldi r21, 0x00 ; 0
4caa: 8e e3 ldi r24, 0x3E ; 62
4cac: 95 e0 ldi r25, 0x05 ; 5
4cae: 0e 94 4b b2 call 0x16496 ; 0x16496 <__eewr_block_m1284>
// backup channel settings to separate block in eeprom
eeprom_write_block( (void*)(EE_Parameter.Kanalbelegung), (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
4cb2: 4c e0 ldi r20, 0x0C ; 12
4cb4: 50 e0 ldi r21, 0x00 ; 0
4cb6: 60 e5 ldi r22, 0x50 ; 80
4cb8: 70 e0 ldi r23, 0x00 ; 0
4cba: 8f e3 ldi r24, 0x3F ; 63
4cbc: 95 e0 ldi r25, 0x05 ; 5
4cbe: 0e 94 4b b2 call 0x16496 ; 0x16496 <__eewr_block_m1284>
// write crc of channel block to eeprom
crc = RAM_Checksum((uint8_t*)(EE_Parameter.Kanalbelegung), sizeof(EE_Parameter.Kanalbelegung));
4cc2: 6c e0 ldi r22, 0x0C ; 12
4cc4: 70 e0 ldi r23, 0x00 ; 0
4cc6: 8f e3 ldi r24, 0x3F ; 63
4cc8: 95 e0 ldi r25, 0x05 ; 5
4cca: d8 dc rcall .-1616 ; 0x467c <RAM_Checksum>
eeprom_write_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)), crc);
4ccc: 68 2f mov r22, r24
4cce: 8c e5 ldi r24, 0x5C ; 92
4cd0: 90 e0 ldi r25, 0x00 ; 0
4cd2: 0e 94 54 b2 call 0x164a8 ; 0x164a8 <__eewr_byte_m1284>
// update active settings number
SetActiveParamSet(setnumber);
4cd6: 8c 2f mov r24, r28
4cd8: ab df rcall .-170 ; 0x4c30 <SetActiveParamSet>
LED_Init();
4cda: 0e 94 80 85 call 0x10b00 ; 0x10b00 <LED_Init>
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
4cde: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
#endif
return 1;
4ce2: 81 e0 ldi r24, 0x01 ; 1
4ce4: 03 c0 rjmp .+6 ; 0x4cec <ParamSet_WriteToEEProm+0xa0>
}
// wrong revision
return 0;
4ce6: 80 e0 ldi r24, 0x00 ; 0
4ce8: 01 c0 rjmp .+2 ; 0x4cec <ParamSet_WriteToEEProm+0xa0>
uint8_t crc;
if(EE_Parameter.Revision == EEPARAM_REVISION) // write only the right revision to eeprom
{
if(setnumber > 5) setnumber = 5;
if(setnumber < 1) return 0;
4cea: 80 e0 ldi r24, 0x00 ; 0
#endif
return 1;
}
// wrong revision
return 0;
}
4cec: cf 91 pop r28
4cee: 08 95 ret
00004cf0 <SetDefaultParameter>:
/***************************************************/
/* Set default parameter set */
/***************************************************/
void SetDefaultParameter(uint8_t set, uint8_t restore_channels)
{
4cf0: cf 93 push r28
4cf2: df 93 push r29
4cf4: c8 2f mov r28, r24
4cf6: d6 2f mov r29, r22
if(set > 5) set = 5;
4cf8: 86 30 cpi r24, 0x06 ; 6
4cfa: 80 f4 brcc .+32 ; 0x4d1c <SetDefaultParameter+0x2c>
else if(set < 1) set = 1;
4cfc: 88 23 and r24, r24
4cfe: 39 f0 breq .+14 ; 0x4d0e <SetDefaultParameter+0x1e>
switch(set)
4d00: 82 30 cpi r24, 0x02 ; 2
4d02: 41 f0 breq .+16 ; 0x4d14 <SetDefaultParameter+0x24>
4d04: 83 30 cpi r24, 0x03 ; 3
4d06: 41 f0 breq .+16 ; 0x4d18 <SetDefaultParameter+0x28>
4d08: 81 30 cpi r24, 0x01 ; 1
4d0a: 49 f4 brne .+18 ; 0x4d1e <SetDefaultParameter+0x2e>
4d0c: 01 c0 rjmp .+2 ; 0x4d10 <SetDefaultParameter+0x20>
/***************************************************/
void SetDefaultParameter(uint8_t set, uint8_t restore_channels)
{
if(set > 5) set = 5;
else if(set < 1) set = 1;
4d0e: c1 e0 ldi r28, 0x01 ; 1
switch(set)
{
case 1:
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport)
4d10: 26 de rcall .-948 ; 0x495e <ParamSet_DefaultSet1>
break;
4d12: 06 c0 rjmp .+12 ; 0x4d20 <SetDefaultParameter+0x30>
case 2:
ParamSet_DefaultSet2(); // Kamera
4d14: 57 de rcall .-850 ; 0x49c4 <ParamSet_DefaultSet2>
break;
4d16: 04 c0 rjmp .+8 ; 0x4d20 <SetDefaultParameter+0x30>
case 3:
ParamSet_DefaultSet3(); // Beginner
4d18: 83 de rcall .-762 ; 0x4a20 <ParamSet_DefaultSet3>
break;
4d1a: 02 c0 rjmp .+4 ; 0x4d20 <SetDefaultParameter+0x30>
/* Set default parameter set */
/***************************************************/
void SetDefaultParameter(uint8_t set, uint8_t restore_channels)
{
if(set > 5) set = 5;
4d1c: c5 e0 ldi r28, 0x05 ; 5
break;
case 3:
ParamSet_DefaultSet3(); // Beginner
break;
default:
ParamSet_DefaultSet3(); // Beginner
4d1e: 80 de rcall .-768 ; 0x4a20 <ParamSet_DefaultSet3>
break;
}
if(restore_channels)
4d20: dd 23 and r29, r29
4d22: b9 f0 breq .+46 ; 0x4d52 <SetDefaultParameter+0x62>
{
uint8_t crc;
// 1st check for a valid channel backup in eeprom
crc = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung));
4d24: 6c e0 ldi r22, 0x0C ; 12
4d26: 70 e0 ldi r23, 0x00 ; 0
4d28: 80 e5 ldi r24, 0x50 ; 80
4d2a: 90 e0 ldi r25, 0x00 ; 0
4d2c: b6 dc rcall .-1684 ; 0x469a <EEProm_Checksum>
4d2e: d8 2f mov r29, r24
if(crc == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) )
4d30: 8c e5 ldi r24, 0x5C ; 92
4d32: 90 e0 ldi r25, 0x00 ; 0
4d34: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
4d38: 8d 13 cpse r24, r29
4d3a: 09 c0 rjmp .+18 ; 0x4d4e <SetDefaultParameter+0x5e>
{
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
4d3c: 4c e0 ldi r20, 0x0C ; 12
4d3e: 50 e0 ldi r21, 0x00 ; 0
4d40: 60 e5 ldi r22, 0x50 ; 80
4d42: 70 e0 ldi r23, 0x00 ; 0
4d44: 8f e3 ldi r24, 0x3F ; 63
4d46: 95 e0 ldi r25, 0x05 ; 5
4d48: 0e 94 2e b2 call 0x1645c ; 0x1645c <__eerd_block_m1284>
4d4c: 03 c0 rjmp .+6 ; 0x4d54 <SetDefaultParameter+0x64>
}
else ParamSet_DefaultStickMapping();
4d4e: c9 dc rcall .-1646 ; 0x46e2 <ParamSet_DefaultStickMapping>
4d50: 01 c0 rjmp .+2 ; 0x4d54 <SetDefaultParameter+0x64>
}
else ParamSet_DefaultStickMapping();
4d52: c7 dc rcall .-1650 ; 0x46e2 <ParamSet_DefaultStickMapping>
ParamSet_WriteToEEProm(set);
4d54: 8c 2f mov r24, r28
4d56: 7a df rcall .-268 ; 0x4c4c <ParamSet_WriteToEEProm>
}
4d58: df 91 pop r29
4d5a: cf 91 pop r28
4d5c: 08 95 ret
00004d5e <ParamSet_Init>:
/***************************************************/
/* Initialize EEPROM Parameter Sets */
/***************************************************/
void ParamSet_Init(void)
{
4d5e: 8f 92 push r8
4d60: 9f 92 push r9
4d62: af 92 push r10
4d64: bf 92 push r11
4d66: cf 92 push r12
4d68: df 92 push r13
4d6a: ef 92 push r14
4d6c: ff 92 push r15
4d6e: 0f 93 push r16
4d70: 1f 93 push r17
4d72: cf 93 push r28
4d74: df 93 push r29
/***************************************************/
/* Read Parameter from EEPROM as byte */
/***************************************************/
uint8_t GetParamByte(uint16_t param_id)
{
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id));
4d76: 81 e1 ldi r24, 0x11 ; 17
4d78: 90 e0 ldi r25, 0x00 ; 0
4d7a: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
/***************************************************/
void ParamSet_Init(void)
{
uint8_t channel_backup = 0, bad_params = 0, ee_default = 0,i;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(PlatinenVersion != GetParamByte(PID_HARDWARE_VERSION))
4d7e: 90 91 54 01 lds r25, 0x0154
4d82: 98 17 cp r25, r24
4d84: 71 f1 breq .+92 ; 0x4de2 <ParamSet_Init+0x84>
{
if(PlatinenVersion == 22 && GetParamByte(PID_HARDWARE_VERSION) == 21 && !(PIND & 0x10)) SetParamByte(PID_EE_REVISION,0); // reset the Settings if the Version changed to V2.2
4d86: 96 31 cpi r25, 0x16 ; 22
4d88: 49 f4 brne .+18 ; 0x4d9c <ParamSet_Init+0x3e>
4d8a: 85 31 cpi r24, 0x15 ; 21
4d8c: 39 f4 brne .+14 ; 0x4d9c <ParamSet_Init+0x3e>
4d8e: 4c 99 sbic 0x09, 4 ; 9
4d90: 05 c0 rjmp .+10 ; 0x4d9c <ParamSet_Init+0x3e>
/***************************************************/
/* Write Parameter to EEPROM as byte */
/***************************************************/
void SetParamByte(uint16_t param_id, uint8_t value)
{
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value);
4d92: 60 e0 ldi r22, 0x00 ; 0
4d94: 81 e0 ldi r24, 0x01 ; 1
4d96: 90 e0 ldi r25, 0x00 ; 0
4d98: 0e 94 54 b2 call 0x164a8 ; 0x164a8 <__eewr_byte_m1284>
4d9c: 60 91 54 01 lds r22, 0x0154
4da0: 81 e1 ldi r24, 0x11 ; 17
4da2: 90 e0 ldi r25, 0x00 ; 0
4da4: 0e 94 54 b2 call 0x164a8 ; 0x164a8 <__eewr_byte_m1284>
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(PlatinenVersion != GetParamByte(PID_HARDWARE_VERSION))
{
if(PlatinenVersion == 22 && GetParamByte(PID_HARDWARE_VERSION) == 21 && !(PIND & 0x10)) SetParamByte(PID_EE_REVISION,0); // reset the Settings if the Version changed to V2.2
SetParamByte(PID_HARDWARE_VERSION,PlatinenVersion); // Remember the Version number
wdt_enable(WDTO_15MS); // Reset-Commando
4da8: 28 e0 ldi r18, 0x08 ; 8
4daa: 88 e1 ldi r24, 0x18 ; 24
4dac: 90 e0 ldi r25, 0x00 ; 0
4dae: 0f b6 in r0, 0x3f ; 63
4db0: f8 94 cli
4db2: a8 95 wdr
4db4: 80 93 60 00 sts 0x0060, r24
4db8: 0f be out 0x3f, r0 ; 63
4dba: 20 93 60 00 sts 0x0060, r18
printf("\n\r--> Hardware Version Byte Changed <--");
4dbe: 89 eb ldi r24, 0xB9 ; 185
4dc0: 92 e0 ldi r25, 0x02 ; 2
4dc2: 9f 93 push r25
4dc4: 8f 93 push r24
4dc6: 87 eb ldi r24, 0xB7 ; 183
4dc8: 9c ea ldi r25, 0xAC ; 172
4dca: 9f 93 push r25
4dcc: 8f 93 push r24
4dce: e0 91 78 06 lds r30, 0x0678
4dd2: f0 91 79 06 lds r31, 0x0679
4dd6: 09 95 icall
4dd8: 0f 90 pop r0
4dda: 0f 90 pop r0
4ddc: 0f 90 pop r0
4dde: 0f 90 pop r0
4de0: ff cf rjmp .-2 ; 0x4de0 <ParamSet_Init+0x82>
/***************************************************/
/* Read Parameter from EEPROM as byte */
/***************************************************/
uint8_t GetParamByte(uint16_t param_id)
{
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id));
4de2: 81 e0 ldi r24, 0x01 ; 1
4de4: 90 e0 ldi r25, 0x00 ; 0
4de6: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
wdt_enable(WDTO_15MS); // Reset-Commando
printf("\n\r--> Hardware Version Byte Changed <--");
while(1);
}
#endif
if((EEPARAM_REVISION) != GetParamByte(PID_EE_REVISION))
4dea: ff 24 eor r15, r15
4dec: f3 94 inc r15
4dee: 87 36 cpi r24, 0x67 ; 103
4df0: 09 f4 brne .+2 ; 0x4df4 <ParamSet_Init+0x96>
4df2: f1 2c mov r15, r1
{
ee_default = 1; // software update or forced by mktool
}
// 1st check for a valid channel backup in eeprom
i = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung));
4df4: 6c e0 ldi r22, 0x0C ; 12
4df6: 70 e0 ldi r23, 0x00 ; 0
4df8: 80 e5 ldi r24, 0x50 ; 80
4dfa: 90 e0 ldi r25, 0x00 ; 0
4dfc: 4e dc rcall .-1892 ; 0x469a <EEProm_Checksum>
4dfe: b8 2e mov r11, r24
if(i == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)))) channel_backup = 1;
4e00: 8c e5 ldi r24, 0x5C ; 92
4e02: 90 e0 ldi r25, 0x00 ; 0
4e04: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
4e08: c8 2e mov r12, r24
4e0a: c1 e0 ldi r28, 0x01 ; 1
4e0c: d0 e0 ldi r29, 0x00 ; 0
/***************************************************/
/* Initialize EEPROM Parameter Sets */
/***************************************************/
void ParamSet_Init(void)
{
uint8_t channel_backup = 0, bad_params = 0, ee_default = 0,i;
4e0e: d1 2c mov r13, r1
for (i = 1;i < 6; i++)
{
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom
{
bad_params = 1;
printf("\n\rGenerating default Parameter Set %d",i);
4e10: 0f 2e mov r0, r31
4e12: f3 e9 ldi r31, 0x93 ; 147
4e14: 8f 2e mov r8, r31
4e16: f2 e0 ldi r31, 0x02 ; 2
4e18: 9f 2e mov r9, r31
4e1a: f0 2d mov r31, r0
4e1c: 07 eb ldi r16, 0xB7 ; 183
4e1e: 1c ea ldi r17, 0xAC ; 172
// check all 5 parameter settings
for (i = 1;i < 6; i++)
{
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom
{
bad_params = 1;
4e20: aa 24 eor r10, r10
4e22: a3 94 inc r10
4e24: ec 2e mov r14, r28
// parameter check
// check all 5 parameter settings
for (i = 1;i < 6; i++)
{
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom
4e26: f1 10 cpse r15, r1
4e28: 04 c0 rjmp .+8 ; 0x4e32 <ParamSet_Init+0xd4>
4e2a: 8c 2f mov r24, r28
4e2c: 37 de rcall .-914 ; 0x4a9c <ParamSet_ReadFromEEProm>
4e2e: 81 11 cpse r24, r1
4e30: 2c c0 rjmp .+88 ; 0x4e8a <ParamSet_Init+0x12c>
{
bad_params = 1;
printf("\n\rGenerating default Parameter Set %d",i);
4e32: df 93 push r29
4e34: cf 93 push r28
4e36: 9f 92 push r9
4e38: 8f 92 push r8
4e3a: 1f 93 push r17
4e3c: 0f 93 push r16
4e3e: e0 91 78 06 lds r30, 0x0678
4e42: f0 91 79 06 lds r31, 0x0679
4e46: 09 95 icall
switch(i)
4e48: 0f 90 pop r0
4e4a: 0f 90 pop r0
4e4c: 0f 90 pop r0
4e4e: 0f 90 pop r0
4e50: 0f 90 pop r0
4e52: 0f 90 pop r0
4e54: 81 e0 ldi r24, 0x01 ; 1
4e56: e8 16 cp r14, r24
4e58: 21 f0 breq .+8 ; 0x4e62 <ParamSet_Init+0x104>
4e5a: 92 e0 ldi r25, 0x02 ; 2
4e5c: e9 16 cp r14, r25
4e5e: 19 f0 breq .+6 ; 0x4e66 <ParamSet_Init+0x108>
4e60: 04 c0 rjmp .+8 ; 0x4e6a <ParamSet_Init+0x10c>
{
case 1:
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport)
4e62: 7d dd rcall .-1286 ; 0x495e <ParamSet_DefaultSet1>
break;
4e64: 03 c0 rjmp .+6 ; 0x4e6c <ParamSet_Init+0x10e>
case 2:
ParamSet_DefaultSet2(); // Normal
4e66: ae dd rcall .-1188 ; 0x49c4 <ParamSet_DefaultSet2>
break;
4e68: 01 c0 rjmp .+2 ; 0x4e6c <ParamSet_Init+0x10e>
default:
ParamSet_DefaultSet3(); // Easy
4e6a: da dd rcall .-1100 ; 0x4a20 <ParamSet_DefaultSet3>
break;
}
if(channel_backup) // if we have an channel mapping backup in eeprom
4e6c: bc 10 cpse r11, r12
4e6e: 09 c0 rjmp .+18 ; 0x4e82 <ParamSet_Init+0x124>
{ // restore it from eeprom
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
4e70: 4c e0 ldi r20, 0x0C ; 12
4e72: 50 e0 ldi r21, 0x00 ; 0
4e74: 60 e5 ldi r22, 0x50 ; 80
4e76: 70 e0 ldi r23, 0x00 ; 0
4e78: 8f e3 ldi r24, 0x3F ; 63
4e7a: 95 e0 ldi r25, 0x05 ; 5
4e7c: 0e 94 2e b2 call 0x1645c ; 0x1645c <__eerd_block_m1284>
4e80: 01 c0 rjmp .+2 ; 0x4e84 <ParamSet_Init+0x126>
}
else
{ // use default mapping
ParamSet_DefaultStickMapping();
4e82: 2f dc rcall .-1954 ; 0x46e2 <ParamSet_DefaultStickMapping>
}
ParamSet_WriteToEEProm(i);
4e84: 8e 2d mov r24, r14
4e86: e2 de rcall .-572 ; 0x4c4c <ParamSet_WriteToEEProm>
// check all 5 parameter settings
for (i = 1;i < 6; i++)
{
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom
{
bad_params = 1;
4e88: da 2c mov r13, r10
4e8a: 21 96 adiw r28, 0x01 ; 1
if(i == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)))) channel_backup = 1;
// parameter check
// check all 5 parameter settings
for (i = 1;i < 6; i++)
4e8c: c6 30 cpi r28, 0x06 ; 6
4e8e: d1 05 cpc r29, r1
4e90: 49 f6 brne .-110 ; 0x4e24 <ParamSet_Init+0xc6>
ParamSet_DefaultStickMapping();
}
ParamSet_WriteToEEProm(i);
}
}
if(bad_params) // at least one of the parameter settings were invalid
4e92: dd 20 and r13, r13
4e94: 11 f0 breq .+4 ; 0x4e9a <ParamSet_Init+0x13c>
{
// default-Setting is parameter set 3
SetActiveParamSet(3);
4e96: 83 e0 ldi r24, 0x03 ; 3
4e98: cb de rcall .-618 ; 0x4c30 <SetActiveParamSet>
}
// read active parameter set to ParamSet stucture
i = GetActiveParamSet();
4e9a: bb de rcall .-650 ; 0x4c12 <GetActiveParamSet>
4e9c: c8 2f mov r28, r24
ParamSet_ReadFromEEProm(i);
4e9e: fe dd rcall .-1028 ; 0x4a9c <ParamSet_ReadFromEEProm>
printf("\n\rUsing Parameter Set %d", i);
4ea0: 1f 92 push r1
4ea2: cf 93 push r28
4ea4: 8a e7 ldi r24, 0x7A ; 122
4ea6: 92 e0 ldi r25, 0x02 ; 2
4ea8: 9f 93 push r25
4eaa: 8f 93 push r24
4eac: 87 eb ldi r24, 0xB7 ; 183
4eae: 9c ea ldi r25, 0xAC ; 172
4eb0: 9f 93 push r25
4eb2: 8f 93 push r24
4eb4: e0 91 78 06 lds r30, 0x0678
4eb8: f0 91 79 06 lds r31, 0x0679
4ebc: 09 95 icall
/***************************************************/
/* Read Parameter from EEPROM as byte */
/***************************************************/
uint8_t GetParamByte(uint16_t param_id)
{
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id));
4ebe: 81 e0 ldi r24, 0x01 ; 1
4ec0: 90 e0 ldi r25, 0x00 ; 0
4ec2: 0e 94 3e b2 call 0x1647c ; 0x1647c <__eerd_byte_m1284>
i = GetActiveParamSet();
ParamSet_ReadFromEEProm(i);
printf("\n\rUsing Parameter Set %d", i);
// load mixer table
if(GetParamByte(PID_EE_REVISION) == 0xff || !MixerTable_ReadFromEEProm() )
4ec6: 0f 90 pop r0
4ec8: 0f 90 pop r0
4eca: 0f 90 pop r0
4ecc: 0f 90 pop r0
4ece: 0f 90 pop r0
4ed0: 0f 90 pop r0
4ed2: 8f 3f cpi r24, 0xFF ; 255
4ed4: 19 f0 breq .+6 ; 0x4edc <ParamSet_Init+0x17e>
4ed6: 1e de rcall .-964 ; 0x4b14 <MixerTable_ReadFromEEProm>
4ed8: 81 11 cpse r24, r1
4eda: 13 c0 rjmp .+38 ; 0x4f02 <ParamSet_Init+0x1a4>
{
printf("\n\rGenerating default Mixer Table");
4edc: 89 e5 ldi r24, 0x59 ; 89
4ede: 92 e0 ldi r25, 0x02 ; 2
4ee0: 9f 93 push r25
4ee2: 8f 93 push r24
4ee4: 87 eb ldi r24, 0xB7 ; 183
4ee6: 9c ea ldi r25, 0xAC ; 172
4ee8: 9f 93 push r25
4eea: 8f 93 push r24
4eec: e0 91 78 06 lds r30, 0x0678
4ef0: f0 91 79 06 lds r31, 0x0679
4ef4: 09 95 icall
MixerTable_Default(); // Quadro
4ef6: 47 de rcall .-882 ; 0x4b86 <MixerTable_Default>
MixerTable_WriteToEEProm();
4ef8: 2f de rcall .-930 ; 0x4b58 <MixerTable_WriteToEEProm>
4efa: 0f 90 pop r0
4efc: 0f 90 pop r0
4efe: 0f 90 pop r0
4f00: 0f 90 pop r0
}
if(ee_default) SetParamByte(PID_EE_REVISION, (EEPARAM_REVISION));
4f02: ff 20 and r15, r15
4f04: 29 f0 breq .+10 ; 0x4f10 <ParamSet_Init+0x1b2>
/***************************************************/
/* Write Parameter to EEPROM as byte */
/***************************************************/
void SetParamByte(uint16_t param_id, uint8_t value)
{
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value);
4f06: 67 e6 ldi r22, 0x67 ; 103
4f08: 81 e0 ldi r24, 0x01 ; 1
4f0a: 90 e0 ldi r25, 0x00 ; 0
4f0c: 0e 94 54 b2 call 0x164a8 ; 0x164a8 <__eewr_byte_m1284>
4f10: e4 ed ldi r30, 0xD4 ; 212
4f12: f5 e0 ldi r31, 0x05 ; 5
4f14: 84 e1 ldi r24, 0x14 ; 20
4f16: 96 e0 ldi r25, 0x06 ; 6
// check all 5 parameter settings
for (i = 1;i < 6; i++)
{
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom
{
bad_params = 1;
4f18: 20 e0 ldi r18, 0x00 ; 0
if(ee_default) SetParamByte(PID_EE_REVISION, (EEPARAM_REVISION));
// determine motornumber
RequiredMotors = 0;
for(i = 0; i < 16; i++)
{
if(Mixer.Motor[i][MIX_GAS] > 0) RequiredMotors++;
4f1a: 30 81 ld r19, Z
4f1c: 13 16 cp r1, r19
4f1e: 0c f4 brge .+2 ; 0x4f22 <ParamSet_Init+0x1c4>
4f20: 2f 5f subi r18, 0xFF ; 255
4f22: 34 96 adiw r30, 0x04 ; 4
MixerTable_WriteToEEProm();
}
if(ee_default) SetParamByte(PID_EE_REVISION, (EEPARAM_REVISION));
// determine motornumber
RequiredMotors = 0;
for(i = 0; i < 16; i++)
4f24: e8 17 cp r30, r24
4f26: f9 07 cpc r31, r25
4f28: c1 f7 brne .-16 ; 0x4f1a <ParamSet_Init+0x1bc>
4f2a: 20 93 3d 05 sts 0x053D, r18
{
if(Mixer.Motor[i][MIX_GAS] > 0) RequiredMotors++;
}
printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name, RequiredMotors);
4f2e: 1f 92 push r1
4f30: 2f 93 push r18
4f32: 88 ec ldi r24, 0xC8 ; 200
4f34: 95 e0 ldi r25, 0x05 ; 5
4f36: 9f 93 push r25
4f38: 8f 93 push r24
4f3a: 88 e3 ldi r24, 0x38 ; 56
4f3c: 92 e0 ldi r25, 0x02 ; 2
4f3e: 9f 93 push r25
4f40: 8f 93 push r24
4f42: 87 eb ldi r24, 0xB7 ; 183
4f44: 9c ea ldi r25, 0xAC ; 172
4f46: 9f 93 push r25
4f48: 8f 93 push r24
4f4a: e0 91 78 06 lds r30, 0x0678
4f4e: f0 91 79 06 lds r31, 0x0679
4f52: 09 95 icall
PrintLine();// ("\n\r===================================");
4f54: 0e 94 4b 59 call 0xb296 ; 0xb296 <PrintLine>
4f58: 8d b7 in r24, 0x3d ; 61
4f5a: 9e b7 in r25, 0x3e ; 62
4f5c: 08 96 adiw r24, 0x08 ; 8
4f5e: 0f b6 in r0, 0x3f ; 63
4f60: f8 94 cli
4f62: 9e bf out 0x3e, r25 ; 62
4f64: 0f be out 0x3f, r0 ; 63
4f66: 8d bf out 0x3d, r24 ; 61
}
4f68: df 91 pop r29
4f6a: cf 91 pop r28
4f6c: 1f 91 pop r17
4f6e: 0f 91 pop r16
4f70: ff 90 pop r15
4f72: ef 90 pop r14
4f74: df 90 pop r13
4f76: cf 90 pop r12
4f78: bf 90 pop r11
4f7a: af 90 pop r10
4f7c: 9f 90 pop r9
4f7e: 8f 90 pop r8
4f80: 08 95 ret
00004f82 <CopyDebugValues>:
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Debugwerte zuordnen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void CopyDebugValues(void)
{
4f82: cf 92 push r12
4f84: df 92 push r13
4f86: ef 92 push r14
4f88: ff 92 push r15
DebugOut.Analog[0] = ToNaviCtrl.IntegralNick;//IntegralNick / (EE_Parameter.GyroAccFaktor * 4);
4f8a: 80 91 ea 08 lds r24, 0x08EA
4f8e: 90 91 eb 08 lds r25, 0x08EB
4f92: 90 93 49 0c sts 0x0C49, r25
4f96: 80 93 48 0c sts 0x0C48, r24
DebugOut.Analog[1] = ToNaviCtrl.IntegralRoll;//IntegralRoll / (EE_Parameter.GyroAccFaktor * 4);
4f9a: 80 91 ec 08 lds r24, 0x08EC
4f9e: 90 91 ed 08 lds r25, 0x08ED
4fa2: 90 93 4b 0c sts 0x0C4B, r25
4fa6: 80 93 4a 0c sts 0x0C4A, r24
DebugOut.Analog[2] = Mittelwert_AccNick / 4;
4faa: 80 91 60 06 lds r24, 0x0660
4fae: 90 91 61 06 lds r25, 0x0661
4fb2: 99 23 and r25, r25
4fb4: 0c f4 brge .+2 ; 0x4fb8 <CopyDebugValues+0x36>
4fb6: 03 96 adiw r24, 0x03 ; 3
4fb8: 95 95 asr r25
4fba: 87 95 ror r24
4fbc: 95 95 asr r25
4fbe: 87 95 ror r24
4fc0: 90 93 4d 0c sts 0x0C4D, r25
4fc4: 80 93 4c 0c sts 0x0C4C, r24
DebugOut.Analog[3] = Mittelwert_AccRoll / 4;
4fc8: 80 91 72 06 lds r24, 0x0672
4fcc: 90 91 73 06 lds r25, 0x0673
4fd0: 99 23 and r25, r25
4fd2: 0c f4 brge .+2 ; 0x4fd6 <CopyDebugValues+0x54>
4fd4: 03 96 adiw r24, 0x03 ; 3
4fd6: 95 95 asr r25
4fd8: 87 95 ror r24
4fda: 95 95 asr r25
4fdc: 87 95 ror r24
4fde: 90 93 4f 0c sts 0x0C4F, r25
4fe2: 80 93 4e 0c sts 0x0C4E, r24
DebugOut.Analog[4] = (signed int) AdNeutralGier - AdWertGier;
4fe6: 20 91 61 03 lds r18, 0x0361
4fea: 30 91 62 03 lds r19, 0x0362
4fee: 80 91 53 04 lds r24, 0x0453
4ff2: 90 91 54 04 lds r25, 0x0454
4ff6: 82 1b sub r24, r18
4ff8: 93 0b sbc r25, r19
4ffa: 90 93 51 0c sts 0x0C51, r25
4ffe: 80 93 50 0c sts 0x0C50, r24
DebugOut.Analog[5] = HoehenWert/10;
5002: 60 91 fe 03 lds r22, 0x03FE
5006: 70 91 ff 03 lds r23, 0x03FF
500a: 80 91 00 04 lds r24, 0x0400
500e: 90 91 01 04 lds r25, 0x0401
5012: 0f 2e mov r0, r31
5014: fa e0 ldi r31, 0x0A ; 10
5016: cf 2e mov r12, r31
5018: d1 2c mov r13, r1
501a: e1 2c mov r14, r1
501c: f1 2c mov r15, r1
501e: f0 2d mov r31, r0
5020: a7 01 movw r20, r14
5022: 96 01 movw r18, r12
5024: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
5028: 30 93 53 0c sts 0x0C53, r19
502c: 20 93 52 0c sts 0x0C52, r18
DebugOut.Analog[6] = Aktuell_az;//AdWertAccHoch;//(Mess_Integral_Hoch / 512);
5030: 80 91 06 05 lds r24, 0x0506
5034: 90 91 07 05 lds r25, 0x0507
5038: 90 93 55 0c sts 0x0C55, r25
503c: 80 93 54 0c sts 0x0C54, r24
DebugOut.Analog[8] = KompassValue;
5040: 80 91 4e 01 lds r24, 0x014E
5044: 90 91 4f 01 lds r25, 0x014F
5048: 90 93 59 0c sts 0x0C59, r25
504c: 80 93 58 0c sts 0x0C58, r24
DebugOut.Analog[9] = UBat;
5050: 80 91 1a 01 lds r24, 0x011A
5054: 90 91 1b 01 lds r25, 0x011B
5058: 90 93 5b 0c sts 0x0C5B, r25
505c: 80 93 5a 0c sts 0x0C5A, r24
DebugOut.Analog[10] = SenderOkay;
5060: 80 91 04 04 lds r24, 0x0404
5064: 90 e0 ldi r25, 0x00 ; 0
5066: 90 93 5d 0c sts 0x0C5D, r25
506a: 80 93 5c 0c sts 0x0C5C, r24
DebugOut.Analog[11] = ErsatzKompassInGrad;
506e: 80 91 21 06 lds r24, 0x0621
5072: 90 91 22 06 lds r25, 0x0622
5076: 90 93 5f 0c sts 0x0C5F, r25
507a: 80 93 5e 0c sts 0x0C5E, r24
DebugOut.Analog[12] = Motor[0].SetPoint;
507e: 80 91 98 09 lds r24, 0x0998
5082: 90 e0 ldi r25, 0x00 ; 0
5084: 90 93 61 0c sts 0x0C61, r25
5088: 80 93 60 0c sts 0x0C60, r24
DebugOut.Analog[13] = Motor[1].SetPoint;
508c: 80 91 a7 09 lds r24, 0x09A7
5090: 90 e0 ldi r25, 0x00 ; 0
5092: 90 93 63 0c sts 0x0C63, r25
5096: 80 93 62 0c sts 0x0C62, r24
DebugOut.Analog[14] = Motor[2].SetPoint;
509a: 80 91 b6 09 lds r24, 0x09B6
509e: 90 e0 ldi r25, 0x00 ; 0
50a0: 90 93 65 0c sts 0x0C65, r25
50a4: 80 93 64 0c sts 0x0C64, r24
DebugOut.Analog[15] = Motor[3].SetPoint;
50a8: 80 91 c5 09 lds r24, 0x09C5
50ac: 90 e0 ldi r25, 0x00 ; 0
50ae: 90 93 67 0c sts 0x0C67, r25
50b2: 80 93 66 0c sts 0x0C66, r24
DebugOut.Analog[20] = ServoNickValue;
50b6: 80 91 c6 04 lds r24, 0x04C6
50ba: 90 91 c7 04 lds r25, 0x04C7
50be: 90 93 71 0c sts 0x0C71, r25
50c2: 80 93 70 0c sts 0x0C70, r24
DebugOut.Analog[21] = HoverGas;
50c6: 80 91 e8 03 lds r24, 0x03E8
50ca: 90 91 e9 03 lds r25, 0x03E9
50ce: 90 93 73 0c sts 0x0C73, r25
50d2: 80 93 72 0c sts 0x0C72, r24
DebugOut.Analog[22] = Capacity.ActualCurrent;
50d6: 80 91 15 05 lds r24, 0x0515
50da: 90 91 16 05 lds r25, 0x0516
50de: 90 93 75 0c sts 0x0C75, r25
50e2: 80 93 74 0c sts 0x0C74, r24
DebugOut.Analog[23] = Capacity.UsedCapacity;
50e6: 80 91 19 05 lds r24, 0x0519
50ea: 90 91 1a 05 lds r25, 0x051A
50ee: 90 93 77 0c sts 0x0C77, r25
50f2: 80 93 76 0c sts 0x0C76, r24
DebugOut.Analog[24] = SollHoehe/10;
50f6: 60 91 fa 03 lds r22, 0x03FA
50fa: 70 91 fb 03 lds r23, 0x03FB
50fe: 80 91 fc 03 lds r24, 0x03FC
5102: 90 91 fd 03 lds r25, 0x03FD
5106: a7 01 movw r20, r14
5108: 96 01 movw r18, r12
510a: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
510e: 30 93 79 0c sts 0x0C79, r19
5112: 20 93 78 0c sts 0x0C78, r18
// DebugOut.Analog[27] = KompassSollWert;
DebugOut.Analog[29] = Capacity.MinOfMaxPWM;
5116: 80 91 1b 05 lds r24, 0x051B
511a: 90 e0 ldi r25, 0x00 ; 0
511c: 90 93 83 0c sts 0x0C83, r25
5120: 80 93 82 0c sts 0x0C82, r24
DebugOut.Analog[30] = GPS_Nick;
5124: 80 91 6a 04 lds r24, 0x046A
5128: 90 91 6b 04 lds r25, 0x046B
512c: 90 93 85 0c sts 0x0C85, r25
5130: 80 93 84 0c sts 0x0C84, r24
DebugOut.Analog[31] = GPS_Roll;
5134: 80 91 68 04 lds r24, 0x0468
5138: 90 91 69 04 lds r25, 0x0469
513c: 90 93 87 0c sts 0x0C87, r25
5140: 80 93 86 0c sts 0x0C86, r24
if(VersionInfo.HardwareError[0] || VersionInfo.HardwareError[1]) DebugOut.Status[1] |= 1; else DebugOut.Status[1] &= 0xfe;
5144: 80 91 62 0a lds r24, 0x0A62
5148: 81 11 cpse r24, r1
514a: 04 c0 rjmp .+8 ; 0x5154 <CopyDebugValues+0x1d2>
514c: 80 91 63 0a lds r24, 0x0A63
5150: 88 23 and r24, r24
5152: 31 f0 breq .+12 ; 0x5160 <CopyDebugValues+0x1de>
5154: e7 e4 ldi r30, 0x47 ; 71
5156: fc e0 ldi r31, 0x0C ; 12
5158: 80 81 ld r24, Z
515a: 81 60 ori r24, 0x01 ; 1
515c: 80 83 st Z, r24
515e: 05 c0 rjmp .+10 ; 0x516a <CopyDebugValues+0x1e8>
5160: e7 e4 ldi r30, 0x47 ; 71
5162: fc e0 ldi r31, 0x0C ; 12
5164: 80 81 ld r24, Z
5166: 8e 7f andi r24, 0xFE ; 254
5168: 80 83 st Z, r24
//DebugOut.Analog[17] = VarioMeter;
//DebugOut.Analog[16] = GasIsZeroCnt;
//DebugOut.Analog[18] = HoehenWertF;
//DebugOut.Analog[25] = Parameter_Hoehe_P;
//DebugOut.Analog[26] = Parameter_Luftdruck_D;
}
516a: ff 90 pop r15
516c: ef 90 pop r14
516e: df 90 pop r13
5170: cf 90 pop r12
5172: 08 95 ret
00005174 <Piep>:
void Piep(unsigned char Anzahl, unsigned int dauer)
{
5174: ff 92 push r15
5176: 0f 93 push r16
5178: 1f 93 push r17
517a: cf 93 push r28
517c: df 93 push r29
517e: 8b 01 movw r16, r22
unsigned int wait = 0;
if(MotorenEin) return; //auf keinen Fall im Flug!
5180: 90 91 03 04 lds r25, 0x0403
5184: 91 11 cpse r25, r1
5186: 31 c0 rjmp .+98 ; 0x51ea <Piep+0x76>
GRN_OFF;
5188: 90 91 54 01 lds r25, 0x0154
518c: 99 31 cpi r25, 0x19 ; 25
518e: 11 f4 brne .+4 ; 0x5194 <Piep+0x20>
5190: 29 98 cbi 0x05, 1 ; 5
5192: 21 c0 rjmp .+66 ; 0x51d6 <Piep+0x62>
5194: 29 9a sbi 0x05, 1 ; 5
5196: 1f c0 rjmp .+62 ; 0x51d6 <Piep+0x62>
while(Anzahl--)
{
beeptime = dauer;
5198: 10 93 ce 04 sts 0x04CE, r17
519c: 00 93 cd 04 sts 0x04CD, r16
wait = dauer;
51a0: e8 01 movw r28, r16
while(beeptime || wait)
51a2: 0f c0 rjmp .+30 ; 0x51c2 <Piep+0x4e>
{
if(UpdateMotor)
51a4: 90 91 d1 04 lds r25, 0x04D1
51a8: 99 23 and r25, r25
51aa: 59 f0 breq .+22 ; 0x51c2 <Piep+0x4e>
{
UpdateMotor = 0;
51ac: 10 92 d1 04 sts 0x04D1, r1
if(!beeptime) wait--;
51b0: 20 91 cd 04 lds r18, 0x04CD
51b4: 30 91 ce 04 lds r19, 0x04CE
51b8: 23 2b or r18, r19
51ba: 09 f4 brne .+2 ; 0x51be <Piep+0x4a>
51bc: 21 97 sbiw r28, 0x01 ; 1
LIBFC_Polling();
51be: 0e 94 16 1a call 0x342c ; 0x342c <LIBFC_Polling>
GRN_OFF;
while(Anzahl--)
{
beeptime = dauer;
wait = dauer;
while(beeptime || wait)
51c2: 20 91 cd 04 lds r18, 0x04CD
51c6: 30 91 ce 04 lds r19, 0x04CE
51ca: 23 2b or r18, r19
51cc: 59 f7 brne .-42 ; 0x51a4 <Piep+0x30>
51ce: 20 97 sbiw r28, 0x00 ; 0
51d0: 49 f7 brne .-46 ; 0x51a4 <Piep+0x30>
51d2: fa 94 dec r15
51d4: 01 c0 rjmp .+2 ; 0x51d8 <Piep+0x64>
if(MotorenEin) return; //auf keinen Fall im Flug!
GRN_OFF;
while(Anzahl--)
{
beeptime = dauer;
wait = dauer;
51d6: f8 2e mov r15, r24
void Piep(unsigned char Anzahl, unsigned int dauer)
{
unsigned int wait = 0;
if(MotorenEin) return; //auf keinen Fall im Flug!
GRN_OFF;
while(Anzahl--)
51d8: f1 10 cpse r15, r1
51da: de cf rjmp .-68 ; 0x5198 <Piep+0x24>
if(!beeptime) wait--;
LIBFC_Polling();
};
}
}
GRN_ON;
51dc: 80 91 54 01 lds r24, 0x0154
51e0: 89 31 cpi r24, 0x19 ; 25
51e2: 11 f4 brne .+4 ; 0x51e8 <Piep+0x74>
51e4: 29 9a sbi 0x05, 1 ; 5
51e6: 01 c0 rjmp .+2 ; 0x51ea <Piep+0x76>
51e8: 29 98 cbi 0x05, 1 ; 5
}
51ea: df 91 pop r29
51ec: cf 91 pop r28
51ee: 1f 91 pop r17
51f0: 0f 91 pop r16
51f2: ff 90 pop r15
51f4: 08 95 ret
000051f6 <CalibrierMittelwert>:
void CalibrierMittelwert(void)
//############################################################################
{
// if(PlatinenVersion == 13) SucheGyroOffset();
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
ANALOG_OFF;
51f6: ea e7 ldi r30, 0x7A ; 122
51f8: f0 e0 ldi r31, 0x00 ; 0
51fa: 10 82 st Z, r1
MesswertNick = AdWertNick;
51fc: 80 91 65 03 lds r24, 0x0365
5200: 90 91 66 03 lds r25, 0x0366
5204: 90 93 28 06 sts 0x0628, r25
5208: 80 93 27 06 sts 0x0627, r24
MesswertRoll = AdWertRoll;
520c: 80 91 63 03 lds r24, 0x0363
5210: 90 91 64 03 lds r25, 0x0364
5214: 90 93 1d 06 sts 0x061D, r25
5218: 80 93 1c 06 sts 0x061C, r24
MesswertGier = AdWertGier;
521c: 80 91 61 03 lds r24, 0x0361
5220: 90 91 62 03 lds r25, 0x0362
5224: 90 93 68 06 sts 0x0668, r25
5228: 80 93 67 06 sts 0x0667, r24
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick;
522c: 80 91 5d 03 lds r24, 0x035D
5230: 90 91 5e 03 lds r25, 0x035E
5234: 9c 01 movw r18, r24
5236: 22 0f add r18, r18
5238: 33 1f adc r19, r19
523a: 82 0f add r24, r18
523c: 93 1f adc r25, r19
523e: 88 0f add r24, r24
5240: 99 1f adc r25, r25
5242: 90 93 61 06 sts 0x0661, r25
5246: 80 93 60 06 sts 0x0660, r24
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll;
524a: 80 91 5f 03 lds r24, 0x035F
524e: 90 91 60 03 lds r25, 0x0360
5252: 9c 01 movw r18, r24
5254: 22 0f add r18, r18
5256: 33 1f adc r19, r19
5258: 82 0f add r24, r18
525a: 93 1f adc r25, r19
525c: 88 0f add r24, r24
525e: 99 1f adc r25, r25
5260: 90 93 73 06 sts 0x0673, r25
5264: 80 93 72 06 sts 0x0672, r24
// ADC einschalten
ANALOG_ON;
5268: 8f ec ldi r24, 0xCF ; 207
526a: 80 83 st Z, r24
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
526c: 20 91 7f 05 lds r18, 0x057F
5270: 30 e0 ldi r19, 0x00 ; 0
5272: a4 ec ldi r26, 0xC4 ; 196
5274: b9 e0 ldi r27, 0x09 ; 9
5276: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
527a: 60 93 46 01 sts 0x0146, r22
527e: 70 93 47 01 sts 0x0147, r23
5282: 80 93 48 01 sts 0x0148, r24
5286: 90 93 49 01 sts 0x0149, r25
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
528a: 20 91 80 05 lds r18, 0x0580
528e: 30 e0 ldi r19, 0x00 ; 0
5290: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
5294: 60 93 42 01 sts 0x0142, r22
5298: 70 93 43 01 sts 0x0143, r23
529c: 80 93 44 01 sts 0x0144, r24
52a0: 90 93 45 01 sts 0x0145, r25
52a4: 08 95 ret
000052a6 <SetNeutral>:
// Parameter: 1 -> before Start
// Parameter: 2 -> calibrate and store ACC
// Parameter: 3 -> use stored Gyro calibration Data from EEPROM
unsigned char SetNeutral(unsigned char AdjustmentMode) // retuns: "sucess"
//############################################################################
{
52a6: 8f 92 push r8
52a8: 9f 92 push r9
52aa: af 92 push r10
52ac: bf 92 push r11
52ae: cf 92 push r12
52b0: df 92 push r13
52b2: ef 92 push r14
52b4: ff 92 push r15
52b6: 0f 93 push r16
52b8: 1f 93 push r17
52ba: cf 93 push r28
52bc: df 93 push r29
52be: c8 2f mov r28, r24
unsigned char i, sucess = 1;
unsigned int gier_neutral = 0, nick_neutral = 0, roll_neutral = 0, acc_z_neutral = 0, barotest;
VersionInfo.HardwareError[0] = 0;
52c0: 10 92 62 0a sts 0x0A62, r1
// HEF4017Reset_ON;
NeutralAccX = 0;
52c4: 10 92 4e 04 sts 0x044E, r1
52c8: 10 92 4d 04 sts 0x044D, r1
NeutralAccY = 0;
52cc: 10 92 4c 04 sts 0x044C, r1
52d0: 10 92 4b 04 sts 0x044B, r1
NeutralAccZ = 0;
52d4: 10 92 48 04 sts 0x0448, r1
52d8: 10 92 47 04 sts 0x0447, r1
NeutralAccZfine = 0;
52dc: 10 92 46 04 sts 0x0446, r1
AdNeutralNick = 0;
52e0: 10 92 58 04 sts 0x0458, r1
52e4: 10 92 57 04 sts 0x0457, r1
AdNeutralRoll = 0;
52e8: 10 92 56 04 sts 0x0456, r1
52ec: 10 92 55 04 sts 0x0455, r1
AdNeutralGier = 0;
52f0: 10 92 54 04 sts 0x0454, r1
52f4: 10 92 53 04 sts 0x0453, r1
Parameter_AchsKopplung1 = 0;
52f8: 10 92 2a 01 sts 0x012A, r1
Parameter_AchsKopplung2 = 0;
52fc: 10 92 29 01 sts 0x0129, r1
ExpandBaro = 0;
5300: 10 92 56 03 sts 0x0356, r1
if(AdjustmentMode == 3) FC_StatusFlags3 |= FC_STATUS3_BOAT;
5304: 83 30 cpi r24, 0x03 ; 3
5306: 29 f4 brne .+10 ; 0x5312 <SetNeutral+0x6c>
5308: 80 91 c9 03 lds r24, 0x03C9
530c: 82 60 ori r24, 0x02 ; 2
530e: 80 93 c9 03 sts 0x03C9, r24
// else FC_StatusFlags3 &= ~FC_STATUS3_BOAT; -> do not clear that
CalibrierMittelwert();
5312: 71 df rcall .-286 ; 0x51f6 <CalibrierMittelwert>
Delay_ms_Mess(100);
5314: 84 e6 ldi r24, 0x64 ; 100
5316: 90 e0 ldi r25, 0x00 ; 0
5318: 0e 94 6e 9c call 0x138dc ; 0x138dc <Delay_ms_Mess>
CalibrierMittelwert();
531c: 6c df rcall .-296 ; 0x51f6 <CalibrierMittelwert>
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
531e: 80 91 4b 05 lds r24, 0x054B
5322: 80 ff sbrs r24, 0
5324: 13 c0 rjmp .+38 ; 0x534c <SetNeutral+0xa6>
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750) || ExpandBaro) SucheLuftruckOffset();
5326: 80 91 10 01 lds r24, 0x0110
532a: 90 91 11 01 lds r25, 0x0111
532e: 87 3b cpi r24, 0xB7 ; 183
5330: 93 40 sbci r25, 0x03 ; 3
5332: 50 f4 brcc .+20 ; 0x5348 <SetNeutral+0xa2>
5334: 80 91 10 01 lds r24, 0x0110
5338: 90 91 11 01 lds r25, 0x0111
533c: 8e 3e cpi r24, 0xEE ; 238
533e: 92 40 sbci r25, 0x02 ; 2
5340: 18 f0 brcs .+6 ; 0x5348 <SetNeutral+0xa2>
5342: 80 91 56 03 lds r24, 0x0356
5346: 81 11 cpse r24, r1
5348: 0e 94 4b 1b call 0x3696 ; 0x3696 <SucheLuftruckOffset>
}
barotest = MessLuftdruck;
534c: 00 91 10 01 lds r16, 0x0110
5350: 10 91 11 01 lds r17, 0x0111
#define NEUTRAL_FILTER 32
OCR0A += OPA_OFFSET_STEP;
5354: 87 b5 in r24, 0x27 ; 39
5356: 8b 5f subi r24, 0xFB ; 251
5358: 87 bd out 0x27, r24 ; 39
OCR0B = 255 - OCR0A;
535a: 87 b5 in r24, 0x27 ; 39
535c: 80 95 com r24
535e: 88 bd out 0x28, r24 ; 40
5360: d0 e2 ldi r29, 0x20 ; 32
// Parameter: 3 -> use stored Gyro calibration Data from EEPROM
unsigned char SetNeutral(unsigned char AdjustmentMode) // retuns: "sucess"
//############################################################################
{
unsigned char i, sucess = 1;
unsigned int gier_neutral = 0, nick_neutral = 0, roll_neutral = 0, acc_z_neutral = 0, barotest;
5362: e1 2c mov r14, r1
5364: f1 2c mov r15, r1
5366: a1 2c mov r10, r1
5368: b1 2c mov r11, r1
536a: 81 2c mov r8, r1
536c: 91 2c mov r9, r1
536e: c1 2c mov r12, r1
5370: d1 2c mov r13, r1
#define NEUTRAL_FILTER 32
OCR0A += OPA_OFFSET_STEP;
OCR0B = 255 - OCR0A;
for(i=0; i<NEUTRAL_FILTER; i++)
{
Delay_ms_Mess(10);
5372: 8a e0 ldi r24, 0x0A ; 10
5374: 90 e0 ldi r25, 0x00 ; 0
5376: 0e 94 6e 9c call 0x138dc ; 0x138dc <Delay_ms_Mess>
gier_neutral += AdWertGier;
537a: 80 91 61 03 lds r24, 0x0361
537e: 90 91 62 03 lds r25, 0x0362
5382: c8 0e add r12, r24
5384: d9 1e adc r13, r25
nick_neutral += AdWertNick;
5386: 80 91 65 03 lds r24, 0x0365
538a: 90 91 66 03 lds r25, 0x0366
538e: 88 0e add r8, r24
5390: 99 1e adc r9, r25
roll_neutral += AdWertRoll;
5392: 80 91 63 03 lds r24, 0x0363
5396: 90 91 64 03 lds r25, 0x0364
539a: a8 0e add r10, r24
539c: b9 1e adc r11, r25
acc_z_neutral += Aktuell_az;
539e: 80 91 06 05 lds r24, 0x0506
53a2: 90 91 07 05 lds r25, 0x0507
53a6: e8 0e add r14, r24
53a8: f9 1e adc r15, r25
53aa: d1 50 subi r29, 0x01 ; 1
barotest = MessLuftdruck;
#define NEUTRAL_FILTER 32
OCR0A += OPA_OFFSET_STEP;
OCR0B = 255 - OCR0A;
for(i=0; i<NEUTRAL_FILTER; i++)
53ac: 11 f7 brne .-60 ; 0x5372 <SetNeutral+0xcc>
gier_neutral += AdWertGier;
nick_neutral += AdWertNick;
roll_neutral += AdWertRoll;
acc_z_neutral += Aktuell_az;
}
if(MessLuftdruck < 1010 && MessLuftdruck > 20) BaroStep = barotest - MessLuftdruck;
53ae: 80 91 10 01 lds r24, 0x0110
53b2: 90 91 11 01 lds r25, 0x0111
53b6: 82 3f cpi r24, 0xF2 ; 242
53b8: 93 40 sbci r25, 0x03 ; 3
53ba: 80 f4 brcc .+32 ; 0x53dc <SetNeutral+0x136>
53bc: 80 91 10 01 lds r24, 0x0110
53c0: 90 91 11 01 lds r25, 0x0111
53c4: 45 97 sbiw r24, 0x15 ; 21
53c6: 50 f0 brcs .+20 ; 0x53dc <SetNeutral+0x136>
53c8: 80 91 10 01 lds r24, 0x0110
53cc: 90 91 11 01 lds r25, 0x0111
53d0: 08 1b sub r16, r24
53d2: 19 0b sbc r17, r25
53d4: 10 93 0e 01 sts 0x010E, r17
53d8: 00 93 0d 01 sts 0x010D, r16
OCR0A -= OPA_OFFSET_STEP;
53dc: 87 b5 in r24, 0x27 ; 39
53de: 85 50 subi r24, 0x05 ; 5
53e0: 87 bd out 0x27, r24 ; 39
OCR0B = 255 - OCR0A;
53e2: 87 b5 in r24, 0x27 ; 39
53e4: 80 95 com r24
53e6: 88 bd out 0x28, r24 ; 40
AdNeutralNick = (nick_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8);
53e8: 80 e1 ldi r24, 0x10 ; 16
53ea: 88 0e add r8, r24
53ec: 91 1c adc r9, r1
53ee: 96 94 lsr r9
53f0: 87 94 ror r8
53f2: 96 94 lsr r9
53f4: 87 94 ror r8
53f6: 90 92 58 04 sts 0x0458, r9
53fa: 80 92 57 04 sts 0x0457, r8
AdNeutralRoll = (roll_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8);
53fe: 20 e1 ldi r18, 0x10 ; 16
5400: a2 0e add r10, r18
5402: b1 1c adc r11, r1
5404: b6 94 lsr r11
5406: a7 94 ror r10
5408: b6 94 lsr r11
540a: a7 94 ror r10
540c: b0 92 56 04 sts 0x0456, r11
5410: a0 92 55 04 sts 0x0455, r10
AdNeutralGier = (gier_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER);
5414: 40 e1 ldi r20, 0x10 ; 16
5416: c4 0e add r12, r20
5418: d1 1c adc r13, r1
541a: d6 94 lsr r13
541c: c7 94 ror r12
541e: d6 94 lsr r13
5420: c7 94 ror r12
5422: d6 94 lsr r13
5424: c7 94 ror r12
5426: d6 94 lsr r13
5428: c7 94 ror r12
542a: d6 94 lsr r13
542c: c7 94 ror r12
542e: d0 92 54 04 sts 0x0454, r13
5432: c0 92 53 04 sts 0x0453, r12
NeutralAccZ = (acc_z_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER);
5436: 60 e1 ldi r22, 0x10 ; 16
5438: e6 0e add r14, r22
543a: f1 1c adc r15, r1
543c: f6 94 lsr r15
543e: e7 94 ror r14
5440: f6 94 lsr r15
5442: e7 94 ror r14
5444: f6 94 lsr r15
5446: e7 94 ror r14
5448: f6 94 lsr r15
544a: e7 94 ror r14
544c: f6 94 lsr r15
544e: e7 94 ror r14
5450: f0 92 48 04 sts 0x0448, r15
5454: e0 92 47 04 sts 0x0447, r14
StartNeutralRoll = AdNeutralRoll;
5458: b0 92 52 04 sts 0x0452, r11
545c: a0 92 51 04 sts 0x0451, r10
StartNeutralNick = AdNeutralNick;
5460: 90 92 50 04 sts 0x0450, r9
5464: 80 92 4f 04 sts 0x044F, r8
if(AdjustmentMode == 2)
5468: c2 30 cpi r28, 0x02 ; 2
546a: 09 f0 breq .+2 ; 0x546e <SetNeutral+0x1c8>
546c: 4c c0 rjmp .+152 ; 0x5506 <SetNeutral+0x260>
{
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY);
546e: 80 91 60 06 lds r24, 0x0660
5472: 90 91 61 06 lds r25, 0x0661
5476: 99 23 and r25, r25
5478: 1c f4 brge .+6 ; 0x5480 <SetNeutral+0x1da>
547a: 91 95 neg r25
547c: 81 95 neg r24
547e: 91 09 sbc r25, r1
5480: 6c e0 ldi r22, 0x0C ; 12
5482: 70 e0 ldi r23, 0x00 ; 0
5484: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
5488: 9b 01 movw r18, r22
548a: 70 93 4e 04 sts 0x044E, r23
548e: 60 93 4d 04 sts 0x044D, r22
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY);
5492: 80 91 72 06 lds r24, 0x0672
5496: 90 91 73 06 lds r25, 0x0673
549a: 99 23 and r25, r25
549c: 1c f4 brge .+6 ; 0x54a4 <SetNeutral+0x1fe>
549e: 91 95 neg r25
54a0: 81 95 neg r24
54a2: 91 09 sbc r25, r1
54a4: 6c e0 ldi r22, 0x0C ; 12
54a6: 70 e0 ldi r23, 0x00 ; 0
54a8: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
54ac: 70 93 4c 04 sts 0x044C, r23
54b0: 60 93 4b 04 sts 0x044B, r22
// Save ACC neutral settings to eeprom
SetParamWord(PID_ACC_NICK, (uint16_t)NeutralAccX);
54b4: b9 01 movw r22, r18
54b6: 84 e0 ldi r24, 0x04 ; 4
54b8: 90 e0 ldi r25, 0x00 ; 0
54ba: ed da rcall .-2598 ; 0x4a96 <SetParamWord>
SetParamWord(PID_ACC_ROLL, (uint16_t)NeutralAccY);
54bc: 60 91 4b 04 lds r22, 0x044B
54c0: 70 91 4c 04 lds r23, 0x044C
54c4: 86 e0 ldi r24, 0x06 ; 6
54c6: 90 e0 ldi r25, 0x00 ; 0
54c8: e6 da rcall .-2612 ; 0x4a96 <SetParamWord>
SetParamWord(PID_ACC_TOP, (uint16_t)NeutralAccZ);
54ca: 60 91 47 04 lds r22, 0x0447
54ce: 70 91 48 04 lds r23, 0x0448
54d2: 88 e0 ldi r24, 0x08 ; 8
54d4: 90 e0 ldi r25, 0x00 ; 0
54d6: df da rcall .-2626 ; 0x4a96 <SetParamWord>
SetParamWord(PID_GYRO_NICK,(uint16_t)AdNeutralNick);
54d8: 60 91 57 04 lds r22, 0x0457
54dc: 70 91 58 04 lds r23, 0x0458
54e0: 82 e1 ldi r24, 0x12 ; 18
54e2: 90 e0 ldi r25, 0x00 ; 0
54e4: d8 da rcall .-2640 ; 0x4a96 <SetParamWord>
SetParamWord(PID_GYRO_ROLL,(uint16_t)AdNeutralRoll);
54e6: 60 91 55 04 lds r22, 0x0455
54ea: 70 91 56 04 lds r23, 0x0456
54ee: 84 e1 ldi r24, 0x14 ; 20
54f0: 90 e0 ldi r25, 0x00 ; 0
54f2: d1 da rcall .-2654 ; 0x4a96 <SetParamWord>
SetParamWord(PID_GYRO_YAW,(uint16_t)AdNeutralGier);
54f4: 60 91 53 04 lds r22, 0x0453
54f8: 70 91 54 04 lds r23, 0x0454
54fc: 86 e1 ldi r24, 0x16 ; 22
54fe: 90 e0 ldi r25, 0x00 ; 0
5500: ca da rcall .-2668 ; 0x4a96 <SetParamWord>
// Parameter: 2 -> calibrate and store ACC
// Parameter: 3 -> use stored Gyro calibration Data from EEPROM
unsigned char SetNeutral(unsigned char AdjustmentMode) // retuns: "sucess"
//############################################################################
{
unsigned char i, sucess = 1;
5502: d1 e0 ldi r29, 0x01 ; 1
5504: 91 c0 rjmp .+290 ; 0x5628 <SetNeutral+0x382>
SetParamWord(PID_GYRO_YAW,(uint16_t)AdNeutralGier);
}
else
{
// restore from eeprom
NeutralAccX = (int16_t)GetParamWord(PID_ACC_NICK);
5506: 84 e0 ldi r24, 0x04 ; 4
5508: 90 e0 ldi r25, 0x00 ; 0
550a: c2 da rcall .-2684 ; 0x4a90 <GetParamWord>
550c: 90 93 4e 04 sts 0x044E, r25
5510: 80 93 4d 04 sts 0x044D, r24
NeutralAccY = (int16_t)GetParamWord(PID_ACC_ROLL);
5514: 86 e0 ldi r24, 0x06 ; 6
5516: 90 e0 ldi r25, 0x00 ; 0
5518: bb da rcall .-2698 ; 0x4a90 <GetParamWord>
551a: 90 93 4c 04 sts 0x044C, r25
551e: 80 93 4b 04 sts 0x044B, r24
// strange settings?
if(((unsigned int) NeutralAccX > 2048) || ((unsigned int) NeutralAccY > 2048)/* || ((unsigned int) NeutralAccZ > 1024)*/)
5522: 20 91 4d 04 lds r18, 0x044D
5526: 30 91 4e 04 lds r19, 0x044E
552a: 21 30 cpi r18, 0x01 ; 1
552c: 38 40 sbci r19, 0x08 ; 8
552e: 18 f4 brcc .+6 ; 0x5536 <SetNeutral+0x290>
5530: 81 30 cpi r24, 0x01 ; 1
5532: 98 40 sbci r25, 0x08 ; 8
5534: a8 f1 brcs .+106 ; 0x55a0 <SetNeutral+0x2fa>
{
printf("\n\rACC not calibrated!\r\n");
5536: 85 e0 ldi r24, 0x05 ; 5
5538: 93 e0 ldi r25, 0x03 ; 3
553a: 9f 93 push r25
553c: 8f 93 push r24
553e: 87 eb ldi r24, 0xB7 ; 183
5540: 9c ea ldi r25, 0xAC ; 172
5542: 9f 93 push r25
5544: 8f 93 push r24
5546: e0 91 78 06 lds r30, 0x0678
554a: f0 91 79 06 lds r31, 0x0679
554e: 09 95 icall
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY);
5550: 80 91 60 06 lds r24, 0x0660
5554: 90 91 61 06 lds r25, 0x0661
5558: 99 23 and r25, r25
555a: 1c f4 brge .+6 ; 0x5562 <SetNeutral+0x2bc>
555c: 91 95 neg r25
555e: 81 95 neg r24
5560: 91 09 sbc r25, r1
5562: 6c e0 ldi r22, 0x0C ; 12
5564: 70 e0 ldi r23, 0x00 ; 0
5566: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
556a: 70 93 4e 04 sts 0x044E, r23
556e: 60 93 4d 04 sts 0x044D, r22
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY);
5572: 80 91 72 06 lds r24, 0x0672
5576: 90 91 73 06 lds r25, 0x0673
557a: 99 23 and r25, r25
557c: 1c f4 brge .+6 ; 0x5584 <SetNeutral+0x2de>
557e: 91 95 neg r25
5580: 81 95 neg r24
5582: 91 09 sbc r25, r1
5584: 6c e0 ldi r22, 0x0C ; 12
5586: 70 e0 ldi r23, 0x00 ; 0
5588: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
558c: 70 93 4c 04 sts 0x044C, r23
5590: 60 93 4b 04 sts 0x044B, r22
5594: 0f 90 pop r0
5596: 0f 90 pop r0
5598: 0f 90 pop r0
559a: 0f 90 pop r0
sucess = 0;
559c: d0 e0 ldi r29, 0x00 ; 0
559e: 01 c0 rjmp .+2 ; 0x55a2 <SetNeutral+0x2fc>
// Parameter: 2 -> calibrate and store ACC
// Parameter: 3 -> use stored Gyro calibration Data from EEPROM
unsigned char SetNeutral(unsigned char AdjustmentMode) // retuns: "sucess"
//############################################################################
{
unsigned char i, sucess = 1;
55a0: d1 e0 ldi r29, 0x01 ; 1
printf("\n\rACC not calibrated!\r\n");
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY);
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY);
sucess = 0;
}
if(FC_StatusFlags3 & FC_STATUS3_BOAT) // Read Gyro Data from eeprom
55a2: 80 91 c9 03 lds r24, 0x03C9
55a6: 81 ff sbrs r24, 1
55a8: 3f c0 rjmp .+126 ; 0x5628 <SetNeutral+0x382>
{
unsigned int nick, roll, gier;
// restore from eeprom
nick = (int16_t)GetParamWord(PID_GYRO_NICK);
55aa: 82 e1 ldi r24, 0x12 ; 18
55ac: 90 e0 ldi r25, 0x00 ; 0
55ae: 70 da rcall .-2848 ; 0x4a90 <GetParamWord>
55b0: 8c 01 movw r16, r24
roll = (int16_t)GetParamWord(PID_GYRO_ROLL);
55b2: 84 e1 ldi r24, 0x14 ; 20
55b4: 90 e0 ldi r25, 0x00 ; 0
55b6: 6c da rcall .-2856 ; 0x4a90 <GetParamWord>
55b8: 7c 01 movw r14, r24
gier = (int16_t)GetParamWord(PID_GYRO_YAW);
55ba: 86 e1 ldi r24, 0x16 ; 22
55bc: 90 e0 ldi r25, 0x00 ; 0
55be: 68 da rcall .-2864 ; 0x4a90 <GetParamWord>
// strange settings?
if(((unsigned int) nick > (600 * 16)) || ((unsigned int) nick < (400 * 16))
55c0: 98 01 movw r18, r16
55c2: 39 51 subi r19, 0x19 ; 25
55c4: 21 38 cpi r18, 0x81 ; 129
55c6: 3c 40 sbci r19, 0x0C ; 12
55c8: 58 f4 brcc .+22 ; 0x55e0 <SetNeutral+0x33a>
|| ((unsigned int) roll > (600 * 16)) || ((unsigned int) roll < (400 * 16))
55ca: 97 01 movw r18, r14
55cc: 39 51 subi r19, 0x19 ; 25
55ce: 21 38 cpi r18, 0x81 ; 129
55d0: 3c 40 sbci r19, 0x0C ; 12
55d2: 30 f4 brcc .+12 ; 0x55e0 <SetNeutral+0x33a>
|| ((unsigned int) gier > (600 * 2)) || ((unsigned int) gier < (400 * 2)))
55d4: 9c 01 movw r18, r24
55d6: 20 52 subi r18, 0x20 ; 32
55d8: 33 40 sbci r19, 0x03 ; 3
55da: 21 39 cpi r18, 0x91 ; 145
55dc: 31 40 sbci r19, 0x01 ; 1
55de: c0 f0 brcs .+48 ; 0x5610 <SetNeutral+0x36a>
{
printf("\n\rGyro calibration data not valid\r\n");
55e0: 81 ee ldi r24, 0xE1 ; 225
55e2: 92 e0 ldi r25, 0x02 ; 2
55e4: 9f 93 push r25
55e6: 8f 93 push r24
55e8: 87 eb ldi r24, 0xB7 ; 183
55ea: 9c ea ldi r25, 0xAC ; 172
55ec: 9f 93 push r25
55ee: 8f 93 push r24
55f0: e0 91 78 06 lds r30, 0x0678
55f4: f0 91 79 06 lds r31, 0x0679
55f8: 09 95 icall
sucess = 0;
FC_StatusFlags3 &= ~FC_STATUS3_BOAT;
55fa: 80 91 c9 03 lds r24, 0x03C9
55fe: 8d 7f andi r24, 0xFD ; 253
5600: 80 93 c9 03 sts 0x03C9, r24
5604: 0f 90 pop r0
5606: 0f 90 pop r0
5608: 0f 90 pop r0
560a: 0f 90 pop r0
if(((unsigned int) nick > (600 * 16)) || ((unsigned int) nick < (400 * 16))
|| ((unsigned int) roll > (600 * 16)) || ((unsigned int) roll < (400 * 16))
|| ((unsigned int) gier > (600 * 2)) || ((unsigned int) gier < (400 * 2)))
{
printf("\n\rGyro calibration data not valid\r\n");
sucess = 0;
560c: d0 e0 ldi r29, 0x00 ; 0
FC_StatusFlags3 &= ~FC_STATUS3_BOAT;
560e: 0c c0 rjmp .+24 ; 0x5628 <SetNeutral+0x382>
}
else
{
AdNeutralNick = nick;
5610: 10 93 58 04 sts 0x0458, r17
5614: 00 93 57 04 sts 0x0457, r16
AdNeutralRoll = roll;
5618: f0 92 56 04 sts 0x0456, r15
561c: e0 92 55 04 sts 0x0455, r14
AdNeutralGier = gier;
5620: 90 93 54 04 sts 0x0454, r25
5624: 80 93 53 04 sts 0x0453, r24
}
}
}
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space
5628: 12 bc out 0x22, r1 ; 34
562a: 11 bc out 0x21, r1 ; 33
MesswertNick = 0;
562c: 10 92 28 06 sts 0x0628, r1
5630: 10 92 27 06 sts 0x0627, r1
MesswertRoll = 0;
5634: 10 92 1d 06 sts 0x061D, r1
5638: 10 92 1c 06 sts 0x061C, r1
MesswertGier = 0;
563c: 10 92 68 06 sts 0x0668, r1
5640: 10 92 67 06 sts 0x0667, r1
Delay_ms_Mess(200);
5644: 88 ec ldi r24, 0xC8 ; 200
5646: 90 e0 ldi r25, 0x00 ; 0
5648: 0e 94 6e 9c call 0x138dc ; 0x138dc <Delay_ms_Mess>
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick;
564c: 80 91 5d 03 lds r24, 0x035D
5650: 90 91 5e 03 lds r25, 0x035E
5654: dc 01 movw r26, r24
5656: aa 0f add r26, r26
5658: bb 1f adc r27, r27
565a: 8a 0f add r24, r26
565c: 9b 1f adc r25, r27
565e: dc 01 movw r26, r24
5660: aa 0f add r26, r26
5662: bb 1f adc r27, r27
5664: b0 93 61 06 sts 0x0661, r27
5668: a0 93 60 06 sts 0x0660, r26
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll;
566c: 80 91 5f 03 lds r24, 0x035F
5670: 90 91 60 03 lds r25, 0x0360
5674: fc 01 movw r30, r24
5676: ee 0f add r30, r30
5678: ff 1f adc r31, r31
567a: 8e 0f add r24, r30
567c: 9f 1f adc r25, r31
567e: fc 01 movw r30, r24
5680: ee 0f add r30, r30
5682: ff 1f adc r31, r31
5684: f0 93 73 06 sts 0x0673, r31
5688: e0 93 72 06 sts 0x0672, r30
IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick;
568c: 80 90 5a 05 lds r8, 0x055A
5690: 91 2c mov r9, r1
5692: a1 2c mov r10, r1
5694: b1 2c mov r11, r1
5696: a5 01 movw r20, r10
5698: 94 01 movw r18, r8
569a: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
569e: 6b 01 movw r12, r22
56a0: 7c 01 movw r14, r24
56a2: 60 93 42 04 sts 0x0442, r22
56a6: 70 93 43 04 sts 0x0443, r23
56aa: 80 93 44 04 sts 0x0444, r24
56ae: 90 93 45 04 sts 0x0445, r25
IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll;
56b2: df 01 movw r26, r30
56b4: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
56b8: 60 93 3e 04 sts 0x043E, r22
56bc: 70 93 3f 04 sts 0x043F, r23
56c0: 80 93 40 04 sts 0x0440, r24
56c4: 90 93 41 04 sts 0x0441, r25
Mess_IntegralNick = IntegralNick;
56c8: c0 92 36 04 sts 0x0436, r12
56cc: d0 92 37 04 sts 0x0437, r13
56d0: e0 92 38 04 sts 0x0438, r14
56d4: f0 92 39 04 sts 0x0439, r15
Mess_IntegralRoll = IntegralRoll;
56d8: 60 93 32 04 sts 0x0432, r22
56dc: 70 93 33 04 sts 0x0433, r23
56e0: 80 93 34 04 sts 0x0434, r24
56e4: 90 93 35 04 sts 0x0435, r25
Mess_Integral_Gier = 0;
56e8: 10 92 2e 04 sts 0x042E, r1
56ec: 10 92 2f 04 sts 0x042F, r1
56f0: 10 92 30 04 sts 0x0430, r1
56f4: 10 92 31 04 sts 0x0431, r1
KompassSollWert = KompassValue;
56f8: e0 91 4e 01 lds r30, 0x014E
56fc: f0 91 4f 01 lds r31, 0x014F
5700: f0 93 1d 04 sts 0x041D, r31
5704: e0 93 1c 04 sts 0x041C, r30
KompassSignalSchlecht = 100;
5708: 84 e6 ldi r24, 0x64 ; 100
570a: 90 e0 ldi r25, 0x00 ; 0
570c: 90 93 4b 01 sts 0x014B, r25
5710: 80 93 4a 01 sts 0x014A, r24
Umschlag180Nick = ((long) EE_Parameter.WinkelUmschlagNick * 2500L) + 15000L;
5714: 20 91 7f 05 lds r18, 0x057F
5718: 30 e0 ldi r19, 0x00 ; 0
571a: a4 ec ldi r26, 0xC4 ; 196
571c: b9 e0 ldi r27, 0x09 ; 9
571e: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
5722: dc 01 movw r26, r24
5724: cb 01 movw r24, r22
5726: 88 56 subi r24, 0x68 ; 104
5728: 95 4c sbci r25, 0xC5 ; 197
572a: af 4f sbci r26, 0xFF ; 255
572c: bf 4f sbci r27, 0xFF ; 255
572e: 80 93 46 01 sts 0x0146, r24
5732: 90 93 47 01 sts 0x0147, r25
5736: a0 93 48 01 sts 0x0148, r26
573a: b0 93 49 01 sts 0x0149, r27
Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L;
573e: 20 91 80 05 lds r18, 0x0580
5742: 30 e0 ldi r19, 0x00 ; 0
5744: a4 ec ldi r26, 0xC4 ; 196
5746: b9 e0 ldi r27, 0x09 ; 9
5748: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
574c: dc 01 movw r26, r24
574e: cb 01 movw r24, r22
5750: 88 56 subi r24, 0x68 ; 104
5752: 95 4c sbci r25, 0xC5 ; 197
5754: af 4f sbci r26, 0xFF ; 255
5756: bf 4f sbci r27, 0xFF ; 255
5758: 80 93 42 01 sts 0x0142, r24
575c: 90 93 43 01 sts 0x0143, r25
5760: a0 93 44 01 sts 0x0144, r26
5764: b0 93 45 01 sts 0x0145, r27
ExternHoehenValue = 0;
5768: 10 92 26 01 sts 0x0126, r1
576c: 10 92 25 01 sts 0x0125, r1
ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR;
5770: 20 91 21 01 lds r18, 0x0121
5774: 30 91 22 01 lds r19, 0x0122
5778: 40 91 23 01 lds r20, 0x0123
577c: 50 91 24 01 lds r21, 0x0124
5780: df 01 movw r26, r30
5782: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
5786: 60 93 6e 06 sts 0x066E, r22
578a: 70 93 6f 06 sts 0x066F, r23
578e: 80 93 70 06 sts 0x0670, r24
5792: 90 93 71 06 sts 0x0671, r25
GierGyroFehler = 0;
5796: 10 92 19 04 sts 0x0419, r1
579a: 10 92 18 04 sts 0x0418, r1
LED_Init();
579e: 0e 94 80 85 call 0x10b00 ; 0x10b00 <LED_Init>
if(AdjustmentMode != 0) FC_StatusFlags |= FC_STATUS_CALIBRATE;
57a2: cc 23 and r28, r28
57a4: 29 f0 breq .+10 ; 0x57b0 <SetNeutral+0x50a>
57a6: 80 91 cb 03 lds r24, 0x03CB
57aa: 84 60 ori r24, 0x04 ; 4
57ac: 80 93 cb 03 sts 0x03CB, r24
FromNaviCtrl_Value.Kalman_K = -1;
57b0: 8f ef ldi r24, 0xFF ; 255
57b2: 80 93 4c 09 sts 0x094C, r24
FromNaviCtrl_Value.Kalman_MaxDrift = 0;
57b6: 10 92 4d 09 sts 0x094D, r1
FromNaviCtrl_Value.Kalman_MaxFusion = 32;
57ba: 80 e2 ldi r24, 0x20 ; 32
57bc: 80 93 4e 09 sts 0x094E, r24
SenderOkay = 100;
57c0: 84 e6 ldi r24, 0x64 ; 100
57c2: 80 93 04 04 sts 0x0404, r24
if(ServoActive) DDRD |=0x80; // enable J7 -> Servo signal
57c6: 80 91 cb 04 lds r24, 0x04CB
57ca: 88 23 and r24, r24
57cc: 11 f0 breq .+4 ; 0x57d2 <SetNeutral+0x52c>
57ce: 57 9a sbi 0x0a, 7 ; 10
57d0: 19 c0 rjmp .+50 ; 0x5804 <SetNeutral+0x55e>
57d2: 80 91 b7 05 lds r24, 0x05B7
57d6: 85 70 andi r24, 0x05 ; 5
else
{
if((EE_Parameter.ServoCompInvert & SERVO_NICK_INV) && (EE_Parameter.ServoCompInvert & SERVO_RELATIVE)) NickServoValue = 12000;//((128 + 60) * 4 * 16); // neutral position = upper 1/4// else
57d8: 85 30 cpi r24, 0x05 ; 5
57da: 39 f4 brne .+14 ; 0x57ea <SetNeutral+0x544>
57dc: 80 ee ldi r24, 0xE0 ; 224
57de: 9e e2 ldi r25, 0x2E ; 46
57e0: 90 93 a8 02 sts 0x02A8, r25
57e4: 80 93 a7 02 sts 0x02A7, r24
57e8: 06 c0 rjmp .+12 ; 0x57f6 <SetNeutral+0x550>
else NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4
57ea: 80 e0 ldi r24, 0x00 ; 0
57ec: 91 e1 ldi r25, 0x11 ; 17
57ee: 90 93 a8 02 sts 0x02A8, r25
57f2: 80 93 a7 02 sts 0x02A7, r24
CalculateServoSignals = 1;
57f6: 81 e0 ldi r24, 0x01 ; 1
57f8: 80 93 af 02 sts 0x02AF, r24
CalculateServo(); // nick
57fc: 0e 94 14 9d call 0x13a28 ; 0x13a28 <CalculateServo>
CalculateServo(); // roll
5800: 0e 94 14 9d call 0x13a28 ; 0x13a28 <CalculateServo>
}
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
signed int tilt1, tilt2;
tilt1 = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg
5804: c0 90 21 01 lds r12, 0x0121
5808: d0 90 22 01 lds r13, 0x0122
580c: e0 90 23 01 lds r14, 0x0123
5810: f0 90 24 01 lds r15, 0x0124
tilt2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg
5814: 60 91 3e 04 lds r22, 0x043E
5818: 70 91 3f 04 lds r23, 0x043F
581c: 80 91 40 04 lds r24, 0x0440
5820: 90 91 41 04 lds r25, 0x0441
5824: a7 01 movw r20, r14
5826: 96 01 movw r18, r12
5828: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
582c: 49 01 movw r8, r18
582e: 5a 01 movw r10, r20
CalculateServo(); // roll
}
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
signed int tilt1, tilt2;
tilt1 = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg
5830: 60 91 42 04 lds r22, 0x0442
5834: 70 91 43 04 lds r23, 0x0443
5838: 80 91 44 04 lds r24, 0x0444
583c: 90 91 45 04 lds r25, 0x0445
5840: a7 01 movw r20, r14
5842: 96 01 movw r18, r12
5844: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
tilt2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg
tilt1 = (int16_t)ihypot(tilt1,tilt2); // tilt angle over all
5848: b4 01 movw r22, r8
584a: c9 01 movw r24, r18
584c: 0e 94 a2 0d call 0x1b44 ; 0x1b44 <ihypot>
5850: 7c 01 movw r14, r24
CosAttitude = c_cos_8192(tilt1);
5852: 0e 94 2d 91 call 0x1225a ; 0x1225a <c_cos_8192>
5856: 9c 01 movw r18, r24
5858: 90 93 2e 06 sts 0x062E, r25
585c: 80 93 2d 06 sts 0x062D, r24
NeutralAccZ = (long)((long) (NeutralAccZ - 512) * 8192 + 4096) / CosAttitude + 512;
5860: 60 91 47 04 lds r22, 0x0447
5864: 70 91 48 04 lds r23, 0x0448
5868: 72 50 subi r23, 0x02 ; 2
586a: cb 01 movw r24, r22
586c: aa 27 eor r26, r26
586e: 97 fd sbrc r25, 7
5870: a0 95 com r26
5872: ba 2f mov r27, r26
5874: 07 2e mov r0, r23
5876: 7d e0 ldi r23, 0x0D ; 13
5878: 88 0f add r24, r24
587a: 99 1f adc r25, r25
587c: aa 1f adc r26, r26
587e: bb 1f adc r27, r27
5880: 7a 95 dec r23
5882: d1 f7 brne .-12 ; 0x5878 <SetNeutral+0x5d2>
5884: 70 2d mov r23, r0
5886: bc 01 movw r22, r24
5888: cd 01 movw r24, r26
588a: 70 5f subi r23, 0xF0 ; 240
588c: 8f 4f sbci r24, 0xFF ; 255
588e: 9f 4f sbci r25, 0xFF ; 255
5890: 44 27 eor r20, r20
5892: 37 fd sbrc r19, 7
5894: 40 95 com r20
5896: 54 2f mov r21, r20
5898: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
589c: c9 01 movw r24, r18
589e: b9 01 movw r22, r18
58a0: 7e 5f subi r23, 0xFE ; 254
58a2: 70 93 48 04 sts 0x0448, r23
58a6: 60 93 47 04 sts 0x0447, r22
if(tilt1 > 20) sucess = 0; // calibration must be within 20° Tilt angle
58aa: 65 e1 ldi r22, 0x15 ; 21
58ac: e6 16 cp r14, r22
58ae: f1 04 cpc r15, r1
58b0: 0c f0 brlt .+2 ; 0x58b4 <SetNeutral+0x60e>
58b2: d0 e0 ldi r29, 0x00 ; 0
if(AdjustmentMode != 0 && ACC_AltitudeControl) if((NeutralAccZ < 682 - 30) || (NeutralAccZ > 682 + 35)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; sucess = 0;};
58b4: cc 23 and r28, r28
58b6: 79 f0 breq .+30 ; 0x58d6 <SetNeutral+0x630>
58b8: 60 91 c2 03 lds r22, 0x03C2
58bc: 66 23 and r22, r22
58be: 59 f0 breq .+22 ; 0x58d6 <SetNeutral+0x630>
58c0: 2c 58 subi r18, 0x8C ; 140
58c2: 31 09 sbc r19, r1
58c4: 22 34 cpi r18, 0x42 ; 66
58c6: 31 05 cpc r19, r1
58c8: 30 f0 brcs .+12 ; 0x58d6 <SetNeutral+0x630>
58ca: e2 e6 ldi r30, 0x62 ; 98
58cc: fa e0 ldi r31, 0x0A ; 10
58ce: 20 81 ld r18, Z
58d0: 20 62 ori r18, 0x20 ; 32
58d2: 20 83 st Z, r18
58d4: d0 e0 ldi r29, 0x00 ; 0
#else
NeutralAccZ = (int16_t)GetParamWord(PID_ACC_TOP);
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space
#endif
if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; };
58d6: 20 91 57 04 lds r18, 0x0457
58da: 30 91 58 04 lds r19, 0x0458
58de: 20 56 subi r18, 0x60 ; 96
58e0: 39 40 sbci r19, 0x09 ; 9
58e2: 21 3c cpi r18, 0xC1 ; 193
58e4: 3b 42 sbci r19, 0x2B ; 43
58e6: 28 f0 brcs .+10 ; 0x58f2 <SetNeutral+0x64c>
58e8: e2 e6 ldi r30, 0x62 ; 98
58ea: fa e0 ldi r31, 0x0A ; 10
58ec: 20 81 ld r18, Z
58ee: 21 60 ori r18, 0x01 ; 1
58f0: 20 83 st Z, r18
if((AdNeutralRoll < 150 * 16) || (AdNeutralRoll > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; };
58f2: 20 91 55 04 lds r18, 0x0455
58f6: 30 91 56 04 lds r19, 0x0456
58fa: 20 56 subi r18, 0x60 ; 96
58fc: 39 40 sbci r19, 0x09 ; 9
58fe: 21 3c cpi r18, 0xC1 ; 193
5900: 3b 42 sbci r19, 0x2B ; 43
5902: 28 f0 brcs .+10 ; 0x590e <SetNeutral+0x668>
5904: e2 e6 ldi r30, 0x62 ; 98
5906: fa e0 ldi r31, 0x0A ; 10
5908: 20 81 ld r18, Z
590a: 22 60 ori r18, 0x02 ; 2
590c: 20 83 st Z, r18
if((AdNeutralGier < 150 * 2) || (AdNeutralGier > 850 * 2)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; };
590e: 20 91 53 04 lds r18, 0x0453
5912: 30 91 54 04 lds r19, 0x0454
5916: 2c 52 subi r18, 0x2C ; 44
5918: 31 40 sbci r19, 0x01 ; 1
591a: 29 37 cpi r18, 0x79 ; 121
591c: 35 40 sbci r19, 0x05 ; 5
591e: 28 f0 brcs .+10 ; 0x592a <SetNeutral+0x684>
5920: e2 e6 ldi r30, 0x62 ; 98
5922: fa e0 ldi r31, 0x0A ; 10
5924: 20 81 ld r18, Z
5926: 24 60 ori r18, 0x04 ; 4
5928: 20 83 st Z, r18
if((NeutralAccX < 300) || (NeutralAccX > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_NICK; };
592a: 20 91 4d 04 lds r18, 0x044D
592e: 30 91 4e 04 lds r19, 0x044E
5932: 2c 52 subi r18, 0x2C ; 44
5934: 31 40 sbci r19, 0x01 ; 1
5936: 23 3c cpi r18, 0xC3 ; 195
5938: 31 40 sbci r19, 0x01 ; 1
593a: 28 f0 brcs .+10 ; 0x5946 <SetNeutral+0x6a0>
593c: e2 e6 ldi r30, 0x62 ; 98
593e: fa e0 ldi r31, 0x0A ; 10
5940: 20 81 ld r18, Z
5942: 28 60 ori r18, 0x08 ; 8
5944: 20 83 st Z, r18
if((NeutralAccY < 300) || (NeutralAccY > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_ROLL; };
5946: 20 91 4b 04 lds r18, 0x044B
594a: 30 91 4c 04 lds r19, 0x044C
594e: 2c 52 subi r18, 0x2C ; 44
5950: 31 40 sbci r19, 0x01 ; 1
5952: 23 3c cpi r18, 0xC3 ; 195
5954: 31 40 sbci r19, 0x01 ; 1
5956: 28 f0 brcs .+10 ; 0x5962 <SetNeutral+0x6bc>
5958: e2 e6 ldi r30, 0x62 ; 98
595a: fa e0 ldi r31, 0x0A ; 10
595c: 20 81 ld r18, Z
595e: 20 61 ori r18, 0x10 ; 16
5960: 20 83 st Z, r18
if((NeutralAccZ < 512) || (NeutralAccZ > 850)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; };
5962: 83 35 cpi r24, 0x53 ; 83
5964: 91 40 sbci r25, 0x01 ; 1
5966: 28 f0 brcs .+10 ; 0x5972 <SetNeutral+0x6cc>
5968: e2 e6 ldi r30, 0x62 ; 98
596a: fa e0 ldi r31, 0x0A ; 10
596c: 80 81 ld r24, Z
596e: 80 62 ori r24, 0x20 ; 32
5970: 80 83 st Z, r24
if(VersionInfo.HardwareError[0]) sucess = 0;
5972: 80 91 62 0a lds r24, 0x0A62
5976: 81 11 cpse r24, r1
5978: d0 e0 ldi r29, 0x00 ; 0
carefree_old = 70;
597a: 86 e4 ldi r24, 0x46 ; 70
597c: 80 93 3d 01 sts 0x013D, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
5980: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
ACC_AltitudeFusion(2); // initalisation
5984: 82 e0 ldi r24, 0x02 ; 2
5986: 0e 94 a0 16 call 0x2d40 ; 0x2d40 <ACC_AltitudeFusion>
#endif
StartLuftdruck = Luftdruck;
598a: 80 91 12 01 lds r24, 0x0112
598e: 90 91 13 01 lds r25, 0x0113
5992: a0 91 14 01 lds r26, 0x0114
5996: b0 91 15 01 lds r27, 0x0115
599a: 80 93 08 05 sts 0x0508, r24
599e: 90 93 09 05 sts 0x0509, r25
59a2: a0 93 0a 05 sts 0x050A, r26
59a6: b0 93 0b 05 sts 0x050B, r27
VarioMeter = 0;
59aa: 10 92 55 03 sts 0x0355, r1
59ae: 10 92 54 03 sts 0x0354, r1
SummenHoehe = 0; Mess_Integral_Hoch = 0;
59b2: 10 92 57 03 sts 0x0357, r1
59b6: 10 92 58 03 sts 0x0358, r1
59ba: 10 92 59 03 sts 0x0359, r1
59be: 10 92 5a 03 sts 0x035A, r1
59c2: 10 92 1e 04 sts 0x041E, r1
59c6: 10 92 1f 04 sts 0x041F, r1
59ca: 10 92 20 04 sts 0x0420, r1
59ce: 10 92 21 04 sts 0x0421, r1
DebugOut.Analog[28] = 0; // I2C-Counter
59d2: 10 92 81 0c sts 0x0C81, r1
59d6: 10 92 80 0c sts 0x0C80, r1
CalcExpandBaroStep();
59da: 0e 94 14 1b call 0x3628 ; 0x3628 <CalcExpandBaroStep>
if(FC_StatusFlags3 & FC_STATUS3_BOAT && !EE_Parameter.Driftkomp) EE_Parameter.Driftkomp = 4;
59de: 80 91 c9 03 lds r24, 0x03C9
59e2: 81 ff sbrs r24, 1
59e4: 07 c0 rjmp .+14 ; 0x59f4 <SetNeutral+0x74e>
59e6: 80 91 82 05 lds r24, 0x0582
59ea: 81 11 cpse r24, r1
59ec: 03 c0 rjmp .+6 ; 0x59f4 <SetNeutral+0x74e>
59ee: 84 e0 ldi r24, 0x04 ; 4
59f0: 80 93 82 05 sts 0x0582, r24
return(sucess);
}
59f4: 8d 2f mov r24, r29
59f6: df 91 pop r29
59f8: cf 91 pop r28
59fa: 1f 91 pop r17
59fc: 0f 91 pop r16
59fe: ff 90 pop r15
5a00: ef 90 pop r14
5a02: df 90 pop r13
5a04: cf 90 pop r12
5a06: bf 90 pop r11
5a08: af 90 pop r10
5a0a: 9f 90 pop r9
5a0c: 8f 90 pop r8
5a0e: 08 95 ret
00005a10 <Mittelwert>:
//############################################################################
// Bearbeitet die Messwerte
void Mittelwert(void)
//############################################################################
{
5a10: 2f 92 push r2
5a12: 3f 92 push r3
5a14: 4f 92 push r4
5a16: 5f 92 push r5
5a18: 6f 92 push r6
5a1a: 7f 92 push r7
5a1c: 8f 92 push r8
5a1e: 9f 92 push r9
5a20: af 92 push r10
5a22: bf 92 push r11
5a24: cf 92 push r12
5a26: df 92 push r13
5a28: ef 92 push r14
5a2a: ff 92 push r15
5a2c: 0f 93 push r16
5a2e: 1f 93 push r17
5a30: cf 93 push r28
5a32: df 93 push r29
5a34: cd b7 in r28, 0x3d ; 61
5a36: de b7 in r29, 0x3e ; 62
5a38: 60 97 sbiw r28, 0x10 ; 16
5a3a: 0f b6 in r0, 0x3f ; 63
5a3c: f8 94 cli
5a3e: de bf out 0x3e, r29 ; 62
5a40: 0f be out 0x3f, r0 ; 63
5a42: cd bf out 0x3d, r28 ; 61
static signed long tmpl,tmpl2,tmpl3,tmpl4;
static signed int oldNick, oldRoll, d2Roll, d2Nick;
signed long winkel_nick, winkel_roll;
MesswertGier = (signed int) AdNeutralGier - AdWertGier;
5a44: 20 91 61 03 lds r18, 0x0361
5a48: 30 91 62 03 lds r19, 0x0362
5a4c: 80 91 53 04 lds r24, 0x0453
5a50: 90 91 54 04 lds r25, 0x0454
5a54: 82 1b sub r24, r18
5a56: 93 0b sbc r25, r19
5a58: 90 93 68 06 sts 0x0668, r25
5a5c: 80 93 67 06 sts 0x0667, r24
MesswertNick = (signed int) AdWertNickFilter / 8;
5a60: 80 91 69 03 lds r24, 0x0369
5a64: 90 91 6a 03 lds r25, 0x036A
5a68: 99 23 and r25, r25
5a6a: 0c f4 brge .+2 ; 0x5a6e <Mittelwert+0x5e>
5a6c: 07 96 adiw r24, 0x07 ; 7
5a6e: 9c 01 movw r18, r24
5a70: 35 95 asr r19
5a72: 27 95 ror r18
5a74: 35 95 asr r19
5a76: 27 95 ror r18
5a78: 35 95 asr r19
5a7a: 27 95 ror r18
5a7c: 30 93 28 06 sts 0x0628, r19
5a80: 20 93 27 06 sts 0x0627, r18
MesswertRoll = (signed int) AdWertRollFilter / 8;
5a84: 80 91 67 03 lds r24, 0x0367
5a88: 90 91 68 03 lds r25, 0x0368
5a8c: 99 23 and r25, r25
5a8e: 0c f4 brge .+2 ; 0x5a92 <Mittelwert+0x82>
5a90: 07 96 adiw r24, 0x07 ; 7
5a92: 95 95 asr r25
5a94: 87 95 ror r24
5a96: 95 95 asr r25
5a98: 87 95 ror r24
5a9a: 95 95 asr r25
5a9c: 87 95 ror r24
5a9e: 90 93 1d 06 sts 0x061D, r25
5aa2: 80 93 1c 06 sts 0x061C, r24
RohMesswertNick = MesswertNick;
5aa6: 30 93 30 06 sts 0x0630, r19
5aaa: 20 93 2f 06 sts 0x062F, r18
RohMesswertRoll = MesswertRoll;
5aae: 90 93 2b 06 sts 0x062B, r25
5ab2: 80 93 2a 06 sts 0x062A, r24
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++
Mittelwert_AccNick = (Mittelwert_AccNick * 3 + ((ACC_AMPLIFY * AdWertAccNick))) / 4L;
5ab6: 20 91 5d 03 lds r18, 0x035D
5aba: 30 91 5e 03 lds r19, 0x035E
5abe: 80 91 60 06 lds r24, 0x0660
5ac2: 90 91 61 06 lds r25, 0x0661
5ac6: ac 01 movw r20, r24
5ac8: 44 0f add r20, r20
5aca: 55 1f adc r21, r21
5acc: 84 0f add r24, r20
5ace: 95 1f adc r25, r21
5ad0: a9 01 movw r20, r18
5ad2: 44 0f add r20, r20
5ad4: 55 1f adc r21, r21
5ad6: 24 0f add r18, r20
5ad8: 35 1f adc r19, r21
5ada: 22 0f add r18, r18
5adc: 33 1f adc r19, r19
5ade: 82 0f add r24, r18
5ae0: 93 1f adc r25, r19
5ae2: 99 23 and r25, r25
5ae4: 0c f4 brge .+2 ; 0x5ae8 <Mittelwert+0xd8>
5ae6: 03 96 adiw r24, 0x03 ; 3
5ae8: 95 95 asr r25
5aea: 87 95 ror r24
5aec: 95 95 asr r25
5aee: 87 95 ror r24
5af0: 90 93 61 06 sts 0x0661, r25
5af4: 80 93 60 06 sts 0x0660, r24
Mittelwert_AccRoll = (Mittelwert_AccRoll * 3 + ((ACC_AMPLIFY * AdWertAccRoll))) / 4L;
5af8: 20 91 5f 03 lds r18, 0x035F
5afc: 30 91 60 03 lds r19, 0x0360
5b00: 80 91 72 06 lds r24, 0x0672
5b04: 90 91 73 06 lds r25, 0x0673
5b08: ac 01 movw r20, r24
5b0a: 44 0f add r20, r20
5b0c: 55 1f adc r21, r21
5b0e: 84 0f add r24, r20
5b10: 95 1f adc r25, r21
5b12: a9 01 movw r20, r18
5b14: 44 0f add r20, r20
5b16: 55 1f adc r21, r21
5b18: 24 0f add r18, r20
5b1a: 35 1f adc r19, r21
5b1c: 22 0f add r18, r18
5b1e: 33 1f adc r19, r19
5b20: 82 0f add r24, r18
5b22: 93 1f adc r25, r19
5b24: 99 23 and r25, r25
5b26: 0c f4 brge .+2 ; 0x5b2a <Mittelwert+0x11a>
5b28: 03 96 adiw r24, 0x03 ; 3
5b2a: 95 95 asr r25
5b2c: 87 95 ror r24
5b2e: 95 95 asr r25
5b30: 87 95 ror r24
5b32: 90 93 73 06 sts 0x0673, r25
5b36: 80 93 72 06 sts 0x0672, r24
NaviAccNick += AdWertAccNick;
5b3a: 80 91 5d 03 lds r24, 0x035D
5b3e: 90 91 5e 03 lds r25, 0x035E
5b42: 20 91 39 06 lds r18, 0x0639
5b46: 30 91 3a 06 lds r19, 0x063A
5b4a: 82 0f add r24, r18
5b4c: 93 1f adc r25, r19
5b4e: 90 93 3a 06 sts 0x063A, r25
5b52: 80 93 39 06 sts 0x0639, r24
NaviAccRoll += AdWertAccRoll;
5b56: 80 91 5f 03 lds r24, 0x035F
5b5a: 90 91 60 03 lds r25, 0x0360
5b5e: 20 91 6a 06 lds r18, 0x066A
5b62: 30 91 6b 06 lds r19, 0x066B
5b66: 82 0f add r24, r18
5b68: 93 1f adc r25, r19
5b6a: 90 93 6b 06 sts 0x066B, r25
5b6e: 80 93 6a 06 sts 0x066A, r24
NaviCntAcc++;
5b72: 80 91 49 04 lds r24, 0x0449
5b76: 90 91 4a 04 lds r25, 0x044A
5b7a: 01 96 adiw r24, 0x01 ; 1
5b7c: 90 93 4a 04 sts 0x044A, r25
5b80: 80 93 49 04 sts 0x0449, r24
//++++++++++++++++++++++++++++++++++++++++++++++++
HoehenWert = HoehenWert_Mess;
5b84: 80 91 46 03 lds r24, 0x0346
5b88: 90 91 47 03 lds r25, 0x0347
5b8c: a0 91 48 03 lds r26, 0x0348
5b90: b0 91 49 03 lds r27, 0x0349
5b94: 80 93 fe 03 sts 0x03FE, r24
5b98: 90 93 ff 03 sts 0x03FF, r25
5b9c: a0 93 00 04 sts 0x0400, r26
5ba0: b0 93 01 04 sts 0x0401, r27
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
HoehenWertF = HoehenWertF_Mess;
5ba4: 80 91 42 03 lds r24, 0x0342
5ba8: 90 91 43 03 lds r25, 0x0343
5bac: a0 91 44 03 lds r26, 0x0344
5bb0: b0 91 45 03 lds r27, 0x0345
5bb4: 80 93 4a 03 sts 0x034A, r24
5bb8: 90 93 4b 03 sts 0x034B, r25
5bbc: a0 93 4c 03 sts 0x034C, r26
5bc0: b0 93 4d 03 sts 0x034D, r27
#else
HoehenWertF = HoehenWert;
#endif
//++++++++++++++++++++++++++++++++++++++++++++++++
// ADC einschalten
ANALOG_ON;
5bc4: 8f ec ldi r24, 0xCF ; 207
5bc6: 80 93 7a 00 sts 0x007A, r24
AdReady = 0;
5bca: 10 92 0f 01 sts 0x010F, r1
//++++++++++++++++++++++++++++++++++++++++++++++++
if(Mess_IntegralRoll > 93000L) winkel_roll = 93000L;
5bce: 00 91 32 04 lds r16, 0x0432
5bd2: 10 91 33 04 lds r17, 0x0433
5bd6: 70 91 34 04 lds r23, 0x0434
5bda: 60 91 35 04 lds r22, 0x0435
else if(Mess_IntegralRoll <-93000L) winkel_roll = -93000L;
else winkel_roll = Mess_IntegralRoll;
if(Mess_IntegralNick > 93000L) winkel_nick = 93000L;
5bde: 50 91 36 04 lds r21, 0x0436
5be2: 40 91 37 04 lds r20, 0x0437
5be6: 30 91 38 04 lds r19, 0x0438
5bea: 20 91 39 04 lds r18, 0x0439
else if(Mess_IntegralNick <-93000L) winkel_nick = -93000L;
else winkel_nick = Mess_IntegralNick;
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++
Mess_Integral_Gier += MesswertGier;
5bee: 20 90 67 06 lds r2, 0x0667
5bf2: 30 90 68 06 lds r3, 0x0668
5bf6: 61 01 movw r12, r2
5bf8: ee 24 eor r14, r14
5bfa: d7 fc sbrc r13, 7
5bfc: e0 94 com r14
5bfe: fe 2c mov r15, r14
5c00: 80 91 2e 04 lds r24, 0x042E
5c04: 90 91 2f 04 lds r25, 0x042F
5c08: a0 91 30 04 lds r26, 0x0430
5c0c: b0 91 31 04 lds r27, 0x0431
5c10: 46 01 movw r8, r12
5c12: 57 01 movw r10, r14
5c14: 88 0e add r8, r24
5c16: 99 1e adc r9, r25
5c18: aa 1e adc r10, r26
5c1a: bb 1e adc r11, r27
5c1c: 80 92 2e 04 sts 0x042E, r8
5c20: 90 92 2f 04 sts 0x042F, r9
5c24: a0 92 30 04 sts 0x0430, r10
5c28: b0 92 31 04 sts 0x0431, r11
ErsatzKompass += MesswertGier;
5c2c: 80 91 6e 06 lds r24, 0x066E
5c30: 90 91 6f 06 lds r25, 0x066F
5c34: a0 91 70 06 lds r26, 0x0670
5c38: b0 91 71 06 lds r27, 0x0671
5c3c: 26 01 movw r4, r12
5c3e: 37 01 movw r6, r14
5c40: 48 0e add r4, r24
5c42: 59 1e adc r5, r25
5c44: 6a 1e adc r6, r26
5c46: 7b 1e adc r7, r27
5c48: 40 92 6e 06 sts 0x066E, r4
5c4c: 50 92 6f 06 sts 0x066F, r5
5c50: 60 92 70 06 sts 0x0670, r6
5c54: 70 92 71 06 sts 0x0671, r7
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV))
5c58: 80 91 e7 03 lds r24, 0x03E7
5c5c: 81 11 cpse r24, r1
5c5e: c5 c1 rjmp .+906 ; 0x5fea <Mittelwert+0x5da>
5c60: 80 91 e6 03 lds r24, 0x03E6
5c64: 81 11 cpse r24, r1
5c66: c1 c1 rjmp .+898 ; 0x5fea <Mittelwert+0x5da>
5c68: 80 91 5c 06 lds r24, 0x065C
5c6c: 86 ff sbrs r24, 6
5c6e: bd c1 rjmp .+890 ; 0x5fea <Mittelwert+0x5da>
5c70: 09 87 std Y+9, r16 ; 0x09
5c72: 1a 87 std Y+10, r17 ; 0x0a
5c74: 7b 87 std Y+11, r23 ; 0x0b
5c76: 6c 87 std Y+12, r22 ; 0x0c
5c78: 89 85 ldd r24, Y+9 ; 0x09
5c7a: 9a 85 ldd r25, Y+10 ; 0x0a
5c7c: ab 85 ldd r26, Y+11 ; 0x0b
5c7e: bc 85 ldd r27, Y+12 ; 0x0c
5c80: 88 3b cpi r24, 0xB8 ; 184
5c82: 94 49 sbci r25, 0x94 ; 148
5c84: ae 4f sbci r26, 0xFE ; 254
5c86: bf 4f sbci r27, 0xFF ; 255
5c88: 44 f4 brge .+16 ; 0x5c9a <Mittelwert+0x28a>
5c8a: 88 eb ldi r24, 0xB8 ; 184
5c8c: 94 e9 ldi r25, 0x94 ; 148
5c8e: ae ef ldi r26, 0xFE ; 254
5c90: bf ef ldi r27, 0xFF ; 255
5c92: 89 87 std Y+9, r24 ; 0x09
5c94: 9a 87 std Y+10, r25 ; 0x0a
5c96: ab 87 std Y+11, r26 ; 0x0b
5c98: bc 87 std Y+12, r27 ; 0x0c
5c9a: 89 85 ldd r24, Y+9 ; 0x09
5c9c: 9a 85 ldd r25, Y+10 ; 0x0a
5c9e: ab 85 ldd r26, Y+11 ; 0x0b
5ca0: bc 85 ldd r27, Y+12 ; 0x0c
5ca2: 89 34 cpi r24, 0x49 ; 73
5ca4: 9b 46 sbci r25, 0x6B ; 107
5ca6: a1 40 sbci r26, 0x01 ; 1
5ca8: b1 05 cpc r27, r1
5caa: 44 f0 brlt .+16 ; 0x5cbc <Mittelwert+0x2ac>
5cac: 88 e4 ldi r24, 0x48 ; 72
5cae: 9b e6 ldi r25, 0x6B ; 107
5cb0: a1 e0 ldi r26, 0x01 ; 1
5cb2: b0 e0 ldi r27, 0x00 ; 0
5cb4: 89 87 std Y+9, r24 ; 0x09
5cb6: 9a 87 std Y+10, r25 ; 0x0a
5cb8: ab 87 std Y+11, r26 ; 0x0b
5cba: bc 87 std Y+12, r27 ; 0x0c
5cbc: 85 2f mov r24, r21
5cbe: 94 2f mov r25, r20
5cc0: a3 2f mov r26, r19
5cc2: b2 2f mov r27, r18
5cc4: 88 3b cpi r24, 0xB8 ; 184
5cc6: e4 e9 ldi r30, 0x94 ; 148
5cc8: 9e 07 cpc r25, r30
5cca: ee ef ldi r30, 0xFE ; 254
5ccc: ae 07 cpc r26, r30
5cce: ef ef ldi r30, 0xFF ; 255
5cd0: be 07 cpc r27, r30
5cd2: 24 f4 brge .+8 ; 0x5cdc <Mittelwert+0x2cc>
5cd4: 88 eb ldi r24, 0xB8 ; 184
5cd6: 94 e9 ldi r25, 0x94 ; 148
5cd8: ae ef ldi r26, 0xFE ; 254
5cda: bf ef ldi r27, 0xFF ; 255
5cdc: 8d 83 std Y+5, r24 ; 0x05
5cde: 9e 83 std Y+6, r25 ; 0x06
5ce0: af 83 std Y+7, r26 ; 0x07
5ce2: b8 87 std Y+8, r27 ; 0x08
5ce4: 89 34 cpi r24, 0x49 ; 73
5ce6: 9b 46 sbci r25, 0x6B ; 107
5ce8: a1 40 sbci r26, 0x01 ; 1
5cea: b1 05 cpc r27, r1
5cec: 44 f0 brlt .+16 ; 0x5cfe <Mittelwert+0x2ee>
5cee: 08 e4 ldi r16, 0x48 ; 72
5cf0: 1b e6 ldi r17, 0x6B ; 107
5cf2: 21 e0 ldi r18, 0x01 ; 1
5cf4: 30 e0 ldi r19, 0x00 ; 0
5cf6: 0d 83 std Y+5, r16 ; 0x05
5cf8: 1e 83 std Y+6, r17 ; 0x06
5cfa: 2f 83 std Y+7, r18 ; 0x07
5cfc: 38 87 std Y+8, r19 ; 0x08
{
tmpl3 = (MesswertRoll * winkel_nick) / 2048L;
tmpl3 *= Parameter_AchsKopplung2; //65
5cfe: 80 91 29 01 lds r24, 0x0129
5d02: 08 2f mov r16, r24
5d04: 10 e0 ldi r17, 0x00 ; 0
5d06: 20 e0 ldi r18, 0x00 ; 0
5d08: 30 e0 ldi r19, 0x00 ; 0
5d0a: 0d 87 std Y+13, r16 ; 0x0d
5d0c: 1e 87 std Y+14, r17 ; 0x0e
5d0e: 2f 87 std Y+15, r18 ; 0x0f
5d10: 38 8b std Y+16, r19 ; 0x10
Mess_Integral_Gier += MesswertGier;
ErsatzKompass += MesswertGier;
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV))
{
tmpl3 = (MesswertRoll * winkel_nick) / 2048L;
5d12: a0 91 1c 06 lds r26, 0x061C
5d16: b0 91 1d 06 lds r27, 0x061D
5d1a: 2d 81 ldd r18, Y+5 ; 0x05
5d1c: 3e 81 ldd r19, Y+6 ; 0x06
5d1e: 4f 81 ldd r20, Y+7 ; 0x07
5d20: 58 85 ldd r21, Y+8 ; 0x08
5d22: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
5d26: 8b 01 movw r16, r22
5d28: 9c 01 movw r18, r24
5d2a: 99 23 and r25, r25
5d2c: 24 f4 brge .+8 ; 0x5d36 <Mittelwert+0x326>
5d2e: 01 50 subi r16, 0x01 ; 1
5d30: 18 4f sbci r17, 0xF8 ; 248
5d32: 2f 4f sbci r18, 0xFF ; 255
5d34: 3f 4f sbci r19, 0xFF ; 255
5d36: a9 01 movw r20, r18
5d38: 98 01 movw r18, r16
5d3a: 01 2e mov r0, r17
5d3c: 1b e0 ldi r17, 0x0B ; 11
5d3e: 55 95 asr r21
5d40: 47 95 ror r20
5d42: 37 95 ror r19
5d44: 27 95 ror r18
5d46: 1a 95 dec r17
5d48: d1 f7 brne .-12 ; 0x5d3e <Mittelwert+0x32e>
5d4a: 10 2d mov r17, r0
tmpl3 *= Parameter_AchsKopplung2; //65
5d4c: 6d 85 ldd r22, Y+13 ; 0x0d
5d4e: 7e 85 ldd r23, Y+14 ; 0x0e
5d50: 8f 85 ldd r24, Y+15 ; 0x0f
5d52: 98 89 ldd r25, Y+16 ; 0x10
5d54: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
tmpl3 /= 4096L;
5d58: 8b 01 movw r16, r22
5d5a: 9c 01 movw r18, r24
5d5c: 99 23 and r25, r25
5d5e: 24 f4 brge .+8 ; 0x5d68 <Mittelwert+0x358>
5d60: 01 50 subi r16, 0x01 ; 1
5d62: 10 4f sbci r17, 0xF0 ; 240
5d64: 2f 4f sbci r18, 0xFF ; 255
5d66: 3f 4f sbci r19, 0xFF ; 255
5d68: d9 01 movw r26, r18
5d6a: c8 01 movw r24, r16
5d6c: 07 2e mov r0, r23
5d6e: 7c e0 ldi r23, 0x0C ; 12
5d70: b5 95 asr r27
5d72: a7 95 ror r26
5d74: 97 95 ror r25
5d76: 87 95 ror r24
5d78: 7a 95 dec r23
5d7a: d1 f7 brne .-12 ; 0x5d70 <Mittelwert+0x360>
5d7c: 70 2d mov r23, r0
5d7e: 89 83 std Y+1, r24 ; 0x01
5d80: 9a 83 std Y+2, r25 ; 0x02
5d82: ab 83 std Y+3, r26 ; 0x03
5d84: bc 83 std Y+4, r27 ; 0x04
5d86: 80 93 b8 03 sts 0x03B8, r24
5d8a: 90 93 b9 03 sts 0x03B9, r25
5d8e: a0 93 ba 03 sts 0x03BA, r26
5d92: b0 93 bb 03 sts 0x03BB, r27
tmpl4 = (MesswertNick * winkel_roll) / 2048L;
5d96: a0 91 27 06 lds r26, 0x0627
5d9a: b0 91 28 06 lds r27, 0x0628
5d9e: 29 85 ldd r18, Y+9 ; 0x09
5da0: 3a 85 ldd r19, Y+10 ; 0x0a
5da2: 4b 85 ldd r20, Y+11 ; 0x0b
5da4: 5c 85 ldd r21, Y+12 ; 0x0c
5da6: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
5daa: 8b 01 movw r16, r22
5dac: 9c 01 movw r18, r24
5dae: 99 23 and r25, r25
5db0: 24 f4 brge .+8 ; 0x5dba <Mittelwert+0x3aa>
5db2: 01 50 subi r16, 0x01 ; 1
5db4: 18 4f sbci r17, 0xF8 ; 248
5db6: 2f 4f sbci r18, 0xFF ; 255
5db8: 3f 4f sbci r19, 0xFF ; 255
5dba: c9 01 movw r24, r18
5dbc: b8 01 movw r22, r16
5dbe: 05 2e mov r0, r21
5dc0: 5b e0 ldi r21, 0x0B ; 11
5dc2: 95 95 asr r25
5dc4: 87 95 ror r24
5dc6: 77 95 ror r23
5dc8: 67 95 ror r22
5dca: 5a 95 dec r21
5dcc: d1 f7 brne .-12 ; 0x5dc2 <Mittelwert+0x3b2>
5dce: 50 2d mov r21, r0
tmpl4 *= Parameter_AchsKopplung2; //65
5dd0: 2d 85 ldd r18, Y+13 ; 0x0d
5dd2: 3e 85 ldd r19, Y+14 ; 0x0e
5dd4: 4f 85 ldd r20, Y+15 ; 0x0f
5dd6: 58 89 ldd r21, Y+16 ; 0x10
5dd8: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
tmpl4 /= 4096L;
5ddc: 8b 01 movw r16, r22
5dde: 9c 01 movw r18, r24
5de0: 99 23 and r25, r25
5de2: 24 f4 brge .+8 ; 0x5dec <Mittelwert+0x3dc>
5de4: 01 50 subi r16, 0x01 ; 1
5de6: 10 4f sbci r17, 0xF0 ; 240
5de8: 2f 4f sbci r18, 0xFF ; 255
5dea: 3f 4f sbci r19, 0xFF ; 255
5dec: d9 01 movw r26, r18
5dee: c8 01 movw r24, r16
5df0: 07 2e mov r0, r23
5df2: 7c e0 ldi r23, 0x0C ; 12
5df4: b5 95 asr r27
5df6: a7 95 ror r26
5df8: 97 95 ror r25
5dfa: 87 95 ror r24
5dfc: 7a 95 dec r23
5dfe: d1 f7 brne .-12 ; 0x5df4 <Mittelwert+0x3e4>
5e00: 70 2d mov r23, r0
KopplungsteilNickRoll = tmpl3;
5e02: e9 81 ldd r30, Y+1 ; 0x01
5e04: fa 81 ldd r31, Y+2 ; 0x02
5e06: f0 93 16 06 sts 0x0616, r31
5e0a: e0 93 15 06 sts 0x0615, r30
KopplungsteilRollNick = tmpl4;
5e0e: 90 93 18 06 sts 0x0618, r25
5e12: 80 93 17 06 sts 0x0617, r24
tmpl4 -= tmpl3;
5e16: 09 81 ldd r16, Y+1 ; 0x01
5e18: 1a 81 ldd r17, Y+2 ; 0x02
5e1a: 2b 81 ldd r18, Y+3 ; 0x03
5e1c: 3c 81 ldd r19, Y+4 ; 0x04
5e1e: 80 1b sub r24, r16
5e20: 91 0b sbc r25, r17
5e22: a2 0b sbc r26, r18
5e24: b3 0b sbc r27, r19
5e26: 80 93 b4 03 sts 0x03B4, r24
5e2a: 90 93 b5 03 sts 0x03B5, r25
5e2e: a0 93 b6 03 sts 0x03B6, r26
5e32: b0 93 b7 03 sts 0x03B7, r27
ErsatzKompass += tmpl4;
5e36: b3 01 movw r22, r6
5e38: a2 01 movw r20, r4
5e3a: 48 0f add r20, r24
5e3c: 59 1f adc r21, r25
5e3e: 6a 1f adc r22, r26
5e40: 7b 1f adc r23, r27
5e42: 40 93 6e 06 sts 0x066E, r20
5e46: 50 93 6f 06 sts 0x066F, r21
5e4a: 60 93 70 06 sts 0x0670, r22
5e4e: 70 93 71 06 sts 0x0671, r23
if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen
5e52: 20 91 28 01 lds r18, 0x0128
5e56: 21 11 cpse r18, r1
5e58: 1a c0 rjmp .+52 ; 0x5e8e <Mittelwert+0x47e>
5e5a: ac 01 movw r20, r24
5e5c: bd 01 movw r22, r26
5e5e: bb 23 and r27, r27
5e60: 24 f4 brge .+8 ; 0x5e6a <Mittelwert+0x45a>
5e62: 4f 5f subi r20, 0xFF ; 255
5e64: 5f 4f sbci r21, 0xFF ; 255
5e66: 6f 4f sbci r22, 0xFF ; 255
5e68: 7f 4f sbci r23, 0xFF ; 255
5e6a: 75 95 asr r23
5e6c: 67 95 ror r22
5e6e: 57 95 ror r21
5e70: 47 95 ror r20
5e72: 95 01 movw r18, r10
5e74: 84 01 movw r16, r8
5e76: 04 1b sub r16, r20
5e78: 15 0b sbc r17, r21
5e7a: 26 0b sbc r18, r22
5e7c: 37 0b sbc r19, r23
5e7e: 00 93 2e 04 sts 0x042E, r16
5e82: 10 93 2f 04 sts 0x042F, r17
5e86: 20 93 30 04 sts 0x0430, r18
5e8a: 30 93 31 04 sts 0x0431, r19
tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L;
5e8e: 46 01 movw r8, r12
5e90: 57 01 movw r10, r14
5e92: 88 0e add r8, r24
5e94: 99 1e adc r9, r25
5e96: aa 1e adc r10, r26
5e98: bb 1e adc r11, r27
tmpl *= Parameter_AchsKopplung1; // 90
5e9a: e0 90 2a 01 lds r14, 0x012A
5e9e: ce 2c mov r12, r14
5ea0: d1 2c mov r13, r1
5ea2: e1 2c mov r14, r1
5ea4: f1 2c mov r15, r1
KopplungsteilRollNick = tmpl4;
tmpl4 -= tmpl3;
ErsatzKompass += tmpl4;
if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen
tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L;
5ea6: a5 01 movw r20, r10
5ea8: 94 01 movw r18, r8
5eaa: 6d 81 ldd r22, Y+5 ; 0x05
5eac: 7e 81 ldd r23, Y+6 ; 0x06
5eae: 8f 81 ldd r24, Y+7 ; 0x07
5eb0: 98 85 ldd r25, Y+8 ; 0x08
5eb2: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
5eb6: 8b 01 movw r16, r22
5eb8: 9c 01 movw r18, r24
5eba: 99 23 and r25, r25
5ebc: 24 f4 brge .+8 ; 0x5ec6 <Mittelwert+0x4b6>
5ebe: 01 50 subi r16, 0x01 ; 1
5ec0: 18 4f sbci r17, 0xF8 ; 248
5ec2: 2f 4f sbci r18, 0xFF ; 255
5ec4: 3f 4f sbci r19, 0xFF ; 255
5ec6: a9 01 movw r20, r18
5ec8: 98 01 movw r18, r16
5eca: 01 2e mov r0, r17
5ecc: 1b e0 ldi r17, 0x0B ; 11
5ece: 55 95 asr r21
5ed0: 47 95 ror r20
5ed2: 37 95 ror r19
5ed4: 27 95 ror r18
5ed6: 1a 95 dec r17
5ed8: d1 f7 brne .-12 ; 0x5ece <Mittelwert+0x4be>
5eda: 10 2d mov r17, r0
tmpl *= Parameter_AchsKopplung1; // 90
5edc: c7 01 movw r24, r14
5ede: b6 01 movw r22, r12
5ee0: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
tmpl /= 4096L;
5ee4: 2b 01 movw r4, r22
5ee6: 3c 01 movw r6, r24
5ee8: 99 23 and r25, r25
5eea: 34 f4 brge .+12 ; 0x5ef8 <Mittelwert+0x4e8>
5eec: 1f ef ldi r17, 0xFF ; 255
5eee: 41 0e add r4, r17
5ef0: 1f e0 ldi r17, 0x0F ; 15
5ef2: 51 1e adc r5, r17
5ef4: 61 1c adc r6, r1
5ef6: 71 1c adc r7, r1
5ef8: 03 2e mov r0, r19
5efa: 3c e0 ldi r19, 0x0C ; 12
5efc: 75 94 asr r7
5efe: 67 94 ror r6
5f00: 57 94 ror r5
5f02: 47 94 ror r4
5f04: 3a 95 dec r19
5f06: d1 f7 brne .-12 ; 0x5efc <Mittelwert+0x4ec>
5f08: 30 2d mov r19, r0
5f0a: 40 92 b0 03 sts 0x03B0, r4
5f0e: 50 92 b1 03 sts 0x03B1, r5
5f12: 60 92 b2 03 sts 0x03B2, r6
5f16: 70 92 b3 03 sts 0x03B3, r7
tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L;
5f1a: a5 01 movw r20, r10
5f1c: 94 01 movw r18, r8
5f1e: 69 85 ldd r22, Y+9 ; 0x09
5f20: 7a 85 ldd r23, Y+10 ; 0x0a
5f22: 8b 85 ldd r24, Y+11 ; 0x0b
5f24: 9c 85 ldd r25, Y+12 ; 0x0c
5f26: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
5f2a: 8b 01 movw r16, r22
5f2c: 9c 01 movw r18, r24
5f2e: 99 23 and r25, r25
5f30: 24 f4 brge .+8 ; 0x5f3a <Mittelwert+0x52a>
5f32: 01 50 subi r16, 0x01 ; 1
5f34: 18 4f sbci r17, 0xF8 ; 248
5f36: 2f 4f sbci r18, 0xFF ; 255
5f38: 3f 4f sbci r19, 0xFF ; 255
5f3a: c9 01 movw r24, r18
5f3c: b8 01 movw r22, r16
5f3e: 05 2e mov r0, r21
5f40: 5b e0 ldi r21, 0x0B ; 11
5f42: 95 95 asr r25
5f44: 87 95 ror r24
5f46: 77 95 ror r23
5f48: 67 95 ror r22
5f4a: 5a 95 dec r21
5f4c: d1 f7 brne .-12 ; 0x5f42 <Mittelwert+0x532>
5f4e: 50 2d mov r21, r0
tmpl2 *= Parameter_AchsKopplung1;
5f50: a7 01 movw r20, r14
5f52: 96 01 movw r18, r12
5f54: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
tmpl2 /= 4096L;
5f58: 8b 01 movw r16, r22
5f5a: 9c 01 movw r18, r24
5f5c: 99 23 and r25, r25
5f5e: 24 f4 brge .+8 ; 0x5f68 <Mittelwert+0x558>
5f60: 01 50 subi r16, 0x01 ; 1
5f62: 10 4f sbci r17, 0xF0 ; 240
5f64: 2f 4f sbci r18, 0xFF ; 255
5f66: 3f 4f sbci r19, 0xFF ; 255
5f68: d9 01 movw r26, r18
5f6a: c8 01 movw r24, r16
5f6c: 07 2e mov r0, r23
5f6e: 7c e0 ldi r23, 0x0C ; 12
5f70: b5 95 asr r27
5f72: a7 95 ror r26
5f74: 97 95 ror r25
5f76: 87 95 ror r24
5f78: 7a 95 dec r23
5f7a: d1 f7 brne .-12 ; 0x5f70 <Mittelwert+0x560>
5f7c: 70 2d mov r23, r0
5f7e: 80 93 ac 03 sts 0x03AC, r24
5f82: 90 93 ad 03 sts 0x03AD, r25
5f86: a0 93 ae 03 sts 0x03AE, r26
5f8a: b0 93 af 03 sts 0x03AF, r27
if(abs(MesswertGier) > 64) if(labs(tmpl) > 128 || labs(tmpl2) > 128) TrichterFlug = 1;
5f8e: 91 01 movw r18, r2
5f90: 33 20 and r3, r3
5f92: 24 f4 brge .+8 ; 0x5f9c <Mittelwert+0x58c>
5f94: 22 27 eor r18, r18
5f96: 33 27 eor r19, r19
5f98: 22 19 sub r18, r2
5f9a: 33 09 sbc r19, r3
5f9c: 21 34 cpi r18, 0x41 ; 65
5f9e: 31 05 cpc r19, r1
5fa0: e4 f1 brlt .+120 ; 0x601a <Mittelwert+0x60a>
5fa2: b3 01 movw r22, r6
5fa4: a2 01 movw r20, r4
5fa6: 77 20 and r7, r7
5fa8: 3c f4 brge .+14 ; 0x5fb8 <Mittelwert+0x5a8>
5faa: 44 27 eor r20, r20
5fac: 55 27 eor r21, r21
5fae: ba 01 movw r22, r20
5fb0: 44 19 sub r20, r4
5fb2: 55 09 sbc r21, r5
5fb4: 66 09 sbc r22, r6
5fb6: 77 09 sbc r23, r7
5fb8: 41 38 cpi r20, 0x81 ; 129
5fba: 51 05 cpc r21, r1
5fbc: 61 05 cpc r22, r1
5fbe: 71 05 cpc r23, r1
5fc0: 84 f4 brge .+32 ; 0x5fe2 <Mittelwert+0x5d2>
5fc2: ac 01 movw r20, r24
5fc4: bd 01 movw r22, r26
5fc6: bb 23 and r27, r27
5fc8: 3c f4 brge .+14 ; 0x5fd8 <Mittelwert+0x5c8>
5fca: 44 27 eor r20, r20
5fcc: 55 27 eor r21, r21
5fce: ba 01 movw r22, r20
5fd0: 48 1b sub r20, r24
5fd2: 59 0b sbc r21, r25
5fd4: 6a 0b sbc r22, r26
5fd6: 7b 0b sbc r23, r27
5fd8: 41 38 cpi r20, 0x81 ; 129
5fda: 51 05 cpc r21, r1
5fdc: 61 05 cpc r22, r1
5fde: 71 05 cpc r23, r1
5fe0: e4 f0 brlt .+56 ; 0x601a <Mittelwert+0x60a>
5fe2: 81 e0 ldi r24, 0x01 ; 1
5fe4: 80 93 1a 04 sts 0x041A, r24
5fe8: 18 c0 rjmp .+48 ; 0x601a <Mittelwert+0x60a>
//MesswertGier += (Parameter_CouplingYawCorrection * tmpl4) / 256;
}
else tmpl = tmpl2 = KopplungsteilNickRoll = KopplungsteilRollNick = 0;
5fea: 10 92 18 06 sts 0x0618, r1
5fee: 10 92 17 06 sts 0x0617, r1
5ff2: 10 92 16 06 sts 0x0616, r1
5ff6: 10 92 15 06 sts 0x0615, r1
5ffa: 10 92 ac 03 sts 0x03AC, r1
5ffe: 10 92 ad 03 sts 0x03AD, r1
6002: 10 92 ae 03 sts 0x03AE, r1
6006: 10 92 af 03 sts 0x03AF, r1
600a: 10 92 b0 03 sts 0x03B0, r1
600e: 10 92 b1 03 sts 0x03B1, r1
6012: 10 92 b2 03 sts 0x03B2, r1
6016: 10 92 b3 03 sts 0x03B3, r1
TrimRoll = tmpl - tmpl2 / 100L;
601a: c0 90 b0 03 lds r12, 0x03B0
601e: d0 90 b1 03 lds r13, 0x03B1
6022: e0 90 b2 03 lds r14, 0x03B2
6026: f0 90 b3 03 lds r15, 0x03B3
602a: 80 90 ac 03 lds r8, 0x03AC
602e: 90 90 ad 03 lds r9, 0x03AD
6032: a0 90 ae 03 lds r10, 0x03AE
6036: b0 90 af 03 lds r11, 0x03AF
603a: 0f 2e mov r0, r31
603c: f4 e6 ldi r31, 0x64 ; 100
603e: 4f 2e mov r4, r31
6040: 51 2c mov r5, r1
6042: 61 2c mov r6, r1
6044: 71 2c mov r7, r1
6046: f0 2d mov r31, r0
6048: c5 01 movw r24, r10
604a: b4 01 movw r22, r8
604c: a3 01 movw r20, r6
604e: 92 01 movw r18, r4
6050: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
6054: 16 01 movw r2, r12
6056: 22 1a sub r2, r18
6058: 33 0a sbc r3, r19
605a: 30 92 26 06 sts 0x0626, r3
605e: 20 92 25 06 sts 0x0625, r2
TrimNick = -tmpl2 + tmpl / 100L;
6062: c7 01 movw r24, r14
6064: b6 01 movw r22, r12
6066: a3 01 movw r20, r6
6068: 92 01 movw r18, r4
606a: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
606e: f9 01 movw r30, r18
6070: e8 19 sub r30, r8
6072: f9 09 sbc r31, r9
6074: f0 93 1f 06 sts 0x061F, r31
6078: e0 93 1e 06 sts 0x061E, r30
// Kompasswert begrenzen ++++++++++++++++++++++++++++++++++++++++++++++++
if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR; // 360° Umschlag
607c: 40 90 21 01 lds r4, 0x0121
6080: 50 90 22 01 lds r5, 0x0122
6084: 60 90 23 01 lds r6, 0x0123
6088: 70 90 24 01 lds r7, 0x0124
608c: a8 e6 ldi r26, 0x68 ; 104
608e: b1 e0 ldi r27, 0x01 ; 1
6090: a3 01 movw r20, r6
6092: 92 01 movw r18, r4
6094: 0e 94 c8 b1 call 0x16390 ; 0x16390 <__muluhisi3>
6098: 6b 01 movw r12, r22
609a: 7c 01 movw r14, r24
609c: 80 90 6e 06 lds r8, 0x066E
60a0: 90 90 6f 06 lds r9, 0x066F
60a4: a0 90 70 06 lds r10, 0x0670
60a8: b0 90 71 06 lds r11, 0x0671
60ac: 86 16 cp r8, r22
60ae: 97 06 cpc r9, r23
60b0: a8 06 cpc r10, r24
60b2: b9 06 cpc r11, r25
60b4: 84 f0 brlt .+32 ; 0x60d6 <Mittelwert+0x6c6>
60b6: a8 e9 ldi r26, 0x98 ; 152
60b8: be ef ldi r27, 0xFE ; 254
60ba: 0e 94 d4 b1 call 0x163a8 ; 0x163a8 <__mulohisi3>
60be: 86 0e add r8, r22
60c0: 97 1e adc r9, r23
60c2: a8 1e adc r10, r24
60c4: b9 1e adc r11, r25
60c6: 80 92 6e 06 sts 0x066E, r8
60ca: 90 92 6f 06 sts 0x066F, r9
60ce: a0 92 70 06 sts 0x0670, r10
60d2: b0 92 71 06 sts 0x0671, r11
if(ErsatzKompass < 0) ErsatzKompass += 360L * GIER_GRAD_FAKTOR;
60d6: 80 91 6e 06 lds r24, 0x066E
60da: 90 91 6f 06 lds r25, 0x066F
60de: a0 91 70 06 lds r26, 0x0670
60e2: b0 91 71 06 lds r27, 0x0671
60e6: bb 23 and r27, r27
60e8: 64 f4 brge .+24 ; 0x6102 <Mittelwert+0x6f2>
60ea: 8c 0d add r24, r12
60ec: 9d 1d adc r25, r13
60ee: ae 1d adc r26, r14
60f0: bf 1d adc r27, r15
60f2: 80 93 6e 06 sts 0x066E, r24
60f6: 90 93 6f 06 sts 0x066F, r25
60fa: a0 93 70 06 sts 0x0670, r26
60fe: b0 93 71 06 sts 0x0671, r27
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
Mess_IntegralRoll += MesswertRoll + TrimRoll - LageKorrekturRoll;
6102: 80 91 1c 06 lds r24, 0x061C
6106: 90 91 1d 06 lds r25, 0x061D
610a: 82 0d add r24, r2
610c: 93 1d adc r25, r3
610e: 20 91 ec 03 lds r18, 0x03EC
6112: 30 91 ed 03 lds r19, 0x03ED
6116: 82 1b sub r24, r18
6118: 93 0b sbc r25, r19
611a: aa 27 eor r26, r26
611c: 97 fd sbrc r25, 7
611e: a0 95 com r26
6120: ba 2f mov r27, r26
6122: 40 91 32 04 lds r20, 0x0432
6126: 50 91 33 04 lds r21, 0x0433
612a: 60 91 34 04 lds r22, 0x0434
612e: 70 91 35 04 lds r23, 0x0435
6132: 48 0f add r20, r24
6134: 59 1f adc r21, r25
6136: 6a 1f adc r22, r26
6138: 7b 1f adc r23, r27
613a: 40 93 32 04 sts 0x0432, r20
613e: 50 93 33 04 sts 0x0433, r21
6142: 60 93 34 04 sts 0x0434, r22
6146: 70 93 35 04 sts 0x0435, r23
if(Mess_IntegralRoll > Umschlag180Roll)
614a: 80 91 42 01 lds r24, 0x0142
614e: 90 91 43 01 lds r25, 0x0143
6152: a0 91 44 01 lds r26, 0x0144
6156: b0 91 45 01 lds r27, 0x0145
615a: 84 17 cp r24, r20
615c: 95 07 cpc r25, r21
615e: a6 07 cpc r26, r22
6160: b7 07 cpc r27, r23
6162: 84 f4 brge .+32 ; 0x6184 <Mittelwert+0x774>
{
Mess_IntegralRoll = -(Umschlag180Roll - 25000L);
6164: 48 ea ldi r20, 0xA8 ; 168
6166: 51 e6 ldi r21, 0x61 ; 97
6168: 60 e0 ldi r22, 0x00 ; 0
616a: 70 e0 ldi r23, 0x00 ; 0
616c: 48 1b sub r20, r24
616e: 59 0b sbc r21, r25
6170: 6a 0b sbc r22, r26
6172: 7b 0b sbc r23, r27
6174: 40 93 32 04 sts 0x0432, r20
6178: 50 93 33 04 sts 0x0433, r21
617c: 60 93 34 04 sts 0x0434, r22
6180: 70 93 35 04 sts 0x0435, r23
}
if(Mess_IntegralRoll <-Umschlag180Roll)
6184: 88 24 eor r8, r8
6186: 99 24 eor r9, r9
6188: 54 01 movw r10, r8
618a: 88 1a sub r8, r24
618c: 99 0a sbc r9, r25
618e: aa 0a sbc r10, r26
6190: bb 0a sbc r11, r27
6192: 40 91 32 04 lds r20, 0x0432
6196: 50 91 33 04 lds r21, 0x0433
619a: 60 91 34 04 lds r22, 0x0434
619e: 70 91 35 04 lds r23, 0x0435
61a2: 48 15 cp r20, r8
61a4: 59 05 cpc r21, r9
61a6: 6a 05 cpc r22, r10
61a8: 7b 05 cpc r23, r11
61aa: 64 f4 brge .+24 ; 0x61c4 <Mittelwert+0x7b4>
{
Mess_IntegralRoll = (Umschlag180Roll - 25000L);
61ac: 88 5a subi r24, 0xA8 ; 168
61ae: 91 46 sbci r25, 0x61 ; 97
61b0: a1 09 sbc r26, r1
61b2: b1 09 sbc r27, r1
61b4: 80 93 32 04 sts 0x0432, r24
61b8: 90 93 33 04 sts 0x0433, r25
61bc: a0 93 34 04 sts 0x0434, r26
61c0: b0 93 35 04 sts 0x0435, r27
}
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
Mess_IntegralNick += MesswertNick + TrimNick - LageKorrekturNick;
61c4: 40 91 27 06 lds r20, 0x0627
61c8: 50 91 28 06 lds r21, 0x0628
61cc: 4e 0f add r20, r30
61ce: 5f 1f adc r21, r31
61d0: 20 91 ea 03 lds r18, 0x03EA
61d4: 30 91 eb 03 lds r19, 0x03EB
61d8: 42 1b sub r20, r18
61da: 53 0b sbc r21, r19
61dc: 66 27 eor r22, r22
61de: 57 fd sbrc r21, 7
61e0: 60 95 com r22
61e2: 76 2f mov r23, r22
61e4: 80 91 36 04 lds r24, 0x0436
61e8: 90 91 37 04 lds r25, 0x0437
61ec: a0 91 38 04 lds r26, 0x0438
61f0: b0 91 39 04 lds r27, 0x0439
61f4: 84 0f add r24, r20
61f6: 95 1f adc r25, r21
61f8: a6 1f adc r26, r22
61fa: b7 1f adc r27, r23
61fc: 80 93 36 04 sts 0x0436, r24
6200: 90 93 37 04 sts 0x0437, r25
6204: a0 93 38 04 sts 0x0438, r26
6208: b0 93 39 04 sts 0x0439, r27
if(Mess_IntegralNick > Umschlag180Nick)
620c: 40 91 46 01 lds r20, 0x0146
6210: 50 91 47 01 lds r21, 0x0147
6214: 60 91 48 01 lds r22, 0x0148
6218: 70 91 49 01 lds r23, 0x0149
621c: 48 17 cp r20, r24
621e: 59 07 cpc r21, r25
6220: 6a 07 cpc r22, r26
6222: 7b 07 cpc r23, r27
6224: 84 f4 brge .+32 ; 0x6246 <Mittelwert+0x836>
{
Mess_IntegralNick = -(Umschlag180Nick - 25000L);
6226: 88 ea ldi r24, 0xA8 ; 168
6228: 91 e6 ldi r25, 0x61 ; 97
622a: a0 e0 ldi r26, 0x00 ; 0
622c: b0 e0 ldi r27, 0x00 ; 0
622e: 84 1b sub r24, r20
6230: 95 0b sbc r25, r21
6232: a6 0b sbc r26, r22
6234: b7 0b sbc r27, r23
6236: 80 93 36 04 sts 0x0436, r24
623a: 90 93 37 04 sts 0x0437, r25
623e: a0 93 38 04 sts 0x0438, r26
6242: b0 93 39 04 sts 0x0439, r27
}
if(Mess_IntegralNick <-Umschlag180Nick)
6246: 88 24 eor r8, r8
6248: 99 24 eor r9, r9
624a: 54 01 movw r10, r8
624c: 84 1a sub r8, r20
624e: 95 0a sbc r9, r21
6250: a6 0a sbc r10, r22
6252: b7 0a sbc r11, r23
6254: 80 91 36 04 lds r24, 0x0436
6258: 90 91 37 04 lds r25, 0x0437
625c: a0 91 38 04 lds r26, 0x0438
6260: b0 91 39 04 lds r27, 0x0439
6264: 88 15 cp r24, r8
6266: 99 05 cpc r25, r9
6268: aa 05 cpc r26, r10
626a: bb 05 cpc r27, r11
626c: 74 f4 brge .+28 ; 0x628a <Mittelwert+0x87a>
{
Mess_IntegralNick = (Umschlag180Nick - 25000L);
626e: db 01 movw r26, r22
6270: ca 01 movw r24, r20
6272: 88 5a subi r24, 0xA8 ; 168
6274: 91 46 sbci r25, 0x61 ; 97
6276: a1 09 sbc r26, r1
6278: b1 09 sbc r27, r1
627a: 80 93 36 04 sts 0x0436, r24
627e: 90 93 37 04 sts 0x0437, r25
6282: a0 93 38 04 sts 0x0438, r26
6286: b0 93 39 04 sts 0x0439, r27
}
Integral_Gier = Mess_Integral_Gier;
628a: 80 91 2e 04 lds r24, 0x042E
628e: 90 91 2f 04 lds r25, 0x042F
6292: a0 91 30 04 lds r26, 0x0430
6296: b0 91 31 04 lds r27, 0x0431
629a: 80 93 3a 04 sts 0x043A, r24
629e: 90 93 3b 04 sts 0x043B, r25
62a2: a0 93 3c 04 sts 0x043C, r26
62a6: b0 93 3d 04 sts 0x043D, r27
IntegralNick = Mess_IntegralNick;
62aa: 80 91 36 04 lds r24, 0x0436
62ae: 90 91 37 04 lds r25, 0x0437
62b2: a0 91 38 04 lds r26, 0x0438
62b6: b0 91 39 04 lds r27, 0x0439
62ba: 80 93 42 04 sts 0x0442, r24
62be: 90 93 43 04 sts 0x0443, r25
62c2: a0 93 44 04 sts 0x0444, r26
62c6: b0 93 45 04 sts 0x0445, r27
IntegralRoll = Mess_IntegralRoll;
62ca: 80 91 32 04 lds r24, 0x0432
62ce: 90 91 33 04 lds r25, 0x0433
62d2: a0 91 34 04 lds r26, 0x0434
62d6: b0 91 35 04 lds r27, 0x0435
62da: 80 93 3e 04 sts 0x043E, r24
62de: 90 93 3f 04 sts 0x043F, r25
62e2: a0 93 40 04 sts 0x0440, r26
62e6: b0 93 41 04 sts 0x0441, r27
#define D_LIMIT 128
MesswertNick = HiResNick / 8;
62ea: 80 91 18 01 lds r24, 0x0118
62ee: 90 91 19 01 lds r25, 0x0119
62f2: 99 23 and r25, r25
62f4: 0c f4 brge .+2 ; 0x62f8 <Mittelwert+0x8e8>
62f6: 07 96 adiw r24, 0x07 ; 7
62f8: 95 95 asr r25
62fa: 87 95 ror r24
62fc: 95 95 asr r25
62fe: 87 95 ror r24
6300: 95 95 asr r25
6302: 87 95 ror r24
6304: 90 93 28 06 sts 0x0628, r25
6308: 80 93 27 06 sts 0x0627, r24
MesswertRoll = HiResRoll / 8;
630c: 80 91 16 01 lds r24, 0x0116
6310: 90 91 17 01 lds r25, 0x0117
6314: 99 23 and r25, r25
6316: 0c f4 brge .+2 ; 0x631a <Mittelwert+0x90a>
6318: 07 96 adiw r24, 0x07 ; 7
631a: 95 95 asr r25
631c: 87 95 ror r24
631e: 95 95 asr r25
6320: 87 95 ror r24
6322: 95 95 asr r25
6324: 87 95 ror r24
6326: 90 93 1d 06 sts 0x061D, r25
632a: 80 93 1c 06 sts 0x061C, r24
if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000;
632e: 80 91 65 03 lds r24, 0x0365
6332: 90 91 66 03 lds r25, 0x0366
6336: 0f 97 sbiw r24, 0x0f ; 15
6338: 34 f4 brge .+12 ; 0x6346 <Mittelwert+0x936>
633a: 88 e1 ldi r24, 0x18 ; 24
633c: 9c ef ldi r25, 0xFC ; 252
633e: 90 93 28 06 sts 0x0628, r25
6342: 80 93 27 06 sts 0x0627, r24
6346: 80 91 65 03 lds r24, 0x0365
634a: 90 91 66 03 lds r25, 0x0366
634e: 07 97 sbiw r24, 0x07 ; 7
6350: 34 f4 brge .+12 ; 0x635e <Mittelwert+0x94e>
6352: 80 e3 ldi r24, 0x30 ; 48
6354: 98 ef ldi r25, 0xF8 ; 248
6356: 90 93 28 06 sts 0x0628, r25
635a: 80 93 27 06 sts 0x0627, r24
// if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; }
// else
{ if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; }
635e: 80 91 65 03 lds r24, 0x0365
6362: 90 91 66 03 lds r25, 0x0366
6366: 81 3d cpi r24, 0xD1 ; 209
6368: 97 40 sbci r25, 0x07 ; 7
636a: 34 f0 brlt .+12 ; 0x6378 <Mittelwert+0x968>
636c: 88 ee ldi r24, 0xE8 ; 232
636e: 93 e0 ldi r25, 0x03 ; 3
6370: 90 93 28 06 sts 0x0628, r25
6374: 80 93 27 06 sts 0x0627, r24
6378: 80 91 65 03 lds r24, 0x0365
637c: 90 91 66 03 lds r25, 0x0366
6380: 80 3e cpi r24, 0xE0 ; 224
6382: 97 40 sbci r25, 0x07 ; 7
6384: 34 f0 brlt .+12 ; 0x6392 <Mittelwert+0x982>
6386: 80 ed ldi r24, 0xD0 ; 208
6388: 97 e0 ldi r25, 0x07 ; 7
638a: 90 93 28 06 sts 0x0628, r25
638e: 80 93 27 06 sts 0x0627, r24
if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000;
6392: 80 91 63 03 lds r24, 0x0363
6396: 90 91 64 03 lds r25, 0x0364
639a: 0f 97 sbiw r24, 0x0f ; 15
639c: 34 f4 brge .+12 ; 0x63aa <Mittelwert+0x99a>
639e: 88 e1 ldi r24, 0x18 ; 24
63a0: 9c ef ldi r25, 0xFC ; 252
63a2: 90 93 1d 06 sts 0x061D, r25
63a6: 80 93 1c 06 sts 0x061C, r24
63aa: 80 91 63 03 lds r24, 0x0363
63ae: 90 91 64 03 lds r25, 0x0364
63b2: 07 97 sbiw r24, 0x07 ; 7
63b4: 34 f4 brge .+12 ; 0x63c2 <Mittelwert+0x9b2>
63b6: 80 e3 ldi r24, 0x30 ; 48
63b8: 98 ef ldi r25, 0xF8 ; 248
63ba: 90 93 1d 06 sts 0x061D, r25
63be: 80 93 1c 06 sts 0x061C, r24
// if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; }
// else
{ if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; }
63c2: 80 91 63 03 lds r24, 0x0363
63c6: 90 91 64 03 lds r25, 0x0364
63ca: 81 3d cpi r24, 0xD1 ; 209
63cc: 97 40 sbci r25, 0x07 ; 7
63ce: 34 f0 brlt .+12 ; 0x63dc <Mittelwert+0x9cc>
63d0: 88 ee ldi r24, 0xE8 ; 232
63d2: 93 e0 ldi r25, 0x03 ; 3
63d4: 90 93 1d 06 sts 0x061D, r25
63d8: 80 93 1c 06 sts 0x061C, r24
63dc: 80 91 63 03 lds r24, 0x0363
63e0: 90 91 64 03 lds r25, 0x0364
63e4: 80 3e cpi r24, 0xE0 ; 224
63e6: 97 40 sbci r25, 0x07 ; 7
63e8: 34 f0 brlt .+12 ; 0x63f6 <Mittelwert+0x9e6>
63ea: 80 ed ldi r24, 0xD0 ; 208
63ec: 97 e0 ldi r25, 0x07 ; 7
63ee: 90 93 1d 06 sts 0x061D, r25
63f2: 80 93 1c 06 sts 0x061C, r24
if(Parameter_Gyro_D)
63f6: 40 91 35 01 lds r20, 0x0135
63fa: 44 23 and r20, r20
63fc: 09 f4 brne .+2 ; 0x6400 <Mittelwert+0x9f0>
63fe: ba c0 rjmp .+372 ; 0x6574 <Mittelwert+0xb64>
{
d2Nick = HiResNick - oldNick;
6400: 80 91 18 01 lds r24, 0x0118
6404: 90 91 19 01 lds r25, 0x0119
6408: 20 91 aa 03 lds r18, 0x03AA
640c: 30 91 ab 03 lds r19, 0x03AB
6410: 82 1b sub r24, r18
6412: 93 0b sbc r25, r19
6414: 90 93 a9 03 sts 0x03A9, r25
6418: 80 93 a8 03 sts 0x03A8, r24
oldNick = (oldNick + HiResNick)/2;
641c: 60 91 18 01 lds r22, 0x0118
6420: 70 91 19 01 lds r23, 0x0119
6424: 26 0f add r18, r22
6426: 37 1f adc r19, r23
6428: 33 23 and r19, r19
642a: 14 f4 brge .+4 ; 0x6430 <Mittelwert+0xa20>
642c: 2f 5f subi r18, 0xFF ; 255
642e: 3f 4f sbci r19, 0xFF ; 255
6430: 35 95 asr r19
6432: 27 95 ror r18
6434: 30 93 ab 03 sts 0x03AB, r19
6438: 20 93 aa 03 sts 0x03AA, r18
if(d2Nick > D_LIMIT) d2Nick = D_LIMIT;
643c: 81 38 cpi r24, 0x81 ; 129
643e: 91 05 cpc r25, r1
6440: 3c f0 brlt .+14 ; 0x6450 <Mittelwert+0xa40>
6442: 80 e8 ldi r24, 0x80 ; 128
6444: 90 e0 ldi r25, 0x00 ; 0
6446: 90 93 a9 03 sts 0x03A9, r25
644a: 80 93 a8 03 sts 0x03A8, r24
644e: 09 c0 rjmp .+18 ; 0x6462 <Mittelwert+0xa52>
else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT;
6450: 80 38 cpi r24, 0x80 ; 128
6452: 9f 4f sbci r25, 0xFF ; 255
6454: 34 f4 brge .+12 ; 0x6462 <Mittelwert+0xa52>
6456: 80 e8 ldi r24, 0x80 ; 128
6458: 9f ef ldi r25, 0xFF ; 255
645a: 90 93 a9 03 sts 0x03A9, r25
645e: 80 93 a8 03 sts 0x03A8, r24
d2Roll = HiResRoll - oldRoll;
6462: 80 91 16 01 lds r24, 0x0116
6466: 90 91 17 01 lds r25, 0x0117
646a: 20 91 a6 03 lds r18, 0x03A6
646e: 30 91 a7 03 lds r19, 0x03A7
6472: 82 1b sub r24, r18
6474: 93 0b sbc r25, r19
6476: 90 93 a5 03 sts 0x03A5, r25
647a: 80 93 a4 03 sts 0x03A4, r24
oldRoll = (oldRoll + HiResRoll)/2;
647e: 60 91 16 01 lds r22, 0x0116
6482: 70 91 17 01 lds r23, 0x0117
6486: 26 0f add r18, r22
6488: 37 1f adc r19, r23
648a: 33 23 and r19, r19
648c: 14 f4 brge .+4 ; 0x6492 <Mittelwert+0xa82>
648e: 2f 5f subi r18, 0xFF ; 255
6490: 3f 4f sbci r19, 0xFF ; 255
6492: 35 95 asr r19
6494: 27 95 ror r18
6496: 30 93 a7 03 sts 0x03A7, r19
649a: 20 93 a6 03 sts 0x03A6, r18
if(d2Roll > D_LIMIT) d2Roll = D_LIMIT;
649e: 81 38 cpi r24, 0x81 ; 129
64a0: 91 05 cpc r25, r1
64a2: 3c f0 brlt .+14 ; 0x64b2 <Mittelwert+0xaa2>
64a4: 80 e8 ldi r24, 0x80 ; 128
64a6: 90 e0 ldi r25, 0x00 ; 0
64a8: 90 93 a5 03 sts 0x03A5, r25
64ac: 80 93 a4 03 sts 0x03A4, r24
64b0: 09 c0 rjmp .+18 ; 0x64c4 <Mittelwert+0xab4>
else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT;
64b2: 80 38 cpi r24, 0x80 ; 128
64b4: 9f 4f sbci r25, 0xFF ; 255
64b6: 34 f4 brge .+12 ; 0x64c4 <Mittelwert+0xab4>
64b8: 80 e8 ldi r24, 0x80 ; 128
64ba: 9f ef ldi r25, 0xFF ; 255
64bc: 90 93 a5 03 sts 0x03A5, r25
64c0: 80 93 a4 03 sts 0x03A4, r24
MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16;
64c4: 50 e0 ldi r21, 0x00 ; 0
64c6: 80 91 a8 03 lds r24, 0x03A8
64ca: 90 91 a9 03 lds r25, 0x03A9
64ce: 48 9f mul r20, r24
64d0: 90 01 movw r18, r0
64d2: 49 9f mul r20, r25
64d4: 30 0d add r19, r0
64d6: 58 9f mul r21, r24
64d8: 30 0d add r19, r0
64da: 11 24 eor r1, r1
64dc: c9 01 movw r24, r18
64de: 33 23 and r19, r19
64e0: 0c f4 brge .+2 ; 0x64e4 <Mittelwert+0xad4>
64e2: 0f 96 adiw r24, 0x0f ; 15
64e4: 95 95 asr r25
64e6: 87 95 ror r24
64e8: 95 95 asr r25
64ea: 87 95 ror r24
64ec: 95 95 asr r25
64ee: 87 95 ror r24
64f0: 95 95 asr r25
64f2: 87 95 ror r24
64f4: 60 91 27 06 lds r22, 0x0627
64f8: 70 91 28 06 lds r23, 0x0628
64fc: 86 0f add r24, r22
64fe: 97 1f adc r25, r23
6500: 90 93 28 06 sts 0x0628, r25
6504: 80 93 27 06 sts 0x0627, r24
MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16;
6508: 60 91 a4 03 lds r22, 0x03A4
650c: 70 91 a5 03 lds r23, 0x03A5
6510: 46 9f mul r20, r22
6512: c0 01 movw r24, r0
6514: 47 9f mul r20, r23
6516: 90 0d add r25, r0
6518: 56 9f mul r21, r22
651a: 90 0d add r25, r0
651c: 11 24 eor r1, r1
651e: ac 01 movw r20, r24
6520: 99 23 and r25, r25
6522: 14 f4 brge .+4 ; 0x6528 <Mittelwert+0xb18>
6524: 41 5f subi r20, 0xF1 ; 241
6526: 5f 4f sbci r21, 0xFF ; 255
6528: 55 95 asr r21
652a: 47 95 ror r20
652c: 55 95 asr r21
652e: 47 95 ror r20
6530: 55 95 asr r21
6532: 47 95 ror r20
6534: 55 95 asr r21
6536: 47 95 ror r20
6538: 60 91 1c 06 lds r22, 0x061C
653c: 70 91 1d 06 lds r23, 0x061D
6540: 46 0f add r20, r22
6542: 57 1f adc r21, r23
6544: 50 93 1d 06 sts 0x061D, r21
6548: 40 93 1c 06 sts 0x061C, r20
HiResNick += (d2Nick * (signed int) Parameter_Gyro_D);
654c: 40 91 18 01 lds r20, 0x0118
6550: 50 91 19 01 lds r21, 0x0119
6554: 24 0f add r18, r20
6556: 35 1f adc r19, r21
6558: 30 93 19 01 sts 0x0119, r19
655c: 20 93 18 01 sts 0x0118, r18
HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D);
6560: 20 91 16 01 lds r18, 0x0116
6564: 30 91 17 01 lds r19, 0x0117
6568: 82 0f add r24, r18
656a: 93 1f adc r25, r19
656c: 90 93 17 01 sts 0x0117, r25
6570: 80 93 16 01 sts 0x0116, r24
}
if(RohMesswertRoll > 0) TrimRoll += ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L;
6574: 40 91 2a 06 lds r20, 0x062A
6578: 50 91 2b 06 lds r21, 0x062B
657c: 14 16 cp r1, r20
657e: 15 06 cpc r1, r21
6580: 3c f5 brge .+78 ; 0x65d0 <Mittelwert+0xbc0>
6582: a0 91 15 06 lds r26, 0x0615
6586: b0 91 16 06 lds r27, 0x0616
658a: bb 23 and r27, r27
658c: 1c f4 brge .+6 ; 0x6594 <Mittelwert+0xb84>
658e: b1 95 neg r27
6590: a1 95 neg r26
6592: b1 09 sbc r27, r1
6594: 20 91 28 01 lds r18, 0x0128
6598: 30 e0 ldi r19, 0x00 ; 0
659a: 0e 94 c2 b1 call 0x16384 ; 0x16384 <__usmulhisi3>
659e: 8b 01 movw r16, r22
65a0: 9c 01 movw r18, r24
65a2: 99 23 and r25, r25
65a4: 24 f4 brge .+8 ; 0x65ae <Mittelwert+0xb9e>
65a6: 01 5c subi r16, 0xC1 ; 193
65a8: 1f 4f sbci r17, 0xFF ; 255
65aa: 2f 4f sbci r18, 0xFF ; 255
65ac: 3f 4f sbci r19, 0xFF ; 255
65ae: d9 01 movw r26, r18
65b0: c8 01 movw r24, r16
65b2: 68 94 set
65b4: 15 f8 bld r1, 5
65b6: b5 95 asr r27
65b8: a7 95 ror r26
65ba: 97 95 ror r25
65bc: 87 95 ror r24
65be: 16 94 lsr r1
65c0: d1 f7 brne .-12 ; 0x65b6 <Mittelwert+0xba6>
65c2: 82 0d add r24, r2
65c4: 93 1d adc r25, r3
65c6: 90 93 26 06 sts 0x0626, r25
65ca: 80 93 25 06 sts 0x0625, r24
65ce: 27 c0 rjmp .+78 ; 0x661e <Mittelwert+0xc0e>
else TrimRoll -= ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L;
65d0: a0 91 15 06 lds r26, 0x0615
65d4: b0 91 16 06 lds r27, 0x0616
65d8: bb 23 and r27, r27
65da: 1c f4 brge .+6 ; 0x65e2 <Mittelwert+0xbd2>
65dc: b1 95 neg r27
65de: a1 95 neg r26
65e0: b1 09 sbc r27, r1
65e2: 20 91 28 01 lds r18, 0x0128
65e6: 30 e0 ldi r19, 0x00 ; 0
65e8: 0e 94 c2 b1 call 0x16384 ; 0x16384 <__usmulhisi3>
65ec: 8b 01 movw r16, r22
65ee: 9c 01 movw r18, r24
65f0: 99 23 and r25, r25
65f2: 24 f4 brge .+8 ; 0x65fc <Mittelwert+0xbec>
65f4: 01 5c subi r16, 0xC1 ; 193
65f6: 1f 4f sbci r17, 0xFF ; 255
65f8: 2f 4f sbci r18, 0xFF ; 255
65fa: 3f 4f sbci r19, 0xFF ; 255
65fc: d9 01 movw r26, r18
65fe: c8 01 movw r24, r16
6600: 68 94 set
6602: 15 f8 bld r1, 5
6604: b5 95 asr r27
6606: a7 95 ror r26
6608: 97 95 ror r25
660a: 87 95 ror r24
660c: 16 94 lsr r1
660e: d1 f7 brne .-12 ; 0x6604 <Mittelwert+0xbf4>
6610: 71 01 movw r14, r2
6612: e8 1a sub r14, r24
6614: f9 0a sbc r15, r25
6616: f0 92 26 06 sts 0x0626, r15
661a: e0 92 25 06 sts 0x0625, r14
if(RohMesswertNick > 0) TrimNick += ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L;
661e: e0 90 2f 06 lds r14, 0x062F
6622: f0 90 30 06 lds r15, 0x0630
6626: 1e 14 cp r1, r14
6628: 1f 04 cpc r1, r15
662a: 3c f5 brge .+78 ; 0x667a <Mittelwert+0xc6a>
662c: a0 91 17 06 lds r26, 0x0617
6630: b0 91 18 06 lds r27, 0x0618
6634: bb 23 and r27, r27
6636: 1c f4 brge .+6 ; 0x663e <Mittelwert+0xc2e>
6638: b1 95 neg r27
663a: a1 95 neg r26
663c: b1 09 sbc r27, r1
663e: 20 91 28 01 lds r18, 0x0128
6642: 30 e0 ldi r19, 0x00 ; 0
6644: 0e 94 c2 b1 call 0x16384 ; 0x16384 <__usmulhisi3>
6648: 8b 01 movw r16, r22
664a: 9c 01 movw r18, r24
664c: 99 23 and r25, r25
664e: 24 f4 brge .+8 ; 0x6658 <Mittelwert+0xc48>
6650: 01 5c subi r16, 0xC1 ; 193
6652: 1f 4f sbci r17, 0xFF ; 255
6654: 2f 4f sbci r18, 0xFF ; 255
6656: 3f 4f sbci r19, 0xFF ; 255
6658: d9 01 movw r26, r18
665a: c8 01 movw r24, r16
665c: 68 94 set
665e: 15 f8 bld r1, 5
6660: b5 95 asr r27
6662: a7 95 ror r26
6664: 97 95 ror r25
6666: 87 95 ror r24
6668: 16 94 lsr r1
666a: d1 f7 brne .-12 ; 0x6660 <Mittelwert+0xc50>
666c: 8e 0f add r24, r30
666e: 9f 1f adc r25, r31
6670: 90 93 1f 06 sts 0x061F, r25
6674: 80 93 1e 06 sts 0x061E, r24
6678: 26 c0 rjmp .+76 ; 0x66c6 <Mittelwert+0xcb6>
else TrimNick -= ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L;
667a: a0 91 17 06 lds r26, 0x0617
667e: b0 91 18 06 lds r27, 0x0618
6682: bb 23 and r27, r27
6684: 1c f4 brge .+6 ; 0x668c <Mittelwert+0xc7c>
6686: b1 95 neg r27
6688: a1 95 neg r26
668a: b1 09 sbc r27, r1
668c: 20 91 28 01 lds r18, 0x0128
6690: 30 e0 ldi r19, 0x00 ; 0
6692: 0e 94 c2 b1 call 0x16384 ; 0x16384 <__usmulhisi3>
6696: 8b 01 movw r16, r22
6698: 9c 01 movw r18, r24
669a: 99 23 and r25, r25
669c: 24 f4 brge .+8 ; 0x66a6 <Mittelwert+0xc96>
669e: 01 5c subi r16, 0xC1 ; 193
66a0: 1f 4f sbci r17, 0xFF ; 255
66a2: 2f 4f sbci r18, 0xFF ; 255
66a4: 3f 4f sbci r19, 0xFF ; 255
66a6: d9 01 movw r26, r18
66a8: c8 01 movw r24, r16
66aa: 68 94 set
66ac: 15 f8 bld r1, 5
66ae: b5 95 asr r27
66b0: a7 95 ror r26
66b2: 97 95 ror r25
66b4: 87 95 ror r24
66b6: 16 94 lsr r1
66b8: d1 f7 brne .-12 ; 0x66ae <Mittelwert+0xc9e>
66ba: e8 1b sub r30, r24
66bc: f9 0b sbc r31, r25
66be: f0 93 1f 06 sts 0x061F, r31
66c2: e0 93 1e 06 sts 0x061E, r30
if(Parameter_GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll)
66c6: 80 91 5c 06 lds r24, 0x065C
66ca: 88 23 and r24, r24
66cc: 0c f0 brlt .+2 ; 0x66d0 <Mittelwert+0xcc0>
66ce: 46 c0 rjmp .+140 ; 0x675c <Mittelwert+0xd4c>
66d0: 80 91 e7 03 lds r24, 0x03E7
66d4: 81 11 cpse r24, r1
66d6: 42 c0 rjmp .+132 ; 0x675c <Mittelwert+0xd4c>
66d8: 80 91 e6 03 lds r24, 0x03E6
66dc: 81 11 cpse r24, r1
66de: 3e c0 rjmp .+124 ; 0x675c <Mittelwert+0xd4c>
{
if(RohMesswertNick > 256) MesswertNick += 1 * (RohMesswertNick - 256);
66e0: b1 e0 ldi r27, 0x01 ; 1
66e2: eb 16 cp r14, r27
66e4: fb 06 cpc r15, r27
66e6: 64 f0 brlt .+24 ; 0x6700 <Mittelwert+0xcf0>
66e8: fa 94 dec r15
66ea: 80 91 27 06 lds r24, 0x0627
66ee: 90 91 28 06 lds r25, 0x0628
66f2: e8 0e add r14, r24
66f4: f9 1e adc r15, r25
66f6: f0 92 28 06 sts 0x0628, r15
66fa: e0 92 27 06 sts 0x0627, r14
66fe: 0f c0 rjmp .+30 ; 0x671e <Mittelwert+0xd0e>
else if(RohMesswertNick < -256) MesswertNick += 1 * (RohMesswertNick + 256);
6700: e1 14 cp r14, r1
6702: ff ef ldi r31, 0xFF ; 255
6704: ff 06 cpc r15, r31
6706: 5c f4 brge .+22 ; 0x671e <Mittelwert+0xd0e>
6708: f3 94 inc r15
670a: 80 91 27 06 lds r24, 0x0627
670e: 90 91 28 06 lds r25, 0x0628
6712: e8 0e add r14, r24
6714: f9 1e adc r15, r25
6716: f0 92 28 06 sts 0x0628, r15
671a: e0 92 27 06 sts 0x0627, r14
if(RohMesswertRoll > 256) MesswertRoll += 1 * (RohMesswertRoll - 256);
671e: 41 30 cpi r20, 0x01 ; 1
6720: 11 e0 ldi r17, 0x01 ; 1
6722: 51 07 cpc r21, r17
6724: 64 f0 brlt .+24 ; 0x673e <Mittelwert+0xd2e>
6726: 5a 95 dec r21
6728: 80 91 1c 06 lds r24, 0x061C
672c: 90 91 1d 06 lds r25, 0x061D
6730: 48 0f add r20, r24
6732: 59 1f adc r21, r25
6734: 50 93 1d 06 sts 0x061D, r21
6738: 40 93 1c 06 sts 0x061C, r20
673c: 0f c0 rjmp .+30 ; 0x675c <Mittelwert+0xd4c>
else if(RohMesswertRoll < -256) MesswertRoll += 1 * (RohMesswertRoll + 256);
673e: 41 15 cp r20, r1
6740: 2f ef ldi r18, 0xFF ; 255
6742: 52 07 cpc r21, r18
6744: 5c f4 brge .+22 ; 0x675c <Mittelwert+0xd4c>
6746: 53 95 inc r21
6748: 80 91 1c 06 lds r24, 0x061C
674c: 90 91 1d 06 lds r25, 0x061D
6750: 48 0f add r20, r24
6752: 59 1f adc r21, r25
6754: 50 93 1d 06 sts 0x061D, r21
6758: 40 93 1c 06 sts 0x061C, r20
}
}
675c: 60 96 adiw r28, 0x10 ; 16
675e: 0f b6 in r0, 0x3f ; 63
6760: f8 94 cli
6762: de bf out 0x3e, r29 ; 62
6764: 0f be out 0x3f, r0 ; 63
6766: cd bf out 0x3d, r28 ; 61
6768: df 91 pop r29
676a: cf 91 pop r28
676c: 1f 91 pop r17
676e: 0f 91 pop r16
6770: ff 90 pop r15
6772: ef 90 pop r14
6774: df 90 pop r13
6776: cf 90 pop r12
6778: bf 90 pop r11
677a: af 90 pop r10
677c: 9f 90 pop r9
677e: 8f 90 pop r8
6780: 7f 90 pop r7
6782: 6f 90 pop r6
6784: 5f 90 pop r5
6786: 4f 90 pop r4
6788: 3f 90 pop r3
678a: 2f 90 pop r2
678c: 08 95 ret
0000678e <SendMotorData>:
//############################################################################
// Senden der Motorwerte per I2C-Bus
void SendMotorData(void)
//############################################################################
{
678e: cf 93 push r28
6790: df 93 push r29
unsigned char i;
if(!MotorenEin)
6792: 80 91 03 04 lds r24, 0x0403
6796: 81 11 cpse r24, r1
6798: 28 c0 rjmp .+80 ; 0x67ea <SendMotorData+0x5c>
{
FC_StatusFlags &= ~(FC_STATUS_MOTOR_RUN | FC_STATUS_FLY);
679a: 80 91 cb 03 lds r24, 0x03CB
679e: 8c 7f andi r24, 0xFC ; 252
67a0: 80 93 cb 03 sts 0x03CB, r24
FC_StatusFlags2 &= ~FC_STATUS2_WAIT_FOR_TAKEOFF;
67a4: 80 91 ca 03 lds r24, 0x03CA
67a8: 8f 7d andi r24, 0xDF ; 223
67aa: 80 93 ca 03 sts 0x03CA, r24
67ae: a7 e6 ldi r26, 0x67 ; 103
67b0: ba e0 ldi r27, 0x0A ; 10
67b2: e9 e9 ldi r30, 0x99 ; 153
67b4: f9 e0 ldi r31, 0x09 ; 9
67b6: 83 e7 ldi r24, 0x73 ; 115
67b8: 9a e0 ldi r25, 0x0A ; 10
for(i=0;i<MAX_MOTORS;i++)
{
if(!PC_MotortestActive) MotorTest[i] = 0;
67ba: 20 91 f5 04 lds r18, 0x04F5
67be: 21 11 cpse r18, r1
67c0: 01 c0 rjmp .+2 ; 0x67c4 <SendMotorData+0x36>
67c2: 1c 92 st X, r1
Motor[i].SetPoint = MotorTest[i];
67c4: 2d 91 ld r18, X+
67c6: ef 01 movw r28, r30
67c8: 21 97 sbiw r28, 0x01 ; 1
67ca: 28 83 st Y, r18
Motor[i].SetPointLowerBits = 0;
67cc: 10 82 st Z, r1
67ce: 3f 96 adiw r30, 0x0f ; 15
unsigned char i;
if(!MotorenEin)
{
FC_StatusFlags &= ~(FC_STATUS_MOTOR_RUN | FC_STATUS_FLY);
FC_StatusFlags2 &= ~FC_STATUS2_WAIT_FOR_TAKEOFF;
for(i=0;i<MAX_MOTORS;i++)
67d0: a8 17 cp r26, r24
67d2: b9 07 cpc r27, r25
67d4: 91 f7 brne .-28 ; 0x67ba <SendMotorData+0x2c>
/*
Motor[i].SetPoint = MotorTest[i] / 4; // testing the high resolution
Motor[i].SetPointLowerBits = MotorTest[i] % 4;
*/
}
if(PC_MotortestActive) PC_MotortestActive--;
67d6: 80 91 f5 04 lds r24, 0x04F5
67da: 88 23 and r24, r24
67dc: 59 f0 breq .+22 ; 0x67f4 <SendMotorData+0x66>
67de: 80 91 f5 04 lds r24, 0x04F5
67e2: 81 50 subi r24, 0x01 ; 1
67e4: 80 93 f5 04 sts 0x04F5, r24
67e8: 05 c0 rjmp .+10 ; 0x67f4 <SendMotorData+0x66>
}
else FC_StatusFlags |= FC_STATUS_MOTOR_RUN;
67ea: 80 91 cb 03 lds r24, 0x03CB
67ee: 81 60 ori r24, 0x01 ; 1
67f0: 80 93 cb 03 sts 0x03CB, r24
return;
}
}
#endif
if(I2C_TransferActive)
67f4: 80 91 e0 04 lds r24, 0x04E0
67f8: 88 23 and r24, r24
67fa: 19 f0 breq .+6 ; 0x6802 <SendMotorData+0x74>
{
I2C_TransferActive = 0; // enable for the next time
67fc: 10 92 e0 04 sts 0x04E0, r1
6800: 0a c0 rjmp .+20 ; 0x6816 <SendMotorData+0x88>
}
else
{
// motor_write = 0;
I2C_Start(TWI_STATE_MOTOR_TX); //Start I2C Interrupt Mode
6802: 10 92 e3 04 sts 0x04E3, r1
6806: 80 91 de 04 lds r24, 0x04DE
680a: 8e 7f andi r24, 0xFE ; 254
680c: 80 93 de 04 sts 0x04DE, r24
6810: 85 ea ldi r24, 0xA5 ; 165
6812: 80 93 bc 00 sts 0x00BC, r24
}
}
6816: df 91 pop r29
6818: cf 91 pop r28
681a: 08 95 ret
0000681c <GetChannelValue>:
unsigned char GetChannelValue(unsigned char ch) // gives the unsigned value of the channel
{
int tmp2;
if(ch == 0) return(0);
681c: 88 23 and r24, r24
681e: a9 f0 breq .+42 ; 0x684a <GetChannelValue+0x2e>
tmp2 = PPM_in[ch] + 127;
6820: e8 2f mov r30, r24
6822: f0 e0 ldi r31, 0x00 ; 0
6824: ee 0f add r30, r30
6826: ff 1f adc r31, r31
6828: ef 5c subi r30, 0xCF ; 207
682a: f7 4f sbci r31, 0xF7 ; 247
682c: 80 81 ld r24, Z
682e: 91 81 ldd r25, Z+1 ; 0x01
6830: 81 58 subi r24, 0x81 ; 129
6832: 9f 4f sbci r25, 0xFF ; 255
6834: 99 23 and r25, r25
6836: 14 f4 brge .+4 ; 0x683c <GetChannelValue+0x20>
6838: 80 e0 ldi r24, 0x00 ; 0
683a: 90 e0 ldi r25, 0x00 ; 0
683c: 8f 3f cpi r24, 0xFF ; 255
683e: 91 05 cpc r25, r1
6840: 29 f0 breq .+10 ; 0x684c <GetChannelValue+0x30>
6842: 24 f0 brlt .+8 ; 0x684c <GetChannelValue+0x30>
6844: 8f ef ldi r24, 0xFF ; 255
6846: 90 e0 ldi r25, 0x00 ; 0
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0;
return(tmp2);
6848: 08 95 ret
}
unsigned char GetChannelValue(unsigned char ch) // gives the unsigned value of the channel
{
int tmp2;
if(ch == 0) return(0);
684a: 80 e0 ldi r24, 0x00 ; 0
tmp2 = PPM_in[ch] + 127;
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0;
return(tmp2);
}
684c: 08 95 ret
0000684e <ParameterZuordnung>:
//############################################################################
// Trägt ggf. das Poti als Parameter ein
void ParameterZuordnung(void)
//############################################################################
{
684e: df 92 push r13
6850: ef 92 push r14
6852: ff 92 push r15
6854: 0f 93 push r16
6856: 1f 93 push r17
6858: cf 93 push r28
685a: df 93 push r29
685c: a3 e4 ldi r26, 0x43 ; 67
685e: b5 e0 ldi r27, 0x05 ; 5
6860: e5 e0 ldi r30, 0x05 ; 5
6862: f4 e0 ldi r31, 0x04 ; 4
6864: 4b e4 ldi r20, 0x4B ; 75
6866: 55 e0 ldi r21, 0x05 ; 5
6868: e1 2c mov r14, r1
686a: f1 2c mov r15, r1
686c: 0f ef ldi r16, 0xFF ; 255
686e: 10 e0 ldi r17, 0x00 ; 0
unsigned char tmp,i;
for(i=0;i<8;i++)
{
int tmp2;
tmp = EE_Parameter.Kanalbelegung[K_POTI1 + i];
6870: 2d 91 ld r18, X+
tmp2 = PPM_in[tmp] + 127;
6872: c2 2f mov r28, r18
6874: d0 e0 ldi r29, 0x00 ; 0
6876: cc 0f add r28, r28
6878: dd 1f adc r29, r29
687a: cf 5c subi r28, 0xCF ; 207
687c: d7 4f sbci r29, 0xF7 ; 247
687e: 88 81 ld r24, Y
6880: 99 81 ldd r25, Y+1 ; 0x01
6882: 81 58 subi r24, 0x81 ; 129
6884: 9f 4f sbci r25, 0xFF ; 255
6886: 99 23 and r25, r25
6888: 14 f4 brge .+4 ; 0x688e <ParameterZuordnung+0x40>
688a: 8e 2d mov r24, r14
688c: 9f 2d mov r25, r15
688e: 8f 3f cpi r24, 0xFF ; 255
6890: 91 05 cpc r25, r1
6892: 19 f0 breq .+6 ; 0x689a <ParameterZuordnung+0x4c>
6894: 14 f0 brlt .+4 ; 0x689a <ParameterZuordnung+0x4c>
6896: 80 2f mov r24, r16
6898: 91 2f mov r25, r17
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0;
if(tmp == 25) Poti[i] = tmp2; // 25 = WaypointEvent channel -> no filter
689a: 29 31 cpi r18, 0x19 ; 25
689c: 11 f4 brne .+4 ; 0x68a2 <ParameterZuordnung+0x54>
689e: 80 83 st Z, r24
68a0: 1e c0 rjmp .+60 ; 0x68de <ParameterZuordnung+0x90>
68a2: ef 01 movw r28, r30
else
if(tmp2 != Poti[i])
68a4: d0 80 ld r13, Z
68a6: 2d 2d mov r18, r13
68a8: 30 e0 ldi r19, 0x00 ; 0
68aa: 28 17 cp r18, r24
68ac: 39 07 cpc r19, r25
68ae: b9 f0 breq .+46 ; 0x68de <ParameterZuordnung+0x90>
{
Poti[i] += (tmp2 - Poti[i]) / 4;
68b0: bc 01 movw r22, r24
68b2: 62 1b sub r22, r18
68b4: 73 0b sbc r23, r19
68b6: 9b 01 movw r18, r22
68b8: 12 f4 brpl .+4 ; 0x68be <ParameterZuordnung+0x70>
68ba: 2d 5f subi r18, 0xFD ; 253
68bc: 3f 4f sbci r19, 0xFF ; 255
68be: 35 95 asr r19
68c0: 27 95 ror r18
68c2: 35 95 asr r19
68c4: 27 95 ror r18
68c6: 2d 0d add r18, r13
68c8: 28 83 st Y, r18
if(Poti[i] > tmp2) Poti[i]--;
68ca: 62 2f mov r22, r18
68cc: 70 e0 ldi r23, 0x00 ; 0
68ce: 86 17 cp r24, r22
68d0: 97 07 cpc r25, r23
68d2: 1c f4 brge .+6 ; 0x68da <ParameterZuordnung+0x8c>
68d4: 21 50 subi r18, 0x01 ; 1
68d6: 28 83 st Y, r18
68d8: 02 c0 rjmp .+4 ; 0x68de <ParameterZuordnung+0x90>
else Poti[i]++;
68da: 2f 5f subi r18, 0xFF ; 255
68dc: 28 83 st Y, r18
68de: 31 96 adiw r30, 0x01 ; 1
// Trägt ggf. das Poti als Parameter ein
void ParameterZuordnung(void)
//############################################################################
{
unsigned char tmp,i;
for(i=0;i<8;i++)
68e0: a4 17 cp r26, r20
68e2: b5 07 cpc r27, r21
68e4: 29 f6 brne .-118 ; 0x6870 <ParameterZuordnung+0x22>
Poti[i] += (tmp2 - Poti[i]) / 4;
if(Poti[i] > tmp2) Poti[i]--;
else Poti[i]++;
}
}
CHK_POTI_MM(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
68e6: 80 91 4d 05 lds r24, 0x054D
68ea: 88 3f cpi r24, 0xF8 ; 248
68ec: 18 f4 brcc .+6 ; 0x68f4 <ParameterZuordnung+0xa6>
68ee: 80 93 3a 01 sts 0x013A, r24
68f2: 09 c0 rjmp .+18 ; 0x6906 <ParameterZuordnung+0xb8>
68f4: ef ef ldi r30, 0xFF ; 255
68f6: f0 e0 ldi r31, 0x00 ; 0
68f8: e8 1b sub r30, r24
68fa: f1 09 sbc r31, r1
68fc: eb 5f subi r30, 0xFB ; 251
68fe: fb 4f sbci r31, 0xFB ; 251
6900: 80 81 ld r24, Z
6902: 80 93 3a 01 sts 0x013A, r24
6906: 80 91 3a 01 lds r24, 0x013A
690a: 84 36 cpi r24, 0x64 ; 100
690c: 18 f0 brcs .+6 ; 0x6914 <ParameterZuordnung+0xc6>
690e: 84 e6 ldi r24, 0x64 ; 100
6910: 80 93 3a 01 sts 0x013A, r24
CHK_POTI_MM(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
6914: 80 91 4f 05 lds r24, 0x054F
6918: 88 3f cpi r24, 0xF8 ; 248
691a: 18 f4 brcc .+6 ; 0x6922 <ParameterZuordnung+0xd4>
691c: 80 93 39 01 sts 0x0139, r24
6920: 09 c0 rjmp .+18 ; 0x6934 <ParameterZuordnung+0xe6>
6922: ef ef ldi r30, 0xFF ; 255
6924: f0 e0 ldi r31, 0x00 ; 0
6926: e8 1b sub r30, r24
6928: f1 09 sbc r31, r1
692a: eb 5f subi r30, 0xFB ; 251
692c: fb 4f sbci r31, 0xFB ; 251
692e: 80 81 ld r24, Z
6930: 80 93 39 01 sts 0x0139, r24
6934: 80 91 39 01 lds r24, 0x0139
6938: 84 36 cpi r24, 0x64 ; 100
693a: 18 f0 brcs .+6 ; 0x6942 <ParameterZuordnung+0xf4>
693c: 84 e6 ldi r24, 0x64 ; 100
693e: 80 93 39 01 sts 0x0139, r24
CHK_POTI_MM(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
6942: 80 91 5c 05 lds r24, 0x055C
6946: 88 3f cpi r24, 0xF8 ; 248
6948: 18 f4 brcc .+6 ; 0x6950 <ParameterZuordnung+0x102>
694a: 80 93 34 01 sts 0x0134, r24
694e: 09 c0 rjmp .+18 ; 0x6962 <ParameterZuordnung+0x114>
6950: ef ef ldi r30, 0xFF ; 255
6952: f0 e0 ldi r31, 0x00 ; 0
6954: e8 1b sub r30, r24
6956: f1 09 sbc r31, r1
6958: eb 5f subi r30, 0xFB ; 251
695a: fb 4f sbci r31, 0xFB ; 251
695c: 80 81 ld r24, Z
695e: 80 93 34 01 sts 0x0134, r24
6962: 80 91 34 01 lds r24, 0x0134
6966: 8b 30 cpi r24, 0x0B ; 11
6968: 18 f4 brcc .+6 ; 0x6970 <ParameterZuordnung+0x122>
696a: 8a e0 ldi r24, 0x0A ; 10
696c: 80 93 34 01 sts 0x0134, r24
CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,5,255);
6970: 80 91 89 05 lds r24, 0x0589
6974: 88 3f cpi r24, 0xF8 ; 248
6976: 18 f4 brcc .+6 ; 0x697e <ParameterZuordnung+0x130>
6978: 80 93 3b 06 sts 0x063B, r24
697c: 09 c0 rjmp .+18 ; 0x6990 <ParameterZuordnung+0x142>
697e: ef ef ldi r30, 0xFF ; 255
6980: f0 e0 ldi r31, 0x00 ; 0
6982: e8 1b sub r30, r24
6984: f1 09 sbc r31, r1
6986: eb 5f subi r30, 0xFB ; 251
6988: fb 4f sbci r31, 0xFB ; 251
698a: 80 81 ld r24, Z
698c: 80 93 3b 06 sts 0x063B, r24
6990: 80 91 3b 06 lds r24, 0x063B
6994: 86 30 cpi r24, 0x06 ; 6
6996: 18 f4 brcc .+6 ; 0x699e <ParameterZuordnung+0x150>
6998: 85 e0 ldi r24, 0x05 ; 5
699a: 80 93 3b 06 sts 0x063B, r24
CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,5,255);
699e: 80 91 8b 05 lds r24, 0x058B
69a2: 88 3f cpi r24, 0xF8 ; 248
69a4: 18 f4 brcc .+6 ; 0x69ac <ParameterZuordnung+0x15e>
69a6: 80 93 63 06 sts 0x0663, r24
69aa: 09 c0 rjmp .+18 ; 0x69be <ParameterZuordnung+0x170>
69ac: ef ef ldi r30, 0xFF ; 255
69ae: f0 e0 ldi r31, 0x00 ; 0
69b0: e8 1b sub r30, r24
69b2: f1 09 sbc r31, r1
69b4: eb 5f subi r30, 0xFB ; 251
69b6: fb 4f sbci r31, 0xFB ; 251
69b8: 80 81 ld r24, Z
69ba: 80 93 63 06 sts 0x0663, r24
69be: 80 91 63 06 lds r24, 0x0663
69c2: 86 30 cpi r24, 0x06 ; 6
69c4: 18 f4 brcc .+6 ; 0x69cc <ParameterZuordnung+0x17e>
69c6: 85 e0 ldi r24, 0x05 ; 5
69c8: 80 93 63 06 sts 0x0663, r24
if(EE_Parameter.Servo3 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo3 = EE_Parameter.Servo3OnValue; else Parameter_Servo3 = EE_Parameter.Servo3OffValue;} // Out1 (J16)
69cc: 80 91 76 05 lds r24, 0x0576
69d0: 87 3f cpi r24, 0xF7 ; 247
69d2: 61 f4 brne .+24 ; 0x69ec <ParameterZuordnung+0x19e>
69d4: 42 9b sbis 0x08, 2 ; 8
69d6: 05 c0 rjmp .+10 ; 0x69e2 <ParameterZuordnung+0x194>
69d8: 80 91 ab 05 lds r24, 0x05AB
69dc: 80 93 38 06 sts 0x0638, r24
69e0: 28 c0 rjmp .+80 ; 0x6a32 <ParameterZuordnung+0x1e4>
69e2: 80 91 ac 05 lds r24, 0x05AC
69e6: 80 93 38 06 sts 0x0638, r24
69ea: 23 c0 rjmp .+70 ; 0x6a32 <ParameterZuordnung+0x1e4>
else if(EE_Parameter.Servo3 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo3 = EE_Parameter.Servo3OnValue; else Parameter_Servo3 = EE_Parameter.Servo3OffValue;}
69ec: 86 3f cpi r24, 0xF6 ; 246
69ee: 61 f4 brne .+24 ; 0x6a08 <ParameterZuordnung+0x1ba>
69f0: 43 9b sbis 0x08, 3 ; 8
69f2: 05 c0 rjmp .+10 ; 0x69fe <ParameterZuordnung+0x1b0>
69f4: 80 91 ab 05 lds r24, 0x05AB
69f8: 80 93 38 06 sts 0x0638, r24
69fc: 1a c0 rjmp .+52 ; 0x6a32 <ParameterZuordnung+0x1e4>
69fe: 80 91 ac 05 lds r24, 0x05AC
6a02: 80 93 38 06 sts 0x0638, r24
6a06: 15 c0 rjmp .+42 ; 0x6a32 <ParameterZuordnung+0x1e4>
else CHK_POTI_MM(Parameter_Servo3,EE_Parameter.Servo3, 24, 255);
6a08: 88 3f cpi r24, 0xF8 ; 248
6a0a: 18 f4 brcc .+6 ; 0x6a12 <ParameterZuordnung+0x1c4>
6a0c: 80 93 38 06 sts 0x0638, r24
6a10: 09 c0 rjmp .+18 ; 0x6a24 <ParameterZuordnung+0x1d6>
6a12: ef ef ldi r30, 0xFF ; 255
6a14: f0 e0 ldi r31, 0x00 ; 0
6a16: e8 1b sub r30, r24
6a18: f1 09 sbc r31, r1
6a1a: eb 5f subi r30, 0xFB ; 251
6a1c: fb 4f sbci r31, 0xFB ; 251
6a1e: 80 81 ld r24, Z
6a20: 80 93 38 06 sts 0x0638, r24
6a24: 80 91 38 06 lds r24, 0x0638
6a28: 89 31 cpi r24, 0x19 ; 25
6a2a: 18 f4 brcc .+6 ; 0x6a32 <ParameterZuordnung+0x1e4>
6a2c: 88 e1 ldi r24, 0x18 ; 24
6a2e: 80 93 38 06 sts 0x0638, r24
if(EE_Parameter.Servo4 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo4 = EE_Parameter.Servo4OnValue; else Parameter_Servo4 = EE_Parameter.Servo4OffValue;}
6a32: 80 91 77 05 lds r24, 0x0577
6a36: 87 3f cpi r24, 0xF7 ; 247
6a38: 61 f4 brne .+24 ; 0x6a52 <ParameterZuordnung+0x204>
6a3a: 42 9b sbis 0x08, 2 ; 8
6a3c: 05 c0 rjmp .+10 ; 0x6a48 <ParameterZuordnung+0x1fa>
6a3e: 80 91 ad 05 lds r24, 0x05AD
6a42: 80 93 19 06 sts 0x0619, r24
6a46: 28 c0 rjmp .+80 ; 0x6a98 <ParameterZuordnung+0x24a>
6a48: 80 91 ae 05 lds r24, 0x05AE
6a4c: 80 93 19 06 sts 0x0619, r24
6a50: 23 c0 rjmp .+70 ; 0x6a98 <ParameterZuordnung+0x24a>
else if(EE_Parameter.Servo4 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo4 = EE_Parameter.Servo4OnValue; else Parameter_Servo4 = EE_Parameter.Servo4OffValue;} // Out2 (J17)
6a52: 86 3f cpi r24, 0xF6 ; 246
6a54: 61 f4 brne .+24 ; 0x6a6e <ParameterZuordnung+0x220>
6a56: 43 9b sbis 0x08, 3 ; 8
6a58: 05 c0 rjmp .+10 ; 0x6a64 <ParameterZuordnung+0x216>
6a5a: 80 91 ad 05 lds r24, 0x05AD
6a5e: 80 93 19 06 sts 0x0619, r24
6a62: 1a c0 rjmp .+52 ; 0x6a98 <ParameterZuordnung+0x24a>
6a64: 80 91 ae 05 lds r24, 0x05AE
6a68: 80 93 19 06 sts 0x0619, r24
6a6c: 15 c0 rjmp .+42 ; 0x6a98 <ParameterZuordnung+0x24a>
else CHK_POTI_MM(Parameter_Servo4,EE_Parameter.Servo4, 24, 255);
6a6e: 88 3f cpi r24, 0xF8 ; 248
6a70: 18 f4 brcc .+6 ; 0x6a78 <ParameterZuordnung+0x22a>
6a72: 80 93 19 06 sts 0x0619, r24
6a76: 09 c0 rjmp .+18 ; 0x6a8a <ParameterZuordnung+0x23c>
6a78: ef ef ldi r30, 0xFF ; 255
6a7a: f0 e0 ldi r31, 0x00 ; 0
6a7c: e8 1b sub r30, r24
6a7e: f1 09 sbc r31, r1
6a80: eb 5f subi r30, 0xFB ; 251
6a82: fb 4f sbci r31, 0xFB ; 251
6a84: 80 81 ld r24, Z
6a86: 80 93 19 06 sts 0x0619, r24
6a8a: 80 91 19 06 lds r24, 0x0619
6a8e: 89 31 cpi r24, 0x19 ; 25
6a90: 18 f4 brcc .+6 ; 0x6a98 <ParameterZuordnung+0x24a>
6a92: 88 e1 ldi r24, 0x18 ; 24
6a94: 80 93 19 06 sts 0x0619, r24
CHK_POTI_MM(Parameter_Servo5,EE_Parameter.Servo5, 24, 255);
6a98: 80 91 78 05 lds r24, 0x0578
6a9c: 88 3f cpi r24, 0xF8 ; 248
6a9e: 18 f4 brcc .+6 ; 0x6aa6 <ParameterZuordnung+0x258>
6aa0: 80 93 41 06 sts 0x0641, r24
6aa4: 09 c0 rjmp .+18 ; 0x6ab8 <ParameterZuordnung+0x26a>
6aa6: ef ef ldi r30, 0xFF ; 255
6aa8: f0 e0 ldi r31, 0x00 ; 0
6aaa: e8 1b sub r30, r24
6aac: f1 09 sbc r31, r1
6aae: eb 5f subi r30, 0xFB ; 251
6ab0: fb 4f sbci r31, 0xFB ; 251
6ab2: 80 81 ld r24, Z
6ab4: 80 93 41 06 sts 0x0641, r24
6ab8: 80 91 41 06 lds r24, 0x0641
6abc: 89 31 cpi r24, 0x19 ; 25
6abe: 18 f4 brcc .+6 ; 0x6ac6 <ParameterZuordnung+0x278>
6ac0: 88 e1 ldi r24, 0x18 ; 24
6ac2: 80 93 41 06 sts 0x0641, r24
Parameter_HoehenSchalter = GetChannelValue(EE_Parameter.HoeheChannel);
6ac6: 80 91 4e 05 lds r24, 0x054E
6aca: a8 de rcall .-688 ; 0x681c <GetChannelValue>
6acc: 80 93 e1 03 sts 0x03E1, r24
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung);
6ad0: 80 91 51 05 lds r24, 0x0551
6ad4: 88 3f cpi r24, 0xF8 ; 248
6ad6: 18 f4 brcc .+6 ; 0x6ade <ParameterZuordnung+0x290>
6ad8: 80 93 38 01 sts 0x0138, r24
6adc: 09 c0 rjmp .+18 ; 0x6af0 <ParameterZuordnung+0x2a2>
6ade: ef ef ldi r30, 0xFF ; 255
6ae0: f0 e0 ldi r31, 0x00 ; 0
6ae2: e8 1b sub r30, r24
6ae4: f1 09 sbc r31, r1
6ae6: eb 5f subi r30, 0xFB ; 251
6ae8: fb 4f sbci r31, 0xFB ; 251
6aea: 80 81 ld r24, Z
6aec: 80 93 38 01 sts 0x0138, r24
CHK_POTI(Parameter_Hoehe_TiltCompensation,EE_Parameter.Hoehe_TiltCompensation);
6af0: 80 91 53 05 lds r24, 0x0553
6af4: 88 3f cpi r24, 0xF8 ; 248
6af6: 18 f4 brcc .+6 ; 0x6afe <ParameterZuordnung+0x2b0>
6af8: 80 93 36 01 sts 0x0136, r24
6afc: 09 c0 rjmp .+18 ; 0x6b10 <ParameterZuordnung+0x2c2>
6afe: ef ef ldi r30, 0xFF ; 255
6b00: f0 e0 ldi r31, 0x00 ; 0
6b02: e8 1b sub r30, r24
6b04: f1 09 sbc r31, r1
6b06: eb 5f subi r30, 0xFB ; 251
6b08: fb 4f sbci r31, 0xFB ; 251
6b0a: 80 81 ld r24, Z
6b0c: 80 93 36 01 sts 0x0136, r24
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung);
6b10: 80 91 5b 05 lds r24, 0x055B
6b14: 88 3f cpi r24, 0xF8 ; 248
6b16: 18 f4 brcc .+6 ; 0x6b1e <ParameterZuordnung+0x2d0>
6b18: 80 93 37 01 sts 0x0137, r24
6b1c: 09 c0 rjmp .+18 ; 0x6b30 <ParameterZuordnung+0x2e2>
6b1e: ef ef ldi r30, 0xFF ; 255
6b20: f0 e0 ldi r31, 0x00 ; 0
6b22: e8 1b sub r30, r24
6b24: f1 09 sbc r31, r1
6b26: eb 5f subi r30, 0xFB ; 251
6b28: fb 4f sbci r31, 0xFB ; 251
6b2a: 80 81 ld r24, Z
6b2c: 80 93 37 01 sts 0x0137, r24
CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I);
6b30: 80 91 5d 05 lds r24, 0x055D
6b34: 88 3f cpi r24, 0xF8 ; 248
6b36: 18 f4 brcc .+6 ; 0x6b3e <ParameterZuordnung+0x2f0>
6b38: 80 93 33 01 sts 0x0133, r24
6b3c: 09 c0 rjmp .+18 ; 0x6b50 <ParameterZuordnung+0x302>
6b3e: ef ef ldi r30, 0xFF ; 255
6b40: f0 e0 ldi r31, 0x00 ; 0
6b42: e8 1b sub r30, r24
6b44: f1 09 sbc r31, r1
6b46: eb 5f subi r30, 0xFB ; 251
6b48: fb 4f sbci r31, 0xFB ; 251
6b4a: 80 81 ld r24, Z
6b4c: 80 93 33 01 sts 0x0133, r24
CHK_POTI(Parameter_Gyro_D,EE_Parameter.Gyro_D);
6b50: 80 91 5e 05 lds r24, 0x055E
6b54: 88 3f cpi r24, 0xF8 ; 248
6b56: 18 f4 brcc .+6 ; 0x6b5e <ParameterZuordnung+0x310>
6b58: 80 93 35 01 sts 0x0135, r24
6b5c: 09 c0 rjmp .+18 ; 0x6b70 <ParameterZuordnung+0x322>
6b5e: ef ef ldi r30, 0xFF ; 255
6b60: f0 e0 ldi r31, 0x00 ; 0
6b62: e8 1b sub r30, r24
6b64: f1 09 sbc r31, r1
6b66: eb 5f subi r30, 0xFB ; 251
6b68: fb 4f sbci r31, 0xFB ; 251
6b6a: 80 81 ld r24, Z
6b6c: 80 93 35 01 sts 0x0135, r24
CHK_POTI(Parameter_Gyro_Gier_P,EE_Parameter.Gyro_Gier_P);
6b70: 80 91 5f 05 lds r24, 0x055F
6b74: 88 3f cpi r24, 0xF8 ; 248
6b76: 18 f4 brcc .+6 ; 0x6b7e <ParameterZuordnung+0x330>
6b78: 80 93 32 01 sts 0x0132, r24
6b7c: 09 c0 rjmp .+18 ; 0x6b90 <ParameterZuordnung+0x342>
6b7e: ef ef ldi r30, 0xFF ; 255
6b80: f0 e0 ldi r31, 0x00 ; 0
6b82: e8 1b sub r30, r24
6b84: f1 09 sbc r31, r1
6b86: eb 5f subi r30, 0xFB ; 251
6b88: fb 4f sbci r31, 0xFB ; 251
6b8a: 80 81 ld r24, Z
6b8c: 80 93 32 01 sts 0x0132, r24
CHK_POTI(Parameter_Gyro_Gier_I,EE_Parameter.Gyro_Gier_I);
6b90: 80 91 60 05 lds r24, 0x0560
6b94: 88 3f cpi r24, 0xF8 ; 248
6b96: 18 f4 brcc .+6 ; 0x6b9e <ParameterZuordnung+0x350>
6b98: 80 93 31 01 sts 0x0131, r24
6b9c: 09 c0 rjmp .+18 ; 0x6bb0 <ParameterZuordnung+0x362>
6b9e: ef ef ldi r30, 0xFF ; 255
6ba0: f0 e0 ldi r31, 0x00 ; 0
6ba2: e8 1b sub r30, r24
6ba4: f1 09 sbc r31, r1
6ba6: eb 5f subi r30, 0xFB ; 251
6ba8: fb 4f sbci r31, 0xFB ; 251
6baa: 80 81 ld r24, Z
6bac: 80 93 31 01 sts 0x0131, r24
CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor);
6bb0: 80 91 66 05 lds r24, 0x0566
6bb4: 88 3f cpi r24, 0xF8 ; 248
6bb6: 18 f4 brcc .+6 ; 0x6bbe <ParameterZuordnung+0x370>
6bb8: 80 93 30 01 sts 0x0130, r24
6bbc: 09 c0 rjmp .+18 ; 0x6bd0 <ParameterZuordnung+0x382>
6bbe: ef ef ldi r30, 0xFF ; 255
6bc0: f0 e0 ldi r31, 0x00 ; 0
6bc2: e8 1b sub r30, r24
6bc4: f1 09 sbc r31, r1
6bc6: eb 5f subi r30, 0xFB ; 251
6bc8: fb 4f sbci r31, 0xFB ; 251
6bca: 80 81 ld r24, Z
6bcc: 80 93 30 01 sts 0x0130, r24
CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1);
6bd0: 80 91 67 05 lds r24, 0x0567
6bd4: 88 3f cpi r24, 0xF8 ; 248
6bd6: 18 f4 brcc .+6 ; 0x6bde <ParameterZuordnung+0x390>
6bd8: 80 93 e0 03 sts 0x03E0, r24
6bdc: 09 c0 rjmp .+18 ; 0x6bf0 <ParameterZuordnung+0x3a2>
6bde: ef ef ldi r30, 0xFF ; 255
6be0: f0 e0 ldi r31, 0x00 ; 0
6be2: e8 1b sub r30, r24
6be4: f1 09 sbc r31, r1
6be6: eb 5f subi r30, 0xFB ; 251
6be8: fb 4f sbci r31, 0xFB ; 251
6bea: 80 81 ld r24, Z
6bec: 80 93 e0 03 sts 0x03E0, r24
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2);
6bf0: 80 91 68 05 lds r24, 0x0568
6bf4: 88 3f cpi r24, 0xF8 ; 248
6bf6: 18 f4 brcc .+6 ; 0x6bfe <ParameterZuordnung+0x3b0>
6bf8: 80 93 df 03 sts 0x03DF, r24
6bfc: 09 c0 rjmp .+18 ; 0x6c10 <ParameterZuordnung+0x3c2>
6bfe: ef ef ldi r30, 0xFF ; 255
6c00: f0 e0 ldi r31, 0x00 ; 0
6c02: e8 1b sub r30, r24
6c04: f1 09 sbc r31, r1
6c06: eb 5f subi r30, 0xFB ; 251
6c08: fb 4f sbci r31, 0xFB ; 251
6c0a: 80 81 ld r24, Z
6c0c: 80 93 df 03 sts 0x03DF, r24
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3);
6c10: 80 91 69 05 lds r24, 0x0569
6c14: 88 3f cpi r24, 0xF8 ; 248
6c16: 18 f4 brcc .+6 ; 0x6c1e <ParameterZuordnung+0x3d0>
6c18: 80 93 de 03 sts 0x03DE, r24
6c1c: 09 c0 rjmp .+18 ; 0x6c30 <ParameterZuordnung+0x3e2>
6c1e: ef ef ldi r30, 0xFF ; 255
6c20: f0 e0 ldi r31, 0x00 ; 0
6c22: e8 1b sub r30, r24
6c24: f1 09 sbc r31, r1
6c26: eb 5f subi r30, 0xFB ; 251
6c28: fb 4f sbci r31, 0xFB ; 251
6c2a: 80 81 ld r24, Z
6c2c: 80 93 de 03 sts 0x03DE, r24
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4);
6c30: 80 91 6a 05 lds r24, 0x056A
6c34: 88 3f cpi r24, 0xF8 ; 248
6c36: 18 f4 brcc .+6 ; 0x6c3e <ParameterZuordnung+0x3f0>
6c38: 80 93 dd 03 sts 0x03DD, r24
6c3c: 09 c0 rjmp .+18 ; 0x6c50 <ParameterZuordnung+0x402>
6c3e: ef ef ldi r30, 0xFF ; 255
6c40: f0 e0 ldi r31, 0x00 ; 0
6c42: e8 1b sub r30, r24
6c44: f1 09 sbc r31, r1
6c46: eb 5f subi r30, 0xFB ; 251
6c48: fb 4f sbci r31, 0xFB ; 251
6c4a: 80 81 ld r24, Z
6c4c: 80 93 dd 03 sts 0x03DD, r24
CHK_POTI(Parameter_UserParam5,EE_Parameter.UserParam5);
6c50: 80 91 84 05 lds r24, 0x0584
6c54: 88 3f cpi r24, 0xF8 ; 248
6c56: 18 f4 brcc .+6 ; 0x6c5e <ParameterZuordnung+0x410>
6c58: 80 93 dc 03 sts 0x03DC, r24
6c5c: 09 c0 rjmp .+18 ; 0x6c70 <ParameterZuordnung+0x422>
6c5e: ef ef ldi r30, 0xFF ; 255
6c60: f0 e0 ldi r31, 0x00 ; 0
6c62: e8 1b sub r30, r24
6c64: f1 09 sbc r31, r1
6c66: eb 5f subi r30, 0xFB ; 251
6c68: fb 4f sbci r31, 0xFB ; 251
6c6a: 80 81 ld r24, Z
6c6c: 80 93 dc 03 sts 0x03DC, r24
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6);
6c70: 80 91 85 05 lds r24, 0x0585
6c74: 88 3f cpi r24, 0xF8 ; 248
6c76: 18 f4 brcc .+6 ; 0x6c7e <ParameterZuordnung+0x430>
6c78: 80 93 db 03 sts 0x03DB, r24
6c7c: 09 c0 rjmp .+18 ; 0x6c90 <ParameterZuordnung+0x442>
6c7e: ef ef ldi r30, 0xFF ; 255
6c80: f0 e0 ldi r31, 0x00 ; 0
6c82: e8 1b sub r30, r24
6c84: f1 09 sbc r31, r1
6c86: eb 5f subi r30, 0xFB ; 251
6c88: fb 4f sbci r31, 0xFB ; 251
6c8a: 80 81 ld r24, Z
6c8c: 80 93 db 03 sts 0x03DB, r24
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7);
6c90: 80 91 86 05 lds r24, 0x0586
6c94: 88 3f cpi r24, 0xF8 ; 248
6c96: 18 f4 brcc .+6 ; 0x6c9e <ParameterZuordnung+0x450>
6c98: 80 93 da 03 sts 0x03DA, r24
6c9c: 09 c0 rjmp .+18 ; 0x6cb0 <ParameterZuordnung+0x462>
6c9e: ef ef ldi r30, 0xFF ; 255
6ca0: f0 e0 ldi r31, 0x00 ; 0
6ca2: e8 1b sub r30, r24
6ca4: f1 09 sbc r31, r1
6ca6: eb 5f subi r30, 0xFB ; 251
6ca8: fb 4f sbci r31, 0xFB ; 251
6caa: 80 81 ld r24, Z
6cac: 80 93 da 03 sts 0x03DA, r24
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8);
6cb0: 80 91 87 05 lds r24, 0x0587
6cb4: 88 3f cpi r24, 0xF8 ; 248
6cb6: 18 f4 brcc .+6 ; 0x6cbe <ParameterZuordnung+0x470>
6cb8: 80 93 d9 03 sts 0x03D9, r24
6cbc: 09 c0 rjmp .+18 ; 0x6cd0 <ParameterZuordnung+0x482>
6cbe: ef ef ldi r30, 0xFF ; 255
6cc0: f0 e0 ldi r31, 0x00 ; 0
6cc2: e8 1b sub r30, r24
6cc4: f1 09 sbc r31, r1
6cc6: eb 5f subi r30, 0xFB ; 251
6cc8: fb 4f sbci r31, 0xFB ; 251
6cca: 80 81 ld r24, Z
6ccc: 80 93 d9 03 sts 0x03D9, r24
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl);
6cd0: 80 91 6b 05 lds r24, 0x056B
6cd4: 88 3f cpi r24, 0xF8 ; 248
6cd6: 18 f4 brcc .+6 ; 0x6cde <ParameterZuordnung+0x490>
6cd8: 80 93 2f 01 sts 0x012F, r24
6cdc: 09 c0 rjmp .+18 ; 0x6cf0 <ParameterZuordnung+0x4a2>
6cde: ef ef ldi r30, 0xFF ; 255
6ce0: f0 e0 ldi r31, 0x00 ; 0
6ce2: e8 1b sub r30, r24
6ce4: f1 09 sbc r31, r1
6ce6: eb 5f subi r30, 0xFB ; 251
6ce8: fb 4f sbci r31, 0xFB ; 251
6cea: 80 81 ld r24, Z
6cec: 80 93 2f 01 sts 0x012F, r24
CHK_POTI(Parameter_ServoRollControl,EE_Parameter.ServoRollControl);
6cf0: 80 91 6f 05 lds r24, 0x056F
6cf4: 88 3f cpi r24, 0xF8 ; 248
6cf6: 18 f4 brcc .+6 ; 0x6cfe <ParameterZuordnung+0x4b0>
6cf8: 80 93 2e 01 sts 0x012E, r24
6cfc: 09 c0 rjmp .+18 ; 0x6d10 <ParameterZuordnung+0x4c2>
6cfe: ef ef ldi r30, 0xFF ; 255
6d00: f0 e0 ldi r31, 0x00 ; 0
6d02: e8 1b sub r30, r24
6d04: f1 09 sbc r31, r1
6d06: eb 5f subi r30, 0xFB ; 251
6d08: fb 4f sbci r31, 0xFB ; 251
6d0a: 80 81 ld r24, Z
6d0c: 80 93 2e 01 sts 0x012E, r24
CHK_POTI(Parameter_ServoNickComp,EE_Parameter.ServoNickComp);
6d10: 80 91 6c 05 lds r24, 0x056C
6d14: 88 3f cpi r24, 0xF8 ; 248
6d16: 18 f4 brcc .+6 ; 0x6d1e <ParameterZuordnung+0x4d0>
6d18: 80 93 2d 01 sts 0x012D, r24
6d1c: 09 c0 rjmp .+18 ; 0x6d30 <ParameterZuordnung+0x4e2>
6d1e: ef ef ldi r30, 0xFF ; 255
6d20: f0 e0 ldi r31, 0x00 ; 0
6d22: e8 1b sub r30, r24
6d24: f1 09 sbc r31, r1
6d26: eb 5f subi r30, 0xFB ; 251
6d28: fb 4f sbci r31, 0xFB ; 251
6d2a: 80 81 ld r24, Z
6d2c: 80 93 2d 01 sts 0x012D, r24
CHK_POTI(Parameter_ServoRollComp,EE_Parameter.ServoRollComp);
6d30: 80 91 70 05 lds r24, 0x0570
6d34: 88 3f cpi r24, 0xF8 ; 248
6d36: 18 f4 brcc .+6 ; 0x6d3e <ParameterZuordnung+0x4f0>
6d38: 80 93 2c 01 sts 0x012C, r24
6d3c: 09 c0 rjmp .+18 ; 0x6d50 <ParameterZuordnung+0x502>
6d3e: ef ef ldi r30, 0xFF ; 255
6d40: f0 e0 ldi r31, 0x00 ; 0
6d42: e8 1b sub r30, r24
6d44: f1 09 sbc r31, r1
6d46: eb 5f subi r30, 0xFB ; 251
6d48: fb 4f sbci r31, 0xFB ; 251
6d4a: 80 81 ld r24, Z
6d4c: 80 93 2c 01 sts 0x012C, r24
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit);
6d50: 80 91 79 05 lds r24, 0x0579
6d54: 88 3f cpi r24, 0xF8 ; 248
6d56: 18 f4 brcc .+6 ; 0x6d5e <ParameterZuordnung+0x510>
6d58: 80 93 2b 01 sts 0x012B, r24
6d5c: 09 c0 rjmp .+18 ; 0x6d70 <ParameterZuordnung+0x522>
6d5e: ef ef ldi r30, 0xFF ; 255
6d60: f0 e0 ldi r31, 0x00 ; 0
6d62: e8 1b sub r30, r24
6d64: f1 09 sbc r31, r1
6d66: eb 5f subi r30, 0xFB ; 251
6d68: fb 4f sbci r31, 0xFB ; 251
6d6a: 80 81 ld r24, Z
6d6c: 80 93 2b 01 sts 0x012B, r24
CHK_POTI(Parameter_AchsKopplung1,EE_Parameter.AchsKopplung1);
6d70: 80 91 7c 05 lds r24, 0x057C
6d74: 88 3f cpi r24, 0xF8 ; 248
6d76: 18 f4 brcc .+6 ; 0x6d7e <ParameterZuordnung+0x530>
6d78: 80 93 2a 01 sts 0x012A, r24
6d7c: 09 c0 rjmp .+18 ; 0x6d90 <ParameterZuordnung+0x542>
6d7e: ef ef ldi r30, 0xFF ; 255
6d80: f0 e0 ldi r31, 0x00 ; 0
6d82: e8 1b sub r30, r24
6d84: f1 09 sbc r31, r1
6d86: eb 5f subi r30, 0xFB ; 251
6d88: fb 4f sbci r31, 0xFB ; 251
6d8a: 80 81 ld r24, Z
6d8c: 80 93 2a 01 sts 0x012A, r24
CHK_POTI(Parameter_AchsKopplung2,EE_Parameter.AchsKopplung2);
6d90: 80 91 7d 05 lds r24, 0x057D
6d94: 88 3f cpi r24, 0xF8 ; 248
6d96: 18 f4 brcc .+6 ; 0x6d9e <ParameterZuordnung+0x550>
6d98: 80 93 29 01 sts 0x0129, r24
6d9c: 09 c0 rjmp .+18 ; 0x6db0 <ParameterZuordnung+0x562>
6d9e: ef ef ldi r30, 0xFF ; 255
6da0: f0 e0 ldi r31, 0x00 ; 0
6da2: e8 1b sub r30, r24
6da4: f1 09 sbc r31, r1
6da6: eb 5f subi r30, 0xFB ; 251
6da8: fb 4f sbci r31, 0xFB ; 251
6daa: 80 81 ld r24, Z
6dac: 80 93 29 01 sts 0x0129, r24
CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection);
6db0: 80 91 7e 05 lds r24, 0x057E
6db4: 88 3f cpi r24, 0xF8 ; 248
6db6: 18 f4 brcc .+6 ; 0x6dbe <ParameterZuordnung+0x570>
6db8: 80 93 28 01 sts 0x0128, r24
6dbc: 09 c0 rjmp .+18 ; 0x6dd0 <ParameterZuordnung+0x582>
6dbe: ef ef ldi r30, 0xFF ; 255
6dc0: f0 e0 ldi r31, 0x00 ; 0
6dc2: e8 1b sub r30, r24
6dc4: f1 09 sbc r31, r1
6dc6: eb 5f subi r30, 0xFB ; 251
6dc8: fb 4f sbci r31, 0xFB ; 251
6dca: 80 81 ld r24, Z
6dcc: 80 93 28 01 sts 0x0128, r24
CHK_POTI(Parameter_MaximumAltitude,EE_Parameter.MaxAltitude);
6dd0: 80 91 a7 05 lds r24, 0x05A7
6dd4: 88 3f cpi r24, 0xF8 ; 248
6dd6: 18 f4 brcc .+6 ; 0x6dde <ParameterZuordnung+0x590>
6dd8: 80 93 24 06 sts 0x0624, r24
6ddc: 09 c0 rjmp .+18 ; 0x6df0 <ParameterZuordnung+0x5a2>
6dde: ef ef ldi r30, 0xFF ; 255
6de0: f0 e0 ldi r31, 0x00 ; 0
6de2: e8 1b sub r30, r24
6de4: f1 09 sbc r31, r1
6de6: eb 5f subi r30, 0xFB ; 251
6de8: fb 4f sbci r31, 0xFB ; 251
6dea: 80 81 ld r24, Z
6dec: 80 93 24 06 sts 0x0624, r24
// if((NC_To_FC_MaxAltitude && NC_To_FC_MaxAltitude < Parameter_MaximumAltitude) || Parameter_MaximumAltitude == 0) Parameter_MaximumAltitude = NC_To_FC_MaxAltitude;
Parameter_GlobalConfig = EE_Parameter.GlobalConfig;
6df0: 80 91 4b 05 lds r24, 0x054B
6df4: 80 93 5c 06 sts 0x065C, r24
Parameter_ExtraConfig = EE_Parameter.ExtraConfig;
6df8: 80 91 b8 05 lds r24, 0x05B8
6dfc: 80 93 40 06 sts 0x0640, r24
// CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255);
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability);
6e00: 80 91 83 05 lds r24, 0x0583
6e04: 88 3f cpi r24, 0xF8 ; 248
6e06: 18 f4 brcc .+6 ; 0x6e0e <ParameterZuordnung+0x5c0>
6e08: 80 93 27 01 sts 0x0127, r24
6e0c: 09 c0 rjmp .+18 ; 0x6e20 <ParameterZuordnung+0x5d2>
6e0e: ef ef ldi r30, 0xFF ; 255
6e10: f0 e0 ldi r31, 0x00 ; 0
6e12: e8 1b sub r30, r24
6e14: f1 09 sbc r31, r1
6e16: eb 5f subi r30, 0xFB ; 251
6e18: fb 4f sbci r31, 0xFB ; 251
6e1a: 80 81 ld r24, Z
6e1c: 80 93 27 01 sts 0x0127, r24
CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl);
6e20: 80 91 a0 05 lds r24, 0x05A0
6e24: 88 3f cpi r24, 0xF8 ; 248
6e26: 18 f4 brcc .+6 ; 0x6e2e <ParameterZuordnung+0x5e0>
6e28: 80 93 75 06 sts 0x0675, r24
6e2c: 09 c0 rjmp .+18 ; 0x6e40 <ParameterZuordnung+0x5f2>
6e2e: ef ef ldi r30, 0xFF ; 255
6e30: f0 e0 ldi r31, 0x00 ; 0
6e32: e8 1b sub r30, r24
6e34: f1 09 sbc r31, r1
6e36: eb 5f subi r30, 0xFB ; 251
6e38: fb 4f sbci r31, 0xFB ; 251
6e3a: 80 81 ld r24, Z
6e3c: 80 93 75 06 sts 0x0675, r24
Ki = 10300 / (Parameter_I_Faktor + 1);
6e40: 60 91 30 01 lds r22, 0x0130
6e44: 70 e0 ldi r23, 0x00 ; 0
6e46: 6f 5f subi r22, 0xFF ; 255
6e48: 7f 4f sbci r23, 0xFF ; 255
6e4a: 8c e3 ldi r24, 0x3C ; 60
6e4c: 98 e2 ldi r25, 0x28 ; 40
6e4e: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
6e52: 70 93 3c 01 sts 0x013C, r23
6e56: 60 93 3b 01 sts 0x013B, r22
MAX_GAS = EE_Parameter.Gas_Max;
6e5a: 80 91 59 05 lds r24, 0x0559
6e5e: 80 93 64 06 sts 0x0664, r24
MIN_GAS = EE_Parameter.Gas_Min;
6e62: 80 91 58 05 lds r24, 0x0558
6e66: 80 93 2c 06 sts 0x062C, r24
if(EE_Parameter.CareFreeChannel)
6e6a: e0 91 a2 05 lds r30, 0x05A2
6e6e: ee 23 and r30, r30
6e70: 09 f4 brne .+2 ; 0x6e74 <ParameterZuordnung+0x626>
6e72: 4b c0 rjmp .+150 ; 0x6f0a <ParameterZuordnung+0x6bc>
{
CareFree = 1;
6e74: 81 e0 ldi r24, 0x01 ; 1
6e76: 80 93 d8 03 sts 0x03D8, r24
if(PPM_in[EE_Parameter.CareFreeChannel] < -64) CareFree = 0;
6e7a: f0 e0 ldi r31, 0x00 ; 0
6e7c: ee 0f add r30, r30
6e7e: ff 1f adc r31, r31
6e80: ef 5c subi r30, 0xCF ; 207
6e82: f7 4f sbci r31, 0xF7 ; 247
6e84: 80 81 ld r24, Z
6e86: 91 81 ldd r25, Z+1 ; 0x01
6e88: 80 3c cpi r24, 0xC0 ; 192
6e8a: 9f 4f sbci r25, 0xFF ; 255
6e8c: 14 f4 brge .+4 ; 0x6e92 <ParameterZuordnung+0x644>
6e8e: 10 92 d8 03 sts 0x03D8, r1
// if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0;
if(carefree_old != CareFree)
6e92: 80 91 3d 01 lds r24, 0x013D
6e96: 20 91 d8 03 lds r18, 0x03D8
6e9a: 82 17 cp r24, r18
6e9c: 41 f1 breq .+80 ; 0x6eee <ParameterZuordnung+0x6a0>
{
if(carefree_old < 3)
6e9e: 83 30 cpi r24, 0x03 ; 3
6ea0: 18 f5 brcc .+70 ; 0x6ee8 <ParameterZuordnung+0x69a>
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(CareFree) { beeptime = 1500; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_ON; }
6ea2: 22 23 and r18, r18
6ea4: 71 f0 breq .+28 ; 0x6ec2 <ParameterZuordnung+0x674>
6ea6: 8c ed ldi r24, 0xDC ; 220
6ea8: 95 e0 ldi r25, 0x05 ; 5
6eaa: 90 93 ce 04 sts 0x04CE, r25
6eae: 80 93 cd 04 sts 0x04CD, r24
6eb2: 80 91 57 01 lds r24, 0x0157
6eb6: 81 11 cpse r24, r1
6eb8: 11 c0 rjmp .+34 ; 0x6edc <ParameterZuordnung+0x68e>
6eba: 8e e2 ldi r24, 0x2E ; 46
6ebc: 80 93 57 01 sts 0x0157, r24
6ec0: 0d c0 rjmp .+26 ; 0x6edc <ParameterZuordnung+0x68e>
else { beeptime = 200; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_OFF; }
6ec2: 88 ec ldi r24, 0xC8 ; 200
6ec4: 90 e0 ldi r25, 0x00 ; 0
6ec6: 90 93 ce 04 sts 0x04CE, r25
6eca: 80 93 cd 04 sts 0x04CD, r24
6ece: 80 91 57 01 lds r24, 0x0157
6ed2: 81 11 cpse r24, r1
6ed4: 03 c0 rjmp .+6 ; 0x6edc <ParameterZuordnung+0x68e>
6ed6: 87 e1 ldi r24, 0x17 ; 23
6ed8: 80 93 57 01 sts 0x0157, r24
#else
if(CareFree) beeptime = 1500;
else beeptime = 200;
#endif
NeueKompassRichtungMerken = 5;
6edc: 85 e0 ldi r24, 0x05 ; 5
6ede: 80 93 ee 03 sts 0x03EE, r24
carefree_old = CareFree;
6ee2: 20 93 3d 01 sts 0x013D, r18
6ee6: 03 c0 rjmp .+6 ; 0x6eee <ParameterZuordnung+0x6a0>
} else carefree_old--;
6ee8: 81 50 subi r24, 0x01 ; 1
6eea: 80 93 3d 01 sts 0x013D, r24
}
if(FromNaviCtrl.CompassValue < 0 && CareFree) VersionInfo.HardwareError[0] |= FC_ERROR0_CAREFREE; //else VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE;
6eee: 80 91 13 09 lds r24, 0x0913
6ef2: 90 91 14 09 lds r25, 0x0914
6ef6: 99 23 and r25, r25
6ef8: 84 f5 brge .+96 ; 0x6f5a <ParameterZuordnung+0x70c>
6efa: 22 23 and r18, r18
6efc: 89 f0 breq .+34 ; 0x6f20 <ParameterZuordnung+0x6d2>
6efe: e2 e6 ldi r30, 0x62 ; 98
6f00: fa e0 ldi r31, 0x0A ; 10
6f02: 80 81 ld r24, Z
6f04: 80 68 ori r24, 0x80 ; 128
6f06: 80 83 st Z, r24
6f08: 05 c0 rjmp .+10 ; 0x6f14 <ParameterZuordnung+0x6c6>
}
else
{
CareFree = 0;
6f0a: 10 92 d8 03 sts 0x03D8, r1
carefree_old = 10;
6f0e: 8a e0 ldi r24, 0x0A ; 10
6f10: 80 93 3d 01 sts 0x013D, r24
}
if(FromNaviCtrl.CompassValue < 0 && MotorenEin && CareFree && BeepMuster == 0xffff) // ungültiger Kompasswert
6f14: 80 91 13 09 lds r24, 0x0913
6f18: 90 91 14 09 lds r25, 0x0914
6f1c: 99 23 and r25, r25
6f1e: ec f4 brge .+58 ; 0x6f5a <ParameterZuordnung+0x70c>
6f20: 80 91 03 04 lds r24, 0x0403
6f24: 88 23 and r24, r24
6f26: c9 f0 breq .+50 ; 0x6f5a <ParameterZuordnung+0x70c>
6f28: 80 91 d8 03 lds r24, 0x03D8
6f2c: 88 23 and r24, r24
6f2e: f9 f0 breq .+62 ; 0x6f6e <ParameterZuordnung+0x720>
6f30: 80 91 a9 02 lds r24, 0x02A9
6f34: 90 91 aa 02 lds r25, 0x02AA
6f38: 01 96 adiw r24, 0x01 ; 1
6f3a: 99 f4 brne .+38 ; 0x6f62 <ParameterZuordnung+0x714>
{
beeptime = 15000;
6f3c: 88 e9 ldi r24, 0x98 ; 152
6f3e: 9a e3 ldi r25, 0x3A ; 58
6f40: 90 93 ce 04 sts 0x04CE, r25
6f44: 80 93 cd 04 sts 0x04CD, r24
BeepMuster = 0xA400;
6f48: 80 e0 ldi r24, 0x00 ; 0
6f4a: 94 ea ldi r25, 0xA4 ; 164
6f4c: 90 93 aa 02 sts 0x02AA, r25
6f50: 80 93 a9 02 sts 0x02A9, r24
CareFree = 0;
6f54: 10 92 d8 03 sts 0x03D8, r1
6f58: 0a c0 rjmp .+20 ; 0x6f6e <ParameterZuordnung+0x720>
}
if(CareFree) { FC_StatusFlags2 |= FC_STATUS2_CAREFREE; /*if(Parameter_AchsKopplung1 < 210) Parameter_AchsKopplung1 += 30;*/} else FC_StatusFlags2 &= ~FC_STATUS2_CAREFREE;
6f5a: 80 91 d8 03 lds r24, 0x03D8
6f5e: 88 23 and r24, r24
6f60: 31 f0 breq .+12 ; 0x6f6e <ParameterZuordnung+0x720>
6f62: 80 91 ca 03 lds r24, 0x03CA
6f66: 81 60 ori r24, 0x01 ; 1
6f68: 80 93 ca 03 sts 0x03CA, r24
6f6c: 05 c0 rjmp .+10 ; 0x6f78 <ParameterZuordnung+0x72a>
6f6e: 80 91 ca 03 lds r24, 0x03CA
6f72: 8e 7f andi r24, 0xFE ; 254
6f74: 80 93 ca 03 sts 0x03CA, r24
}
6f78: df 91 pop r29
6f7a: cf 91 pop r28
6f7c: 1f 91 pop r17
6f7e: 0f 91 pop r16
6f80: ff 90 pop r15
6f82: ef 90 pop r14
6f84: df 90 pop r13
6f86: 08 95 ret
00006f88 <CalcStickGasHover>:
void CalcStickGasHover(void)
{
if(!EE_Parameter.Hoehe_StickNeutralPoint)
6f88: 80 91 54 05 lds r24, 0x0554
6f8c: 81 11 cpse r24, r1
6f8e: 21 c0 rjmp .+66 ; 0x6fd2 <CalcStickGasHover+0x4a>
{
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning;
6f90: 20 91 1a 01 lds r18, 0x011A
6f94: 30 91 1b 01 lds r19, 0x011B
void CalcStickGasHover(void)
{
if(!EE_Parameter.Hoehe_StickNeutralPoint)
{
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value
6f98: 80 91 e8 03 lds r24, 0x03E8
6f9c: 90 91 e9 03 lds r25, 0x03E9
6fa0: 99 23 and r25, r25
6fa2: 0c f4 brge .+2 ; 0x6fa6 <CalcStickGasHover+0x1e>
6fa4: 03 96 adiw r24, 0x03 ; 3
6fa6: ac 01 movw r20, r24
6fa8: 55 95 asr r21
6faa: 47 95 ror r20
6fac: 55 95 asr r21
6fae: 47 95 ror r20
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning;
6fb0: 42 9f mul r20, r18
6fb2: c0 01 movw r24, r0
6fb4: 43 9f mul r20, r19
6fb6: 90 0d add r25, r0
6fb8: 52 9f mul r21, r18
6fba: 90 0d add r25, r0
6fbc: 11 24 eor r1, r1
6fbe: 60 91 53 01 lds r22, 0x0153
6fc2: 70 e0 ldi r23, 0x00 ; 0
6fc4: 0e 94 42 b1 call 0x16284 ; 0x16284 <__udivmodhi4>
6fc8: 70 93 41 01 sts 0x0141, r23
6fcc: 60 93 40 01 sts 0x0140, r22
6fd0: 05 c0 rjmp .+10 ; 0x6fdc <CalcStickGasHover+0x54>
}
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint;
6fd2: 90 e0 ldi r25, 0x00 ; 0
6fd4: 90 93 41 01 sts 0x0141, r25
6fd8: 80 93 40 01 sts 0x0140, r24
LIMIT_MIN_MAX(StickGasHover, 70, 175); // reserve some range for trim up and down
6fdc: 80 91 40 01 lds r24, 0x0140
6fe0: 90 91 41 01 lds r25, 0x0141
6fe4: 87 34 cpi r24, 0x47 ; 71
6fe6: 91 05 cpc r25, r1
6fe8: 38 f4 brcc .+14 ; 0x6ff8 <CalcStickGasHover+0x70>
6fea: 86 e4 ldi r24, 0x46 ; 70
6fec: 90 e0 ldi r25, 0x00 ; 0
6fee: 90 93 41 01 sts 0x0141, r25
6ff2: 80 93 40 01 sts 0x0140, r24
6ff6: 08 95 ret
6ff8: 8f 3a cpi r24, 0xAF ; 175
6ffa: 91 05 cpc r25, r1
6ffc: 30 f0 brcs .+12 ; 0x700a <CalcStickGasHover+0x82>
6ffe: 8f ea ldi r24, 0xAF ; 175
7000: 90 e0 ldi r25, 0x00 ; 0
7002: 90 93 41 01 sts 0x0141, r25
7006: 80 93 40 01 sts 0x0140, r24
700a: 08 95 ret
0000700c <MotorRegler>:
//############################################################################
//
void MotorRegler(void)
//############################################################################
{
700c: 2f 92 push r2
700e: 3f 92 push r3
7010: 4f 92 push r4
7012: 5f 92 push r5
7014: 6f 92 push r6
7016: 7f 92 push r7
7018: 8f 92 push r8
701a: 9f 92 push r9
701c: af 92 push r10
701e: bf 92 push r11
7020: cf 92 push r12
7022: df 92 push r13
7024: ef 92 push r14
7026: ff 92 push r15
7028: 0f 93 push r16
702a: 1f 93 push r17
702c: cf 93 push r28
702e: df 93 push r29
7030: cd b7 in r28, 0x3d ; 61
7032: de b7 in r29, 0x3e ; 62
7034: a6 97 sbiw r28, 0x26 ; 38
7036: 0f b6 in r0, 0x3f ; 63
7038: f8 94 cli
703a: de bf out 0x3e, r29 ; 62
703c: 0f be out 0x3f, r0 ; 63
703e: cd bf out 0x3d, r28 ; 61
static unsigned char delay_neutral = 0;
static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
static signed char move_safety_switch = 0;
int IntegralNickMalFaktor,IntegralRollMalFaktor;
unsigned char i;
Mittelwert();
7040: 0e 94 08 2d call 0x5a10 ; 0x5a10 <Mittelwert>
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gaswert ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!(FC_StatusFlags & (FC_STATUS_EMERGENCY_LANDING | FC_STATUS2_RC_FAILSAVE_ACTIVE)))
7044: 80 91 cb 03 lds r24, 0x03CB
7048: 84 71 andi r24, 0x14 ; 20
704a: a9 f5 brne .+106 ; 0x70b6 <MotorRegler+0xaa>
{
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE)
704c: 80 91 b9 05 lds r24, 0x05B9
7050: 82 ff sbrs r24, 2
7052: 2a c0 rjmp .+84 ; 0x70a8 <MotorRegler+0x9c>
{
if(HoverGas && HoverGas < 150 * STICK_GAIN)
7054: 80 91 e8 03 lds r24, 0x03E8
7058: 90 91 e9 03 lds r25, 0x03E9
705c: 00 97 sbiw r24, 0x00 ; 0
705e: e9 f0 breq .+58 ; 0x709a <MotorRegler+0x8e>
7060: 88 35 cpi r24, 0x58 ; 88
7062: 02 e0 ldi r16, 0x02 ; 2
7064: 90 07 cpc r25, r16
7066: cc f4 brge .+50 ; 0x709a <MotorRegler+0x8e>
{
HooverGasEmergencyPercent = (HoverGas/(STICK_GAIN) * EE_Parameter.NotGas) / 100; // i.e. 80% of Hovergas
7068: 9c 01 movw r18, r24
706a: 99 23 and r25, r25
706c: 14 f4 brge .+4 ; 0x7072 <MotorRegler+0x66>
706e: 2d 5f subi r18, 0xFD ; 253
7070: 3f 4f sbci r19, 0xFF ; 255
7072: 35 95 asr r19
7074: 27 95 ror r18
7076: 35 95 asr r19
7078: 27 95 ror r18
707a: 40 91 63 05 lds r20, 0x0563
707e: 42 9f mul r20, r18
7080: c0 01 movw r24, r0
7082: 43 9f mul r20, r19
7084: 90 0d add r25, r0
7086: 11 24 eor r1, r1
7088: 64 e6 ldi r22, 0x64 ; 100
708a: 70 e0 ldi r23, 0x00 ; 0
708c: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
7090: 70 93 c8 03 sts 0x03C8, r23
7094: 60 93 c7 03 sts 0x03C7, r22
7098: 0e c0 rjmp .+28 ; 0x70b6 <MotorRegler+0xaa>
}
else HooverGasEmergencyPercent = 45; // default if the Hoovergas was could not calculated yet
709a: 8d e2 ldi r24, 0x2D ; 45
709c: 90 e0 ldi r25, 0x00 ; 0
709e: 90 93 c8 03 sts 0x03C8, r25
70a2: 80 93 c7 03 sts 0x03C7, r24
70a6: 07 c0 rjmp .+14 ; 0x70b6 <MotorRegler+0xaa>
} else HooverGasEmergencyPercent = EE_Parameter.NotGas;
70a8: 80 91 63 05 lds r24, 0x0563
70ac: 90 e0 ldi r25, 0x00 ; 0
70ae: 90 93 c8 03 sts 0x03C8, r25
70b2: 80 93 c7 03 sts 0x03C7, r24
}
if(GasIsZeroCnt == 30000) // in that case we have RC-Lost, but the MK is probably landed
70b6: 20 91 c5 03 lds r18, 0x03C5
70ba: 30 91 c6 03 lds r19, 0x03C6
70be: 20 33 cpi r18, 0x30 ; 48
70c0: 15 e7 ldi r17, 0x75 ; 117
70c2: 31 07 cpc r19, r17
70c4: 59 f4 brne .+22 ; 0x70dc <MotorRegler+0xd0>
{
StickGas = 0; // Hold Gas down in that case
70c6: 10 92 0f 04 sts 0x040F, r1
70ca: 10 92 0e 04 sts 0x040E, r1
HooverGasEmergencyPercent = MIN_GAS;
70ce: 80 91 2c 06 lds r24, 0x062C
70d2: 90 e0 ldi r25, 0x00 ; 0
70d4: 90 93 c8 03 sts 0x03C8, r25
70d8: 80 93 c7 03 sts 0x03C7, r24
}
GasMischanteil = StickGas;
70dc: 80 91 0e 04 lds r24, 0x040E
70e0: 90 91 0f 04 lds r25, 0x040F
if(GasMischanteil < MIN_GAS + 10) GasMischanteil = MIN_GAS + 10;
70e4: 20 90 2c 06 lds r2, 0x062C
70e8: 31 2c mov r3, r1
70ea: 4a e0 ldi r20, 0x0A ; 10
70ec: 24 0e add r2, r20
70ee: 31 1c adc r3, r1
70f0: 28 16 cp r2, r24
70f2: 39 06 cpc r3, r25
70f4: 0c f4 brge .+2 ; 0x70f8 <MotorRegler+0xec>
70f6: 1c 01 movw r2, r24
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Empfang schlecht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay < 100 && !(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE))
70f8: 80 91 04 04 lds r24, 0x0404
70fc: 84 36 cpi r24, 0x64 ; 100
70fe: a0 f5 brcc .+104 ; 0x7168 <MotorRegler+0x15c>
7100: 80 91 ca 03 lds r24, 0x03CA
7104: 82 fd sbrc r24, 2
7106: 30 c0 rjmp .+96 ; 0x7168 <MotorRegler+0x15c>
{
if(RcLostTimer) RcLostTimer--;
7108: 80 91 a2 03 lds r24, 0x03A2
710c: 90 91 a3 03 lds r25, 0x03A3
7110: 00 97 sbiw r24, 0x00 ; 0
7112: 31 f0 breq .+12 ; 0x7120 <MotorRegler+0x114>
7114: 01 97 sbiw r24, 0x01 ; 1
7116: 90 93 a3 03 sts 0x03A3, r25
711a: 80 93 a2 03 sts 0x03A2, r24
711e: 0b c0 rjmp .+22 ; 0x7136 <MotorRegler+0x12a>
else
{
MotorenEin = 0;
7120: 10 92 03 04 sts 0x0403, r1
modell_fliegt = 0;
7124: 10 92 cd 03 sts 0x03CD, r1
7128: 10 92 cc 03 sts 0x03CC, r1
FC_StatusFlags &= ~(FC_STATUS_EMERGENCY_LANDING | FC_STATUS_FLY);
712c: 80 91 cb 03 lds r24, 0x03CB
7130: 8d 7e andi r24, 0xED ; 237
7132: 80 93 cb 03 sts 0x03CB, r24
}
ROT_ON;
7136: 28 9a sbi 0x05, 0 ; 5
if(modell_fliegt > 1000 && Capacity.MinOfMaxPWM > 100) // wahrscheinlich in der Luft --> langsam absenken
7138: 80 91 cc 03 lds r24, 0x03CC
713c: 90 91 cd 03 lds r25, 0x03CD
7140: 89 3e cpi r24, 0xE9 ; 233
7142: 93 40 sbci r25, 0x03 ; 3
7144: 70 f0 brcs .+28 ; 0x7162 <MotorRegler+0x156>
7146: 80 91 1b 05 lds r24, 0x051B
714a: 85 36 cpi r24, 0x65 ; 101
714c: 50 f0 brcs .+20 ; 0x7162 <MotorRegler+0x156>
{
GasMischanteil = HooverGasEmergencyPercent;
714e: 20 90 c7 03 lds r2, 0x03C7
7152: 30 90 c8 03 lds r3, 0x03C8
FC_StatusFlags |= FC_STATUS_EMERGENCY_LANDING;
7156: 80 91 cb 03 lds r24, 0x03CB
715a: 80 61 ori r24, 0x10 ; 16
715c: 80 93 cb 03 sts 0x03CB, r24
7160: f1 c5 rjmp .+3042 ; 0x7d44 <MotorRegler+0xd38>
}
else
{
MotorenEin = 0;
7162: 10 92 03 04 sts 0x0403, r1
7166: ee c5 rjmp .+3036 ; 0x7d44 <MotorRegler+0xd38>
}
else
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang gut
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay > 140)
7168: 80 91 04 04 lds r24, 0x0404
716c: 8d 38 cpi r24, 0x8D ; 141
716e: 08 f4 brcc .+2 ; 0x7172 <MotorRegler+0x166>
7170: bf c5 rjmp .+2942 ; 0x7cf0 <MotorRegler+0xce4>
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
static unsigned int trigger = 1000;
static unsigned char old_switch = 100;
if(EE_Parameter.StartLandChannel && EE_Parameter.LandingSpeed)
7172: 80 91 af 05 lds r24, 0x05AF
7176: 88 23 and r24, r24
7178: 09 f4 brne .+2 ; 0x717c <MotorRegler+0x170>
717a: 4d c0 rjmp .+154 ; 0x7216 <MotorRegler+0x20a>
717c: 90 91 b0 05 lds r25, 0x05B0
7180: 99 23 and r25, r25
7182: 09 f4 brne .+2 ; 0x7186 <MotorRegler+0x17a>
7184: 48 c0 rjmp .+144 ; 0x7216 <MotorRegler+0x20a>
{
if(PPM_in[EE_Parameter.StartLandChannel] > 50)
7186: 90 e0 ldi r25, 0x00 ; 0
7188: fc 01 movw r30, r24
718a: ee 0f add r30, r30
718c: ff 1f adc r31, r31
718e: ef 5c subi r30, 0xCF ; 207
7190: f7 4f sbci r31, 0xF7 ; 247
7192: 20 81 ld r18, Z
7194: 31 81 ldd r19, Z+1 ; 0x01
7196: 23 33 cpi r18, 0x33 ; 51
7198: 31 05 cpc r19, r1
719a: cc f0 brlt .+50 ; 0x71ce <MotorRegler+0x1c2>
{
if(old_switch == 50) if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) { FC_StatusFlags2 |= FC_STATUS2_AUTO_STARTING; SpeakHoTT = SPEAK_RISING;}
719c: 80 91 1f 01 lds r24, 0x011F
71a0: 82 33 cpi r24, 0x32 ; 50
71a2: 61 f4 brne .+24 ; 0x71bc <MotorRegler+0x1b0>
71a4: 80 91 ca 03 lds r24, 0x03CA
71a8: 85 ff sbrs r24, 5
71aa: 08 c0 rjmp .+16 ; 0x71bc <MotorRegler+0x1b0>
71ac: 80 91 ca 03 lds r24, 0x03CA
71b0: 80 64 ori r24, 0x40 ; 64
71b2: 80 93 ca 03 sts 0x03CA, r24
71b6: 80 e3 ldi r24, 0x30 ; 48
71b8: 80 93 57 01 sts 0x0157, r24
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING;
71bc: 80 91 ca 03 lds r24, 0x03CA
71c0: 8f 77 andi r24, 0x7F ; 127
71c2: 80 93 ca 03 sts 0x03CA, r24
old_switch = 150;
71c6: 86 e9 ldi r24, 0x96 ; 150
71c8: 80 93 1f 01 sts 0x011F, r24
71cc: 24 c0 rjmp .+72 ; 0x7216 <MotorRegler+0x20a>
}
else
if(PPM_in[EE_Parameter.StartLandChannel] < -50)
71ce: fc 01 movw r30, r24
71d0: ee 0f add r30, r30
71d2: ff 1f adc r31, r31
71d4: ef 5c subi r30, 0xCF ; 207
71d6: f7 4f sbci r31, 0xF7 ; 247
71d8: 80 81 ld r24, Z
71da: 91 81 ldd r25, Z+1 ; 0x01
71dc: 8e 3c cpi r24, 0xCE ; 206
71de: 9f 4f sbci r25, 0xFF ; 255
71e0: ac f4 brge .+42 ; 0x720c <MotorRegler+0x200>
{
if(old_switch == 150) { FC_StatusFlags2 |= FC_STATUS2_AUTO_LANDING; SpeakHoTT = SPEAK_SINKING;}
71e2: 80 91 1f 01 lds r24, 0x011F
71e6: 86 39 cpi r24, 0x96 ; 150
71e8: 41 f4 brne .+16 ; 0x71fa <MotorRegler+0x1ee>
71ea: 80 91 ca 03 lds r24, 0x03CA
71ee: 80 68 ori r24, 0x80 ; 128
71f0: 80 93 ca 03 sts 0x03CA, r24
71f4: 8f e2 ldi r24, 0x2F ; 47
71f6: 80 93 57 01 sts 0x0157, r24
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_STARTING;
71fa: 80 91 ca 03 lds r24, 0x03CA
71fe: 8f 7b andi r24, 0xBF ; 191
7200: 80 93 ca 03 sts 0x03CA, r24
old_switch = 50;
7204: 82 e3 ldi r24, 0x32 ; 50
7206: 80 93 1f 01 sts 0x011F, r24
720a: 05 c0 rjmp .+10 ; 0x7216 <MotorRegler+0x20a>
}
else
{
FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING);
720c: 80 91 ca 03 lds r24, 0x03CA
7210: 8f 73 andi r24, 0x3F ; 63
7212: 80 93 ca 03 sts 0x03CA, r24
}
}
#endif
FC_StatusFlags &= ~FC_STATUS_EMERGENCY_LANDING;
7216: 80 91 cb 03 lds r24, 0x03CB
721a: 8f 7e andi r24, 0xEF ; 239
721c: 80 93 cb 03 sts 0x03CB, r24
RcLostTimer = EE_Parameter.NotGasZeit * 50;
7220: 80 91 64 05 lds r24, 0x0564
7224: 72 e3 ldi r23, 0x32 ; 50
7226: 87 9f mul r24, r23
7228: c0 01 movw r24, r0
722a: 11 24 eor r1, r1
722c: 90 93 a3 03 sts 0x03A3, r25
7230: 80 93 a2 03 sts 0x03A2, r24
if(GasMischanteil > 40 && MotorenEin)
7234: 89 e2 ldi r24, 0x29 ; 41
7236: 28 16 cp r2, r24
7238: 31 04 cpc r3, r1
723a: 8c f0 brlt .+34 ; 0x725e <MotorRegler+0x252>
723c: 80 91 03 04 lds r24, 0x0403
7240: 88 23 and r24, r24
7242: 69 f0 breq .+26 ; 0x725e <MotorRegler+0x252>
{
if(modell_fliegt < 0xffff) modell_fliegt++;
7244: 80 91 cc 03 lds r24, 0x03CC
7248: 90 91 cd 03 lds r25, 0x03CD
724c: 8f 3f cpi r24, 0xFF ; 255
724e: af ef ldi r26, 0xFF ; 255
7250: 9a 07 cpc r25, r26
7252: b1 f1 breq .+108 ; 0x72c0 <MotorRegler+0x2b4>
7254: 01 96 adiw r24, 0x01 ; 1
7256: 90 93 cd 03 sts 0x03CD, r25
725a: 80 93 cc 03 sts 0x03CC, r24
}
if((modell_fliegt < 256))
725e: 80 91 cc 03 lds r24, 0x03CC
7262: 90 91 cd 03 lds r25, 0x03CD
7266: 8f 3f cpi r24, 0xFF ; 255
7268: 91 05 cpc r25, r1
726a: 09 f0 breq .+2 ; 0x726e <MotorRegler+0x262>
726c: 48 f5 brcc .+82 ; 0x72c0 <MotorRegler+0x2b4>
{
SummeNick = 0;
726e: 10 92 26 04 sts 0x0426, r1
7272: 10 92 27 04 sts 0x0427, r1
7276: 10 92 28 04 sts 0x0428, r1
727a: 10 92 29 04 sts 0x0429, r1
SummeRoll = 0;
727e: 10 92 22 04 sts 0x0422, r1
7282: 10 92 23 04 sts 0x0423, r1
7286: 10 92 24 04 sts 0x0424, r1
728a: 10 92 25 04 sts 0x0425, r1
sollGier = 0;
728e: 10 92 9e 03 sts 0x039E, r1
7292: 10 92 9f 03 sts 0x039F, r1
7296: 10 92 a0 03 sts 0x03A0, r1
729a: 10 92 a1 03 sts 0x03A1, r1
Mess_Integral_Gier = 0;
729e: 10 92 2e 04 sts 0x042E, r1
72a2: 10 92 2f 04 sts 0x042F, r1
72a6: 10 92 30 04 sts 0x0430, r1
72aa: 10 92 31 04 sts 0x0431, r1
FC_StatusFlags2 |= FC_STATUS2_WAIT_FOR_TAKEOFF;
72ae: 80 91 ca 03 lds r24, 0x03CA
72b2: 80 62 ori r24, 0x20 ; 32
72b4: 80 93 ca 03 sts 0x03CA, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
old_switch = 100;
72b8: 84 e6 ldi r24, 0x64 ; 100
72ba: 80 93 1f 01 sts 0x011F, r24
72be: 38 c1 rjmp .+624 ; 0x7530 <MotorRegler+0x524>
#endif
}
else
{
FC_StatusFlags |= FC_STATUS_FLY;
72c0: 80 91 cb 03 lds r24, 0x03CB
72c4: 82 60 ori r24, 0x02 ; 2
72c6: 80 93 cb 03 sts 0x03CB, r24
if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF)
72ca: 80 91 ca 03 lds r24, 0x03CA
72ce: 85 ff sbrs r24, 5
72d0: 9a c0 rjmp .+308 ; 0x7406 <MotorRegler+0x3fa>
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if((NC_To_FC_Flags & NC_TO_FC_AUTOSTART || FC_StatusFlags2 & FC_STATUS2_AUTO_STARTING) && (VarioCharacter == '=') && ACC_AltitudeControl)
72d2: 80 91 b7 04 lds r24, 0x04B7
72d6: 28 2f mov r18, r24
72d8: 24 70 andi r18, 0x04 ; 4
72da: 82 fd sbrc r24, 2
72dc: 04 c0 rjmp .+8 ; 0x72e6 <MotorRegler+0x2da>
72de: 80 91 ca 03 lds r24, 0x03CA
72e2: 86 ff sbrs r24, 6
72e4: 2a c0 rjmp .+84 ; 0x733a <MotorRegler+0x32e>
72e6: 80 91 20 01 lds r24, 0x0120
72ea: 8d 33 cpi r24, 0x3D ; 61
72ec: 31 f5 brne .+76 ; 0x733a <MotorRegler+0x32e>
72ee: 80 91 c2 03 lds r24, 0x03C2
72f2: 88 23 and r24, r24
72f4: 11 f1 breq .+68 ; 0x733a <MotorRegler+0x32e>
{
FromNC_AltitudeSpeed = 80;
72f6: 80 e5 ldi r24, 0x50 ; 80
72f8: 80 93 f3 03 sts 0x03F3, r24
FromNC_AltitudeSetpoint = 500;
72fc: 84 ef ldi r24, 0xF4 ; 244
72fe: 91 e0 ldi r25, 0x01 ; 1
7300: a0 e0 ldi r26, 0x00 ; 0
7302: b0 e0 ldi r27, 0x00 ; 0
7304: 80 93 f4 03 sts 0x03F4, r24
7308: 90 93 f5 03 sts 0x03F5, r25
730c: a0 93 f6 03 sts 0x03F6, r26
7310: b0 93 f7 03 sts 0x03F7, r27
SollHoehe = 500;
7314: 80 93 fa 03 sts 0x03FA, r24
7318: 90 93 fb 03 sts 0x03FB, r25
731c: a0 93 fc 03 sts 0x03FC, r26
7320: b0 93 fd 03 sts 0x03FD, r27
trigger = 1000;
7324: 88 ee ldi r24, 0xE8 ; 232
7326: 93 e0 ldi r25, 0x03 ; 3
7328: 90 93 1e 01 sts 0x011E, r25
732c: 80 93 1d 01 sts 0x011D, r24
if(NC_To_FC_Flags & NC_TO_FC_AUTOSTART) SpeakHoTT = SPEAK_NEXT_WP;
7330: 22 23 and r18, r18
7332: 19 f0 breq .+6 ; 0x733a <MotorRegler+0x32e>
7334: 8d e0 ldi r24, 0x0D ; 13
7336: 80 93 57 01 sts 0x0157, r24
}
*/
}
// else FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING);
#endif
if(HoehenWertF > 150 || HoehenWert < -350 || !(Parameter_GlobalConfig & CFG_HOEHENREGELUNG))
733a: 80 91 4a 03 lds r24, 0x034A
733e: 90 91 4b 03 lds r25, 0x034B
7342: a0 91 4c 03 lds r26, 0x034C
7346: b0 91 4d 03 lds r27, 0x034D
734a: 87 39 cpi r24, 0x97 ; 151
734c: 91 05 cpc r25, r1
734e: a1 05 cpc r26, r1
7350: b1 05 cpc r27, r1
7352: 8c f4 brge .+34 ; 0x7376 <MotorRegler+0x36a>
7354: 80 91 fe 03 lds r24, 0x03FE
7358: 90 91 ff 03 lds r25, 0x03FF
735c: a0 91 00 04 lds r26, 0x0400
7360: b0 91 01 04 lds r27, 0x0401
7364: 82 3a cpi r24, 0xA2 ; 162
7366: 9e 4f sbci r25, 0xFE ; 254
7368: af 4f sbci r26, 0xFF ; 255
736a: bf 4f sbci r27, 0xFF ; 255
736c: 24 f0 brlt .+8 ; 0x7376 <MotorRegler+0x36a>
736e: 80 91 5c 06 lds r24, 0x065C
7372: 80 fd sbrc r24, 0
7374: 21 c0 rjmp .+66 ; 0x73b8 <MotorRegler+0x3ac>
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
trigger = 1000;
7376: 88 ee ldi r24, 0xE8 ; 232
7378: 93 e0 ldi r25, 0x03 ; 3
737a: 90 93 1e 01 sts 0x011E, r25
737e: 80 93 1d 01 sts 0x011D, r24
if(FC_StatusFlags2 & FC_STATUS2_AUTO_STARTING) { FromNC_AltitudeSpeed = 0; SollHoehe = 300;/*HoehenWertF + 100;*/}
7382: 80 91 ca 03 lds r24, 0x03CA
7386: 86 ff sbrs r24, 6
7388: 0f c0 rjmp .+30 ; 0x73a8 <MotorRegler+0x39c>
738a: 10 92 f3 03 sts 0x03F3, r1
738e: 8c e2 ldi r24, 0x2C ; 44
7390: 91 e0 ldi r25, 0x01 ; 1
7392: a0 e0 ldi r26, 0x00 ; 0
7394: b0 e0 ldi r27, 0x00 ; 0
7396: 80 93 fa 03 sts 0x03FA, r24
739a: 90 93 fb 03 sts 0x03FB, r25
739e: a0 93 fc 03 sts 0x03FC, r26
73a2: b0 93 fd 03 sts 0x03FD, r27
73a6: 03 c0 rjmp .+6 ; 0x73ae <MotorRegler+0x3a2>
else SpeakHoTT = SPEAK_RISING;
73a8: 80 e3 ldi r24, 0x30 ; 48
73aa: 80 93 57 01 sts 0x0157, r24
#endif
FC_StatusFlags2 &= ~(FC_STATUS2_WAIT_FOR_TAKEOFF | FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING);
73ae: 80 91 ca 03 lds r24, 0x03CA
73b2: 8f 71 andi r24, 0x1F ; 31
73b4: 80 93 ca 03 sts 0x03CA, r24
}
SummeNick = 0;
73b8: 10 92 26 04 sts 0x0426, r1
73bc: 10 92 27 04 sts 0x0427, r1
73c0: 10 92 28 04 sts 0x0428, r1
73c4: 10 92 29 04 sts 0x0429, r1
SummeRoll = 0;
73c8: 10 92 22 04 sts 0x0422, r1
73cc: 10 92 23 04 sts 0x0423, r1
73d0: 10 92 24 04 sts 0x0424, r1
73d4: 10 92 25 04 sts 0x0425, r1
Mess_Integral_Gier = 0;
73d8: 10 92 2e 04 sts 0x042E, r1
73dc: 10 92 2f 04 sts 0x042F, r1
73e0: 10 92 30 04 sts 0x0430, r1
73e4: 10 92 31 04 sts 0x0431, r1
// sollGier = 0;
if(modell_fliegt > 1000) modell_fliegt = 1000; // for the Hooverpoint-Estimation
73e8: 80 91 cc 03 lds r24, 0x03CC
73ec: 90 91 cd 03 lds r25, 0x03CD
73f0: 89 3e cpi r24, 0xE9 ; 233
73f2: 93 40 sbci r25, 0x03 ; 3
73f4: 08 f4 brcc .+2 ; 0x73f8 <MotorRegler+0x3ec>
73f6: 9c c0 rjmp .+312 ; 0x7530 <MotorRegler+0x524>
73f8: 88 ee ldi r24, 0xE8 ; 232
73fa: 93 e0 ldi r25, 0x03 ; 3
73fc: 90 93 cd 03 sts 0x03CD, r25
7400: 80 93 cc 03 sts 0x03CC, r24
7404: 95 c0 rjmp .+298 ; 0x7530 <MotorRegler+0x524>
}
else // Flying mode
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if((FC_StatusFlags2 & FC_STATUS2_AUTO_LANDING) && (VarioCharacter == 'v' || VarioCharacter == '=') && ACC_AltitudeControl)
7406: 80 91 ca 03 lds r24, 0x03CA
740a: 88 23 and r24, r24
740c: d4 f4 brge .+52 ; 0x7442 <MotorRegler+0x436>
740e: 80 91 20 01 lds r24, 0x0120
7412: 86 37 cpi r24, 0x76 ; 118
7414: 11 f0 breq .+4 ; 0x741a <MotorRegler+0x40e>
7416: 8d 33 cpi r24, 0x3D ; 61
7418: a1 f4 brne .+40 ; 0x7442 <MotorRegler+0x436>
741a: 80 91 c2 03 lds r24, 0x03C2
741e: 88 23 and r24, r24
7420: 81 f0 breq .+32 ; 0x7442 <MotorRegler+0x436>
{
FromNC_AltitudeSpeed = EE_Parameter.LandingSpeed;
7422: 80 91 b0 05 lds r24, 0x05B0
7426: 80 93 f3 03 sts 0x03F3, r24
FromNC_AltitudeSetpoint = -20000;
742a: 80 ee ldi r24, 0xE0 ; 224
742c: 91 eb ldi r25, 0xB1 ; 177
742e: af ef ldi r26, 0xFF ; 255
7430: bf ef ldi r27, 0xFF ; 255
7432: 80 93 f4 03 sts 0x03F4, r24
7436: 90 93 f5 03 sts 0x03F5, r25
743a: a0 93 f6 03 sts 0x03F6, r26
743e: b0 93 f7 03 sts 0x03F7, r27
}
if(trigger < 1000)
7442: 80 91 1d 01 lds r24, 0x011D
7446: 90 91 1e 01 lds r25, 0x011E
744a: 88 3e cpi r24, 0xE8 ; 232
744c: 03 e0 ldi r16, 0x03 ; 3
744e: 90 07 cpc r25, r16
7450: 08 f0 brcs .+2 ; 0x7454 <MotorRegler+0x448>
7452: 49 c0 rjmp .+146 ; 0x74e6 <MotorRegler+0x4da>
{
trigger++;
7454: 9c 01 movw r18, r24
7456: 2f 5f subi r18, 0xFF ; 255
7458: 3f 4f sbci r19, 0xFF ; 255
745a: 30 93 1e 01 sts 0x011E, r19
745e: 20 93 1d 01 sts 0x011D, r18
SummeNick = 0;
7462: 10 92 26 04 sts 0x0426, r1
7466: 10 92 27 04 sts 0x0427, r1
746a: 10 92 28 04 sts 0x0428, r1
746e: 10 92 29 04 sts 0x0429, r1
SummeRoll = 0;
7472: 10 92 22 04 sts 0x0422, r1
7476: 10 92 23 04 sts 0x0423, r1
747a: 10 92 24 04 sts 0x0424, r1
747e: 10 92 25 04 sts 0x0425, r1
Mess_Integral_Gier = 0;
7482: 10 92 2e 04 sts 0x042E, r1
7486: 10 92 2f 04 sts 0x042F, r1
748a: 10 92 30 04 sts 0x0430, r1
748e: 10 92 31 04 sts 0x0431, r1
SollHoehe = HoehenWertF - 300;
7492: 80 91 4a 03 lds r24, 0x034A
7496: 90 91 4b 03 lds r25, 0x034B
749a: a0 91 4c 03 lds r26, 0x034C
749e: b0 91 4d 03 lds r27, 0x034D
74a2: 8c 52 subi r24, 0x2C ; 44
74a4: 91 40 sbci r25, 0x01 ; 1
74a6: a1 09 sbc r26, r1
74a8: b1 09 sbc r27, r1
74aa: 80 93 fa 03 sts 0x03FA, r24
74ae: 90 93 fb 03 sts 0x03FB, r25
74b2: a0 93 fc 03 sts 0x03FC, r26
74b6: b0 93 fd 03 sts 0x03FD, r27
if(trigger == 1000 && FC_StatusFlags2 & FC_STATUS2_AUTO_LANDING && VarioCharacter != '+')
74ba: 28 3e cpi r18, 0xE8 ; 232
74bc: 33 40 sbci r19, 0x03 ; 3
74be: c1 f5 brne .+112 ; 0x7530 <MotorRegler+0x524>
74c0: 80 91 ca 03 lds r24, 0x03CA
74c4: 88 23 and r24, r24
74c6: a4 f5 brge .+104 ; 0x7530 <MotorRegler+0x524>
74c8: 80 91 20 01 lds r24, 0x0120
74cc: 8b 32 cpi r24, 0x2B ; 43
74ce: 81 f1 breq .+96 ; 0x7530 <MotorRegler+0x524>
{
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING;
74d0: 80 91 ca 03 lds r24, 0x03CA
74d4: 8f 77 andi r24, 0x7F ; 127
74d6: 80 93 ca 03 sts 0x03CA, r24
FC_StatusFlags2 |= FC_STATUS2_WAIT_FOR_TAKEOFF; // go back into starting state
74da: 80 91 ca 03 lds r24, 0x03CA
74de: 80 62 ori r24, 0x20 ; 32
74e0: 80 93 ca 03 sts 0x03CA, r24
74e4: 25 c0 rjmp .+74 ; 0x7530 <MotorRegler+0x524>
}
}
else
if(ACC_AltitudeControl && (VarioCharacter == 'v' || VarioCharacter == '-') && HoehenWert < 1000 /*&& FromNC_AltitudeSetpoint < 0*/)
74e6: 80 91 c2 03 lds r24, 0x03C2
74ea: 88 23 and r24, r24
74ec: 09 f1 breq .+66 ; 0x7530 <MotorRegler+0x524>
74ee: 80 91 20 01 lds r24, 0x0120
74f2: 86 37 cpi r24, 0x76 ; 118
74f4: 11 f0 breq .+4 ; 0x74fa <MotorRegler+0x4ee>
74f6: 8d 32 cpi r24, 0x2D ; 45
74f8: d9 f4 brne .+54 ; 0x7530 <MotorRegler+0x524>
74fa: 80 91 fe 03 lds r24, 0x03FE
74fe: 90 91 ff 03 lds r25, 0x03FF
7502: a0 91 00 04 lds r26, 0x0400
7506: b0 91 01 04 lds r27, 0x0401
750a: 88 3e cpi r24, 0xE8 ; 232
750c: 93 40 sbci r25, 0x03 ; 3
750e: a1 05 cpc r26, r1
7510: b1 05 cpc r27, r1
7512: 74 f4 brge .+28 ; 0x7530 <MotorRegler+0x524>
{
if(Aktuell_az > 940)
7514: 80 91 06 05 lds r24, 0x0506
7518: 90 91 07 05 lds r25, 0x0507
751c: 8d 3a cpi r24, 0xAD ; 173
751e: 93 40 sbci r25, 0x03 ; 3
7520: 3c f0 brlt .+14 ; 0x7530 <MotorRegler+0x524>
{
trigger = 0;
7522: 10 92 1e 01 sts 0x011E, r1
7526: 10 92 1d 01 sts 0x011D, r1
SpeakHoTT = SPEAK_LANDING;
752a: 8e e0 ldi r24, 0x0E ; 14
752c: 80 93 57 01 sts 0x0157, r24
};
}
#endif
}
} // end of: modell_fliegt > 256
if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0 && !(NC_To_FC_Flags & NC_TO_FC_SIMULATION_ACTIVE))
7530: e0 91 41 05 lds r30, 0x0541
7534: f0 e0 ldi r31, 0x00 ; 0
7536: ee 0f add r30, r30
7538: ff 1f adc r31, r31
753a: ef 5c subi r30, 0xCF ; 207
753c: f7 4f sbci r31, 0xF7 ; 247
753e: 80 81 ld r24, Z
7540: 91 81 ldd r25, Z+1 ; 0x01
7542: 81 35 cpi r24, 0x51 ; 81
7544: 91 05 cpc r25, r1
7546: 0c f4 brge .+2 ; 0x754a <MotorRegler+0x53e>
7548: 87 c1 rjmp .+782 ; 0x7858 <MotorRegler+0x84c>
754a: 80 91 03 04 lds r24, 0x0403
754e: 81 11 cpse r24, r1
7550: 83 c1 rjmp .+774 ; 0x7858 <MotorRegler+0x84c>
7552: 80 91 b7 04 lds r24, 0x04B7
7556: 84 fd sbrc r24, 4
7558: 7f c1 rjmp .+766 ; 0x7858 <MotorRegler+0x84c>
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// auf Nullwerte kalibrieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 75) // Neutralwerte
755a: e0 91 42 05 lds r30, 0x0542
755e: f0 e0 ldi r31, 0x00 ; 0
7560: ee 0f add r30, r30
7562: ff 1f adc r31, r31
7564: ef 5c subi r30, 0xCF ; 207
7566: f7 4f sbci r31, 0xF7 ; 247
7568: 80 81 ld r24, Z
756a: 91 81 ldd r25, Z+1 ; 0x01
756c: 99 23 and r25, r25
756e: 1c f4 brge .+6 ; 0x7576 <MotorRegler+0x56a>
7570: 91 95 neg r25
7572: 81 95 neg r24
7574: 91 09 sbc r25, r1
7576: 8c 34 cpi r24, 0x4C ; 76
7578: 91 05 cpc r25, r1
757a: 0c f4 brge .+2 ; 0x757e <MotorRegler+0x572>
757c: 6b c1 rjmp .+726 ; 0x7854 <MotorRegler+0x848>
{
if(++delay_neutral > 200) // nicht sofort
757e: 80 91 9d 03 lds r24, 0x039D
7582: 8f 5f subi r24, 0xFF ; 255
7584: 89 3c cpi r24, 0xC9 ; 201
7586: 18 f4 brcc .+6 ; 0x758e <MotorRegler+0x582>
7588: 80 93 9d 03 sts 0x039D, r24
758c: 65 c1 rjmp .+714 ; 0x7858 <MotorRegler+0x84c>
{
unsigned char setting = 0;
delay_neutral = 0;
758e: 10 92 9d 03 sts 0x039D, r1
modell_fliegt = 0;
7592: 10 92 cd 03 sts 0x03CD, r1
7596: 10 92 cc 03 sts 0x03CC, r1
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
759a: 20 91 3f 05 lds r18, 0x053F
759e: 30 e0 ldi r19, 0x00 ; 0
75a0: f9 01 movw r30, r18
75a2: ee 0f add r30, r30
75a4: ff 1f adc r31, r31
75a6: ef 5c subi r30, 0xCF ; 207
75a8: f7 4f sbci r31, 0xF7 ; 247
75aa: 80 81 ld r24, Z
75ac: 91 81 ldd r25, Z+1 ; 0x01
75ae: 87 34 cpi r24, 0x47 ; 71
75b0: 91 05 cpc r25, r1
75b2: 94 f4 brge .+36 ; 0x75d8 <MotorRegler+0x5cc>
75b4: e0 91 40 05 lds r30, 0x0540
75b8: f0 e0 ldi r31, 0x00 ; 0
75ba: ee 0f add r30, r30
75bc: ff 1f adc r31, r31
75be: ef 5c subi r30, 0xCF ; 207
75c0: f7 4f sbci r31, 0xF7 ; 247
75c2: 80 81 ld r24, Z
75c4: 91 81 ldd r25, Z+1 ; 0x01
75c6: 99 23 and r25, r25
75c8: 1c f4 brge .+6 ; 0x75d0 <MotorRegler+0x5c4>
75ca: 91 95 neg r25
75cc: 81 95 neg r24
75ce: 91 09 sbc r25, r1
75d0: 87 34 cpi r24, 0x47 ; 71
75d2: 91 05 cpc r25, r1
75d4: 0c f4 brge .+2 ; 0x75d8 <MotorRegler+0x5cc>
75d6: 8c c0 rjmp .+280 ; 0x76f0 <MotorRegler+0x6e4>
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -70) setting = 1;
75d8: 40 91 40 05 lds r20, 0x0540
75dc: 50 e0 ldi r21, 0x00 ; 0
75de: fa 01 movw r30, r20
75e0: ee 0f add r30, r30
75e2: ff 1f adc r31, r31
75e4: ef 5c subi r30, 0xCF ; 207
75e6: f7 4f sbci r31, 0xF7 ; 247
75e8: 80 81 ld r24, Z
75ea: 91 81 ldd r25, Z+1 ; 0x01
75ec: 87 34 cpi r24, 0x47 ; 71
75ee: 91 05 cpc r25, r1
75f0: bc f0 brlt .+46 ; 0x7620 <MotorRegler+0x614>
75f2: f9 01 movw r30, r18
75f4: ee 0f add r30, r30
75f6: ff 1f adc r31, r31
75f8: ef 5c subi r30, 0xCF ; 207
75fa: f7 4f sbci r31, 0xF7 ; 247
75fc: 80 81 ld r24, Z
75fe: 91 81 ldd r25, Z+1 ; 0x01
7600: 86 34 cpi r24, 0x46 ; 70
7602: 91 05 cpc r25, r1
7604: 7c f4 brge .+30 ; 0x7624 <MotorRegler+0x618>
7606: f9 01 movw r30, r18
7608: ee 0f add r30, r30
760a: ff 1f adc r31, r31
760c: ef 5c subi r30, 0xCF ; 207
760e: f7 4f sbci r31, 0xF7 ; 247
7610: 80 81 ld r24, Z
7612: 91 81 ldd r25, Z+1 ; 0x01
7614: 11 e0 ldi r17, 0x01 ; 1
7616: 8b 3b cpi r24, 0xBB ; 187
7618: 9f 4f sbci r25, 0xFF ; 255
761a: 2c f4 brge .+10 ; 0x7626 <MotorRegler+0x61a>
761c: 10 e0 ldi r17, 0x00 ; 0
761e: 03 c0 rjmp .+6 ; 0x7626 <MotorRegler+0x61a>
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 75) // Neutralwerte
{
if(++delay_neutral > 200) // nicht sofort
{
unsigned char setting = 0;
7620: 10 e0 ldi r17, 0x00 ; 0
7622: 01 c0 rjmp .+2 ; 0x7626 <MotorRegler+0x61a>
7624: 10 e0 ldi r17, 0x00 ; 0
delay_neutral = 0;
modell_fliegt = 0;
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -70) setting = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
7626: fa 01 movw r30, r20
7628: ee 0f add r30, r30
762a: ff 1f adc r31, r31
762c: ef 5c subi r30, 0xCF ; 207
762e: f7 4f sbci r31, 0xF7 ; 247
7630: 80 81 ld r24, Z
7632: 91 81 ldd r25, Z+1 ; 0x01
7634: 87 34 cpi r24, 0x47 ; 71
7636: 91 05 cpc r25, r1
7638: 5c f0 brlt .+22 ; 0x7650 <MotorRegler+0x644>
763a: f9 01 movw r30, r18
763c: ee 0f add r30, r30
763e: ff 1f adc r31, r31
7640: ef 5c subi r30, 0xCF ; 207
7642: f7 4f sbci r31, 0xF7 ; 247
7644: 80 81 ld r24, Z
7646: 91 81 ldd r25, Z+1 ; 0x01
7648: 87 34 cpi r24, 0x47 ; 71
764a: 91 05 cpc r25, r1
764c: 0c f0 brlt .+2 ; 0x7650 <MotorRegler+0x644>
764e: 12 e0 ldi r17, 0x02 ; 2
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
7650: fa 01 movw r30, r20
7652: ee 0f add r30, r30
7654: ff 1f adc r31, r31
7656: ef 5c subi r30, 0xCF ; 207
7658: f7 4f sbci r31, 0xF7 ; 247
765a: 80 81 ld r24, Z
765c: 91 81 ldd r25, Z+1 ; 0x01
765e: 86 34 cpi r24, 0x46 ; 70
7660: 91 05 cpc r25, r1
7662: 5c f4 brge .+22 ; 0x767a <MotorRegler+0x66e>
7664: f9 01 movw r30, r18
7666: ee 0f add r30, r30
7668: ff 1f adc r31, r31
766a: ef 5c subi r30, 0xCF ; 207
766c: f7 4f sbci r31, 0xF7 ; 247
766e: 80 81 ld r24, Z
7670: 91 81 ldd r25, Z+1 ; 0x01
7672: 87 34 cpi r24, 0x47 ; 71
7674: 91 05 cpc r25, r1
7676: 0c f0 brlt .+2 ; 0x767a <MotorRegler+0x66e>
7678: 13 e0 ldi r17, 0x03 ; 3
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
767a: fa 01 movw r30, r20
767c: ee 0f add r30, r30
767e: ff 1f adc r31, r31
7680: ef 5c subi r30, 0xCF ; 207
7682: f7 4f sbci r31, 0xF7 ; 247
7684: 80 81 ld r24, Z
7686: 91 81 ldd r25, Z+1 ; 0x01
7688: 8a 3b cpi r24, 0xBA ; 186
768a: 9f 4f sbci r25, 0xFF ; 255
768c: 5c f4 brge .+22 ; 0x76a4 <MotorRegler+0x698>
768e: f9 01 movw r30, r18
7690: ee 0f add r30, r30
7692: ff 1f adc r31, r31
7694: ef 5c subi r30, 0xCF ; 207
7696: f7 4f sbci r31, 0xF7 ; 247
7698: 80 81 ld r24, Z
769a: 91 81 ldd r25, Z+1 ; 0x01
769c: 87 34 cpi r24, 0x47 ; 71
769e: 91 05 cpc r25, r1
76a0: 0c f0 brlt .+2 ; 0x76a4 <MotorRegler+0x698>
76a2: 14 e0 ldi r17, 0x04 ; 4
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -70) setting = 5;
76a4: 44 0f add r20, r20
76a6: 55 1f adc r21, r21
76a8: fa 01 movw r30, r20
76aa: ef 5c subi r30, 0xCF ; 207
76ac: f7 4f sbci r31, 0xF7 ; 247
76ae: 80 81 ld r24, Z
76b0: 91 81 ldd r25, Z+1 ; 0x01
76b2: 8a 3b cpi r24, 0xBA ; 186
76b4: 9f 4f sbci r25, 0xFF ; 255
76b6: a4 f4 brge .+40 ; 0x76e0 <MotorRegler+0x6d4>
76b8: f9 01 movw r30, r18
76ba: ee 0f add r30, r30
76bc: ff 1f adc r31, r31
76be: ef 5c subi r30, 0xCF ; 207
76c0: f7 4f sbci r31, 0xF7 ; 247
76c2: 80 81 ld r24, Z
76c4: 91 81 ldd r25, Z+1 ; 0x01
76c6: 86 34 cpi r24, 0x46 ; 70
76c8: 91 05 cpc r25, r1
76ca: 54 f4 brge .+20 ; 0x76e0 <MotorRegler+0x6d4>
76cc: 22 0f add r18, r18
76ce: 33 1f adc r19, r19
76d0: f9 01 movw r30, r18
76d2: ef 5c subi r30, 0xCF ; 207
76d4: f7 4f sbci r31, 0xF7 ; 247
76d6: 80 81 ld r24, Z
76d8: 91 81 ldd r25, Z+1 ; 0x01
76da: 8b 3b cpi r24, 0xBB ; 187
76dc: 9f 4f sbci r25, 0xFF ; 255
76de: 1c f4 brge .+6 ; 0x76e6 <MotorRegler+0x6da>
if(setting) SetActiveParamSet(setting); // aktiven Datensatz merken
76e0: 11 23 and r17, r17
76e2: 39 f0 breq .+14 ; 0x76f2 <MotorRegler+0x6e6>
76e4: 01 c0 rjmp .+2 ; 0x76e8 <MotorRegler+0x6dc>
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -70) setting = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -70) setting = 5;
76e6: 15 e0 ldi r17, 0x05 ; 5
if(setting) SetActiveParamSet(setting); // aktiven Datensatz merken
76e8: 81 2f mov r24, r17
76ea: 0e 94 18 26 call 0x4c30 ; 0x4c30 <SetActiveParamSet>
76ee: 01 c0 rjmp .+2 ; 0x76f2 <MotorRegler+0x6e6>
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 75) // Neutralwerte
{
if(++delay_neutral > 200) // nicht sofort
{
unsigned char setting = 0;
76f0: 10 e0 ldi r17, 0x00 ; 0
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -70) setting = 5;
if(setting) SetActiveParamSet(setting); // aktiven Datensatz merken
}
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 30 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70)
76f2: e0 91 40 05 lds r30, 0x0540
76f6: f0 e0 ldi r31, 0x00 ; 0
76f8: ee 0f add r30, r30
76fa: ff 1f adc r31, r31
76fc: ef 5c subi r30, 0xCF ; 207
76fe: f7 4f sbci r31, 0xF7 ; 247
7700: 20 81 ld r18, Z
7702: 31 81 ldd r19, Z+1 ; 0x01
7704: 33 23 and r19, r19
7706: 1c f4 brge .+6 ; 0x770e <MotorRegler+0x702>
7708: 31 95 neg r19
770a: 21 95 neg r18
770c: 31 09 sbc r19, r1
770e: 2e 31 cpi r18, 0x1E ; 30
7710: 31 05 cpc r19, r1
7712: c4 f4 brge .+48 ; 0x7744 <MotorRegler+0x738>
7714: e0 91 3f 05 lds r30, 0x053F
7718: f0 e0 ldi r31, 0x00 ; 0
771a: ee 0f add r30, r30
771c: ff 1f adc r31, r31
771e: ef 5c subi r30, 0xCF ; 207
7720: f7 4f sbci r31, 0xF7 ; 247
7722: 20 81 ld r18, Z
7724: 31 81 ldd r19, Z+1 ; 0x01
7726: 2a 3b cpi r18, 0xBA ; 186
7728: 3f 4f sbci r19, 0xFF ; 255
772a: 64 f4 brge .+24 ; 0x7744 <MotorRegler+0x738>
{
WinkelOut.CalcState = 1;
772c: 81 e0 ldi r24, 0x01 ; 1
772e: 80 93 7d 0a sts 0x0A7D, r24
CalibrationDone = 0;
7732: 10 92 ef 03 sts 0x03EF, r1
beeptime = 1000;
7736: 88 ee ldi r24, 0xE8 ; 232
7738: 93 e0 ldi r25, 0x03 ; 3
773a: 90 93 ce 04 sts 0x04CE, r25
773e: 80 93 cd 04 sts 0x04CD, r24
7742: 8a c0 rjmp .+276 ; 0x7858 <MotorRegler+0x84c>
}
else
{
ParamSet_ReadFromEEProm(ActiveParamSet);
7744: 80 91 52 01 lds r24, 0x0152
7748: 0e 94 4e 25 call 0x4a9c ; 0x4a9c <ParamSet_ReadFromEEProm>
LipoDetection(0);
774c: 80 e0 ldi r24, 0x00 ; 0
774e: 0e 94 90 59 call 0xb320 ; 0xb320 <LipoDetection>
LIBFC_ReceiverInit(EE_Parameter.Receiver);
7752: 80 91 65 05 lds r24, 0x0565
7756: 0e 94 68 18 call 0x30d0 ; 0x30d0 <LIBFC_ReceiverInit>
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
775a: 80 91 5c 06 lds r24, 0x065C
775e: 80 ff sbrs r24, 0
7760: 10 c0 rjmp .+32 ; 0x7782 <MotorRegler+0x776>
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
7762: 20 91 10 01 lds r18, 0x0110
7766: 30 91 11 01 lds r19, 0x0111
776a: 27 3b cpi r18, 0xB7 ; 183
776c: 33 40 sbci r19, 0x03 ; 3
776e: 38 f4 brcc .+14 ; 0x777e <MotorRegler+0x772>
7770: 20 91 10 01 lds r18, 0x0110
7774: 30 91 11 01 lds r19, 0x0111
7778: 2e 3e cpi r18, 0xEE ; 238
777a: 32 40 sbci r19, 0x02 ; 2
777c: 10 f4 brcc .+4 ; 0x7782 <MotorRegler+0x776>
777e: 0e 94 4b 1b call 0x3696 ; 0x3696 <SucheLuftruckOffset>
}
if(!setting && PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) CalibrationDone = SetNeutral(3);
7782: 11 11 cpse r17, r1
7784: 41 c0 rjmp .+130 ; 0x7808 <MotorRegler+0x7fc>
7786: e0 91 40 05 lds r30, 0x0540
778a: f0 e0 ldi r31, 0x00 ; 0
778c: ee 0f add r30, r30
778e: ff 1f adc r31, r31
7790: ef 5c subi r30, 0xCF ; 207
7792: f7 4f sbci r31, 0xF7 ; 247
7794: 80 81 ld r24, Z
7796: 91 81 ldd r25, Z+1 ; 0x01
7798: 8a 3b cpi r24, 0xBA ; 186
779a: 9f 4f sbci r25, 0xFF ; 255
779c: 94 f4 brge .+36 ; 0x77c2 <MotorRegler+0x7b6>
779e: e0 91 3f 05 lds r30, 0x053F
77a2: f0 e0 ldi r31, 0x00 ; 0
77a4: ee 0f add r30, r30
77a6: ff 1f adc r31, r31
77a8: ef 5c subi r30, 0xCF ; 207
77aa: f7 4f sbci r31, 0xF7 ; 247
77ac: 80 81 ld r24, Z
77ae: 91 81 ldd r25, Z+1 ; 0x01
77b0: 86 34 cpi r24, 0x46 ; 70
77b2: 91 05 cpc r25, r1
77b4: 34 f4 brge .+12 ; 0x77c2 <MotorRegler+0x7b6>
77b6: 83 e0 ldi r24, 0x03 ; 3
77b8: 0e 94 53 29 call 0x52a6 ; 0x52a6 <SetNeutral>
77bc: 80 93 ef 03 sts 0x03EF, r24
77c0: 28 c0 rjmp .+80 ; 0x7812 <MotorRegler+0x806>
else
if(!setting && PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75 && abs(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]) < 70) CalibrationDone = SetNeutral(2); // store ACC values into EEPROM
77c2: e0 91 42 05 lds r30, 0x0542
77c6: f0 e0 ldi r31, 0x00 ; 0
77c8: ee 0f add r30, r30
77ca: ff 1f adc r31, r31
77cc: ef 5c subi r30, 0xCF ; 207
77ce: f7 4f sbci r31, 0xF7 ; 247
77d0: 80 81 ld r24, Z
77d2: 91 81 ldd r25, Z+1 ; 0x01
77d4: 85 3b cpi r24, 0xB5 ; 181
77d6: 9f 4f sbci r25, 0xFF ; 255
77d8: bc f4 brge .+46 ; 0x7808 <MotorRegler+0x7fc>
77da: e0 91 3f 05 lds r30, 0x053F
77de: f0 e0 ldi r31, 0x00 ; 0
77e0: ee 0f add r30, r30
77e2: ff 1f adc r31, r31
77e4: ef 5c subi r30, 0xCF ; 207
77e6: f7 4f sbci r31, 0xF7 ; 247
77e8: 80 81 ld r24, Z
77ea: 91 81 ldd r25, Z+1 ; 0x01
77ec: 99 23 and r25, r25
77ee: 1c f4 brge .+6 ; 0x77f6 <MotorRegler+0x7ea>
77f0: 91 95 neg r25
77f2: 81 95 neg r24
77f4: 91 09 sbc r25, r1
77f6: 86 34 cpi r24, 0x46 ; 70
77f8: 91 05 cpc r25, r1
77fa: 34 f4 brge .+12 ; 0x7808 <MotorRegler+0x7fc>
77fc: 82 e0 ldi r24, 0x02 ; 2
77fe: 0e 94 53 29 call 0x52a6 ; 0x52a6 <SetNeutral>
7802: 80 93 ef 03 sts 0x03EF, r24
7806: 05 c0 rjmp .+10 ; 0x7812 <MotorRegler+0x806>
else CalibrationDone = SetNeutral(1);
7808: 81 e0 ldi r24, 0x01 ; 1
780a: 0e 94 53 29 call 0x52a6 ; 0x52a6 <SetNeutral>
780e: 80 93 ef 03 sts 0x03EF, r24
ServoActive = 1;
7812: 81 e0 ldi r24, 0x01 ; 1
7814: 80 93 cb 04 sts 0x04CB, r24
DDRD |=0x80; // enable J7 -> Servo signal
7818: 57 9a sbi 0x0a, 7 ; 10
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(VersionInfo.HardwareError[0]) SpeakHoTT = SPEAK_ERR_SENSOR;
781a: 80 91 62 0a lds r24, 0x0A62
781e: 88 23 and r24, r24
7820: 21 f0 breq .+8 ; 0x782a <MotorRegler+0x81e>
7822: 87 e0 ldi r24, 0x07 ; 7
7824: 80 93 57 01 sts 0x0157, r24
7828: 0b c0 rjmp .+22 ; 0x7840 <MotorRegler+0x834>
else
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION;
782a: 80 91 ef 03 lds r24, 0x03EF
782e: 81 11 cpse r24, r1
7830: 04 c0 rjmp .+8 ; 0x783a <MotorRegler+0x82e>
7832: 81 e0 ldi r24, 0x01 ; 1
7834: 80 93 57 01 sts 0x0157, r24
7838: 03 c0 rjmp .+6 ; 0x7840 <MotorRegler+0x834>
else SpeakHoTT = SPEAK_CALIBRATE;
783a: 88 e1 ldi r24, 0x18 ; 24
783c: 80 93 57 01 sts 0x0157, r24
ShowSettingNameTime = 10; // for HoTT & Jeti
7840: 8a e0 ldi r24, 0x0A ; 10
7842: 80 93 80 04 sts 0x0480, r24
#endif
Piep(ActiveParamSet,120);
7846: 68 e7 ldi r22, 0x78 ; 120
7848: 70 e0 ldi r23, 0x00 ; 0
784a: 80 91 52 01 lds r24, 0x0152
784e: 0e 94 ba 28 call 0x5174 ; 0x5174 <Piep>
7852: 02 c0 rjmp .+4 ; 0x7858 <MotorRegler+0x84c>
#endif
Piep(ActiveParamSet,120);
}
}
*/
else delay_neutral = 0;
7854: 10 92 9d 03 sts 0x039D, r1
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gas ist unten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < -100)
7858: e0 91 41 05 lds r30, 0x0541
785c: f0 e0 ldi r31, 0x00 ; 0
785e: ee 0f add r30, r30
7860: ff 1f adc r31, r31
7862: ef 5c subi r30, 0xCF ; 207
7864: f7 4f sbci r31, 0xF7 ; 247
7866: 80 81 ld r24, Z
7868: 91 81 ldd r25, Z+1 ; 0x01
786a: 8c 39 cpi r24, 0x9C ; 156
786c: 9f 4f sbci r25, 0xFF ; 255
786e: 0c f0 brlt .+2 ; 0x7872 <MotorRegler+0x866>
7870: 38 c2 rjmp .+1136 ; 0x7ce2 <MotorRegler+0xcd6>
{
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] > 5) move_safety_switch = 100;
7872: 40 91 a3 05 lds r20, 0x05A3
7876: 84 2f mov r24, r20
7878: 8f 77 andi r24, 0x7F ; 127
787a: 90 e0 ldi r25, 0x00 ; 0
787c: fc 01 movw r30, r24
787e: ee 0f add r30, r30
7880: ff 1f adc r31, r31
7882: e9 58 subi r30, 0x89 ; 137
7884: f7 4f sbci r31, 0xF7 ; 247
7886: 20 81 ld r18, Z
7888: 31 81 ldd r19, Z+1 ; 0x01
788a: 26 30 cpi r18, 0x06 ; 6
788c: 31 05 cpc r19, r1
788e: 24 f0 brlt .+8 ; 0x7898 <MotorRegler+0x88c>
7890: 84 e6 ldi r24, 0x64 ; 100
7892: 80 93 9c 03 sts 0x039C, r24
7896: 0d c0 rjmp .+26 ; 0x78b2 <MotorRegler+0x8a6>
else
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] < -5) move_safety_switch = -100;
7898: fc 01 movw r30, r24
789a: ee 0f add r30, r30
789c: ff 1f adc r31, r31
789e: e9 58 subi r30, 0x89 ; 137
78a0: f7 4f sbci r31, 0xF7 ; 247
78a2: 80 81 ld r24, Z
78a4: 91 81 ldd r25, Z+1 ; 0x01
78a6: 8b 3f cpi r24, 0xFB ; 251
78a8: 9f 4f sbci r25, 0xFF ; 255
78aa: 1c f4 brge .+6 ; 0x78b2 <MotorRegler+0x8a6>
78ac: 8c e9 ldi r24, 0x9C ; 156
78ae: 80 93 9c 03 sts 0x039C, r24
// Motoren Starten
if(!MotorenEin)
78b2: 80 91 03 04 lds r24, 0x0403
78b6: 81 11 cpse r24, r1
78b8: 66 c1 rjmp .+716 ; 0x7b86 <MotorRegler+0xb7a>
{
if(((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -100) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0)))
78ba: e0 91 42 05 lds r30, 0x0542
78be: f0 e0 ldi r31, 0x00 ; 0
78c0: ee 0f add r30, r30
78c2: ff 1f adc r31, r31
78c4: ef 5c subi r30, 0xCF ; 207
78c6: f7 4f sbci r31, 0xF7 ; 247
78c8: 80 81 ld r24, Z
78ca: 91 81 ldd r25, Z+1 ; 0x01
78cc: 8c 39 cpi r24, 0x9C ; 156
78ce: 9f 4f sbci r25, 0xFF ; 255
78d0: 8c f4 brge .+34 ; 0x78f4 <MotorRegler+0x8e8>
78d2: 80 91 b9 05 lds r24, 0x05B9
78d6: 83 fd sbrc r24, 3
78d8: 0b c0 rjmp .+22 ; 0x78f0 <MotorRegler+0x8e4>
78da: e4 2f mov r30, r20
78dc: f0 e0 ldi r31, 0x00 ; 0
78de: ee 0f add r30, r30
78e0: ff 1f adc r31, r31
78e2: ef 5c subi r30, 0xCF ; 207
78e4: f7 4f sbci r31, 0xF7 ; 247
78e6: 80 81 ld r24, Z
78e8: 91 81 ldd r25, Z+1 ; 0x01
78ea: 85 3b cpi r24, 0xB5 ; 181
78ec: 9f 4f sbci r25, 0xFF ; 255
78ee: bc f0 brlt .+46 ; 0x791e <MotorRegler+0x912>
78f0: 44 23 and r20, r20
78f2: a9 f0 breq .+42 ; 0x791e <MotorRegler+0x912>
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] > -10 && move_safety_switch == 100)))
78f4: 80 91 b9 05 lds r24, 0x05B9
78f8: 83 ff sbrs r24, 3
78fa: 42 c1 rjmp .+644 ; 0x7b80 <MotorRegler+0xb74>
78fc: e4 2f mov r30, r20
78fe: f0 e0 ldi r31, 0x00 ; 0
7900: ee 0f add r30, r30
7902: ff 1f adc r31, r31
7904: ef 5c subi r30, 0xCF ; 207
7906: f7 4f sbci r31, 0xF7 ; 247
7908: 80 81 ld r24, Z
790a: 91 81 ldd r25, Z+1 ; 0x01
790c: 87 3f cpi r24, 0xF7 ; 247
790e: 9f 4f sbci r25, 0xFF ; 255
7910: 0c f4 brge .+2 ; 0x7914 <MotorRegler+0x908>
7912: 36 c1 rjmp .+620 ; 0x7b80 <MotorRegler+0xb74>
7914: 80 91 9c 03 lds r24, 0x039C
7918: 84 36 cpi r24, 0x64 ; 100
791a: 09 f0 breq .+2 ; 0x791e <MotorRegler+0x912>
791c: 31 c1 rjmp .+610 ; 0x7b80 <MotorRegler+0xb74>
&& !(NC_To_FC_Flags & NC_TO_FC_SIMULATION_ACTIVE))
791e: 80 91 b7 04 lds r24, 0x04B7
7922: 84 fd sbrc r24, 4
7924: 2d c1 rjmp .+602 ; 0x7b80 <MotorRegler+0xb74>
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Einschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(CalibrationDone) FC_StatusFlags |= FC_STATUS_START;
7926: 80 91 ef 03 lds r24, 0x03EF
792a: 88 23 and r24, r24
792c: 29 f0 breq .+10 ; 0x7938 <MotorRegler+0x92c>
792e: 80 91 cb 03 lds r24, 0x03CB
7932: 88 60 ori r24, 0x08 ; 8
7934: 80 93 cb 03 sts 0x03CB, r24
StartLuftdruck = Luftdruck;
7938: 80 91 12 01 lds r24, 0x0112
793c: 90 91 13 01 lds r25, 0x0113
7940: a0 91 14 01 lds r26, 0x0114
7944: b0 91 15 01 lds r27, 0x0115
7948: 80 93 08 05 sts 0x0508, r24
794c: 90 93 09 05 sts 0x0509, r25
7950: a0 93 0a 05 sts 0x050A, r26
7954: b0 93 0b 05 sts 0x050B, r27
HoehenWert = 0;
7958: 10 92 fe 03 sts 0x03FE, r1
795c: 10 92 ff 03 sts 0x03FF, r1
7960: 10 92 00 04 sts 0x0400, r1
7964: 10 92 01 04 sts 0x0401, r1
HoehenWert_Mess = 0;
7968: 10 92 46 03 sts 0x0346, r1
796c: 10 92 47 03 sts 0x0347, r1
7970: 10 92 48 03 sts 0x0348, r1
7974: 10 92 49 03 sts 0x0349, r1
GasIsZeroCnt = 600;
7978: 88 e5 ldi r24, 0x58 ; 88
797a: 92 e0 ldi r25, 0x02 ; 2
797c: 90 93 c6 03 sts 0x03C6, r25
7980: 80 93 c5 03 sts 0x03C5, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
HoehenWertF_Mess = 0;
7984: 10 92 42 03 sts 0x0342, r1
7988: 10 92 43 03 sts 0x0343, r1
798c: 10 92 44 03 sts 0x0344, r1
7990: 10 92 45 03 sts 0x0345, r1
#endif
SummenHoehe = 0;
7994: 10 92 57 03 sts 0x0357, r1
7998: 10 92 58 03 sts 0x0358, r1
799c: 10 92 59 03 sts 0x0359, r1
79a0: 10 92 5a 03 sts 0x035A, r1
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 100) && EE_Parameter.MotorSafetySwitch == 0) delay_einschalten = 0;
79a4: e0 91 3f 05 lds r30, 0x053F
79a8: f0 e0 ldi r31, 0x00 ; 0
79aa: ee 0f add r30, r30
79ac: ff 1f adc r31, r31
79ae: ef 5c subi r30, 0xCF ; 207
79b0: f7 4f sbci r31, 0xF7 ; 247
79b2: 80 81 ld r24, Z
79b4: 91 81 ldd r25, Z+1 ; 0x01
79b6: 8d 39 cpi r24, 0x9D ; 157
79b8: 9f 4f sbci r25, 0xFF ; 255
79ba: 8c f4 brge .+34 ; 0x79de <MotorRegler+0x9d2>
79bc: e0 91 40 05 lds r30, 0x0540
79c0: f0 e0 ldi r31, 0x00 ; 0
79c2: ee 0f add r30, r30
79c4: ff 1f adc r31, r31
79c6: ef 5c subi r30, 0xCF ; 207
79c8: f7 4f sbci r31, 0xF7 ; 247
79ca: 80 81 ld r24, Z
79cc: 91 81 ldd r25, Z+1 ; 0x01
79ce: 99 23 and r25, r25
79d0: 1c f4 brge .+6 ; 0x79d8 <MotorRegler+0x9cc>
79d2: 91 95 neg r25
79d4: 81 95 neg r24
79d6: 91 09 sbc r25, r1
79d8: 84 36 cpi r24, 0x64 ; 100
79da: 91 05 cpc r25, r1
79dc: 34 f4 brge .+12 ; 0x79ea <MotorRegler+0x9de>
79de: 41 11 cpse r20, r1
79e0: 04 c0 rjmp .+8 ; 0x79ea <MotorRegler+0x9de>
if(++delay_einschalten > 253)
79e2: 81 e0 ldi r24, 0x01 ; 1
79e4: 80 93 9b 03 sts 0x039B, r24
79e8: 5e c1 rjmp .+700 ; 0x7ca6 <MotorRegler+0xc9a>
79ea: 80 91 9b 03 lds r24, 0x039B
79ee: 8f 5f subi r24, 0xFF ; 255
79f0: 80 93 9b 03 sts 0x039B, r24
79f4: 8e 3f cpi r24, 0xFE ; 254
79f6: 08 f4 brcc .+2 ; 0x79fa <MotorRegler+0x9ee>
79f8: 56 c1 rjmp .+684 ; 0x7ca6 <MotorRegler+0xc9a>
{
if(FC_StatusFlags3 & FC_STATUS3_BOAT) { if((abs(MesswertGier) > 32*2 || abs(MesswertNick) > 20*3) || abs(MesswertRoll) > 20*3) CalibrationDone = 0; } // dann ist der Gyro defekt, schlecht kalibriert oder der MK dreht sich
79fa: 80 91 c9 03 lds r24, 0x03C9
79fe: 81 ff sbrs r24, 1
7a00: 25 c0 rjmp .+74 ; 0x7a4c <MotorRegler+0xa40>
7a02: 80 91 67 06 lds r24, 0x0667
7a06: 90 91 68 06 lds r25, 0x0668
7a0a: 99 23 and r25, r25
7a0c: 1c f4 brge .+6 ; 0x7a14 <MotorRegler+0xa08>
7a0e: 91 95 neg r25
7a10: 81 95 neg r24
7a12: 91 09 sbc r25, r1
7a14: 81 34 cpi r24, 0x41 ; 65
7a16: 91 05 cpc r25, r1
7a18: b4 f4 brge .+44 ; 0x7a46 <MotorRegler+0xa3a>
7a1a: 80 91 27 06 lds r24, 0x0627
7a1e: 90 91 28 06 lds r25, 0x0628
7a22: 99 23 and r25, r25
7a24: 1c f4 brge .+6 ; 0x7a2c <MotorRegler+0xa20>
7a26: 91 95 neg r25
7a28: 81 95 neg r24
7a2a: 91 09 sbc r25, r1
7a2c: cd 97 sbiw r24, 0x3d ; 61
7a2e: 5c f4 brge .+22 ; 0x7a46 <MotorRegler+0xa3a>
7a30: 80 91 1c 06 lds r24, 0x061C
7a34: 90 91 1d 06 lds r25, 0x061D
7a38: 99 23 and r25, r25
7a3a: 1c f4 brge .+6 ; 0x7a42 <MotorRegler+0xa36>
7a3c: 91 95 neg r25
7a3e: 81 95 neg r24
7a40: 91 09 sbc r25, r1
7a42: cd 97 sbiw r24, 0x3d ; 61
7a44: 34 f1 brlt .+76 ; 0x7a92 <MotorRegler+0xa86>
7a46: 10 92 ef 03 sts 0x03EF, r1
7a4a: 23 c0 rjmp .+70 ; 0x7a92 <MotorRegler+0xa86>
else
if((abs(MesswertGier) > 32 || abs(MesswertNick) > 20) || abs(MesswertRoll) > 20) CalibrationDone = 0; // dann ist der Gyro defekt, schlecht kalibriert oder der MK dreht sich
7a4c: 80 91 67 06 lds r24, 0x0667
7a50: 90 91 68 06 lds r25, 0x0668
7a54: 99 23 and r25, r25
7a56: 1c f4 brge .+6 ; 0x7a5e <MotorRegler+0xa52>
7a58: 91 95 neg r25
7a5a: 81 95 neg r24
7a5c: 91 09 sbc r25, r1
7a5e: 81 97 sbiw r24, 0x21 ; 33
7a60: b4 f4 brge .+44 ; 0x7a8e <MotorRegler+0xa82>
7a62: 80 91 27 06 lds r24, 0x0627
7a66: 90 91 28 06 lds r25, 0x0628
7a6a: 99 23 and r25, r25
7a6c: 1c f4 brge .+6 ; 0x7a74 <MotorRegler+0xa68>
7a6e: 91 95 neg r25
7a70: 81 95 neg r24
7a72: 91 09 sbc r25, r1
7a74: 45 97 sbiw r24, 0x15 ; 21
7a76: 5c f4 brge .+22 ; 0x7a8e <MotorRegler+0xa82>
7a78: 80 91 1c 06 lds r24, 0x061C
7a7c: 90 91 1d 06 lds r25, 0x061D
7a80: 99 23 and r25, r25
7a82: 1c f4 brge .+6 ; 0x7a8a <MotorRegler+0xa7e>
7a84: 91 95 neg r25
7a86: 81 95 neg r24
7a88: 91 09 sbc r25, r1
7a8a: 45 97 sbiw r24, 0x15 ; 21
7a8c: 14 f0 brlt .+4 ; 0x7a92 <MotorRegler+0xa86>
7a8e: 10 92 ef 03 sts 0x03EF, r1
delay_einschalten = 0;
7a92: 10 92 9b 03 sts 0x039B, r1
if(!VersionInfo.HardwareError[0] && CalibrationDone && !NC_ErrorCode)
7a96: 80 91 62 0a lds r24, 0x0A62
7a9a: 81 11 cpse r24, r1
7a9c: 63 c0 rjmp .+198 ; 0x7b64 <MotorRegler+0xb58>
7a9e: 80 91 ef 03 lds r24, 0x03EF
7aa2: 88 23 and r24, r24
7aa4: 09 f4 brne .+2 ; 0x7aa8 <MotorRegler+0xa9c>
7aa6: 5e c0 rjmp .+188 ; 0x7b64 <MotorRegler+0xb58>
7aa8: 80 91 bb 04 lds r24, 0x04BB
7aac: 81 11 cpse r24, r1
7aae: 5a c0 rjmp .+180 ; 0x7b64 <MotorRegler+0xb58>
{
modell_fliegt = 1;
7ab0: 81 e0 ldi r24, 0x01 ; 1
7ab2: 90 e0 ldi r25, 0x00 ; 0
7ab4: 90 93 cd 03 sts 0x03CD, r25
7ab8: 80 93 cc 03 sts 0x03CC, r24
MotorenEin = 1;
7abc: 80 93 03 04 sts 0x0403, r24
sollGier = 0;
7ac0: 10 92 9e 03 sts 0x039E, r1
7ac4: 10 92 9f 03 sts 0x039F, r1
7ac8: 10 92 a0 03 sts 0x03A0, r1
7acc: 10 92 a1 03 sts 0x03A1, r1
Mess_Integral_Gier = 0;
7ad0: 10 92 2e 04 sts 0x042E, r1
7ad4: 10 92 2f 04 sts 0x042F, r1
7ad8: 10 92 30 04 sts 0x0430, r1
7adc: 10 92 31 04 sts 0x0431, r1
Mess_Integral_Gier2 = 0;
7ae0: 10 92 2a 04 sts 0x042A, r1
7ae4: 10 92 2b 04 sts 0x042B, r1
7ae8: 10 92 2c 04 sts 0x042C, r1
7aec: 10 92 2d 04 sts 0x042D, r1
Mess_IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick;
7af0: c0 90 5a 05 lds r12, 0x055A
7af4: d1 2c mov r13, r1
7af6: e1 2c mov r14, r1
7af8: f1 2c mov r15, r1
7afa: a0 91 60 06 lds r26, 0x0660
7afe: b0 91 61 06 lds r27, 0x0661
7b02: a7 01 movw r20, r14
7b04: 96 01 movw r18, r12
7b06: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
7b0a: 60 93 36 04 sts 0x0436, r22
7b0e: 70 93 37 04 sts 0x0437, r23
7b12: 80 93 38 04 sts 0x0438, r24
7b16: 90 93 39 04 sts 0x0439, r25
Mess_IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll;
7b1a: a0 91 72 06 lds r26, 0x0672
7b1e: b0 91 73 06 lds r27, 0x0673
7b22: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
7b26: 60 93 32 04 sts 0x0432, r22
7b2a: 70 93 33 04 sts 0x0433, r23
7b2e: 80 93 34 04 sts 0x0434, r24
7b32: 90 93 35 04 sts 0x0435, r25
SummeNick = 0;
7b36: 10 92 26 04 sts 0x0426, r1
7b3a: 10 92 27 04 sts 0x0427, r1
7b3e: 10 92 28 04 sts 0x0428, r1
7b42: 10 92 29 04 sts 0x0429, r1
SummeRoll = 0;
7b46: 10 92 22 04 sts 0x0422, r1
7b4a: 10 92 23 04 sts 0x0423, r1
7b4e: 10 92 24 04 sts 0x0424, r1
7b52: 10 92 25 04 sts 0x0425, r1
// ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2;
NeueKompassRichtungMerken = 100; // 2 sekunden
7b56: 84 e6 ldi r24, 0x64 ; 100
7b58: 80 93 ee 03 sts 0x03EE, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_STARTING;
7b5c: 84 e3 ldi r24, 0x34 ; 52
7b5e: 80 93 57 01 sts 0x0157, r24
7b62: a1 c0 rjmp .+322 ; 0x7ca6 <MotorRegler+0xc9a>
#endif
}
else
{
beeptime = 1500; // indicate missing calibration
7b64: 8c ed ldi r24, 0xDC ; 220
7b66: 95 e0 ldi r25, 0x05 ; 5
7b68: 90 93 ce 04 sts 0x04CE, r25
7b6c: 80 93 cd 04 sts 0x04CD, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION;
7b70: 80 91 ef 03 lds r24, 0x03EF
7b74: 81 11 cpse r24, r1
7b76: 97 c0 rjmp .+302 ; 0x7ca6 <MotorRegler+0xc9a>
7b78: 81 e0 ldi r24, 0x01 ; 1
7b7a: 80 93 57 01 sts 0x0157, r24
7b7e: 93 c0 rjmp .+294 ; 0x7ca6 <MotorRegler+0xc9a>
#endif
}
}
}
else delay_einschalten = 0;
7b80: 10 92 9b 03 sts 0x039B, r1
7b84: 90 c0 rjmp .+288 ; 0x7ca6 <MotorRegler+0xc9a>
// Auschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
else // only if motors are running
{
// if((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && (PPM_in[EE_Parameter.MotorSafetySwitch] < -75 || EE_Parameter.MotorSafetySwitch == 0))
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 100) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0)))
7b86: e0 91 42 05 lds r30, 0x0542
7b8a: f0 e0 ldi r31, 0x00 ; 0
7b8c: ee 0f add r30, r30
7b8e: ff 1f adc r31, r31
7b90: ef 5c subi r30, 0xCF ; 207
7b92: f7 4f sbci r31, 0xF7 ; 247
7b94: 80 81 ld r24, Z
7b96: 91 81 ldd r25, Z+1 ; 0x01
7b98: 85 36 cpi r24, 0x65 ; 101
7b9a: 91 05 cpc r25, r1
7b9c: 8c f0 brlt .+34 ; 0x7bc0 <MotorRegler+0xbb4>
7b9e: 80 91 b9 05 lds r24, 0x05B9
7ba2: 83 fd sbrc r24, 3
7ba4: 0b c0 rjmp .+22 ; 0x7bbc <MotorRegler+0xbb0>
7ba6: e4 2f mov r30, r20
7ba8: f0 e0 ldi r31, 0x00 ; 0
7baa: ee 0f add r30, r30
7bac: ff 1f adc r31, r31
7bae: ef 5c subi r30, 0xCF ; 207
7bb0: f7 4f sbci r31, 0xF7 ; 247
7bb2: 80 81 ld r24, Z
7bb4: 91 81 ldd r25, Z+1 ; 0x01
7bb6: 85 3b cpi r24, 0xB5 ; 181
7bb8: 9f 4f sbci r25, 0xFF ; 255
7bba: bc f0 brlt .+46 ; 0x7bea <MotorRegler+0xbde>
7bbc: 44 23 and r20, r20
7bbe: a9 f0 breq .+42 ; 0x7bea <MotorRegler+0xbde>
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -50 && move_safety_switch == -100)))
7bc0: 80 91 b9 05 lds r24, 0x05B9
7bc4: 83 ff sbrs r24, 3
7bc6: 6d c0 rjmp .+218 ; 0x7ca2 <MotorRegler+0xc96>
7bc8: e4 2f mov r30, r20
7bca: f0 e0 ldi r31, 0x00 ; 0
7bcc: ee 0f add r30, r30
7bce: ff 1f adc r31, r31
7bd0: ef 5c subi r30, 0xCF ; 207
7bd2: f7 4f sbci r31, 0xF7 ; 247
7bd4: 80 81 ld r24, Z
7bd6: 91 81 ldd r25, Z+1 ; 0x01
7bd8: 8e 3c cpi r24, 0xCE ; 206
7bda: 9f 4f sbci r25, 0xFF ; 255
7bdc: 0c f0 brlt .+2 ; 0x7be0 <MotorRegler+0xbd4>
7bde: 61 c0 rjmp .+194 ; 0x7ca2 <MotorRegler+0xc96>
7be0: 80 91 9c 03 lds r24, 0x039C
7be4: 8c 39 cpi r24, 0x9C ; 156
7be6: 09 f0 breq .+2 ; 0x7bea <MotorRegler+0xbde>
7be8: 5c c0 rjmp .+184 ; 0x7ca2 <MotorRegler+0xc96>
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 100) && EE_Parameter.MotorSafetySwitch == 0)
7bea: e0 91 3f 05 lds r30, 0x053F
7bee: f0 e0 ldi r31, 0x00 ; 0
7bf0: ee 0f add r30, r30
7bf2: ff 1f adc r31, r31
7bf4: ef 5c subi r30, 0xCF ; 207
7bf6: f7 4f sbci r31, 0xF7 ; 247
7bf8: 80 81 ld r24, Z
7bfa: 91 81 ldd r25, Z+1 ; 0x01
7bfc: 8d 39 cpi r24, 0x9D ; 157
7bfe: 9f 4f sbci r25, 0xFF ; 255
7c00: 8c f4 brge .+34 ; 0x7c24 <MotorRegler+0xc18>
7c02: e0 91 40 05 lds r30, 0x0540
7c06: f0 e0 ldi r31, 0x00 ; 0
7c08: ee 0f add r30, r30
7c0a: ff 1f adc r31, r31
7c0c: ef 5c subi r30, 0xCF ; 207
7c0e: f7 4f sbci r31, 0xF7 ; 247
7c10: 80 81 ld r24, Z
7c12: 91 81 ldd r25, Z+1 ; 0x01
7c14: 99 23 and r25, r25
7c16: 1c f4 brge .+6 ; 0x7c1e <MotorRegler+0xc12>
7c18: 91 95 neg r25
7c1a: 81 95 neg r24
7c1c: 91 09 sbc r25, r1
7c1e: 84 36 cpi r24, 0x64 ; 100
7c20: 91 05 cpc r25, r1
7c22: 34 f4 brge .+12 ; 0x7c30 <MotorRegler+0xc24>
7c24: 41 11 cpse r20, r1
7c26: 04 c0 rjmp .+8 ; 0x7c30 <MotorRegler+0xc24>
SummeNick = 0;
SummeRoll = 0;
StickNick = 0;
StickRoll = 0;
}
if(++delay_ausschalten > 250) // nicht sofort
7c28: 81 e0 ldi r24, 0x01 ; 1
7c2a: 80 93 9a 03 sts 0x039A, r24
7c2e: 3b c0 rjmp .+118 ; 0x7ca6 <MotorRegler+0xc9a>
{
delay_ausschalten = 0;
}
else
{
SummeNick = 0;
7c30: 10 92 26 04 sts 0x0426, r1
7c34: 10 92 27 04 sts 0x0427, r1
7c38: 10 92 28 04 sts 0x0428, r1
7c3c: 10 92 29 04 sts 0x0429, r1
SummeRoll = 0;
7c40: 10 92 22 04 sts 0x0422, r1
7c44: 10 92 23 04 sts 0x0423, r1
7c48: 10 92 24 04 sts 0x0424, r1
7c4c: 10 92 25 04 sts 0x0425, r1
StickNick = 0;
7c50: 10 92 15 04 sts 0x0415, r1
7c54: 10 92 14 04 sts 0x0414, r1
StickRoll = 0;
7c58: 10 92 13 04 sts 0x0413, r1
7c5c: 10 92 12 04 sts 0x0412, r1
}
if(++delay_ausschalten > 250) // nicht sofort
7c60: 80 91 9a 03 lds r24, 0x039A
7c64: 8f 5f subi r24, 0xFF ; 255
7c66: 80 93 9a 03 sts 0x039A, r24
7c6a: 8b 3f cpi r24, 0xFB ; 251
7c6c: 88 f0 brcs .+34 ; 0x7c90 <MotorRegler+0xc84>
{
MotorenEin = 0;
7c6e: 10 92 03 04 sts 0x0403, r1
delay_ausschalten = 0;
7c72: 10 92 9a 03 sts 0x039A, r1
modell_fliegt = 0;
7c76: 10 92 cd 03 sts 0x03CD, r1
7c7a: 10 92 cc 03 sts 0x03CC, r1
FC_StatusFlags2 &= ~(FC_STATUS2_WAIT_FOR_TAKEOFF | FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING);
7c7e: 80 91 ca 03 lds r24, 0x03CA
7c82: 8f 71 andi r24, 0x1F ; 31
7c84: 80 93 ca 03 sts 0x03CA, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_MK_OFF;
7c88: 86 e2 ldi r24, 0x26 ; 38
7c8a: 80 93 57 01 sts 0x0157, r24
7c8e: 0b c0 rjmp .+22 ; 0x7ca6 <MotorRegler+0xc9a>
#endif
}
else
if(delay_ausschalten == 100) beeptime = 3500;
7c90: 84 36 cpi r24, 0x64 ; 100
7c92: 49 f4 brne .+18 ; 0x7ca6 <MotorRegler+0xc9a>
7c94: 8c ea ldi r24, 0xAC ; 172
7c96: 9d e0 ldi r25, 0x0D ; 13
7c98: 90 93 ce 04 sts 0x04CE, r25
7c9c: 80 93 cd 04 sts 0x04CD, r24
7ca0: 02 c0 rjmp .+4 ; 0x7ca6 <MotorRegler+0xc9a>
}
else delay_ausschalten = 0;
7ca2: 10 92 9a 03 sts 0x039A, r1
}
if(GasIsZeroCnt < 1000)
7ca6: 80 91 c5 03 lds r24, 0x03C5
7caa: 90 91 c6 03 lds r25, 0x03C6
7cae: 88 3e cpi r24, 0xE8 ; 232
7cb0: 13 e0 ldi r17, 0x03 ; 3
7cb2: 91 07 cpc r25, r17
7cb4: 08 f0 brcs .+2 ; 0x7cb8 <MotorRegler+0xcac>
7cb6: 46 c0 rjmp .+140 ; 0x7d44 <MotorRegler+0xd38>
{
if(VarioMeter > -150) GasIsZeroCnt++;
7cb8: 20 91 54 03 lds r18, 0x0354
7cbc: 30 91 55 03 lds r19, 0x0355
7cc0: 2b 36 cpi r18, 0x6B ; 107
7cc2: 3f 4f sbci r19, 0xFF ; 255
7cc4: 34 f0 brlt .+12 ; 0x7cd2 <MotorRegler+0xcc6>
7cc6: 01 96 adiw r24, 0x01 ; 1
7cc8: 90 93 c6 03 sts 0x03C6, r25
7ccc: 80 93 c5 03 sts 0x03C5, r24
7cd0: 39 c0 rjmp .+114 ; 0x7d44 <MotorRegler+0xd38>
else if(GasIsZeroCnt) GasIsZeroCnt--;
7cd2: 00 97 sbiw r24, 0x00 ; 0
7cd4: b9 f1 breq .+110 ; 0x7d44 <MotorRegler+0xd38>
7cd6: 01 97 sbiw r24, 0x01 ; 1
7cd8: 90 93 c6 03 sts 0x03C6, r25
7cdc: 80 93 c5 03 sts 0x03C5, r24
7ce0: 31 c0 rjmp .+98 ; 0x7d44 <MotorRegler+0xd38>
}
}
else // gas not at minimum
{
move_safety_switch = 0;
7ce2: 10 92 9c 03 sts 0x039C, r1
GasIsZeroCnt = 0;
7ce6: 10 92 c6 03 sts 0x03C6, r1
7cea: 10 92 c5 03 sts 0x03C5, r1
7cee: 2a c0 rjmp .+84 ; 0x7d44 <MotorRegler+0xd38>
}
}
else // Empfang zwischen 100 und 140 -> schlecht
{
if(GasIsZeroCnt >= 750) // gas-stick was down for 1.5 seconds before RC-Lost
7cf0: 2e 3e cpi r18, 0xEE ; 238
7cf2: 32 40 sbci r19, 0x02 ; 2
7cf4: 38 f1 brcs .+78 ; 0x7d44 <MotorRegler+0xd38>
{
if((GPSInfo.HomeDistance < 40 * 10) && (HoehenWert < 15 * 100)) // and we are at the starting point -> maybe landed?
7cf6: 80 91 db 08 lds r24, 0x08DB
7cfa: 90 91 dc 08 lds r25, 0x08DC
7cfe: 80 39 cpi r24, 0x90 ; 144
7d00: 91 40 sbci r25, 0x01 ; 1
7d02: 00 f5 brcc .+64 ; 0x7d44 <MotorRegler+0xd38>
7d04: 80 91 fe 03 lds r24, 0x03FE
7d08: 90 91 ff 03 lds r25, 0x03FF
7d0c: a0 91 00 04 lds r26, 0x0400
7d10: b0 91 01 04 lds r27, 0x0401
7d14: 8c 3d cpi r24, 0xDC ; 220
7d16: 95 40 sbci r25, 0x05 ; 5
7d18: a1 05 cpc r26, r1
7d1a: b1 05 cpc r27, r1
7d1c: 9c f4 brge .+38 ; 0x7d44 <MotorRegler+0xd38>
{
GasIsZeroCnt = 30000;
7d1e: 80 e3 ldi r24, 0x30 ; 48
7d20: 95 e7 ldi r25, 0x75 ; 117
7d22: 90 93 c6 03 sts 0x03C6, r25
7d26: 80 93 c5 03 sts 0x03C5, r24
if(modell_fliegt > 1001) modell_fliegt = 1001;
7d2a: 80 91 cc 03 lds r24, 0x03CC
7d2e: 90 91 cd 03 lds r25, 0x03CD
7d32: 8a 3e cpi r24, 0xEA ; 234
7d34: 93 40 sbci r25, 0x03 ; 3
7d36: 30 f0 brcs .+12 ; 0x7d44 <MotorRegler+0xd38>
7d38: 89 ee ldi r24, 0xE9 ; 233
7d3a: 93 e0 ldi r25, 0x03 ; 3
7d3c: 90 93 cd 03 sts 0x03CD, r25
7d40: 80 93 cc 03 sts 0x03CC, r24
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// neue Werte von der Funke
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!NewPpmData-- || (FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING))
7d44: 80 91 93 02 lds r24, 0x0293
7d48: 9f ef ldi r25, 0xFF ; 255
7d4a: 98 0f add r25, r24
7d4c: 90 93 93 02 sts 0x0293, r25
7d50: 88 23 and r24, r24
7d52: 21 f0 breq .+8 ; 0x7d5c <MotorRegler+0xd50>
7d54: 80 91 cb 03 lds r24, 0x03CB
7d58: 84 ff sbrs r24, 4
7d5a: d2 c3 rjmp .+1956 ; 0x8500 <MotorRegler+0x14f4>
{
static int stick_nick,stick_roll;
unsigned char stick_p;
ParameterZuordnung();
7d5c: 0e 94 27 34 call 0x684e ; 0x684e <ParameterZuordnung>
stick_p = EE_Parameter.Stick_P;
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4;
7d60: 80 91 3f 05 lds r24, 0x053F
7d64: 90 e0 ldi r25, 0x00 ; 0
7d66: 88 0f add r24, r24
7d68: 99 1f adc r25, r25
7d6a: fc 01 movw r30, r24
7d6c: ef 5c subi r30, 0xCF ; 207
7d6e: f7 4f sbci r31, 0xF7 ; 247
7d70: a0 81 ld r26, Z
7d72: b1 81 ldd r27, Z+1 ; 0x01
7d74: 60 91 55 05 lds r22, 0x0555
7d78: 70 e0 ldi r23, 0x00 ; 0
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
7d7a: fc 01 movw r30, r24
7d7c: e9 58 subi r30, 0x89 ; 137
7d7e: f7 4f sbci r31, 0xF7 ; 247
7d80: 01 90 ld r0, Z+
7d82: f0 81 ld r31, Z
7d84: e0 2d mov r30, r0
7d86: 40 91 56 05 lds r20, 0x0556
7d8a: 50 e0 ldi r21, 0x00 ; 0
{
static int stick_nick,stick_roll;
unsigned char stick_p;
ParameterZuordnung();
stick_p = EE_Parameter.Stick_P;
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4;
7d8c: 80 91 98 03 lds r24, 0x0398
7d90: 90 91 99 03 lds r25, 0x0399
7d94: 9c 01 movw r18, r24
7d96: 22 0f add r18, r18
7d98: 33 1f adc r19, r19
7d9a: 82 0f add r24, r18
7d9c: 93 1f adc r25, r19
7d9e: a6 9f mul r26, r22
7da0: 90 01 movw r18, r0
7da2: a7 9f mul r26, r23
7da4: 30 0d add r19, r0
7da6: b6 9f mul r27, r22
7da8: 30 0d add r19, r0
7daa: 11 24 eor r1, r1
7dac: 82 0f add r24, r18
7dae: 93 1f adc r25, r19
7db0: 99 23 and r25, r25
7db2: 0c f4 brge .+2 ; 0x7db6 <MotorRegler+0xdaa>
7db4: 03 96 adiw r24, 0x03 ; 3
7db6: 95 95 asr r25
7db8: 87 95 ror r24
7dba: 95 95 asr r25
7dbc: 87 95 ror r24
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
7dbe: e4 9f mul r30, r20
7dc0: 90 01 movw r18, r0
7dc2: e5 9f mul r30, r21
7dc4: 30 0d add r19, r0
7dc6: f4 9f mul r31, r20
7dc8: 30 0d add r19, r0
7dca: 11 24 eor r1, r1
7dcc: 82 0f add r24, r18
7dce: 93 1f adc r25, r19
7dd0: 90 93 99 03 sts 0x0399, r25
7dd4: 80 93 98 03 sts 0x0398, r24
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4;
7dd8: 20 91 40 05 lds r18, 0x0540
7ddc: 30 e0 ldi r19, 0x00 ; 0
7dde: 22 0f add r18, r18
7de0: 33 1f adc r19, r19
7de2: f9 01 movw r30, r18
7de4: ef 5c subi r30, 0xCF ; 207
7de6: f7 4f sbci r31, 0xF7 ; 247
7de8: 00 81 ld r16, Z
7dea: 11 81 ldd r17, Z+1 ; 0x01
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
7dec: f9 01 movw r30, r18
7dee: e9 58 subi r30, 0x89 ; 137
7df0: f7 4f sbci r31, 0xF7 ; 247
7df2: 01 90 ld r0, Z+
7df4: f0 81 ld r31, Z
7df6: e0 2d mov r30, r0
unsigned char stick_p;
ParameterZuordnung();
stick_p = EE_Parameter.Stick_P;
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4;
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4;
7df8: 20 91 96 03 lds r18, 0x0396
7dfc: 30 91 97 03 lds r19, 0x0397
7e00: d9 01 movw r26, r18
7e02: aa 0f add r26, r26
7e04: bb 1f adc r27, r27
7e06: 2a 0f add r18, r26
7e08: 3b 1f adc r19, r27
7e0a: 60 9f mul r22, r16
7e0c: d0 01 movw r26, r0
7e0e: 61 9f mul r22, r17
7e10: b0 0d add r27, r0
7e12: 70 9f mul r23, r16
7e14: b0 0d add r27, r0
7e16: 11 24 eor r1, r1
7e18: 2a 0f add r18, r26
7e1a: 3b 1f adc r19, r27
7e1c: 33 23 and r19, r19
7e1e: 14 f4 brge .+4 ; 0x7e24 <MotorRegler+0xe18>
7e20: 2d 5f subi r18, 0xFD ; 253
7e22: 3f 4f sbci r19, 0xFF ; 255
7e24: 35 95 asr r19
7e26: 27 95 ror r18
7e28: 35 95 asr r19
7e2a: 27 95 ror r18
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
7e2c: 4e 9f mul r20, r30
7e2e: b0 01 movw r22, r0
7e30: 4f 9f mul r20, r31
7e32: 70 0d add r23, r0
7e34: 5e 9f mul r21, r30
7e36: 70 0d add r23, r0
7e38: 11 24 eor r1, r1
7e3a: 26 0f add r18, r22
7e3c: 37 1f adc r19, r23
7e3e: 30 93 97 03 sts 0x0397, r19
7e42: 20 93 96 03 sts 0x0396, r18
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// CareFree und freie Wahl der vorderen Richtung
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(CareFree)
7e46: 40 91 d8 03 lds r20, 0x03D8
7e4a: 44 23 and r20, r20
7e4c: 09 f4 brne .+2 ; 0x7e50 <MotorRegler+0xe44>
7e4e: 59 c0 rjmp .+178 ; 0x7f02 <MotorRegler+0xef6>
{
signed int nick, roll;
nick = stick_nick / 4;
7e50: ac 01 movw r20, r24
7e52: 99 23 and r25, r25
7e54: 14 f4 brge .+4 ; 0x7e5a <MotorRegler+0xe4e>
7e56: 4d 5f subi r20, 0xFD ; 253
7e58: 5f 4f sbci r21, 0xFF ; 255
7e5a: 55 95 asr r21
7e5c: 47 95 ror r20
7e5e: 55 95 asr r21
7e60: 47 95 ror r20
roll = stick_roll / 4;
7e62: c9 01 movw r24, r18
7e64: 99 23 and r25, r25
7e66: 0c f4 brge .+2 ; 0x7e6a <MotorRegler+0xe5e>
7e68: 03 96 adiw r24, 0x03 ; 3
7e6a: fc 01 movw r30, r24
7e6c: f5 95 asr r31
7e6e: e7 95 ror r30
7e70: f5 95 asr r31
7e72: e7 95 ror r30
StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4);
7e74: 60 91 a5 02 lds r22, 0x02A5
7e78: 77 27 eor r23, r23
7e7a: 67 fd sbrc r22, 7
7e7c: 70 95 com r23
7e7e: 20 91 be 04 lds r18, 0x04BE
7e82: 33 27 eor r19, r19
7e84: 27 fd sbrc r18, 7
7e86: 30 95 com r19
7e88: 64 9f mul r22, r20
7e8a: d0 01 movw r26, r0
7e8c: 65 9f mul r22, r21
7e8e: b0 0d add r27, r0
7e90: 74 9f mul r23, r20
7e92: b0 0d add r27, r0
7e94: 11 24 eor r1, r1
7e96: 2e 9f mul r18, r30
7e98: c0 01 movw r24, r0
7e9a: 2f 9f mul r18, r31
7e9c: 90 0d add r25, r0
7e9e: 3e 9f mul r19, r30
7ea0: 90 0d add r25, r0
7ea2: 11 24 eor r1, r1
7ea4: 8a 0f add r24, r26
7ea6: 9b 1f adc r25, r27
7ea8: 99 23 and r25, r25
7eaa: 0c f4 brge .+2 ; 0x7eae <MotorRegler+0xea2>
7eac: 07 96 adiw r24, 0x07 ; 7
7eae: 95 95 asr r25
7eb0: 87 95 ror r24
7eb2: 95 95 asr r25
7eb4: 87 95 ror r24
7eb6: 95 95 asr r25
7eb8: 87 95 ror r24
7eba: 90 93 15 04 sts 0x0415, r25
7ebe: 80 93 14 04 sts 0x0414, r24
StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4);
7ec2: e6 9f mul r30, r22
7ec4: d0 01 movw r26, r0
7ec6: e7 9f mul r30, r23
7ec8: b0 0d add r27, r0
7eca: f6 9f mul r31, r22
7ecc: b0 0d add r27, r0
7ece: 11 24 eor r1, r1
7ed0: 42 9f mul r20, r18
7ed2: c0 01 movw r24, r0
7ed4: 43 9f mul r20, r19
7ed6: 90 0d add r25, r0
7ed8: 52 9f mul r21, r18
7eda: 90 0d add r25, r0
7edc: 11 24 eor r1, r1
7ede: 9d 01 movw r18, r26
7ee0: 28 1b sub r18, r24
7ee2: 39 0b sbc r19, r25
7ee4: c9 01 movw r24, r18
7ee6: 99 23 and r25, r25
7ee8: 0c f4 brge .+2 ; 0x7eec <MotorRegler+0xee0>
7eea: 07 96 adiw r24, 0x07 ; 7
7eec: 95 95 asr r25
7eee: 87 95 ror r24
7ef0: 95 95 asr r25
7ef2: 87 95 ror r24
7ef4: 95 95 asr r25
7ef6: 87 95 ror r24
7ef8: 90 93 13 04 sts 0x0413, r25
7efc: 80 93 12 04 sts 0x0412, r24
7f00: 50 c0 rjmp .+160 ; 0x7fa2 <MotorRegler+0xf96>
}
else
{
FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6];
7f02: a0 91 a1 05 lds r26, 0x05A1
7f06: b0 e0 ldi r27, 0x00 ; 0
7f08: a5 53 subi r26, 0x35 ; 53
7f0a: bd 4f sbci r27, 0xFD ; 253
7f0c: 16 96 adiw r26, 0x06 ; 6
7f0e: ec 91 ld r30, X
7f10: 16 97 sbiw r26, 0x06 ; 6
7f12: e0 93 a5 02 sts 0x02A5, r30
FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle];
7f16: 6c 91 ld r22, X
7f18: 60 93 be 04 sts 0x04BE, r22
StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8;
7f1c: ff 27 eor r31, r31
7f1e: e7 fd sbrc r30, 7
7f20: f0 95 com r31
7f22: 77 27 eor r23, r23
7f24: 67 fd sbrc r22, 7
7f26: 70 95 com r23
7f28: 8e 9f mul r24, r30
7f2a: d0 01 movw r26, r0
7f2c: 8f 9f mul r24, r31
7f2e: b0 0d add r27, r0
7f30: 9e 9f mul r25, r30
7f32: b0 0d add r27, r0
7f34: 11 24 eor r1, r1
7f36: 26 9f mul r18, r22
7f38: a0 01 movw r20, r0
7f3a: 27 9f mul r18, r23
7f3c: 50 0d add r21, r0
7f3e: 36 9f mul r19, r22
7f40: 50 0d add r21, r0
7f42: 11 24 eor r1, r1
7f44: 4a 0f add r20, r26
7f46: 5b 1f adc r21, r27
7f48: 55 23 and r21, r21
7f4a: 14 f4 brge .+4 ; 0x7f50 <MotorRegler+0xf44>
7f4c: 49 5f subi r20, 0xF9 ; 249
7f4e: 5f 4f sbci r21, 0xFF ; 255
7f50: 55 95 asr r21
7f52: 47 95 ror r20
7f54: 55 95 asr r21
7f56: 47 95 ror r20
7f58: 55 95 asr r21
7f5a: 47 95 ror r20
7f5c: 50 93 15 04 sts 0x0415, r21
7f60: 40 93 14 04 sts 0x0414, r20
StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8;
7f64: 2e 9f mul r18, r30
7f66: d0 01 movw r26, r0
7f68: 2f 9f mul r18, r31
7f6a: b0 0d add r27, r0
7f6c: 3e 9f mul r19, r30
7f6e: b0 0d add r27, r0
7f70: 11 24 eor r1, r1
7f72: 86 9f mul r24, r22
7f74: a0 01 movw r20, r0
7f76: 87 9f mul r24, r23
7f78: 50 0d add r21, r0
7f7a: 96 9f mul r25, r22
7f7c: 50 0d add r21, r0
7f7e: 11 24 eor r1, r1
7f80: 9d 01 movw r18, r26
7f82: 24 1b sub r18, r20
7f84: 35 0b sbc r19, r21
7f86: c9 01 movw r24, r18
7f88: 99 23 and r25, r25
7f8a: 0c f4 brge .+2 ; 0x7f8e <MotorRegler+0xf82>
7f8c: 07 96 adiw r24, 0x07 ; 7
7f8e: 95 95 asr r25
7f90: 87 95 ror r24
7f92: 95 95 asr r25
7f94: 87 95 ror r24
7f96: 95 95 asr r25
7f98: 87 95 ror r24
7f9a: 90 93 13 04 sts 0x0413, r25
7f9e: 80 93 12 04 sts 0x0412, r24
}
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
7fa2: e0 91 42 05 lds r30, 0x0542
7fa6: f0 e0 ldi r31, 0x00 ; 0
7fa8: ee 0f add r30, r30
7faa: ff 1f adc r31, r31
7fac: ef 5c subi r30, 0xCF ; 207
7fae: f7 4f sbci r31, 0xF7 ; 247
7fb0: 80 81 ld r24, Z
7fb2: 91 81 ldd r25, Z+1 ; 0x01
7fb4: 22 27 eor r18, r18
7fb6: 33 27 eor r19, r19
7fb8: 28 1b sub r18, r24
7fba: 39 0b sbc r19, r25
if(StickGier > 4) StickGier -= 4; else
7fbc: 25 30 cpi r18, 0x05 ; 5
7fbe: 31 05 cpc r19, r1
7fc0: 54 f0 brlt .+20 ; 0x7fd6 <MotorRegler+0xfca>
7fc2: 2c ef ldi r18, 0xFC ; 252
7fc4: 3f ef ldi r19, 0xFF ; 255
7fc6: f9 01 movw r30, r18
7fc8: e8 1b sub r30, r24
7fca: f9 0b sbc r31, r25
7fcc: f0 93 11 04 sts 0x0411, r31
7fd0: e0 93 10 04 sts 0x0410, r30
7fd4: 11 c0 rjmp .+34 ; 0x7ff8 <MotorRegler+0xfec>
if(StickGier < -4) StickGier += 4; else StickGier = 0;
7fd6: 2c 3f cpi r18, 0xFC ; 252
7fd8: 3f 4f sbci r19, 0xFF ; 255
7fda: 54 f4 brge .+20 ; 0x7ff0 <MotorRegler+0xfe4>
7fdc: 24 e0 ldi r18, 0x04 ; 4
7fde: 30 e0 ldi r19, 0x00 ; 0
7fe0: 49 01 movw r8, r18
7fe2: 88 1a sub r8, r24
7fe4: 99 0a sbc r9, r25
7fe6: 90 92 11 04 sts 0x0411, r9
7fea: 80 92 10 04 sts 0x0410, r8
7fee: 04 c0 rjmp .+8 ; 0x7ff8 <MotorRegler+0xfec>
7ff0: 10 92 11 04 sts 0x0411, r1
7ff4: 10 92 10 04 sts 0x0410, r1
if(GasIsZeroCnt > 512) // About to switch - off
7ff8: 80 91 c5 03 lds r24, 0x03C5
7ffc: 90 91 c6 03 lds r25, 0x03C6
8000: 81 30 cpi r24, 0x01 ; 1
8002: 92 40 sbci r25, 0x02 ; 2
8004: 98 f1 brcs .+102 ; 0x806c <MotorRegler+0x1060>
{
StickNick = StickNick/8;
8006: 80 91 14 04 lds r24, 0x0414
800a: 90 91 15 04 lds r25, 0x0415
800e: 99 23 and r25, r25
8010: 0c f4 brge .+2 ; 0x8014 <MotorRegler+0x1008>
8012: 07 96 adiw r24, 0x07 ; 7
8014: 95 95 asr r25
8016: 87 95 ror r24
8018: 95 95 asr r25
801a: 87 95 ror r24
801c: 95 95 asr r25
801e: 87 95 ror r24
8020: 90 93 15 04 sts 0x0415, r25
8024: 80 93 14 04 sts 0x0414, r24
StickRoll = StickRoll/8;
8028: 80 91 12 04 lds r24, 0x0412
802c: 90 91 13 04 lds r25, 0x0413
8030: 99 23 and r25, r25
8032: 0c f4 brge .+2 ; 0x8036 <MotorRegler+0x102a>
8034: 07 96 adiw r24, 0x07 ; 7
8036: 95 95 asr r25
8038: 87 95 ror r24
803a: 95 95 asr r25
803c: 87 95 ror r24
803e: 95 95 asr r25
8040: 87 95 ror r24
8042: 90 93 13 04 sts 0x0413, r25
8046: 80 93 12 04 sts 0x0412, r24
SummeNick = 0;
804a: 10 92 26 04 sts 0x0426, r1
804e: 10 92 27 04 sts 0x0427, r1
8052: 10 92 28 04 sts 0x0428, r1
8056: 10 92 29 04 sts 0x0429, r1
SummeRoll = 0;
805a: 10 92 22 04 sts 0x0422, r1
805e: 10 92 23 04 sts 0x0423, r1
8062: 10 92 24 04 sts 0x0424, r1
8066: 10 92 25 04 sts 0x0425, r1
806a: 4e c0 rjmp .+156 ; 0x8108 <MotorRegler+0x10fc>
}
else
if(GPS_Aid_StickMultiplikator) // in that case the GPS controls stronger
806c: 20 91 67 04 lds r18, 0x0467
8070: 22 23 and r18, r18
8072: 09 f4 brne .+2 ; 0x8076 <MotorRegler+0x106a>
8074: 49 c0 rjmp .+146 ; 0x8108 <MotorRegler+0x10fc>
{
StickNick = (GPS_Aid_StickMultiplikator * (StickNick / 8)) / 16;
8076: 30 e0 ldi r19, 0x00 ; 0
8078: 80 91 14 04 lds r24, 0x0414
807c: 90 91 15 04 lds r25, 0x0415
8080: 99 23 and r25, r25
8082: 0c f4 brge .+2 ; 0x8086 <MotorRegler+0x107a>
8084: 07 96 adiw r24, 0x07 ; 7
8086: ac 01 movw r20, r24
8088: 55 95 asr r21
808a: 47 95 ror r20
808c: 55 95 asr r21
808e: 47 95 ror r20
8090: 55 95 asr r21
8092: 47 95 ror r20
8094: 24 9f mul r18, r20
8096: c0 01 movw r24, r0
8098: 25 9f mul r18, r21
809a: 90 0d add r25, r0
809c: 34 9f mul r19, r20
809e: 90 0d add r25, r0
80a0: 11 24 eor r1, r1
80a2: 99 23 and r25, r25
80a4: 0c f4 brge .+2 ; 0x80a8 <MotorRegler+0x109c>
80a6: 0f 96 adiw r24, 0x0f ; 15
80a8: 95 95 asr r25
80aa: 87 95 ror r24
80ac: 95 95 asr r25
80ae: 87 95 ror r24
80b0: 95 95 asr r25
80b2: 87 95 ror r24
80b4: 95 95 asr r25
80b6: 87 95 ror r24
80b8: 90 93 15 04 sts 0x0415, r25
80bc: 80 93 14 04 sts 0x0414, r24
StickRoll = (GPS_Aid_StickMultiplikator * (StickRoll / 8)) / 16;
80c0: 80 91 12 04 lds r24, 0x0412
80c4: 90 91 13 04 lds r25, 0x0413
80c8: 99 23 and r25, r25
80ca: 0c f4 brge .+2 ; 0x80ce <MotorRegler+0x10c2>
80cc: 07 96 adiw r24, 0x07 ; 7
80ce: ac 01 movw r20, r24
80d0: 55 95 asr r21
80d2: 47 95 ror r20
80d4: 55 95 asr r21
80d6: 47 95 ror r20
80d8: 55 95 asr r21
80da: 47 95 ror r20
80dc: 24 9f mul r18, r20
80de: c0 01 movw r24, r0
80e0: 25 9f mul r18, r21
80e2: 90 0d add r25, r0
80e4: 34 9f mul r19, r20
80e6: 90 0d add r25, r0
80e8: 11 24 eor r1, r1
80ea: 99 23 and r25, r25
80ec: 0c f4 brge .+2 ; 0x80f0 <MotorRegler+0x10e4>
80ee: 0f 96 adiw r24, 0x0f ; 15
80f0: 95 95 asr r25
80f2: 87 95 ror r24
80f4: 95 95 asr r25
80f6: 87 95 ror r24
80f8: 95 95 asr r25
80fa: 87 95 ror r24
80fc: 95 95 asr r25
80fe: 87 95 ror r24
8100: 90 93 13 04 sts 0x0413, r25
8104: 80 93 12 04 sts 0x0412, r24
}
StickNick -= GPS_Nick;
8108: c0 90 14 04 lds r12, 0x0414
810c: d0 90 15 04 lds r13, 0x0415
8110: 80 91 6a 04 lds r24, 0x046A
8114: 90 91 6b 04 lds r25, 0x046B
8118: c8 1a sub r12, r24
811a: d9 0a sbc r13, r25
811c: d0 92 15 04 sts 0x0415, r13
8120: c0 92 14 04 sts 0x0414, r12
StickRoll -= GPS_Roll;
8124: e0 90 12 04 lds r14, 0x0412
8128: f0 90 13 04 lds r15, 0x0413
812c: 80 91 68 04 lds r24, 0x0468
8130: 90 91 69 04 lds r25, 0x0469
8134: e8 1a sub r14, r24
8136: f9 0a sbc r15, r25
8138: f0 92 13 04 sts 0x0413, r15
813c: e0 92 12 04 sts 0x0412, r14
StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127;
8140: e0 91 41 05 lds r30, 0x0541
8144: f0 e0 ldi r31, 0x00 ; 0
8146: ee 0f add r30, r30
8148: ff 1f adc r31, r31
814a: ef 5c subi r30, 0xCF ; 207
814c: f7 4f sbci r31, 0xF7 ; 247
814e: 00 81 ld r16, Z
8150: 11 81 ldd r17, Z+1 ; 0x01
8152: 01 58 subi r16, 0x81 ; 129
8154: 1f 4f sbci r17, 0xFF ; 255
8156: 10 93 0f 04 sts 0x040F, r17
815a: 00 93 0e 04 sts 0x040E, r16
GyroFaktor = (Parameter_Gyro_P + 10.0);
815e: 60 91 34 01 lds r22, 0x0134
8162: 70 e0 ldi r23, 0x00 ; 0
8164: 80 e0 ldi r24, 0x00 ; 0
8166: 90 e0 ldi r25, 0x00 ; 0
8168: 0e 94 9b b0 call 0x16136 ; 0x16136 <__floatsisf>
816c: 20 e0 ldi r18, 0x00 ; 0
816e: 30 e0 ldi r19, 0x00 ; 0
8170: 40 e2 ldi r20, 0x20 ; 32
8172: 51 e4 ldi r21, 0x41 ; 65
8174: 0e 94 09 b0 call 0x16012 ; 0x16012 <__addsf3>
8178: 0e 94 6d b0 call 0x160da ; 0x160da <__fixunssfsi>
817c: 60 93 6c 06 sts 0x066C, r22
IntegralFaktor = Parameter_Gyro_I;
8180: 80 91 33 01 lds r24, 0x0133
8184: 80 93 42 06 sts 0x0642, r24
GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0);
8188: 60 91 32 01 lds r22, 0x0132
818c: 70 e0 ldi r23, 0x00 ; 0
818e: 80 e0 ldi r24, 0x00 ; 0
8190: 90 e0 ldi r25, 0x00 ; 0
8192: 0e 94 9b b0 call 0x16136 ; 0x16136 <__floatsisf>
8196: 20 e0 ldi r18, 0x00 ; 0
8198: 30 e0 ldi r19, 0x00 ; 0
819a: 40 e2 ldi r20, 0x20 ; 32
819c: 51 e4 ldi r21, 0x41 ; 65
819e: 0e 94 09 b0 call 0x16012 ; 0x16012 <__addsf3>
81a2: 0e 94 6d b0 call 0x160da ; 0x160da <__fixunssfsi>
81a6: 60 93 23 06 sts 0x0623, r22
IntegralFaktorGier = Parameter_Gyro_Gier_I;
81aa: 80 91 31 01 lds r24, 0x0131
81ae: 80 93 31 06 sts 0x0631, r24
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ Analoge Steuerung per Seriell
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128)
81b2: 80 91 89 0a lds r24, 0x0A89
81b6: 80 ff sbrs r24, 0
81b8: 45 c0 rjmp .+138 ; 0x8244 <MotorRegler+0x1238>
81ba: 80 91 75 06 lds r24, 0x0675
81be: 81 38 cpi r24, 0x81 ; 129
81c0: 08 f4 brcc .+2 ; 0x81c4 <MotorRegler+0x11b8>
81c2: 40 c0 rjmp .+128 ; 0x8244 <MotorRegler+0x1238>
{
StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P;
81c4: 20 91 55 05 lds r18, 0x0555
81c8: 30 e0 ldi r19, 0x00 ; 0
81ca: 40 91 82 0a lds r20, 0x0A82
81ce: 42 03 mulsu r20, r18
81d0: c0 01 movw r24, r0
81d2: 43 9f mul r20, r19
81d4: 90 0d add r25, r0
81d6: 11 24 eor r1, r1
81d8: c8 0e add r12, r24
81da: d9 1e adc r13, r25
81dc: d0 92 15 04 sts 0x0415, r13
81e0: c0 92 14 04 sts 0x0414, r12
StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P;
81e4: 40 91 83 0a lds r20, 0x0A83
81e8: 42 03 mulsu r20, r18
81ea: c0 01 movw r24, r0
81ec: 43 9f mul r20, r19
81ee: 90 0d add r25, r0
81f0: 11 24 eor r1, r1
81f2: e8 0e add r14, r24
81f4: f9 1e adc r15, r25
81f6: f0 92 13 04 sts 0x0413, r15
81fa: e0 92 12 04 sts 0x0412, r14
StickGier += ExternControl.Gier;
81fe: 20 91 84 0a lds r18, 0x0A84
8202: 80 91 10 04 lds r24, 0x0410
8206: 90 91 11 04 lds r25, 0x0411
820a: 82 0f add r24, r18
820c: 91 1d adc r25, r1
820e: 27 fd sbrc r18, 7
8210: 9a 95 dec r25
8212: 90 93 11 04 sts 0x0411, r25
8216: 80 93 10 04 sts 0x0410, r24
ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung;
821a: 30 91 86 0a lds r19, 0x0A86
821e: 20 91 50 05 lds r18, 0x0550
8222: 32 03 mulsu r19, r18
8224: c0 01 movw r24, r0
8226: 11 24 eor r1, r1
8228: 90 93 26 01 sts 0x0126, r25
822c: 80 93 25 01 sts 0x0125, r24
if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas;
8230: 80 91 85 0a lds r24, 0x0A85
8234: 90 e0 ldi r25, 0x00 ; 0
8236: 80 17 cp r24, r16
8238: 91 07 cpc r25, r17
823a: 24 f4 brge .+8 ; 0x8244 <MotorRegler+0x1238>
823c: 90 93 0f 04 sts 0x040F, r25
8240: 80 93 0e 04 sts 0x040E, r24
}
if(StickGas < 0) StickGas = 0;
8244: 80 91 0e 04 lds r24, 0x040E
8248: 90 91 0f 04 lds r25, 0x040F
824c: 99 23 and r25, r25
824e: 24 f4 brge .+8 ; 0x8258 <MotorRegler+0x124c>
8250: 10 92 0f 04 sts 0x040F, r1
8254: 10 92 0e 04 sts 0x040E, r1
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
8258: 80 91 5c 06 lds r24, 0x065C
825c: 82 fd sbrc r24, 2
825e: 10 92 42 06 sts 0x0642, r1
if(abs(StickNick/STICK_GAIN) > MaxStickNick)
8262: 80 91 14 04 lds r24, 0x0414
8266: 90 91 15 04 lds r25, 0x0415
826a: 40 91 d0 03 lds r20, 0x03D0
826e: 50 91 d1 03 lds r21, 0x03D1
8272: 9c 01 movw r18, r24
8274: 99 23 and r25, r25
8276: 14 f4 brge .+4 ; 0x827c <MotorRegler+0x1270>
8278: 2d 5f subi r18, 0xFD ; 253
827a: 3f 4f sbci r19, 0xFF ; 255
827c: 35 95 asr r19
827e: 27 95 ror r18
8280: 35 95 asr r19
8282: 27 95 ror r18
8284: 33 23 and r19, r19
8286: 1c f4 brge .+6 ; 0x828e <MotorRegler+0x1282>
8288: 31 95 neg r19
828a: 21 95 neg r18
828c: 31 09 sbc r19, r1
828e: 42 17 cp r20, r18
8290: 53 07 cpc r21, r19
8292: f4 f4 brge .+60 ; 0x82d0 <MotorRegler+0x12c4>
{
MaxStickNick = abs(StickNick)/STICK_GAIN;
8294: 9c 01 movw r18, r24
8296: 99 23 and r25, r25
8298: 24 f4 brge .+8 ; 0x82a2 <MotorRegler+0x1296>
829a: 22 27 eor r18, r18
829c: 33 27 eor r19, r19
829e: 28 1b sub r18, r24
82a0: 39 0b sbc r19, r25
82a2: c9 01 movw r24, r18
82a4: 99 23 and r25, r25
82a6: 0c f4 brge .+2 ; 0x82aa <MotorRegler+0x129e>
82a8: 03 96 adiw r24, 0x03 ; 3
82aa: 95 95 asr r25
82ac: 87 95 ror r24
82ae: 95 95 asr r25
82b0: 87 95 ror r24
if(MaxStickNick > 100) MaxStickNick = 100;
82b2: 85 36 cpi r24, 0x65 ; 101
82b4: 91 05 cpc r25, r1
82b6: 2c f4 brge .+10 ; 0x82c2 <MotorRegler+0x12b6>
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
if(abs(StickNick/STICK_GAIN) > MaxStickNick)
{
MaxStickNick = abs(StickNick)/STICK_GAIN;
82b8: 90 93 d1 03 sts 0x03D1, r25
82bc: 80 93 d0 03 sts 0x03D0, r24
82c0: 0d c0 rjmp .+26 ; 0x82dc <MotorRegler+0x12d0>
if(MaxStickNick > 100) MaxStickNick = 100;
82c2: 84 e6 ldi r24, 0x64 ; 100
82c4: 90 e0 ldi r25, 0x00 ; 0
82c6: 90 93 d1 03 sts 0x03D1, r25
82ca: 80 93 d0 03 sts 0x03D0, r24
82ce: 06 c0 rjmp .+12 ; 0x82dc <MotorRegler+0x12d0>
}
else MaxStickNick--;
82d0: 41 50 subi r20, 0x01 ; 1
82d2: 51 09 sbc r21, r1
82d4: 50 93 d1 03 sts 0x03D1, r21
82d8: 40 93 d0 03 sts 0x03D0, r20
if(abs(StickRoll/STICK_GAIN) > MaxStickRoll)
82dc: 80 91 12 04 lds r24, 0x0412
82e0: 90 91 13 04 lds r25, 0x0413
82e4: 40 91 ce 03 lds r20, 0x03CE
82e8: 50 91 cf 03 lds r21, 0x03CF
82ec: 9c 01 movw r18, r24
82ee: 99 23 and r25, r25
82f0: 14 f4 brge .+4 ; 0x82f6 <MotorRegler+0x12ea>
82f2: 2d 5f subi r18, 0xFD ; 253
82f4: 3f 4f sbci r19, 0xFF ; 255
82f6: 35 95 asr r19
82f8: 27 95 ror r18
82fa: 35 95 asr r19
82fc: 27 95 ror r18
82fe: 33 23 and r19, r19
8300: 1c f4 brge .+6 ; 0x8308 <MotorRegler+0x12fc>
8302: 31 95 neg r19
8304: 21 95 neg r18
8306: 31 09 sbc r19, r1
8308: 42 17 cp r20, r18
830a: 53 07 cpc r21, r19
830c: f4 f4 brge .+60 ; 0x834a <MotorRegler+0x133e>
{
MaxStickRoll = abs(StickRoll)/STICK_GAIN;
830e: 9c 01 movw r18, r24
8310: 99 23 and r25, r25
8312: 24 f4 brge .+8 ; 0x831c <MotorRegler+0x1310>
8314: 22 27 eor r18, r18
8316: 33 27 eor r19, r19
8318: 28 1b sub r18, r24
831a: 39 0b sbc r19, r25
831c: c9 01 movw r24, r18
831e: 99 23 and r25, r25
8320: 0c f4 brge .+2 ; 0x8324 <MotorRegler+0x1318>
8322: 03 96 adiw r24, 0x03 ; 3
8324: 95 95 asr r25
8326: 87 95 ror r24
8328: 95 95 asr r25
832a: 87 95 ror r24
if(MaxStickRoll > 100) MaxStickRoll = 100;
832c: 85 36 cpi r24, 0x65 ; 101
832e: 91 05 cpc r25, r1
8330: 2c f4 brge .+10 ; 0x833c <MotorRegler+0x1330>
if(MaxStickNick > 100) MaxStickNick = 100;
}
else MaxStickNick--;
if(abs(StickRoll/STICK_GAIN) > MaxStickRoll)
{
MaxStickRoll = abs(StickRoll)/STICK_GAIN;
8332: 90 93 cf 03 sts 0x03CF, r25
8336: 80 93 ce 03 sts 0x03CE, r24
833a: 0d c0 rjmp .+26 ; 0x8356 <MotorRegler+0x134a>
if(MaxStickRoll > 100) MaxStickRoll = 100;
833c: 84 e6 ldi r24, 0x64 ; 100
833e: 90 e0 ldi r25, 0x00 ; 0
8340: 90 93 cf 03 sts 0x03CF, r25
8344: 80 93 ce 03 sts 0x03CE, r24
8348: 06 c0 rjmp .+12 ; 0x8356 <MotorRegler+0x134a>
}
else MaxStickRoll--;
834a: 41 50 subi r20, 0x01 ; 1
834c: 51 09 sbc r21, r1
834e: 50 93 cf 03 sts 0x03CF, r21
8352: 40 93 ce 03 sts 0x03CE, r20
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) {MaxStickNick = 0; MaxStickRoll = 0;}
8356: 80 91 cb 03 lds r24, 0x03CB
835a: 84 ff sbrs r24, 4
835c: 08 c0 rjmp .+16 ; 0x836e <MotorRegler+0x1362>
835e: 10 92 d1 03 sts 0x03D1, r1
8362: 10 92 d0 03 sts 0x03D0, r1
8366: 10 92 cf 03 sts 0x03CF, r1
836a: 10 92 ce 03 sts 0x03CE, r1
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Looping?
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_LINKS) Looping_Links = 1;
836e: 20 91 40 05 lds r18, 0x0540
8372: 30 e0 ldi r19, 0x00 ; 0
8374: f9 01 movw r30, r18
8376: ee 0f add r30, r30
8378: ff 1f adc r31, r31
837a: ef 5c subi r30, 0xCF ; 207
837c: f7 4f sbci r31, 0xF7 ; 247
837e: 40 81 ld r20, Z
8380: 51 81 ldd r21, Z+1 ; 0x01
8382: 80 91 7a 05 lds r24, 0x057A
8386: 90 e0 ldi r25, 0x00 ; 0
8388: 84 17 cp r24, r20
838a: 95 07 cpc r25, r21
838c: 44 f4 brge .+16 ; 0x839e <MotorRegler+0x1392>
838e: 40 91 b6 05 lds r20, 0x05B6
8392: 42 ff sbrs r20, 2
8394: 04 c0 rjmp .+8 ; 0x839e <MotorRegler+0x1392>
8396: 41 e0 ldi r20, 0x01 ; 1
8398: 40 93 e5 03 sts 0x03E5, r20
839c: 11 c0 rjmp .+34 ; 0x83c0 <MotorRegler+0x13b4>
else
{
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0;
839e: f9 01 movw r30, r18
83a0: ee 0f add r30, r30
83a2: ff 1f adc r31, r31
83a4: ef 5c subi r30, 0xCF ; 207
83a6: f7 4f sbci r31, 0xF7 ; 247
83a8: 60 81 ld r22, Z
83aa: 71 81 ldd r23, Z+1 ; 0x01
83ac: 40 91 7b 05 lds r20, 0x057B
83b0: dc 01 movw r26, r24
83b2: a4 1b sub r26, r20
83b4: b1 09 sbc r27, r1
83b6: 6a 17 cp r22, r26
83b8: 7b 07 cpc r23, r27
83ba: 14 f4 brge .+4 ; 0x83c0 <MotorRegler+0x13b4>
83bc: 10 92 e5 03 sts 0x03E5, r1
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1;
83c0: f9 01 movw r30, r18
83c2: ee 0f add r30, r30
83c4: ff 1f adc r31, r31
83c6: ef 5c subi r30, 0xCF ; 207
83c8: f7 4f sbci r31, 0xF7 ; 247
83ca: 60 81 ld r22, Z
83cc: 71 81 ldd r23, Z+1 ; 0x01
83ce: 44 27 eor r20, r20
83d0: 55 27 eor r21, r21
83d2: 48 1b sub r20, r24
83d4: 59 0b sbc r21, r25
83d6: 64 17 cp r22, r20
83d8: 75 07 cpc r23, r21
83da: 44 f4 brge .+16 ; 0x83ec <MotorRegler+0x13e0>
83dc: 60 91 b6 05 lds r22, 0x05B6
83e0: 63 ff sbrs r22, 3
83e2: 04 c0 rjmp .+8 ; 0x83ec <MotorRegler+0x13e0>
83e4: 21 e0 ldi r18, 0x01 ; 1
83e6: 20 93 e4 03 sts 0x03E4, r18
83ea: 15 c0 rjmp .+42 ; 0x8416 <MotorRegler+0x140a>
else
{
if(Looping_Rechts) // Hysterese
83ec: 60 91 e4 03 lds r22, 0x03E4
83f0: 66 23 and r22, r22
83f2: 89 f0 breq .+34 ; 0x8416 <MotorRegler+0x140a>
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0;
83f4: f9 01 movw r30, r18
83f6: ee 0f add r30, r30
83f8: ff 1f adc r31, r31
83fa: ef 5c subi r30, 0xCF ; 207
83fc: f7 4f sbci r31, 0xF7 ; 247
83fe: 60 81 ld r22, Z
8400: 71 81 ldd r23, Z+1 ; 0x01
8402: 20 91 7b 05 lds r18, 0x057B
8406: 30 e0 ldi r19, 0x00 ; 0
8408: 28 1b sub r18, r24
840a: 39 0b sbc r19, r25
840c: 26 17 cp r18, r22
840e: 37 07 cpc r19, r23
8410: 14 f4 brge .+4 ; 0x8416 <MotorRegler+0x140a>
8412: 10 92 e4 03 sts 0x03E4, r1
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_OBEN) Looping_Oben = 1;
8416: 20 91 3f 05 lds r18, 0x053F
841a: 30 e0 ldi r19, 0x00 ; 0
841c: f9 01 movw r30, r18
841e: ee 0f add r30, r30
8420: ff 1f adc r31, r31
8422: ef 5c subi r30, 0xCF ; 207
8424: f7 4f sbci r31, 0xF7 ; 247
8426: 60 81 ld r22, Z
8428: 71 81 ldd r23, Z+1 ; 0x01
842a: 86 17 cp r24, r22
842c: 97 07 cpc r25, r23
842e: 44 f4 brge .+16 ; 0x8440 <MotorRegler+0x1434>
8430: 60 91 b6 05 lds r22, 0x05B6
8434: 60 ff sbrs r22, 0
8436: 04 c0 rjmp .+8 ; 0x8440 <MotorRegler+0x1434>
8438: 61 e0 ldi r22, 0x01 ; 1
843a: 60 93 e2 03 sts 0x03E2, r22
843e: 16 c0 rjmp .+44 ; 0x846c <MotorRegler+0x1460>
else
{
if(Looping_Oben) // Hysterese
8440: 60 91 e2 03 lds r22, 0x03E2
8444: 66 23 and r22, r22
8446: 91 f0 breq .+36 ; 0x846c <MotorRegler+0x1460>
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0;
8448: f9 01 movw r30, r18
844a: ee 0f add r30, r30
844c: ff 1f adc r31, r31
844e: ef 5c subi r30, 0xCF ; 207
8450: f7 4f sbci r31, 0xF7 ; 247
8452: 01 90 ld r0, Z+
8454: f0 81 ld r31, Z
8456: e0 2d mov r30, r0
8458: 60 91 7b 05 lds r22, 0x057B
845c: 4c 01 movw r8, r24
845e: 86 1a sub r8, r22
8460: 91 08 sbc r9, r1
8462: e8 15 cp r30, r8
8464: f9 05 cpc r31, r9
8466: 14 f4 brge .+4 ; 0x846c <MotorRegler+0x1460>
8468: 10 92 e2 03 sts 0x03E2, r1
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_UNTEN) Looping_Unten = 1;
846c: f9 01 movw r30, r18
846e: ee 0f add r30, r30
8470: ff 1f adc r31, r31
8472: ef 5c subi r30, 0xCF ; 207
8474: f7 4f sbci r31, 0xF7 ; 247
8476: 60 81 ld r22, Z
8478: 71 81 ldd r23, Z+1 ; 0x01
847a: 64 17 cp r22, r20
847c: 75 07 cpc r23, r21
847e: 44 f4 brge .+16 ; 0x8490 <MotorRegler+0x1484>
8480: 40 91 b6 05 lds r20, 0x05B6
8484: 41 ff sbrs r20, 1
8486: 04 c0 rjmp .+8 ; 0x8490 <MotorRegler+0x1484>
8488: 81 e0 ldi r24, 0x01 ; 1
848a: 80 93 e3 03 sts 0x03E3, r24
848e: 16 c0 rjmp .+44 ; 0x84bc <MotorRegler+0x14b0>
else
{
if(Looping_Unten) // Hysterese
8490: 40 91 e3 03 lds r20, 0x03E3
8494: 44 23 and r20, r20
8496: 91 f0 breq .+36 ; 0x84bc <MotorRegler+0x14b0>
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0;
8498: f9 01 movw r30, r18
849a: ee 0f add r30, r30
849c: ff 1f adc r31, r31
849e: ef 5c subi r30, 0xCF ; 207
84a0: f7 4f sbci r31, 0xF7 ; 247
84a2: 20 81 ld r18, Z
84a4: 31 81 ldd r19, Z+1 ; 0x01
84a6: 40 91 7b 05 lds r20, 0x057B
84aa: 50 e0 ldi r21, 0x00 ; 0
84ac: 5a 01 movw r10, r20
84ae: a8 1a sub r10, r24
84b0: b9 0a sbc r11, r25
84b2: a2 16 cp r10, r18
84b4: b3 06 cpc r11, r19
84b6: 14 f4 brge .+4 ; 0x84bc <MotorRegler+0x14b0>
84b8: 10 92 e3 03 sts 0x03E3, r1
}
}
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0;
84bc: 80 91 e5 03 lds r24, 0x03E5
84c0: 81 11 cpse r24, r1
84c2: 04 c0 rjmp .+8 ; 0x84cc <MotorRegler+0x14c0>
84c4: 80 91 e4 03 lds r24, 0x03E4
84c8: 88 23 and r24, r24
84ca: 21 f0 breq .+8 ; 0x84d4 <MotorRegler+0x14c8>
84cc: 81 e0 ldi r24, 0x01 ; 1
84ce: 80 93 e6 03 sts 0x03E6, r24
84d2: 02 c0 rjmp .+4 ; 0x84d8 <MotorRegler+0x14cc>
84d4: 10 92 e6 03 sts 0x03E6, r1
if(Looping_Oben || Looping_Unten) { Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0;
84d8: 80 91 e2 03 lds r24, 0x03E2
84dc: 81 11 cpse r24, r1
84de: 04 c0 rjmp .+8 ; 0x84e8 <MotorRegler+0x14dc>
84e0: 80 91 e3 03 lds r24, 0x03E3
84e4: 88 23 and r24, r24
84e6: 51 f0 breq .+20 ; 0x84fc <MotorRegler+0x14f0>
84e8: 81 e0 ldi r24, 0x01 ; 1
84ea: 80 93 e7 03 sts 0x03E7, r24
84ee: 10 92 e6 03 sts 0x03E6, r1
84f2: 10 92 e5 03 sts 0x03E5, r1
84f6: 10 92 e4 03 sts 0x03E4, r1
84fa: 02 c0 rjmp .+4 ; 0x8500 <MotorRegler+0x14f4>
84fc: 10 92 e7 03 sts 0x03E7, r1
} // Ende neue Funken-Werte
if(Looping_Roll || Looping_Nick)
8500: 80 91 e6 03 lds r24, 0x03E6
8504: 81 11 cpse r24, r1
8506: 04 c0 rjmp .+8 ; 0x8510 <MotorRegler+0x1504>
8508: 80 91 e7 03 lds r24, 0x03E7
850c: 88 23 and r24, r24
850e: 51 f0 breq .+20 ; 0x8524 <MotorRegler+0x1518>
{
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit;
8510: 80 91 79 05 lds r24, 0x0579
8514: 90 e0 ldi r25, 0x00 ; 0
8516: 82 15 cp r24, r2
8518: 93 05 cpc r25, r3
851a: 0c f4 brge .+2 ; 0x851e <MotorRegler+0x1512>
851c: 1c 01 movw r2, r24
TrichterFlug = 1;
851e: 81 e0 ldi r24, 0x01 ; 1
8520: 80 93 1a 04 sts 0x041A, r24
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Bei Empfangsausfall im Flug
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE)
8524: 80 91 ca 03 lds r24, 0x03CA
8528: 82 ff sbrs r24, 2
852a: 31 c0 rjmp .+98 ; 0x858e <MotorRegler+0x1582>
{
StickNick = -GPS_Nick;
852c: 80 91 6a 04 lds r24, 0x046A
8530: 90 91 6b 04 lds r25, 0x046B
8534: 91 95 neg r25
8536: 81 95 neg r24
8538: 91 09 sbc r25, r1
853a: 90 93 15 04 sts 0x0415, r25
853e: 80 93 14 04 sts 0x0414, r24
StickRoll = -GPS_Roll;
8542: 80 91 68 04 lds r24, 0x0468
8546: 90 91 69 04 lds r25, 0x0469
854a: 91 95 neg r25
854c: 81 95 neg r24
854e: 91 09 sbc r25, r1
8550: 90 93 13 04 sts 0x0413, r25
8554: 80 93 12 04 sts 0x0412, r24
StickGas = StickGasHover;
8558: 80 91 40 01 lds r24, 0x0140
855c: 90 91 41 01 lds r25, 0x0141
8560: 90 93 0f 04 sts 0x040F, r25
8564: 80 93 0e 04 sts 0x040E, r24
StickGier = 0;
8568: 10 92 11 04 sts 0x0411, r1
856c: 10 92 10 04 sts 0x0410, r1
Parameter_GlobalConfig &= ~(CFG_HEADING_HOLD | CFG_DREHRATEN_BEGRENZER);
8570: 80 91 5c 06 lds r24, 0x065C
8574: 8b 77 andi r24, 0x7B ; 123
Parameter_GlobalConfig |= CFG_HOEHENREGELUNG | CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER | CFG_GPS_AKTIV;
8576: 8b 66 ori r24, 0x6B ; 107
8578: 80 93 5c 06 sts 0x065C, r24
Parameter_ExtraConfig &= ~(CFG2_HEIGHT_LIMIT | CFG_LEARNABLE_CAREFREE | CFG2_VARIO_BEEP);
857c: 80 91 40 06 lds r24, 0x0640
8580: 8c 7b andi r24, 0xBC ; 188
8582: 80 93 40 06 sts 0x0640, r24
Parameter_HoehenSchalter = 200; // switch on
8586: 88 ec ldi r24, 0xC8 ; 200
8588: 80 93 e1 03 sts 0x03E1, r24
858c: 1e c0 rjmp .+60 ; 0x85ca <MotorRegler+0x15be>
}
else
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)
858e: 80 91 cb 03 lds r24, 0x03CB
8592: 84 ff sbrs r24, 4
8594: 1a c0 rjmp .+52 ; 0x85ca <MotorRegler+0x15be>
{
StickGier = 0;
8596: 10 92 11 04 sts 0x0411, r1
859a: 10 92 10 04 sts 0x0410, r1
StickNick = 0;
859e: 10 92 15 04 sts 0x0415, r1
85a2: 10 92 14 04 sts 0x0414, r1
StickRoll = 0;
85a6: 10 92 13 04 sts 0x0413, r1
85aa: 10 92 12 04 sts 0x0412, r1
GyroFaktor = 90;
85ae: 9a e5 ldi r25, 0x5A ; 90
85b0: 90 93 6c 06 sts 0x066C, r25
IntegralFaktor = 120;
85b4: 88 e7 ldi r24, 0x78 ; 120
85b6: 80 93 42 06 sts 0x0642, r24
GyroFaktorGier = 90;
85ba: 90 93 23 06 sts 0x0623, r25
IntegralFaktorGier = 120;
85be: 80 93 31 06 sts 0x0631, r24
Looping_Roll = 0;
85c2: 10 92 e6 03 sts 0x03E6, r1
Looping_Nick = 0;
85c6: 10 92 e7 03 sts 0x03E7, r1
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Integrale auf ACC-Signal abgleichen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define ABGLEICH_ANZAHL 256L
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren
85ca: c0 90 42 04 lds r12, 0x0442
85ce: d0 90 43 04 lds r13, 0x0443
85d2: e0 90 44 04 lds r14, 0x0444
85d6: f0 90 45 04 lds r15, 0x0445
85da: 80 91 34 06 lds r24, 0x0634
85de: 90 91 35 06 lds r25, 0x0635
85e2: a0 91 36 06 lds r26, 0x0636
85e6: b0 91 37 06 lds r27, 0x0637
85ea: 8c 0d add r24, r12
85ec: 9d 1d adc r25, r13
85ee: ae 1d adc r26, r14
85f0: bf 1d adc r27, r15
85f2: 80 93 34 06 sts 0x0634, r24
85f6: 90 93 35 06 sts 0x0635, r25
85fa: a0 93 36 06 sts 0x0636, r26
85fe: b0 93 37 06 sts 0x0637, r27
MittelIntegralRoll += IntegralRoll;
8602: 80 90 3e 04 lds r8, 0x043E
8606: 90 90 3f 04 lds r9, 0x043F
860a: a0 90 40 04 lds r10, 0x0440
860e: b0 90 41 04 lds r11, 0x0441
8612: 80 91 3c 06 lds r24, 0x063C
8616: 90 91 3d 06 lds r25, 0x063D
861a: a0 91 3e 06 lds r26, 0x063E
861e: b0 91 3f 06 lds r27, 0x063F
8622: 88 0d add r24, r8
8624: 99 1d adc r25, r9
8626: aa 1d adc r26, r10
8628: bb 1d adc r27, r11
862a: 80 93 3c 06 sts 0x063C, r24
862e: 90 93 3d 06 sts 0x063D, r25
8632: a0 93 3e 06 sts 0x063E, r26
8636: b0 93 3f 06 sts 0x063F, r27
if(Looping_Nick || Looping_Roll)
863a: 80 91 e7 03 lds r24, 0x03E7
863e: 81 11 cpse r24, r1
8640: 0c 94 14 59 jmp 0xb228 ; 0xb228 <MotorRegler+0x421c>
8644: 80 91 e6 03 lds r24, 0x03E6
8648: 81 11 cpse r24, r1
864a: 0c 94 f1 58 jmp 0xb1e2 ; 0xb1e2 <MotorRegler+0x41d6>
LageKorrekturNick = 0;
LageKorrekturRoll = 0;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin))
864e: 80 91 06 05 lds r24, 0x0506
8652: 90 91 07 05 lds r25, 0x0507
8656: 81 30 cpi r24, 0x01 ; 1
8658: 92 40 sbci r25, 0x02 ; 2
865a: 2c f4 brge .+10 ; 0x8666 <MotorRegler+0x165a>
865c: 80 91 03 04 lds r24, 0x0403
8660: 88 23 and r24, r24
8662: 09 f4 brne .+2 ; 0x8666 <MotorRegler+0x165a>
8664: e0 c1 rjmp .+960 ; 0x8a26 <MotorRegler+0x1a1a>
{
long tmp_long, tmp_long2;
if(FromNaviCtrl_Value.Kalman_K > 0 /*&& !TrichterFlug*/)
8666: 40 90 4c 09 lds r4, 0x094C
866a: 14 14 cp r1, r4
866c: 0c f0 brlt .+2 ; 0x8670 <MotorRegler+0x1664>
866e: c9 c0 rjmp .+402 ; 0x8802 <MotorRegler+0x17f6>
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccNick - FromNaviCtrl.AccErrorN));
8670: 80 91 5a 05 lds r24, 0x055A
8674: 08 2f mov r16, r24
8676: 10 e0 ldi r17, 0x00 ; 0
8678: 20 e0 ldi r18, 0x00 ; 0
867a: 30 e0 ldi r19, 0x00 ; 0
867c: 0d 83 std Y+5, r16 ; 0x05
867e: 1e 83 std Y+6, r17 ; 0x06
8680: 2f 83 std Y+7, r18 ; 0x07
8682: 38 87 std Y+8, r19 ; 0x08
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccRoll - FromNaviCtrl.AccErrorR));
tmp_long = (tmp_long * FromNaviCtrl_Value.Kalman_K) / (32 * 16);
8684: 55 24 eor r5, r5
8686: 47 fc sbrc r4, 7
8688: 50 94 com r5
868a: 65 2c mov r6, r5
868c: 75 2c mov r7, r5
if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin))
{
long tmp_long, tmp_long2;
if(FromNaviCtrl_Value.Kalman_K > 0 /*&& !TrichterFlug*/)
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccNick - FromNaviCtrl.AccErrorN));
868e: c7 01 movw r24, r14
8690: b6 01 movw r22, r12
8692: a9 01 movw r20, r18
8694: 98 01 movw r18, r16
8696: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
869a: 80 91 60 06 lds r24, 0x0660
869e: 90 91 61 06 lds r25, 0x0661
86a2: 60 91 15 09 lds r22, 0x0915
86a6: 70 91 16 09 lds r23, 0x0916
86aa: 86 1b sub r24, r22
86ac: 97 0b sbc r25, r23
86ae: aa 27 eor r26, r26
86b0: 97 fd sbrc r25, 7
86b2: a0 95 com r26
86b4: ba 2f mov r27, r26
86b6: 79 01 movw r14, r18
86b8: 8a 01 movw r16, r20
86ba: e8 1a sub r14, r24
86bc: f9 0a sbc r15, r25
86be: 0a 0b sbc r16, r26
86c0: 1b 0b sbc r17, r27
86c2: c8 01 movw r24, r16
86c4: b7 01 movw r22, r14
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccRoll - FromNaviCtrl.AccErrorR));
tmp_long = (tmp_long * FromNaviCtrl_Value.Kalman_K) / (32 * 16);
86c6: a3 01 movw r20, r6
86c8: 92 01 movw r18, r4
86ca: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
86ce: 6b 01 movw r12, r22
86d0: 7c 01 movw r14, r24
86d2: 99 23 and r25, r25
86d4: 34 f4 brge .+12 ; 0x86e2 <MotorRegler+0x16d6>
86d6: 0f ef ldi r16, 0xFF ; 255
86d8: c0 0e add r12, r16
86da: 01 e0 ldi r16, 0x01 ; 1
86dc: d0 1e adc r13, r16
86de: e1 1c adc r14, r1
86e0: f1 1c adc r15, r1
86e2: 0b 2e mov r0, r27
86e4: b9 e0 ldi r27, 0x09 ; 9
86e6: f5 94 asr r15
86e8: e7 94 ror r14
86ea: d7 94 ror r13
86ec: c7 94 ror r12
86ee: ba 95 dec r27
86f0: d1 f7 brne .-12 ; 0x86e6 <MotorRegler+0x16da>
86f2: b0 2d mov r27, r0
{
long tmp_long, tmp_long2;
if(FromNaviCtrl_Value.Kalman_K > 0 /*&& !TrichterFlug*/)
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccNick - FromNaviCtrl.AccErrorN));
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccRoll - FromNaviCtrl.AccErrorR));
86f4: c5 01 movw r24, r10
86f6: b4 01 movw r22, r8
86f8: 2d 81 ldd r18, Y+5 ; 0x05
86fa: 3e 81 ldd r19, Y+6 ; 0x06
86fc: 4f 81 ldd r20, Y+7 ; 0x07
86fe: 58 85 ldd r21, Y+8 ; 0x08
8700: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
8704: 80 91 72 06 lds r24, 0x0672
8708: 90 91 73 06 lds r25, 0x0673
870c: 60 91 17 09 lds r22, 0x0917
8710: 70 91 18 09 lds r23, 0x0918
8714: 86 1b sub r24, r22
8716: 97 0b sbc r25, r23
8718: aa 27 eor r26, r26
871a: 97 fd sbrc r25, 7
871c: a0 95 com r26
871e: ba 2f mov r27, r26
8720: 28 1b sub r18, r24
8722: 39 0b sbc r19, r25
8724: 4a 0b sbc r20, r26
8726: 5b 0b sbc r21, r27
tmp_long = (tmp_long * FromNaviCtrl_Value.Kalman_K) / (32 * 16);
tmp_long2 = (tmp_long2 * FromNaviCtrl_Value.Kalman_K) / (32 * 16);
8728: c3 01 movw r24, r6
872a: b2 01 movw r22, r4
872c: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
8730: 8b 01 movw r16, r22
8732: 9c 01 movw r18, r24
8734: 99 23 and r25, r25
8736: 24 f4 brge .+8 ; 0x8740 <MotorRegler+0x1734>
8738: 01 50 subi r16, 0x01 ; 1
873a: 1e 4f sbci r17, 0xFE ; 254
873c: 2f 4f sbci r18, 0xFF ; 255
873e: 3f 4f sbci r19, 0xFF ; 255
8740: 0f 2e mov r0, r31
8742: f9 e0 ldi r31, 0x09 ; 9
8744: 35 95 asr r19
8746: 27 95 ror r18
8748: 17 95 ror r17
874a: 07 95 ror r16
874c: fa 95 dec r31
874e: d1 f7 brne .-12 ; 0x8744 <MotorRegler+0x1738>
8750: f0 2d mov r31, r0
if((MaxStickNick > 64) || (MaxStickRoll > 64))
8752: 80 91 d0 03 lds r24, 0x03D0
8756: 90 91 d1 03 lds r25, 0x03D1
875a: 81 34 cpi r24, 0x41 ; 65
875c: 91 05 cpc r25, r1
875e: 3c f4 brge .+14 ; 0x876e <MotorRegler+0x1762>
8760: 80 91 ce 03 lds r24, 0x03CE
8764: 90 91 cf 03 lds r25, 0x03CF
8768: 81 34 cpi r24, 0x41 ; 65
876a: 91 05 cpc r25, r1
876c: d4 f0 brlt .+52 ; 0x87a2 <MotorRegler+0x1796>
{
tmp_long /= 2;
876e: d7 01 movw r26, r14
8770: c6 01 movw r24, r12
8772: ff 20 and r15, r15
8774: 1c f4 brge .+6 ; 0x877c <MotorRegler+0x1770>
8776: 01 96 adiw r24, 0x01 ; 1
8778: a1 1d adc r26, r1
877a: b1 1d adc r27, r1
877c: 6c 01 movw r12, r24
877e: 7d 01 movw r14, r26
8780: f5 94 asr r15
8782: e7 94 ror r14
8784: d7 94 ror r13
8786: c7 94 ror r12
tmp_long2 /= 2;
8788: d9 01 movw r26, r18
878a: c8 01 movw r24, r16
878c: 33 23 and r19, r19
878e: 1c f4 brge .+6 ; 0x8796 <MotorRegler+0x178a>
8790: 01 96 adiw r24, 0x01 ; 1
8792: a1 1d adc r26, r1
8794: b1 1d adc r27, r1
8796: 8c 01 movw r16, r24
8798: 9d 01 movw r18, r26
879a: 35 95 asr r19
879c: 27 95 ror r18
879e: 17 95 ror r17
87a0: 07 95 ror r16
}
if(tmp_long > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long) FromNaviCtrl_Value.Kalman_MaxFusion;
87a2: 80 91 4e 09 lds r24, 0x094E
87a6: 48 2f mov r20, r24
87a8: 55 27 eor r21, r21
87aa: 47 fd sbrc r20, 7
87ac: 50 95 com r21
87ae: 65 2f mov r22, r21
87b0: 75 2f mov r23, r21
87b2: 4c 15 cp r20, r12
87b4: 5d 05 cpc r21, r13
87b6: 6e 05 cpc r22, r14
87b8: 7f 05 cpc r23, r15
87ba: 14 f4 brge .+4 ; 0x87c0 <MotorRegler+0x17b4>
87bc: 6a 01 movw r12, r20
87be: 7b 01 movw r14, r22
if(tmp_long < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long)-FromNaviCtrl_Value.Kalman_MaxFusion;
87c0: 99 27 eor r25, r25
87c2: 81 95 neg r24
87c4: 0c f4 brge .+2 ; 0x87c8 <MotorRegler+0x17bc>
87c6: 90 95 com r25
87c8: aa 27 eor r26, r26
87ca: 97 fd sbrc r25, 7
87cc: a0 95 com r26
87ce: ba 2f mov r27, r26
87d0: c8 16 cp r12, r24
87d2: d9 06 cpc r13, r25
87d4: ea 06 cpc r14, r26
87d6: fb 06 cpc r15, r27
87d8: 14 f4 brge .+4 ; 0x87de <MotorRegler+0x17d2>
87da: 6c 01 movw r12, r24
87dc: 7d 01 movw r14, r26
87de: 40 17 cp r20, r16
87e0: 51 07 cpc r21, r17
87e2: 62 07 cpc r22, r18
87e4: 73 07 cpc r23, r19
87e6: 14 f4 brge .+4 ; 0x87ec <MotorRegler+0x17e0>
87e8: 8a 01 movw r16, r20
87ea: 9b 01 movw r18, r22
87ec: b9 01 movw r22, r18
87ee: a8 01 movw r20, r16
87f0: 08 17 cp r16, r24
87f2: 19 07 cpc r17, r25
87f4: 2a 07 cpc r18, r26
87f6: 3b 07 cpc r19, r27
87f8: 0c f0 brlt .+2 ; 0x87fc <MotorRegler+0x17f0>
87fa: d8 c0 rjmp .+432 ; 0x89ac <MotorRegler+0x19a0>
87fc: ac 01 movw r20, r24
87fe: bd 01 movw r22, r26
8800: d5 c0 rjmp .+426 ; 0x89ac <MotorRegler+0x19a0>
if(tmp_long2 > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long) FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long2 < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long)-FromNaviCtrl_Value.Kalman_MaxFusion;
}
else
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick);
8802: 40 90 5a 05 lds r4, 0x055A
8806: 51 2c mov r5, r1
8808: 61 2c mov r6, r1
880a: 71 2c mov r7, r1
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll);
880c: c5 01 movw r24, r10
880e: b4 01 movw r22, r8
8810: a3 01 movw r20, r6
8812: 92 01 movw r18, r4
8814: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
8818: 80 91 72 06 lds r24, 0x0672
881c: 90 91 73 06 lds r25, 0x0673
8820: aa 27 eor r26, r26
8822: 97 fd sbrc r25, 7
8824: a0 95 com r26
8826: ba 2f mov r27, r26
8828: 49 01 movw r8, r18
882a: 5a 01 movw r10, r20
882c: 88 1a sub r8, r24
882e: 99 0a sbc r9, r25
8830: aa 0a sbc r10, r26
8832: bb 0a sbc r11, r27
8834: 8d 82 std Y+5, r8 ; 0x05
8836: 9e 82 std Y+6, r9 ; 0x06
8838: af 82 std Y+7, r10 ; 0x07
883a: b8 86 std Y+8, r11 ; 0x08
if(tmp_long2 > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long) FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long2 < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long)-FromNaviCtrl_Value.Kalman_MaxFusion;
}
else
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick);
883c: c7 01 movw r24, r14
883e: b6 01 movw r22, r12
8840: a3 01 movw r20, r6
8842: 92 01 movw r18, r4
8844: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
8848: 80 91 60 06 lds r24, 0x0660
884c: 90 91 61 06 lds r25, 0x0661
8850: aa 27 eor r26, r26
8852: 97 fd sbrc r25, 7
8854: a0 95 com r26
8856: ba 2f mov r27, r26
8858: 79 01 movw r14, r18
885a: 8a 01 movw r16, r20
885c: e8 1a sub r14, r24
885e: f9 0a sbc r15, r25
8860: 0a 0b sbc r16, r26
8862: 1b 0b sbc r17, r27
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll);
tmp_long /= 16;
8864: 67 01 movw r12, r14
8866: 78 01 movw r14, r16
8868: ff 20 and r15, r15
886a: 2c f4 brge .+10 ; 0x8876 <MotorRegler+0x186a>
886c: 0f e0 ldi r16, 0x0F ; 15
886e: c0 0e add r12, r16
8870: d1 1c adc r13, r1
8872: e1 1c adc r14, r1
8874: f1 1c adc r15, r1
8876: 68 94 set
8878: 13 f8 bld r1, 3
887a: f5 94 asr r15
887c: e7 94 ror r14
887e: d7 94 ror r13
8880: c7 94 ror r12
8882: 16 94 lsr r1
8884: d1 f7 brne .-12 ; 0x887a <MotorRegler+0x186e>
tmp_long2 /= 16;
8886: 8d 80 ldd r8, Y+5 ; 0x05
8888: 9e 80 ldd r9, Y+6 ; 0x06
888a: af 80 ldd r10, Y+7 ; 0x07
888c: b8 84 ldd r11, Y+8 ; 0x08
888e: bb 20 and r11, r11
8890: 2c f4 brge .+10 ; 0x889c <MotorRegler+0x1890>
8892: 1f e0 ldi r17, 0x0F ; 15
8894: 81 0e add r8, r17
8896: 91 1c adc r9, r1
8898: a1 1c adc r10, r1
889a: b1 1c adc r11, r1
889c: 68 94 set
889e: 13 f8 bld r1, 3
88a0: b5 94 asr r11
88a2: a7 94 ror r10
88a4: 97 94 ror r9
88a6: 87 94 ror r8
88a8: 16 94 lsr r1
88aa: d1 f7 brne .-12 ; 0x88a0 <MotorRegler+0x1894>
if((MaxStickNick > 64) || (MaxStickRoll > 64))
88ac: 80 91 d0 03 lds r24, 0x03D0
88b0: 90 91 d1 03 lds r25, 0x03D1
88b4: 81 34 cpi r24, 0x41 ; 65
88b6: 91 05 cpc r25, r1
88b8: 3c f4 brge .+14 ; 0x88c8 <MotorRegler+0x18bc>
88ba: 80 91 ce 03 lds r24, 0x03CE
88be: 90 91 cf 03 lds r25, 0x03CF
88c2: 81 34 cpi r24, 0x41 ; 65
88c4: 91 05 cpc r25, r1
88c6: bc f0 brlt .+46 ; 0x88f6 <MotorRegler+0x18ea>
{
tmp_long /= 3;
88c8: 0f 2e mov r0, r31
88ca: f3 e0 ldi r31, 0x03 ; 3
88cc: 4f 2e mov r4, r31
88ce: 51 2c mov r5, r1
88d0: 61 2c mov r6, r1
88d2: 71 2c mov r7, r1
88d4: f0 2d mov r31, r0
88d6: c7 01 movw r24, r14
88d8: b6 01 movw r22, r12
88da: a3 01 movw r20, r6
88dc: 92 01 movw r18, r4
88de: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
88e2: 69 01 movw r12, r18
88e4: 7a 01 movw r14, r20
tmp_long2 /= 3;
88e6: c5 01 movw r24, r10
88e8: b4 01 movw r22, r8
88ea: a3 01 movw r20, r6
88ec: 92 01 movw r18, r4
88ee: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
88f2: 49 01 movw r8, r18
88f4: 5a 01 movw r10, r20
}
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)
88f6: e0 91 42 05 lds r30, 0x0542
88fa: f0 e0 ldi r31, 0x00 ; 0
88fc: ee 0f add r30, r30
88fe: ff 1f adc r31, r31
8900: ef 5c subi r30, 0xCF ; 207
8902: f7 4f sbci r31, 0xF7 ; 247
8904: 80 81 ld r24, Z
8906: 91 81 ldd r25, Z+1 ; 0x01
8908: 99 23 and r25, r25
890a: 1c f4 brge .+6 ; 0x8912 <MotorRegler+0x1906>
890c: 91 95 neg r25
890e: 81 95 neg r24
8910: 91 09 sbc r25, r1
8912: 4a 97 sbiw r24, 0x1a ; 26
8914: bc f0 brlt .+46 ; 0x8944 <MotorRegler+0x1938>
{
tmp_long /= 3;
8916: 0f 2e mov r0, r31
8918: f3 e0 ldi r31, 0x03 ; 3
891a: 4f 2e mov r4, r31
891c: 51 2c mov r5, r1
891e: 61 2c mov r6, r1
8920: 71 2c mov r7, r1
8922: f0 2d mov r31, r0
8924: c7 01 movw r24, r14
8926: b6 01 movw r22, r12
8928: a3 01 movw r20, r6
892a: 92 01 movw r18, r4
892c: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
8930: 69 01 movw r12, r18
8932: 7a 01 movw r14, r20
tmp_long2 /= 3;
8934: c5 01 movw r24, r10
8936: b4 01 movw r22, r8
8938: a3 01 movw r20, r6
893a: 92 01 movw r18, r4
893c: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
8940: 49 01 movw r8, r18
8942: 5a 01 movw r10, r20
}
KompassFusion = 25;
8944: 89 e1 ldi r24, 0x19 ; 25
8946: 80 93 4c 01 sts 0x014C, r24
894a: 21 e2 ldi r18, 0x21 ; 33
894c: c2 16 cp r12, r18
894e: d1 04 cpc r13, r1
8950: e1 04 cpc r14, r1
8952: f1 04 cpc r15, r1
8954: 2c f0 brlt .+10 ; 0x8960 <MotorRegler+0x1954>
8956: c1 2c mov r12, r1
8958: d1 2c mov r13, r1
895a: 76 01 movw r14, r12
895c: 68 94 set
895e: c5 f8 bld r12, 5
8960: 30 ee ldi r19, 0xE0 ; 224
8962: c3 16 cp r12, r19
8964: 3f ef ldi r19, 0xFF ; 255
8966: d3 06 cpc r13, r19
8968: e3 06 cpc r14, r19
896a: f3 06 cpc r15, r19
896c: 44 f4 brge .+16 ; 0x897e <MotorRegler+0x1972>
896e: 0f 2e mov r0, r31
8970: f0 ee ldi r31, 0xE0 ; 224
8972: cf 2e mov r12, r31
8974: dd 24 eor r13, r13
8976: da 94 dec r13
8978: ed 2c mov r14, r13
897a: fd 2c mov r15, r13
897c: f0 2d mov r31, r0
897e: d5 01 movw r26, r10
8980: c4 01 movw r24, r8
8982: 81 32 cpi r24, 0x21 ; 33
8984: 91 05 cpc r25, r1
8986: a1 05 cpc r26, r1
8988: b1 05 cpc r27, r1
898a: 24 f0 brlt .+8 ; 0x8994 <MotorRegler+0x1988>
898c: 80 e2 ldi r24, 0x20 ; 32
898e: 90 e0 ldi r25, 0x00 ; 0
8990: a0 e0 ldi r26, 0x00 ; 0
8992: b0 e0 ldi r27, 0x00 ; 0
8994: ac 01 movw r20, r24
8996: bd 01 movw r22, r26
8998: 40 3e cpi r20, 0xE0 ; 224
899a: 8f ef ldi r24, 0xFF ; 255
899c: 58 07 cpc r21, r24
899e: 68 07 cpc r22, r24
89a0: 78 07 cpc r23, r24
89a2: 24 f4 brge .+8 ; 0x89ac <MotorRegler+0x19a0>
89a4: 40 ee ldi r20, 0xE0 ; 224
89a6: 5f ef ldi r21, 0xFF ; 255
89a8: 6f ef ldi r22, 0xFF ; 255
89aa: 7f ef ldi r23, 0xFF ; 255
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
}
Mess_IntegralNick -= tmp_long;
89ac: 80 91 36 04 lds r24, 0x0436
89b0: 90 91 37 04 lds r25, 0x0437
89b4: a0 91 38 04 lds r26, 0x0438
89b8: b0 91 39 04 lds r27, 0x0439
89bc: 8c 19 sub r24, r12
89be: 9d 09 sbc r25, r13
89c0: ae 09 sbc r26, r14
89c2: bf 09 sbc r27, r15
89c4: 80 93 36 04 sts 0x0436, r24
89c8: 90 93 37 04 sts 0x0437, r25
89cc: a0 93 38 04 sts 0x0438, r26
89d0: b0 93 39 04 sts 0x0439, r27
Mess_IntegralRoll -= tmp_long2;
89d4: 80 91 32 04 lds r24, 0x0432
89d8: 90 91 33 04 lds r25, 0x0433
89dc: a0 91 34 04 lds r26, 0x0434
89e0: b0 91 35 04 lds r27, 0x0435
89e4: 84 1b sub r24, r20
89e6: 95 0b sbc r25, r21
89e8: a6 0b sbc r26, r22
89ea: b7 0b sbc r27, r23
89ec: 80 93 32 04 sts 0x0432, r24
89f0: 90 93 33 04 sts 0x0433, r25
89f4: a0 93 34 04 sts 0x0434, r26
89f8: b0 93 35 04 sts 0x0435, r27
DriftNick += tmp_long;
89fc: 80 91 be 03 lds r24, 0x03BE
8a00: 90 91 bf 03 lds r25, 0x03BF
8a04: c8 0e add r12, r24
8a06: d9 1e adc r13, r25
8a08: d0 92 bf 03 sts 0x03BF, r13
8a0c: c0 92 be 03 sts 0x03BE, r12
DriftRoll += tmp_long2;
8a10: 80 91 bc 03 lds r24, 0x03BC
8a14: 90 91 bd 03 lds r25, 0x03BD
8a18: 9c 01 movw r18, r24
8a1a: 24 0f add r18, r20
8a1c: 35 1f adc r19, r21
8a1e: 30 93 bd 03 sts 0x03BD, r19
8a22: 20 93 bc 03 sts 0x03BC, r18
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(ZaehlMessungen >= ABGLEICH_ANZAHL)
8a26: 80 91 52 03 lds r24, 0x0352
8a2a: 90 91 53 03 lds r25, 0x0353
8a2e: 8f 3f cpi r24, 0xFF ; 255
8a30: 91 05 cpc r25, r1
8a32: 09 f0 breq .+2 ; 0x8a36 <MotorRegler+0x1a2a>
8a34: 08 f4 brcc .+2 ; 0x8a38 <MotorRegler+0x1a2c>
8a36: 5a c1 rjmp .+692 ; 0x8cec <MotorRegler+0x1ce0>
// static char last_n_p,last_n_n,last_r_p,last_r_n;
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gyro-Drift ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(EE_Parameter.Driftkomp && abs(Mittelwert_AccNick) < 200*4 && abs(Mittelwert_AccRoll) < 200*4 && !TrichterFlug && abs(MesswertGier) < 32/* && (FC_StatusFlags & FC_STATUS_FLY)*/)
8a38: 00 91 82 05 lds r16, 0x0582
8a3c: 00 23 and r16, r16
8a3e: 09 f4 brne .+2 ; 0x8a42 <MotorRegler+0x1a36>
8a40: 07 c1 rjmp .+526 ; 0x8c50 <MotorRegler+0x1c44>
8a42: 80 91 60 06 lds r24, 0x0660
8a46: 90 91 61 06 lds r25, 0x0661
8a4a: 81 5e subi r24, 0xE1 ; 225
8a4c: 9c 4f sbci r25, 0xFC ; 252
8a4e: 8f 33 cpi r24, 0x3F ; 63
8a50: 96 40 sbci r25, 0x06 ; 6
8a52: 08 f0 brcs .+2 ; 0x8a56 <MotorRegler+0x1a4a>
8a54: fd c0 rjmp .+506 ; 0x8c50 <MotorRegler+0x1c44>
8a56: 80 91 72 06 lds r24, 0x0672
8a5a: 90 91 73 06 lds r25, 0x0673
8a5e: 81 5e subi r24, 0xE1 ; 225
8a60: 9c 4f sbci r25, 0xFC ; 252
8a62: 8f 33 cpi r24, 0x3F ; 63
8a64: 96 40 sbci r25, 0x06 ; 6
8a66: 08 f0 brcs .+2 ; 0x8a6a <MotorRegler+0x1a5e>
8a68: f3 c0 rjmp .+486 ; 0x8c50 <MotorRegler+0x1c44>
8a6a: 80 91 1a 04 lds r24, 0x041A
8a6e: 81 11 cpse r24, r1
8a70: ef c0 rjmp .+478 ; 0x8c50 <MotorRegler+0x1c44>
8a72: 80 91 67 06 lds r24, 0x0667
8a76: 90 91 68 06 lds r25, 0x0668
8a7a: 4f 96 adiw r24, 0x1f ; 31
8a7c: cf 97 sbiw r24, 0x3f ; 63
8a7e: 08 f0 brcs .+2 ; 0x8a82 <MotorRegler+0x1a76>
8a80: e7 c0 rjmp .+462 ; 0x8c50 <MotorRegler+0x1c44>
{
DebugOut.Analog[16] = EE_Parameter.Driftkomp;
8a82: 10 e0 ldi r17, 0x00 ; 0
8a84: 10 93 69 0c sts 0x0C69, r17
8a88: 00 93 68 0c sts 0x0C68, r16
DriftNick -= DriftNick / (64 * (unsigned int) EE_Parameter.Driftkomp);
8a8c: e0 91 be 03 lds r30, 0x03BE
8a90: f0 91 bf 03 lds r31, 0x03BF
8a94: 00 24 eor r0, r0
8a96: 16 95 lsr r17
8a98: 07 95 ror r16
8a9a: 07 94 ror r0
8a9c: 16 95 lsr r17
8a9e: 07 95 ror r16
8aa0: 07 94 ror r0
8aa2: 10 2f mov r17, r16
8aa4: 00 2d mov r16, r0
8aa6: cf 01 movw r24, r30
8aa8: b8 01 movw r22, r16
8aaa: 0e 94 42 b1 call 0x16284 ; 0x16284 <__udivmodhi4>
8aae: e6 1b sub r30, r22
8ab0: f7 0b sbc r31, r23
8ab2: f0 93 bf 03 sts 0x03BF, r31
8ab6: e0 93 be 03 sts 0x03BE, r30
DriftRoll -= DriftRoll / (64 * (unsigned int) EE_Parameter.Driftkomp);
8aba: 20 91 bc 03 lds r18, 0x03BC
8abe: 30 91 bd 03 lds r19, 0x03BD
8ac2: c9 01 movw r24, r18
8ac4: b8 01 movw r22, r16
8ac6: 0e 94 42 b1 call 0x16284 ; 0x16284 <__udivmodhi4>
8aca: 26 1b sub r18, r22
8acc: 37 0b sbc r19, r23
8ace: 30 93 bd 03 sts 0x03BD, r19
8ad2: 20 93 bc 03 sts 0x03BC, r18
GierGyroFehler -= GierGyroFehler / (64 * (unsigned int) EE_Parameter.Driftkomp);
8ad6: e0 90 18 04 lds r14, 0x0418
8ada: f0 90 19 04 lds r15, 0x0419
8ade: c7 01 movw r24, r14
8ae0: b8 01 movw r22, r16
8ae2: 0e 94 42 b1 call 0x16284 ; 0x16284 <__udivmodhi4>
8ae6: e6 1a sub r14, r22
8ae8: f7 0a sbc r15, r23
8aea: f0 92 19 04 sts 0x0419, r15
8aee: e0 92 18 04 sts 0x0418, r14
if((MaxStickNick > 64) || (MaxStickRoll > 64) || (abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25))
8af2: 80 91 d0 03 lds r24, 0x03D0
8af6: 90 91 d1 03 lds r25, 0x03D1
8afa: 81 34 cpi r24, 0x41 ; 65
8afc: 91 05 cpc r25, r1
8afe: bc f4 brge .+46 ; 0x8b2e <MotorRegler+0x1b22>
8b00: 80 91 ce 03 lds r24, 0x03CE
8b04: 90 91 cf 03 lds r25, 0x03CF
8b08: 81 34 cpi r24, 0x41 ; 65
8b0a: 91 05 cpc r25, r1
8b0c: 84 f4 brge .+32 ; 0x8b2e <MotorRegler+0x1b22>
8b0e: a0 91 42 05 lds r26, 0x0542
8b12: b0 e0 ldi r27, 0x00 ; 0
8b14: aa 0f add r26, r26
8b16: bb 1f adc r27, r27
8b18: af 5c subi r26, 0xCF ; 207
8b1a: b7 4f sbci r27, 0xF7 ; 247
8b1c: 8d 91 ld r24, X+
8b1e: 9c 91 ld r25, X
8b20: 99 23 and r25, r25
8b22: 1c f4 brge .+6 ; 0x8b2a <MotorRegler+0x1b1e>
8b24: 91 95 neg r25
8b26: 81 95 neg r24
8b28: 91 09 sbc r25, r1
8b2a: 4a 97 sbiw r24, 0x1a ; 26
8b2c: c4 f0 brlt .+48 ; 0x8b5e <MotorRegler+0x1b52>
{
DriftNick /= 2;
8b2e: cf 01 movw r24, r30
8b30: ff 23 and r31, r31
8b32: 0c f4 brge .+2 ; 0x8b36 <MotorRegler+0x1b2a>
8b34: 01 96 adiw r24, 0x01 ; 1
8b36: 95 95 asr r25
8b38: 87 95 ror r24
8b3a: 90 93 bf 03 sts 0x03BF, r25
8b3e: 80 93 be 03 sts 0x03BE, r24
DriftRoll /= 2;
8b42: c9 01 movw r24, r18
8b44: 99 23 and r25, r25
8b46: 0c f4 brge .+2 ; 0x8b4a <MotorRegler+0x1b3e>
8b48: 01 96 adiw r24, 0x01 ; 1
8b4a: 95 95 asr r25
8b4c: 87 95 ror r24
8b4e: 90 93 bd 03 sts 0x03BD, r25
8b52: 80 93 bc 03 sts 0x03BC, r24
GierGyroFehler = 0;
8b56: 10 92 19 04 sts 0x0419, r1
8b5a: 10 92 18 04 sts 0x0418, r1
}
if(DriftNick > 3000) { DriftNick = 0; AdNeutralNick++;}
8b5e: 80 91 be 03 lds r24, 0x03BE
8b62: 90 91 bf 03 lds r25, 0x03BF
8b66: 89 3b cpi r24, 0xB9 ; 185
8b68: 9b 40 sbci r25, 0x0B ; 11
8b6a: 6c f0 brlt .+26 ; 0x8b86 <MotorRegler+0x1b7a>
8b6c: 10 92 bf 03 sts 0x03BF, r1
8b70: 10 92 be 03 sts 0x03BE, r1
8b74: 80 91 57 04 lds r24, 0x0457
8b78: 90 91 58 04 lds r25, 0x0458
8b7c: 01 96 adiw r24, 0x01 ; 1
8b7e: 90 93 58 04 sts 0x0458, r25
8b82: 80 93 57 04 sts 0x0457, r24
if(DriftNick <-3000) { DriftNick = 0; AdNeutralNick--;}
8b86: 80 91 be 03 lds r24, 0x03BE
8b8a: 90 91 bf 03 lds r25, 0x03BF
8b8e: 88 34 cpi r24, 0x48 ; 72
8b90: 94 4f sbci r25, 0xF4 ; 244
8b92: 6c f4 brge .+26 ; 0x8bae <MotorRegler+0x1ba2>
8b94: 10 92 bf 03 sts 0x03BF, r1
8b98: 10 92 be 03 sts 0x03BE, r1
8b9c: 80 91 57 04 lds r24, 0x0457
8ba0: 90 91 58 04 lds r25, 0x0458
8ba4: 01 97 sbiw r24, 0x01 ; 1
8ba6: 90 93 58 04 sts 0x0458, r25
8baa: 80 93 57 04 sts 0x0457, r24
if(DriftRoll > 3000) { DriftRoll = 0; AdNeutralRoll++;}
8bae: 80 91 bc 03 lds r24, 0x03BC
8bb2: 90 91 bd 03 lds r25, 0x03BD
8bb6: 89 3b cpi r24, 0xB9 ; 185
8bb8: 9b 40 sbci r25, 0x0B ; 11
8bba: 6c f0 brlt .+26 ; 0x8bd6 <MotorRegler+0x1bca>
8bbc: 10 92 bd 03 sts 0x03BD, r1
8bc0: 10 92 bc 03 sts 0x03BC, r1
8bc4: 80 91 55 04 lds r24, 0x0455
8bc8: 90 91 56 04 lds r25, 0x0456
8bcc: 01 96 adiw r24, 0x01 ; 1
8bce: 90 93 56 04 sts 0x0456, r25
8bd2: 80 93 55 04 sts 0x0455, r24
if(DriftRoll <-3000) { DriftRoll = 0; AdNeutralRoll--;}
8bd6: 80 91 bc 03 lds r24, 0x03BC
8bda: 90 91 bd 03 lds r25, 0x03BD
8bde: 88 34 cpi r24, 0x48 ; 72
8be0: 94 4f sbci r25, 0xF4 ; 244
8be2: 6c f4 brge .+26 ; 0x8bfe <MotorRegler+0x1bf2>
8be4: 10 92 bd 03 sts 0x03BD, r1
8be8: 10 92 bc 03 sts 0x03BC, r1
8bec: 80 91 55 04 lds r24, 0x0455
8bf0: 90 91 56 04 lds r25, 0x0456
8bf4: 01 97 sbiw r24, 0x01 ; 1
8bf6: 90 93 56 04 sts 0x0456, r25
8bfa: 80 93 55 04 sts 0x0455, r24
if(GierGyroFehler > 3500) { GierGyroFehler = 0; AdNeutralGier++; }
8bfe: 80 91 18 04 lds r24, 0x0418
8c02: 90 91 19 04 lds r25, 0x0419
8c06: 8d 3a cpi r24, 0xAD ; 173
8c08: 9d 40 sbci r25, 0x0D ; 13
8c0a: 6c f0 brlt .+26 ; 0x8c26 <MotorRegler+0x1c1a>
8c0c: 10 92 19 04 sts 0x0419, r1
8c10: 10 92 18 04 sts 0x0418, r1
8c14: 80 91 53 04 lds r24, 0x0453
8c18: 90 91 54 04 lds r25, 0x0454
8c1c: 01 96 adiw r24, 0x01 ; 1
8c1e: 90 93 54 04 sts 0x0454, r25
8c22: 80 93 53 04 sts 0x0453, r24
if(GierGyroFehler <-3500) { GierGyroFehler = 0; AdNeutralGier--; }
8c26: 80 91 18 04 lds r24, 0x0418
8c2a: 90 91 19 04 lds r25, 0x0419
8c2e: 84 35 cpi r24, 0x54 ; 84
8c30: 92 4f sbci r25, 0xF2 ; 242
8c32: d4 f4 brge .+52 ; 0x8c68 <MotorRegler+0x1c5c>
8c34: 10 92 19 04 sts 0x0419, r1
8c38: 10 92 18 04 sts 0x0418, r1
8c3c: 80 91 53 04 lds r24, 0x0453
8c40: 90 91 54 04 lds r25, 0x0454
8c44: 01 97 sbiw r24, 0x01 ; 1
8c46: 90 93 54 04 sts 0x0454, r25
8c4a: 80 93 53 04 sts 0x0453, r24
8c4e: 0c c0 rjmp .+24 ; 0x8c68 <MotorRegler+0x1c5c>
}
else
{
DriftNick = 0;
8c50: 10 92 bf 03 sts 0x03BF, r1
8c54: 10 92 be 03 sts 0x03BE, r1
DriftRoll = 0;
8c58: 10 92 bd 03 sts 0x03BD, r1
8c5c: 10 92 bc 03 sts 0x03BC, r1
GierGyroFehler = 0;
8c60: 10 92 19 04 sts 0x0419, r1
8c64: 10 92 18 04 sts 0x0418, r1
}
TrichterFlug = 0;
8c68: 10 92 1a 04 sts 0x041A, r1
LageKorrekturRoll = 0;
LageKorrekturNick = 0;
TrichterFlug = 0;
}
*/
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH
8c6c: 80 91 42 06 lds r24, 0x0642
8c70: 81 11 cpse r24, r1
8c72: 08 c0 rjmp .+16 ; 0x8c84 <MotorRegler+0x1c78>
8c74: 10 92 ed 03 sts 0x03ED, r1
8c78: 10 92 ec 03 sts 0x03EC, r1
8c7c: 10 92 eb 03 sts 0x03EB, r1
8c80: 10 92 ea 03 sts 0x03EA, r1
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick_Alt = MittelIntegralNick;
8c84: 80 91 34 06 lds r24, 0x0634
8c88: 90 91 35 06 lds r25, 0x0635
8c8c: a0 91 36 06 lds r26, 0x0636
8c90: b0 91 37 06 lds r27, 0x0637
8c94: 80 93 92 03 sts 0x0392, r24
8c98: 90 93 93 03 sts 0x0393, r25
8c9c: a0 93 94 03 sts 0x0394, r26
8ca0: b0 93 95 03 sts 0x0395, r27
MittelIntegralRoll_Alt = MittelIntegralRoll;
8ca4: 80 91 3c 06 lds r24, 0x063C
8ca8: 90 91 3d 06 lds r25, 0x063D
8cac: a0 91 3e 06 lds r26, 0x063E
8cb0: b0 91 3f 06 lds r27, 0x063F
8cb4: 80 93 8e 03 sts 0x038E, r24
8cb8: 90 93 8f 03 sts 0x038F, r25
8cbc: a0 93 90 03 sts 0x0390, r26
8cc0: b0 93 91 03 sts 0x0391, r27
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick = 0;
8cc4: 10 92 34 06 sts 0x0634, r1
8cc8: 10 92 35 06 sts 0x0635, r1
8ccc: 10 92 36 06 sts 0x0636, r1
8cd0: 10 92 37 06 sts 0x0637, r1
MittelIntegralRoll = 0;
8cd4: 10 92 3c 06 sts 0x063C, r1
8cd8: 10 92 3d 06 sts 0x063D, r1
8cdc: 10 92 3e 06 sts 0x063E, r1
8ce0: 10 92 3f 06 sts 0x063F, r1
ZaehlMessungen = 0;
8ce4: 10 92 53 03 sts 0x0353, r1
8ce8: 10 92 52 03 sts 0x0352, r1
} // ZaehlMessungen >= ABGLEICH_ANZAHL
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(abs(StickGier) > 3) // war 15
8cec: e0 91 10 04 lds r30, 0x0410
8cf0: f0 91 11 04 lds r31, 0x0411
8cf4: df 01 movw r26, r30
8cf6: ff 23 and r31, r31
8cf8: 24 f4 brge .+8 ; 0x8d02 <MotorRegler+0x1cf6>
8cfa: aa 27 eor r26, r26
8cfc: bb 27 eor r27, r27
8cfe: ae 1b sub r26, r30
8d00: bf 0b sbc r27, r31
8d02: a4 30 cpi r26, 0x04 ; 4
8d04: b1 05 cpc r27, r1
8d06: 3c f0 brlt .+14 ; 0x8d16 <MotorRegler+0x1d0a>
{
// KompassSignalSchlecht = 1000;
if(!(Parameter_GlobalConfig & CFG_KOMPASS_FIX))
8d08: 80 91 5c 06 lds r24, 0x065C
8d0c: 84 fd sbrc r24, 4
8d0e: 03 c0 rjmp .+6 ; 0x8d16 <MotorRegler+0x1d0a>
{
NeueKompassRichtungMerken = 50; // eine Sekunde zum Einloggen
8d10: 82 e3 ldi r24, 0x32 ; 50
8d12: 80 93 ee 03 sts 0x03EE, r24
};
}
tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx²
8d16: 10 91 57 05 lds r17, 0x0557
tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4;
if(GasIsZeroCnt > 512) tmp_int = 0; // disable Yawing when Gas-Stick is to Zero
8d1a: 80 91 c5 03 lds r24, 0x03C5
8d1e: 90 91 c6 03 lds r25, 0x03C6
8d22: 81 30 cpi r24, 0x01 ; 1
8d24: 92 40 sbci r25, 0x02 ; 2
8d26: 68 f5 brcc .+90 ; 0x8d82 <MotorRegler+0x1d76>
if(!(Parameter_GlobalConfig & CFG_KOMPASS_FIX))
{
NeueKompassRichtungMerken = 50; // eine Sekunde zum Einloggen
};
}
tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx²
8d28: 9f 01 movw r18, r30
8d2a: 0e 94 ad b1 call 0x1635a ; 0x1635a <__mulhisi3>
8d2e: 9b 01 movw r18, r22
8d30: ac 01 movw r20, r24
8d32: a1 2f mov r26, r17
8d34: b0 e0 ldi r27, 0x00 ; 0
8d36: 0e 94 c8 b1 call 0x16390 ; 0x16390 <__muluhisi3>
8d3a: 6b 01 movw r12, r22
8d3c: 7c 01 movw r14, r24
8d3e: 99 23 and r25, r25
8d40: 34 f4 brge .+12 ; 0x8d4e <MotorRegler+0x1d42>
8d42: 5f ef ldi r21, 0xFF ; 255
8d44: c5 0e add r12, r21
8d46: 51 e0 ldi r21, 0x01 ; 1
8d48: d5 1e adc r13, r21
8d4a: e1 1c adc r14, r1
8d4c: f1 1c adc r15, r1
8d4e: b7 01 movw r22, r14
8d50: a6 01 movw r20, r12
8d52: 03 2e mov r0, r19
8d54: 39 e0 ldi r19, 0x09 ; 9
8d56: 75 95 asr r23
8d58: 67 95 ror r22
8d5a: 57 95 ror r21
8d5c: 47 95 ror r20
8d5e: 3a 95 dec r19
8d60: d1 f7 brne .-12 ; 0x8d56 <MotorRegler+0x1d4a>
8d62: 30 2d mov r19, r0
tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4;
8d64: 1e 9f mul r17, r30
8d66: c0 01 movw r24, r0
8d68: 1f 9f mul r17, r31
8d6a: 90 0d add r25, r0
8d6c: 11 24 eor r1, r1
8d6e: 99 23 and r25, r25
8d70: 0c f4 brge .+2 ; 0x8d74 <MotorRegler+0x1d68>
8d72: 03 96 adiw r24, 0x03 ; 3
8d74: 95 95 asr r25
8d76: 87 95 ror r24
8d78: 95 95 asr r25
8d7a: 87 95 ror r24
8d7c: 48 0f add r20, r24
8d7e: 59 1f adc r21, r25
8d80: 02 c0 rjmp .+4 ; 0x8d86 <MotorRegler+0x1d7a>
if(GasIsZeroCnt > 512) tmp_int = 0; // disable Yawing when Gas-Stick is to Zero
8d82: 40 e0 ldi r20, 0x00 ; 0
8d84: 50 e0 ldi r21, 0x00 ; 0
tmp_int += CompassGierSetpoint;
8d86: 80 91 f0 03 lds r24, 0x03F0
8d8a: 90 91 f1 03 lds r25, 0x03F1
8d8e: 48 0f add r20, r24
8d90: 59 1f adc r21, r25
sollGier = tmp_int;
8d92: 66 27 eor r22, r22
8d94: 57 fd sbrc r21, 7
8d96: 60 95 com r22
8d98: 76 2f mov r23, r22
8d9a: 40 93 9e 03 sts 0x039E, r20
8d9e: 50 93 9f 03 sts 0x039F, r21
8da2: 60 93 a0 03 sts 0x03A0, r22
8da6: 70 93 a1 03 sts 0x03A1, r23
Mess_Integral_Gier -= tmp_int;
8daa: 80 91 2e 04 lds r24, 0x042E
8dae: 90 91 2f 04 lds r25, 0x042F
8db2: a0 91 30 04 lds r26, 0x0430
8db6: b0 91 31 04 lds r27, 0x0431
8dba: 84 1b sub r24, r20
8dbc: 95 0b sbc r25, r21
8dbe: a6 0b sbc r26, r22
8dc0: b7 0b sbc r27, r23
8dc2: 80 93 2e 04 sts 0x042E, r24
8dc6: 90 93 2f 04 sts 0x042F, r25
8dca: a0 93 30 04 sts 0x0430, r26
8dce: b0 93 31 04 sts 0x0431, r27
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen
8dd2: 81 35 cpi r24, 0x51 ; 81
8dd4: 63 ec ldi r22, 0xC3 ; 195
8dd6: 96 07 cpc r25, r22
8dd8: a1 05 cpc r26, r1
8dda: b1 05 cpc r27, r1
8ddc: 6c f0 brlt .+26 ; 0x8df8 <MotorRegler+0x1dec>
8dde: 80 e5 ldi r24, 0x50 ; 80
8de0: 93 ec ldi r25, 0xC3 ; 195
8de2: a0 e0 ldi r26, 0x00 ; 0
8de4: b0 e0 ldi r27, 0x00 ; 0
8de6: 80 93 2e 04 sts 0x042E, r24
8dea: 90 93 2f 04 sts 0x042F, r25
8dee: a0 93 30 04 sts 0x0430, r26
8df2: b0 93 31 04 sts 0x0431, r27
8df6: 11 c0 rjmp .+34 ; 0x8e1a <MotorRegler+0x1e0e>
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000;
8df8: 80 3b cpi r24, 0xB0 ; 176
8dfa: 9c 43 sbci r25, 0x3C ; 60
8dfc: af 4f sbci r26, 0xFF ; 255
8dfe: bf 4f sbci r27, 0xFF ; 255
8e00: 64 f4 brge .+24 ; 0x8e1a <MotorRegler+0x1e0e>
8e02: 80 eb ldi r24, 0xB0 ; 176
8e04: 9c e3 ldi r25, 0x3C ; 60
8e06: af ef ldi r26, 0xFF ; 255
8e08: bf ef ldi r27, 0xFF ; 255
8e0a: 80 93 2e 04 sts 0x042E, r24
8e0e: 90 93 2f 04 sts 0x042F, r25
8e12: a0 93 30 04 sts 0x0430, r26
8e16: b0 93 31 04 sts 0x0431, r27
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Kompass
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV))
8e1a: e0 90 4e 01 lds r14, 0x014E
8e1e: f0 90 4f 01 lds r15, 0x014F
8e22: ff 20 and r15, r15
8e24: 0c f4 brge .+2 ; 0x8e28 <MotorRegler+0x1e1c>
8e26: fe c0 rjmp .+508 ; 0x9024 <MotorRegler+0x2018>
8e28: 80 91 5c 06 lds r24, 0x065C
8e2c: 83 ff sbrs r24, 3
8e2e: fa c0 rjmp .+500 ; 0x9024 <MotorRegler+0x2018>
{
if(CalculateCompassTimer-- == 1)
8e30: 80 91 4d 01 lds r24, 0x014D
8e34: 81 30 cpi r24, 0x01 ; 1
8e36: 21 f0 breq .+8 ; 0x8e40 <MotorRegler+0x1e34>
8e38: 81 50 subi r24, 0x01 ; 1
8e3a: 80 93 4d 01 sts 0x014D, r24
8e3e: f6 c0 rjmp .+492 ; 0x902c <MotorRegler+0x2020>
{
int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt
CalculateCompassTimer = 13; // falls keine Navi-Daten
8e40: 8d e0 ldi r24, 0x0D ; 13
8e42: 80 93 4d 01 sts 0x014D, r24
// max. Korrekturwert schätzen
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
8e46: 80 91 42 04 lds r24, 0x0442
8e4a: 90 91 43 04 lds r25, 0x0443
8e4e: a0 91 44 04 lds r26, 0x0444
8e52: b0 91 45 04 lds r27, 0x0445
8e56: bb 23 and r27, r27
8e58: 24 f4 brge .+8 ; 0x8e62 <MotorRegler+0x1e56>
8e5a: 81 50 subi r24, 0x01 ; 1
8e5c: 9e 4f sbci r25, 0xFE ; 254
8e5e: af 4f sbci r26, 0xFF ; 255
8e60: bf 4f sbci r27, 0xFF ; 255
8e62: 07 2e mov r0, r23
8e64: 79 e0 ldi r23, 0x09 ; 9
8e66: b5 95 asr r27
8e68: a7 95 ror r26
8e6a: 97 95 ror r25
8e6c: 87 95 ror r24
8e6e: 7a 95 dec r23
8e70: d1 f7 brne .-12 ; 0x8e66 <MotorRegler+0x1e5a>
8e72: 70 2d mov r23, r0
8e74: 9c 01 movw r18, r24
8e76: 99 23 and r25, r25
8e78: 24 f4 brge .+8 ; 0x8e82 <MotorRegler+0x1e76>
8e7a: 22 27 eor r18, r18
8e7c: 33 27 eor r19, r19
8e7e: 28 1b sub r18, r24
8e80: 39 0b sbc r19, r25
v = abs(IntegralRoll /512);
8e82: 80 91 3e 04 lds r24, 0x043E
8e86: 90 91 3f 04 lds r25, 0x043F
8e8a: a0 91 40 04 lds r26, 0x0440
8e8e: b0 91 41 04 lds r27, 0x0441
8e92: bb 23 and r27, r27
8e94: 24 f4 brge .+8 ; 0x8e9e <MotorRegler+0x1e92>
8e96: 81 50 subi r24, 0x01 ; 1
8e98: 9e 4f sbci r25, 0xFE ; 254
8e9a: af 4f sbci r26, 0xFF ; 255
8e9c: bf 4f sbci r27, 0xFF ; 255
8e9e: 07 2e mov r0, r23
8ea0: 79 e0 ldi r23, 0x09 ; 9
8ea2: b5 95 asr r27
8ea4: a7 95 ror r26
8ea6: 97 95 ror r25
8ea8: 87 95 ror r24
8eaa: 7a 95 dec r23
8eac: d1 f7 brne .-12 ; 0x8ea2 <MotorRegler+0x1e96>
8eae: 70 2d mov r23, r0
8eb0: 6c 01 movw r12, r24
8eb2: 99 23 and r25, r25
8eb4: 24 f4 brge .+8 ; 0x8ebe <MotorRegler+0x1eb2>
8eb6: cc 24 eor r12, r12
8eb8: dd 24 eor r13, r13
8eba: c8 1a sub r12, r24
8ebc: d9 0a sbc r13, r25
8ebe: c2 16 cp r12, r18
8ec0: d3 06 cpc r13, r19
8ec2: 0c f4 brge .+2 ; 0x8ec6 <MotorRegler+0x1eba>
8ec4: 69 01 movw r12, r18
if(v > w) w = v; // grösste Neigung ermitteln
// korrektur = w / 4 + 1;
korrektur = w / 8 + 2;
ErsatzKompassInGrad = ErsatzKompass/GIER_GRAD_FAKTOR;
8ec6: 80 90 6e 06 lds r8, 0x066E
8eca: 90 90 6f 06 lds r9, 0x066F
8ece: a0 90 70 06 lds r10, 0x0670
8ed2: b0 90 71 06 lds r11, 0x0671
8ed6: 20 91 21 01 lds r18, 0x0121
8eda: 30 91 22 01 lds r19, 0x0122
8ede: 40 91 23 01 lds r20, 0x0123
8ee2: 50 91 24 01 lds r21, 0x0124
8ee6: c5 01 movw r24, r10
8ee8: b4 01 movw r22, r8
8eea: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
8eee: 89 01 movw r16, r18
8ef0: 9a 01 movw r18, r20
8ef2: 10 93 22 06 sts 0x0622, r17
8ef6: 00 93 21 06 sts 0x0621, r16
// Kompassfehlerwert bestimmen
fehler = ((540 + KompassValue - ErsatzKompassInGrad) % 360) - 180;
8efa: 84 ee ldi r24, 0xE4 ; 228
8efc: e8 1a sub r14, r24
8efe: 8d ef ldi r24, 0xFD ; 253
8f00: f8 0a sbc r15, r24
8f02: c7 01 movw r24, r14
8f04: 80 1b sub r24, r16
8f06: 91 0b sbc r25, r17
8f08: 68 e6 ldi r22, 0x68 ; 104
8f0a: 71 e0 ldi r23, 0x01 ; 1
8f0c: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
8f10: 84 5b subi r24, 0xB4 ; 180
8f12: 91 09 sbc r25, r1
// GIER_GRAD_FAKTOR ist ca. 1200
// Kompasswert einloggen
if(NeueKompassRichtungMerken) KompassSollWert = ErsatzKompassInGrad;
8f14: 60 91 ee 03 lds r22, 0x03EE
8f18: 66 23 and r22, r22
8f1a: 21 f0 breq .+8 ; 0x8f24 <MotorRegler+0x1f18>
8f1c: 10 93 1d 04 sts 0x041D, r17
8f20: 00 93 1c 04 sts 0x041C, r16
if(KompassSignalSchlecht) KompassSignalSchlecht--;
8f24: 40 91 4a 01 lds r20, 0x014A
8f28: 50 91 4b 01 lds r21, 0x014B
8f2c: 41 15 cp r20, r1
8f2e: 51 05 cpc r21, r1
8f30: 39 f0 breq .+14 ; 0x8f40 <MotorRegler+0x1f34>
8f32: 41 50 subi r20, 0x01 ; 1
8f34: 51 09 sbc r21, r1
8f36: 50 93 4b 01 sts 0x014B, r21
8f3a: 40 93 4a 01 sts 0x014A, r20
8f3e: 13 c0 rjmp .+38 ; 0x8f66 <MotorRegler+0x1f5a>
else
if(w < 25)
8f40: a9 e1 ldi r26, 0x19 ; 25
8f42: ca 16 cp r12, r26
8f44: d1 04 cpc r13, r1
8f46: ac f4 brge .+42 ; 0x8f72 <MotorRegler+0x1f66>
{
GierGyroFehler += fehler;
8f48: 40 91 18 04 lds r20, 0x0418
8f4c: 50 91 19 04 lds r21, 0x0419
8f50: 48 0f add r20, r24
8f52: 59 1f adc r21, r25
8f54: 50 93 19 04 sts 0x0419, r21
8f58: 40 93 18 04 sts 0x0418, r20
if(NeueKompassRichtungMerken) NeueKompassRichtungMerken--;
8f5c: 66 23 and r22, r22
8f5e: 19 f0 breq .+6 ; 0x8f66 <MotorRegler+0x1f5a>
8f60: 61 50 subi r22, 0x01 ; 1
8f62: 60 93 ee 03 sts 0x03EE, r22
}
}
*/
}
// Kompass fusionieren
if(!KompassSignalSchlecht) ErsatzKompass += (fehler * KompassFusion) / korrektur;
8f66: 40 91 4a 01 lds r20, 0x014A
8f6a: 50 91 4b 01 lds r21, 0x014B
8f6e: 45 2b or r20, r21
8f70: 49 f5 brne .+82 ; 0x8fc4 <MotorRegler+0x1fb8>
8f72: 40 91 4c 01 lds r20, 0x014C
8f76: 48 9f mul r20, r24
8f78: f0 01 movw r30, r0
8f7a: 49 9f mul r20, r25
8f7c: f0 0d add r31, r0
8f7e: 11 24 eor r1, r1
// max. Korrekturwert schätzen
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
v = abs(IntegralRoll /512);
if(v > w) w = v; // grösste Neigung ermitteln
// korrektur = w / 4 + 1;
korrektur = w / 8 + 2;
8f80: a6 01 movw r20, r12
8f82: dd 20 and r13, r13
8f84: 14 f4 brge .+4 ; 0x8f8a <MotorRegler+0x1f7e>
8f86: 49 5f subi r20, 0xF9 ; 249
8f88: 5f 4f sbci r21, 0xFF ; 255
8f8a: ba 01 movw r22, r20
8f8c: 75 95 asr r23
8f8e: 67 95 ror r22
8f90: 75 95 asr r23
8f92: 67 95 ror r22
8f94: 75 95 asr r23
8f96: 67 95 ror r22
8f98: 6e 5f subi r22, 0xFE ; 254
8f9a: 7f 4f sbci r23, 0xFF ; 255
}
}
*/
}
// Kompass fusionieren
if(!KompassSignalSchlecht) ErsatzKompass += (fehler * KompassFusion) / korrektur;
8f9c: cf 01 movw r24, r30
8f9e: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
8fa2: cb 01 movw r24, r22
8fa4: aa 27 eor r26, r26
8fa6: 97 fd sbrc r25, 7
8fa8: a0 95 com r26
8faa: ba 2f mov r27, r26
8fac: 88 0e add r8, r24
8fae: 99 1e adc r9, r25
8fb0: aa 1e adc r10, r26
8fb2: bb 1e adc r11, r27
8fb4: 80 92 6e 06 sts 0x066E, r8
8fb8: 90 92 6f 06 sts 0x066F, r9
8fbc: a0 92 70 06 sts 0x0670, r10
8fc0: b0 92 71 06 sts 0x0671, r11
// MK Gieren
if(!NeueKompassRichtungMerken)
8fc4: 80 91 ee 03 lds r24, 0x03EE
8fc8: 81 11 cpse r24, r1
8fca: 27 c0 rjmp .+78 ; 0x901a <MotorRegler+0x200e>
{
r = ((540 + (KompassSollWert - ErsatzKompassInGrad)) % 360) - 180;
v = r * (Parameter_KompassWirkung/2); // nach Kompass ausrichten
8fcc: 40 91 37 01 lds r20, 0x0137
8fd0: 46 95 lsr r20
// Kompass fusionieren
if(!KompassSignalSchlecht) ErsatzKompass += (fehler * KompassFusion) / korrektur;
// MK Gieren
if(!NeueKompassRichtungMerken)
{
r = ((540 + (KompassSollWert - ErsatzKompassInGrad)) % 360) - 180;
8fd2: 80 91 1c 04 lds r24, 0x041C
8fd6: 90 91 1d 04 lds r25, 0x041D
8fda: 80 1b sub r24, r16
8fdc: 91 0b sbc r25, r17
8fde: 84 5e subi r24, 0xE4 ; 228
8fe0: 9d 4f sbci r25, 0xFD ; 253
8fe2: 68 e6 ldi r22, 0x68 ; 104
8fe4: 71 e0 ldi r23, 0x01 ; 1
8fe6: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
8fea: 84 5b subi r24, 0xB4 ; 180
8fec: 91 09 sbc r25, r1
v = r * (Parameter_KompassWirkung/2); // nach Kompass ausrichten
8fee: 48 9f mul r20, r24
8ff0: 90 01 movw r18, r0
8ff2: 49 9f mul r20, r25
8ff4: 30 0d add r19, r0
8ff6: 11 24 eor r1, r1
CompassGierSetpoint = v / 16;
8ff8: 33 23 and r19, r19
8ffa: 14 f4 brge .+4 ; 0x9000 <MotorRegler+0x1ff4>
8ffc: 21 5f subi r18, 0xF1 ; 241
8ffe: 3f 4f sbci r19, 0xFF ; 255
9000: 35 95 asr r19
9002: 27 95 ror r18
9004: 35 95 asr r19
9006: 27 95 ror r18
9008: 35 95 asr r19
900a: 27 95 ror r18
900c: 35 95 asr r19
900e: 27 95 ror r18
9010: 30 93 f1 03 sts 0x03F1, r19
9014: 20 93 f0 03 sts 0x03F0, r18
9018: 09 c0 rjmp .+18 ; 0x902c <MotorRegler+0x2020>
}
else CompassGierSetpoint = 0;
901a: 10 92 f1 03 sts 0x03F1, r1
901e: 10 92 f0 03 sts 0x03F0, r1
9022: 04 c0 rjmp .+8 ; 0x902c <MotorRegler+0x2020>
} // CalculateCompassTimer
}
else CompassGierSetpoint = 0;
9024: 10 92 f1 03 sts 0x03F1, r1
9028: 10 92 f0 03 sts 0x03F0, r1
//DebugOut.Analog[16] = KompassFusion;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(TrichterFlug) { SummeRoll = 0; SummeNick = 0;};
902c: 80 91 1a 04 lds r24, 0x041A
9030: 88 23 and r24, r24
9032: 81 f0 breq .+32 ; 0x9054 <MotorRegler+0x2048>
9034: 10 92 22 04 sts 0x0422, r1
9038: 10 92 23 04 sts 0x0423, r1
903c: 10 92 24 04 sts 0x0424, r1
9040: 10 92 25 04 sts 0x0425, r1
9044: 10 92 26 04 sts 0x0426, r1
9048: 10 92 27 04 sts 0x0427, r1
904c: 10 92 28 04 sts 0x0428, r1
9050: 10 92 29 04 sts 0x0429, r1
if(!Looping_Nick) IntegralNickMalFaktor = (IntegralNick * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralNickMalFaktor = 0;
9054: 80 91 e7 03 lds r24, 0x03E7
9058: 81 11 cpse r24, r1
905a: 15 c0 rjmp .+42 ; 0x9086 <MotorRegler+0x207a>
905c: a0 91 42 06 lds r26, 0x0642
9060: 20 91 42 04 lds r18, 0x0442
9064: 30 91 43 04 lds r19, 0x0443
9068: 40 91 44 04 lds r20, 0x0444
906c: 50 91 45 04 lds r21, 0x0445
9070: b0 e0 ldi r27, 0x00 ; 0
9072: 0e 94 c8 b1 call 0x16390 ; 0x16390 <__muluhisi3>
9076: 28 ef ldi r18, 0xF8 ; 248
9078: 3a e2 ldi r19, 0x2A ; 42
907a: 40 e0 ldi r20, 0x00 ; 0
907c: 50 e0 ldi r21, 0x00 ; 0
907e: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
9082: 79 01 movw r14, r18
9084: 02 c0 rjmp .+4 ; 0x908a <MotorRegler+0x207e>
9086: e1 2c mov r14, r1
9088: f1 2c mov r15, r1
if(!Looping_Roll) IntegralRollMalFaktor = (IntegralRoll * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralRollMalFaktor = 0;
908a: 80 91 e6 03 lds r24, 0x03E6
908e: 81 11 cpse r24, r1
9090: 15 c0 rjmp .+42 ; 0x90bc <MotorRegler+0x20b0>
9092: a0 91 42 06 lds r26, 0x0642
9096: 20 91 3e 04 lds r18, 0x043E
909a: 30 91 3f 04 lds r19, 0x043F
909e: 40 91 40 04 lds r20, 0x0440
90a2: 50 91 41 04 lds r21, 0x0441
90a6: b0 e0 ldi r27, 0x00 ; 0
90a8: 0e 94 c8 b1 call 0x16390 ; 0x16390 <__muluhisi3>
90ac: 28 ef ldi r18, 0xF8 ; 248
90ae: 3a e2 ldi r19, 0x2A ; 42
90b0: 40 e0 ldi r20, 0x00 ; 0
90b2: 50 e0 ldi r21, 0x00 ; 0
90b4: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
90b8: 59 01 movw r10, r18
90ba: 02 c0 rjmp .+4 ; 0x90c0 <MotorRegler+0x20b4>
90bc: a1 2c mov r10, r1
90be: b1 2c mov r11, r1
#define TRIM_MAX 200
if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX;
90c0: 80 91 1e 06 lds r24, 0x061E
90c4: 90 91 1f 06 lds r25, 0x061F
90c8: 89 3c cpi r24, 0xC9 ; 201
90ca: 91 05 cpc r25, r1
90cc: 3c f0 brlt .+14 ; 0x90dc <MotorRegler+0x20d0>
90ce: 88 ec ldi r24, 0xC8 ; 200
90d0: 90 e0 ldi r25, 0x00 ; 0
90d2: 90 93 1f 06 sts 0x061F, r25
90d6: 80 93 1e 06 sts 0x061E, r24
90da: 09 c0 rjmp .+18 ; 0x90ee <MotorRegler+0x20e2>
90dc: 88 33 cpi r24, 0x38 ; 56
90de: 9f 4f sbci r25, 0xFF ; 255
90e0: 34 f4 brge .+12 ; 0x90ee <MotorRegler+0x20e2>
90e2: 88 e3 ldi r24, 0x38 ; 56
90e4: 9f ef ldi r25, 0xFF ; 255
90e6: 90 93 1f 06 sts 0x061F, r25
90ea: 80 93 1e 06 sts 0x061E, r24
if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX;
90ee: 80 91 25 06 lds r24, 0x0625
90f2: 90 91 26 06 lds r25, 0x0626
90f6: 89 3c cpi r24, 0xC9 ; 201
90f8: 91 05 cpc r25, r1
90fa: 3c f0 brlt .+14 ; 0x910a <MotorRegler+0x20fe>
90fc: 88 ec ldi r24, 0xC8 ; 200
90fe: 90 e0 ldi r25, 0x00 ; 0
9100: 90 93 26 06 sts 0x0626, r25
9104: 80 93 25 06 sts 0x0625, r24
9108: 09 c0 rjmp .+18 ; 0x911c <MotorRegler+0x2110>
910a: 88 33 cpi r24, 0x38 ; 56
910c: 9f 4f sbci r25, 0xFF ; 255
910e: 34 f4 brge .+12 ; 0x911c <MotorRegler+0x2110>
9110: 88 e3 ldi r24, 0x38 ; 56
9112: 9f ef ldi r25, 0xFF ; 255
9114: 90 93 26 06 sts 0x0626, r25
9118: 80 93 25 06 sts 0x0625, r24
MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);
911c: 40 90 6c 06 lds r4, 0x066C
9120: 51 2c mov r5, r1
9122: 61 2c mov r6, r1
9124: 71 2c mov r7, r1
9126: a0 91 27 06 lds r26, 0x0627
912a: b0 91 28 06 lds r27, 0x0628
912e: a3 01 movw r20, r6
9130: 92 01 movw r18, r4
9132: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
9136: 40 91 1e 06 lds r20, 0x061E
913a: 50 91 1f 06 lds r21, 0x061F
913e: 8a 01 movw r16, r20
9140: 22 27 eor r18, r18
9142: 17 fd sbrc r17, 7
9144: 20 95 com r18
9146: 32 2f mov r19, r18
9148: 00 0f add r16, r16
914a: 11 1f adc r17, r17
914c: 22 1f adc r18, r18
914e: 33 1f adc r19, r19
9150: 00 0f add r16, r16
9152: 11 1f adc r17, r17
9154: 22 1f adc r18, r18
9156: 33 1f adc r19, r19
9158: 00 0f add r16, r16
915a: 11 1f adc r17, r17
915c: 22 1f adc r18, r18
915e: 33 1f adc r19, r19
9160: 00 0f add r16, r16
9162: 11 1f adc r17, r17
9164: 22 1f adc r18, r18
9166: 33 1f adc r19, r19
9168: 00 0f add r16, r16
916a: 11 1f adc r17, r17
916c: 22 1f adc r18, r18
916e: 33 1f adc r19, r19
9170: 00 0f add r16, r16
9172: 11 1f adc r17, r17
9174: 22 1f adc r18, r18
9176: 33 1f adc r19, r19
9178: 00 0f add r16, r16
917a: 11 1f adc r17, r17
917c: 22 1f adc r18, r18
917e: 33 1f adc r19, r19
9180: ab 01 movw r20, r22
9182: bc 01 movw r22, r24
9184: 40 0f add r20, r16
9186: 51 1f adc r21, r17
9188: 62 1f adc r22, r18
918a: 73 1f adc r23, r19
918c: db 01 movw r26, r22
918e: ca 01 movw r24, r20
9190: 77 23 and r23, r23
9192: 1c f4 brge .+6 ; 0x919a <MotorRegler+0x218e>
9194: cf 96 adiw r24, 0x3f ; 63
9196: a1 1d adc r26, r1
9198: b1 1d adc r27, r1
919a: 68 94 set
919c: 15 f8 bld r1, 5
919e: b5 95 asr r27
91a0: a7 95 ror r26
91a2: 97 95 ror r25
91a4: 87 95 ror r24
91a6: 16 94 lsr r1
91a8: d1 f7 brne .-12 ; 0x919e <MotorRegler+0x2192>
91aa: 67 01 movw r12, r14
91ac: c8 0e add r12, r24
91ae: d9 1e adc r13, r25
91b0: d0 92 28 06 sts 0x0628, r13
91b4: c0 92 27 06 sts 0x0627, r12
MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);
91b8: a0 91 1c 06 lds r26, 0x061C
91bc: b0 91 1d 06 lds r27, 0x061D
91c0: a3 01 movw r20, r6
91c2: 92 01 movw r18, r4
91c4: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
91c8: 20 91 25 06 lds r18, 0x0625
91cc: 30 91 26 06 lds r19, 0x0626
91d0: 89 01 movw r16, r18
91d2: 22 27 eor r18, r18
91d4: 17 fd sbrc r17, 7
91d6: 20 95 com r18
91d8: 32 2f mov r19, r18
91da: 00 0f add r16, r16
91dc: 11 1f adc r17, r17
91de: 22 1f adc r18, r18
91e0: 33 1f adc r19, r19
91e2: 00 0f add r16, r16
91e4: 11 1f adc r17, r17
91e6: 22 1f adc r18, r18
91e8: 33 1f adc r19, r19
91ea: 00 0f add r16, r16
91ec: 11 1f adc r17, r17
91ee: 22 1f adc r18, r18
91f0: 33 1f adc r19, r19
91f2: 00 0f add r16, r16
91f4: 11 1f adc r17, r17
91f6: 22 1f adc r18, r18
91f8: 33 1f adc r19, r19
91fa: 00 0f add r16, r16
91fc: 11 1f adc r17, r17
91fe: 22 1f adc r18, r18
9200: 33 1f adc r19, r19
9202: 00 0f add r16, r16
9204: 11 1f adc r17, r17
9206: 22 1f adc r18, r18
9208: 33 1f adc r19, r19
920a: 00 0f add r16, r16
920c: 11 1f adc r17, r17
920e: 22 1f adc r18, r18
9210: 33 1f adc r19, r19
9212: dc 01 movw r26, r24
9214: cb 01 movw r24, r22
9216: 80 0f add r24, r16
9218: 91 1f adc r25, r17
921a: a2 1f adc r26, r18
921c: b3 1f adc r27, r19
921e: 8c 01 movw r16, r24
9220: 9d 01 movw r18, r26
9222: bb 23 and r27, r27
9224: 24 f4 brge .+8 ; 0x922e <MotorRegler+0x2222>
9226: 01 5c subi r16, 0xC1 ; 193
9228: 1f 4f sbci r17, 0xFF ; 255
922a: 2f 4f sbci r18, 0xFF ; 255
922c: 3f 4f sbci r19, 0xFF ; 255
922e: 68 94 set
9230: 15 f8 bld r1, 5
9232: 35 95 asr r19
9234: 27 95 ror r18
9236: 17 95 ror r17
9238: 07 95 ror r16
923a: 16 94 lsr r1
923c: d1 f7 brne .-12 ; 0x9232 <MotorRegler+0x2226>
923e: 0a 0d add r16, r10
9240: 1b 1d adc r17, r11
9242: 10 93 1d 06 sts 0x061D, r17
9246: 00 93 1c 06 sts 0x061C, r16
MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN));
924a: a0 91 67 06 lds r26, 0x0667
924e: b0 91 68 06 lds r27, 0x0668
9252: aa 0f add r26, r26
9254: bb 1f adc r27, r27
9256: 20 91 23 06 lds r18, 0x0623
925a: 30 e0 ldi r19, 0x00 ; 0
925c: 0e 94 c2 b1 call 0x16384 ; 0x16384 <__usmulhisi3>
9260: 2b 01 movw r4, r22
9262: 3c 01 movw r6, r24
9264: 99 23 and r25, r25
9266: 2c f4 brge .+10 ; 0x9272 <MotorRegler+0x2266>
9268: ff e3 ldi r31, 0x3F ; 63
926a: 4f 0e add r4, r31
926c: 51 1c adc r5, r1
926e: 61 1c adc r6, r1
9270: 71 1c adc r7, r1
9272: 68 94 set
9274: 15 f8 bld r1, 5
9276: 75 94 asr r7
9278: 67 94 ror r6
927a: 57 94 ror r5
927c: 47 94 ror r4
927e: 16 94 lsr r1
9280: d1 f7 brne .-12 ; 0x9276 <MotorRegler+0x226a>
9282: a0 91 31 06 lds r26, 0x0631
9286: 20 91 3a 04 lds r18, 0x043A
928a: 30 91 3b 04 lds r19, 0x043B
928e: 40 91 3c 04 lds r20, 0x043C
9292: 50 91 3d 04 lds r21, 0x043D
9296: b0 e0 ldi r27, 0x00 ; 0
9298: 0e 94 c8 b1 call 0x16390 ; 0x16390 <__muluhisi3>
929c: 20 ef ldi r18, 0xF0 ; 240
929e: 35 e5 ldi r19, 0x55 ; 85
92a0: 40 e0 ldi r20, 0x00 ; 0
92a2: 50 e0 ldi r21, 0x00 ; 0
92a4: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
92a8: 24 0d add r18, r4
92aa: 35 1d adc r19, r5
92ac: 30 93 68 06 sts 0x0668, r19
92b0: 20 93 67 06 sts 0x0667, r18
// Maximalwerte abfangen
#define MAX_SENSOR (4096)
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
92b4: 41 e0 ldi r20, 0x01 ; 1
92b6: c4 16 cp r12, r20
92b8: 40 e1 ldi r20, 0x10 ; 16
92ba: d4 06 cpc r13, r20
92bc: 3c f0 brlt .+14 ; 0x92cc <MotorRegler+0x22c0>
92be: 80 e0 ldi r24, 0x00 ; 0
92c0: 90 e1 ldi r25, 0x10 ; 16
92c2: 90 93 28 06 sts 0x0628, r25
92c6: 80 93 27 06 sts 0x0627, r24
92ca: 0d c0 rjmp .+26 ; 0x92e6 <MotorRegler+0x22da>
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
92cc: 80 91 27 06 lds r24, 0x0627
92d0: 90 91 28 06 lds r25, 0x0628
92d4: 81 15 cp r24, r1
92d6: 90 4f sbci r25, 0xF0 ; 240
92d8: 34 f4 brge .+12 ; 0x92e6 <MotorRegler+0x22da>
92da: 80 e0 ldi r24, 0x00 ; 0
92dc: 90 ef ldi r25, 0xF0 ; 240
92de: 90 93 28 06 sts 0x0628, r25
92e2: 80 93 27 06 sts 0x0627, r24
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
92e6: 01 30 cpi r16, 0x01 ; 1
92e8: 10 41 sbci r17, 0x10 ; 16
92ea: 3c f0 brlt .+14 ; 0x92fa <MotorRegler+0x22ee>
92ec: 80 e0 ldi r24, 0x00 ; 0
92ee: 90 e1 ldi r25, 0x10 ; 16
92f0: 90 93 1d 06 sts 0x061D, r25
92f4: 80 93 1c 06 sts 0x061C, r24
92f8: 0d c0 rjmp .+26 ; 0x9314 <MotorRegler+0x2308>
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
92fa: 80 91 1c 06 lds r24, 0x061C
92fe: 90 91 1d 06 lds r25, 0x061D
9302: 81 15 cp r24, r1
9304: 90 4f sbci r25, 0xF0 ; 240
9306: 34 f4 brge .+12 ; 0x9314 <MotorRegler+0x2308>
9308: 80 e0 ldi r24, 0x00 ; 0
930a: 90 ef ldi r25, 0xF0 ; 240
930c: 90 93 1d 06 sts 0x061D, r25
9310: 80 93 1c 06 sts 0x061C, r24
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
9314: 21 30 cpi r18, 0x01 ; 1
9316: 30 41 sbci r19, 0x10 ; 16
9318: 3c f0 brlt .+14 ; 0x9328 <MotorRegler+0x231c>
931a: 80 e0 ldi r24, 0x00 ; 0
931c: 90 e1 ldi r25, 0x10 ; 16
931e: 90 93 68 06 sts 0x0668, r25
9322: 80 93 67 06 sts 0x0667, r24
9326: 0d c0 rjmp .+26 ; 0x9342 <MotorRegler+0x2336>
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
9328: 80 91 67 06 lds r24, 0x0667
932c: 90 91 68 06 lds r25, 0x0668
9330: 81 15 cp r24, r1
9332: 90 4f sbci r25, 0xF0 ; 240
9334: 34 f4 brge .+12 ; 0x9342 <MotorRegler+0x2336>
9336: 80 e0 ldi r24, 0x00 ; 0
9338: 90 ef ldi r25, 0xF0 ; 240
933a: 90 93 68 06 sts 0x0668, r25
933e: 80 93 67 06 sts 0x0667, r24
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Undervoltage
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!(FC_StatusFlags & FC_STATUS_LOWBAT))
9342: 80 91 cb 03 lds r24, 0x03CB
9346: 85 fd sbrc r24, 5
9348: 0e c0 rjmp .+28 ; 0x9366 <MotorRegler+0x235a>
{
GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen
934a: 60 91 1a 01 lds r22, 0x011A
934e: 70 91 1b 01 lds r23, 0x011B
9352: 20 91 53 01 lds r18, 0x0153
9356: 22 9d mul r18, r2
9358: c0 01 movw r24, r0
935a: 23 9d mul r18, r3
935c: 90 0d add r25, r0
935e: 11 24 eor r1, r1
9360: 0e 94 42 b1 call 0x16284 ; 0x16284 <__udivmodhi4>
9364: 1b 01 movw r2, r22
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Auto-Landing
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
static unsigned char slower;
if(!slower--)
9366: 80 91 8d 03 lds r24, 0x038D
936a: 9f ef ldi r25, 0xFF ; 255
936c: 98 0f add r25, r24
936e: 90 93 8d 03 sts 0x038D, r25
9372: 81 11 cpse r24, r1
9374: 66 c0 rjmp .+204 ; 0x9442 <MotorRegler+0x2436>
{
static unsigned int u_filter = 0;
if(!u_filter) u_filter = UBat;
9376: 80 91 8b 03 lds r24, 0x038B
937a: 90 91 8c 03 lds r25, 0x038C
937e: 89 2b or r24, r25
9380: 41 f4 brne .+16 ; 0x9392 <MotorRegler+0x2386>
9382: 80 91 1a 01 lds r24, 0x011A
9386: 90 91 1b 01 lds r25, 0x011B
938a: 90 93 8c 03 sts 0x038C, r25
938e: 80 93 8b 03 sts 0x038B, r24
if(UBat > u_filter) u_filter++; else
9392: 20 91 1a 01 lds r18, 0x011A
9396: 30 91 1b 01 lds r19, 0x011B
939a: 80 91 8b 03 lds r24, 0x038B
939e: 90 91 8c 03 lds r25, 0x038C
93a2: 82 17 cp r24, r18
93a4: 93 07 cpc r25, r19
93a6: 30 f4 brcc .+12 ; 0x93b4 <MotorRegler+0x23a8>
93a8: 01 96 adiw r24, 0x01 ; 1
93aa: 90 93 8c 03 sts 0x038C, r25
93ae: 80 93 8b 03 sts 0x038B, r24
93b2: 0c c0 rjmp .+24 ; 0x93cc <MotorRegler+0x23c0>
if(UBat < u_filter) u_filter--;
93b4: 20 91 1a 01 lds r18, 0x011A
93b8: 30 91 1b 01 lds r19, 0x011B
93bc: 28 17 cp r18, r24
93be: 39 07 cpc r19, r25
93c0: 28 f4 brcc .+10 ; 0x93cc <MotorRegler+0x23c0>
93c2: 01 97 sbiw r24, 0x01 ; 1
93c4: 90 93 8c 03 sts 0x038C, r25
93c8: 80 93 8b 03 sts 0x038B, r24
slower = 100; // 5Hz
93cc: 84 e6 ldi r24, 0x64 ; 100
93ce: 80 93 8d 03 sts 0x038D, r24
if(u_filter < BattAutoLandingVoltage)
93d2: 40 91 65 04 lds r20, 0x0465
93d6: 80 91 8b 03 lds r24, 0x038B
93da: 90 91 8c 03 lds r25, 0x038C
93de: 24 2f mov r18, r20
93e0: 30 e0 ldi r19, 0x00 ; 0
93e2: 82 17 cp r24, r18
93e4: 93 07 cpc r25, r19
93e6: 20 f4 brcc .+8 ; 0x93f0 <MotorRegler+0x23e4>
{
LowVoltageLandingActive = 10; // 2 sek
93e8: 2a e0 ldi r18, 0x0A ; 10
93ea: 20 93 c1 03 sts 0x03C1, r18
93ee: 0f c0 rjmp .+30 ; 0x940e <MotorRegler+0x2402>
}
else if(u_filter > BattAutoLandingVoltage + LipoCells && LowVoltageLandingActive) LowVoltageLandingActive--;
93f0: 20 91 51 01 lds r18, 0x0151
93f4: 30 e0 ldi r19, 0x00 ; 0
93f6: 24 0f add r18, r20
93f8: 31 1d adc r19, r1
93fa: 28 17 cp r18, r24
93fc: 39 07 cpc r19, r25
93fe: 38 f4 brcc .+14 ; 0x940e <MotorRegler+0x2402>
9400: 20 91 c1 03 lds r18, 0x03C1
9404: 22 23 and r18, r18
9406: 19 f0 breq .+6 ; 0x940e <MotorRegler+0x2402>
9408: 21 50 subi r18, 0x01 ; 1
940a: 20 93 c1 03 sts 0x03C1, r18
if(u_filter < BattComingHomeVoltage)
940e: 40 91 64 04 lds r20, 0x0464
9412: 24 2f mov r18, r20
9414: 30 e0 ldi r19, 0x00 ; 0
9416: 82 17 cp r24, r18
9418: 93 07 cpc r25, r19
941a: 20 f4 brcc .+8 ; 0x9424 <MotorRegler+0x2418>
{
LowVoltageHomeActive = 25; // min. 5 sek
941c: 89 e1 ldi r24, 0x19 ; 25
941e: 80 93 c0 03 sts 0x03C0, r24
9422: 0f c0 rjmp .+30 ; 0x9442 <MotorRegler+0x2436>
}
else if(u_filter > BattComingHomeVoltage + LipoCells && LowVoltageHomeActive) LowVoltageHomeActive--;
9424: 20 91 51 01 lds r18, 0x0151
9428: 30 e0 ldi r19, 0x00 ; 0
942a: 24 0f add r18, r20
942c: 31 1d adc r19, r1
942e: 28 17 cp r18, r24
9430: 39 07 cpc r19, r25
9432: 38 f4 brcc .+14 ; 0x9442 <MotorRegler+0x2436>
9434: 80 91 c0 03 lds r24, 0x03C0
9438: 88 23 and r24, r24
943a: 19 f0 breq .+6 ; 0x9442 <MotorRegler+0x2436>
943c: 81 50 subi r24, 0x01 ; 1
943e: 80 93 c0 03 sts 0x03C0, r24
}
if(LowVoltageLandingActive && FromNC_AltitudeSetpoint >= 0)
9442: 80 91 c1 03 lds r24, 0x03C1
9446: 88 23 and r24, r24
9448: d1 f0 breq .+52 ; 0x947e <MotorRegler+0x2472>
944a: 80 91 f4 03 lds r24, 0x03F4
944e: 90 91 f5 03 lds r25, 0x03F5
9452: a0 91 f6 03 lds r26, 0x03F6
9456: b0 91 f7 03 lds r27, 0x03F7
945a: bb 23 and r27, r27
945c: 84 f0 brlt .+32 ; 0x947e <MotorRegler+0x2472>
{
FromNC_AltitudeSpeed = EE_Parameter.LandingSpeed;
945e: 80 91 b0 05 lds r24, 0x05B0
9462: 80 93 f3 03 sts 0x03F3, r24
FromNC_AltitudeSetpoint = -20000;
9466: 80 ee ldi r24, 0xE0 ; 224
9468: 91 eb ldi r25, 0xB1 ; 177
946a: af ef ldi r26, 0xFF ; 255
946c: bf ef ldi r27, 0xFF ; 255
946e: 80 93 f4 03 sts 0x03F4, r24
9472: 90 93 f5 03 sts 0x03F5, r25
9476: a0 93 f6 03 sts 0x03F6, r26
947a: b0 93 f7 03 sts 0x03F7, r27
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// send SPI pending bytes
if(BytegapSPI == 0) SPI_TransmitByte();
947e: 80 91 cc 04 lds r24, 0x04CC
9482: 81 11 cpse r24, r1
9484: 02 c0 rjmp .+4 ; 0x948a <MotorRegler+0x247e>
9486: 0e 94 de 95 call 0x12bbc ; 0x12bbc <SPI_TransmitByte>
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Höhenregelung
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GasMischanteil *= STICK_GAIN;
948a: 22 0c add r2, r2
948c: 33 1c adc r3, r3
948e: 22 0c add r2, r2
9490: 33 1c adc r3, r3
// if height control is activated
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung
9492: 80 91 5c 06 lds r24, 0x065C
9496: 80 fd sbrc r24, 0
9498: 02 c0 rjmp .+4 ; 0x949e <MotorRegler+0x2492>
949a: 0c 94 b7 54 jmp 0xa96e ; 0xa96e <MotorRegler+0x3962>
949e: 80 91 e6 03 lds r24, 0x03E6
94a2: 81 11 cpse r24, r1
94a4: 0c 94 b7 54 jmp 0xa96e ; 0xa96e <MotorRegler+0x3962>
94a8: 80 91 e7 03 lds r24, 0x03E7
94ac: 81 11 cpse r24, r1
94ae: 0c 94 b7 54 jmp 0xa96e ; 0xa96e <MotorRegler+0x3962>
94b2: 80 91 62 0a lds r24, 0x0A62
94b6: 8f 77 andi r24, 0x7F ; 127
94b8: 11 f0 breq .+4 ; 0x94be <MotorRegler+0x24b2>
94ba: 0c 94 b7 54 jmp 0xa96e ; 0xa96e <MotorRegler+0x3962>
static int HeightDeviation = 0, FilterHCGas = 0;
static unsigned long HoverGasFilter = 0;
static unsigned char delay = 100, BaroAtUpperLimit = 0, BaroAtLowerLimit = 0;
// Expand the measurement
// measurement of air pressure close to upper limit and no overflow in correction of the new OCR0A value occurs
if(!BaroExpandActive)
94be: 80 91 59 04 lds r24, 0x0459
94c2: 90 91 5a 04 lds r25, 0x045A
94c6: 89 2b or r24, r25
94c8: 09 f0 breq .+2 ; 0x94cc <MotorRegler+0x24c0>
94ca: 5f c0 rjmp .+190 ; 0x958a <MotorRegler+0x257e>
{
if(MessLuftdruck > 920)
94cc: 80 91 10 01 lds r24, 0x0110
94d0: 90 91 11 01 lds r25, 0x0111
94d4: 89 39 cpi r24, 0x99 ; 153
94d6: 93 40 sbci r25, 0x03 ; 3
94d8: 30 f1 brcs .+76 ; 0x9526 <MotorRegler+0x251a>
{ // increase offset
if(OCR0A < (255 - OPA_OFFSET_STEP))
94da: 87 b5 in r24, 0x27 ; 39
94dc: 8a 3f cpi r24, 0xFA ; 250
94de: f8 f4 brcc .+62 ; 0x951e <MotorRegler+0x2512>
{
ExpandBaro -= 1;
94e0: 80 91 56 03 lds r24, 0x0356
94e4: 81 50 subi r24, 0x01 ; 1
94e6: 80 93 56 03 sts 0x0356, r24
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // increase offset to shift ADC down
94ea: 98 2f mov r25, r24
94ec: 99 0f add r25, r25
94ee: 99 0f add r25, r25
94f0: 89 0f add r24, r25
94f2: 90 91 12 05 lds r25, 0x0512
94f6: 98 1b sub r25, r24
94f8: 97 bd out 0x27, r25 ; 39
OCR0B = 255 - OCR0A;
94fa: 87 b5 in r24, 0x27 ; 39
94fc: 80 95 com r24
94fe: 88 bd out 0x28, r24 ; 40
beeptime = 300;
9500: 8c e2 ldi r24, 0x2C ; 44
9502: 91 e0 ldi r25, 0x01 ; 1
9504: 90 93 ce 04 sts 0x04CE, r25
9508: 80 93 cd 04 sts 0x04CD, r24
BaroExpandActive = 350;
950c: 8e e5 ldi r24, 0x5E ; 94
950e: 91 e0 ldi r25, 0x01 ; 1
9510: 90 93 5a 04 sts 0x045A, r25
9514: 80 93 59 04 sts 0x0459, r24
CalcExpandBaroStep();
9518: 0e 94 14 1b call 0x3628 ; 0x3628 <CalcExpandBaroStep>
951c: 6b c0 rjmp .+214 ; 0x95f4 <MotorRegler+0x25e8>
}
else
{
BaroAtLowerLimit = 1;
951e: 81 e0 ldi r24, 0x01 ; 1
9520: 80 93 8a 03 sts 0x038A, r24
9524: 67 c0 rjmp .+206 ; 0x95f4 <MotorRegler+0x25e8>
}
}
// measurement of air pressure close to lower limit and
else
if(MessLuftdruck < 100)
9526: 80 91 10 01 lds r24, 0x0110
952a: 90 91 11 01 lds r25, 0x0111
952e: 84 36 cpi r24, 0x64 ; 100
9530: 91 05 cpc r25, r1
9532: 30 f5 brcc .+76 ; 0x9580 <MotorRegler+0x2574>
{ // decrease offset
if(OCR0A > OPA_OFFSET_STEP)
9534: 87 b5 in r24, 0x27 ; 39
9536: 86 30 cpi r24, 0x06 ; 6
9538: f8 f0 brcs .+62 ; 0x9578 <MotorRegler+0x256c>
{
ExpandBaro += 1;
953a: 80 91 56 03 lds r24, 0x0356
953e: 8f 5f subi r24, 0xFF ; 255
9540: 80 93 56 03 sts 0x0356, r24
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // decrease offset to shift ADC up
9544: 98 2f mov r25, r24
9546: 99 0f add r25, r25
9548: 99 0f add r25, r25
954a: 89 0f add r24, r25
954c: 90 91 12 05 lds r25, 0x0512
9550: 98 1b sub r25, r24
9552: 97 bd out 0x27, r25 ; 39
OCR0B = 255 - OCR0A;
9554: 87 b5 in r24, 0x27 ; 39
9556: 80 95 com r24
9558: 88 bd out 0x28, r24 ; 40
beeptime = 300;
955a: 8c e2 ldi r24, 0x2C ; 44
955c: 91 e0 ldi r25, 0x01 ; 1
955e: 90 93 ce 04 sts 0x04CE, r25
9562: 80 93 cd 04 sts 0x04CD, r24
BaroExpandActive = 350;
9566: 8e e5 ldi r24, 0x5E ; 94
9568: 91 e0 ldi r25, 0x01 ; 1
956a: 90 93 5a 04 sts 0x045A, r25
956e: 80 93 59 04 sts 0x0459, r24
CalcExpandBaroStep();
9572: 0e 94 14 1b call 0x3628 ; 0x3628 <CalcExpandBaroStep>
9576: 3e c0 rjmp .+124 ; 0x95f4 <MotorRegler+0x25e8>
}
else
{
BaroAtUpperLimit = 1;
9578: 81 e0 ldi r24, 0x01 ; 1
957a: 80 93 89 03 sts 0x0389, r24
957e: 3a c0 rjmp .+116 ; 0x95f4 <MotorRegler+0x25e8>
}
}
else
{
BaroAtUpperLimit = 0;
9580: 10 92 89 03 sts 0x0389, r1
BaroAtLowerLimit = 0;
9584: 10 92 8a 03 sts 0x038A, r1
9588: 35 c0 rjmp .+106 ; 0x95f4 <MotorRegler+0x25e8>
}
}
else // delay, because of expanding the Baro-Range
{
// now clear the D-values
VarioMeter = 0;
958a: 10 92 55 03 sts 0x0355, r1
958e: 10 92 54 03 sts 0x0354, r1
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(ACC_AltitudeControl) ACC_AltitudeFusion(1); // init
9592: 80 91 c2 03 lds r24, 0x03C2
9596: 88 23 and r24, r24
9598: 21 f0 breq .+8 ; 0x95a2 <MotorRegler+0x2596>
959a: 81 e0 ldi r24, 0x01 ; 1
959c: 0e 94 a0 16 call 0x2d40 ; 0x2d40 <ACC_AltitudeFusion>
95a0: 20 c0 rjmp .+64 ; 0x95e2 <MotorRegler+0x25d6>
else SummenHoehe = HoehenWert * SM_FILTER;
95a2: 80 91 fe 03 lds r24, 0x03FE
95a6: 90 91 ff 03 lds r25, 0x03FF
95aa: a0 91 00 04 lds r26, 0x0400
95ae: b0 91 01 04 lds r27, 0x0401
95b2: 88 0f add r24, r24
95b4: 99 1f adc r25, r25
95b6: aa 1f adc r26, r26
95b8: bb 1f adc r27, r27
95ba: 88 0f add r24, r24
95bc: 99 1f adc r25, r25
95be: aa 1f adc r26, r26
95c0: bb 1f adc r27, r27
95c2: 88 0f add r24, r24
95c4: 99 1f adc r25, r25
95c6: aa 1f adc r26, r26
95c8: bb 1f adc r27, r27
95ca: 88 0f add r24, r24
95cc: 99 1f adc r25, r25
95ce: aa 1f adc r26, r26
95d0: bb 1f adc r27, r27
95d2: 80 93 57 03 sts 0x0357, r24
95d6: 90 93 58 03 sts 0x0358, r25
95da: a0 93 59 03 sts 0x0359, r26
95de: b0 93 5a 03 sts 0x035A, r27
#else
SummenHoehe = HoehenWert * SM_FILTER;
#endif
BaroExpandActive--;
95e2: 80 91 59 04 lds r24, 0x0459
95e6: 90 91 5a 04 lds r25, 0x045A
95ea: 01 97 sbiw r24, 0x01 ; 1
95ec: 90 93 5a 04 sts 0x045A, r25
95f0: 80 93 59 04 sts 0x0459, r24
}
// if height control is activated by an rc channel
if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
95f4: 80 91 5c 06 lds r24, 0x065C
95f8: 81 ff sbrs r24, 1
95fa: 41 c0 rjmp .+130 ; 0x967e <MotorRegler+0x2672>
{ // check if parameter is less than activation threshold
if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position
95fc: 80 91 e1 03 lds r24, 0x03E1
9600: 82 33 cpi r24, 0x32 ; 50
9602: 48 f5 brcc .+82 ; 0x9656 <MotorRegler+0x264a>
{ //height control not active
if(!delay--)
9604: 80 91 1c 01 lds r24, 0x011C
9608: 9f ef ldi r25, 0xFF ; 255
960a: 98 0f add r25, r24
960c: 90 93 1c 01 sts 0x011C, r25
9610: 81 11 cpse r24, r1
9612: 53 c0 rjmp .+166 ; 0x96ba <MotorRegler+0x26ae>
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF;
9614: 80 91 57 01 lds r24, 0x0157
9618: 81 11 cpse r24, r1
961a: 07 c0 rjmp .+14 ; 0x962a <MotorRegler+0x261e>
961c: 80 91 1b 04 lds r24, 0x041B
9620: 88 23 and r24, r24
9622: 19 f0 breq .+6 ; 0x962a <MotorRegler+0x261e>
9624: 88 e2 ldi r24, 0x28 ; 40
9626: 80 93 57 01 sts 0x0157, r24
#endif
HoehenReglerAktiv = 0; // disable height control
962a: 10 92 1b 04 sts 0x041B, r1
SollHoehe = HoehenWert; // update SetPoint with current reading
962e: 80 91 fe 03 lds r24, 0x03FE
9632: 90 91 ff 03 lds r25, 0x03FF
9636: a0 91 00 04 lds r26, 0x0400
963a: b0 91 01 04 lds r27, 0x0401
963e: 80 93 fa 03 sts 0x03FA, r24
9642: 90 93 fb 03 sts 0x03FB, r25
9646: a0 93 fc 03 sts 0x03FC, r26
964a: b0 93 fd 03 sts 0x03FD, r27
delay = 1;
964e: 81 e0 ldi r24, 0x01 ; 1
9650: 80 93 1c 01 sts 0x011C, r24
9654: 32 c0 rjmp .+100 ; 0x96ba <MotorRegler+0x26ae>
}
}
else
if(Parameter_HoehenSchalter > 70)
9656: 87 34 cpi r24, 0x47 ; 71
9658: 80 f1 brcs .+96 ; 0x96ba <MotorRegler+0x26ae>
{ //height control is activated
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!SpeakHoTT && !HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_ON;
965a: 80 91 57 01 lds r24, 0x0157
965e: 81 11 cpse r24, r1
9660: 07 c0 rjmp .+14 ; 0x9670 <MotorRegler+0x2664>
9662: 80 91 1b 04 lds r24, 0x041B
9666: 81 11 cpse r24, r1
9668: 03 c0 rjmp .+6 ; 0x9670 <MotorRegler+0x2664>
966a: 87 e2 ldi r24, 0x27 ; 39
966c: 80 93 57 01 sts 0x0157, r24
#endif
delay = 200;
9670: 88 ec ldi r24, 0xC8 ; 200
9672: 80 93 1c 01 sts 0x011C, r24
HoehenReglerAktiv = 1; // enable height control
9676: 81 e0 ldi r24, 0x01 ; 1
9678: 80 93 1b 04 sts 0x041B, r24
967c: 1e c0 rjmp .+60 ; 0x96ba <MotorRegler+0x26ae>
}
}
else // no switchable height control
{
SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung;
967e: 80 91 e1 03 lds r24, 0x03E1
9682: 20 91 25 01 lds r18, 0x0125
9686: 30 91 26 01 lds r19, 0x0126
968a: 28 0f add r18, r24
968c: 31 1d adc r19, r1
968e: 40 91 50 05 lds r20, 0x0550
9692: 42 9f mul r20, r18
9694: c0 01 movw r24, r0
9696: 43 9f mul r20, r19
9698: 90 0d add r25, r0
969a: 11 24 eor r1, r1
969c: aa 27 eor r26, r26
969e: 97 fd sbrc r25, 7
96a0: a0 95 com r26
96a2: ba 2f mov r27, r26
96a4: 80 93 fa 03 sts 0x03FA, r24
96a8: 90 93 fb 03 sts 0x03FB, r25
96ac: a0 93 fc 03 sts 0x03FC, r26
96b0: b0 93 fd 03 sts 0x03FD, r27
HoehenReglerAktiv = 1;
96b4: 81 e0 ldi r24, 0x01 ; 1
96b6: 80 93 1b 04 sts 0x041B, r24
}
// calculate cos of nick and roll angle used for projection of the vertical hoover gas
tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg
96ba: 40 90 21 01 lds r4, 0x0121
96be: 50 90 22 01 lds r5, 0x0122
96c2: 60 90 23 01 lds r6, 0x0123
96c6: 70 90 24 01 lds r7, 0x0124
tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg
96ca: 60 91 3e 04 lds r22, 0x043E
96ce: 70 91 3f 04 lds r23, 0x043F
96d2: 80 91 40 04 lds r24, 0x0440
96d6: 90 91 41 04 lds r25, 0x0441
96da: a3 01 movw r20, r6
96dc: 92 01 movw r18, r4
96de: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
96e2: 2d 83 std Y+5, r18 ; 0x05
96e4: 3e 83 std Y+6, r19 ; 0x06
96e6: 4f 83 std Y+7, r20 ; 0x07
96e8: 58 87 std Y+8, r21 ; 0x08
{
SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung;
HoehenReglerAktiv = 1;
}
// calculate cos of nick and roll angle used for projection of the vertical hoover gas
tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg
96ea: 60 91 42 04 lds r22, 0x0442
96ee: 70 91 43 04 lds r23, 0x0443
96f2: 80 91 44 04 lds r24, 0x0444
96f6: 90 91 45 04 lds r25, 0x0445
96fa: a3 01 movw r20, r6
96fc: 92 01 movw r18, r4
96fe: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg
tmp_int = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg
9702: 6d 81 ldd r22, Y+5 ; 0x05
9704: 7e 81 ldd r23, Y+6 ; 0x06
9706: c9 01 movw r24, r18
9708: 0e 94 a2 0d call 0x1b44 ; 0x1b44 <ihypot>
tmp_int = (tmp_int * Parameter_Hoehe_TiltCompensation) / 100;
970c: 20 91 36 01 lds r18, 0x0136
9710: fc 01 movw r30, r24
9712: 2e 9f mul r18, r30
9714: c0 01 movw r24, r0
9716: 2f 9f mul r18, r31
9718: 90 0d add r25, r0
971a: 11 24 eor r1, r1
971c: 64 e6 ldi r22, 0x64 ; 100
971e: 70 e0 ldi r23, 0x00 ; 0
9720: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
9724: cb 01 movw r24, r22
LIMIT_MAX(tmp_int, 60); // limit effective attitude angle
9726: 6c 33 cpi r22, 0x3C ; 60
9728: 71 05 cpc r23, r1
972a: 14 f0 brlt .+4 ; 0x9730 <MotorRegler+0x2724>
972c: 8c e3 ldi r24, 0x3C ; 60
972e: 90 e0 ldi r25, 0x00 ; 0
CosAttitude = c_cos_8192(tmp_int); // cos of actual attitude
9730: 0e 94 2d 91 call 0x1225a ; 0x1225a <c_cos_8192>
9734: 90 93 2e 06 sts 0x062E, r25
9738: 80 93 2d 06 sts 0x062D, r24
VarioCharacter = ' ';
973c: 80 e2 ldi r24, 0x20 ; 32
973e: 80 93 20 01 sts 0x0120, r24
AltitudeSetpointTrimming = 0;
9742: 10 92 f9 03 sts 0x03F9, r1
9746: 10 92 f8 03 sts 0x03F8, r1
if(HoehenReglerAktiv && !(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING))
974a: 80 91 1b 04 lds r24, 0x041B
974e: 88 23 and r24, r24
9750: 09 f4 brne .+2 ; 0x9754 <MotorRegler+0x2748>
9752: b5 c7 rjmp .+3946 ; 0xa6be <MotorRegler+0x36b2>
9754: 80 91 cb 03 lds r24, 0x03CB
9758: 84 fd sbrc r24, 4
975a: b1 c7 rjmp .+3938 ; 0xa6be <MotorRegler+0x36b2>
// Holger original version
// start of height control algorithm
// the height control is only an attenuation of the actual gas stick.
// I.e. it will work only if the gas stick is higher than the hover gas
// and the hover height will be allways larger than height setpoint.
FC_StatusFlags2 |= FC_STATUS2_ALTITUDE_CONTROL;
975c: 80 91 ca 03 lds r24, 0x03CA
9760: 82 60 ori r24, 0x02 ; 2
9762: 80 93 ca 03 sts 0x03CA, r24
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) || !(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER)) // Regler wird über Schalter gesteuert)
9766: e0 91 40 06 lds r30, 0x0640
976a: e0 fd sbrc r30, 0
976c: 04 c0 rjmp .+8 ; 0x9776 <MotorRegler+0x276a>
976e: 80 91 5c 06 lds r24, 0x065C
9772: 81 fd sbrc r24, 1
9774: 0b c0 rjmp .+22 ; 0x978c <MotorRegler+0x2780>
{ // old version
HCGas = GasMischanteil; // take current stick gas as neutral point for the height control
HeightTrimming = 0;
9776: 10 92 88 03 sts 0x0388, r1
977a: 10 92 87 03 sts 0x0387, r1
AltitudeSetpointTrimming = 0;
// set both flags to indicate no vario mode
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
977e: 80 91 cb 03 lds r24, 0x03CB
9782: 80 6c ori r24, 0xC0 ; 192
9784: 80 93 cb 03 sts 0x03CB, r24
// I.e. it will work only if the gas stick is higher than the hover gas
// and the hover height will be allways larger than height setpoint.
FC_StatusFlags2 |= FC_STATUS2_ALTITUDE_CONTROL;
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) || !(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER)) // Regler wird über Schalter gesteuert)
{ // old version
HCGas = GasMischanteil; // take current stick gas as neutral point for the height control
9788: f1 01 movw r30, r2
HeightTrimming = 0;
AltitudeSetpointTrimming = 0;
// set both flags to indicate no vario mode
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
978a: 20 c3 rjmp .+1600 ; 0x9dcc <MotorRegler+0x2dc0>
{
// alternative height control
// PD-Control with respect to hoover point
// the thrust loss out of horizontal attitude is compensated
// the setpoint will be fine adjusted with the gas stick position
if(/*1 || */FC_StatusFlags & FC_STATUS_FLY) // trim setpoint only when flying
978c: 80 91 cb 03 lds r24, 0x03CB
9790: 81 ff sbrs r24, 1
9792: ea c2 rjmp .+1492 ; 0x9d68 <MotorRegler+0x2d5c>
{ // gas stick is above hoover point
if(StickGas > (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtUpperLimit)
9794: 00 91 0e 04 lds r16, 0x040E
9798: 10 91 0f 04 lds r17, 0x040F
979c: c0 90 40 01 lds r12, 0x0140
97a0: d0 90 41 01 lds r13, 0x0141
97a4: c6 01 movw r24, r12
97a6: 0f 96 adiw r24, 0x0f ; 15
97a8: 80 17 cp r24, r16
97aa: 91 07 cpc r25, r17
97ac: 08 f0 brcs .+2 ; 0x97b0 <MotorRegler+0x27a4>
97ae: 93 c0 rjmp .+294 ; 0x98d6 <MotorRegler+0x28ca>
97b0: 80 91 89 03 lds r24, 0x0389
97b4: 81 11 cpse r24, r1
97b6: 8f c0 rjmp .+286 ; 0x98d6 <MotorRegler+0x28ca>
{
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN)
97b8: 80 91 cb 03 lds r24, 0x03CB
97bc: 88 23 and r24, r24
97be: ac f4 brge .+42 ; 0x97ea <MotorRegler+0x27de>
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN;
97c0: 80 91 cb 03 lds r24, 0x03CB
97c4: 8f 77 andi r24, 0x7F ; 127
97c6: 80 93 cb 03 sts 0x03CB, r24
SollHoehe = HoehenWertF; // update setpoint to current heigth
97ca: 80 91 4a 03 lds r24, 0x034A
97ce: 90 91 4b 03 lds r25, 0x034B
97d2: a0 91 4c 03 lds r26, 0x034C
97d6: b0 91 4d 03 lds r27, 0x034D
97da: 80 93 fa 03 sts 0x03FA, r24
97de: 90 93 fb 03 sts 0x03FB, r25
97e2: a0 93 fc 03 sts 0x03FC, r26
97e6: b0 93 fd 03 sts 0x03FD, r27
}
// Limit the maximum Altitude
if(Parameter_MaximumAltitude && (SollHoehe/100 > Parameter_MaximumAltitude))
97ea: 40 90 24 06 lds r4, 0x0624
97ee: 44 20 and r4, r4
97f0: a1 f1 breq .+104 ; 0x985a <MotorRegler+0x284e>
97f2: 51 2c mov r5, r1
97f4: 61 2c mov r6, r1
97f6: 71 2c mov r7, r1
97f8: 60 91 fa 03 lds r22, 0x03FA
97fc: 70 91 fb 03 lds r23, 0x03FB
9800: 80 91 fc 03 lds r24, 0x03FC
9804: 90 91 fd 03 lds r25, 0x03FD
9808: 24 e6 ldi r18, 0x64 ; 100
980a: 30 e0 ldi r19, 0x00 ; 0
980c: 40 e0 ldi r20, 0x00 ; 0
980e: 50 e0 ldi r21, 0x00 ; 0
9810: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
9814: 42 16 cp r4, r18
9816: 53 06 cpc r5, r19
9818: 64 06 cpc r6, r20
981a: 75 06 cpc r7, r21
981c: f4 f4 brge .+60 ; 0x985a <MotorRegler+0x284e>
{
AltitudeSetpointTrimming = 0;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!SpeakHoTT && HoehenWert/95 > Parameter_MaximumAltitude) SpeakHoTT = SPEAK_MAX_ALTITUD;
981e: 80 91 57 01 lds r24, 0x0157
9822: 81 11 cpse r24, r1
9824: 16 c0 rjmp .+44 ; 0x9852 <MotorRegler+0x2846>
9826: 60 91 fe 03 lds r22, 0x03FE
982a: 70 91 ff 03 lds r23, 0x03FF
982e: 80 91 00 04 lds r24, 0x0400
9832: 90 91 01 04 lds r25, 0x0401
9836: 2f e5 ldi r18, 0x5F ; 95
9838: 30 e0 ldi r19, 0x00 ; 0
983a: 40 e0 ldi r20, 0x00 ; 0
983c: 50 e0 ldi r21, 0x00 ; 0
983e: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
9842: 42 16 cp r4, r18
9844: 53 06 cpc r5, r19
9846: 64 06 cpc r6, r20
9848: 75 06 cpc r7, r21
984a: 1c f4 brge .+6 ; 0x9852 <MotorRegler+0x2846>
984c: 8a e1 ldi r24, 0x1A ; 26
984e: 80 93 57 01 sts 0x0157, r24
#endif
VarioCharacter = '=';
9852: 8d e3 ldi r24, 0x3D ; 61
9854: 80 93 20 01 sts 0x0120, r24
9858: 3b c0 rjmp .+118 ; 0x98d0 <MotorRegler+0x28c4>
}
else
{
if(HeightDeviation > 20) SollHoehe = HoehenWertF; // update setpoint to current heigth
985a: 80 91 85 03 lds r24, 0x0385
985e: 90 91 86 03 lds r25, 0x0386
9862: 45 97 sbiw r24, 0x15 ; 21
9864: 84 f0 brlt .+32 ; 0x9886 <MotorRegler+0x287a>
9866: 80 91 4a 03 lds r24, 0x034A
986a: 90 91 4b 03 lds r25, 0x034B
986e: a0 91 4c 03 lds r26, 0x034C
9872: b0 91 4d 03 lds r27, 0x034D
9876: 80 93 fa 03 sts 0x03FA, r24
987a: 90 93 fb 03 sts 0x03FB, r25
987e: a0 93 fc 03 sts 0x03FC, r26
9882: b0 93 fd 03 sts 0x03FD, r27
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP;
9886: 80 91 cb 03 lds r24, 0x03CB
988a: 80 64 ori r24, 0x40 ; 64
988c: 80 93 cb 03 sts 0x03CB, r24
AltitudeSetpointTrimming = abs(StickGas - (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD));
9890: c8 01 movw r24, r16
9892: 8c 19 sub r24, r12
9894: 9d 09 sbc r25, r13
9896: 0f 97 sbiw r24, 0x0f ; 15
9898: 9c 01 movw r18, r24
989a: 99 23 and r25, r25
989c: 24 f4 brge .+8 ; 0x98a6 <MotorRegler+0x289a>
989e: 22 27 eor r18, r18
98a0: 33 27 eor r19, r19
98a2: 28 1b sub r18, r24
98a4: 39 0b sbc r19, r25
98a6: 82 2f mov r24, r18
98a8: 93 2f mov r25, r19
98aa: 30 93 f9 03 sts 0x03F9, r19
98ae: 20 93 f8 03 sts 0x03F8, r18
if(LowVoltageLandingActive) AltitudeSetpointTrimming /= 3; // only 33% rising
98b2: 20 91 c1 03 lds r18, 0x03C1
98b6: 22 23 and r18, r18
98b8: 41 f0 breq .+16 ; 0x98ca <MotorRegler+0x28be>
98ba: 63 e0 ldi r22, 0x03 ; 3
98bc: 70 e0 ldi r23, 0x00 ; 0
98be: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
98c2: 70 93 f9 03 sts 0x03F9, r23
98c6: 60 93 f8 03 sts 0x03F8, r22
VarioCharacter = '+';
98ca: 8b e2 ldi r24, 0x2B ; 43
98cc: 80 93 20 01 sts 0x0120, r24
}
WaypointTrimming = 0;
98d0: 10 92 f2 03 sts 0x03F2, r1
98d4: 29 c1 rjmp .+594 ; 0x9b28 <MotorRegler+0x2b1c>
} // gas stick is below hoover point
else if(StickGas < (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtLowerLimit ) // Minus
98d6: c6 01 movw r24, r12
98d8: 0f 97 sbiw r24, 0x0f ; 15
98da: 08 17 cp r16, r24
98dc: 19 07 cpc r17, r25
98de: 08 f0 brcs .+2 ; 0x98e2 <MotorRegler+0x28d6>
98e0: 42 c0 rjmp .+132 ; 0x9966 <MotorRegler+0x295a>
98e2: 80 91 8a 03 lds r24, 0x038A
98e6: 81 11 cpse r24, r1
98e8: 3e c0 rjmp .+124 ; 0x9966 <MotorRegler+0x295a>
{
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP || (HeightDeviation < -300))
98ea: 80 91 cb 03 lds r24, 0x03CB
98ee: 86 fd sbrc r24, 6
98f0: 07 c0 rjmp .+14 ; 0x9900 <MotorRegler+0x28f4>
98f2: 80 91 85 03 lds r24, 0x0385
98f6: 90 91 86 03 lds r25, 0x0386
98fa: 84 3d cpi r24, 0xD4 ; 212
98fc: 9e 4f sbci r25, 0xFE ; 254
98fe: ac f4 brge .+42 ; 0x992a <MotorRegler+0x291e>
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP;
9900: 80 91 cb 03 lds r24, 0x03CB
9904: 8f 7b andi r24, 0xBF ; 191
9906: 80 93 cb 03 sts 0x03CB, r24
SollHoehe = HoehenWertF; // update setpoint to current heigth
990a: 80 91 4a 03 lds r24, 0x034A
990e: 90 91 4b 03 lds r25, 0x034B
9912: a0 91 4c 03 lds r26, 0x034C
9916: b0 91 4d 03 lds r27, 0x034D
991a: 80 93 fa 03 sts 0x03FA, r24
991e: 90 93 fb 03 sts 0x03FB, r25
9922: a0 93 fc 03 sts 0x03FC, r26
9926: b0 93 fd 03 sts 0x03FD, r27
}
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN;
992a: 80 91 cb 03 lds r24, 0x03CB
992e: 80 68 ori r24, 0x80 ; 128
9930: 80 93 cb 03 sts 0x03CB, r24
AltitudeSetpointTrimming = -abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD));
9934: 98 01 movw r18, r16
9936: 2c 19 sub r18, r12
9938: 3d 09 sbc r19, r13
993a: 21 5f subi r18, 0xF1 ; 241
993c: 3f 4f sbci r19, 0xFF ; 255
993e: c9 01 movw r24, r18
9940: 99 23 and r25, r25
9942: 24 f4 brge .+8 ; 0x994c <MotorRegler+0x2940>
9944: 88 27 eor r24, r24
9946: 99 27 eor r25, r25
9948: 82 1b sub r24, r18
994a: 93 0b sbc r25, r19
994c: 91 95 neg r25
994e: 81 95 neg r24
9950: 91 09 sbc r25, r1
9952: 90 93 f9 03 sts 0x03F9, r25
9956: 80 93 f8 03 sts 0x03F8, r24
VarioCharacter = '-';
995a: 8d e2 ldi r24, 0x2D ; 45
995c: 80 93 20 01 sts 0x0120, r24
WaypointTrimming = 0;
9960: 10 92 f2 03 sts 0x03F2, r1
9964: e1 c0 rjmp .+450 ; 0x9b28 <MotorRegler+0x2b1c>
}
else // Gas Stick in Hover Range
{
VarioCharacter = '=';
9966: 8d e3 ldi r24, 0x3D ; 61
9968: 80 93 20 01 sts 0x0120, r24
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint > SollHoehe) // von NC gesteuert -> Steigen
996c: 20 91 f3 03 lds r18, 0x03F3
9970: 22 23 and r18, r18
9972: 09 f4 brne .+2 ; 0x9976 <MotorRegler+0x296a>
9974: 74 c0 rjmp .+232 ; 0x9a5e <MotorRegler+0x2a52>
9976: 40 91 f4 03 lds r20, 0x03F4
997a: 50 91 f5 03 lds r21, 0x03F5
997e: 60 91 f6 03 lds r22, 0x03F6
9982: 70 91 f7 03 lds r23, 0x03F7
9986: 80 91 fa 03 lds r24, 0x03FA
998a: 90 91 fb 03 lds r25, 0x03FB
998e: a0 91 fc 03 lds r26, 0x03FC
9992: b0 91 fd 03 lds r27, 0x03FD
9996: 84 17 cp r24, r20
9998: 95 07 cpc r25, r21
999a: a6 07 cpc r26, r22
999c: b7 07 cpc r27, r23
999e: 64 f5 brge .+88 ; 0x99f8 <MotorRegler+0x29ec>
{
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP;
99a0: 80 91 cb 03 lds r24, 0x03CB
99a4: 80 64 ori r24, 0x40 ; 64
99a6: 80 93 cb 03 sts 0x03CB, r24
AltitudeSetpointTrimming = FromNC_AltitudeSpeed;
99aa: 82 2f mov r24, r18
99ac: 90 e0 ldi r25, 0x00 ; 0
99ae: 90 93 f9 03 sts 0x03F9, r25
99b2: 80 93 f8 03 sts 0x03F8, r24
//HeightTrimming += FromNC_AltitudeSpeed;
WaypointTrimming = 10;
99b6: 8a e0 ldi r24, 0x0A ; 10
99b8: 80 93 f2 03 sts 0x03F2, r24
VarioCharacter = '^';
99bc: 8e e5 ldi r24, 0x5E ; 94
99be: 80 93 20 01 sts 0x0120, r24
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) // changed from sinking to rising
99c2: 80 91 cb 03 lds r24, 0x03CB
99c6: 88 23 and r24, r24
99c8: 0c f0 brlt .+2 ; 0x99cc <MotorRegler+0x29c0>
99ca: ae c0 rjmp .+348 ; 0x9b28 <MotorRegler+0x2b1c>
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN;
99cc: 80 91 cb 03 lds r24, 0x03CB
99d0: 8f 77 andi r24, 0x7F ; 127
99d2: 80 93 cb 03 sts 0x03CB, r24
SollHoehe = HoehenWertF; // update setpoint to current heigth
99d6: 80 91 4a 03 lds r24, 0x034A
99da: 90 91 4b 03 lds r25, 0x034B
99de: a0 91 4c 03 lds r26, 0x034C
99e2: b0 91 4d 03 lds r27, 0x034D
99e6: 80 93 fa 03 sts 0x03FA, r24
99ea: 90 93 fb 03 sts 0x03FB, r25
99ee: a0 93 fc 03 sts 0x03FC, r26
99f2: b0 93 fd 03 sts 0x03FD, r27
99f6: 98 c0 rjmp .+304 ; 0x9b28 <MotorRegler+0x2b1c>
}
}
else
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint < SollHoehe) // von NC gesteuert -> sinken
99f8: 48 17 cp r20, r24
99fa: 59 07 cpc r21, r25
99fc: 6a 07 cpc r22, r26
99fe: 7b 07 cpc r23, r27
9a00: 74 f5 brge .+92 ; 0x9a5e <MotorRegler+0x2a52>
{
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN;
9a02: 80 91 cb 03 lds r24, 0x03CB
9a06: 80 68 ori r24, 0x80 ; 128
9a08: 80 93 cb 03 sts 0x03CB, r24
AltitudeSetpointTrimming = -FromNC_AltitudeSpeed;
9a0c: 82 2f mov r24, r18
9a0e: 90 e0 ldi r25, 0x00 ; 0
9a10: 91 95 neg r25
9a12: 81 95 neg r24
9a14: 91 09 sbc r25, r1
9a16: 90 93 f9 03 sts 0x03F9, r25
9a1a: 80 93 f8 03 sts 0x03F8, r24
//HeightTrimming -= FromNC_AltitudeSpeed;
WaypointTrimming = -10;
9a1e: 86 ef ldi r24, 0xF6 ; 246
9a20: 80 93 f2 03 sts 0x03F2, r24
VarioCharacter = 'v';
9a24: 86 e7 ldi r24, 0x76 ; 118
9a26: 80 93 20 01 sts 0x0120, r24
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) // changed from rising to sinking
9a2a: 80 91 cb 03 lds r24, 0x03CB
9a2e: 86 ff sbrs r24, 6
9a30: 7b c0 rjmp .+246 ; 0x9b28 <MotorRegler+0x2b1c>
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP;
9a32: 80 91 cb 03 lds r24, 0x03CB
9a36: 8f 7b andi r24, 0xBF ; 191
9a38: 80 93 cb 03 sts 0x03CB, r24
SollHoehe = HoehenWertF; // update setpoint to current heigth
9a3c: 80 91 4a 03 lds r24, 0x034A
9a40: 90 91 4b 03 lds r25, 0x034B
9a44: a0 91 4c 03 lds r26, 0x034C
9a48: b0 91 4d 03 lds r27, 0x034D
9a4c: 80 93 fa 03 sts 0x03FA, r24
9a50: 90 93 fb 03 sts 0x03FB, r25
9a54: a0 93 fc 03 sts 0x03FC, r26
9a58: b0 93 fd 03 sts 0x03FD, r27
9a5c: 65 c0 rjmp .+202 ; 0x9b28 <MotorRegler+0x2b1c>
}
}
else
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN))
9a5e: 80 91 cb 03 lds r24, 0x03CB
9a62: 80 7c andi r24, 0xC0 ; 192
9a64: 09 f4 brne .+2 ; 0x9a68 <MotorRegler+0x2a5c>
9a66: 60 c0 rjmp .+192 ; 0x9b28 <MotorRegler+0x2b1c>
{
if(!WaypointTrimming) LIMIT_MIN_MAX(SollHoehe, (HoehenWertF-200), (HoehenWertF+200)) // max. 2m Unterschied
9a68: 80 91 f2 03 lds r24, 0x03F2
9a6c: 81 11 cpse r24, r1
9a6e: 36 c0 rjmp .+108 ; 0x9adc <MotorRegler+0x2ad0>
9a70: 80 91 4a 03 lds r24, 0x034A
9a74: 90 91 4b 03 lds r25, 0x034B
9a78: a0 91 4c 03 lds r26, 0x034C
9a7c: b0 91 4d 03 lds r27, 0x034D
9a80: 8c 01 movw r16, r24
9a82: 9d 01 movw r18, r26
9a84: 08 5c subi r16, 0xC8 ; 200
9a86: 11 09 sbc r17, r1
9a88: 21 09 sbc r18, r1
9a8a: 31 09 sbc r19, r1
9a8c: 40 91 fa 03 lds r20, 0x03FA
9a90: 50 91 fb 03 lds r21, 0x03FB
9a94: 60 91 fc 03 lds r22, 0x03FC
9a98: 70 91 fd 03 lds r23, 0x03FD
9a9c: 04 17 cp r16, r20
9a9e: 15 07 cpc r17, r21
9aa0: 26 07 cpc r18, r22
9aa2: 37 07 cpc r19, r23
9aa4: 4c f0 brlt .+18 ; 0x9ab8 <MotorRegler+0x2aac>
9aa6: 00 93 fa 03 sts 0x03FA, r16
9aaa: 10 93 fb 03 sts 0x03FB, r17
9aae: 20 93 fc 03 sts 0x03FC, r18
9ab2: 30 93 fd 03 sts 0x03FD, r19
9ab6: 14 c0 rjmp .+40 ; 0x9ae0 <MotorRegler+0x2ad4>
9ab8: 88 53 subi r24, 0x38 ; 56
9aba: 9f 4f sbci r25, 0xFF ; 255
9abc: af 4f sbci r26, 0xFF ; 255
9abe: bf 4f sbci r27, 0xFF ; 255
9ac0: 48 17 cp r20, r24
9ac2: 59 07 cpc r21, r25
9ac4: 6a 07 cpc r22, r26
9ac6: 7b 07 cpc r23, r27
9ac8: 5c f0 brlt .+22 ; 0x9ae0 <MotorRegler+0x2ad4>
9aca: 80 93 fa 03 sts 0x03FA, r24
9ace: 90 93 fb 03 sts 0x03FB, r25
9ad2: a0 93 fc 03 sts 0x03FC, r26
9ad6: b0 93 fd 03 sts 0x03FD, r27
9ada: 02 c0 rjmp .+4 ; 0x9ae0 <MotorRegler+0x2ad4>
else WaypointTrimming = 0;
9adc: 10 92 f2 03 sts 0x03F2, r1
FC_StatusFlags &= ~(FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
9ae0: 80 91 cb 03 lds r24, 0x03CB
9ae4: 8f 73 andi r24, 0x3F ; 63
9ae6: 80 93 cb 03 sts 0x03CB, r24
HeightTrimming = 0;
9aea: 10 92 88 03 sts 0x0388, r1
9aee: 10 92 87 03 sts 0x0387, r1
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 500;
9af2: e1 ff sbrs r30, 1
9af4: 06 c0 rjmp .+12 ; 0x9b02 <MotorRegler+0x2af6>
9af6: 84 ef ldi r24, 0xF4 ; 244
9af8: 91 e0 ldi r25, 0x01 ; 1
9afa: 90 93 ce 04 sts 0x04CE, r25
9afe: 80 93 cd 04 sts 0x04CD, r24
if(!StartTrigger && HoehenWert > 50)
9b02: 80 91 02 04 lds r24, 0x0402
9b06: 81 11 cpse r24, r1
9b08: 0f c0 rjmp .+30 ; 0x9b28 <MotorRegler+0x2b1c>
9b0a: 80 91 fe 03 lds r24, 0x03FE
9b0e: 90 91 ff 03 lds r25, 0x03FF
9b12: a0 91 00 04 lds r26, 0x0400
9b16: b0 91 01 04 lds r27, 0x0401
9b1a: c3 97 sbiw r24, 0x33 ; 51
9b1c: a1 05 cpc r26, r1
9b1e: b1 05 cpc r27, r1
9b20: 1c f0 brlt .+6 ; 0x9b28 <MotorRegler+0x2b1c>
{
StartTrigger = 1;
9b22: 81 e0 ldi r24, 0x01 ; 1
9b24: 80 93 02 04 sts 0x0402, r24
}
}
}
// Trim height set point
HeightTrimming += AltitudeSetpointTrimming;
9b28: 20 91 87 03 lds r18, 0x0387
9b2c: 30 91 88 03 lds r19, 0x0388
9b30: 80 91 f8 03 lds r24, 0x03F8
9b34: 90 91 f9 03 lds r25, 0x03F9
9b38: 28 0f add r18, r24
9b3a: 39 1f adc r19, r25
9b3c: 30 93 88 03 sts 0x0388, r19
9b40: 20 93 87 03 sts 0x0387, r18
if(abs(HeightTrimming) > 500) // bei Waypoint-Flug ist das ca. die 500Hz
9b44: c9 01 movw r24, r18
9b46: 33 23 and r19, r19
9b48: 24 f4 brge .+8 ; 0x9b52 <MotorRegler+0x2b46>
9b4a: 88 27 eor r24, r24
9b4c: 99 27 eor r25, r25
9b4e: 82 1b sub r24, r18
9b50: 93 0b sbc r25, r19
9b52: 85 3f cpi r24, 0xF5 ; 245
9b54: 91 40 sbci r25, 0x01 ; 1
9b56: 0c f4 brge .+2 ; 0x9b5a <MotorRegler+0x2b4e>
9b58: ef c0 rjmp .+478 ; 0x9d38 <MotorRegler+0x2d2c>
{
if(WaypointTrimming)
9b5a: e0 91 f2 03 lds r30, 0x03F2
9b5e: ee 23 and r30, r30
9b60: b1 f1 breq .+108 ; 0x9bce <MotorRegler+0x2bc2>
{
if(abs(FromNC_AltitudeSetpoint - SollHoehe) < 10) SollHoehe = FromNC_AltitudeSetpoint;
9b62: 40 91 f4 03 lds r20, 0x03F4
9b66: 50 91 f5 03 lds r21, 0x03F5
9b6a: 60 91 f6 03 lds r22, 0x03F6
9b6e: 70 91 f7 03 lds r23, 0x03F7
9b72: 80 91 fa 03 lds r24, 0x03FA
9b76: 90 91 fb 03 lds r25, 0x03FB
9b7a: a0 91 fc 03 lds r26, 0x03FC
9b7e: b0 91 fd 03 lds r27, 0x03FD
9b82: 9a 01 movw r18, r20
9b84: 28 1b sub r18, r24
9b86: 39 0b sbc r19, r25
9b88: 27 3f cpi r18, 0xF7 ; 247
9b8a: 1f ef ldi r17, 0xFF ; 255
9b8c: 31 07 cpc r19, r17
9b8e: 64 f0 brlt .+24 ; 0x9ba8 <MotorRegler+0x2b9c>
9b90: 2a 30 cpi r18, 0x0A ; 10
9b92: 31 05 cpc r19, r1
9b94: 4c f4 brge .+18 ; 0x9ba8 <MotorRegler+0x2b9c>
9b96: 40 93 fa 03 sts 0x03FA, r20
9b9a: 50 93 fb 03 sts 0x03FB, r21
9b9e: 60 93 fc 03 sts 0x03FC, r22
9ba2: 70 93 fd 03 sts 0x03FD, r23
9ba6: 4d c0 rjmp .+154 ; 0x9c42 <MotorRegler+0x2c36>
else SollHoehe += WaypointTrimming;
9ba8: 4e 2f mov r20, r30
9baa: 55 27 eor r21, r21
9bac: 47 fd sbrc r20, 7
9bae: 50 95 com r21
9bb0: 65 2f mov r22, r21
9bb2: 75 2f mov r23, r21
9bb4: 84 0f add r24, r20
9bb6: 95 1f adc r25, r21
9bb8: a6 1f adc r26, r22
9bba: b7 1f adc r27, r23
9bbc: 80 93 fa 03 sts 0x03FA, r24
9bc0: 90 93 fb 03 sts 0x03FB, r25
9bc4: a0 93 fc 03 sts 0x03FC, r26
9bc8: b0 93 fd 03 sts 0x03FD, r27
9bcc: 3a c0 rjmp .+116 ; 0x9c42 <MotorRegler+0x2c36>
}
else
{
if(HeightTrimming > 0) SollHoehe += EE_Parameter.Hoehe_Verstaerkung / 3;
9bce: 12 16 cp r1, r18
9bd0: 13 06 cpc r1, r19
9bd2: e4 f4 brge .+56 ; 0x9c0c <MotorRegler+0x2c00>
9bd4: 20 91 50 05 lds r18, 0x0550
9bd8: 8b ea ldi r24, 0xAB ; 171
9bda: 28 9f mul r18, r24
9bdc: 21 2d mov r18, r1
9bde: 11 24 eor r1, r1
9be0: 26 95 lsr r18
9be2: 80 91 fa 03 lds r24, 0x03FA
9be6: 90 91 fb 03 lds r25, 0x03FB
9bea: a0 91 fc 03 lds r26, 0x03FC
9bee: b0 91 fd 03 lds r27, 0x03FD
9bf2: 82 0f add r24, r18
9bf4: 91 1d adc r25, r1
9bf6: a1 1d adc r26, r1
9bf8: b1 1d adc r27, r1
9bfa: 80 93 fa 03 sts 0x03FA, r24
9bfe: 90 93 fb 03 sts 0x03FB, r25
9c02: a0 93 fc 03 sts 0x03FC, r26
9c06: b0 93 fd 03 sts 0x03FD, r27
9c0a: 1b c0 rjmp .+54 ; 0x9c42 <MotorRegler+0x2c36>
else SollHoehe -= EE_Parameter.Hoehe_Verstaerkung / 3;
9c0c: 20 91 50 05 lds r18, 0x0550
9c10: 8b ea ldi r24, 0xAB ; 171
9c12: 28 9f mul r18, r24
9c14: 21 2d mov r18, r1
9c16: 11 24 eor r1, r1
9c18: 26 95 lsr r18
9c1a: 80 91 fa 03 lds r24, 0x03FA
9c1e: 90 91 fb 03 lds r25, 0x03FB
9c22: a0 91 fc 03 lds r26, 0x03FC
9c26: b0 91 fd 03 lds r27, 0x03FD
9c2a: 82 1b sub r24, r18
9c2c: 91 09 sbc r25, r1
9c2e: a1 09 sbc r26, r1
9c30: b1 09 sbc r27, r1
9c32: 80 93 fa 03 sts 0x03FA, r24
9c36: 90 93 fb 03 sts 0x03FB, r25
9c3a: a0 93 fc 03 sts 0x03FC, r26
9c3e: b0 93 fd 03 sts 0x03FD, r27
}
HeightTrimming = 0;
9c42: 10 92 88 03 sts 0x0388, r1
9c46: 10 92 87 03 sts 0x0387, r1
LIMIT_MIN_MAX(HoehenWertF, (HoehenWert-1024), (HoehenWert+1024)); // max. 10m Unterschied
9c4a: 80 91 fe 03 lds r24, 0x03FE
9c4e: 90 91 ff 03 lds r25, 0x03FF
9c52: a0 91 00 04 lds r26, 0x0400
9c56: b0 91 01 04 lds r27, 0x0401
9c5a: 8c 01 movw r16, r24
9c5c: 9d 01 movw r18, r26
9c5e: 14 50 subi r17, 0x04 ; 4
9c60: 21 09 sbc r18, r1
9c62: 31 09 sbc r19, r1
9c64: 40 91 4a 03 lds r20, 0x034A
9c68: 50 91 4b 03 lds r21, 0x034B
9c6c: 60 91 4c 03 lds r22, 0x034C
9c70: 70 91 4d 03 lds r23, 0x034D
9c74: 04 17 cp r16, r20
9c76: 15 07 cpc r17, r21
9c78: 26 07 cpc r18, r22
9c7a: 37 07 cpc r19, r23
9c7c: 4c f0 brlt .+18 ; 0x9c90 <MotorRegler+0x2c84>
9c7e: 00 93 4a 03 sts 0x034A, r16
9c82: 10 93 4b 03 sts 0x034B, r17
9c86: 20 93 4c 03 sts 0x034C, r18
9c8a: 30 93 4d 03 sts 0x034D, r19
9c8e: 10 c0 rjmp .+32 ; 0x9cb0 <MotorRegler+0x2ca4>
9c90: 9c 5f subi r25, 0xFC ; 252
9c92: af 4f sbci r26, 0xFF ; 255
9c94: bf 4f sbci r27, 0xFF ; 255
9c96: 48 17 cp r20, r24
9c98: 59 07 cpc r21, r25
9c9a: 6a 07 cpc r22, r26
9c9c: 7b 07 cpc r23, r27
9c9e: 44 f0 brlt .+16 ; 0x9cb0 <MotorRegler+0x2ca4>
9ca0: 80 93 4a 03 sts 0x034A, r24
9ca4: 90 93 4b 03 sts 0x034B, r25
9ca8: a0 93 4c 03 sts 0x034C, r26
9cac: b0 93 4d 03 sts 0x034D, r27
LIMIT_MIN_MAX(SollHoehe, (HoehenWertF-1024), (HoehenWertF+1500)); // max. 15m Unterschied
9cb0: 80 91 4a 03 lds r24, 0x034A
9cb4: 90 91 4b 03 lds r25, 0x034B
9cb8: a0 91 4c 03 lds r26, 0x034C
9cbc: b0 91 4d 03 lds r27, 0x034D
9cc0: 8c 01 movw r16, r24
9cc2: 9d 01 movw r18, r26
9cc4: 14 50 subi r17, 0x04 ; 4
9cc6: 21 09 sbc r18, r1
9cc8: 31 09 sbc r19, r1
9cca: 40 91 fa 03 lds r20, 0x03FA
9cce: 50 91 fb 03 lds r21, 0x03FB
9cd2: 60 91 fc 03 lds r22, 0x03FC
9cd6: 70 91 fd 03 lds r23, 0x03FD
9cda: 04 17 cp r16, r20
9cdc: 15 07 cpc r17, r21
9cde: 26 07 cpc r18, r22
9ce0: 37 07 cpc r19, r23
9ce2: 4c f0 brlt .+18 ; 0x9cf6 <MotorRegler+0x2cea>
9ce4: 00 93 fa 03 sts 0x03FA, r16
9ce8: 10 93 fb 03 sts 0x03FB, r17
9cec: 20 93 fc 03 sts 0x03FC, r18
9cf0: 30 93 fd 03 sts 0x03FD, r19
9cf4: 11 c0 rjmp .+34 ; 0x9d18 <MotorRegler+0x2d0c>
9cf6: 84 52 subi r24, 0x24 ; 36
9cf8: 9a 4f sbci r25, 0xFA ; 250
9cfa: af 4f sbci r26, 0xFF ; 255
9cfc: bf 4f sbci r27, 0xFF ; 255
9cfe: 48 17 cp r20, r24
9d00: 59 07 cpc r21, r25
9d02: 6a 07 cpc r22, r26
9d04: 7b 07 cpc r23, r27
9d06: 44 f0 brlt .+16 ; 0x9d18 <MotorRegler+0x2d0c>
9d08: 80 93 fa 03 sts 0x03FA, r24
9d0c: 90 93 fb 03 sts 0x03FB, r25
9d10: a0 93 fc 03 sts 0x03FC, r26
9d14: b0 93 fd 03 sts 0x03FD, r27
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 100;
9d18: 80 91 40 06 lds r24, 0x0640
9d1c: 81 ff sbrs r24, 1
9d1e: 06 c0 rjmp .+12 ; 0x9d2c <MotorRegler+0x2d20>
9d20: 84 e6 ldi r24, 0x64 ; 100
9d22: 90 e0 ldi r25, 0x00 ; 0
9d24: 90 93 ce 04 sts 0x04CE, r25
9d28: 80 93 cd 04 sts 0x04CD, r24
//update hoover gas stick value when setpoint is shifted
if(FromNC_AltitudeSpeed == 0) CalcStickGasHover();
9d2c: 80 91 f3 03 lds r24, 0x03F3
9d30: 81 11 cpse r24, r1
9d32: 02 c0 rjmp .+4 ; 0x9d38 <MotorRegler+0x2d2c>
9d34: 0e 94 c4 37 call 0x6f88 ; 0x6f88 <CalcStickGasHover>
if(StickGasHover < 70) StickGasHover = 70;
else if(StickGasHover > 175) StickGasHover = 175;
}
*/
}
if(BaroExpandActive) SollHoehe = HoehenWertF; // update setpoint to current altitude if Expanding is active
9d38: 80 91 59 04 lds r24, 0x0459
9d3c: 90 91 5a 04 lds r25, 0x045A
9d40: 89 2b or r24, r25
9d42: 09 f4 brne .+2 ; 0x9d46 <MotorRegler+0x2d3a>
9d44: 3f c0 rjmp .+126 ; 0x9dc4 <MotorRegler+0x2db8>
9d46: 80 91 4a 03 lds r24, 0x034A
9d4a: 90 91 4b 03 lds r25, 0x034B
9d4e: a0 91 4c 03 lds r26, 0x034C
9d52: b0 91 4d 03 lds r27, 0x034D
9d56: 80 93 fa 03 sts 0x03FA, r24
9d5a: 90 93 fb 03 sts 0x03FB, r25
9d5e: a0 93 fc 03 sts 0x03FC, r26
9d62: b0 93 fd 03 sts 0x03FD, r27
9d66: 2e c0 rjmp .+92 ; 0x9dc4 <MotorRegler+0x2db8>
} //if FCFlags & MKFCFLAG_FLY
else
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
ACC_AltitudeFusion(1); // init the ACC and Altitude fusion
9d68: 81 e0 ldi r24, 0x01 ; 1
9d6a: 0e 94 a0 16 call 0x2d40 ; 0x2d40 <ACC_AltitudeFusion>
#endif
SollHoehe = HoehenWertF - 2000;
9d6e: 80 91 4a 03 lds r24, 0x034A
9d72: 90 91 4b 03 lds r25, 0x034B
9d76: a0 91 4c 03 lds r26, 0x034C
9d7a: b0 91 4d 03 lds r27, 0x034D
9d7e: 80 5d subi r24, 0xD0 ; 208
9d80: 97 40 sbci r25, 0x07 ; 7
9d82: a1 09 sbc r26, r1
9d84: b1 09 sbc r27, r1
9d86: 80 93 fa 03 sts 0x03FA, r24
9d8a: 90 93 fb 03 sts 0x03FB, r25
9d8e: a0 93 fc 03 sts 0x03FC, r26
9d92: b0 93 fd 03 sts 0x03FD, r27
if(EE_Parameter.Hoehe_StickNeutralPoint) StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint;
9d96: 80 91 54 05 lds r24, 0x0554
9d9a: 88 23 and r24, r24
9d9c: 31 f0 breq .+12 ; 0x9daa <MotorRegler+0x2d9e>
9d9e: 90 e0 ldi r25, 0x00 ; 0
9da0: 90 93 41 01 sts 0x0141, r25
9da4: 80 93 40 01 sts 0x0140, r24
9da8: 06 c0 rjmp .+12 ; 0x9db6 <MotorRegler+0x2daa>
else StickGasHover = 127;
9daa: 8f e7 ldi r24, 0x7F ; 127
9dac: 90 e0 ldi r25, 0x00 ; 0
9dae: 90 93 41 01 sts 0x0141, r25
9db2: 80 93 40 01 sts 0x0140, r24
HoverGas = GasMischanteil;
9db6: 30 92 e9 03 sts 0x03E9, r3
9dba: 20 92 e8 03 sts 0x03E8, r2
VarioCharacter = '.';
9dbe: 8e e2 ldi r24, 0x2E ; 46
9dc0: 80 93 20 01 sts 0x0120, r24
}
HCGas = HoverGas; // take hover gas (neutral point)
9dc4: e0 91 e8 03 lds r30, 0x03E8
9dc8: f0 91 e9 03 lds r31, 0x03E9
}
if(HoehenWertF > SollHoehe || !(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT))
9dcc: 80 91 4a 03 lds r24, 0x034A
9dd0: 90 91 4b 03 lds r25, 0x034B
9dd4: a0 91 4c 03 lds r26, 0x034C
9dd8: b0 91 4d 03 lds r27, 0x034D
9ddc: 40 91 fa 03 lds r20, 0x03FA
9de0: 50 91 fb 03 lds r21, 0x03FB
9de4: 60 91 fc 03 lds r22, 0x03FC
9de8: 70 91 fd 03 lds r23, 0x03FD
9dec: 48 17 cp r20, r24
9dee: 59 07 cpc r21, r25
9df0: 6a 07 cpc r22, r26
9df2: 7b 07 cpc r23, r27
9df4: 24 f0 brlt .+8 ; 0x9dfe <MotorRegler+0x2df2>
9df6: 20 91 40 06 lds r18, 0x0640
9dfa: 20 fd sbrc r18, 0
9dfc: 70 c4 rjmp .+2272 ; 0xa6de <MotorRegler+0x36d2>
{
if(!ACC_AltitudeControl)
9dfe: 20 91 c2 03 lds r18, 0x03C2
9e02: 21 11 cpse r18, r1
9e04: 7e c2 rjmp .+1276 ; 0xa302 <MotorRegler+0x32f6>
{
// from this point the Heigth Control Algorithm is identical for both versions
if(BaroExpandActive) // baro range expanding active
9e06: 20 91 59 04 lds r18, 0x0459
9e0a: 30 91 5a 04 lds r19, 0x045A
9e0e: 23 2b or r18, r19
9e10: 59 f0 breq .+22 ; 0x9e28 <MotorRegler+0x2e1c>
{
HCGas = HoverGas; // hover while expanding baro adc range
9e12: e0 91 e8 03 lds r30, 0x03E8
9e16: f0 91 e9 03 lds r31, 0x03E9
HeightDeviation = 0;
9e1a: 10 92 86 03 sts 0x0386, r1
9e1e: 10 92 85 03 sts 0x0385, r1
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung
{
#define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging
#define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging
int HCGas, GasReduction = 0;
9e22: c1 2c mov r12, r1
9e24: d1 2c mov r13, r1
9e26: ea c0 rjmp .+468 ; 0x9ffc <MotorRegler+0x2ff0>
HeightDeviation = 0;
} // EOF // baro range expanding active
else // valid data from air pressure sensor
{
// ------------------------- P-Part ----------------------------
tmp_long = (HoehenWertF - SollHoehe); // positive when too high
9e28: 84 1b sub r24, r20
9e2a: 95 0b sbc r25, r21
9e2c: a6 0b sbc r26, r22
9e2e: b7 0b sbc r27, r23
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t
9e30: 82 30 cpi r24, 0x02 ; 2
9e32: 20 e8 ldi r18, 0x80 ; 128
9e34: 92 07 cpc r25, r18
9e36: 2f ef ldi r18, 0xFF ; 255
9e38: a2 07 cpc r26, r18
9e3a: b2 07 cpc r27, r18
9e3c: 6c f4 brge .+26 ; 0x9e58 <MotorRegler+0x2e4c>
9e3e: 81 e0 ldi r24, 0x01 ; 1
9e40: 90 e8 ldi r25, 0x80 ; 128
9e42: af ef ldi r26, 0xFF ; 255
9e44: bf ef ldi r27, 0xFF ; 255
9e46: 80 93 81 03 sts 0x0381, r24
9e4a: 90 93 82 03 sts 0x0382, r25
9e4e: a0 93 83 03 sts 0x0383, r26
9e52: b0 93 84 03 sts 0x0384, r27
9e56: 1b c0 rjmp .+54 ; 0x9e8e <MotorRegler+0x2e82>
9e58: 8f 3f cpi r24, 0xFF ; 255
9e5a: 3f e7 ldi r19, 0x7F ; 127
9e5c: 93 07 cpc r25, r19
9e5e: a1 05 cpc r26, r1
9e60: b1 05 cpc r27, r1
9e62: 4c f4 brge .+18 ; 0x9e76 <MotorRegler+0x2e6a>
HeightDeviation = 0;
} // EOF // baro range expanding active
else // valid data from air pressure sensor
{
// ------------------------- P-Part ----------------------------
tmp_long = (HoehenWertF - SollHoehe); // positive when too high
9e64: 80 93 81 03 sts 0x0381, r24
9e68: 90 93 82 03 sts 0x0382, r25
9e6c: a0 93 83 03 sts 0x0383, r26
9e70: b0 93 84 03 sts 0x0384, r27
9e74: 0c c0 rjmp .+24 ; 0x9e8e <MotorRegler+0x2e82>
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t
9e76: 8f ef ldi r24, 0xFF ; 255
9e78: 9f e7 ldi r25, 0x7F ; 127
9e7a: a0 e0 ldi r26, 0x00 ; 0
9e7c: b0 e0 ldi r27, 0x00 ; 0
9e7e: 80 93 81 03 sts 0x0381, r24
9e82: 90 93 82 03 sts 0x0382, r25
9e86: a0 93 83 03 sts 0x0383, r26
9e8a: b0 93 84 03 sts 0x0384, r27
HeightDeviation = (int)(tmp_long); // positive when too high
9e8e: 20 91 81 03 lds r18, 0x0381
9e92: 30 91 82 03 lds r19, 0x0382
9e96: 40 91 83 03 lds r20, 0x0383
9e9a: 50 91 84 03 lds r21, 0x0384
9e9e: 30 93 86 03 sts 0x0386, r19
9ea2: 20 93 85 03 sts 0x0385, r18
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part
9ea6: a0 91 39 01 lds r26, 0x0139
9eaa: b0 e0 ldi r27, 0x00 ; 0
9eac: 0e 94 c8 b1 call 0x16390 ; 0x16390 <__muluhisi3>
9eb0: 8b 01 movw r16, r22
9eb2: 9c 01 movw r18, r24
9eb4: 99 23 and r25, r25
9eb6: 24 f4 brge .+8 ; 0x9ec0 <MotorRegler+0x2eb4>
9eb8: 01 5e subi r16, 0xE1 ; 225
9eba: 1f 4f sbci r17, 0xFF ; 255
9ebc: 2f 4f sbci r18, 0xFF ; 255
9ebe: 3f 4f sbci r19, 0xFF ; 255
9ec0: d9 01 movw r26, r18
9ec2: c8 01 movw r24, r16
9ec4: 68 94 set
9ec6: 14 f8 bld r1, 4
9ec8: b5 95 asr r27
9eca: a7 95 ror r26
9ecc: 97 95 ror r25
9ece: 87 95 ror r24
9ed0: 16 94 lsr r1
9ed2: d1 f7 brne .-12 ; 0x9ec8 <MotorRegler+0x2ebc>
LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense
9ed4: 85 30 cpi r24, 0x05 ; 5
9ed6: 4e ef ldi r20, 0xFE ; 254
9ed8: 94 07 cpc r25, r20
9eda: 4f ef ldi r20, 0xFF ; 255
9edc: a4 07 cpc r26, r20
9ede: b4 07 cpc r27, r20
9ee0: 6c f4 brge .+26 ; 0x9efc <MotorRegler+0x2ef0>
9ee2: 84 e0 ldi r24, 0x04 ; 4
9ee4: 9e ef ldi r25, 0xFE ; 254
9ee6: af ef ldi r26, 0xFF ; 255
9ee8: bf ef ldi r27, 0xFF ; 255
9eea: 80 93 81 03 sts 0x0381, r24
9eee: 90 93 82 03 sts 0x0382, r25
9ef2: a0 93 83 03 sts 0x0383, r26
9ef6: b0 93 84 03 sts 0x0384, r27
9efa: 1b c0 rjmp .+54 ; 0x9f32 <MotorRegler+0x2f26>
9efc: 81 15 cp r24, r1
9efe: 54 e0 ldi r21, 0x04 ; 4
9f00: 95 07 cpc r25, r21
9f02: a1 05 cpc r26, r1
9f04: b1 05 cpc r27, r1
9f06: 4c f4 brge .+18 ; 0x9f1a <MotorRegler+0x2f0e>
{
// ------------------------- P-Part ----------------------------
tmp_long = (HoehenWertF - SollHoehe); // positive when too high
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t
HeightDeviation = (int)(tmp_long); // positive when too high
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part
9f08: 80 93 81 03 sts 0x0381, r24
9f0c: 90 93 82 03 sts 0x0382, r25
9f10: a0 93 83 03 sts 0x0383, r26
9f14: b0 93 84 03 sts 0x0384, r27
9f18: 0c c0 rjmp .+24 ; 0x9f32 <MotorRegler+0x2f26>
LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense
9f1a: 80 e0 ldi r24, 0x00 ; 0
9f1c: 94 e0 ldi r25, 0x04 ; 4
9f1e: a0 e0 ldi r26, 0x00 ; 0
9f20: b0 e0 ldi r27, 0x00 ; 0
9f22: 80 93 81 03 sts 0x0381, r24
9f26: 90 93 82 03 sts 0x0382, r25
9f2a: a0 93 83 03 sts 0x0383, r26
9f2e: b0 93 84 03 sts 0x0384, r27
GasReduction = tmp_long;
9f32: 40 91 81 03 lds r20, 0x0381
9f36: 50 91 82 03 lds r21, 0x0382
// ------------------------- D-Part 1: Vario Meter ----------------------------
tmp_int = VarioMeter / 8;
9f3a: a0 91 54 03 lds r26, 0x0354
9f3e: b0 91 55 03 lds r27, 0x0355
9f42: bb 23 and r27, r27
9f44: 0c f4 brge .+2 ; 0x9f48 <MotorRegler+0x2f3c>
9f46: 17 96 adiw r26, 0x07 ; 7
9f48: b5 95 asr r27
9f4a: a7 95 ror r26
9f4c: b5 95 asr r27
9f4e: a7 95 ror r26
9f50: b5 95 asr r27
9f52: a7 95 ror r26
LIMIT_MIN_MAX(tmp_int, -127, 128);
9f54: a2 38 cpi r26, 0x82 ; 130
9f56: 6f ef ldi r22, 0xFF ; 255
9f58: b6 07 cpc r27, r22
9f5a: 24 f0 brlt .+8 ; 0x9f64 <MotorRegler+0x2f58>
9f5c: a0 38 cpi r26, 0x80 ; 128
9f5e: b1 05 cpc r27, r1
9f60: 24 f4 brge .+8 ; 0x9f6a <MotorRegler+0x2f5e>
9f62: 05 c0 rjmp .+10 ; 0x9f6e <MotorRegler+0x2f62>
9f64: a1 e8 ldi r26, 0x81 ; 129
9f66: bf ef ldi r27, 0xFF ; 255
9f68: 02 c0 rjmp .+4 ; 0x9f6e <MotorRegler+0x2f62>
9f6a: a0 e8 ldi r26, 0x80 ; 128
9f6c: b0 e0 ldi r27, 0x00 ; 0
tmp_int = (tmp_int * (long)Parameter_Luftdruck_D) / 4L; // scale to d-gain parameter
9f6e: 20 91 3a 01 lds r18, 0x013A
9f72: 30 e0 ldi r19, 0x00 ; 0
9f74: 0e 94 c2 b1 call 0x16384 ; 0x16384 <__usmulhisi3>
9f78: 8b 01 movw r16, r22
9f7a: 9c 01 movw r18, r24
9f7c: 99 23 and r25, r25
9f7e: 24 f4 brge .+8 ; 0x9f88 <MotorRegler+0x2f7c>
9f80: 0d 5f subi r16, 0xFD ; 253
9f82: 1f 4f sbci r17, 0xFF ; 255
9f84: 2f 4f sbci r18, 0xFF ; 255
9f86: 3f 4f sbci r19, 0xFF ; 255
9f88: d9 01 movw r26, r18
9f8a: c8 01 movw r24, r16
9f8c: b5 95 asr r27
9f8e: a7 95 ror r26
9f90: 97 95 ror r25
9f92: 87 95 ror r24
9f94: b5 95 asr r27
9f96: a7 95 ror r26
9f98: 97 95 ror r25
9f9a: 87 95 ror r24
LIMIT_MIN_MAX(tmp_int,-64 * STICK_GAIN, 64 * STICK_GAIN);
9f9c: 81 30 cpi r24, 0x01 ; 1
9f9e: 7f ef ldi r23, 0xFF ; 255
9fa0: 97 07 cpc r25, r23
9fa2: 2c f0 brlt .+10 ; 0x9fae <MotorRegler+0x2fa2>
9fa4: 8f 3f cpi r24, 0xFF ; 255
9fa6: 91 05 cpc r25, r1
9fa8: 09 f0 breq .+2 ; 0x9fac <MotorRegler+0x2fa0>
9faa: 24 f4 brge .+8 ; 0x9fb4 <MotorRegler+0x2fa8>
9fac: 05 c0 rjmp .+10 ; 0x9fb8 <MotorRegler+0x2fac>
9fae: 80 e0 ldi r24, 0x00 ; 0
9fb0: 9f ef ldi r25, 0xFF ; 255
9fb2: 02 c0 rjmp .+4 ; 0x9fb8 <MotorRegler+0x2fac>
9fb4: 80 e0 ldi r24, 0x00 ; 0
9fb6: 91 e0 ldi r25, 0x01 ; 1
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint
9fb8: 20 91 cb 03 lds r18, 0x03CB
9fbc: 20 7c andi r18, 0xC0 ; 192
9fbe: 59 f0 breq .+22 ; 0x9fd6 <MotorRegler+0x2fca>
9fc0: 9c 01 movw r18, r24
9fc2: 99 23 and r25, r25
9fc4: 14 f4 brge .+4 ; 0x9fca <MotorRegler+0x2fbe>
9fc6: 2d 5f subi r18, 0xFD ; 253
9fc8: 3f 4f sbci r19, 0xFF ; 255
9fca: c9 01 movw r24, r18
9fcc: 95 95 asr r25
9fce: 87 95 ror r24
9fd0: 95 95 asr r25
9fd2: 87 95 ror r24
9fd4: 10 c0 rjmp .+32 ; 0x9ff6 <MotorRegler+0x2fea>
else
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) tmp_int /= 8; // reduce d-part in "Deckel" mode
9fd6: 20 91 40 06 lds r18, 0x0640
9fda: 20 ff sbrs r18, 0
9fdc: 0c c0 rjmp .+24 ; 0x9ff6 <MotorRegler+0x2fea>
9fde: 9c 01 movw r18, r24
9fe0: 99 23 and r25, r25
9fe2: 14 f4 brge .+4 ; 0x9fe8 <MotorRegler+0x2fdc>
9fe4: 29 5f subi r18, 0xF9 ; 249
9fe6: 3f 4f sbci r19, 0xFF ; 255
9fe8: c9 01 movw r24, r18
9fea: 95 95 asr r25
9fec: 87 95 ror r24
9fee: 95 95 asr r25
9ff0: 87 95 ror r24
9ff2: 95 95 asr r25
9ff4: 87 95 ror r24
GasReduction += tmp_int;
9ff6: 6a 01 movw r12, r20
9ff8: c8 0e add r12, r24
9ffa: d9 1e adc r13, r25
} // EOF no baro range expanding
// ------------------------ D-Part 2: ACC-Z Integral ------------------------
if(Parameter_Hoehe_ACC_Wirkung)
9ffc: a0 91 38 01 lds r26, 0x0138
a000: aa 23 and r26, r26
a002: 09 f4 brne .+2 ; 0xa006 <MotorRegler+0x2ffa>
a004: 61 c0 rjmp .+194 ; 0xa0c8 <MotorRegler+0x30bc>
{
tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN);
a006: 40 91 1e 04 lds r20, 0x041E
a00a: 50 91 1f 04 lds r21, 0x041F
a00e: 60 91 20 04 lds r22, 0x0420
a012: 70 91 21 04 lds r23, 0x0421
a016: 77 23 and r23, r23
a018: 24 f4 brge .+8 ; 0xa022 <MotorRegler+0x3016>
a01a: 41 58 subi r20, 0x81 ; 129
a01c: 5f 4f sbci r21, 0xFF ; 255
a01e: 6f 4f sbci r22, 0xFF ; 255
a020: 7f 4f sbci r23, 0xFF ; 255
a022: 9a 01 movw r18, r20
a024: ab 01 movw r20, r22
a026: 68 94 set
a028: 16 f8 bld r1, 6
a02a: 55 95 asr r21
a02c: 47 95 ror r20
a02e: 37 95 ror r19
a030: 27 95 ror r18
a032: 16 94 lsr r1
a034: d1 f7 brne .-12 ; 0xa02a <MotorRegler+0x301e>
a036: b0 e0 ldi r27, 0x00 ; 0
a038: 0e 94 c8 b1 call 0x16390 ; 0x16390 <__muluhisi3>
a03c: 8b 01 movw r16, r22
a03e: 9c 01 movw r18, r24
a040: 99 23 and r25, r25
a042: 24 f4 brge .+8 ; 0xa04c <MotorRegler+0x3040>
a044: 01 5e subi r16, 0xE1 ; 225
a046: 1f 4f sbci r17, 0xFF ; 255
a048: 2f 4f sbci r18, 0xFF ; 255
a04a: 3f 4f sbci r19, 0xFF ; 255
a04c: d9 01 movw r26, r18
a04e: c8 01 movw r24, r16
a050: 68 94 set
a052: 14 f8 bld r1, 4
a054: b5 95 asr r27
a056: a7 95 ror r26
a058: 97 95 ror r25
a05a: 87 95 ror r24
a05c: 16 94 lsr r1
a05e: d1 f7 brne .-12 ; 0xa054 <MotorRegler+0x3048>
LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN);
a060: 81 38 cpi r24, 0x81 ; 129
a062: 0f ef ldi r16, 0xFF ; 255
a064: 90 07 cpc r25, r16
a066: a0 07 cpc r26, r16
a068: b0 07 cpc r27, r16
a06a: 6c f4 brge .+26 ; 0xa086 <MotorRegler+0x307a>
a06c: 80 e8 ldi r24, 0x80 ; 128
a06e: 9f ef ldi r25, 0xFF ; 255
a070: af ef ldi r26, 0xFF ; 255
a072: bf ef ldi r27, 0xFF ; 255
a074: 80 93 81 03 sts 0x0381, r24
a078: 90 93 82 03 sts 0x0382, r25
a07c: a0 93 83 03 sts 0x0383, r26
a080: b0 93 84 03 sts 0x0384, r27
a084: 1b c0 rjmp .+54 ; 0xa0bc <MotorRegler+0x30b0>
a086: 8f 3f cpi r24, 0xFF ; 255
a088: 91 05 cpc r25, r1
a08a: a1 05 cpc r26, r1
a08c: b1 05 cpc r27, r1
a08e: 09 f0 breq .+2 ; 0xa092 <MotorRegler+0x3086>
a090: 4c f4 brge .+18 ; 0xa0a4 <MotorRegler+0x3098>
GasReduction += tmp_int;
} // EOF no baro range expanding
// ------------------------ D-Part 2: ACC-Z Integral ------------------------
if(Parameter_Hoehe_ACC_Wirkung)
{
tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN);
a092: 80 93 81 03 sts 0x0381, r24
a096: 90 93 82 03 sts 0x0382, r25
a09a: a0 93 83 03 sts 0x0383, r26
a09e: b0 93 84 03 sts 0x0384, r27
a0a2: 0c c0 rjmp .+24 ; 0xa0bc <MotorRegler+0x30b0>
LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN);
a0a4: 80 e0 ldi r24, 0x00 ; 0
a0a6: 91 e0 ldi r25, 0x01 ; 1
a0a8: a0 e0 ldi r26, 0x00 ; 0
a0aa: b0 e0 ldi r27, 0x00 ; 0
a0ac: 80 93 81 03 sts 0x0381, r24
a0b0: 90 93 82 03 sts 0x0382, r25
a0b4: a0 93 83 03 sts 0x0383, r26
a0b8: b0 93 84 03 sts 0x0384, r27
GasReduction += tmp_long;
a0bc: 80 91 81 03 lds r24, 0x0381
a0c0: 90 91 82 03 lds r25, 0x0382
a0c4: c8 0e add r12, r24
a0c6: d9 1e adc r13, r25
/* // ------------------------ D-Part 3: GpsZ ----------------------------------
tmp_int = (Parameter_Hoehe_GPS_Z * (int)FromNaviCtrl_Value.GpsZ)/128L;
LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN);
GasReduction += tmp_int;
*/
GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value
a0c8: 00 91 e8 03 lds r16, 0x03E8
a0cc: 10 91 e9 03 lds r17, 0x03E9
a0d0: 96 01 movw r18, r12
a0d2: d8 01 movw r26, r16
a0d4: 0e 94 ad b1 call 0x1635a ; 0x1635a <__mulhisi3>
a0d8: 2b 01 movw r4, r22
a0da: 3c 01 movw r6, r24
a0dc: 99 23 and r25, r25
a0de: 34 f4 brge .+12 ; 0xa0ec <MotorRegler+0x30e0>
a0e0: 2f ef ldi r18, 0xFF ; 255
a0e2: 42 0e add r4, r18
a0e4: 21 e0 ldi r18, 0x01 ; 1
a0e6: 52 1e adc r5, r18
a0e8: 61 1c adc r6, r1
a0ea: 71 1c adc r7, r1
a0ec: d3 01 movw r26, r6
a0ee: c2 01 movw r24, r4
a0f0: 07 2e mov r0, r23
a0f2: 79 e0 ldi r23, 0x09 ; 9
a0f4: b5 95 asr r27
a0f6: a7 95 ror r26
a0f8: 97 95 ror r25
a0fa: 87 95 ror r24
a0fc: 7a 95 dec r23
a0fe: d1 f7 brne .-12 ; 0xa0f4 <MotorRegler+0x30e8>
a100: 70 2d mov r23, r0
// ------------------------ ----------------------------------
HCGas -= GasReduction;
a102: bf 01 movw r22, r30
a104: 68 1b sub r22, r24
a106: 79 0b sbc r23, r25
// limit deviation from hoover point within the target region
if(!AltitudeSetpointTrimming && HoverGas > 0) // height setpoint is not changed and hoover gas not zero
a108: 80 91 f8 03 lds r24, 0x03F8
a10c: 90 91 f9 03 lds r25, 0x03F9
a110: 89 2b or r24, r25
a112: 09 f0 breq .+2 ; 0xa116 <MotorRegler+0x310a>
a114: 79 c0 rjmp .+242 ; 0xa208 <MotorRegler+0x31fc>
a116: 10 16 cp r1, r16
a118: 11 06 cpc r1, r17
a11a: 0c f0 brlt .+2 ; 0xa11e <MotorRegler+0x3112>
a11c: 75 c0 rjmp .+234 ; 0xa208 <MotorRegler+0x31fc>
{
unsigned int tmp;
tmp = abs(HeightDeviation);
a11e: 20 91 85 03 lds r18, 0x0385
a122: 30 91 86 03 lds r19, 0x0386
a126: c9 01 movw r24, r18
a128: 33 23 and r19, r19
a12a: 24 f4 brge .+8 ; 0xa134 <MotorRegler+0x3128>
a12c: 88 27 eor r24, r24
a12e: 99 27 eor r25, r25
a130: 82 1b sub r24, r18
a132: 93 0b sbc r25, r19
if(tmp <= 60)
a134: 8d 33 cpi r24, 0x3D ; 61
a136: 91 05 cpc r25, r1
a138: 90 f4 brcc .+36 ; 0xa15e <MotorRegler+0x3152>
{
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limit gas around the hoover point
a13a: 80 91 16 04 lds r24, 0x0416
a13e: 90 91 17 04 lds r25, 0x0417
a142: 86 17 cp r24, r22
a144: 97 07 cpc r25, r23
a146: 0c f0 brlt .+2 ; 0xa14a <MotorRegler+0x313e>
a148: 5c c0 rjmp .+184 ; 0xa202 <MotorRegler+0x31f6>
a14a: 80 91 3e 01 lds r24, 0x013E
a14e: 90 91 3f 01 lds r25, 0x013F
a152: 86 17 cp r24, r22
a154: 97 07 cpc r25, r23
a156: 0c f0 brlt .+2 ; 0xa15a <MotorRegler+0x314e>
a158: 57 c0 rjmp .+174 ; 0xa208 <MotorRegler+0x31fc>
a15a: bc 01 movw r22, r24
a15c: 55 c0 rjmp .+170 ; 0xa208 <MotorRegler+0x31fc>
}
else
{
tmp = (tmp - 60) / 32;
a15e: cc 97 sbiw r24, 0x3c ; 60
a160: 96 95 lsr r25
a162: 87 95 ror r24
a164: 92 95 swap r25
a166: 82 95 swap r24
a168: 8f 70 andi r24, 0x0F ; 15
a16a: 89 27 eor r24, r25
a16c: 9f 70 andi r25, 0x0F ; 15
a16e: 89 27 eor r24, r25
a170: 80 31 cpi r24, 0x10 ; 16
a172: 91 05 cpc r25, r1
a174: 10 f0 brcs .+4 ; 0xa17a <MotorRegler+0x316e>
a176: 8f e0 ldi r24, 0x0F ; 15
a178: 90 e0 ldi r25, 0x00 ; 0
if(tmp > 15) tmp = 15;
if(HeightDeviation > 0)
a17a: 12 16 cp r1, r18
a17c: 13 06 cpc r1, r19
a17e: 1c f5 brge .+70 ; 0xa1c6 <MotorRegler+0x31ba>
{
tmp = (HoverGasMin * (16 - tmp)) / 16;
a180: 40 e1 ldi r20, 0x10 ; 16
a182: 50 e0 ldi r21, 0x00 ; 0
a184: 48 1b sub r20, r24
a186: 59 0b sbc r21, r25
a188: 20 91 16 04 lds r18, 0x0416
a18c: 30 91 17 04 lds r19, 0x0417
a190: 42 9f mul r20, r18
a192: c0 01 movw r24, r0
a194: 43 9f mul r20, r19
a196: 90 0d add r25, r0
a198: 52 9f mul r21, r18
a19a: 90 0d add r25, r0
a19c: 11 24 eor r1, r1
a19e: 92 95 swap r25
a1a0: 82 95 swap r24
a1a2: 8f 70 andi r24, 0x0F ; 15
a1a4: 89 27 eor r24, r25
a1a6: 9f 70 andi r25, 0x0F ; 15
a1a8: 89 27 eor r24, r25
LIMIT_MIN_MAX(HCGas, tmp, HoverGasMax); // limit gas around the hoover point
a1aa: 86 17 cp r24, r22
a1ac: 97 07 cpc r25, r23
a1ae: 10 f0 brcs .+4 ; 0xa1b4 <MotorRegler+0x31a8>
a1b0: bc 01 movw r22, r24
a1b2: 2a c0 rjmp .+84 ; 0xa208 <MotorRegler+0x31fc>
a1b4: 80 91 3e 01 lds r24, 0x013E
a1b8: 90 91 3f 01 lds r25, 0x013F
a1bc: 86 17 cp r24, r22
a1be: 97 07 cpc r25, r23
a1c0: 1c f5 brge .+70 ; 0xa208 <MotorRegler+0x31fc>
a1c2: bc 01 movw r22, r24
a1c4: 21 c0 rjmp .+66 ; 0xa208 <MotorRegler+0x31fc>
}
else
{
tmp = (HoverGasMax * (tmp + 16)) / 16;
a1c6: 40 96 adiw r24, 0x10 ; 16
a1c8: 40 91 3e 01 lds r20, 0x013E
a1cc: 50 91 3f 01 lds r21, 0x013F
a1d0: 84 9f mul r24, r20
a1d2: 90 01 movw r18, r0
a1d4: 85 9f mul r24, r21
a1d6: 30 0d add r19, r0
a1d8: 94 9f mul r25, r20
a1da: 30 0d add r19, r0
a1dc: 11 24 eor r1, r1
a1de: 32 95 swap r19
a1e0: 22 95 swap r18
a1e2: 2f 70 andi r18, 0x0F ; 15
a1e4: 23 27 eor r18, r19
a1e6: 3f 70 andi r19, 0x0F ; 15
a1e8: 23 27 eor r18, r19
LIMIT_MIN_MAX(HCGas, HoverGasMin, tmp); // limit gas around the hoover point
a1ea: 80 91 16 04 lds r24, 0x0416
a1ee: 90 91 17 04 lds r25, 0x0417
a1f2: 86 17 cp r24, r22
a1f4: 97 07 cpc r25, r23
a1f6: 3c f4 brge .+14 ; 0xa206 <MotorRegler+0x31fa>
a1f8: 62 17 cp r22, r18
a1fa: 73 07 cpc r23, r19
a1fc: 28 f0 brcs .+10 ; 0xa208 <MotorRegler+0x31fc>
a1fe: b9 01 movw r22, r18
a200: 03 c0 rjmp .+6 ; 0xa208 <MotorRegler+0x31fc>
{
unsigned int tmp;
tmp = abs(HeightDeviation);
if(tmp <= 60)
{
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limit gas around the hoover point
a202: bc 01 movw r22, r24
a204: 01 c0 rjmp .+2 ; 0xa208 <MotorRegler+0x31fc>
LIMIT_MIN_MAX(HCGas, tmp, HoverGasMax); // limit gas around the hoover point
}
else
{
tmp = (HoverGasMax * (tmp + 16)) / 16;
LIMIT_MIN_MAX(HCGas, HoverGasMin, tmp); // limit gas around the hoover point
a206: bc 01 movw r22, r24
}
}
}
// strech control output by inverse attitude projection 1/cos
// + 1/cos(angle) ++++++++++++++++++++++++++
tmp_long2 = (int32_t)HCGas;
a208: cb 01 movw r24, r22
a20a: aa 27 eor r26, r26
a20c: 97 fd sbrc r25, 7
a20e: a0 95 com r26
a210: ba 2f mov r27, r26
tmp_long2 *= 8192L;
a212: bc 01 movw r22, r24
a214: cd 01 movw r24, r26
a216: 05 2e mov r0, r21
a218: 5d e0 ldi r21, 0x0D ; 13
a21a: 66 0f add r22, r22
a21c: 77 1f adc r23, r23
a21e: 88 1f adc r24, r24
a220: 99 1f adc r25, r25
a222: 5a 95 dec r21
a224: d1 f7 brne .-12 ; 0xa21a <MotorRegler+0x320e>
a226: 50 2d mov r21, r0
tmp_long2 /= CosAttitude;
a228: 20 91 2d 06 lds r18, 0x062D
a22c: 30 91 2e 06 lds r19, 0x062E
a230: 44 27 eor r20, r20
a232: 37 fd sbrc r19, 7
a234: 40 95 com r20
a236: 54 2f mov r21, r20
a238: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
a23c: 20 93 7d 03 sts 0x037D, r18
a240: 30 93 7e 03 sts 0x037E, r19
a244: 40 93 7f 03 sts 0x037F, r20
a248: 50 93 80 03 sts 0x0380, r21
HCGas = (int16_t)tmp_long2;
// update height control gas averaging
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE;
a24c: 80 91 7b 03 lds r24, 0x037B
a250: 90 91 7c 03 lds r25, 0x037C
a254: bc 01 movw r22, r24
a256: 66 0f add r22, r22
a258: 77 1f adc r23, r23
a25a: 86 0f add r24, r22
a25c: 97 1f adc r25, r23
a25e: 28 0f add r18, r24
a260: 39 1f adc r19, r25
a262: 33 23 and r19, r19
a264: 14 f4 brge .+4 ; 0xa26a <MotorRegler+0x325e>
a266: 2d 5f subi r18, 0xFD ; 253
a268: 3f 4f sbci r19, 0xFF ; 255
a26a: 35 95 asr r19
a26c: 27 95 ror r18
a26e: 35 95 asr r19
a270: 27 95 ror r18
a272: 30 93 7c 03 sts 0x037C, r19
a276: 20 93 7b 03 sts 0x037B, r18
// limit height control gas pd-control output
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN);
a27a: 80 91 4c 05 lds r24, 0x054C
a27e: 90 e0 ldi r25, 0x00 ; 0
a280: 88 0f add r24, r24
a282: 99 1f adc r25, r25
a284: 88 0f add r24, r24
a286: 99 1f adc r25, r25
a288: 82 17 cp r24, r18
a28a: 93 07 cpc r25, r19
a28c: 2c f0 brlt .+10 ; 0xa298 <MotorRegler+0x328c>
a28e: 90 93 7c 03 sts 0x037C, r25
a292: 80 93 7b 03 sts 0x037B, r24
a296: 0f c0 rjmp .+30 ; 0xa2b6 <MotorRegler+0x32aa>
a298: 80 91 64 06 lds r24, 0x0664
a29c: 90 e0 ldi r25, 0x00 ; 0
a29e: 44 97 sbiw r24, 0x14 ; 20
a2a0: 88 0f add r24, r24
a2a2: 99 1f adc r25, r25
a2a4: 88 0f add r24, r24
a2a6: 99 1f adc r25, r25
a2a8: 28 17 cp r18, r24
a2aa: 39 07 cpc r19, r25
a2ac: 24 f0 brlt .+8 ; 0xa2b6 <MotorRegler+0x32aa>
a2ae: 90 93 7c 03 sts 0x037C, r25
a2b2: 80 93 7b 03 sts 0x037B, r24
// set GasMischanteil to HeightControlGasFilter
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)
a2b6: 80 91 40 06 lds r24, 0x0640
a2ba: 80 ff sbrs r24, 0
a2bc: 10 c0 rjmp .+32 ; 0xa2de <MotorRegler+0x32d2>
{ // old version
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas
a2be: 80 91 7b 03 lds r24, 0x037B
a2c2: 90 91 7c 03 lds r25, 0x037C
a2c6: 82 15 cp r24, r2
a2c8: 93 05 cpc r25, r3
a2ca: 24 f0 brlt .+8 ; 0xa2d4 <MotorRegler+0x32c8>
a2cc: 30 92 7c 03 sts 0x037C, r3
a2d0: 20 92 7b 03 sts 0x037B, r2
GasMischanteil = FilterHCGas;
a2d4: 20 90 7b 03 lds r2, 0x037B
a2d8: 30 90 7c 03 lds r3, 0x037C
a2dc: 00 c2 rjmp .+1024 ; 0xa6de <MotorRegler+0x36d2>
}
else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode
a2de: 20 1a sub r2, r16
a2e0: 31 0a sbc r3, r17
a2e2: c1 01 movw r24, r2
a2e4: 99 23 and r25, r25
a2e6: 0c f4 brge .+2 ; 0xa2ea <MotorRegler+0x32de>
a2e8: 03 96 adiw r24, 0x03 ; 3
a2ea: 95 95 asr r25
a2ec: 87 95 ror r24
a2ee: 95 95 asr r25
a2f0: 87 95 ror r24
a2f2: 20 91 7b 03 lds r18, 0x037B
a2f6: 30 91 7c 03 lds r19, 0x037C
a2fa: 1c 01 movw r2, r24
a2fc: 22 0e add r2, r18
a2fe: 33 1e adc r3, r19
a300: ee c1 rjmp .+988 ; 0xa6de <MotorRegler+0x36d2>
}
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
else // ACC-Altitude control
{
// from this point the Heigth Control Algorithm is identical for both versions
if(BaroExpandActive) // baro range expanding active
a302: 20 91 59 04 lds r18, 0x0459
a306: 30 91 5a 04 lds r19, 0x045A
a30a: 23 2b or r18, r19
a30c: 59 f0 breq .+22 ; 0xa324 <MotorRegler+0x3318>
{
HCGas = HoverGas; // hover while expanding baro adc range
a30e: e0 91 e8 03 lds r30, 0x03E8
a312: f0 91 e9 03 lds r31, 0x03E9
HeightDeviation = 0;
a316: 10 92 86 03 sts 0x0386, r1
a31a: 10 92 85 03 sts 0x0385, r1
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung
{
#define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging
#define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging
int HCGas, GasReduction = 0;
a31e: 41 2c mov r4, r1
a320: 51 2c mov r5, r1
a322: 3c c1 rjmp .+632 ; 0xa59c <MotorRegler+0x3590>
HeightDeviation = 0;
} // EOF // baro range expanding active
else // valid data from air pressure sensor
{
// ------------------------- P-Part ----------------------------
tmp_long = (HoehenWertF - SollHoehe); // positive when too high
a324: 84 1b sub r24, r20
a326: 95 0b sbc r25, r21
a328: a6 0b sbc r26, r22
a32a: b7 0b sbc r27, r23
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t
a32c: 82 30 cpi r24, 0x02 ; 2
a32e: 30 e8 ldi r19, 0x80 ; 128
a330: 93 07 cpc r25, r19
a332: 3f ef ldi r19, 0xFF ; 255
a334: a3 07 cpc r26, r19
a336: b3 07 cpc r27, r19
a338: 6c f4 brge .+26 ; 0xa354 <MotorRegler+0x3348>
a33a: 81 e0 ldi r24, 0x01 ; 1
a33c: 90 e8 ldi r25, 0x80 ; 128
a33e: af ef ldi r26, 0xFF ; 255
a340: bf ef ldi r27, 0xFF ; 255
a342: 80 93 81 03 sts 0x0381, r24
a346: 90 93 82 03 sts 0x0382, r25
a34a: a0 93 83 03 sts 0x0383, r26
a34e: b0 93 84 03 sts 0x0384, r27
a352: 1b c0 rjmp .+54 ; 0xa38a <MotorRegler+0x337e>
a354: 8f 3f cpi r24, 0xFF ; 255
a356: 4f e7 ldi r20, 0x7F ; 127
a358: 94 07 cpc r25, r20
a35a: a1 05 cpc r26, r1
a35c: b1 05 cpc r27, r1
a35e: 4c f4 brge .+18 ; 0xa372 <MotorRegler+0x3366>
HeightDeviation = 0;
} // EOF // baro range expanding active
else // valid data from air pressure sensor
{
// ------------------------- P-Part ----------------------------
tmp_long = (HoehenWertF - SollHoehe); // positive when too high
a360: 80 93 81 03 sts 0x0381, r24
a364: 90 93 82 03 sts 0x0382, r25
a368: a0 93 83 03 sts 0x0383, r26
a36c: b0 93 84 03 sts 0x0384, r27
a370: 0c c0 rjmp .+24 ; 0xa38a <MotorRegler+0x337e>
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t
a372: 8f ef ldi r24, 0xFF ; 255
a374: 9f e7 ldi r25, 0x7F ; 127
a376: a0 e0 ldi r26, 0x00 ; 0
a378: b0 e0 ldi r27, 0x00 ; 0
a37a: 80 93 81 03 sts 0x0381, r24
a37e: 90 93 82 03 sts 0x0382, r25
a382: a0 93 83 03 sts 0x0383, r26
a386: b0 93 84 03 sts 0x0384, r27
HeightDeviation = (int)(tmp_long); // positive when too high
a38a: 20 91 81 03 lds r18, 0x0381
a38e: 30 91 82 03 lds r19, 0x0382
a392: 40 91 83 03 lds r20, 0x0383
a396: 50 91 84 03 lds r21, 0x0384
a39a: 30 93 86 03 sts 0x0386, r19
a39e: 20 93 85 03 sts 0x0385, r18
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part
a3a2: a0 91 39 01 lds r26, 0x0139
a3a6: b0 e0 ldi r27, 0x00 ; 0
a3a8: 0e 94 c8 b1 call 0x16390 ; 0x16390 <__muluhisi3>
a3ac: 8b 01 movw r16, r22
a3ae: 9c 01 movw r18, r24
a3b0: 99 23 and r25, r25
a3b2: 24 f4 brge .+8 ; 0xa3bc <MotorRegler+0x33b0>
a3b4: 01 5e subi r16, 0xE1 ; 225
a3b6: 1f 4f sbci r17, 0xFF ; 255
a3b8: 2f 4f sbci r18, 0xFF ; 255
a3ba: 3f 4f sbci r19, 0xFF ; 255
a3bc: d9 01 movw r26, r18
a3be: c8 01 movw r24, r16
a3c0: 68 94 set
a3c2: 14 f8 bld r1, 4
a3c4: b5 95 asr r27
a3c6: a7 95 ror r26
a3c8: 97 95 ror r25
a3ca: 87 95 ror r24
a3cc: 16 94 lsr r1
a3ce: d1 f7 brne .-12 ; 0xa3c4 <MotorRegler+0x33b8>
LIMIT_MIN_MAX(tmp_long, -511 * STICK_GAIN, 512 * STICK_GAIN); // more than full range makes sense
a3d0: 85 30 cpi r24, 0x05 ; 5
a3d2: 58 ef ldi r21, 0xF8 ; 248
a3d4: 95 07 cpc r25, r21
a3d6: 5f ef ldi r21, 0xFF ; 255
a3d8: a5 07 cpc r26, r21
a3da: b5 07 cpc r27, r21
a3dc: 6c f4 brge .+26 ; 0xa3f8 <MotorRegler+0x33ec>
a3de: 84 e0 ldi r24, 0x04 ; 4
a3e0: 98 ef ldi r25, 0xF8 ; 248
a3e2: af ef ldi r26, 0xFF ; 255
a3e4: bf ef ldi r27, 0xFF ; 255
a3e6: 80 93 81 03 sts 0x0381, r24
a3ea: 90 93 82 03 sts 0x0382, r25
a3ee: a0 93 83 03 sts 0x0383, r26
a3f2: b0 93 84 03 sts 0x0384, r27
a3f6: 1b c0 rjmp .+54 ; 0xa42e <MotorRegler+0x3422>
a3f8: 81 15 cp r24, r1
a3fa: 68 e0 ldi r22, 0x08 ; 8
a3fc: 96 07 cpc r25, r22
a3fe: a1 05 cpc r26, r1
a400: b1 05 cpc r27, r1
a402: 4c f4 brge .+18 ; 0xa416 <MotorRegler+0x340a>
{
// ------------------------- P-Part ----------------------------
tmp_long = (HoehenWertF - SollHoehe); // positive when too high
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t
HeightDeviation = (int)(tmp_long); // positive when too high
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part
a404: 80 93 81 03 sts 0x0381, r24
a408: 90 93 82 03 sts 0x0382, r25
a40c: a0 93 83 03 sts 0x0383, r26
a410: b0 93 84 03 sts 0x0384, r27
a414: 0c c0 rjmp .+24 ; 0xa42e <MotorRegler+0x3422>
LIMIT_MIN_MAX(tmp_long, -511 * STICK_GAIN, 512 * STICK_GAIN); // more than full range makes sense
a416: 80 e0 ldi r24, 0x00 ; 0
a418: 98 e0 ldi r25, 0x08 ; 8
a41a: a0 e0 ldi r26, 0x00 ; 0
a41c: b0 e0 ldi r27, 0x00 ; 0
a41e: 80 93 81 03 sts 0x0381, r24
a422: 90 93 82 03 sts 0x0382, r25
a426: a0 93 83 03 sts 0x0383, r26
a42a: b0 93 84 03 sts 0x0384, r27
GasReduction = tmp_long;
a42e: 40 90 81 03 lds r4, 0x0381
a432: 50 90 82 03 lds r5, 0x0382
a436: 60 90 83 03 lds r6, 0x0383
a43a: 70 90 84 03 lds r7, 0x0384
// ------------------------ D-Part: ACC-Z Integral ------------------------
tmp_long = VarioMeter + (AdWertAccHoch * Parameter_Hoehe_ACC_Wirkung)/256;
a43e: 40 91 5b 03 lds r20, 0x035B
a442: 50 91 5c 03 lds r21, 0x035C
a446: 20 91 54 03 lds r18, 0x0354
a44a: 30 91 55 03 lds r19, 0x0355
a44e: 60 91 38 01 lds r22, 0x0138
a452: 64 9f mul r22, r20
a454: c0 01 movw r24, r0
a456: 65 9f mul r22, r21
a458: 90 0d add r25, r0
a45a: 11 24 eor r1, r1
a45c: 99 23 and r25, r25
a45e: 14 f4 brge .+4 ; 0xa464 <MotorRegler+0x3458>
a460: 81 50 subi r24, 0x01 ; 1
a462: 9f 4f sbci r25, 0xFF ; 255
a464: 89 2f mov r24, r25
a466: 99 0f add r25, r25
a468: 99 0b sbc r25, r25
a46a: 8c 01 movw r16, r24
a46c: 02 0f add r16, r18
a46e: 13 1f adc r17, r19
a470: 22 27 eor r18, r18
a472: 17 fd sbrc r17, 7
a474: 20 95 com r18
a476: 32 2f mov r19, r18
// ------------------------- D-Part: Vario Meter ----------------------------
if(WaypointTrimming) {
a478: 80 91 f2 03 lds r24, 0x03F2
a47c: 88 23 and r24, r24
a47e: 79 f0 breq .+30 ; 0xa49e <MotorRegler+0x3492>
Variance = AltitudeSetpointTrimming * 8;
a480: 80 91 f8 03 lds r24, 0x03F8
a484: 90 91 f9 03 lds r25, 0x03F9
a488: 88 0f add r24, r24
a48a: 99 1f adc r25, r25
a48c: 88 0f add r24, r24
a48e: 99 1f adc r25, r25
a490: 88 0f add r24, r24
a492: 99 1f adc r25, r25
a494: 90 93 c4 03 sts 0x03C4, r25
a498: 80 93 c3 03 sts 0x03C3, r24
a49c: 25 c0 rjmp .+74 ; 0xa4e8 <MotorRegler+0x34dc>
} else {
Variance = AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung*9/32;
a49e: 60 91 50 05 lds r22, 0x0550
a4a2: 40 91 f8 03 lds r20, 0x03F8
a4a6: 50 91 f9 03 lds r21, 0x03F9
a4aa: 64 9f mul r22, r20
a4ac: c0 01 movw r24, r0
a4ae: 65 9f mul r22, r21
a4b0: 90 0d add r25, r0
a4b2: 11 24 eor r1, r1
a4b4: ac 01 movw r20, r24
a4b6: 44 0f add r20, r20
a4b8: 55 1f adc r21, r21
a4ba: 44 0f add r20, r20
a4bc: 55 1f adc r21, r21
a4be: 44 0f add r20, r20
a4c0: 55 1f adc r21, r21
a4c2: 84 0f add r24, r20
a4c4: 95 1f adc r25, r21
a4c6: 99 23 and r25, r25
a4c8: 0c f4 brge .+2 ; 0xa4cc <MotorRegler+0x34c0>
a4ca: 4f 96 adiw r24, 0x1f ; 31
a4cc: 95 95 asr r25
a4ce: 87 95 ror r24
a4d0: 95 95 asr r25
a4d2: 87 95 ror r24
a4d4: 95 95 asr r25
a4d6: 87 95 ror r24
a4d8: 95 95 asr r25
a4da: 87 95 ror r24
a4dc: 95 95 asr r25
a4de: 87 95 ror r24
a4e0: 90 93 c4 03 sts 0x03C4, r25
a4e4: 80 93 c3 03 sts 0x03C3, r24
}
tmp_long -= (long)Variance;
a4e8: 80 91 c3 03 lds r24, 0x03C3
a4ec: 90 91 c4 03 lds r25, 0x03C4
a4f0: aa 27 eor r26, r26
a4f2: 97 fd sbrc r25, 7
a4f4: a0 95 com r26
a4f6: ba 2f mov r27, r26
a4f8: a9 01 movw r20, r18
a4fa: 98 01 movw r18, r16
a4fc: 28 1b sub r18, r24
a4fe: 39 0b sbc r19, r25
a500: 4a 0b sbc r20, r26
a502: 5b 0b sbc r21, r27
tmp_long = (tmp_long * (long)Parameter_Luftdruck_D) / 32; // scale to d-gain parameter
a504: a0 91 3a 01 lds r26, 0x013A
a508: b0 e0 ldi r27, 0x00 ; 0
a50a: 0e 94 c8 b1 call 0x16390 ; 0x16390 <__muluhisi3>
a50e: 8b 01 movw r16, r22
a510: 9c 01 movw r18, r24
a512: 99 23 and r25, r25
a514: 24 f4 brge .+8 ; 0xa51e <MotorRegler+0x3512>
a516: 01 5e subi r16, 0xE1 ; 225
a518: 1f 4f sbci r17, 0xFF ; 255
a51a: 2f 4f sbci r18, 0xFF ; 255
a51c: 3f 4f sbci r19, 0xFF ; 255
a51e: d9 01 movw r26, r18
a520: c8 01 movw r24, r16
a522: 68 94 set
a524: 14 f8 bld r1, 4
a526: b5 95 asr r27
a528: a7 95 ror r26
a52a: 97 95 ror r25
a52c: 87 95 ror r24
a52e: 16 94 lsr r1
a530: d1 f7 brne .-12 ; 0xa526 <MotorRegler+0x351a>
LIMIT_MIN_MAX(tmp_long,-511 * STICK_GAIN, 512 * STICK_GAIN);
a532: 85 30 cpi r24, 0x05 ; 5
a534: 78 ef ldi r23, 0xF8 ; 248
a536: 97 07 cpc r25, r23
a538: 7f ef ldi r23, 0xFF ; 255
a53a: a7 07 cpc r26, r23
a53c: b7 07 cpc r27, r23
a53e: 6c f4 brge .+26 ; 0xa55a <MotorRegler+0x354e>
a540: 84 e0 ldi r24, 0x04 ; 4
a542: 98 ef ldi r25, 0xF8 ; 248
a544: af ef ldi r26, 0xFF ; 255
a546: bf ef ldi r27, 0xFF ; 255
a548: 80 93 81 03 sts 0x0381, r24
a54c: 90 93 82 03 sts 0x0382, r25
a550: a0 93 83 03 sts 0x0383, r26
a554: b0 93 84 03 sts 0x0384, r27
a558: 1b c0 rjmp .+54 ; 0xa590 <MotorRegler+0x3584>
a55a: 81 15 cp r24, r1
a55c: 08 e0 ldi r16, 0x08 ; 8
a55e: 90 07 cpc r25, r16
a560: a1 05 cpc r26, r1
a562: b1 05 cpc r27, r1
a564: 4c f4 brge .+18 ; 0xa578 <MotorRegler+0x356c>
Variance = AltitudeSetpointTrimming * 8;
} else {
Variance = AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung*9/32;
}
tmp_long -= (long)Variance;
tmp_long = (tmp_long * (long)Parameter_Luftdruck_D) / 32; // scale to d-gain parameter
a566: 80 93 81 03 sts 0x0381, r24
a56a: 90 93 82 03 sts 0x0382, r25
a56e: a0 93 83 03 sts 0x0383, r26
a572: b0 93 84 03 sts 0x0384, r27
a576: 0c c0 rjmp .+24 ; 0xa590 <MotorRegler+0x3584>
LIMIT_MIN_MAX(tmp_long,-511 * STICK_GAIN, 512 * STICK_GAIN);
a578: 80 e0 ldi r24, 0x00 ; 0
a57a: 98 e0 ldi r25, 0x08 ; 8
a57c: a0 e0 ldi r26, 0x00 ; 0
a57e: b0 e0 ldi r27, 0x00 ; 0
a580: 80 93 81 03 sts 0x0381, r24
a584: 90 93 82 03 sts 0x0382, r25
a588: a0 93 83 03 sts 0x0383, r26
a58c: b0 93 84 03 sts 0x0384, r27
GasReduction += tmp_long;
a590: 80 91 81 03 lds r24, 0x0381
a594: 90 91 82 03 lds r25, 0x0382
a598: 48 0e add r4, r24
a59a: 59 1e adc r5, r25
} // EOF no baro range expanding
HCGas -= GasReduction;
a59c: e4 19 sub r30, r4
a59e: f5 09 sbc r31, r5
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limits gas around hover point
a5a0: 60 91 16 04 lds r22, 0x0416
a5a4: 70 91 17 04 lds r23, 0x0417
a5a8: 6e 17 cp r22, r30
a5aa: 7f 07 cpc r23, r31
a5ac: 4c f4 brge .+18 ; 0xa5c0 <MotorRegler+0x35b4>
a5ae: 80 91 3e 01 lds r24, 0x013E
a5b2: 90 91 3f 01 lds r25, 0x013F
a5b6: bf 01 movw r22, r30
a5b8: 8e 17 cp r24, r30
a5ba: 9f 07 cpc r25, r31
a5bc: 0c f4 brge .+2 ; 0xa5c0 <MotorRegler+0x35b4>
a5be: bc 01 movw r22, r24
// strech control output by inverse attitude projection 1/cos
// + 1/cos(angle) ++++++++++++++++++++++++++
tmp_long2 = (int32_t)HCGas;
a5c0: cb 01 movw r24, r22
a5c2: aa 27 eor r26, r26
a5c4: 97 fd sbrc r25, 7
a5c6: a0 95 com r26
a5c8: ba 2f mov r27, r26
tmp_long2 *= 8192L;
a5ca: bc 01 movw r22, r24
a5cc: cd 01 movw r24, r26
a5ce: 05 2e mov r0, r21
a5d0: 5d e0 ldi r21, 0x0D ; 13
a5d2: 66 0f add r22, r22
a5d4: 77 1f adc r23, r23
a5d6: 88 1f adc r24, r24
a5d8: 99 1f adc r25, r25
a5da: 5a 95 dec r21
a5dc: d1 f7 brne .-12 ; 0xa5d2 <MotorRegler+0x35c6>
a5de: 50 2d mov r21, r0
tmp_long2 /= CosAttitude;
a5e0: 20 91 2d 06 lds r18, 0x062D
a5e4: 30 91 2e 06 lds r19, 0x062E
a5e8: 44 27 eor r20, r20
a5ea: 37 fd sbrc r19, 7
a5ec: 40 95 com r20
a5ee: 54 2f mov r21, r20
a5f0: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
a5f4: 20 93 7d 03 sts 0x037D, r18
a5f8: 30 93 7e 03 sts 0x037E, r19
a5fc: 40 93 7f 03 sts 0x037F, r20
a600: 50 93 80 03 sts 0x0380, r21
HCGas = (int16_t)tmp_long2;
// update height control gas averaging
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE;
a604: 80 91 7b 03 lds r24, 0x037B
a608: 90 91 7c 03 lds r25, 0x037C
a60c: bc 01 movw r22, r24
a60e: 66 0f add r22, r22
a610: 77 1f adc r23, r23
a612: 86 0f add r24, r22
a614: 97 1f adc r25, r23
a616: 28 0f add r18, r24
a618: 39 1f adc r19, r25
a61a: 33 23 and r19, r19
a61c: 14 f4 brge .+4 ; 0xa622 <MotorRegler+0x3616>
a61e: 2d 5f subi r18, 0xFD ; 253
a620: 3f 4f sbci r19, 0xFF ; 255
a622: 35 95 asr r19
a624: 27 95 ror r18
a626: 35 95 asr r19
a628: 27 95 ror r18
a62a: 30 93 7c 03 sts 0x037C, r19
a62e: 20 93 7b 03 sts 0x037B, r18
// limit height control gas pd-control output
int min;
if(GasIsZeroCnt > 400 || (FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF)) min = EE_Parameter.Gas_Min; else min = EE_Parameter.Hoehe_MinGas;
a632: 80 91 c5 03 lds r24, 0x03C5
a636: 90 91 c6 03 lds r25, 0x03C6
a63a: 81 39 cpi r24, 0x91 ; 145
a63c: 91 40 sbci r25, 0x01 ; 1
a63e: 20 f4 brcc .+8 ; 0xa648 <MotorRegler+0x363c>
a640: 80 91 ca 03 lds r24, 0x03CA
a644: 85 ff sbrs r24, 5
a646: 04 c0 rjmp .+8 ; 0xa650 <MotorRegler+0x3644>
a648: 80 91 58 05 lds r24, 0x0558
a64c: 90 e0 ldi r25, 0x00 ; 0
a64e: 03 c0 rjmp .+6 ; 0xa656 <MotorRegler+0x364a>
a650: 80 91 4c 05 lds r24, 0x054C
a654: 90 e0 ldi r25, 0x00 ; 0
LIMIT_MIN_MAX(FilterHCGas, min * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN)
a656: 88 0f add r24, r24
a658: 99 1f adc r25, r25
a65a: 88 0f add r24, r24
a65c: 99 1f adc r25, r25
a65e: 82 17 cp r24, r18
a660: 93 07 cpc r25, r19
a662: 2c f0 brlt .+10 ; 0xa66e <MotorRegler+0x3662>
a664: 90 93 7c 03 sts 0x037C, r25
a668: 80 93 7b 03 sts 0x037B, r24
a66c: 0f c0 rjmp .+30 ; 0xa68c <MotorRegler+0x3680>
a66e: 80 91 64 06 lds r24, 0x0664
a672: 90 e0 ldi r25, 0x00 ; 0
a674: 44 97 sbiw r24, 0x14 ; 20
a676: 88 0f add r24, r24
a678: 99 1f adc r25, r25
a67a: 88 0f add r24, r24
a67c: 99 1f adc r25, r25
a67e: 28 17 cp r18, r24
a680: 39 07 cpc r19, r25
a682: 24 f0 brlt .+8 ; 0xa68c <MotorRegler+0x3680>
a684: 90 93 7c 03 sts 0x037C, r25
a688: 80 93 7b 03 sts 0x037B, r24
// set GasMischanteil to HeightControlGasFilter
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)
a68c: 80 91 40 06 lds r24, 0x0640
a690: 80 ff sbrs r24, 0
a692: 10 c0 rjmp .+32 ; 0xa6b4 <MotorRegler+0x36a8>
{ // old version
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas
a694: 80 91 7b 03 lds r24, 0x037B
a698: 90 91 7c 03 lds r25, 0x037C
a69c: 82 15 cp r24, r2
a69e: 93 05 cpc r25, r3
a6a0: 24 f0 brlt .+8 ; 0xa6aa <MotorRegler+0x369e>
a6a2: 30 92 7c 03 sts 0x037C, r3
a6a6: 20 92 7b 03 sts 0x037B, r2
GasMischanteil = FilterHCGas;
a6aa: 20 90 7b 03 lds r2, 0x037B
a6ae: 30 90 7c 03 lds r3, 0x037C
a6b2: 15 c0 rjmp .+42 ; 0xa6de <MotorRegler+0x36d2>
}
else GasMischanteil = FilterHCGas;
a6b4: 20 90 7b 03 lds r2, 0x037B
a6b8: 30 90 7c 03 lds r3, 0x037C
a6bc: 10 c0 rjmp .+32 ; 0xa6de <MotorRegler+0x36d2>
}
}// EOF height control active
else // HC not active
{
//update hoover gas stick value when HC is not active
CalcStickGasHover();
a6be: 0e 94 c4 37 call 0x6f88 ; 0x6f88 <CalcStickGasHover>
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning;
}
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint;
LIMIT_MIN_MAX(StickGasHover, 70, 175); // reserve some range for trim up and down
*/
FilterHCGas = GasMischanteil;
a6c2: 30 92 7c 03 sts 0x037C, r3
a6c6: 20 92 7b 03 sts 0x037B, r2
// set both flags to indicate no vario mode
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
a6ca: 80 91 cb 03 lds r24, 0x03CB
a6ce: 80 6c ori r24, 0xC0 ; 192
a6d0: 80 93 cb 03 sts 0x03CB, r24
FC_StatusFlags2 &= ~FC_STATUS2_ALTITUDE_CONTROL;
a6d4: 80 91 ca 03 lds r24, 0x03CA
a6d8: 8d 7f andi r24, 0xFD ; 253
a6da: 80 93 ca 03 sts 0x03CA, r24
}
// Hover gas estimation by averaging gas control output on small z-velocities
// this is done only if height contol option is selected in global config and aircraft is flying
if((FC_StatusFlags & FC_STATUS_FLY))// && !(FC_SatusFlags & FC_STATUS_EMERGENCY_LANDING))
a6de: 80 91 cb 03 lds r24, 0x03CB
a6e2: 81 ff sbrs r24, 1
a6e4: 35 c1 rjmp .+618 ; 0xa950 <MotorRegler+0x3944>
{
//if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(GasMischanteil); // init estimation
if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(HoverGas); // 0.90f: geändert
a6e6: 80 91 77 03 lds r24, 0x0377
a6ea: 90 91 78 03 lds r25, 0x0378
a6ee: a0 91 79 03 lds r26, 0x0379
a6f2: b0 91 7a 03 lds r27, 0x037A
a6f6: 89 2b or r24, r25
a6f8: 8a 2b or r24, r26
a6fa: 8b 2b or r24, r27
a6fc: 21 f0 breq .+8 ; 0xa706 <MotorRegler+0x36fa>
a6fe: 80 91 02 04 lds r24, 0x0402
a702: 81 30 cpi r24, 0x01 ; 1
a704: 01 f5 brne .+64 ; 0xa746 <MotorRegler+0x373a>
a706: 80 91 e8 03 lds r24, 0x03E8
a70a: 90 91 e9 03 lds r25, 0x03E9
a70e: aa 27 eor r26, r26
a710: 97 fd sbrc r25, 7
a712: a0 95 com r26
a714: ba 2f mov r27, r26
a716: 07 2e mov r0, r23
a718: 7e e0 ldi r23, 0x0E ; 14
a71a: 88 0f add r24, r24
a71c: 99 1f adc r25, r25
a71e: aa 1f adc r26, r26
a720: bb 1f adc r27, r27
a722: 7a 95 dec r23
a724: d1 f7 brne .-12 ; 0xa71a <MotorRegler+0x370e>
a726: 70 2d mov r23, r0
a728: 80 93 77 03 sts 0x0377, r24
a72c: 90 93 78 03 sts 0x0378, r25
a730: a0 93 79 03 sts 0x0379, r26
a734: b0 93 7a 03 sts 0x037A, r27
if(StartTrigger == 1) StartTrigger = 2;
a738: 80 91 02 04 lds r24, 0x0402
a73c: 81 30 cpi r24, 0x01 ; 1
a73e: 19 f4 brne .+6 ; 0xa746 <MotorRegler+0x373a>
a740: 82 e0 ldi r24, 0x02 ; 2
a742: 80 93 02 04 sts 0x0402, r24
tmp_long2 = (int32_t)GasMischanteil; // take current thrust
tmp_long2 *= CosAttitude; // apply attitude projection
a746: a0 91 2d 06 lds r26, 0x062D
a74a: b0 91 2e 06 lds r27, 0x062E
a74e: 91 01 movw r18, r2
a750: 0e 94 ad b1 call 0x1635a ; 0x1635a <__mulhisi3>
tmp_long2 /= 8192;
a754: 8b 01 movw r16, r22
a756: 9c 01 movw r18, r24
a758: 99 23 and r25, r25
a75a: 24 f4 brge .+8 ; 0xa764 <MotorRegler+0x3758>
a75c: 01 50 subi r16, 0x01 ; 1
a75e: 10 4e sbci r17, 0xE0 ; 224
a760: 2f 4f sbci r18, 0xFF ; 255
a762: 3f 4f sbci r19, 0xFF ; 255
a764: d9 01 movw r26, r18
a766: c8 01 movw r24, r16
a768: 07 2e mov r0, r23
a76a: 7d e0 ldi r23, 0x0D ; 13
a76c: b5 95 asr r27
a76e: a7 95 ror r26
a770: 97 95 ror r25
a772: 87 95 ror r24
a774: 7a 95 dec r23
a776: d1 f7 brne .-12 ; 0xa76c <MotorRegler+0x3760>
a778: 70 2d mov r23, r0
a77a: 80 93 7d 03 sts 0x037D, r24
a77e: 90 93 7e 03 sts 0x037E, r25
a782: a0 93 7f 03 sts 0x037F, r26
a786: b0 93 80 03 sts 0x0380, r27
// average vertical projected thrust
if(modell_fliegt < 4000) // the first 8 seconds
a78a: 20 91 cc 03 lds r18, 0x03CC
a78e: 30 91 cd 03 lds r19, 0x03CD
a792: 20 3a cpi r18, 0xA0 ; 160
a794: 4f e0 ldi r20, 0x0F ; 15
a796: 34 07 cpc r19, r20
a798: a8 f5 brcc .+106 ; 0xa804 <MotorRegler+0x37f8>
{ // reduce the time constant of averaging by factor of 4 to get much faster a stable value
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/16L);
a79a: 40 91 77 03 lds r20, 0x0377
a79e: 50 91 78 03 lds r21, 0x0378
a7a2: 60 91 79 03 lds r22, 0x0379
a7a6: 70 91 7a 03 lds r23, 0x037A
a7aa: 2a 01 movw r4, r20
a7ac: 3b 01 movw r6, r22
a7ae: 03 2e mov r0, r19
a7b0: 3a e0 ldi r19, 0x0A ; 10
a7b2: 76 94 lsr r7
a7b4: 67 94 ror r6
a7b6: 57 94 ror r5
a7b8: 47 94 ror r4
a7ba: 3a 95 dec r19
a7bc: d1 f7 brne .-12 ; 0xa7b2 <MotorRegler+0x37a6>
a7be: 30 2d mov r19, r0
a7c0: 44 19 sub r20, r4
a7c2: 55 09 sbc r21, r5
a7c4: 66 09 sbc r22, r6
a7c6: 77 09 sbc r23, r7
HoverGasFilter += 16L * tmp_long2;
a7c8: 2c 01 movw r4, r24
a7ca: 3d 01 movw r6, r26
a7cc: 44 0c add r4, r4
a7ce: 55 1c adc r5, r5
a7d0: 66 1c adc r6, r6
a7d2: 77 1c adc r7, r7
a7d4: 44 0c add r4, r4
a7d6: 55 1c adc r5, r5
a7d8: 66 1c adc r6, r6
a7da: 77 1c adc r7, r7
a7dc: 44 0c add r4, r4
a7de: 55 1c adc r5, r5
a7e0: 66 1c adc r6, r6
a7e2: 77 1c adc r7, r7
a7e4: 44 0c add r4, r4
a7e6: 55 1c adc r5, r5
a7e8: 66 1c adc r6, r6
a7ea: 77 1c adc r7, r7
a7ec: 44 0d add r20, r4
a7ee: 55 1d adc r21, r5
a7f0: 66 1d adc r22, r6
a7f2: 77 1d adc r23, r7
a7f4: 40 93 77 03 sts 0x0377, r20
a7f8: 50 93 78 03 sts 0x0378, r21
a7fc: 60 93 79 03 sts 0x0379, r22
a800: 70 93 7a 03 sts 0x037A, r23
}
if(modell_fliegt < 8000) // the first 16 seconds
a804: 20 34 cpi r18, 0x40 ; 64
a806: 3f 41 sbci r19, 0x1F ; 31
a808: 60 f5 brcc .+88 ; 0xa862 <MotorRegler+0x3856>
{ // reduce the time constant of averaging by factor of 2 to get much faster a stable value
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/4L);
a80a: 40 91 77 03 lds r20, 0x0377
a80e: 50 91 78 03 lds r21, 0x0378
a812: 60 91 79 03 lds r22, 0x0379
a816: 70 91 7a 03 lds r23, 0x037A
a81a: 8a 01 movw r16, r20
a81c: 9b 01 movw r18, r22
a81e: 0f 2e mov r0, r31
a820: fc e0 ldi r31, 0x0C ; 12
a822: 36 95 lsr r19
a824: 27 95 ror r18
a826: 17 95 ror r17
a828: 07 95 ror r16
a82a: fa 95 dec r31
a82c: d1 f7 brne .-12 ; 0xa822 <MotorRegler+0x3816>
a82e: f0 2d mov r31, r0
a830: 40 1b sub r20, r16
a832: 51 0b sbc r21, r17
a834: 62 0b sbc r22, r18
a836: 73 0b sbc r23, r19
HoverGasFilter += 4L * tmp_long2;
a838: 88 0f add r24, r24
a83a: 99 1f adc r25, r25
a83c: aa 1f adc r26, r26
a83e: bb 1f adc r27, r27
a840: 88 0f add r24, r24
a842: 99 1f adc r25, r25
a844: aa 1f adc r26, r26
a846: bb 1f adc r27, r27
a848: 84 0f add r24, r20
a84a: 95 1f adc r25, r21
a84c: a6 1f adc r26, r22
a84e: b7 1f adc r27, r23
a850: 80 93 77 03 sts 0x0377, r24
a854: 90 93 78 03 sts 0x0378, r25
a858: a0 93 79 03 sts 0x0379, r26
a85c: b0 93 7a 03 sts 0x037A, r27
a860: 41 c0 rjmp .+130 ; 0xa8e4 <MotorRegler+0x38d8>
}
else //later
if(abs(VarioMeter) < 100 && abs(HoehenWertF - SollHoehe) < 256) // only on small vertical speed & difference is small (only descending)
a862: 20 91 54 03 lds r18, 0x0354
a866: 30 91 55 03 lds r19, 0x0355
a86a: 33 23 and r19, r19
a86c: 1c f4 brge .+6 ; 0xa874 <MotorRegler+0x3868>
a86e: 31 95 neg r19
a870: 21 95 neg r18
a872: 31 09 sbc r19, r1
a874: 24 36 cpi r18, 0x64 ; 100
a876: 31 05 cpc r19, r1
a878: ac f5 brge .+106 ; 0xa8e4 <MotorRegler+0x38d8>
a87a: 20 91 4a 03 lds r18, 0x034A
a87e: 30 91 4b 03 lds r19, 0x034B
a882: 40 91 fa 03 lds r20, 0x03FA
a886: 50 91 fb 03 lds r21, 0x03FB
a88a: 24 1b sub r18, r20
a88c: 35 0b sbc r19, r21
a88e: 21 30 cpi r18, 0x01 ; 1
a890: 6f ef ldi r22, 0xFF ; 255
a892: 36 07 cpc r19, r22
a894: 3c f1 brlt .+78 ; 0xa8e4 <MotorRegler+0x38d8>
a896: 2f 3f cpi r18, 0xFF ; 255
a898: 31 05 cpc r19, r1
a89a: 09 f0 breq .+2 ; 0xa89e <MotorRegler+0x3892>
a89c: 1c f5 brge .+70 ; 0xa8e4 <MotorRegler+0x38d8>
{
HoverGasFilter -= HoverGasFilter/HOVER_GAS_AVERAGE;
a89e: 40 91 77 03 lds r20, 0x0377
a8a2: 50 91 78 03 lds r21, 0x0378
a8a6: 60 91 79 03 lds r22, 0x0379
a8aa: 70 91 7a 03 lds r23, 0x037A
a8ae: 8a 01 movw r16, r20
a8b0: 9b 01 movw r18, r22
a8b2: 0f 2e mov r0, r31
a8b4: fe e0 ldi r31, 0x0E ; 14
a8b6: 36 95 lsr r19
a8b8: 27 95 ror r18
a8ba: 17 95 ror r17
a8bc: 07 95 ror r16
a8be: fa 95 dec r31
a8c0: d1 f7 brne .-12 ; 0xa8b6 <MotorRegler+0x38aa>
a8c2: f0 2d mov r31, r0
a8c4: 40 1b sub r20, r16
a8c6: 51 0b sbc r21, r17
a8c8: 62 0b sbc r22, r18
a8ca: 73 0b sbc r23, r19
HoverGasFilter += tmp_long2;
a8cc: 84 0f add r24, r20
a8ce: 95 1f adc r25, r21
a8d0: a6 1f adc r26, r22
a8d2: b7 1f adc r27, r23
a8d4: 80 93 77 03 sts 0x0377, r24
a8d8: 90 93 78 03 sts 0x0378, r25
a8dc: a0 93 79 03 sts 0x0379, r26
a8e0: b0 93 7a 03 sts 0x037A, r27
}
HoverGas = (int16_t)(HoverGasFilter/HOVER_GAS_AVERAGE);
a8e4: 00 91 77 03 lds r16, 0x0377
a8e8: 10 91 78 03 lds r17, 0x0378
a8ec: 20 91 79 03 lds r18, 0x0379
a8f0: 30 91 7a 03 lds r19, 0x037A
a8f4: 0f 2e mov r0, r31
a8f6: fe e0 ldi r31, 0x0E ; 14
a8f8: 36 95 lsr r19
a8fa: 27 95 ror r18
a8fc: 17 95 ror r17
a8fe: 07 95 ror r16
a900: fa 95 dec r31
a902: d1 f7 brne .-12 ; 0xa8f8 <MotorRegler+0x38ec>
a904: f0 2d mov r31, r0
a906: c8 01 movw r24, r16
a908: 10 93 e9 03 sts 0x03E9, r17
a90c: 00 93 e8 03 sts 0x03E8, r16
if(EE_Parameter.Hoehe_HoverBand)
a910: 60 91 52 05 lds r22, 0x0552
a914: 66 23 and r22, r22
a916: 89 f0 breq .+34 ; 0xa93a <MotorRegler+0x392e>
{
int16_t band;
band = HoverGas / EE_Parameter.Hoehe_HoverBand; // the higher the parameter the smaller the range
a918: 70 e0 ldi r23, 0x00 ; 0
a91a: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
HoverGasMin = HoverGas - band;
a91e: c8 01 movw r24, r16
a920: 86 1b sub r24, r22
a922: 97 0b sbc r25, r23
a924: 90 93 17 04 sts 0x0417, r25
a928: 80 93 16 04 sts 0x0416, r24
HoverGasMax = HoverGas + band;
a92c: 06 0f add r16, r22
a92e: 17 1f adc r17, r23
a930: 10 93 3f 01 sts 0x013F, r17
a934: 00 93 3e 01 sts 0x013E, r16
a938: 1f c0 rjmp .+62 ; 0xa978 <MotorRegler+0x396c>
}
else
{ // no limit
HoverGasMin = 0;
a93a: 10 92 17 04 sts 0x0417, r1
a93e: 10 92 16 04 sts 0x0416, r1
HoverGasMax = 1023;
a942: 8f ef ldi r24, 0xFF ; 255
a944: 93 e0 ldi r25, 0x03 ; 3
a946: 90 93 3f 01 sts 0x013F, r25
a94a: 80 93 3e 01 sts 0x013E, r24
a94e: 14 c0 rjmp .+40 ; 0xa978 <MotorRegler+0x396c>
}
}
else
{
StartTrigger = 0;
a950: 10 92 02 04 sts 0x0402, r1
HoverGasFilter = 0;
a954: 10 92 77 03 sts 0x0377, r1
a958: 10 92 78 03 sts 0x0378, r1
a95c: 10 92 79 03 sts 0x0379, r1
a960: 10 92 7a 03 sts 0x037A, r1
HoverGas = 0;
a964: 10 92 e9 03 sts 0x03E9, r1
a968: 10 92 e8 03 sts 0x03E8, r1
a96c: 05 c0 rjmp .+10 ; 0xa978 <MotorRegler+0x396c>
}
}// EOF Parameter_GlobalConfig & CFG_HEIGHT_CONTROL
else
{
// set undefined state to indicate vario off
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
a96e: 80 91 cb 03 lds r24, 0x03CB
a972: 80 6c ori r24, 0xC0 ; 192
a974: 80 93 cb 03 sts 0x03CB, r24
} // EOF no height control
// Limits the maximum gas in case of "Out of Range emergency landing"
if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING)
a978: 80 91 b7 04 lds r24, 0x04B7
a97c: 81 ff sbrs r24, 1
a97e: 37 c0 rjmp .+110 ; 0xa9ee <MotorRegler+0x39e2>
{
if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN;
a980: 80 91 c7 03 lds r24, 0x03C7
a984: 90 91 c8 03 lds r25, 0x03C8
a988: 91 01 movw r18, r2
a98a: 33 20 and r3, r3
a98c: 14 f4 brge .+4 ; 0xa992 <MotorRegler+0x3986>
a98e: 2d 5f subi r18, 0xFD ; 253
a990: 3f 4f sbci r19, 0xFF ; 255
a992: 35 95 asr r19
a994: 27 95 ror r18
a996: 35 95 asr r19
a998: 27 95 ror r18
a99a: 82 17 cp r24, r18
a99c: 93 07 cpc r25, r19
a99e: 58 f4 brcc .+22 ; 0xa9b6 <MotorRegler+0x39aa>
a9a0: 20 91 e8 03 lds r18, 0x03E8
a9a4: 30 91 e9 03 lds r19, 0x03E9
a9a8: 23 2b or r18, r19
a9aa: 29 f0 breq .+10 ; 0xa9b6 <MotorRegler+0x39aa>
a9ac: 1c 01 movw r2, r24
a9ae: 22 0c add r2, r2
a9b0: 33 1c adc r3, r3
a9b2: 22 0c add r2, r2
a9b4: 33 1c adc r3, r3
SollHoehe = HoehenWertF; // update setpoint to current heigth
a9b6: 80 91 4a 03 lds r24, 0x034A
a9ba: 90 91 4b 03 lds r25, 0x034B
a9be: a0 91 4c 03 lds r26, 0x034C
a9c2: b0 91 4d 03 lds r27, 0x034D
a9c6: 80 93 fa 03 sts 0x03FA, r24
a9ca: 90 93 fb 03 sts 0x03FB, r25
a9ce: a0 93 fc 03 sts 0x03FC, r26
a9d2: b0 93 fd 03 sts 0x03FD, r27
beeptime = 15000;
a9d6: 88 e9 ldi r24, 0x98 ; 152
a9d8: 9a e3 ldi r25, 0x3A ; 58
a9da: 90 93 ce 04 sts 0x04CE, r25
a9de: 80 93 cd 04 sts 0x04CD, r24
BeepMuster = 0x0E00;
a9e2: 80 e0 ldi r24, 0x00 ; 0
a9e4: 9e e0 ldi r25, 0x0E ; 14
a9e6: 90 93 aa 02 sts 0x02AA, r25
a9ea: 80 93 a9 02 sts 0x02A9, r24
}
// limit gas to parameter setting
LIMIT_MIN(GasMischanteil, (MIN_GAS + 10) * STICK_GAIN);
a9ee: 80 91 2c 06 lds r24, 0x062C
a9f2: 90 e0 ldi r25, 0x00 ; 0
a9f4: 0a 96 adiw r24, 0x0a ; 10
a9f6: 88 0f add r24, r24
a9f8: 99 1f adc r25, r25
a9fa: 88 0f add r24, r24
a9fc: 99 1f adc r25, r25
a9fe: 28 16 cp r2, r24
aa00: 39 06 cpc r3, r25
aa02: 0c f4 brge .+2 ; 0xaa06 <MotorRegler+0x39fa>
aa04: 1c 01 movw r2, r24
if(GasMischanteil > (MAX_GAS - 20) * STICK_GAIN) GasMischanteil = (MAX_GAS - 20) * STICK_GAIN;
aa06: 20 91 64 06 lds r18, 0x0664
aa0a: 30 e0 ldi r19, 0x00 ; 0
aa0c: 24 51 subi r18, 0x14 ; 20
aa0e: 31 09 sbc r19, r1
aa10: 22 0f add r18, r18
aa12: 33 1f adc r19, r19
aa14: 22 0f add r18, r18
aa16: 33 1f adc r19, r19
aa18: 3e 82 std Y+6, r3 ; 0x06
aa1a: 2d 82 std Y+5, r2 ; 0x05
aa1c: 22 15 cp r18, r2
aa1e: 33 05 cpc r19, r3
aa20: 14 f4 brge .+4 ; 0xaa26 <MotorRegler+0x3a1a>
aa22: 3e 83 std Y+6, r19 ; 0x06
aa24: 2d 83 std Y+5, r18 ; 0x05
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// all BL-Ctrl connected?
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(MissingMotor || Capacity.MinOfMaxPWM < 254 || NC_ErrorCode) // wait until all BL-Ctrls started and no Errors
aa26: 20 91 df 04 lds r18, 0x04DF
aa2a: 21 11 cpse r18, r1
aa2c: 08 c0 rjmp .+16 ; 0xaa3e <MotorRegler+0x3a32>
aa2e: 20 91 1b 05 lds r18, 0x051B
aa32: 2e 3f cpi r18, 0xFE ; 254
aa34: 20 f0 brcs .+8 ; 0xaa3e <MotorRegler+0x3a32>
aa36: 20 91 bb 04 lds r18, 0x04BB
aa3a: 22 23 and r18, r18
aa3c: 01 f1 breq .+64 ; 0xaa7e <MotorRegler+0x3a72>
if(modell_fliegt > 1 && modell_fliegt < 50 && GasMischanteil > 0) // only during start-phase
aa3e: 20 91 cc 03 lds r18, 0x03CC
aa42: 30 91 cd 03 lds r19, 0x03CD
aa46: 22 50 subi r18, 0x02 ; 2
aa48: 31 09 sbc r19, r1
aa4a: 20 33 cpi r18, 0x30 ; 48
aa4c: 31 05 cpc r19, r1
aa4e: b8 f4 brcc .+46 ; 0xaa7e <MotorRegler+0x3a72>
aa50: 8d 80 ldd r8, Y+5 ; 0x05
aa52: 9e 80 ldd r9, Y+6 ; 0x06
aa54: 18 14 cp r1, r8
aa56: 19 04 cpc r1, r9
aa58: 94 f4 brge .+36 ; 0xaa7e <MotorRegler+0x3a72>
{
modell_fliegt = 1;
aa5a: 21 e0 ldi r18, 0x01 ; 1
aa5c: 30 e0 ldi r19, 0x00 ; 0
aa5e: 30 93 cd 03 sts 0x03CD, r19
aa62: 20 93 cc 03 sts 0x03CC, r18
GasMischanteil = (MIN_GAS + 10) * STICK_GAIN;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(Capacity.MinOfMaxPWM < 40) SpeakHoTT = SPEAK_ERR_MOTOR;
aa66: 20 91 1b 05 lds r18, 0x051B
aa6a: 28 32 cpi r18, 0x28 ; 40
aa6c: 30 f4 brcc .+12 ; 0xaa7a <MotorRegler+0x3a6e>
aa6e: 29 e0 ldi r18, 0x09 ; 9
aa70: 20 93 57 01 sts 0x0157, r18
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(MissingMotor || Capacity.MinOfMaxPWM < 254 || NC_ErrorCode) // wait until all BL-Ctrls started and no Errors
if(modell_fliegt > 1 && modell_fliegt < 50 && GasMischanteil > 0) // only during start-phase
{
modell_fliegt = 1;
GasMischanteil = (MIN_GAS + 10) * STICK_GAIN;
aa74: 9e 83 std Y+6, r25 ; 0x06
aa76: 8d 83 std Y+5, r24 ; 0x05
aa78: 02 c0 rjmp .+4 ; 0xaa7e <MotorRegler+0x3a72>
aa7a: 9e 83 std Y+6, r25 ; 0x06
aa7c: 8d 83 std Y+5, r24 ; 0x05
#endif
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// send SPI pending bytes
if(BytegapSPI == 0) SPI_TransmitByte();
aa7e: 80 91 cc 04 lds r24, 0x04CC
aa82: 81 11 cpse r24, r1
aa84: 02 c0 rjmp .+4 ; 0xaa8a <MotorRegler+0x3a7e>
aa86: 0e 94 de 95 call 0x12bbc ; 0x12bbc <SPI_TransmitByte>
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Mischer und PI-Regler
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DebugOut.Analog[7] = GasMischanteil; // achtung: Muss auf [7] bleiben wegen SPI.C
aa8a: 0d 81 ldd r16, Y+5 ; 0x05
aa8c: 1e 81 ldd r17, Y+6 ; 0x06
aa8e: 10 93 57 0c sts 0x0C57, r17
aa92: 00 93 56 0c sts 0x0C56, r16
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gier-Anteil
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GierMischanteil = MesswertGier - sollGier * STICK_GAIN; // Regler für Gier
aa96: 20 91 9e 03 lds r18, 0x039E
aa9a: 30 91 9f 03 lds r19, 0x039F
aa9e: 22 0f add r18, r18
aaa0: 33 1f adc r19, r19
aaa2: 22 0f add r18, r18
aaa4: 33 1f adc r19, r19
aaa6: 80 91 67 06 lds r24, 0x0667
aaaa: 90 91 68 06 lds r25, 0x0668
aaae: 82 1b sub r24, r18
aab0: 93 0b sbc r25, r19
#define MIN_GIERGAS (40*STICK_GAIN) // unter diesem Gaswert trotzdem Gieren
if(GasMischanteil > MIN_GIERGAS)
aab2: 01 3a cpi r16, 0xA1 ; 161
aab4: 11 05 cpc r17, r1
aab6: c4 f0 brlt .+48 ; 0xaae8 <MotorRegler+0x3adc>
{
if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2;
aab8: 98 01 movw r18, r16
aaba: 11 23 and r17, r17
aabc: 14 f4 brge .+4 ; 0xaac2 <MotorRegler+0x3ab6>
aabe: 2f 5f subi r18, 0xFF ; 255
aac0: 3f 4f sbci r19, 0xFF ; 255
aac2: 35 95 asr r19
aac4: 27 95 ror r18
aac6: 52 2f mov r21, r18
aac8: 43 2f mov r20, r19
aaca: 82 17 cp r24, r18
aacc: 93 07 cpc r25, r19
aace: 14 f4 brge .+4 ; 0xaad4 <MotorRegler+0x3ac8>
aad0: 58 2f mov r21, r24
aad2: 49 2f mov r20, r25
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2);
aad4: 31 95 neg r19
aad6: 21 95 neg r18
aad8: 31 09 sbc r19, r1
aada: 85 2f mov r24, r21
aadc: 94 2f mov r25, r20
aade: 82 17 cp r24, r18
aae0: 93 07 cpc r25, r19
aae2: 6c f4 brge .+26 ; 0xaafe <MotorRegler+0x3af2>
aae4: c9 01 movw r24, r18
aae6: 0b c0 rjmp .+22 ; 0xaafe <MotorRegler+0x3af2>
aae8: 81 35 cpi r24, 0x51 ; 81
aaea: 91 05 cpc r25, r1
aaec: 14 f0 brlt .+4 ; 0xaaf2 <MotorRegler+0x3ae6>
aaee: 80 e5 ldi r24, 0x50 ; 80
aaf0: 90 e0 ldi r25, 0x00 ; 0
aaf2: 80 3b cpi r24, 0xB0 ; 176
aaf4: 1f ef ldi r17, 0xFF ; 255
aaf6: 91 07 cpc r25, r17
aaf8: 14 f4 brge .+4 ; 0xaafe <MotorRegler+0x3af2>
aafa: 80 eb ldi r24, 0xB0 ; 176
aafc: 9f ef ldi r25, 0xFF ; 255
else
{
if(GierMischanteil > (MIN_GIERGAS / 2)) GierMischanteil = MIN_GIERGAS / 2;
if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2);
}
tmp_int = MAX_GAS*STICK_GAIN;
aafe: 20 91 64 06 lds r18, 0x0664
ab02: 30 e0 ldi r19, 0x00 ; 0
ab04: 22 0f add r18, r18
ab06: 33 1f adc r19, r19
ab08: 22 0f add r18, r18
ab0a: 33 1f adc r19, r19
if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil));
ab0c: a9 01 movw r20, r18
ab0e: 8d 80 ldd r8, Y+5 ; 0x05
ab10: 9e 80 ldd r9, Y+6 ; 0x06
ab12: 48 19 sub r20, r8
ab14: 59 09 sbc r21, r9
ab16: 48 17 cp r20, r24
ab18: 59 07 cpc r21, r25
ab1a: 0c f4 brge .+2 ; 0xab1e <MotorRegler+0x3b12>
ab1c: ca 01 movw r24, r20
if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil));
ab1e: 0d 81 ldd r16, Y+5 ; 0x05
ab20: 1e 81 ldd r17, Y+6 ; 0x06
ab22: 02 1b sub r16, r18
ab24: 13 0b sbc r17, r19
ab26: 9a 87 std Y+10, r25 ; 0x0a
ab28: 89 87 std Y+9, r24 ; 0x09
ab2a: 80 17 cp r24, r16
ab2c: 91 07 cpc r25, r17
ab2e: 14 f4 brge .+4 ; 0xab34 <MotorRegler+0x3b28>
ab30: 1a 87 std Y+10, r17 ; 0x0a
ab32: 09 87 std Y+9, r16 ; 0x09
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Nick-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffNick = MesswertNick - StickNick; // Differenz bestimmen
ab34: 80 91 14 04 lds r24, 0x0414
ab38: 90 91 15 04 lds r25, 0x0415
ab3c: 20 91 27 06 lds r18, 0x0627
ab40: 30 91 28 06 lds r19, 0x0628
ab44: 28 1b sub r18, r24
ab46: 39 0b sbc r19, r25
ab48: 30 93 33 06 sts 0x0633, r19
ab4c: 20 93 32 06 sts 0x0632, r18
if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung
ab50: 00 91 42 06 lds r16, 0x0642
ab54: 00 23 and r16, r16
ab56: e9 f0 breq .+58 ; 0xab92 <MotorRegler+0x3b86>
ab58: a7 01 movw r20, r14
ab5a: 48 1b sub r20, r24
ab5c: 59 0b sbc r21, r25
ab5e: ca 01 movw r24, r20
ab60: aa 27 eor r26, r26
ab62: 97 fd sbrc r25, 7
ab64: a0 95 com r26
ab66: ba 2f mov r27, r26
ab68: 40 91 26 04 lds r20, 0x0426
ab6c: 50 91 27 04 lds r21, 0x0427
ab70: 60 91 28 04 lds r22, 0x0428
ab74: 70 91 29 04 lds r23, 0x0429
ab78: 84 0f add r24, r20
ab7a: 95 1f adc r25, r21
ab7c: a6 1f adc r26, r22
ab7e: b7 1f adc r27, r23
ab80: 80 93 26 04 sts 0x0426, r24
ab84: 90 93 27 04 sts 0x0427, r25
ab88: a0 93 28 04 sts 0x0428, r26
ab8c: b0 93 29 04 sts 0x0429, r27
ab90: 19 c0 rjmp .+50 ; 0xabc4 <MotorRegler+0x3bb8>
else SummeNick += DiffNick; // I-Anteil bei HH
ab92: 40 91 26 04 lds r20, 0x0426
ab96: 50 91 27 04 lds r21, 0x0427
ab9a: 60 91 28 04 lds r22, 0x0428
ab9e: 70 91 29 04 lds r23, 0x0429
aba2: c9 01 movw r24, r18
aba4: aa 27 eor r26, r26
aba6: 97 fd sbrc r25, 7
aba8: a0 95 com r26
abaa: ba 2f mov r27, r26
abac: 84 0f add r24, r20
abae: 95 1f adc r25, r21
abb0: a6 1f adc r26, r22
abb2: b7 1f adc r27, r23
abb4: 80 93 26 04 sts 0x0426, r24
abb8: 90 93 27 04 sts 0x0427, r25
abbc: a0 93 28 04 sts 0x0428, r26
abc0: b0 93 29 04 sts 0x0429, r27
if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L);
abc4: 80 91 26 04 lds r24, 0x0426
abc8: 90 91 27 04 lds r25, 0x0427
abcc: a0 91 28 04 lds r26, 0x0428
abd0: b0 91 29 04 lds r27, 0x0429
abd4: 81 30 cpi r24, 0x01 ; 1
abd6: 5a ef ldi r21, 0xFA ; 250
abd8: 95 07 cpc r25, r21
abda: a1 05 cpc r26, r1
abdc: b1 05 cpc r27, r1
abde: 6c f0 brlt .+26 ; 0xabfa <MotorRegler+0x3bee>
abe0: 80 e0 ldi r24, 0x00 ; 0
abe2: 9a ef ldi r25, 0xFA ; 250
abe4: a0 e0 ldi r26, 0x00 ; 0
abe6: b0 e0 ldi r27, 0x00 ; 0
abe8: 80 93 26 04 sts 0x0426, r24
abec: 90 93 27 04 sts 0x0427, r25
abf0: a0 93 28 04 sts 0x0428, r26
abf4: b0 93 29 04 sts 0x0429, r27
abf8: 11 c0 rjmp .+34 ; 0xac1c <MotorRegler+0x3c10>
if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN);
abfa: 81 15 cp r24, r1
abfc: 96 40 sbci r25, 0x06 ; 6
abfe: af 4f sbci r26, 0xFF ; 255
ac00: bf 4f sbci r27, 0xFF ; 255
ac02: 64 f4 brge .+24 ; 0xac1c <MotorRegler+0x3c10>
ac04: 80 e0 ldi r24, 0x00 ; 0
ac06: 96 e0 ldi r25, 0x06 ; 6
ac08: af ef ldi r26, 0xFF ; 255
ac0a: bf ef ldi r27, 0xFF ; 255
ac0c: 80 93 26 04 sts 0x0426, r24
ac10: 90 93 27 04 sts 0x0427, r25
ac14: a0 93 28 04 sts 0x0428, r26
ac18: b0 93 29 04 sts 0x0429, r27
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8; // PI-Regler für Nick
ac1c: 10 91 61 05 lds r17, 0x0561
ac20: 19 30 cpi r17, 0x09 ; 9
ac22: 88 f4 brcc .+34 ; 0xac46 <MotorRegler+0x3c3a>
ac24: 12 9f mul r17, r18
ac26: 70 01 movw r14, r0
ac28: 13 9f mul r17, r19
ac2a: f0 0c add r15, r0
ac2c: 11 24 eor r1, r1
ac2e: ff 20 and r15, r15
ac30: 1c f4 brge .+6 ; 0xac38 <MotorRegler+0x3c2c>
ac32: 77 e0 ldi r23, 0x07 ; 7
ac34: e7 0e add r14, r23
ac36: f1 1c adc r15, r1
ac38: f5 94 asr r15
ac3a: e7 94 ror r14
ac3c: f5 94 asr r15
ac3e: e7 94 ror r14
ac40: f5 94 asr r15
ac42: e7 94 ror r14
ac44: 10 c0 rjmp .+32 ; 0xac66 <MotorRegler+0x3c5a>
else pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern
ac46: 81 2f mov r24, r17
ac48: 86 95 lsr r24
ac4a: 82 9f mul r24, r18
ac4c: 70 01 movw r14, r0
ac4e: 83 9f mul r24, r19
ac50: f0 0c add r15, r0
ac52: 11 24 eor r1, r1
ac54: ff 20 and r15, r15
ac56: 1c f4 brge .+6 ; 0xac5e <MotorRegler+0x3c52>
ac58: 83 e0 ldi r24, 0x03 ; 3
ac5a: e8 0e add r14, r24
ac5c: f1 1c adc r15, r1
ac5e: f5 94 asr r15
ac60: e7 94 ror r14
ac62: f5 94 asr r15
ac64: e7 94 ror r14
pd_ergebnis_nick += SummeNick / Ki;
ac66: 40 90 3b 01 lds r4, 0x013B
ac6a: 50 90 3c 01 lds r5, 0x013C
ac6e: 66 24 eor r6, r6
ac70: 57 fc sbrc r5, 7
ac72: 60 94 com r6
ac74: 76 2c mov r7, r6
ac76: 60 91 26 04 lds r22, 0x0426
ac7a: 70 91 27 04 lds r23, 0x0427
ac7e: 80 91 28 04 lds r24, 0x0428
ac82: 90 91 29 04 lds r25, 0x0429
ac86: a3 01 movw r20, r6
ac88: 92 01 movw r18, r4
ac8a: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
ac8e: 17 01 movw r2, r14
ac90: 22 0e add r2, r18
ac92: 33 1e adc r3, r19
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
ac94: 20 91 27 01 lds r18, 0x0127
ac98: 30 e0 ldi r19, 0x00 ; 0
ac9a: 40 e0 ldi r20, 0x00 ; 0
ac9c: 50 e0 ldi r21, 0x00 ; 0
ac9e: 89 85 ldd r24, Y+9 ; 0x09
aca0: 9a 85 ldd r25, Y+10 ; 0x0a
aca2: 99 23 and r25, r25
aca4: 1c f4 brge .+6 ; 0xacac <MotorRegler+0x3ca0>
aca6: 91 95 neg r25
aca8: 81 95 neg r24
acaa: 91 09 sbc r25, r1
acac: dc 01 movw r26, r24
acae: 99 23 and r25, r25
acb0: 0c f4 brge .+2 ; 0xacb4 <MotorRegler+0x3ca8>
acb2: 11 96 adiw r26, 0x01 ; 1
acb4: b5 95 asr r27
acb6: a7 95 ror r26
acb8: 8d 80 ldd r8, Y+5 ; 0x05
acba: 9e 80 ldd r9, Y+6 ; 0x06
acbc: a8 0d add r26, r8
acbe: b9 1d adc r27, r9
acc0: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
acc4: 6b 01 movw r12, r22
acc6: 7c 01 movw r14, r24
acc8: 99 23 and r25, r25
acca: 2c f4 brge .+10 ; 0xacd6 <MotorRegler+0x3cca>
accc: 2f e3 ldi r18, 0x3F ; 63
acce: c2 0e add r12, r18
acd0: d1 1c adc r13, r1
acd2: e1 1c adc r14, r1
acd4: f1 1c adc r15, r1
acd6: 68 94 set
acd8: 15 f8 bld r1, 5
acda: f5 94 asr r15
acdc: e7 94 ror r14
acde: d7 94 ror r13
ace0: c7 94 ror r12
ace2: 16 94 lsr r1
ace4: d1 f7 brne .-12 ; 0xacda <MotorRegler+0x3cce>
ace6: dc 86 std Y+12, r13 ; 0x0c
ace8: cb 86 std Y+11, r12 ; 0x0b
acea: f1 01 movw r30, r2
acec: c2 14 cp r12, r2
acee: d3 04 cpc r13, r3
acf0: 0c f4 brge .+2 ; 0xacf4 <MotorRegler+0x3ce8>
acf2: f6 01 movw r30, r12
if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int;
if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int;
acf4: 22 24 eor r2, r2
acf6: 33 24 eor r3, r3
acf8: 2c 18 sub r2, r12
acfa: 3d 08 sbc r3, r13
acfc: fe 87 std Y+14, r31 ; 0x0e
acfe: ed 87 std Y+13, r30 ; 0x0d
ad00: e2 15 cp r30, r2
ad02: f3 05 cpc r31, r3
ad04: 14 f4 brge .+4 ; 0xad0a <MotorRegler+0x3cfe>
ad06: 3e 86 std Y+14, r3 ; 0x0e
ad08: 2d 86 std Y+13, r2 ; 0x0d
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Roll-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen
ad0a: 20 91 12 04 lds r18, 0x0412
ad0e: 30 91 13 04 lds r19, 0x0413
ad12: 80 91 1c 06 lds r24, 0x061C
ad16: 90 91 1d 06 lds r25, 0x061D
ad1a: 82 1b sub r24, r18
ad1c: 93 0b sbc r25, r19
ad1e: 90 93 1b 06 sts 0x061B, r25
ad22: 80 93 1a 06 sts 0x061A, r24
if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung
ad26: 00 23 and r16, r16
ad28: 21 f1 breq .+72 ; 0xad72 <MotorRegler+0x3d66>
ad2a: a2 1a sub r10, r18
ad2c: b3 0a sbc r11, r19
ad2e: 95 01 movw r18, r10
ad30: 44 27 eor r20, r20
ad32: 37 fd sbrc r19, 7
ad34: 40 95 com r20
ad36: 54 2f mov r21, r20
ad38: 29 8b std Y+17, r18 ; 0x11
ad3a: 3a 8b std Y+18, r19 ; 0x12
ad3c: 4b 8b std Y+19, r20 ; 0x13
ad3e: 5c 8b std Y+20, r21 ; 0x14
ad40: 40 91 22 04 lds r20, 0x0422
ad44: 50 91 23 04 lds r21, 0x0423
ad48: 60 91 24 04 lds r22, 0x0424
ad4c: 70 91 25 04 lds r23, 0x0425
ad50: 89 88 ldd r8, Y+17 ; 0x11
ad52: 9a 88 ldd r9, Y+18 ; 0x12
ad54: ab 88 ldd r10, Y+19 ; 0x13
ad56: bc 88 ldd r11, Y+20 ; 0x14
ad58: 84 0e add r8, r20
ad5a: 95 1e adc r9, r21
ad5c: a6 1e adc r10, r22
ad5e: b7 1e adc r11, r23
ad60: 80 92 22 04 sts 0x0422, r8
ad64: 90 92 23 04 sts 0x0423, r9
ad68: a0 92 24 04 sts 0x0424, r10
ad6c: b0 92 25 04 sts 0x0425, r11
ad70: 21 c0 rjmp .+66 ; 0xadb4 <MotorRegler+0x3da8>
else SummeRoll += DiffRoll; // I-Anteil bei HH
ad72: 20 91 22 04 lds r18, 0x0422
ad76: 30 91 23 04 lds r19, 0x0423
ad7a: 40 91 24 04 lds r20, 0x0424
ad7e: 50 91 25 04 lds r21, 0x0425
ad82: 29 83 std Y+1, r18 ; 0x01
ad84: 3a 83 std Y+2, r19 ; 0x02
ad86: 4b 83 std Y+3, r20 ; 0x03
ad88: 5c 83 std Y+4, r21 ; 0x04
ad8a: ac 01 movw r20, r24
ad8c: 66 27 eor r22, r22
ad8e: 57 fd sbrc r21, 7
ad90: 60 95 com r22
ad92: 76 2f mov r23, r22
ad94: 89 80 ldd r8, Y+1 ; 0x01
ad96: 9a 80 ldd r9, Y+2 ; 0x02
ad98: ab 80 ldd r10, Y+3 ; 0x03
ad9a: bc 80 ldd r11, Y+4 ; 0x04
ad9c: 48 0d add r20, r8
ad9e: 59 1d adc r21, r9
ada0: 6a 1d adc r22, r10
ada2: 7b 1d adc r23, r11
ada4: 40 93 22 04 sts 0x0422, r20
ada8: 50 93 23 04 sts 0x0423, r21
adac: 60 93 24 04 sts 0x0424, r22
adb0: 70 93 25 04 sts 0x0425, r23
if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L);
adb4: 40 91 22 04 lds r20, 0x0422
adb8: 50 91 23 04 lds r21, 0x0423
adbc: 60 91 24 04 lds r22, 0x0424
adc0: 70 91 25 04 lds r23, 0x0425
adc4: 41 30 cpi r20, 0x01 ; 1
adc6: 0a ef ldi r16, 0xFA ; 250
adc8: 50 07 cpc r21, r16
adca: 61 05 cpc r22, r1
adcc: 71 05 cpc r23, r1
adce: 6c f0 brlt .+26 ; 0xadea <MotorRegler+0x3dde>
add0: 40 e0 ldi r20, 0x00 ; 0
add2: 5a ef ldi r21, 0xFA ; 250
add4: 60 e0 ldi r22, 0x00 ; 0
add6: 70 e0 ldi r23, 0x00 ; 0
add8: 40 93 22 04 sts 0x0422, r20
addc: 50 93 23 04 sts 0x0423, r21
ade0: 60 93 24 04 sts 0x0424, r22
ade4: 70 93 25 04 sts 0x0425, r23
ade8: 11 c0 rjmp .+34 ; 0xae0c <MotorRegler+0x3e00>
if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN);
adea: 41 15 cp r20, r1
adec: 56 40 sbci r21, 0x06 ; 6
adee: 6f 4f sbci r22, 0xFF ; 255
adf0: 7f 4f sbci r23, 0xFF ; 255
adf2: 64 f4 brge .+24 ; 0xae0c <MotorRegler+0x3e00>
adf4: 40 e0 ldi r20, 0x00 ; 0
adf6: 56 e0 ldi r21, 0x06 ; 6
adf8: 6f ef ldi r22, 0xFF ; 255
adfa: 7f ef ldi r23, 0xFF ; 255
adfc: 40 93 22 04 sts 0x0422, r20
ae00: 50 93 23 04 sts 0x0423, r21
ae04: 60 93 24 04 sts 0x0424, r22
ae08: 70 93 25 04 sts 0x0425, r23
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; // PI-Regler für Roll
ae0c: 19 30 cpi r17, 0x09 ; 9
ae0e: 88 f4 brcc .+34 ; 0xae32 <MotorRegler+0x3e26>
ae10: 18 9f mul r17, r24
ae12: 50 01 movw r10, r0
ae14: 19 9f mul r17, r25
ae16: b0 0c add r11, r0
ae18: 11 24 eor r1, r1
ae1a: bb 20 and r11, r11
ae1c: 1c f4 brge .+6 ; 0xae24 <MotorRegler+0x3e18>
ae1e: 37 e0 ldi r19, 0x07 ; 7
ae20: a3 0e add r10, r19
ae22: b1 1c adc r11, r1
ae24: b5 94 asr r11
ae26: a7 94 ror r10
ae28: b5 94 asr r11
ae2a: a7 94 ror r10
ae2c: b5 94 asr r11
ae2e: a7 94 ror r10
ae30: 0f c0 rjmp .+30 ; 0xae50 <MotorRegler+0x3e44>
else pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern
ae32: 16 95 lsr r17
ae34: 18 9f mul r17, r24
ae36: 50 01 movw r10, r0
ae38: 19 9f mul r17, r25
ae3a: b0 0c add r11, r0
ae3c: 11 24 eor r1, r1
ae3e: bb 20 and r11, r11
ae40: 1c f4 brge .+6 ; 0xae48 <MotorRegler+0x3e3c>
ae42: 43 e0 ldi r20, 0x03 ; 3
ae44: a4 0e add r10, r20
ae46: b1 1c adc r11, r1
ae48: b5 94 asr r11
ae4a: a7 94 ror r10
ae4c: b5 94 asr r11
ae4e: a7 94 ror r10
pd_ergebnis_roll += SummeRoll / Ki;
ae50: 60 91 22 04 lds r22, 0x0422
ae54: 70 91 23 04 lds r23, 0x0423
ae58: 80 91 24 04 lds r24, 0x0424
ae5c: 90 91 25 04 lds r25, 0x0425
ae60: a3 01 movw r20, r6
ae62: 92 01 movw r18, r4
ae64: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
ae68: 2a 0d add r18, r10
ae6a: 3b 1d adc r19, r11
ae6c: 8b 84 ldd r8, Y+11 ; 0x0b
ae6e: 9c 84 ldd r9, Y+12 ; 0x0c
ae70: 82 16 cp r8, r18
ae72: 93 06 cpc r9, r19
ae74: 0c f4 brge .+2 ; 0xae78 <MotorRegler+0x3e6c>
ae76: 96 01 movw r18, r12
ae78: 3c 87 std Y+12, r19 ; 0x0c
ae7a: 2b 87 std Y+11, r18 ; 0x0b
ae7c: 22 15 cp r18, r2
ae7e: 33 05 cpc r19, r3
ae80: 14 f4 brge .+4 ; 0xae86 <MotorRegler+0x3e7a>
ae82: 3c 86 std Y+12, r3 ; 0x0c
ae84: 2b 86 std Y+11, r2 ; 0x0b
if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int;
if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// send SPI pending bytes
if(BytegapSPI == 0) SPI_TransmitByte();
ae86: 80 91 cc 04 lds r24, 0x04CC
ae8a: 81 11 cpse r24, r1
ae8c: 3d c1 rjmp .+634 ; 0xb108 <MotorRegler+0x40fc>
ae8e: 0e 94 de 95 call 0x12bbc ; 0x12bbc <SPI_TransmitByte>
ae92: 3a c1 rjmp .+628 ; 0xb108 <MotorRegler+0x40fc>
ae94: 9e a2 std Y+38, r9 ; 0x26
ae96: 8d a2 std Y+37, r8 ; 0x25
ae98: f4 01 movw r30, r8
ae9a: 33 97 sbiw r30, 0x03 ; 3
// Universal Mixer
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
for(i=0; i<MAX_MOTORS; i++)
{
signed int tmp_int;
if(Mixer.Motor[i][0] > 0)
ae9c: a0 81 ld r26, Z
ae9e: 1a 16 cp r1, r26
aea0: 0c f0 brlt .+2 ; 0xaea4 <MotorRegler+0x3e98>
aea2: 1d c1 rjmp .+570 ; 0xb0de <MotorRegler+0x40d2>
{
// Gas
if(Mixer.Motor[i][0] == 64) tmp_int = GasMischanteil; else tmp_int = ((long)GasMischanteil * Mixer.Motor[i][0]) / 64L;
aea4: a0 34 cpi r26, 0x40 ; 64
aea6: e1 f0 breq .+56 ; 0xaee0 <MotorRegler+0x3ed4>
aea8: bb 27 eor r27, r27
aeaa: a7 fd sbrc r26, 7
aeac: b0 95 com r27
aeae: a7 01 movw r20, r14
aeb0: 96 01 movw r18, r12
aeb2: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
aeb6: 9b 01 movw r18, r22
aeb8: ac 01 movw r20, r24
aeba: 99 23 and r25, r25
aebc: 24 f4 brge .+8 ; 0xaec6 <MotorRegler+0x3eba>
aebe: 21 5c subi r18, 0xC1 ; 193
aec0: 3f 4f sbci r19, 0xFF ; 255
aec2: 4f 4f sbci r20, 0xFF ; 255
aec4: 5f 4f sbci r21, 0xFF ; 255
aec6: ba 01 movw r22, r20
aec8: a9 01 movw r20, r18
aeca: 68 94 set
aecc: 15 f8 bld r1, 5
aece: 75 95 asr r23
aed0: 67 95 ror r22
aed2: 57 95 ror r21
aed4: 47 95 ror r20
aed6: 16 94 lsr r1
aed8: d1 f7 brne .-12 ; 0xaece <MotorRegler+0x3ec2>
aeda: 5e 83 std Y+6, r21 ; 0x06
aedc: 4d 83 std Y+5, r20 ; 0x05
aede: 04 c0 rjmp .+8 ; 0xaee8 <MotorRegler+0x3edc>
aee0: 0f 8d ldd r16, Y+31 ; 0x1f
aee2: 0d 83 std Y+5, r16 ; 0x05
aee4: e8 a1 ldd r30, Y+32 ; 0x20
aee6: ee 83 std Y+6, r30 ; 0x06
aee8: ad a1 ldd r26, Y+37 ; 0x25
aeea: be a1 ldd r27, Y+38 ; 0x26
aeec: 12 97 sbiw r26, 0x02 ; 2
// Nick
if(Mixer.Motor[i][1] == 64) tmp_int += pd_ergebnis_nick;
aeee: ac 91 ld r26, X
aef0: a0 34 cpi r26, 0x40 ; 64
aef2: 49 f4 brne .+18 ; 0xaf06 <MotorRegler+0x3efa>
aef4: ed 81 ldd r30, Y+5 ; 0x05
aef6: fe 81 ldd r31, Y+6 ; 0x06
aef8: 2d 85 ldd r18, Y+13 ; 0x0d
aefa: 3e 85 ldd r19, Y+14 ; 0x0e
aefc: e2 0f add r30, r18
aefe: f3 1f adc r31, r19
af00: fe 83 std Y+6, r31 ; 0x06
af02: ed 83 std Y+5, r30 ; 0x05
af04: 2c c0 rjmp .+88 ; 0xaf5e <MotorRegler+0x3f52>
else if(Mixer.Motor[i][1] == -64) tmp_int -= pd_ergebnis_nick;
af06: a0 3c cpi r26, 0xC0 ; 192
af08: 49 f4 brne .+18 ; 0xaf1c <MotorRegler+0x3f10>
af0a: ed 81 ldd r30, Y+5 ; 0x05
af0c: fe 81 ldd r31, Y+6 ; 0x06
af0e: 2d 85 ldd r18, Y+13 ; 0x0d
af10: 3e 85 ldd r19, Y+14 ; 0x0e
af12: e2 1b sub r30, r18
af14: f3 0b sbc r31, r19
af16: fe 83 std Y+6, r31 ; 0x06
af18: ed 83 std Y+5, r30 ; 0x05
af1a: 21 c0 rjmp .+66 ; 0xaf5e <MotorRegler+0x3f52>
else tmp_int += ((long)pd_ergebnis_nick * Mixer.Motor[i][1]) / 64L;
af1c: bb 27 eor r27, r27
af1e: a7 fd sbrc r26, 7
af20: b0 95 com r27
af22: 29 8d ldd r18, Y+25 ; 0x19
af24: 3a 8d ldd r19, Y+26 ; 0x1a
af26: 4b 8d ldd r20, Y+27 ; 0x1b
af28: 5c 8d ldd r21, Y+28 ; 0x1c
af2a: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
af2e: 9b 01 movw r18, r22
af30: ac 01 movw r20, r24
af32: 99 23 and r25, r25
af34: 24 f4 brge .+8 ; 0xaf3e <MotorRegler+0x3f32>
af36: 21 5c subi r18, 0xC1 ; 193
af38: 3f 4f sbci r19, 0xFF ; 255
af3a: 4f 4f sbci r20, 0xFF ; 255
af3c: 5f 4f sbci r21, 0xFF ; 255
af3e: ba 01 movw r22, r20
af40: a9 01 movw r20, r18
af42: 68 94 set
af44: 15 f8 bld r1, 5
af46: 75 95 asr r23
af48: 67 95 ror r22
af4a: 57 95 ror r21
af4c: 47 95 ror r20
af4e: 16 94 lsr r1
af50: d1 f7 brne .-12 ; 0xaf46 <MotorRegler+0x3f3a>
af52: ed 81 ldd r30, Y+5 ; 0x05
af54: fe 81 ldd r31, Y+6 ; 0x06
af56: e4 0f add r30, r20
af58: f5 1f adc r31, r21
af5a: fe 83 std Y+6, r31 ; 0x06
af5c: ed 83 std Y+5, r30 ; 0x05
af5e: ad a1 ldd r26, Y+37 ; 0x25
af60: be a1 ldd r27, Y+38 ; 0x26
af62: 11 97 sbiw r26, 0x01 ; 1
// Roll
if(Mixer.Motor[i][2] == 64) tmp_int += pd_ergebnis_roll;
af64: ac 91 ld r26, X
af66: a0 34 cpi r26, 0x40 ; 64
af68: 49 f4 brne .+18 ; 0xaf7c <MotorRegler+0x3f70>
af6a: ed 81 ldd r30, Y+5 ; 0x05
af6c: fe 81 ldd r31, Y+6 ; 0x06
af6e: 2b 85 ldd r18, Y+11 ; 0x0b
af70: 3c 85 ldd r19, Y+12 ; 0x0c
af72: e2 0f add r30, r18
af74: f3 1f adc r31, r19
af76: fe 83 std Y+6, r31 ; 0x06
af78: ed 83 std Y+5, r30 ; 0x05
af7a: 2c c0 rjmp .+88 ; 0xafd4 <MotorRegler+0x3fc8>
else if(Mixer.Motor[i][2] == -64) tmp_int -= pd_ergebnis_roll;
af7c: a0 3c cpi r26, 0xC0 ; 192
af7e: 49 f4 brne .+18 ; 0xaf92 <MotorRegler+0x3f86>
af80: ed 81 ldd r30, Y+5 ; 0x05
af82: fe 81 ldd r31, Y+6 ; 0x06
af84: 2b 85 ldd r18, Y+11 ; 0x0b
af86: 3c 85 ldd r19, Y+12 ; 0x0c
af88: e2 1b sub r30, r18
af8a: f3 0b sbc r31, r19
af8c: fe 83 std Y+6, r31 ; 0x06
af8e: ed 83 std Y+5, r30 ; 0x05
af90: 21 c0 rjmp .+66 ; 0xafd4 <MotorRegler+0x3fc8>
else tmp_int += ((long)pd_ergebnis_roll * Mixer.Motor[i][2]) / 64L;
af92: bb 27 eor r27, r27
af94: a7 fd sbrc r26, 7
af96: b0 95 com r27
af98: 2d 89 ldd r18, Y+21 ; 0x15
af9a: 3e 89 ldd r19, Y+22 ; 0x16
af9c: 4f 89 ldd r20, Y+23 ; 0x17
af9e: 58 8d ldd r21, Y+24 ; 0x18
afa0: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
afa4: 9b 01 movw r18, r22
afa6: ac 01 movw r20, r24
afa8: 99 23 and r25, r25
afaa: 24 f4 brge .+8 ; 0xafb4 <MotorRegler+0x3fa8>
afac: 21 5c subi r18, 0xC1 ; 193
afae: 3f 4f sbci r19, 0xFF ; 255
afb0: 4f 4f sbci r20, 0xFF ; 255
afb2: 5f 4f sbci r21, 0xFF ; 255
afb4: da 01 movw r26, r20
afb6: c9 01 movw r24, r18
afb8: 68 94 set
afba: 15 f8 bld r1, 5
afbc: b5 95 asr r27
afbe: a7 95 ror r26
afc0: 97 95 ror r25
afc2: 87 95 ror r24
afc4: 16 94 lsr r1
afc6: d1 f7 brne .-12 ; 0xafbc <MotorRegler+0x3fb0>
afc8: ed 81 ldd r30, Y+5 ; 0x05
afca: fe 81 ldd r31, Y+6 ; 0x06
afcc: e8 0f add r30, r24
afce: f9 1f adc r31, r25
afd0: fe 83 std Y+6, r31 ; 0x06
afd2: ed 83 std Y+5, r30 ; 0x05
// Gier
if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil;
afd4: ed a1 ldd r30, Y+37 ; 0x25
afd6: fe a1 ldd r31, Y+38 ; 0x26
afd8: a0 81 ld r26, Z
afda: a0 34 cpi r26, 0x40 ; 64
afdc: 39 f4 brne .+14 ; 0xafec <MotorRegler+0x3fe0>
afde: ed 81 ldd r30, Y+5 ; 0x05
afe0: fe 81 ldd r31, Y+6 ; 0x06
afe2: 29 85 ldd r18, Y+9 ; 0x09
afe4: 3a 85 ldd r19, Y+10 ; 0x0a
afe6: e2 0f add r30, r18
afe8: f3 1f adc r31, r19
afea: 28 c0 rjmp .+80 ; 0xb03c <MotorRegler+0x4030>
else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil;
afec: a0 3c cpi r26, 0xC0 ; 192
afee: 39 f4 brne .+14 ; 0xaffe <MotorRegler+0x3ff2>
aff0: ed 81 ldd r30, Y+5 ; 0x05
aff2: fe 81 ldd r31, Y+6 ; 0x06
aff4: 49 85 ldd r20, Y+9 ; 0x09
aff6: 5a 85 ldd r21, Y+10 ; 0x0a
aff8: e4 1b sub r30, r20
affa: f5 0b sbc r31, r21
affc: 1f c0 rjmp .+62 ; 0xb03c <MotorRegler+0x4030>
else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L;
affe: bb 27 eor r27, r27
b000: a7 fd sbrc r26, 7
b002: b0 95 com r27
b004: 29 89 ldd r18, Y+17 ; 0x11
b006: 3a 89 ldd r19, Y+18 ; 0x12
b008: 4b 89 ldd r20, Y+19 ; 0x13
b00a: 5c 89 ldd r21, Y+20 ; 0x14
b00c: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
b010: 9b 01 movw r18, r22
b012: ac 01 movw r20, r24
b014: 99 23 and r25, r25
b016: 24 f4 brge .+8 ; 0xb020 <MotorRegler+0x4014>
b018: 21 5c subi r18, 0xC1 ; 193
b01a: 3f 4f sbci r19, 0xFF ; 255
b01c: 4f 4f sbci r20, 0xFF ; 255
b01e: 5f 4f sbci r21, 0xFF ; 255
b020: da 01 movw r26, r20
b022: c9 01 movw r24, r18
b024: 68 94 set
b026: 15 f8 bld r1, 5
b028: b5 95 asr r27
b02a: a7 95 ror r26
b02c: 97 95 ror r25
b02e: 87 95 ror r24
b030: 16 94 lsr r1
b032: d1 f7 brne .-12 ; 0xb028 <MotorRegler+0x401c>
b034: ed 81 ldd r30, Y+5 ; 0x05
b036: fe 81 ldd r31, Y+6 ; 0x06
b038: e8 0f add r30, r24
b03a: f9 1f adc r31, r25
b03c: 92 01 movw r18, r4
b03e: d2 01 movw r26, r4
b040: 12 97 sbiw r26, 0x02 ; 2
#ifdef REDUNDANT_FC_SLAVE
tmp_int = (tmp_motorwert[i] + tmp_int) / 2;
#else
if(Motor[i].Version & MOTOR_STATE_FAST_MODE || tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // Beschleunigen
b042: 8c 91 ld r24, X
b044: 81 fd sbrc r24, 1
b046: 06 c0 rjmp .+12 ; 0xb054 <MotorRegler+0x4048>
b048: d3 01 movw r26, r6
b04a: 8d 91 ld r24, X+
b04c: 9c 91 ld r25, X
b04e: 8e 17 cp r24, r30
b050: 9f 07 cpc r25, r31
b052: 5c f4 brge .+22 ; 0xb06a <MotorRegler+0x405e>
b054: d3 01 movw r26, r6
b056: 8d 91 ld r24, X+
b058: 9c 91 ld r25, X
b05a: e8 0f add r30, r24
b05c: f9 1f adc r31, r25
b05e: ff 23 and r31, r31
b060: 0c f4 brge .+2 ; 0xb064 <MotorRegler+0x4058>
b062: 31 96 adiw r30, 0x01 ; 1
b064: f5 95 asr r31
b066: e7 95 ror r30
b068: 11 c0 rjmp .+34 ; 0xb08c <MotorRegler+0x4080>
else
{ // BL-Ctrl 1.0 or 2.0
if(EE_Parameter.MotorSmooth == 0)
b06a: 11 11 cpse r17, r1
b06c: 05 c0 rjmp .+10 ; 0xb078 <MotorRegler+0x406c>
{
tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing
b06e: ee 0f add r30, r30
b070: ff 1f adc r31, r31
b072: e8 1b sub r30, r24
b074: f9 0b sbc r31, r25
b076: 0a c0 rjmp .+20 ; 0xb08c <MotorRegler+0x4080>
}
else // 1 means tmp_int = tmp_int;
if(EE_Parameter.MotorSmooth > 1)
b078: 12 30 cpi r17, 0x02 ; 2
b07a: 40 f0 brcs .+16 ; 0xb08c <MotorRegler+0x4080>
{
// If >= 2 then allow >= 50% of the intended step down to rapidly reach the intended value.
tmp_int = tmp_int + ((tmp_motorwert[i] - tmp_int) / EE_Parameter.MotorSmooth);
b07c: 8e 1b sub r24, r30
b07e: 9f 0b sbc r25, r31
b080: 6b a1 ldd r22, Y+35 ; 0x23
b082: 7c a1 ldd r23, Y+36 ; 0x24
b084: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
b088: e6 0f add r30, r22
b08a: f7 1f adc r31, r23
}
}
#endif
LIMIT_MIN_MAX(tmp_int,(int) MIN_GAS * 4,(int) MAX_GAS * 4);
b08c: 49 81 ldd r20, Y+1 ; 0x01
b08e: 5a 81 ldd r21, Y+2 ; 0x02
b090: 4e 17 cp r20, r30
b092: 5f 07 cpc r21, r31
b094: 44 f4 brge .+16 ; 0xb0a6 <MotorRegler+0x409a>
b096: 6f 85 ldd r22, Y+15 ; 0x0f
b098: 78 89 ldd r23, Y+16 ; 0x10
b09a: 6e 17 cp r22, r30
b09c: 7f 07 cpc r23, r31
b09e: 2c f4 brge .+10 ; 0xb0aa <MotorRegler+0x409e>
b0a0: e9 a1 ldd r30, Y+33 ; 0x21
b0a2: fa a1 ldd r31, Y+34 ; 0x22
b0a4: 02 c0 rjmp .+4 ; 0xb0aa <MotorRegler+0x409e>
b0a6: ed 8d ldd r30, Y+29 ; 0x1d
b0a8: fe 8d ldd r31, Y+30 ; 0x1e
Motor[i].SetPoint = tmp_int / 4;
b0aa: cf 01 movw r24, r30
b0ac: ff 23 and r31, r31
b0ae: 0c f4 brge .+2 ; 0xb0b2 <MotorRegler+0x40a6>
b0b0: 03 96 adiw r24, 0x03 ; 3
b0b2: 95 95 asr r25
b0b4: 87 95 ror r24
b0b6: 95 95 asr r25
b0b8: 87 95 ror r24
b0ba: d5 01 movw r26, r10
b0bc: 8c 93 st X, r24
Motor[i].SetPointLowerBits = (tmp_int % 4)<<1; // (3 bits total)
b0be: cf 01 movw r24, r30
b0c0: 83 70 andi r24, 0x03 ; 3
b0c2: 90 78 andi r25, 0x80 ; 128
b0c4: 99 23 and r25, r25
b0c6: 24 f4 brge .+8 ; 0xb0d0 <MotorRegler+0x40c4>
b0c8: 01 97 sbiw r24, 0x01 ; 1
b0ca: 8c 6f ori r24, 0xFC ; 252
b0cc: 9f 6f ori r25, 0xFF ; 255
b0ce: 01 96 adiw r24, 0x01 ; 1
b0d0: 88 0f add r24, r24
b0d2: d9 01 movw r26, r18
b0d4: 8c 93 st X, r24
tmp_motorwert[i] = tmp_int;
b0d6: d3 01 movw r26, r6
b0d8: ed 93 st X+, r30
b0da: fc 93 st X, r31
b0dc: 04 c0 rjmp .+8 ; 0xb0e6 <MotorRegler+0x40da>
}
else
{
Motor[i].SetPoint = 0;
b0de: f5 01 movw r30, r10
b0e0: 10 82 st Z, r1
Motor[i].SetPointLowerBits = 0;
b0e2: d2 01 movw r26, r4
b0e4: 1c 92 st X, r1
b0e6: bf e0 ldi r27, 0x0F ; 15
b0e8: ab 0e add r10, r27
b0ea: b1 1c adc r11, r1
b0ec: ef e0 ldi r30, 0x0F ; 15
b0ee: 4e 0e add r4, r30
b0f0: 51 1c adc r5, r1
b0f2: f2 e0 ldi r31, 0x02 ; 2
b0f4: 6f 0e add r6, r31
b0f6: 71 1c adc r7, r1
b0f8: 04 e0 ldi r16, 0x04 ; 4
b0fa: 80 0e add r8, r16
b0fc: 91 1c adc r9, r1
// send SPI pending bytes
if(BytegapSPI == 0) SPI_TransmitByte();
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Universal Mixer
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
for(i=0; i<MAX_MOTORS; i++)
b0fe: 42 14 cp r4, r2
b100: 53 04 cpc r5, r3
b102: 09 f0 breq .+2 ; 0xb106 <MotorRegler+0x40fa>
b104: c7 ce rjmp .-626 ; 0xae94 <MotorRegler+0x3e88>
b106: ae c0 rjmp .+348 ; 0xb264 <MotorRegler+0x4258>
tmp_int = (tmp_motorwert[i] + tmp_int) / 2;
#else
if(Motor[i].Version & MOTOR_STATE_FAST_MODE || tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // Beschleunigen
else
{ // BL-Ctrl 1.0 or 2.0
if(EE_Parameter.MotorSmooth == 0)
b108: 50 90 a4 05 lds r5, 0x05A4
}
else // 1 means tmp_int = tmp_int;
if(EE_Parameter.MotorSmooth > 1)
{
// If >= 2 then allow >= 50% of the intended step down to rapidly reach the intended value.
tmp_int = tmp_int + ((tmp_motorwert[i] - tmp_int) / EE_Parameter.MotorSmooth);
b10c: e5 2d mov r30, r5
b10e: f0 e0 ldi r31, 0x00 ; 0
b110: fc a3 std Y+36, r31 ; 0x24
b112: eb a3 std Y+35, r30 ; 0x23
}
}
#endif
LIMIT_MIN_MAX(tmp_int,(int) MIN_GAS * 4,(int) MAX_GAS * 4);
b114: 80 91 2c 06 lds r24, 0x062C
b118: 90 e0 ldi r25, 0x00 ; 0
b11a: 4c 01 movw r8, r24
b11c: 88 0c add r8, r8
b11e: 99 1c adc r9, r9
b120: 88 0c add r8, r8
b122: 99 1c adc r9, r9
b124: 9a 82 std Y+2, r9 ; 0x02
b126: 89 82 std Y+1, r8 ; 0x01
b128: 80 91 64 06 lds r24, 0x0664
b12c: 90 e0 ldi r25, 0x00 ; 0
b12e: 5c 01 movw r10, r24
b130: aa 0c add r10, r10
b132: bb 1c adc r11, r11
b134: aa 0c add r10, r10
b136: bb 1c adc r11, r11
b138: b8 8a std Y+16, r11 ; 0x10
b13a: af 86 std Y+15, r10 ; 0x0f
b13c: 0f 2e mov r0, r31
b13e: f8 e9 ldi r31, 0x98 ; 152
b140: 6f 2e mov r6, r31
b142: f9 e0 ldi r31, 0x09 ; 9
b144: 7f 2e mov r7, r31
b146: f0 2d mov r31, r0
b148: 09 e9 ldi r16, 0x99 ; 153
b14a: 19 e0 ldi r17, 0x09 ; 9
b14c: 0f 2e mov r0, r31
b14e: f3 e4 ldi r31, 0x43 ; 67
b150: 8f 2e mov r8, r31
b152: f6 e0 ldi r31, 0x06 ; 6
b154: 9f 2e mov r9, r31
b156: f0 2d mov r31, r0
b158: 0f 2e mov r0, r31
b15a: f7 ed ldi r31, 0xD7 ; 215
b15c: af 2e mov r10, r31
b15e: f5 e0 ldi r31, 0x05 ; 5
b160: bf 2e mov r11, r31
b162: f0 2d mov r31, r0
b164: 0f 2e mov r0, r31
b166: fd e4 ldi r31, 0x4D ; 77
b168: 2f 2e mov r2, r31
b16a: fa e0 ldi r31, 0x0A ; 10
b16c: 3f 2e mov r3, r31
b16e: f0 2d mov r31, r0
b170: e9 80 ldd r14, Y+1 ; 0x01
b172: ed 8e std Y+29, r14 ; 0x1d
b174: fa 80 ldd r15, Y+2 ; 0x02
b176: fe 8e std Y+30, r15 ; 0x1e
b178: ef 85 ldd r30, Y+15 ; 0x0f
b17a: e9 a3 std Y+33, r30 ; 0x21
b17c: f8 89 ldd r31, Y+16 ; 0x10
b17e: fa a3 std Y+34, r31 ; 0x22
else if(Mixer.Motor[i][2] == -64) tmp_int -= pd_ergebnis_roll;
else tmp_int += ((long)pd_ergebnis_roll * Mixer.Motor[i][2]) / 64L;
// Gier
if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil;
else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil;
else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L;
b180: 29 85 ldd r18, Y+9 ; 0x09
b182: 3a 85 ldd r19, Y+10 ; 0x0a
b184: 44 27 eor r20, r20
b186: 37 fd sbrc r19, 7
b188: 40 95 com r20
b18a: 54 2f mov r21, r20
b18c: 29 8b std Y+17, r18 ; 0x11
b18e: 3a 8b std Y+18, r19 ; 0x12
b190: 4b 8b std Y+19, r20 ; 0x13
b192: 5c 8b std Y+20, r21 ; 0x14
else if(Mixer.Motor[i][1] == -64) tmp_int -= pd_ergebnis_nick;
else tmp_int += ((long)pd_ergebnis_nick * Mixer.Motor[i][1]) / 64L;
// Roll
if(Mixer.Motor[i][2] == 64) tmp_int += pd_ergebnis_roll;
else if(Mixer.Motor[i][2] == -64) tmp_int -= pd_ergebnis_roll;
else tmp_int += ((long)pd_ergebnis_roll * Mixer.Motor[i][2]) / 64L;
b194: 4b 85 ldd r20, Y+11 ; 0x0b
b196: 5c 85 ldd r21, Y+12 ; 0x0c
b198: 66 27 eor r22, r22
b19a: 57 fd sbrc r21, 7
b19c: 60 95 com r22
b19e: 76 2f mov r23, r22
b1a0: 4d 8b std Y+21, r20 ; 0x15
b1a2: 5e 8b std Y+22, r21 ; 0x16
b1a4: 6f 8b std Y+23, r22 ; 0x17
b1a6: 78 8f std Y+24, r23 ; 0x18
// Gas
if(Mixer.Motor[i][0] == 64) tmp_int = GasMischanteil; else tmp_int = ((long)GasMischanteil * Mixer.Motor[i][0]) / 64L;
// Nick
if(Mixer.Motor[i][1] == 64) tmp_int += pd_ergebnis_nick;
else if(Mixer.Motor[i][1] == -64) tmp_int -= pd_ergebnis_nick;
else tmp_int += ((long)pd_ergebnis_nick * Mixer.Motor[i][1]) / 64L;
b1a8: 6d 85 ldd r22, Y+13 ; 0x0d
b1aa: 7e 85 ldd r23, Y+14 ; 0x0e
b1ac: 88 27 eor r24, r24
b1ae: 77 fd sbrc r23, 7
b1b0: 80 95 com r24
b1b2: 98 2f mov r25, r24
b1b4: 69 8f std Y+25, r22 ; 0x19
b1b6: 7a 8f std Y+26, r23 ; 0x1a
b1b8: 8b 8f std Y+27, r24 ; 0x1b
b1ba: 9c 8f std Y+28, r25 ; 0x1c
{
signed int tmp_int;
if(Mixer.Motor[i][0] > 0)
{
// Gas
if(Mixer.Motor[i][0] == 64) tmp_int = GasMischanteil; else tmp_int = ((long)GasMischanteil * Mixer.Motor[i][0]) / 64L;
b1bc: ed 81 ldd r30, Y+5 ; 0x05
b1be: ef 8f std Y+31, r30 ; 0x1f
b1c0: fe 81 ldd r31, Y+6 ; 0x06
b1c2: f8 a3 std Y+32, r31 ; 0x20
b1c4: 2d 81 ldd r18, Y+5 ; 0x05
b1c6: 3e 81 ldd r19, Y+6 ; 0x06
b1c8: 69 01 movw r12, r18
b1ca: ee 24 eor r14, r14
b1cc: d7 fc sbrc r13, 7
b1ce: e0 94 com r14
b1d0: fe 2c mov r15, r14
b1d2: c4 01 movw r24, r8
b1d4: 45 01 movw r8, r10
b1d6: 53 01 movw r10, r6
b1d8: 98 01 movw r18, r16
b1da: 15 2d mov r17, r5
b1dc: 29 01 movw r4, r18
b1de: 3c 01 movw r6, r24
b1e0: 59 ce rjmp .-846 ; 0xae94 <MotorRegler+0x3e88>
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren
MittelIntegralRoll += IntegralRoll;
if(Looping_Nick || Looping_Roll)
{
MittelIntegralNick = 0;
b1e2: 10 92 34 06 sts 0x0634, r1
b1e6: 10 92 35 06 sts 0x0635, r1
b1ea: 10 92 36 06 sts 0x0636, r1
b1ee: 10 92 37 06 sts 0x0637, r1
MittelIntegralRoll = 0;
b1f2: 10 92 3c 06 sts 0x063C, r1
b1f6: 10 92 3d 06 sts 0x063D, r1
b1fa: 10 92 3e 06 sts 0x063E, r1
b1fe: 10 92 3f 06 sts 0x063F, r1
ZaehlMessungen = 0;
b202: 10 92 53 03 sts 0x0353, r1
b206: 10 92 52 03 sts 0x0352, r1
LageKorrekturNick = 0;
b20a: 10 92 eb 03 sts 0x03EB, r1
b20e: 10 92 ea 03 sts 0x03EA, r1
LageKorrekturRoll = 0;
b212: 10 92 ed 03 sts 0x03ED, r1
b216: 10 92 ec 03 sts 0x03EC, r1
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin))
b21a: 80 91 e6 03 lds r24, 0x03E6
b21e: 81 11 cpse r24, r1
b220: 0c 94 13 45 jmp 0x8a26 ; 0x8a26 <MotorRegler+0x1a1a>
b224: 0c 94 27 43 jmp 0x864e ; 0x864e <MotorRegler+0x1642>
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren
MittelIntegralRoll += IntegralRoll;
if(Looping_Nick || Looping_Roll)
{
MittelIntegralNick = 0;
b228: 10 92 34 06 sts 0x0634, r1
b22c: 10 92 35 06 sts 0x0635, r1
b230: 10 92 36 06 sts 0x0636, r1
b234: 10 92 37 06 sts 0x0637, r1
MittelIntegralRoll = 0;
b238: 10 92 3c 06 sts 0x063C, r1
b23c: 10 92 3d 06 sts 0x063D, r1
b240: 10 92 3e 06 sts 0x063E, r1
b244: 10 92 3f 06 sts 0x063F, r1
ZaehlMessungen = 0;
b248: 10 92 53 03 sts 0x0353, r1
b24c: 10 92 52 03 sts 0x0352, r1
LageKorrekturNick = 0;
b250: 10 92 eb 03 sts 0x03EB, r1
b254: 10 92 ea 03 sts 0x03EA, r1
LageKorrekturRoll = 0;
b258: 10 92 ed 03 sts 0x03ED, r1
b25c: 10 92 ec 03 sts 0x03EC, r1
b260: 0c 94 13 45 jmp 0x8a26 ; 0x8a26 <MotorRegler+0x1a1a>
}
}
#ifdef REDUNDANT_FC_MASTER
if(Parameter_UserParam6 > 230) Motor[0].SetPoint = 0;
#endif
}
b264: a6 96 adiw r28, 0x26 ; 38
b266: 0f b6 in r0, 0x3f ; 63
b268: f8 94 cli
b26a: de bf out 0x3e, r29 ; 62
b26c: 0f be out 0x3f, r0 ; 63
b26e: cd bf out 0x3d, r28 ; 61
b270: df 91 pop r29
b272: cf 91 pop r28
b274: 1f 91 pop r17
b276: 0f 91 pop r16
b278: ff 90 pop r15
b27a: ef 90 pop r14
b27c: df 90 pop r13
b27e: cf 90 pop r12
b280: bf 90 pop r11
b282: af 90 pop r10
b284: 9f 90 pop r9
b286: 8f 90 pop r8
b288: 7f 90 pop r7
b28a: 6f 90 pop r6
b28c: 5f 90 pop r5
b28e: 4f 90 pop r4
b290: 3f 90 pop r3
b292: 2f 90 pop r2
b294: 08 95 ret
0000b296 <PrintLine>:
unsigned char ActiveParamSet = 3;
unsigned char LipoCells = 4;
void PrintLine(void)
{
printf("\n\r===================================");
b296: 88 e6 ldi r24, 0x68 ; 104
b298: 94 e0 ldi r25, 0x04 ; 4
b29a: 9f 93 push r25
b29c: 8f 93 push r24
b29e: 87 eb ldi r24, 0xB7 ; 183
b2a0: 9c ea ldi r25, 0xAC ; 172
b2a2: 9f 93 push r25
b2a4: 8f 93 push r24
b2a6: e0 91 78 06 lds r30, 0x0678
b2aa: f0 91 79 06 lds r31, 0x0679
b2ae: 09 95 icall
b2b0: 0f 90 pop r0
b2b2: 0f 90 pop r0
b2b4: 0f 90 pop r0
b2b6: 0f 90 pop r0
b2b8: 08 95 ret
0000b2ba <CalMk3Mag>:
void CalMk3Mag(void)
{
static unsigned char stick = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -20) stick = 0;
b2ba: 80 91 3f 05 lds r24, 0x053F
b2be: 90 e0 ldi r25, 0x00 ; 0
b2c0: fc 01 movw r30, r24
b2c2: ee 0f add r30, r30
b2c4: ff 1f adc r31, r31
b2c6: ef 5c subi r30, 0xCF ; 207
b2c8: f7 4f sbci r31, 0xF7 ; 247
b2ca: 20 81 ld r18, Z
b2cc: 31 81 ldd r19, Z+1 ; 0x01
b2ce: 2d 3e cpi r18, 0xED ; 237
b2d0: 3f 4f sbci r19, 0xFF ; 255
b2d2: 14 f0 brlt .+4 ; 0xb2d8 <CalMk3Mag+0x1e>
b2d4: 10 92 50 01 sts 0x0150, r1
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) && !stick)
b2d8: fc 01 movw r30, r24
b2da: ee 0f add r30, r30
b2dc: ff 1f adc r31, r31
b2de: ef 5c subi r30, 0xCF ; 207
b2e0: f7 4f sbci r31, 0xF7 ; 247
b2e2: 80 81 ld r24, Z
b2e4: 91 81 ldd r25, Z+1 ; 0x01
b2e6: 8a 3b cpi r24, 0xBA ; 186
b2e8: 9f 4f sbci r25, 0xFF ; 255
b2ea: cc f4 brge .+50 ; 0xb31e <CalMk3Mag+0x64>
b2ec: 80 91 50 01 lds r24, 0x0150
b2f0: 81 11 cpse r24, r1
b2f2: 15 c0 rjmp .+42 ; 0xb31e <CalMk3Mag+0x64>
{
stick = 1;
b2f4: 81 e0 ldi r24, 0x01 ; 1
b2f6: 80 93 50 01 sts 0x0150, r24
WinkelOut.CalcState++;
b2fa: ed e7 ldi r30, 0x7D ; 125
b2fc: fa e0 ldi r31, 0x0A ; 10
b2fe: 80 81 ld r24, Z
b300: 8f 5f subi r24, 0xFF ; 255
b302: 80 83 st Z, r24
if(WinkelOut.CalcState > 4)
b304: 85 30 cpi r24, 0x05 ; 5
b306: 38 f0 brcs .+14 ; 0xb316 <CalMk3Mag+0x5c>
{
// WinkelOut.CalcState = 0; // in Uart.c
beeptime = 1000;
b308: 88 ee ldi r24, 0xE8 ; 232
b30a: 93 e0 ldi r25, 0x03 ; 3
b30c: 90 93 ce 04 sts 0x04CE, r25
b310: 80 93 cd 04 sts 0x04CD, r24
b314: 08 95 ret
}
else Piep(WinkelOut.CalcState,150);
b316: 66 e9 ldi r22, 0x96 ; 150
b318: 70 e0 ldi r23, 0x00 ; 0
b31a: 0c 94 ba 28 jmp 0x5174 ; 0x5174 <Piep>
b31e: 08 95 ret
0000b320 <LipoDetection>:
}
}
void LipoDetection(unsigned char print)
{
b320: cf 93 push r28
b322: c8 2f mov r28, r24
#define MAX_CELL_VOLTAGE 43 // max cell voltage for LiPO
if(print)
b324: 88 23 and r24, r24
b326: 11 f1 breq .+68 ; 0xb36c <LipoDetection+0x4c>
{
printf("\n\rBatt:");
b328: 20 e6 ldi r18, 0x60 ; 96
b32a: 34 e0 ldi r19, 0x04 ; 4
b32c: 3f 93 push r19
b32e: 2f 93 push r18
b330: 27 eb ldi r18, 0xB7 ; 183
b332: 3c ea ldi r19, 0xAC ; 172
b334: 3f 93 push r19
b336: 2f 93 push r18
b338: e0 91 78 06 lds r30, 0x0678
b33c: f0 91 79 06 lds r31, 0x0679
b340: 09 95 icall
LipoCells = 1 + UBat / MAX_CELL_VOLTAGE;
b342: 80 91 1a 01 lds r24, 0x011A
b346: 90 91 1b 01 lds r25, 0x011B
b34a: 6b e2 ldi r22, 0x2B ; 43
b34c: 70 e0 ldi r23, 0x00 ; 0
b34e: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
b352: 6f 5f subi r22, 0xFF ; 255
if(LipoCells > 6) LipoCells = 6;
b354: 0f 90 pop r0
b356: 0f 90 pop r0
b358: 0f 90 pop r0
b35a: 0f 90 pop r0
b35c: 67 30 cpi r22, 0x07 ; 7
b35e: 18 f4 brcc .+6 ; 0xb366 <LipoDetection+0x46>
{
#define MAX_CELL_VOLTAGE 43 // max cell voltage for LiPO
if(print)
{
printf("\n\rBatt:");
LipoCells = 1 + UBat / MAX_CELL_VOLTAGE;
b360: 60 93 51 01 sts 0x0151, r22
b364: 03 c0 rjmp .+6 ; 0xb36c <LipoDetection+0x4c>
if(LipoCells > 6) LipoCells = 6;
b366: 86 e0 ldi r24, 0x06 ; 6
b368: 80 93 51 01 sts 0x0151, r24
}
if(EE_Parameter.UnterspannungsWarnung < 50)
b36c: 90 91 62 05 lds r25, 0x0562
b370: 92 33 cpi r25, 0x32 ; 50
b372: 28 f5 brcc .+74 ; 0xb3be <LipoDetection+0x9e>
{
BattLowVoltageWarning = LipoCells * EE_Parameter.UnterspannungsWarnung;
b374: 80 91 51 01 lds r24, 0x0151
b378: 89 9f mul r24, r25
b37a: 90 2d mov r25, r0
b37c: 11 24 eor r1, r1
b37e: 90 93 53 01 sts 0x0153, r25
if(print)
b382: cc 23 and r28, r28
b384: f1 f0 breq .+60 ; 0xb3c2 <LipoDetection+0xa2>
{
Piep(LipoCells, 200);
b386: 68 ec ldi r22, 0xC8 ; 200
b388: 70 e0 ldi r23, 0x00 ; 0
b38a: 0e 94 ba 28 call 0x5174 ; 0x5174 <Piep>
printf(" %d Cells ", LipoCells);
b38e: 80 91 51 01 lds r24, 0x0151
b392: 1f 92 push r1
b394: 8f 93 push r24
b396: 25 e5 ldi r18, 0x55 ; 85
b398: 34 e0 ldi r19, 0x04 ; 4
b39a: 3f 93 push r19
b39c: 2f 93 push r18
b39e: 27 eb ldi r18, 0xB7 ; 183
b3a0: 3c ea ldi r19, 0xAC ; 172
b3a2: 3f 93 push r19
b3a4: 2f 93 push r18
b3a6: e0 91 78 06 lds r30, 0x0678
b3aa: f0 91 79 06 lds r31, 0x0679
b3ae: 09 95 icall
b3b0: 0f 90 pop r0
b3b2: 0f 90 pop r0
b3b4: 0f 90 pop r0
b3b6: 0f 90 pop r0
b3b8: 0f 90 pop r0
b3ba: 0f 90 pop r0
b3bc: 02 c0 rjmp .+4 ; 0xb3c2 <LipoDetection+0xa2>
}
}
else BattLowVoltageWarning = EE_Parameter.UnterspannungsWarnung;
b3be: 90 93 53 01 sts 0x0153, r25
// automatische Zellenerkennung
if(EE_Parameter.AutoLandingVoltage < 50) BattAutoLandingVoltage = LipoCells * EE_Parameter.AutoLandingVoltage; else BattAutoLandingVoltage = EE_Parameter.AutoLandingVoltage;
b3c2: 80 91 b2 05 lds r24, 0x05B2
b3c6: 82 33 cpi r24, 0x32 ; 50
b3c8: 40 f4 brcc .+16 ; 0xb3da <LipoDetection+0xba>
b3ca: 90 91 51 01 lds r25, 0x0151
b3ce: 98 9f mul r25, r24
b3d0: 80 2d mov r24, r0
b3d2: 11 24 eor r1, r1
b3d4: 80 93 65 04 sts 0x0465, r24
b3d8: 02 c0 rjmp .+4 ; 0xb3de <LipoDetection+0xbe>
b3da: 80 93 65 04 sts 0x0465, r24
if(EE_Parameter.ComingHomeVoltage < 50) BattComingHomeVoltage = LipoCells * EE_Parameter.ComingHomeVoltage; else BattComingHomeVoltage = EE_Parameter.ComingHomeVoltage;
b3de: 80 91 b3 05 lds r24, 0x05B3
b3e2: 82 33 cpi r24, 0x32 ; 50
b3e4: 40 f4 brcc .+16 ; 0xb3f6 <LipoDetection+0xd6>
b3e6: 90 91 51 01 lds r25, 0x0151
b3ea: 98 9f mul r25, r24
b3ec: 90 2d mov r25, r0
b3ee: 11 24 eor r1, r1
b3f0: 90 93 64 04 sts 0x0464, r25
b3f4: 02 c0 rjmp .+4 ; 0xb3fa <LipoDetection+0xda>
b3f6: 80 93 64 04 sts 0x0464, r24
if(BattAutoLandingVoltage > BattLowVoltageWarning) BattAutoLandingVoltage = BattLowVoltageWarning - 1;
b3fa: 90 91 53 01 lds r25, 0x0153
b3fe: 20 91 65 04 lds r18, 0x0465
b402: 92 17 cp r25, r18
b404: 20 f4 brcc .+8 ; 0xb40e <LipoDetection+0xee>
b406: 2f ef ldi r18, 0xFF ; 255
b408: 29 0f add r18, r25
b40a: 20 93 65 04 sts 0x0465, r18
if(BattComingHomeVoltage >= BattLowVoltageWarning) BattComingHomeVoltage = BattLowVoltageWarning - 1;
b40e: 20 91 64 04 lds r18, 0x0464
b412: 29 17 cp r18, r25
b414: 20 f0 brcs .+8 ; 0xb41e <LipoDetection+0xfe>
b416: 2f ef ldi r18, 0xFF ; 255
b418: 29 0f add r18, r25
b41a: 20 93 64 04 sts 0x0464, r18
if(BattAutoLandingVoltage >= BattComingHomeVoltage && EE_Parameter.ComingHomeVoltage) BattAutoLandingVoltage = BattComingHomeVoltage - 1;
b41e: 20 91 64 04 lds r18, 0x0464
b422: 30 91 65 04 lds r19, 0x0465
b426: 32 17 cp r19, r18
b428: 28 f0 brcs .+10 ; 0xb434 <LipoDetection+0x114>
b42a: 88 23 and r24, r24
b42c: 19 f0 breq .+6 ; 0xb434 <LipoDetection+0x114>
b42e: 21 50 subi r18, 0x01 ; 1
b430: 20 93 65 04 sts 0x0465, r18
if(print)
b434: cc 23 and r28, r28
b436: 09 f4 brne .+2 ; 0xb43a <LipoDetection+0x11a>
b438: 7f c0 rjmp .+254 ; 0xb538 <LipoDetection+0x218>
{
printf(" Low warning: %d.%dV",BattLowVoltageWarning/10,BattLowVoltageWarning%10);
b43a: 8d ec ldi r24, 0xCD ; 205
b43c: 98 9f mul r25, r24
b43e: 81 2d mov r24, r1
b440: 11 24 eor r1, r1
b442: 86 95 lsr r24
b444: 86 95 lsr r24
b446: 86 95 lsr r24
b448: 28 2f mov r18, r24
b44a: 22 0f add r18, r18
b44c: 32 2f mov r19, r18
b44e: 33 0f add r19, r19
b450: 33 0f add r19, r19
b452: 23 0f add r18, r19
b454: 92 1b sub r25, r18
b456: 1f 92 push r1
b458: 9f 93 push r25
b45a: 1f 92 push r1
b45c: 8f 93 push r24
b45e: 80 e4 ldi r24, 0x40 ; 64
b460: 94 e0 ldi r25, 0x04 ; 4
b462: 9f 93 push r25
b464: 8f 93 push r24
b466: 87 eb ldi r24, 0xB7 ; 183
b468: 9c ea ldi r25, 0xAC ; 172
b46a: 9f 93 push r25
b46c: 8f 93 push r24
b46e: e0 91 78 06 lds r30, 0x0678
b472: f0 91 79 06 lds r31, 0x0679
b476: 09 95 icall
if(BattComingHomeVoltage) printf(" Auto-CH: %d.%dV",BattComingHomeVoltage/10,BattComingHomeVoltage%10);
b478: 80 91 64 04 lds r24, 0x0464
b47c: 2d b7 in r18, 0x3d ; 61
b47e: 3e b7 in r19, 0x3e ; 62
b480: 28 5f subi r18, 0xF8 ; 248
b482: 3f 4f sbci r19, 0xFF ; 255
b484: 0f b6 in r0, 0x3f ; 63
b486: f8 94 cli
b488: 3e bf out 0x3e, r19 ; 62
b48a: 0f be out 0x3f, r0 ; 63
b48c: 2d bf out 0x3d, r18 ; 61
b48e: 88 23 and r24, r24
b490: 39 f1 breq .+78 ; 0xb4e0 <LipoDetection+0x1c0>
b492: 9d ec ldi r25, 0xCD ; 205
b494: 89 9f mul r24, r25
b496: 91 2d mov r25, r1
b498: 11 24 eor r1, r1
b49a: 96 95 lsr r25
b49c: 96 95 lsr r25
b49e: 96 95 lsr r25
b4a0: 29 2f mov r18, r25
b4a2: 22 0f add r18, r18
b4a4: 32 2f mov r19, r18
b4a6: 33 0f add r19, r19
b4a8: 33 0f add r19, r19
b4aa: 23 0f add r18, r19
b4ac: 82 1b sub r24, r18
b4ae: 1f 92 push r1
b4b0: 8f 93 push r24
b4b2: 1f 92 push r1
b4b4: 9f 93 push r25
b4b6: 8e e2 ldi r24, 0x2E ; 46
b4b8: 94 e0 ldi r25, 0x04 ; 4
b4ba: 9f 93 push r25
b4bc: 8f 93 push r24
b4be: 87 eb ldi r24, 0xB7 ; 183
b4c0: 9c ea ldi r25, 0xAC ; 172
b4c2: 9f 93 push r25
b4c4: 8f 93 push r24
b4c6: e0 91 78 06 lds r30, 0x0678
b4ca: f0 91 79 06 lds r31, 0x0679
b4ce: 09 95 icall
b4d0: 8d b7 in r24, 0x3d ; 61
b4d2: 9e b7 in r25, 0x3e ; 62
b4d4: 08 96 adiw r24, 0x08 ; 8
b4d6: 0f b6 in r0, 0x3f ; 63
b4d8: f8 94 cli
b4da: 9e bf out 0x3e, r25 ; 62
b4dc: 0f be out 0x3f, r0 ; 63
b4de: 8d bf out 0x3d, r24 ; 61
if(BattAutoLandingVoltage) printf(" Autolanding: %d.%dV",BattAutoLandingVoltage/10,BattAutoLandingVoltage%10);
b4e0: 80 91 65 04 lds r24, 0x0465
b4e4: 88 23 and r24, r24
b4e6: 41 f1 breq .+80 ; 0xb538 <LipoDetection+0x218>
b4e8: 9d ec ldi r25, 0xCD ; 205
b4ea: 89 9f mul r24, r25
b4ec: 91 2d mov r25, r1
b4ee: 11 24 eor r1, r1
b4f0: 96 95 lsr r25
b4f2: 96 95 lsr r25
b4f4: 96 95 lsr r25
b4f6: 29 2f mov r18, r25
b4f8: 22 0f add r18, r18
b4fa: 32 2f mov r19, r18
b4fc: 33 0f add r19, r19
b4fe: 33 0f add r19, r19
b500: 23 0f add r18, r19
b502: 82 1b sub r24, r18
b504: 1f 92 push r1
b506: 8f 93 push r24
b508: 1f 92 push r1
b50a: 9f 93 push r25
b50c: 88 e1 ldi r24, 0x18 ; 24
b50e: 94 e0 ldi r25, 0x04 ; 4
b510: 9f 93 push r25
b512: 8f 93 push r24
b514: 87 eb ldi r24, 0xB7 ; 183
b516: 9c ea ldi r25, 0xAC ; 172
b518: 9f 93 push r25
b51a: 8f 93 push r24
b51c: e0 91 78 06 lds r30, 0x0678
b520: f0 91 79 06 lds r31, 0x0679
b524: 09 95 icall
b526: 2d b7 in r18, 0x3d ; 61
b528: 3e b7 in r19, 0x3e ; 62
b52a: 28 5f subi r18, 0xF8 ; 248
b52c: 3f 4f sbci r19, 0xFF ; 255
b52e: 0f b6 in r0, 0x3f ; 63
b530: f8 94 cli
b532: 3e bf out 0x3e, r19 ; 62
b534: 0f be out 0x3f, r0 ; 63
b536: 2d bf out 0x3d, r18 ; 61
}
}
b538: cf 91 pop r28
b53a: 08 95 ret
0000b53c <main>:
int main (void)
//############################################################################
{
unsigned int timer,i,timer2 = 0, timerPolling;
unsigned char update_spi = 1;
DDRB = 0x00;
b53c: 14 b8 out 0x04, r1 ; 4
PORTB = 0x00;
b53e: 15 b8 out 0x05, r1 ; 5
DDRD = 0x0A; // UART & J3 J4 J5
b540: 8a e0 ldi r24, 0x0A ; 10
b542: 8a b9 out 0x0a, r24 ; 10
PORTD = 0x5F; // PPM-Input & UART
b544: 8f e5 ldi r24, 0x5F ; 95
b546: 8b b9 out 0x0b, r24 ; 11
b548: 88 ee ldi r24, 0xE8 ; 232
b54a: 93 e0 ldi r25, 0x03 ; 3
b54c: 01 97 sbiw r24, 0x01 ; 1
for(timer = 0; timer < 1000; timer++); // verzögern
b54e: 00 97 sbiw r24, 0x00 ; 0
b550: e9 f7 brne .-6 ; 0xb54c <main+0x10>
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
unsigned char AccZ_ErrorCnt = 0;
if(PINB & 0x02)
b552: 19 9b sbis 0x03, 1 ; 3
b554: 0d c0 rjmp .+26 ; 0xb570 <main+0x34>
{
if(PIND & 0x10) PlatinenVersion = 21; // No Bridge from J4 to GND
b556: 4c 9b sbis 0x09, 4 ; 9
b558: 04 c0 rjmp .+8 ; 0xb562 <main+0x26>
b55a: 85 e1 ldi r24, 0x15 ; 21
b55c: 80 93 54 01 sts 0x0154, r24
b560: 0d c0 rjmp .+26 ; 0xb57c <main+0x40>
else { PlatinenVersion = 22; ACC_AltitudeControl = 1;};
b562: 86 e1 ldi r24, 0x16 ; 22
b564: 80 93 54 01 sts 0x0154, r24
b568: 81 e0 ldi r24, 0x01 ; 1
b56a: 80 93 c2 03 sts 0x03C2, r24
b56e: 06 c0 rjmp .+12 ; 0xb57c <main+0x40>
}
else
{
PlatinenVersion = 25; ACC_AltitudeControl = 1;
b570: 89 e1 ldi r24, 0x19 ; 25
b572: 80 93 54 01 sts 0x0154, r24
b576: 81 e0 ldi r24, 0x01 ; 1
b578: 80 93 c2 03 sts 0x03C2, r24
PORTD = 0x47; //
}
}
#endif
DDRC = 0x81; // I2C, Spaker
b57c: 81 e8 ldi r24, 0x81 ; 129
b57e: 87 b9 out 0x07, r24 ; 7
DDRC |=0x40; // HEF4017 Reset
b580: 3e 9a sbi 0x07, 6 ; 7
PORTC = 0xff; // Pullup SDA
b582: 8f ef ldi r24, 0xFF ; 255
b584: 88 b9 out 0x08, r24 ; 8
DDRB = 0x1B; // LEDs und Druckoffset
b586: 8b e1 ldi r24, 0x1B ; 27
b588: 84 b9 out 0x04, r24 ; 4
PORTB = 0x01; // LED_Rot
b58a: 81 e0 ldi r24, 0x01 ; 1
b58c: 85 b9 out 0x05, r24 ; 5
HEF4017Reset_ON;
b58e: 46 9a sbi 0x08, 6 ; 8
MCUSR &=~(1<<WDRF);
b590: 84 b7 in r24, 0x34 ; 52
b592: 87 7f andi r24, 0xF7 ; 247
b594: 84 bf out 0x34, r24 ; 52
WDTCSR |= (1<<WDCE)|(1<<WDE);
b596: e0 e6 ldi r30, 0x60 ; 96
b598: f0 e0 ldi r31, 0x00 ; 0
b59a: 80 81 ld r24, Z
b59c: 88 61 ori r24, 0x18 ; 24
b59e: 80 83 st Z, r24
WDTCSR = 0;
b5a0: 10 82 st Z, r1
beeptime = 2500;
b5a2: 84 ec ldi r24, 0xC4 ; 196
b5a4: 99 e0 ldi r25, 0x09 ; 9
b5a6: 90 93 ce 04 sts 0x04CE, r25
b5aa: 80 93 cd 04 sts 0x04CD, r24
StickGier = 0; PPM_in[K_GAS] = 0; StickRoll = 0; StickNick = 0;
b5ae: 10 92 11 04 sts 0x0411, r1
b5b2: 10 92 10 04 sts 0x0410, r1
b5b6: 10 92 36 08 sts 0x0836, r1
b5ba: 10 92 35 08 sts 0x0835, r1
b5be: 10 92 13 04 sts 0x0413, r1
b5c2: 10 92 12 04 sts 0x0412, r1
b5c6: 10 92 15 04 sts 0x0415, r1
b5ca: 10 92 14 04 sts 0x0414, r1
if(PlatinenVersion >= 20) GIER_GRAD_FAKTOR = 1220; else GIER_GRAD_FAKTOR = 1291; // unterschiedlich für ME und ENC
b5ce: 80 91 54 01 lds r24, 0x0154
b5d2: 84 31 cpi r24, 0x14 ; 20
b5d4: 68 f0 brcs .+26 ; 0xb5f0 <main+0xb4>
b5d6: 84 ec ldi r24, 0xC4 ; 196
b5d8: 94 e0 ldi r25, 0x04 ; 4
b5da: a0 e0 ldi r26, 0x00 ; 0
b5dc: b0 e0 ldi r27, 0x00 ; 0
b5de: 80 93 21 01 sts 0x0121, r24
b5e2: 90 93 22 01 sts 0x0122, r25
b5e6: a0 93 23 01 sts 0x0123, r26
b5ea: b0 93 24 01 sts 0x0124, r27
b5ee: 0c c0 rjmp .+24 ; 0xb608 <main+0xcc>
b5f0: 8b e0 ldi r24, 0x0B ; 11
b5f2: 95 e0 ldi r25, 0x05 ; 5
b5f4: a0 e0 ldi r26, 0x00 ; 0
b5f6: b0 e0 ldi r27, 0x00 ; 0
b5f8: 80 93 21 01 sts 0x0121, r24
b5fc: 90 93 22 01 sts 0x0122, r25
b600: a0 93 23 01 sts 0x0123, r26
b604: b0 93 24 01 sts 0x0124, r27
ROT_OFF;
b608: 28 98 cbi 0x05, 0 ; 5
GRN_ON;
b60a: 80 91 54 01 lds r24, 0x0154
b60e: 89 31 cpi r24, 0x19 ; 25
b610: 11 f4 brne .+4 ; 0xb616 <main+0xda>
b612: 29 9a sbi 0x05, 1 ; 5
b614: 01 c0 rjmp .+2 ; 0xb618 <main+0xdc>
b616: 29 98 cbi 0x05, 1 ; 5
Timer_Init();
b618: 0e 94 ba 9c call 0x13974 ; 0x13974 <Timer_Init>
TIMER2_Init();
b61c: 0e 94 93 9c call 0x13926 ; 0x13926 <TIMER2_Init>
UART_Init();
b620: 0e 94 bf ac call 0x1597e ; 0x1597e <UART_Init>
rc_sum_init();
b624: 0e 94 76 91 call 0x122ec ; 0x122ec <rc_sum_init>
ADC_Init();
b628: 0e 94 0e 1b call 0x361c ; 0x361c <ADC_Init>
I2C_Init(1);
b62c: 81 e0 ldi r24, 0x01 ; 1
b62e: 0e 94 c9 a0 call 0x14192 ; 0x14192 <I2C_Init>
SPI_MasterInit();
b632: 0e 94 bd 95 call 0x12b7a ; 0x12b7a <SPI_MasterInit>
Capacity_Init();
b636: 0e 94 b7 21 call 0x436e ; 0x436e <Capacity_Init>
LIBFC_Init(LIB_FC_COMPATIBLE);
b63a: 87 e0 ldi r24, 0x07 ; 7
b63c: 0e 94 19 19 call 0x3232 ; 0x3232 <LIBFC_Init>
GRN_ON;
b640: 80 91 54 01 lds r24, 0x0154
b644: 89 31 cpi r24, 0x19 ; 25
b646: 11 f4 brne .+4 ; 0xb64c <main+0x110>
b648: 29 9a sbi 0x05, 1 ; 5
b64a: 01 c0 rjmp .+2 ; 0xb64e <main+0x112>
b64c: 29 98 cbi 0x05, 1 ; 5
sei();
b64e: 78 94 sei
ParamSet_Init();
b650: 0e 94 af 26 call 0x4d5e ; 0x4d5e <ParamSet_Init>
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PlatinenVersion < 20)
b654: 80 91 54 01 lds r24, 0x0154
b658: 84 31 cpi r24, 0x14 ; 20
b65a: e8 f4 brcc .+58 ; 0xb696 <main+0x15a>
{
wdt_enable(WDTO_250MS); // Reset-Commando
b65c: 2c e0 ldi r18, 0x0C ; 12
b65e: 88 e1 ldi r24, 0x18 ; 24
b660: 90 e0 ldi r25, 0x00 ; 0
b662: 0f b6 in r0, 0x3f ; 63
b664: f8 94 cli
b666: a8 95 wdr
b668: 80 93 60 00 sts 0x0060, r24
b66c: 0f be out 0x3f, r0 ; 63
b66e: 20 93 60 00 sts 0x0060, r18
while(1) printf("\n\rOld FC Hardware not supported by this Firmware!");
b672: 06 ee ldi r16, 0xE6 ; 230
b674: 13 e0 ldi r17, 0x03 ; 3
b676: c7 eb ldi r28, 0xB7 ; 183
b678: dc ea ldi r29, 0xAC ; 172
b67a: 1f 93 push r17
b67c: 0f 93 push r16
b67e: df 93 push r29
b680: cf 93 push r28
b682: e0 91 78 06 lds r30, 0x0678
b686: f0 91 79 06 lds r31, 0x0679
b68a: 09 95 icall
b68c: 0f 90 pop r0
b68e: 0f 90 pop r0
b690: 0f 90 pop r0
b692: 0f 90 pop r0
b694: f2 cf rjmp .-28 ; 0xb67a <main+0x13e>
#ifndef REDUNDANT_FC_SLAVE
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Check connected BL-Ctrls
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Check connected BL-Ctrls
BLFlags |= BLFLAG_READ_VERSION;
b696: 80 91 de 04 lds r24, 0x04DE
b69a: 82 60 ori r24, 0x02 ; 2
b69c: 80 93 de 04 sts 0x04DE, r24
motor_read = 0; // read the first I2C-Data
b6a0: 10 92 e1 04 sts 0x04E1, r1
b6a4: c4 ef ldi r28, 0xF4 ; 244
b6a6: d1 e0 ldi r29, 0x01 ; 1
for(i=0; i < 500; i++)
{
SendMotorData();
b6a8: 0e 94 c7 33 call 0x678e ; 0x678e <SendMotorData>
timer = SetDelay(5);
b6ac: 85 e0 ldi r24, 0x05 ; 5
b6ae: 90 e0 ldi r25, 0x00 ; 0
b6b0: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
b6b4: 5c 01 movw r10, r24
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
b6b6: 80 91 de 04 lds r24, 0x04DE
b6ba: 80 fd sbrc r24, 0
b6bc: 05 c0 rjmp .+10 ; 0xb6c8 <main+0x18c>
b6be: c5 01 movw r24, r10
b6c0: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
b6c4: 88 23 and r24, r24
b6c6: b9 f3 breq .-18 ; 0xb6b6 <main+0x17a>
b6c8: 21 97 sbiw r28, 0x01 ; 1
// + Check connected BL-Ctrls
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Check connected BL-Ctrls
BLFlags |= BLFLAG_READ_VERSION;
motor_read = 0; // read the first I2C-Data
for(i=0; i < 500; i++)
b6ca: 20 97 sbiw r28, 0x00 ; 0
b6cc: 69 f7 brne .-38 ; 0xb6a8 <main+0x16c>
{
SendMotorData();
timer = SetDelay(5);
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
}
printf("\n\rFound BL-Ctrl: ");
b6ce: 84 ed ldi r24, 0xD4 ; 212
b6d0: 93 e0 ldi r25, 0x03 ; 3
b6d2: 9f 93 push r25
b6d4: 8f 93 push r24
b6d6: 87 eb ldi r24, 0xB7 ; 183
b6d8: 9c ea ldi r25, 0xAC ; 172
b6da: 9f 93 push r25
b6dc: 8f 93 push r24
b6de: e0 91 78 06 lds r30, 0x0678
b6e2: f0 91 79 06 lds r31, 0x0679
b6e6: 09 95 icall
b6e8: 0f 2e mov r0, r31
b6ea: f4 ea ldi r31, 0xA4 ; 164
b6ec: ef 2e mov r14, r31
b6ee: f9 e0 ldi r31, 0x09 ; 9
b6f0: ff 2e mov r15, r31
b6f2: f0 2d mov r31, r0
b6f4: 0f 90 pop r0
b6f6: 0f 90 pop r0
b6f8: 0f 90 pop r0
b6fa: 0f 90 pop r0
b6fc: ca e9 ldi r28, 0x9A ; 154
b6fe: d9 e0 ldi r29, 0x09 ; 9
b700: 0f 2e mov r0, r31
b702: f4 ed ldi r31, 0xD4 ; 212
b704: cf 2e mov r12, r31
b706: f5 e0 ldi r31, 0x05 ; 5
b708: df 2e mov r13, r31
b70a: f0 2d mov r31, r0
b70c: 01 e0 ldi r16, 0x01 ; 1
b70e: 10 e0 ldi r17, 0x00 ; 0
}
}
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK)
{
unsigned char vers;
printf("%d",(i+1)%10);
b710: 0f 2e mov r0, r31
b712: f1 ed ldi r31, 0xD1 ; 209
b714: 2f 2e mov r2, r31
b716: f3 e0 ldi r31, 0x03 ; 3
b718: 3f 2e mov r3, r31
b71a: f0 2d mov r31, r0
b71c: 0f 2e mov r0, r31
b71e: f7 eb ldi r31, 0xB7 ; 183
b720: 4f 2e mov r4, r31
b722: fc ea ldi r31, 0xAC ; 172
b724: 5f 2e mov r5, r31
b726: f0 2d mov r31, r0
FoundMotors++;
vers = Motor[i].VersionMajor * 100 + Motor[i].VersionMinor; // creates 104 from 1.04
b728: 0f 2e mov r0, r31
b72a: f4 e6 ldi r31, 0x64 ; 100
b72c: 9f 2e mov r9, r31
b72e: f0 2d mov r31, r0
if(vers && VersionInfo.BL_Firmware > vers) VersionInfo.BL_Firmware = vers;
b730: 0f 2e mov r0, r31
b732: f5 e6 ldi r31, 0x65 ; 101
b734: 6f 2e mov r6, r31
b736: fa e0 ldi r31, 0x0A ; 10
b738: 7f 2e mov r7, r31
b73a: f0 2d mov r31, r0
// timer = SetDelay(1000);
for(i=0; i < MAX_MOTORS; i++)
{
// SendMotorData();
// while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
if(Mixer.Motor[i][0] > 0) // wait max 4 sec for the BL-Ctrls to wake up
b73c: f6 01 movw r30, r12
b73e: 80 81 ld r24, Z
b740: 18 16 cp r1, r24
b742: 64 f0 brlt .+24 ; 0xb75c <main+0x220>
b744: 14 c0 rjmp .+40 ; 0xb76e <main+0x232>
{
while(!CheckDelay(timer) && !(Motor[i].State & MOTOR_STATE_PRESENT_MASK) )
{
SendMotorData();
b746: 0e 94 c7 33 call 0x678e ; 0x678e <SendMotorData>
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
b74a: 80 91 de 04 lds r24, 0x04DE
b74e: 80 fd sbrc r24, 0
b750: 05 c0 rjmp .+10 ; 0xb75c <main+0x220>
b752: c5 01 movw r24, r10
b754: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
b758: 88 23 and r24, r24
b75a: b9 f3 breq .-18 ; 0xb74a <main+0x20e>
{
// SendMotorData();
// while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
if(Mixer.Motor[i][0] > 0) // wait max 4 sec for the BL-Ctrls to wake up
{
while(!CheckDelay(timer) && !(Motor[i].State & MOTOR_STATE_PRESENT_MASK) )
b75c: c5 01 movw r24, r10
b75e: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
b762: 81 11 cpse r24, r1
b764: 04 c0 rjmp .+8 ; 0xb76e <main+0x232>
b766: 88 81 ld r24, Y
b768: 88 23 and r24, r24
b76a: 6c f7 brge .-38 ; 0xb746 <main+0x20a>
b76c: 04 c0 rjmp .+8 ; 0xb776 <main+0x23a>
{
SendMotorData();
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
}
}
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK)
b76e: 88 81 ld r24, Y
b770: 88 23 and r24, r24
b772: 0c f0 brlt .+2 ; 0xb776 <main+0x23a>
b774: 3f c0 rjmp .+126 ; 0xb7f4 <main+0x2b8>
{
unsigned char vers;
printf("%d",(i+1)%10);
b776: 98 01 movw r18, r16
b778: ad ec ldi r26, 0xCD ; 205
b77a: bc ec ldi r27, 0xCC ; 204
b77c: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
b780: 96 95 lsr r25
b782: 87 95 ror r24
b784: 96 95 lsr r25
b786: 87 95 ror r24
b788: 96 95 lsr r25
b78a: 87 95 ror r24
b78c: 9c 01 movw r18, r24
b78e: 22 0f add r18, r18
b790: 33 1f adc r19, r19
b792: 88 0f add r24, r24
b794: 99 1f adc r25, r25
b796: 88 0f add r24, r24
b798: 99 1f adc r25, r25
b79a: 88 0f add r24, r24
b79c: 99 1f adc r25, r25
b79e: 82 0f add r24, r18
b7a0: 93 1f adc r25, r19
b7a2: 98 01 movw r18, r16
b7a4: 28 1b sub r18, r24
b7a6: 39 0b sbc r19, r25
b7a8: c9 01 movw r24, r18
b7aa: 9f 93 push r25
b7ac: 2f 93 push r18
b7ae: 3f 92 push r3
b7b0: 2f 92 push r2
b7b2: 5f 92 push r5
b7b4: 4f 92 push r4
b7b6: e0 91 78 06 lds r30, 0x0678
b7ba: f0 91 79 06 lds r31, 0x0679
b7be: 09 95 icall
FoundMotors++;
b7c0: 80 91 5d 04 lds r24, 0x045D
b7c4: 8f 5f subi r24, 0xFF ; 255
b7c6: 80 93 5d 04 sts 0x045D, r24
b7ca: f7 01 movw r30, r14
b7cc: 31 97 sbiw r30, 0x01 ; 1
vers = Motor[i].VersionMajor * 100 + Motor[i].VersionMinor; // creates 104 from 1.04
b7ce: 90 81 ld r25, Z
b7d0: f7 01 movw r30, r14
b7d2: 80 81 ld r24, Z
b7d4: 99 9d mul r25, r9
b7d6: 80 0d add r24, r0
b7d8: 11 24 eor r1, r1
if(vers && VersionInfo.BL_Firmware > vers) VersionInfo.BL_Firmware = vers;
b7da: 0f 90 pop r0
b7dc: 0f 90 pop r0
b7de: 0f 90 pop r0
b7e0: 0f 90 pop r0
b7e2: 0f 90 pop r0
b7e4: 0f 90 pop r0
b7e6: 88 23 and r24, r24
b7e8: 29 f0 breq .+10 ; 0xb7f4 <main+0x2b8>
b7ea: f3 01 movw r30, r6
b7ec: 90 81 ld r25, Z
b7ee: 89 17 cp r24, r25
b7f0: 08 f4 brcc .+2 ; 0xb7f4 <main+0x2b8>
b7f2: 80 83 st Z, r24
b7f4: 0f 5f subi r16, 0xFF ; 255
b7f6: 1f 4f sbci r17, 0xFF ; 255
b7f8: f4 e0 ldi r31, 0x04 ; 4
b7fa: cf 0e add r12, r31
b7fc: d1 1c adc r13, r1
b7fe: 2f 96 adiw r28, 0x0f ; 15
b800: 2f e0 ldi r18, 0x0F ; 15
b802: e2 0e add r14, r18
b804: f1 1c adc r15, r1
timer = SetDelay(5);
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
}
printf("\n\rFound BL-Ctrl: ");
// timer = SetDelay(1000);
for(i=0; i < MAX_MOTORS; i++)
b806: 0d 30 cpi r16, 0x0D ; 13
b808: 11 05 cpc r17, r1
b80a: 09 f0 breq .+2 ; 0xb80e <main+0x2d2>
b80c: 97 cf rjmp .-210 ; 0xb73c <main+0x200>
b80e: 0f 2e mov r0, r31
b810: f4 ed ldi r31, 0xD4 ; 212
b812: ef 2e mov r14, r31
b814: f5 e0 ldi r31, 0x05 ; 5
b816: ff 2e mov r15, r31
b818: f0 2d mov r31, r0
b81a: 0a e9 ldi r16, 0x9A ; 154
b81c: 19 e0 ldi r17, 0x09 ; 9
b81e: c1 e0 ldi r28, 0x01 ; 1
b820: d0 e0 ldi r29, 0x00 ; 0
}
for(i=0; i < MAX_MOTORS; i++)
{
if(!(Motor[i].State & MOTOR_STATE_PRESENT_MASK) && Mixer.Motor[i][0] > 0)
{
printf("\n\r\n\r!! MISSING BL-CTRL: %d !!",i+1);
b822: 0f 2e mov r0, r31
b824: f3 eb ldi r31, 0xB3 ; 179
b826: af 2e mov r10, r31
b828: f3 e0 ldi r31, 0x03 ; 3
b82a: bf 2e mov r11, r31
b82c: f0 2d mov r31, r0
b82e: 0f 2e mov r0, r31
b830: f7 eb ldi r31, 0xB7 ; 183
b832: cf 2e mov r12, r31
b834: fc ea ldi r31, 0xAC ; 172
b836: df 2e mov r13, r31
b838: f0 2d mov r31, r0
ServoActive = 2; // just in case the FC would be used as camera-stabilizer
b83a: 68 94 set
b83c: 77 24 eor r7, r7
b83e: 71 f8 bld r7, 1
b840: 48 01 movw r8, r16
// printf(":V%03d\n\r",vers);
}
}
for(i=0; i < MAX_MOTORS; i++)
{
if(!(Motor[i].State & MOTOR_STATE_PRESENT_MASK) && Mixer.Motor[i][0] > 0)
b842: f8 01 movw r30, r16
b844: 80 81 ld r24, Z
b846: 88 23 and r24, r24
b848: bc f0 brlt .+46 ; 0xb878 <main+0x33c>
b84a: f7 01 movw r30, r14
b84c: 80 81 ld r24, Z
b84e: 18 16 cp r1, r24
b850: 9c f4 brge .+38 ; 0xb878 <main+0x33c>
{
printf("\n\r\n\r!! MISSING BL-CTRL: %d !!",i+1);
b852: df 93 push r29
b854: cf 93 push r28
b856: bf 92 push r11
b858: af 92 push r10
b85a: df 92 push r13
b85c: cf 92 push r12
b85e: e0 91 78 06 lds r30, 0x0678
b862: f0 91 79 06 lds r31, 0x0679
b866: 09 95 icall
ServoActive = 2; // just in case the FC would be used as camera-stabilizer
b868: 70 92 cb 04 sts 0x04CB, r7
b86c: 0f 90 pop r0
b86e: 0f 90 pop r0
b870: 0f 90 pop r0
b872: 0f 90 pop r0
b874: 0f 90 pop r0
b876: 0f 90 pop r0
}
Motor[i].State &= ~MOTOR_STATE_ERROR_MASK; // clear error counter
b878: f4 01 movw r30, r8
b87a: 80 81 ld r24, Z
b87c: 80 78 andi r24, 0x80 ; 128
b87e: 80 83 st Z, r24
b880: 21 96 adiw r28, 0x01 ; 1
b882: 01 5f subi r16, 0xF1 ; 241
b884: 1f 4f sbci r17, 0xFF ; 255
b886: f4 e0 ldi r31, 0x04 ; 4
b888: ef 0e add r14, r31
b88a: f1 1c adc r15, r1
// if(Motor[i].Version & MOTOR_STATE_FAST_MODE) printf("(fast)\n\r");
// else if(Motor[i].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) printf("(new)\n\r");
// printf(":V%03d\n\r",vers);
}
}
for(i=0; i < MAX_MOTORS; i++)
b88c: cd 30 cpi r28, 0x0D ; 13
b88e: d1 05 cpc r29, r1
b890: b9 f6 brne .-82 ; 0xb840 <main+0x304>
ServoActive = 2; // just in case the FC would be used as camera-stabilizer
}
Motor[i].State &= ~MOTOR_STATE_ERROR_MASK; // clear error counter
}
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(VersionInfo.BL_Firmware != 255)
b892: 80 91 65 0a lds r24, 0x0A65
b896: 8f 3f cpi r24, 0xFF ; 255
b898: d1 f1 breq .+116 ; 0xb90e <main+0x3d2>
{
printf("\n\rBL-Firmware %d.%02d",VersionInfo.BL_Firmware/100,VersionInfo.BL_Firmware%100);
b89a: 99 e2 ldi r25, 0x29 ; 41
b89c: 89 9f mul r24, r25
b89e: 91 2d mov r25, r1
b8a0: 11 24 eor r1, r1
b8a2: 92 95 swap r25
b8a4: 9f 70 andi r25, 0x0F ; 15
b8a6: 24 e6 ldi r18, 0x64 ; 100
b8a8: 92 9f mul r25, r18
b8aa: 80 19 sub r24, r0
b8ac: 11 24 eor r1, r1
b8ae: 1f 92 push r1
b8b0: 8f 93 push r24
b8b2: 1f 92 push r1
b8b4: 9f 93 push r25
b8b6: 8d e9 ldi r24, 0x9D ; 157
b8b8: 93 e0 ldi r25, 0x03 ; 3
b8ba: 9f 93 push r25
b8bc: 8f 93 push r24
b8be: 87 eb ldi r24, 0xB7 ; 183
b8c0: 9c ea ldi r25, 0xAC ; 172
b8c2: 9f 93 push r25
b8c4: 8f 93 push r24
b8c6: e0 91 78 06 lds r30, 0x0678
b8ca: f0 91 79 06 lds r31, 0x0679
b8ce: 09 95 icall
if(VersionInfo.BL_Firmware >= 100 && VersionInfo.BL_Firmware <= 102) printf("<-- warning old Version!");
b8d0: 80 91 65 0a lds r24, 0x0A65
b8d4: 84 56 subi r24, 0x64 ; 100
b8d6: 4d b7 in r20, 0x3d ; 61
b8d8: 5e b7 in r21, 0x3e ; 62
b8da: 48 5f subi r20, 0xF8 ; 248
b8dc: 5f 4f sbci r21, 0xFF ; 255
b8de: 0f b6 in r0, 0x3f ; 63
b8e0: f8 94 cli
b8e2: 5e bf out 0x3e, r21 ; 62
b8e4: 0f be out 0x3f, r0 ; 63
b8e6: 4d bf out 0x3d, r20 ; 61
b8e8: 83 30 cpi r24, 0x03 ; 3
b8ea: 88 f4 brcc .+34 ; 0xb90e <main+0x3d2>
b8ec: 84 e8 ldi r24, 0x84 ; 132
b8ee: 93 e0 ldi r25, 0x03 ; 3
b8f0: 9f 93 push r25
b8f2: 8f 93 push r24
b8f4: 87 eb ldi r24, 0xB7 ; 183
b8f6: 9c ea ldi r25, 0xAC ; 172
b8f8: 9f 93 push r25
b8fa: 8f 93 push r24
b8fc: e0 91 78 06 lds r30, 0x0678
b900: f0 91 79 06 lds r31, 0x0679
b904: 09 95 icall
b906: 0f 90 pop r0
b908: 0f 90 pop r0
b90a: 0f 90 pop r0
b90c: 0f 90 pop r0
}
#endif
PrintLine();// ("\n\r===================================");
b90e: c3 dc rcall .-1658 ; 0xb296 <PrintLine>
if(RequiredMotors < FoundMotors) VersionInfo.HardwareError[1] |= FC_ERROR1_MIXER;
b910: 80 91 3d 05 lds r24, 0x053D
b914: 90 91 5d 04 lds r25, 0x045D
b918: 89 17 cp r24, r25
b91a: 28 f4 brcc .+10 ; 0xb926 <main+0x3ea>
b91c: e3 e6 ldi r30, 0x63 ; 99
b91e: fa e0 ldi r31, 0x0A ; 10
b920: 90 81 ld r25, Z
b922: 90 61 ori r25, 0x10 ; 16
b924: 90 83 st Z, r25
if(RequiredMotors > 8) Max_I2C_Packets = 8; else Max_I2C_Packets = RequiredMotors;
b926: 89 30 cpi r24, 0x09 ; 9
b928: 20 f0 brcs .+8 ; 0xb932 <main+0x3f6>
b92a: 88 e0 ldi r24, 0x08 ; 8
b92c: 80 93 b2 02 sts 0x02B2, r24
b930: 02 c0 rjmp .+4 ; 0xb936 <main+0x3fa>
b932: 80 93 b2 02 sts 0x02B2, r24
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Calibrating altitude sensor
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rCalibrating pressure sensor..");
b936: 84 e6 ldi r24, 0x64 ; 100
b938: 93 e0 ldi r25, 0x03 ; 3
b93a: 9f 93 push r25
b93c: 8f 93 push r24
b93e: 87 eb ldi r24, 0xB7 ; 183
b940: 9c ea ldi r25, 0xAC ; 172
b942: 9f 93 push r25
b944: 8f 93 push r24
b946: e0 91 78 06 lds r30, 0x0678
b94a: f0 91 79 06 lds r31, 0x0679
b94e: 09 95 icall
timer = SetDelay(1000);
b950: 88 ee ldi r24, 0xE8 ; 232
b952: 93 e0 ldi r25, 0x03 ; 3
b954: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
b958: ec 01 movw r28, r24
SucheLuftruckOffset();
b95a: 0e 94 4b 1b call 0x3696 ; 0x3696 <SucheLuftruckOffset>
while (!CheckDelay(timer));
b95e: 0f 90 pop r0
b960: 0f 90 pop r0
b962: 0f 90 pop r0
b964: 0f 90 pop r0
b966: ce 01 movw r24, r28
b968: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
b96c: 88 23 and r24, r24
b96e: d9 f3 breq .-10 ; 0xb966 <main+0x42a>
printf("OK\n\r");
b970: 8f e5 ldi r24, 0x5F ; 95
b972: 93 e0 ldi r25, 0x03 ; 3
b974: 9f 93 push r25
b976: 8f 93 push r24
b978: 87 eb ldi r24, 0xB7 ; 183
b97a: 9c ea ldi r25, 0xAC ; 172
b97c: 9f 93 push r25
b97e: 8f 93 push r24
b980: e0 91 78 06 lds r30, 0x0678
b984: f0 91 79 06 lds r31, 0x0679
b988: 09 95 icall
#ifdef REDUNDANT_FC_SLAVE
VersionInfo.HardwareError[0] = 0;
VersionInfo.HardwareError[1] = 0;
#endif
SetNeutral(0);
b98a: 80 e0 ldi r24, 0x00 ; 0
b98c: 0e 94 53 29 call 0x52a6 ; 0x52a6 <SetNeutral>
ROT_OFF;
b990: 28 98 cbi 0x05, 0 ; 5
beeptime = 2000;
b992: 80 ed ldi r24, 0xD0 ; 208
b994: 97 e0 ldi r25, 0x07 ; 7
b996: 90 93 ce 04 sts 0x04CE, r25
b99a: 80 93 cd 04 sts 0x04CD, r24
ExternControl.Digital[0] = 0x55;
b99e: 85 e5 ldi r24, 0x55 ; 85
b9a0: 80 93 7f 0a sts 0x0A7F, r24
FlugMinuten = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES + 1);
b9a4: 8e e0 ldi r24, 0x0E ; 14
b9a6: 90 e0 ldi r25, 0x00 ; 0
b9a8: 0e 94 42 25 call 0x4a84 ; 0x4a84 <GetParamByte>
b9ac: c8 2f mov r28, r24
b9ae: 8f e0 ldi r24, 0x0F ; 15
b9b0: 90 e0 ldi r25, 0x00 ; 0
b9b2: 0e 94 42 25 call 0x4a84 ; 0x4a84 <GetParamByte>
b9b6: 2c 2f mov r18, r28
b9b8: 30 e0 ldi r19, 0x00 ; 0
b9ba: 32 2f mov r19, r18
b9bc: 22 27 eor r18, r18
b9be: 28 0f add r18, r24
b9c0: 31 1d adc r19, r1
b9c2: 30 93 63 04 sts 0x0463, r19
b9c6: 20 93 62 04 sts 0x0462, r18
FlugMinutenGesamt = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL + 1);
b9ca: 8a e0 ldi r24, 0x0A ; 10
b9cc: 90 e0 ldi r25, 0x00 ; 0
b9ce: 0e 94 42 25 call 0x4a84 ; 0x4a84 <GetParamByte>
b9d2: c8 2f mov r28, r24
b9d4: 8b e0 ldi r24, 0x0B ; 11
b9d6: 90 e0 ldi r25, 0x00 ; 0
b9d8: 0e 94 42 25 call 0x4a84 ; 0x4a84 <GetParamByte>
b9dc: 2c 2f mov r18, r28
b9de: 30 e0 ldi r19, 0x00 ; 0
b9e0: 32 2f mov r19, r18
b9e2: 22 27 eor r18, r18
b9e4: f9 01 movw r30, r18
b9e6: e8 0f add r30, r24
b9e8: f1 1d adc r31, r1
b9ea: cf 01 movw r24, r30
b9ec: f0 93 61 04 sts 0x0461, r31
b9f0: e0 93 60 04 sts 0x0460, r30
if((FlugMinutenGesamt == 0xFFFF) || (FlugMinuten == 0xFFFF))
b9f4: 0f 90 pop r0
b9f6: 0f 90 pop r0
b9f8: 0f 90 pop r0
b9fa: 0f 90 pop r0
b9fc: 01 96 adiw r24, 0x01 ; 1
b9fe: 31 f0 breq .+12 ; 0xba0c <main+0x4d0>
ba00: 80 91 62 04 lds r24, 0x0462
ba04: 90 91 63 04 lds r25, 0x0463
ba08: 01 96 adiw r24, 0x01 ; 1
ba0a: 41 f4 brne .+16 ; 0xba1c <main+0x4e0>
{
FlugMinuten = 0;
ba0c: 10 92 63 04 sts 0x0463, r1
ba10: 10 92 62 04 sts 0x0462, r1
FlugMinutenGesamt = 0;
ba14: 10 92 61 04 sts 0x0461, r1
ba18: 10 92 60 04 sts 0x0460, r1
}
printf("\n\rFlight-time %u min Total:%u min", FlugMinuten, FlugMinutenGesamt);
ba1c: 80 91 61 04 lds r24, 0x0461
ba20: 8f 93 push r24
ba22: 80 91 60 04 lds r24, 0x0460
ba26: 8f 93 push r24
ba28: 80 91 63 04 lds r24, 0x0463
ba2c: 8f 93 push r24
ba2e: 80 91 62 04 lds r24, 0x0462
ba32: 8f 93 push r24
ba34: 8d e3 ldi r24, 0x3D ; 61
ba36: 93 e0 ldi r25, 0x03 ; 3
ba38: 9f 93 push r25
ba3a: 8f 93 push r24
ba3c: 87 eb ldi r24, 0xB7 ; 183
ba3e: 9c ea ldi r25, 0xAC ; 172
ba40: 9f 93 push r25
ba42: 8f 93 push r24
ba44: e0 91 78 06 lds r30, 0x0678
ba48: f0 91 79 06 lds r31, 0x0679
ba4c: 09 95 icall
LcdClear();
ba4e: 0e 94 1d 87 call 0x10e3a ; 0x10e3a <LcdClear>
I2CTimeout = 5000;
ba52: 88 e8 ldi r24, 0x88 ; 136
ba54: 93 e1 ldi r25, 0x13 ; 19
ba56: 90 93 b1 02 sts 0x02B1, r25
ba5a: 80 93 b0 02 sts 0x02B0, r24
WinkelOut.Orientation = 1;
ba5e: 81 e0 ldi r24, 0x01 ; 1
ba60: 80 93 7e 0a sts 0x0A7E, r24
LipoDetection(1);
ba64: 5d dc rcall .-1862 ; 0xb320 <LipoDetection>
LIBFC_ReceiverInit(EE_Parameter.Receiver);
ba66: 80 91 65 05 lds r24, 0x0565
ba6a: 0e 94 68 18 call 0x30d0 ; 0x30d0 <LIBFC_ReceiverInit>
PrintLine();// ("\n\r===================================");
ba6e: 13 dc rcall .-2010 ; 0xb296 <PrintLine>
//SpektrumBinding();
timer = SetDelay(2000);
ba70: 80 ed ldi r24, 0xD0 ; 208
ba72: 97 e0 ldi r25, 0x07 ; 7
ba74: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
ba78: 4c 01 movw r8, r24
timerPolling = SetDelay(250);
ba7a: 8a ef ldi r24, 0xFA ; 250
ba7c: 90 e0 ldi r25, 0x00 ; 0
ba7e: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
Debug(ANSI_CLEAR "FC-Start!\n\rFlugzeit: %d min", FlugMinutenGesamt); // Note: this won't waste flash memory, if #DEBUG is not active
ba82: 80 91 61 04 lds r24, 0x0461
ba86: 8f 93 push r24
ba88: 80 91 60 04 lds r24, 0x0460
ba8c: 8f 93 push r24
ba8e: 8d e1 ldi r24, 0x1D ; 29
ba90: 93 e0 ldi r25, 0x03 ; 3
ba92: 9f 93 push r25
ba94: 8f 93 push r24
ba96: 88 e1 ldi r24, 0x18 ; 24
ba98: 93 e2 ldi r25, 0x23 ; 35
ba9a: 9f 93 push r25
ba9c: 8f 93 push r24
ba9e: e0 91 78 06 lds r30, 0x0678
baa2: f0 91 79 06 lds r31, 0x0679
baa6: 09 95 icall
baa8: 80 e0 ldi r24, 0x00 ; 0
baaa: 0e 94 2c 23 call 0x4658 ; 0x4658 <DebugSend>
//printf("\n\rEE_Parameter size:%i\n\r", PARAMSET_STRUCT_LEN);
DebugOut.Status[0] = 0x01 | 0x02;
baae: 83 e0 ldi r24, 0x03 ; 3
bab0: 80 93 46 0c sts 0x0C46, r24
JetiBeep = 0;
bab4: 10 92 5c 04 sts 0x045C, r1
if(EE_Parameter.ExtraConfig & CFG_NO_RCOFF_BEEPING) DisableRcOffBeeping = 1;
bab8: 80 91 b8 05 lds r24, 0x05B8
babc: 4d b7 in r20, 0x3d ; 61
babe: 5e b7 in r21, 0x3e ; 62
bac0: 42 5f subi r20, 0xF2 ; 242
bac2: 5f 4f sbci r21, 0xFF ; 255
bac4: 0f b6 in r0, 0x3f ; 63
bac6: f8 94 cli
bac8: 5e bf out 0x3e, r21 ; 62
baca: 0f be out 0x3f, r0 ; 63
bacc: 4d bf out 0x3d, r20 ; 61
bace: 84 ff sbrs r24, 4
bad0: 03 c0 rjmp .+6 ; 0xbad8 <main+0x59c>
bad2: 81 e0 ldi r24, 0x01 ; 1
bad4: 80 93 66 04 sts 0x0466, r24
ReadBlSize = 3; // don't read the version any more
bad8: 83 e0 ldi r24, 0x03 ; 3
bada: 80 93 b3 02 sts 0x02B3, r24
PORTB = 0x00;
DDRD = 0x0A; // UART & J3 J4 J5
PORTD = 0x5F; // PPM-Input & UART
for(timer = 0; timer < 1000; timer++); // verzögern
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
unsigned char AccZ_ErrorCnt = 0;
bade: 61 2c mov r6, r1
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer,i,timer2 = 0, timerPolling;
unsigned char update_spi = 1;
bae0: 77 24 eor r7, r7
bae2: 73 94 inc r7
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer,i,timer2 = 0, timerPolling;
bae4: c0 e0 ldi r28, 0x00 ; 0
bae6: d0 e0 ldi r29, 0x00 ; 0
if(UpdateMotor && AdReady) // ReglerIntervall
{
cli();
UpdateMotor--;
sei();
if(WinkelOut.CalcState) CalMk3Mag();
bae8: 0f 2e mov r0, r31
baea: fd e7 ldi r31, 0x7D ; 125
baec: af 2e mov r10, r31
baee: fa e0 ldi r31, 0x0A ; 10
baf0: bf 2e mov r11, r31
baf2: f0 2d mov r31, r0
{
static unsigned char second;
timer += 20; // 20 ms interval
CalcNickServoValue();
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(EE_Parameter.Receiver == RECEIVER_HOTT) HoTT_Menu();
baf4: 0f 2e mov r0, r31
baf6: f5 e6 ldi r31, 0x65 ; 101
baf8: cf 2e mov r12, r31
bafa: f5 e0 ldi r31, 0x05 ; 5
bafc: df 2e mov r13, r31
bafe: f0 2d mov r31, r0
if(UBat <= BattLowVoltageWarning)
{
FC_StatusFlags |= FC_STATUS_LOWBAT;
if(BeepMuster == 0xffff && UBat > 10) // Do not beep, if the voltage reading is below 1V (Supplied via MKUSB)
{
beeptime = 6000;
bb00: 0f 2e mov r0, r31
bb02: f0 e7 ldi r31, 0x70 ; 112
bb04: ef 2e mov r14, r31
bb06: f7 e1 ldi r31, 0x17 ; 23
bb08: ff 2e mov r15, r31
bb0a: f0 2d mov r31, r0
GPS_Roll = 0;
GPS_Aid_StickMultiplikator = 0;
GPSInfo.Flags = 0;
FromNaviCtrl_Value.Kalman_K = -1;
FromNaviCtrl.AccErrorN = 0;
FromNaviCtrl.AccErrorR = 0;
bb0c: 0f 2e mov r0, r31
bb0e: f7 e1 ldi r31, 0x17 ; 23
bb10: 2f 2e mov r2, r31
bb12: f9 e0 ldi r31, 0x09 ; 9
bb14: 3f 2e mov r3, r31
bb16: f0 2d mov r31, r0
FromNaviCtrl.CompassValue = -1;
bb18: 0f 2e mov r0, r31
bb1a: f3 e1 ldi r31, 0x13 ; 19
bb1c: 4f 2e mov r4, r31
bb1e: f9 e0 ldi r31, 0x09 ; 9
bb20: 5f 2e mov r5, r31
bb22: f0 2d mov r31, r0
bb24: 17 2d mov r17, r7
bb26: 06 2d mov r16, r6
bb28: 03 c0 rjmp .+6 ; 0xbb30 <main+0x5f4>
} //else DebugOut.Analog[18]++;
if(update_spi) update_spi--;
} // 500Hz
if(update_spi == 0) // 41Hz
{
if(SPI_StartTransmitPacket()) update_spi = 12;
bb2a: 1c e0 ldi r17, 0x0C ; 12
bb2c: 01 c0 rjmp .+2 ; 0xbb30 <main+0x5f4>
bb2e: 10 e0 ldi r17, 0x00 ; 0
while(!CheckDelay(timer));
printf("\n\rStart\n\r");
#endif
while(1)
{
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space
bb30: 12 bc out 0x22, r1 ; 34
bb32: 11 bc out 0x21, r1 ; 33
if(ReceiverUpdateModeActive) while (1) PORTC &= ~(1<<7); // Beeper off
bb34: 80 91 ec 04 lds r24, 0x04EC
bb38: 88 23 and r24, r24
bb3a: 11 f0 breq .+4 ; 0xbb40 <main+0x604>
bb3c: 47 98 cbi 0x08, 7 ; 8
bb3e: fe cf rjmp .-4 ; 0xbb3c <main+0x600>
if(UpdateMotor && AdReady) // ReglerIntervall
bb40: 80 91 d1 04 lds r24, 0x04D1
bb44: 88 23 and r24, r24
bb46: 09 f4 brne .+2 ; 0xbb4a <main+0x60e>
bb48: bf c2 rjmp .+1406 ; 0xc0c8 <main+0xb8c>
bb4a: 80 91 0f 01 lds r24, 0x010F
bb4e: 88 23 and r24, r24
bb50: 09 f4 brne .+2 ; 0xbb54 <main+0x618>
bb52: ba c2 rjmp .+1396 ; 0xc0c8 <main+0xb8c>
{
cli();
bb54: f8 94 cli
UpdateMotor--;
bb56: 80 91 d1 04 lds r24, 0x04D1
bb5a: 81 50 subi r24, 0x01 ; 1
bb5c: 80 93 d1 04 sts 0x04D1, r24
sei();
bb60: 78 94 sei
if(WinkelOut.CalcState) CalMk3Mag();
bb62: f5 01 movw r30, r10
bb64: 80 81 ld r24, Z
bb66: 88 23 and r24, r24
bb68: 11 f0 breq .+4 ; 0xbb6e <main+0x632>
bb6a: a7 db rcall .-2226 ; 0xb2ba <CalMk3Mag>
bb6c: 02 c0 rjmp .+4 ; 0xbb72 <main+0x636>
else MotorRegler();
bb6e: 0e 94 06 38 call 0x700c ; 0x700c <MotorRegler>
SendMotorData();
bb72: 0e 94 c7 33 call 0x678e ; 0x678e <SendMotorData>
ROT_OFF;
bb76: 28 98 cbi 0x05, 0 ; 5
if(SenderOkay) { SenderOkay--; /*VersionInfo.HardwareError[1] &= ~FC_ERROR1_PPM;*/ }
bb78: 80 91 04 04 lds r24, 0x0404
bb7c: 88 23 and r24, r24
bb7e: 31 f0 breq .+12 ; 0xbb8c <main+0x650>
bb80: 80 91 04 04 lds r24, 0x0404
bb84: 81 50 subi r24, 0x01 ; 1
bb86: 80 93 04 04 sts 0x0404, r24
bb8a: 3e c0 rjmp .+124 ; 0xbc08 <main+0x6cc>
else
{
TIMSK1 |= _BV(ICIE1); // enable PPM-Input
bb8c: ef e6 ldi r30, 0x6F ; 111
bb8e: f0 e0 ldi r31, 0x00 ; 0
bb90: 80 81 ld r24, Z
bb92: 80 62 ori r24, 0x20 ; 32
bb94: 80 83 st Z, r24
PPM_in[0] = 0; // set RSSI to zero on data timeout
bb96: 10 92 32 08 sts 0x0832, r1
bb9a: 10 92 31 08 sts 0x0831, r1
VersionInfo.HardwareError[1] |= FC_ERROR1_PPM;
bb9e: e3 e6 ldi r30, 0x63 ; 99
bba0: fa e0 ldi r31, 0x0A ; 10
bba2: 80 81 ld r24, Z
bba4: 88 60 ori r24, 0x08 ; 8
bba6: 80 83 st Z, r24
// Now clear the channel values - they would be wrong
PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
bba8: 20 91 3f 05 lds r18, 0x053F
bbac: 30 e0 ldi r19, 0x00 ; 0
bbae: 22 0f add r18, r18
bbb0: 33 1f adc r19, r19
bbb2: f9 01 movw r30, r18
bbb4: e9 58 subi r30, 0x89 ; 137
bbb6: f7 4f sbci r31, 0xF7 ; 247
bbb8: 11 82 std Z+1, r1 ; 0x01
bbba: 10 82 st Z, r1
PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
bbbc: 80 91 40 05 lds r24, 0x0540
bbc0: 90 e0 ldi r25, 0x00 ; 0
bbc2: 88 0f add r24, r24
bbc4: 99 1f adc r25, r25
bbc6: fc 01 movw r30, r24
bbc8: e9 58 subi r30, 0x89 ; 137
bbca: f7 4f sbci r31, 0xF7 ; 247
bbcc: 11 82 std Z+1, r1 ; 0x01
bbce: 10 82 st Z, r1
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
bbd0: f9 01 movw r30, r18
bbd2: ef 5c subi r30, 0xCF ; 207
bbd4: f7 4f sbci r31, 0xF7 ; 247
bbd6: 11 82 std Z+1, r1 ; 0x01
bbd8: 10 82 st Z, r1
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
bbda: fc 01 movw r30, r24
bbdc: ef 5c subi r30, 0xCF ; 207
bbde: f7 4f sbci r31, 0xF7 ; 247
bbe0: 11 82 std Z+1, r1 ; 0x01
bbe2: 10 82 st Z, r1
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
bbe4: e0 91 42 05 lds r30, 0x0542
bbe8: f0 e0 ldi r31, 0x00 ; 0
bbea: ee 0f add r30, r30
bbec: ff 1f adc r31, r31
bbee: ef 5c subi r30, 0xCF ; 207
bbf0: f7 4f sbci r31, 0xF7 ; 247
bbf2: 11 82 std Z+1, r1 ; 0x01
bbf4: 10 82 st Z, r1
PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] = 0;
bbf6: e0 91 41 05 lds r30, 0x0541
bbfa: f0 e0 ldi r31, 0x00 ; 0
bbfc: ee 0f add r30, r30
bbfe: ff 1f adc r31, r31
bc00: ef 5c subi r30, 0xCF ; 207
bc02: f7 4f sbci r31, 0xF7 ; 247
bc04: 11 82 std Z+1, r1 ; 0x01
bc06: 10 82 st Z, r1
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 160 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 220) SenderOkay = 160;
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 101 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 1) SenderOkay = 101;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!--I2CTimeout || MissingMotor)
bc08: 80 91 b0 02 lds r24, 0x02B0
bc0c: 90 91 b1 02 lds r25, 0x02B1
bc10: 01 97 sbiw r24, 0x01 ; 1
bc12: 90 93 b1 02 sts 0x02B1, r25
bc16: 80 93 b0 02 sts 0x02B0, r24
bc1a: 89 2b or r24, r25
bc1c: 21 f0 breq .+8 ; 0xbc26 <main+0x6ea>
bc1e: 80 91 df 04 lds r24, 0x04DF
bc22: 88 23 and r24, r24
bc24: b1 f1 breq .+108 ; 0xbc92 <main+0x756>
{
if(!I2CTimeout)
bc26: 80 91 b0 02 lds r24, 0x02B0
bc2a: 90 91 b1 02 lds r25, 0x02B1
bc2e: 89 2b or r24, r25
bc30: c9 f4 brne .+50 ; 0xbc64 <main+0x728>
{
I2C_Reset();
bc32: 0e 94 09 a1 call 0x14212 ; 0x14212 <I2C_Reset>
I2CTimeout = 5;
bc36: 85 e0 ldi r24, 0x05 ; 5
bc38: 90 e0 ldi r25, 0x00 ; 0
bc3a: 90 93 b1 02 sts 0x02B1, r25
bc3e: 80 93 b0 02 sts 0x02B0, r24
DebugOut.Analog[28]++; // I2C-Error
bc42: e0 e8 ldi r30, 0x80 ; 128
bc44: fc e0 ldi r31, 0x0C ; 12
bc46: 80 81 ld r24, Z
bc48: 91 81 ldd r25, Z+1 ; 0x01
bc4a: 01 96 adiw r24, 0x01 ; 1
bc4c: 91 83 std Z+1, r25 ; 0x01
bc4e: 80 83 st Z, r24
VersionInfo.HardwareError[1] |= FC_ERROR1_I2C;
bc50: e3 e6 ldi r30, 0x63 ; 99
bc52: fa e0 ldi r31, 0x0A ; 10
bc54: 80 81 ld r24, Z
bc56: 81 60 ori r24, 0x01 ; 1
bc58: 80 83 st Z, r24
DebugOut.Status[1] |= 0x02; // BL-Error-Status
bc5a: e7 e4 ldi r30, 0x47 ; 71
bc5c: fc e0 ldi r31, 0x0C ; 12
bc5e: 80 81 ld r24, Z
bc60: 82 60 ori r24, 0x02 ; 2
bc62: 80 83 st Z, r24
}
if((BeepMuster == 0xffff) && MotorenEin)
bc64: 80 91 a9 02 lds r24, 0x02A9
bc68: 90 91 aa 02 lds r25, 0x02AA
bc6c: 01 96 adiw r24, 0x01 ; 1
bc6e: 91 f4 brne .+36 ; 0xbc94 <main+0x758>
bc70: 80 91 03 04 lds r24, 0x0403
bc74: 88 23 and r24, r24
bc76: 71 f0 breq .+28 ; 0xbc94 <main+0x758>
{
beeptime = 25000;
bc78: 88 ea ldi r24, 0xA8 ; 168
bc7a: 91 e6 ldi r25, 0x61 ; 97
bc7c: 90 93 ce 04 sts 0x04CE, r25
bc80: 80 93 cd 04 sts 0x04CD, r24
BeepMuster = 0x0080;
bc84: 80 e8 ldi r24, 0x80 ; 128
bc86: 90 e0 ldi r25, 0x00 ; 0
bc88: 90 93 aa 02 sts 0x02AA, r25
bc8c: 80 93 a9 02 sts 0x02A9, r24
bc90: 01 c0 rjmp .+2 ; 0xbc94 <main+0x758>
}
}
else
{
ROT_OFF;
bc92: 28 98 cbi 0x05, 0 ; 5
}
LIBFC_Polling();
bc94: 0e 94 16 1a call 0x342c ; 0x342c <LIBFC_Polling>
if(!UpdateMotor)
bc98: 80 91 d1 04 lds r24, 0x04D1
bc9c: 81 11 cpse r24, r1
bc9e: 11 c2 rjmp .+1058 ; 0xc0c2 <main+0xb86>
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(NewSBusData) ProcessSBus();
bca0: 80 91 ab 04 lds r24, 0x04AB
bca4: 88 23 and r24, r24
bca6: 19 f0 breq .+6 ; 0xbcae <main+0x772>
bca8: 0e 94 33 93 call 0x12666 ; 0x12666 <ProcessSBus>
bcac: 0a c2 rjmp .+1044 ; 0xc0c2 <main+0xb86>
else
#endif
{
if(BytegapSPI == 0) SPI_TransmitByte();
bcae: 80 91 cc 04 lds r24, 0x04CC
bcb2: 81 11 cpse r24, r1
bcb4: 02 c0 rjmp .+4 ; 0xbcba <main+0x77e>
bcb6: 0e 94 de 95 call 0x12bbc ; 0x12bbc <SPI_TransmitByte>
if(CalculateServoSignals) CalculateServo();
bcba: 80 91 af 02 lds r24, 0x02AF
bcbe: 81 11 cpse r24, r1
bcc0: 0e 94 14 9d call 0x13a28 ; 0x13a28 <CalculateServo>
DatenUebertragung();
bcc4: 0e 94 00 ad call 0x15a00 ; 0x15a00 <DatenUebertragung>
BearbeiteRxDaten();
bcc8: 0e 94 5f a8 call 0x150be ; 0x150be <BearbeiteRxDaten>
if(CheckDelay(timer))
bccc: c4 01 movw r24, r8
bcce: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
bcd2: 88 23 and r24, r24
bcd4: 09 f4 brne .+2 ; 0xbcd8 <main+0x79c>
bcd6: f1 c1 rjmp .+994 ; 0xc0ba <main+0xb7e>
{
static unsigned char second;
timer += 20; // 20 ms interval
bcd8: 24 e1 ldi r18, 0x14 ; 20
bcda: 82 0e add r8, r18
bcdc: 91 1c adc r9, r1
CalcNickServoValue();
bcde: 0e 94 d3 9c call 0x139a6 ; 0x139a6 <CalcNickServoValue>
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(EE_Parameter.Receiver == RECEIVER_HOTT) HoTT_Menu();
bce2: f6 01 movw r30, r12
bce4: 80 81 ld r24, Z
bce6: 86 30 cpi r24, 0x06 ; 6
bce8: 11 f4 brne .+4 ; 0xbcee <main+0x7b2>
bcea: a9 d7 rcall .+3922 ; 0xcc3e <HoTT_Menu>
bcec: 04 c0 rjmp .+8 ; 0xbcf6 <main+0x7ba>
else
if(EE_Parameter.Receiver == RECEIVER_JETI) BuildJeti_Vario();
bcee: 84 30 cpi r24, 0x04 ; 4
bcf0: 11 f4 brne .+4 ; 0xbcf6 <main+0x7ba>
bcf2: 0e 94 2c 84 call 0x10858 ; 0x10858 <BuildJeti_Vario>
// ++++++++++++++++++++++++++++
// + check the ACC-Z range
if(ACC_AltitudeControl && ((Aktuell_az < 300) || (DebugOut.Analog[7] < (128 * 4) && Aktuell_az > 850))) // DebugOut.Analog[7] = GasMischanteil
bcf6: 80 91 c2 03 lds r24, 0x03C2
bcfa: 88 23 and r24, r24
bcfc: 29 f1 breq .+74 ; 0xbd48 <main+0x80c>
bcfe: 80 91 06 05 lds r24, 0x0506
bd02: 90 91 07 05 lds r25, 0x0507
bd06: 8c 32 cpi r24, 0x2C ; 44
bd08: 91 40 sbci r25, 0x01 ; 1
bd0a: 74 f0 brlt .+28 ; 0xbd28 <main+0x7ec>
bd0c: 80 91 56 0c lds r24, 0x0C56
bd10: 90 91 57 0c lds r25, 0x0C57
bd14: 81 15 cp r24, r1
bd16: 92 40 sbci r25, 0x02 ; 2
bd18: cc f4 brge .+50 ; 0xbd4c <main+0x810>
bd1a: 80 91 06 05 lds r24, 0x0506
bd1e: 90 91 07 05 lds r25, 0x0507
bd22: 83 35 cpi r24, 0x53 ; 83
bd24: 93 40 sbci r25, 0x03 ; 3
bd26: a4 f0 brlt .+40 ; 0xbd50 <main+0x814>
{
if(++AccZ_ErrorCnt > 50)
bd28: 0f 5f subi r16, 0xFF ; 255
bd2a: 03 33 cpi r16, 0x33 ; 51
bd2c: 90 f0 brcs .+36 ; 0xbd52 <main+0x816>
{
if(MotorenEin) VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP;
bd2e: 80 91 03 04 lds r24, 0x0403
bd32: 88 23 and r24, r24
bd34: 31 f0 breq .+12 ; 0xbd42 <main+0x806>
bd36: e2 e6 ldi r30, 0x62 ; 98
bd38: fa e0 ldi r31, 0x0A ; 10
bd3a: 80 81 ld r24, Z
bd3c: 80 62 ori r24, 0x20 ; 32
bd3e: 80 83 st Z, r24
bd40: 08 c0 rjmp .+16 ; 0xbd52 <main+0x816>
else CalibrationDone = 0;
bd42: 10 92 ef 03 sts 0x03EF, r1
bd46: 05 c0 rjmp .+10 ; 0xbd52 <main+0x816>
}
}
else AccZ_ErrorCnt = 0;
bd48: 00 e0 ldi r16, 0x00 ; 0
bd4a: 03 c0 rjmp .+6 ; 0xbd52 <main+0x816>
bd4c: 00 e0 ldi r16, 0x00 ; 0
bd4e: 01 c0 rjmp .+2 ; 0xbd52 <main+0x816>
bd50: 00 e0 ldi r16, 0x00 ; 0
// ++++++++++++++++++++++++++++
#endif
if(MissingMotor || Capacity.MinOfMaxPWM < 30)
bd52: 80 91 df 04 lds r24, 0x04DF
bd56: 81 11 cpse r24, r1
bd58: 05 c0 rjmp .+10 ; 0xbd64 <main+0x828>
bd5a: 80 91 1b 05 lds r24, 0x051B
bd5e: 8e 31 cpi r24, 0x1E ; 30
bd60: 30 f0 brcs .+12 ; 0xbd6e <main+0x832>
bd62: 0b c0 rjmp .+22 ; 0xbd7a <main+0x83e>
{
if(MissingMotor) VersionInfo.HardwareError[1] |= FC_ERROR1_BL_MISSING;
bd64: e3 e6 ldi r30, 0x63 ; 99
bd66: fa e0 ldi r31, 0x0A ; 10
bd68: 80 81 ld r24, Z
bd6a: 82 60 ori r24, 0x02 ; 2
bd6c: 80 83 st Z, r24
DebugOut.Status[1] |= 0x02; // BL-Error-Status
bd6e: e7 e4 ldi r30, 0x47 ; 71
bd70: fc e0 ldi r31, 0x0C ; 12
bd72: 80 81 ld r24, Z
bd74: 82 60 ori r24, 0x02 ; 2
bd76: 80 83 st Z, r24
bd78: 11 c0 rjmp .+34 ; 0xbd9c <main+0x860>
}
else
{
if(!beeptime)
bd7a: 80 91 cd 04 lds r24, 0x04CD
bd7e: 90 91 ce 04 lds r25, 0x04CE
bd82: 89 2b or r24, r25
bd84: 59 f4 brne .+22 ; 0xbd9c <main+0x860>
{
if(I2CTimeout > 6) DebugOut.Status[1] &= ~0x02; // BL-Error-Status
bd86: 80 91 b0 02 lds r24, 0x02B0
bd8a: 90 91 b1 02 lds r25, 0x02B1
bd8e: 07 97 sbiw r24, 0x07 ; 7
bd90: 28 f0 brcs .+10 ; 0xbd9c <main+0x860>
bd92: e7 e4 ldi r30, 0x47 ; 71
bd94: fc e0 ldi r31, 0x0C ; 12
bd96: 80 81 ld r24, Z
bd98: 8d 7f andi r24, 0xFD ; 253
bd9a: 80 83 st Z, r24
}
}
if(DisableRcOffBeeping) if(SenderOkay > 150) { DisableRcOffBeeping = 0; beeptime = 5000;};
bd9c: 80 91 66 04 lds r24, 0x0466
bda0: 88 23 and r24, r24
bda2: 61 f0 breq .+24 ; 0xbdbc <main+0x880>
bda4: 80 91 04 04 lds r24, 0x0404
bda8: 87 39 cpi r24, 0x97 ; 151
bdaa: 40 f0 brcs .+16 ; 0xbdbc <main+0x880>
bdac: 10 92 66 04 sts 0x0466, r1
bdb0: 88 e8 ldi r24, 0x88 ; 136
bdb2: 93 e1 ldi r25, 0x13 ; 19
bdb4: 90 93 ce 04 sts 0x04CE, r25
bdb8: 80 93 cd 04 sts 0x04CD, r24
if(PcZugriff) PcZugriff--;
bdbc: 80 91 b5 02 lds r24, 0x02B5
bdc0: 88 23 and r24, r24
bdc2: 21 f0 breq .+8 ; 0xbdcc <main+0x890>
bdc4: 81 50 subi r24, 0x01 ; 1
bdc6: 80 93 b5 02 sts 0x02B5, r24
bdca: 2d c0 rjmp .+90 ; 0xbe26 <main+0x8ea>
else
{
ExternControl.Config = 0;
bdcc: 10 92 89 0a sts 0x0A89, r1
ExternStickNick = 0;
bdd0: 10 92 d7 03 sts 0x03D7, r1
bdd4: 10 92 d6 03 sts 0x03D6, r1
ExternStickRoll = 0;
bdd8: 10 92 d5 03 sts 0x03D5, r1
bddc: 10 92 d4 03 sts 0x03D4, r1
ExternStickGier = 0;
bde0: 10 92 d3 03 sts 0x03D3, r1
bde4: 10 92 d2 03 sts 0x03D2, r1
if(!SenderOkay)
bde8: 80 91 04 04 lds r24, 0x0404
bdec: 81 11 cpse r24, r1
bdee: 1b c0 rjmp .+54 ; 0xbe26 <main+0x8ea>
{
if(BeepMuster == 0xffff && DisableRcOffBeeping != 2)
bdf0: 80 91 a9 02 lds r24, 0x02A9
bdf4: 90 91 aa 02 lds r25, 0x02AA
bdf8: 01 96 adiw r24, 0x01 ; 1
bdfa: a9 f4 brne .+42 ; 0xbe26 <main+0x8ea>
bdfc: 20 91 66 04 lds r18, 0x0466
be00: 22 30 cpi r18, 0x02 ; 2
be02: 89 f0 breq .+34 ; 0xbe26 <main+0x8ea>
{
beeptime = 15000;
be04: 88 e9 ldi r24, 0x98 ; 152
be06: 9a e3 ldi r25, 0x3A ; 58
be08: 90 93 ce 04 sts 0x04CE, r25
be0c: 80 93 cd 04 sts 0x04CD, r24
BeepMuster = 0x0c00;
be10: 80 e0 ldi r24, 0x00 ; 0
be12: 9c e0 ldi r25, 0x0C ; 12
be14: 90 93 aa 02 sts 0x02AA, r25
be18: 80 93 a9 02 sts 0x02A9, r24
if(DisableRcOffBeeping) DisableRcOffBeeping = 2;
be1c: 22 23 and r18, r18
be1e: 19 f0 breq .+6 ; 0xbe26 <main+0x8ea>
be20: 82 e0 ldi r24, 0x02 ; 2
be22: 80 93 66 04 sts 0x0466, r24
}
}
}
if(NaviDataOkay > 200)
be26: 80 91 a4 02 lds r24, 0x02A4
be2a: 89 3c cpi r24, 0xC9 ; 201
be2c: 70 f0 brcs .+28 ; 0xbe4a <main+0x90e>
{
NaviDataOkay--;
be2e: 81 50 subi r24, 0x01 ; 1
be30: 80 93 a4 02 sts 0x02A4, r24
VersionInfo.HardwareError[1] &= ~FC_ERROR1_SPI_RX;
be34: e3 e6 ldi r30, 0x63 ; 99
be36: fa e0 ldi r31, 0x0A ; 10
be38: 80 81 ld r24, Z
be3a: 8b 7f andi r24, 0xFB ; 251
be3c: 80 83 st Z, r24
VersionInfo.Flags |= FC_VERSION_FLAG_NC_PRESENT;
be3e: e6 e6 ldi r30, 0x66 ; 102
be40: fa e0 ldi r31, 0x0A ; 10
be42: 80 81 ld r24, Z
be44: 81 60 ori r24, 0x01 ; 1
be46: 80 83 st Z, r24
be48: 51 c0 rjmp .+162 ; 0xbeec <main+0x9b0>
}
else
{
if(NC_Version.Compatible)
be4a: e4 ee ldi r30, 0xE4 ; 228
be4c: f8 e0 ldi r31, 0x08 ; 8
be4e: 80 81 ld r24, Z
be50: 88 23 and r24, r24
be52: f1 f0 breq .+60 ; 0xbe90 <main+0x954>
{
VersionInfo.HardwareError[1] |= FC_ERROR1_SPI_RX;
be54: e3 e6 ldi r30, 0x63 ; 99
be56: fa e0 ldi r31, 0x0A ; 10
be58: 80 81 ld r24, Z
be5a: 84 60 ori r24, 0x04 ; 4
be5c: 80 83 st Z, r24
NC_ErrorCode = 9; // "ERR: no NC communication"
be5e: 89 e0 ldi r24, 0x09 ; 9
be60: 80 93 bb 04 sts 0x04BB, r24
if(BeepMuster == 0xffff && MotorenEin)
be64: 80 91 a9 02 lds r24, 0x02A9
be68: 90 91 aa 02 lds r25, 0x02AA
be6c: 01 96 adiw r24, 0x01 ; 1
be6e: 81 f4 brne .+32 ; 0xbe90 <main+0x954>
be70: 80 91 03 04 lds r24, 0x0403
be74: 88 23 and r24, r24
be76: 61 f0 breq .+24 ; 0xbe90 <main+0x954>
{
beeptime = 15000;
be78: 88 e9 ldi r24, 0x98 ; 152
be7a: 9a e3 ldi r25, 0x3A ; 58
be7c: 90 93 ce 04 sts 0x04CE, r25
be80: 80 93 cd 04 sts 0x04CD, r24
BeepMuster = 0xA800;
be84: 80 e0 ldi r24, 0x00 ; 0
be86: 98 ea ldi r25, 0xA8 ; 168
be88: 90 93 aa 02 sts 0x02AA, r25
be8c: 80 93 a9 02 sts 0x02A9, r24
}
}
GPS_Nick = 0;
be90: 10 92 6b 04 sts 0x046B, r1
be94: 10 92 6a 04 sts 0x046A, r1
GPS_Roll = 0;
be98: 10 92 69 04 sts 0x0469, r1
be9c: 10 92 68 04 sts 0x0468, r1
GPS_Aid_StickMultiplikator = 0;
bea0: 10 92 67 04 sts 0x0467, r1
GPSInfo.Flags = 0;
bea4: e7 ed ldi r30, 0xD7 ; 215
bea6: f8 e0 ldi r31, 0x08 ; 8
bea8: 10 82 st Z, r1
FromNaviCtrl_Value.Kalman_K = -1;
beaa: 8f ef ldi r24, 0xFF ; 255
beac: ec e4 ldi r30, 0x4C ; 76
beae: f9 e0 ldi r31, 0x09 ; 9
beb0: 80 83 st Z, r24
FromNaviCtrl.AccErrorN = 0;
beb2: e5 e1 ldi r30, 0x15 ; 21
beb4: f9 e0 ldi r31, 0x09 ; 9
beb6: 11 82 std Z+1, r1 ; 0x01
beb8: 10 82 st Z, r1
FromNaviCtrl.AccErrorR = 0;
beba: f1 01 movw r30, r2
bebc: 11 82 std Z+1, r1 ; 0x01
bebe: 10 82 st Z, r1
FromNaviCtrl.CompassValue = -1;
bec0: 8f ef ldi r24, 0xFF ; 255
bec2: 9f ef ldi r25, 0xFF ; 255
bec4: f2 01 movw r30, r4
bec6: 91 83 std Z+1, r25 ; 0x01
bec8: 80 83 st Z, r24
FromNC_AltitudeSpeed = 0;
beca: 10 92 f3 03 sts 0x03F3, r1
FromNC_AltitudeSetpoint = 0;
bece: 10 92 f4 03 sts 0x03F4, r1
bed2: 10 92 f5 03 sts 0x03F5, r1
bed6: 10 92 f6 03 sts 0x03F6, r1
beda: 10 92 f7 03 sts 0x03F7, r1
VersionInfo.Flags &= ~FC_VERSION_FLAG_NC_PRESENT;
bede: e6 e6 ldi r30, 0x66 ; 102
bee0: fa e0 ldi r31, 0x0A ; 10
bee2: 80 81 ld r24, Z
bee4: 8e 7f andi r24, 0xFE ; 254
bee6: 80 83 st Z, r24
NaviDataOkay = 0;
bee8: 10 92 a4 02 sts 0x02A4, r1
}
if(UBat <= BattLowVoltageWarning)
beec: 20 91 53 01 lds r18, 0x0153
bef0: 30 e0 ldi r19, 0x00 ; 0
bef2: 80 91 1a 01 lds r24, 0x011A
bef6: 90 91 1b 01 lds r25, 0x011B
befa: 28 17 cp r18, r24
befc: 39 07 cpc r19, r25
befe: dc f0 brlt .+54 ; 0xbf36 <main+0x9fa>
{
FC_StatusFlags |= FC_STATUS_LOWBAT;
bf00: 80 91 cb 03 lds r24, 0x03CB
bf04: 80 62 ori r24, 0x20 ; 32
bf06: 80 93 cb 03 sts 0x03CB, r24
if(BeepMuster == 0xffff && UBat > 10) // Do not beep, if the voltage reading is below 1V (Supplied via MKUSB)
bf0a: 80 91 a9 02 lds r24, 0x02A9
bf0e: 90 91 aa 02 lds r25, 0x02AA
bf12: 01 96 adiw r24, 0x01 ; 1
bf14: 81 f4 brne .+32 ; 0xbf36 <main+0x9fa>
bf16: 80 91 1a 01 lds r24, 0x011A
bf1a: 90 91 1b 01 lds r25, 0x011B
bf1e: 0b 97 sbiw r24, 0x0b ; 11
bf20: 54 f0 brlt .+20 ; 0xbf36 <main+0x9fa>
{
beeptime = 6000;
bf22: f0 92 ce 04 sts 0x04CE, r15
bf26: e0 92 cd 04 sts 0x04CD, r14
BeepMuster = 0x0300;
bf2a: 40 e0 ldi r20, 0x00 ; 0
bf2c: 53 e0 ldi r21, 0x03 ; 3
bf2e: 50 93 aa 02 sts 0x02AA, r21
bf32: 40 93 a9 02 sts 0x02A9, r20
}
}
// +++++++++++++++++++++++++++++++++
// Sekundentakt
if(++second == 49)
bf36: 80 91 5b 04 lds r24, 0x045B
bf3a: 8f 5f subi r24, 0xFF ; 255
bf3c: 80 93 5b 04 sts 0x045B, r24
bf40: 81 33 cpi r24, 0x31 ; 49
bf42: 09 f0 breq .+2 ; 0xbf46 <main+0xa0a>
bf44: 82 c0 rjmp .+260 ; 0xc04a <main+0xb0e>
{
second = 0;
bf46: 10 92 5b 04 sts 0x045B, r1
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(ShowSettingNameTime) ShowSettingNameTime--;
bf4a: 80 91 80 04 lds r24, 0x0480
bf4e: 88 23 and r24, r24
bf50: 19 f0 breq .+6 ; 0xbf58 <main+0xa1c>
bf52: 81 50 subi r24, 0x01 ; 1
bf54: 80 93 80 04 sts 0x0480, r24
#endif
if(FC_StatusFlags & FC_STATUS_FLY) FlugSekunden++;
bf58: 80 91 cb 03 lds r24, 0x03CB
bf5c: 81 ff sbrs r24, 1
bf5e: 0a c0 rjmp .+20 ; 0xbf74 <main+0xa38>
bf60: 80 91 5e 04 lds r24, 0x045E
bf64: 90 91 5f 04 lds r25, 0x045F
bf68: 01 96 adiw r24, 0x01 ; 1
bf6a: 90 93 5f 04 sts 0x045F, r25
bf6e: 80 93 5e 04 sts 0x045E, r24
bf72: 04 c0 rjmp .+8 ; 0xbf7c <main+0xa40>
else timer2 = 1450; // 0,5 Minuten aufrunden
bf74: 5a ea ldi r21, 0xAA ; 170
bf76: c5 2f mov r28, r21
bf78: 85 e0 ldi r24, 0x05 ; 5
bf7a: d8 2f mov r29, r24
if(modell_fliegt < 1024)
bf7c: 80 91 cc 03 lds r24, 0x03CC
bf80: 90 91 cd 03 lds r25, 0x03CD
bf84: 81 15 cp r24, r1
bf86: 94 40 sbci r25, 0x04 ; 4
bf88: 08 f0 brcs .+2 ; 0xbf8c <main+0xa50>
bf8a: 51 c0 rjmp .+162 ; 0xc02e <main+0xaf2>
{
if(StartLuftdruck < Luftdruck) StartLuftdruck += 5;
bf8c: 40 91 08 05 lds r20, 0x0508
bf90: 50 91 09 05 lds r21, 0x0509
bf94: 60 91 0a 05 lds r22, 0x050A
bf98: 70 91 0b 05 lds r23, 0x050B
bf9c: 80 91 12 01 lds r24, 0x0112
bfa0: 90 91 13 01 lds r25, 0x0113
bfa4: a0 91 14 01 lds r26, 0x0114
bfa8: b0 91 15 01 lds r27, 0x0115
bfac: 48 17 cp r20, r24
bfae: 59 07 cpc r21, r25
bfb0: 6a 07 cpc r22, r26
bfb2: 7b 07 cpc r23, r27
bfb4: a4 f4 brge .+40 ; 0xbfde <main+0xaa2>
bfb6: 80 91 08 05 lds r24, 0x0508
bfba: 90 91 09 05 lds r25, 0x0509
bfbe: a0 91 0a 05 lds r26, 0x050A
bfc2: b0 91 0b 05 lds r27, 0x050B
bfc6: 05 96 adiw r24, 0x05 ; 5
bfc8: a1 1d adc r26, r1
bfca: b1 1d adc r27, r1
bfcc: 80 93 08 05 sts 0x0508, r24
bfd0: 90 93 09 05 sts 0x0509, r25
bfd4: a0 93 0a 05 sts 0x050A, r26
bfd8: b0 93 0b 05 sts 0x050B, r27
bfdc: 28 c0 rjmp .+80 ; 0xc02e <main+0xaf2>
else
if(StartLuftdruck > Luftdruck) StartLuftdruck -= 5;
bfde: 40 91 08 05 lds r20, 0x0508
bfe2: 50 91 09 05 lds r21, 0x0509
bfe6: 60 91 0a 05 lds r22, 0x050A
bfea: 70 91 0b 05 lds r23, 0x050B
bfee: 80 91 12 01 lds r24, 0x0112
bff2: 90 91 13 01 lds r25, 0x0113
bff6: a0 91 14 01 lds r26, 0x0114
bffa: b0 91 15 01 lds r27, 0x0115
bffe: 84 17 cp r24, r20
c000: 95 07 cpc r25, r21
c002: a6 07 cpc r26, r22
c004: b7 07 cpc r27, r23
c006: 9c f4 brge .+38 ; 0xc02e <main+0xaf2>
c008: 80 91 08 05 lds r24, 0x0508
c00c: 90 91 09 05 lds r25, 0x0509
c010: a0 91 0a 05 lds r26, 0x050A
c014: b0 91 0b 05 lds r27, 0x050B
c018: 05 97 sbiw r24, 0x05 ; 5
c01a: a1 09 sbc r26, r1
c01c: b1 09 sbc r27, r1
c01e: 80 93 08 05 sts 0x0508, r24
c022: 90 93 09 05 sts 0x0509, r25
c026: a0 93 0a 05 sts 0x050A, r26
c02a: b0 93 0b 05 sts 0x050B, r27
}
if(UBat > BattLowVoltageWarning + 1) FC_StatusFlags &= ~FC_STATUS_LOWBAT;
c02e: 80 91 1a 01 lds r24, 0x011A
c032: 90 91 1b 01 lds r25, 0x011B
c036: 2f 5f subi r18, 0xFF ; 255
c038: 3f 4f sbci r19, 0xFF ; 255
c03a: 28 17 cp r18, r24
c03c: 39 07 cpc r19, r25
c03e: 2c f4 brge .+10 ; 0xc04a <main+0xb0e>
c040: 80 91 cb 03 lds r24, 0x03CB
c044: 8f 7d andi r24, 0xDF ; 223
c046: 80 93 cb 03 sts 0x03CB, r24
}
// +++++++++++++++++++++++++++++++++
if(++timer2 == 2930) // eine Minute
c04a: 21 96 adiw r28, 0x01 ; 1
c04c: c2 37 cpi r28, 0x72 ; 114
c04e: fb e0 ldi r31, 0x0B ; 11
c050: df 07 cpc r29, r31
c052: 99 f5 brne .+102 ; 0xc0ba <main+0xb7e>
{
timer2 = 0;
FlugMinuten++;
c054: 80 91 62 04 lds r24, 0x0462
c058: 90 91 63 04 lds r25, 0x0463
c05c: 01 96 adiw r24, 0x01 ; 1
c05e: 90 93 63 04 sts 0x0463, r25
c062: 80 93 62 04 sts 0x0462, r24
FlugMinutenGesamt++;
c066: 20 91 60 04 lds r18, 0x0460
c06a: 30 91 61 04 lds r19, 0x0461
c06e: 2f 5f subi r18, 0xFF ; 255
c070: 3f 4f sbci r19, 0xFF ; 255
c072: 30 93 61 04 sts 0x0461, r19
c076: 20 93 60 04 sts 0x0460, r18
SetParamByte(PID_FLIGHT_MINUTES,FlugMinuten / 256);
c07a: 69 2f mov r22, r25
c07c: 8e e0 ldi r24, 0x0E ; 14
c07e: 90 e0 ldi r25, 0x00 ; 0
c080: 0e 94 45 25 call 0x4a8a ; 0x4a8a <SetParamByte>
SetParamByte(PID_FLIGHT_MINUTES+1,FlugMinuten % 256);
c084: e2 e6 ldi r30, 0x62 ; 98
c086: f4 e0 ldi r31, 0x04 ; 4
c088: 60 81 ld r22, Z
c08a: 8f e0 ldi r24, 0x0F ; 15
c08c: 90 e0 ldi r25, 0x00 ; 0
c08e: 0e 94 45 25 call 0x4a8a ; 0x4a8a <SetParamByte>
SetParamByte(PID_FLIGHT_MINUTES_TOTAL,FlugMinutenGesamt / 256);
c092: 60 91 61 04 lds r22, 0x0461
c096: 8a e0 ldi r24, 0x0A ; 10
c098: 90 e0 ldi r25, 0x00 ; 0
c09a: 0e 94 45 25 call 0x4a8a ; 0x4a8a <SetParamByte>
SetParamByte(PID_FLIGHT_MINUTES_TOTAL+1,FlugMinutenGesamt % 256);
c09e: e0 e6 ldi r30, 0x60 ; 96
c0a0: f4 e0 ldi r31, 0x04 ; 4
c0a2: 60 81 ld r22, Z
c0a4: 8b e0 ldi r24, 0x0B ; 11
c0a6: 90 e0 ldi r25, 0x00 ; 0
c0a8: 0e 94 45 25 call 0x4a8a ; 0x4a8a <SetParamByte>
timer = SetDelay(20); // falls "timer += 20;" mal nicht geht
c0ac: 84 e1 ldi r24, 0x14 ; 20
c0ae: 90 e0 ldi r25, 0x00 ; 0
c0b0: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
c0b4: 4c 01 movw r8, r24
if(UBat > BattLowVoltageWarning + 1) FC_StatusFlags &= ~FC_STATUS_LOWBAT;
}
// +++++++++++++++++++++++++++++++++
if(++timer2 == 2930) // eine Minute
{
timer2 = 0;
c0b6: c0 e0 ldi r28, 0x00 ; 0
c0b8: d0 e0 ldi r29, 0x00 ; 0
SetParamByte(PID_FLIGHT_MINUTES_TOTAL,FlugMinutenGesamt / 256);
SetParamByte(PID_FLIGHT_MINUTES_TOTAL+1,FlugMinutenGesamt % 256);
timer = SetDelay(20); // falls "timer += 20;" mal nicht geht
}
}
LED_Update();
c0ba: 0e 94 8f 85 call 0x10b1e ; 0x10b1e <LED_Update>
Capacity_Update();
c0be: 0e 94 fd 21 call 0x43fa ; 0x43fa <Capacity_Update>
}
} //else DebugOut.Analog[18]++;
if(update_spi) update_spi--;
c0c2: 11 23 and r17, r17
c0c4: 19 f0 breq .+6 ; 0xc0cc <main+0xb90>
c0c6: 11 50 subi r17, 0x01 ; 1
} // 500Hz
if(update_spi == 0) // 41Hz
c0c8: 11 11 cpse r17, r1
c0ca: 0c c0 rjmp .+24 ; 0xc0e4 <main+0xba8>
{
if(SPI_StartTransmitPacket()) update_spi = 12;
c0cc: 0e 94 3a 9b call 0x13674 ; 0x13674 <SPI_StartTransmitPacket>
c0d0: 81 11 cpse r24, r1
c0d2: 2b cd rjmp .-1450 ; 0xbb2a <main+0x5ee>
else
if(BytegapSPI == 0) SPI_TransmitByte();
c0d4: 80 91 cc 04 lds r24, 0x04CC
c0d8: 81 11 cpse r24, r1
c0da: 29 cd rjmp .-1454 ; 0xbb2e <main+0x5f2>
c0dc: 0e 94 de 95 call 0x12bbc ; 0x12bbc <SPI_TransmitByte>
c0e0: 10 e0 ldi r17, 0x00 ; 0
c0e2: 26 cd rjmp .-1460 ; 0xbb30 <main+0x5f4>
}
else if(BytegapSPI == 0) SPI_TransmitByte();
c0e4: 80 91 cc 04 lds r24, 0x04CC
c0e8: 81 11 cpse r24, r1
c0ea: 22 cd rjmp .-1468 ; 0xbb30 <main+0x5f4>
c0ec: 0e 94 de 95 call 0x12bbc ; 0x12bbc <SPI_TransmitByte>
c0f0: 1f cd rjmp .-1474 ; 0xbb30 <main+0x5f4>
0000c0f2 <GetHottestBl>:
void GetHottestBl(void)
{
static unsigned char search = 0,tmp_max,tmp_min,who;
if(Motor[search].Temperature > tmp_max) { tmp_max = Motor[search].Temperature; who = search;}
c0f2: 80 91 7d 04 lds r24, 0x047D
c0f6: 9f e0 ldi r25, 0x0F ; 15
c0f8: 89 9f mul r24, r25
c0fa: f0 01 movw r30, r0
c0fc: 11 24 eor r1, r1
c0fe: e9 56 subi r30, 0x69 ; 105
c100: f6 4f sbci r31, 0xF6 ; 246
c102: 97 81 ldd r25, Z+7 ; 0x07
c104: 20 91 7c 04 lds r18, 0x047C
c108: 29 17 cp r18, r25
c10a: 28 f4 brcc .+10 ; 0xc116 <GetHottestBl+0x24>
c10c: 90 93 7c 04 sts 0x047C, r25
c110: 80 93 7b 04 sts 0x047B, r24
c114: 08 c0 rjmp .+16 ; 0xc126 <GetHottestBl+0x34>
else
if(Motor[search].Temperature) if(Motor[search].Temperature < tmp_min) tmp_min = Motor[search].Temperature;
c116: 99 23 and r25, r25
c118: 31 f0 breq .+12 ; 0xc126 <GetHottestBl+0x34>
c11a: 20 91 7a 04 lds r18, 0x047A
c11e: 92 17 cp r25, r18
c120: 10 f4 brcc .+4 ; 0xc126 <GetHottestBl+0x34>
c122: 90 93 7a 04 sts 0x047A, r25
if(++search >= MAX_MOTORS)
c126: 8f 5f subi r24, 0xFF ; 255
c128: 8c 30 cpi r24, 0x0C ; 12
c12a: 18 f4 brcc .+6 ; 0xc132 <GetHottestBl+0x40>
c12c: 80 93 7d 04 sts 0x047D, r24
c130: 08 95 ret
{
search = 0;
c132: 10 92 7d 04 sts 0x047D, r1
if(tmp_min != 255) MinBlTemperture = tmp_min; else MinBlTemperture = 0;
c136: 80 91 7a 04 lds r24, 0x047A
c13a: 8f 3f cpi r24, 0xFF ; 255
c13c: 19 f0 breq .+6 ; 0xc144 <GetHottestBl+0x52>
c13e: 80 93 83 04 sts 0x0483, r24
c142: 02 c0 rjmp .+4 ; 0xc148 <GetHottestBl+0x56>
c144: 10 92 83 04 sts 0x0483, r1
MaxBlTemperture = tmp_max;
c148: 80 91 7c 04 lds r24, 0x047C
c14c: 80 93 84 04 sts 0x0484, r24
HottestBl = who;
c150: 80 91 7b 04 lds r24, 0x047B
c154: 80 93 82 04 sts 0x0482, r24
tmp_min = 255;
c158: 8f ef ldi r24, 0xFF ; 255
c15a: 80 93 7a 04 sts 0x047A, r24
tmp_max = 0;
c15e: 10 92 7c 04 sts 0x047C, r1
who = 0;
c162: 10 92 7b 04 sts 0x047B, r1
c166: 08 95 ret
0000c168 <Hott_ClearLine>:
}
//---------------------------------------------------------------
void Hott_ClearLine(unsigned char line)
{
HoTT_printfxy(0,line," ");
c168: 95 e1 ldi r25, 0x15 ; 21
c16a: 89 9f mul r24, r25
c16c: 80 2d mov r24, r0
c16e: 11 24 eor r1, r1
c170: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
c174: 80 e1 ldi r24, 0x10 ; 16
c176: 9b e0 ldi r25, 0x0B ; 11
c178: 9f 93 push r25
c17a: 8f 93 push r24
c17c: 8b e0 ldi r24, 0x0B ; 11
c17e: 95 e1 ldi r25, 0x15 ; 21
c180: 9f 93 push r25
c182: 8f 93 push r24
c184: e0 91 78 06 lds r30, 0x0678
c188: f0 91 79 06 lds r31, 0x0679
c18c: 09 95 icall
c18e: 0f 90 pop r0
c190: 0f 90 pop r0
c192: 0f 90 pop r0
c194: 0f 90 pop r0
c196: 08 95 ret
0000c198 <HoTT_Waring>:
}
//---------------------------------------------------------------
unsigned char HoTT_Waring(void)
{
c198: cf 93 push r28
unsigned char status = 0;
static char old_status = 0;
static int repeat;
//if(Parameter_UserParam1) return(Parameter_UserParam1);
ToNC_SpeakHoTT = SpeakHoTT;
c19a: c0 91 57 01 lds r28, 0x0157
c19e: c0 93 81 04 sts 0x0481, r28
if(FC_StatusFlags & FC_STATUS_LOWBAT)
c1a2: 80 91 cb 03 lds r24, 0x03CB
c1a6: 85 ff sbrs r24, 5
c1a8: 14 c0 rjmp .+40 ; 0xc1d2 <HoTT_Waring+0x3a>
{
if(LowVoltageLandingActive && (EE_Parameter.Receiver == RECEIVER_HOTT)) status = SPEAK_LANDING;
c1aa: 80 91 c1 03 lds r24, 0x03C1
c1ae: 88 23 and r24, r24
c1b0: 31 f0 breq .+12 ; 0xc1be <HoTT_Waring+0x26>
c1b2: 80 91 65 05 lds r24, 0x0565
c1b6: 86 30 cpi r24, 0x06 ; 6
c1b8: 21 f0 breq .+8 ; 0xc1c2 <HoTT_Waring+0x2a>
else status = VOICE_MINIMALE_EINGANSSPANNUNG; // Jeti hat kein wort: "LANDEN"
c1ba: e0 e1 ldi r30, 0x10 ; 16
c1bc: 03 c0 rjmp .+6 ; 0xc1c4 <HoTT_Waring+0x2c>
c1be: e0 e1 ldi r30, 0x10 ; 16
c1c0: 01 c0 rjmp .+2 ; 0xc1c4 <HoTT_Waring+0x2c>
static int repeat;
//if(Parameter_UserParam1) return(Parameter_UserParam1);
ToNC_SpeakHoTT = SpeakHoTT;
if(FC_StatusFlags & FC_STATUS_LOWBAT)
{
if(LowVoltageLandingActive && (EE_Parameter.Receiver == RECEIVER_HOTT)) status = SPEAK_LANDING;
c1c2: ee e0 ldi r30, 0x0E ; 14
else status = VOICE_MINIMALE_EINGANSSPANNUNG; // Jeti hat kein wort: "LANDEN"
if(SpeakHoTT && old_status == VOICE_MINIMALE_EINGANSSPANNUNG) status = SpeakHoTT; // das soll auch noch durch kommen
c1c4: cc 23 and r28, r28
c1c6: 01 f1 breq .+64 ; 0xc208 <HoTT_Waring+0x70>
c1c8: 80 91 79 04 lds r24, 0x0479
c1cc: 80 31 cpi r24, 0x10 ; 16
c1ce: e1 f4 brne .+56 ; 0xc208 <HoTT_Waring+0x70>
c1d0: 25 c0 rjmp .+74 ; 0xc21c <HoTT_Waring+0x84>
}
else
if(NC_ErrorCode && NC_ErrorCode < MAX_ERR_NUMBER) // Fehlercodes
c1d2: 80 91 bb 04 lds r24, 0x04BB
c1d6: 9f ef ldi r25, 0xFF ; 255
c1d8: 98 0f add r25, r24
c1da: 92 32 cpi r25, 0x22 ; 34
c1dc: b8 f4 brcc .+46 ; 0xc20c <HoTT_Waring+0x74>
{
if(MotorenEin || !pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][1])) status = pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][0]);
c1de: 90 91 03 04 lds r25, 0x0403
c1e2: 91 11 cpse r25, r1
c1e4: 0a c0 rjmp .+20 ; 0xc1fa <HoTT_Waring+0x62>
c1e6: 28 2f mov r18, r24
c1e8: 30 e0 ldi r19, 0x00 ; 0
c1ea: f9 01 movw r30, r18
c1ec: ee 0f add r30, r30
c1ee: ff 1f adc r31, r31
c1f0: e9 5d subi r30, 0xD9 ; 217
c1f2: f4 4f sbci r31, 0xF4 ; 244
c1f4: e4 91 lpm r30, Z
c1f6: e1 11 cpse r30, r1
c1f8: 09 c0 rjmp .+18 ; 0xc20c <HoTT_Waring+0x74>
c1fa: e8 2f mov r30, r24
c1fc: f0 e0 ldi r31, 0x00 ; 0
c1fe: ee 0f add r30, r30
c200: ff 1f adc r31, r31
c202: ea 5d subi r30, 0xDA ; 218
c204: f4 4f sbci r31, 0xF4 ; 244
c206: e4 91 lpm r30, Z
}
if(!status) // Sprachansagen
c208: e1 11 cpse r30, r1
c20a: 09 c0 rjmp .+18 ; 0xc21e <HoTT_Waring+0x86>
{
// if(!(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)) SpeakHoTT = 0; // is the voice wanted?
if(!(EE_Parameter.GlobalConfig3 & CFG3_SPEAK_ALL)) SpeakHoTT = 0; // is the voice wanted?
c20c: 80 91 b9 05 lds r24, 0x05B9
c210: 86 fd sbrc r24, 6
c212: 08 c0 rjmp .+16 ; 0xc224 <HoTT_Waring+0x8c>
c214: 10 92 57 01 sts 0x0157, r1
c218: c0 e0 ldi r28, 0x00 ; 0
c21a: 04 c0 rjmp .+8 ; 0xc224 <HoTT_Waring+0x8c>
ToNC_SpeakHoTT = SpeakHoTT;
if(FC_StatusFlags & FC_STATUS_LOWBAT)
{
if(LowVoltageLandingActive && (EE_Parameter.Receiver == RECEIVER_HOTT)) status = SPEAK_LANDING;
else status = VOICE_MINIMALE_EINGANSSPANNUNG; // Jeti hat kein wort: "LANDEN"
if(SpeakHoTT && old_status == VOICE_MINIMALE_EINGANSSPANNUNG) status = SpeakHoTT; // das soll auch noch durch kommen
c21c: ec 2f mov r30, r28
{
// if(!(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)) SpeakHoTT = 0; // is the voice wanted?
if(!(EE_Parameter.GlobalConfig3 & CFG3_SPEAK_ALL)) SpeakHoTT = 0; // is the voice wanted?
else status = SpeakHoTT;
}
else ToNC_SpeakHoTT = status;
c21e: e0 93 81 04 sts 0x0481, r30
c222: ce 2f mov r28, r30
if(old_status == status) // Gleichen Fehler nur alle 4 sek bringen
c224: 80 91 79 04 lds r24, 0x0479
c228: 8c 13 cpse r24, r28
c22a: 11 c0 rjmp .+34 ; 0xc24e <HoTT_Waring+0xb6>
{
if(!CheckDelay(repeat)) return(0);
c22c: 80 91 77 04 lds r24, 0x0477
c230: 90 91 78 04 lds r25, 0x0478
c234: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
c238: 88 23 and r24, r24
c23a: e9 f0 breq .+58 ; 0xc276 <HoTT_Waring+0xde>
repeat = SetDelay(4000);
c23c: 80 ea ldi r24, 0xA0 ; 160
c23e: 9f e0 ldi r25, 0x0F ; 15
c240: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
c244: 90 93 78 04 sts 0x0478, r25
c248: 80 93 77 04 sts 0x0477, r24
c24c: 08 c0 rjmp .+16 ; 0xc25e <HoTT_Waring+0xc6>
}
else repeat = SetDelay(2000);
c24e: 80 ed ldi r24, 0xD0 ; 208
c250: 97 e0 ldi r25, 0x07 ; 7
c252: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
c256: 90 93 78 04 sts 0x0478, r25
c25a: 80 93 77 04 sts 0x0477, r24
if(status)
c25e: cc 23 and r28, r28
c260: 31 f0 breq .+12 ; 0xc26e <HoTT_Waring+0xd6>
{
if(status == SpeakHoTT) SpeakHoTT = 0;
c262: 80 91 57 01 lds r24, 0x0157
c266: c8 13 cpse r28, r24
c268: 02 c0 rjmp .+4 ; 0xc26e <HoTT_Waring+0xd6>
c26a: 10 92 57 01 sts 0x0157, r1
}
old_status = status;
c26e: c0 93 79 04 sts 0x0479, r28
// DebugOut.Analog[16] = status;
return(status);
c272: 8c 2f mov r24, r28
c274: 01 c0 rjmp .+2 ; 0xc278 <HoTT_Waring+0xe0>
}
else ToNC_SpeakHoTT = status;
if(old_status == status) // Gleichen Fehler nur alle 4 sek bringen
{
if(!CheckDelay(repeat)) return(0);
c276: 80 e0 ldi r24, 0x00 ; 0
if(status == SpeakHoTT) SpeakHoTT = 0;
}
old_status = status;
// DebugOut.Analog[16] = status;
return(status);
}
c278: cf 91 pop r28
c27a: 08 95 ret
0000c27c <NC_Fills_HoTT_Telemety>:
//---------------------------------------------------------------
void NC_Fills_HoTT_Telemety(void)
{
unsigned char *ptr = NULL;
unsigned char max = 0,i,z;
switch(FromNaviCtrl.Param.Byte[11])
c27c: 80 91 2a 09 lds r24, 0x092A
c280: 89 38 cpi r24, 0x89 ; 137
c282: 31 f1 breq .+76 ; 0xc2d0 <NC_Fills_HoTT_Telemety+0x54>
c284: 38 f4 brcc .+14 ; 0xc294 <NC_Fills_HoTT_Telemety+0x18>
c286: 82 30 cpi r24, 0x02 ; 2
c288: d9 f0 breq .+54 ; 0xc2c0 <NC_Fills_HoTT_Telemety+0x44>
c28a: 83 30 cpi r24, 0x03 ; 3
c28c: e9 f0 breq .+58 ; 0xc2c8 <NC_Fills_HoTT_Telemety+0x4c>
c28e: 81 30 cpi r24, 0x01 ; 1
c290: f1 f5 brne .+124 ; 0xc30e <NC_Fills_HoTT_Telemety+0x92>
c292: 12 c0 rjmp .+36 ; 0xc2b8 <NC_Fills_HoTT_Telemety+0x3c>
c294: 8d 38 cpi r24, 0x8D ; 141
c296: 61 f0 breq .+24 ; 0xc2b0 <NC_Fills_HoTT_Telemety+0x34>
c298: 8e 38 cpi r24, 0x8E ; 142
c29a: 31 f0 breq .+12 ; 0xc2a8 <NC_Fills_HoTT_Telemety+0x2c>
c29c: 8a 38 cpi r24, 0x8A ; 138
c29e: b9 f5 brne .+110 ; 0xc30e <NC_Fills_HoTT_Telemety+0x92>
ptr = (unsigned char *) &VarioPacket;
max = sizeof(VarioPacket);
break;
case HOTT_GPS_PACKET_ID:
ptr = (unsigned char *) &GPSPacket;
max = sizeof(GPSPacket);
c2a0: 5c e2 ldi r21, 0x2C ; 44
case HOTT_VARIO_PACKET_ID:
ptr = (unsigned char *) &VarioPacket;
max = sizeof(VarioPacket);
break;
case HOTT_GPS_PACKET_ID:
ptr = (unsigned char *) &GPSPacket;
c2a2: 84 eb ldi r24, 0xB4 ; 180
c2a4: 97 e0 ldi r25, 0x07 ; 7
max = sizeof(GPSPacket);
break;
c2a6: 17 c0 rjmp .+46 ; 0xc2d6 <NC_Fills_HoTT_Telemety+0x5a>
case HOTT_ELECTRIC_AIR_PACKET_ID:
ptr = (unsigned char *) &ElectricAirPacket;
max = sizeof(ElectricAirPacket);
c2a8: 5c e2 ldi r21, 0x2C ; 44
case HOTT_GPS_PACKET_ID:
ptr = (unsigned char *) &GPSPacket;
max = sizeof(GPSPacket);
break;
case HOTT_ELECTRIC_AIR_PACKET_ID:
ptr = (unsigned char *) &ElectricAirPacket;
c2aa: 8a e7 ldi r24, 0x7A ; 122
c2ac: 96 e0 ldi r25, 0x06 ; 6
max = sizeof(ElectricAirPacket);
break;
c2ae: 13 c0 rjmp .+38 ; 0xc2d6 <NC_Fills_HoTT_Telemety+0x5a>
case HOTT_GENERAL_PACKET_ID:
ptr = (unsigned char *) &HoTTGeneral;
max = sizeof(HoTTGeneral);
c2b0: 5c e2 ldi r21, 0x2C ; 44
case HOTT_ELECTRIC_AIR_PACKET_ID:
ptr = (unsigned char *) &ElectricAirPacket;
max = sizeof(ElectricAirPacket);
break;
case HOTT_GENERAL_PACKET_ID:
ptr = (unsigned char *) &HoTTGeneral;
c2b2: 86 ea ldi r24, 0xA6 ; 166
c2b4: 96 e0 ldi r25, 0x06 ; 6
max = sizeof(HoTTGeneral);
break;
c2b6: 0f c0 rjmp .+30 ; 0xc2d6 <NC_Fills_HoTT_Telemety+0x5a>
case JETI_GPS_PACKET_ID1:
ptr = (unsigned char *) &JetiExData[14].Value;
max = sizeof(JetiExData[14].Value);
c2b8: 54 e0 ldi r21, 0x04 ; 4
case HOTT_GENERAL_PACKET_ID:
ptr = (unsigned char *) &HoTTGeneral;
max = sizeof(HoTTGeneral);
break;
case JETI_GPS_PACKET_ID1:
ptr = (unsigned char *) &JetiExData[14].Value;
c2ba: 86 e7 ldi r24, 0x76 ; 118
c2bc: 92 e0 ldi r25, 0x02 ; 2
max = sizeof(JetiExData[14].Value);
break;
c2be: 0b c0 rjmp .+22 ; 0xc2d6 <NC_Fills_HoTT_Telemety+0x5a>
case JETI_GPS_PACKET_ID2:
ptr = (unsigned char *) &JetiExData[15].Value;
max = sizeof(JetiExData[15].Value);
c2c0: 54 e0 ldi r21, 0x04 ; 4
case JETI_GPS_PACKET_ID1:
ptr = (unsigned char *) &JetiExData[14].Value;
max = sizeof(JetiExData[14].Value);
break;
case JETI_GPS_PACKET_ID2:
ptr = (unsigned char *) &JetiExData[15].Value;
c2c2: 89 e8 ldi r24, 0x89 ; 137
c2c4: 92 e0 ldi r25, 0x02 ; 2
max = sizeof(JetiExData[15].Value);
break;
c2c6: 07 c0 rjmp .+14 ; 0xc2d6 <NC_Fills_HoTT_Telemety+0x5a>
case HOTT_WPL_NAME:
ptr = (unsigned char *) WPL_Name;
max = sizeof(WPL_Name)-1;
c2c8: 59 e0 ldi r21, 0x09 ; 9
case JETI_GPS_PACKET_ID2:
ptr = (unsigned char *) &JetiExData[15].Value;
max = sizeof(JetiExData[15].Value);
break;
case HOTT_WPL_NAME:
ptr = (unsigned char *) WPL_Name;
c2ca: 82 ed ldi r24, 0xD2 ; 210
c2cc: 96 e0 ldi r25, 0x06 ; 6
max = sizeof(WPL_Name)-1;
break;
c2ce: 03 c0 rjmp .+6 ; 0xc2d6 <NC_Fills_HoTT_Telemety+0x5a>
unsigned char max = 0,i,z;
switch(FromNaviCtrl.Param.Byte[11])
{
case HOTT_VARIO_PACKET_ID:
ptr = (unsigned char *) &VarioPacket;
max = sizeof(VarioPacket);
c2d0: 5c e2 ldi r21, 0x2C ; 44
unsigned char *ptr = NULL;
unsigned char max = 0,i,z;
switch(FromNaviCtrl.Param.Byte[11])
{
case HOTT_VARIO_PACKET_ID:
ptr = (unsigned char *) &VarioPacket;
c2d2: 8c ed ldi r24, 0xDC ; 220
c2d4: 96 e0 ldi r25, 0x06 ; 6
ptr = (unsigned char *) WPL_Name;
max = sizeof(WPL_Name)-1;
break;
}
z = FromNaviCtrl.Param.Byte[0]; // Data allocation
c2d6: 20 91 1f 09 lds r18, 0x091F
for(i=0; i < FromNaviCtrl.Param.Byte[1]; i++)
c2da: 30 91 20 09 lds r19, 0x0920
c2de: 33 23 and r19, r19
c2e0: b1 f0 breq .+44 ; 0xc30e <NC_Fills_HoTT_Telemety+0x92>
{
if(z >= max) break;
c2e2: 25 17 cp r18, r21
c2e4: a0 f4 brcc .+40 ; 0xc30e <NC_Fills_HoTT_Telemety+0x92>
break;
}
z = FromNaviCtrl.Param.Byte[0]; // Data allocation
for(i=0; i < FromNaviCtrl.Param.Byte[1]; i++)
c2e6: 30 e0 ldi r19, 0x00 ; 0
c2e8: a0 e2 ldi r26, 0x20 ; 32
c2ea: b9 e0 ldi r27, 0x09 ; 9
c2ec: 02 c0 rjmp .+4 ; 0xc2f2 <NC_Fills_HoTT_Telemety+0x76>
{
if(z >= max) break;
c2ee: 25 17 cp r18, r21
c2f0: 70 f4 brcc .+28 ; 0xc30e <NC_Fills_HoTT_Telemety+0x92>
ptr[z] = FromNaviCtrl.Param.Byte[2+i];
c2f2: e3 2f mov r30, r19
c2f4: f0 e0 ldi r31, 0x00 ; 0
c2f6: e4 5f subi r30, 0xF4 ; 244
c2f8: f6 4f sbci r31, 0xF6 ; 246
c2fa: 45 89 ldd r20, Z+21 ; 0x15
c2fc: fc 01 movw r30, r24
c2fe: e2 0f add r30, r18
c300: f1 1d adc r31, r1
c302: 40 83 st Z, r20
z++;
c304: 2f 5f subi r18, 0xFF ; 255
break;
}
z = FromNaviCtrl.Param.Byte[0]; // Data allocation
for(i=0; i < FromNaviCtrl.Param.Byte[1]; i++)
c306: 3f 5f subi r19, 0xFF ; 255
c308: 4c 91 ld r20, X
c30a: 34 17 cp r19, r20
c30c: 80 f3 brcs .-32 ; 0xc2ee <NC_Fills_HoTT_Telemety+0x72>
c30e: 08 95 ret
0000c310 <BuildHoTT_Vario>:
}
unsigned int BuildHoTT_Vario(void)
{
unsigned int tmp = VARIO_ZERO;
if(VarioCharacter == '+' || VarioCharacter == '-')
c310: 80 91 20 01 lds r24, 0x0120
c314: 8b 32 cpi r24, 0x2B ; 43
c316: 11 f0 breq .+4 ; 0xc31c <BuildHoTT_Vario+0xc>
c318: 8d 32 cpi r24, 0x2D ; 45
c31a: c9 f4 brne .+50 ; 0xc34e <BuildHoTT_Vario+0x3e>
{
tmp = VARIO_ZERO + (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 3;
c31c: 40 91 50 05 lds r20, 0x0550
c320: 20 91 f8 03 lds r18, 0x03F8
c324: 30 91 f9 03 lds r19, 0x03F9
c328: 42 9f mul r20, r18
c32a: c0 01 movw r24, r0
c32c: 43 9f mul r20, r19
c32e: 90 0d add r25, r0
c330: 11 24 eor r1, r1
c332: 63 e0 ldi r22, 0x03 ; 3
c334: 70 e0 ldi r23, 0x00 ; 0
c336: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
c33a: cb 01 movw r24, r22
c33c: 80 5d subi r24, 0xD0 ; 208
c33e: 9a 48 sbci r25, 0x8A ; 138
if(tmp < VARIO_ZERO && tmp > VARIO_ZERO - 50) tmp = VARIO_ZERO - 50; // weil es sonst erst bei < 0,5m/sek piept
c340: 6f 5c subi r22, 0xCF ; 207
c342: 7f 4f sbci r23, 0xFF ; 255
c344: 61 33 cpi r22, 0x31 ; 49
c346: 71 05 cpc r23, r1
c348: 08 f4 brcc .+2 ; 0xc34c <BuildHoTT_Vario+0x3c>
c34a: 40 c0 rjmp .+128 ; 0xc3cc <BuildHoTT_Vario+0xbc>
c34c: 08 95 ret
}
else
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY))
c34e: 80 32 cpi r24, 0x20 ; 32
c350: f9 f4 brne .+62 ; 0xc390 <BuildHoTT_Vario+0x80>
c352: 80 91 cb 03 lds r24, 0x03CB
c356: 81 ff sbrs r24, 1
c358: 3c c0 rjmp .+120 ; 0xc3d2 <BuildHoTT_Vario+0xc2>
{
tmp = VARIO_ZERO + HoTTVarioMeter;
c35a: 80 91 7e 04 lds r24, 0x047E
c35e: 90 91 7f 04 lds r25, 0x047F
c362: 80 5d subi r24, 0xD0 ; 208
c364: 9a 48 sbci r25, 0x8A ; 138
if(tmp > VARIO_ZERO)
c366: 81 33 cpi r24, 0x31 ; 49
c368: 25 e7 ldi r18, 0x75 ; 117
c36a: 92 07 cpc r25, r18
c36c: 30 f0 brcs .+12 ; 0xc37a <BuildHoTT_Vario+0x6a>
{
if(tmp < VARIO_ZERO + 100) tmp = VARIO_ZERO;
c36e: 84 39 cpi r24, 0x94 ; 148
c370: 35 e7 ldi r19, 0x75 ; 117
c372: 93 07 cpc r25, r19
c374: 88 f1 brcs .+98 ; 0xc3d8 <BuildHoTT_Vario+0xc8>
else tmp -= 100;
c376: 84 56 subi r24, 0x64 ; 100
c378: 91 09 sbc r25, r1
}
if(tmp < VARIO_ZERO)
c37a: 80 33 cpi r24, 0x30 ; 48
c37c: 25 e7 ldi r18, 0x75 ; 117
c37e: 92 07 cpc r25, r18
c380: 98 f5 brcc .+102 ; 0xc3e8 <BuildHoTT_Vario+0xd8>
{
if(tmp > VARIO_ZERO - 100) tmp = VARIO_ZERO;
c382: 8d 3c cpi r24, 0xCD ; 205
c384: 34 e7 ldi r19, 0x74 ; 116
c386: 93 07 cpc r25, r19
c388: 50 f5 brcc .+84 ; 0xc3de <BuildHoTT_Vario+0xce>
else tmp += 100;
c38a: 8c 59 subi r24, 0x9C ; 156
c38c: 9f 4f sbci r25, 0xFF ; 255
c38e: 08 95 ret
}
}
else
if(VarioCharacter == '^') tmp = VARIO_ZERO + FromNC_AltitudeSpeed * 10;
c390: 8e 35 cpi r24, 0x5E ; 94
c392: 89 f4 brne .+34 ; 0xc3b6 <BuildHoTT_Vario+0xa6>
c394: 20 91 f3 03 lds r18, 0x03F3
c398: 30 e0 ldi r19, 0x00 ; 0
c39a: c9 01 movw r24, r18
c39c: 88 0f add r24, r24
c39e: 99 1f adc r25, r25
c3a0: 22 0f add r18, r18
c3a2: 33 1f adc r19, r19
c3a4: 22 0f add r18, r18
c3a6: 33 1f adc r19, r19
c3a8: 22 0f add r18, r18
c3aa: 33 1f adc r19, r19
c3ac: 82 0f add r24, r18
c3ae: 93 1f adc r25, r19
c3b0: 80 5d subi r24, 0xD0 ; 208
c3b2: 9a 48 sbci r25, 0x8A ; 138
c3b4: 08 95 ret
else
if(VarioCharacter == 'v') tmp = VARIO_ZERO - FromNC_AltitudeSpeed * 10;
c3b6: 86 37 cpi r24, 0x76 ; 118
c3b8: a9 f4 brne .+42 ; 0xc3e4 <BuildHoTT_Vario+0xd4>
c3ba: 20 91 f3 03 lds r18, 0x03F3
c3be: 36 ef ldi r19, 0xF6 ; 246
c3c0: 32 03 mulsu r19, r18
c3c2: c0 01 movw r24, r0
c3c4: 11 24 eor r1, r1
c3c6: 80 5d subi r24, 0xD0 ; 208
c3c8: 9a 48 sbci r25, 0x8A ; 138
c3ca: 08 95 ret
{
unsigned int tmp = VARIO_ZERO;
if(VarioCharacter == '+' || VarioCharacter == '-')
{
tmp = VARIO_ZERO + (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 3;
if(tmp < VARIO_ZERO && tmp > VARIO_ZERO - 50) tmp = VARIO_ZERO - 50; // weil es sonst erst bei < 0,5m/sek piept
c3cc: 8e ef ldi r24, 0xFE ; 254
c3ce: 94 e7 ldi r25, 0x74 ; 116
c3d0: 08 95 ret
}
}
unsigned int BuildHoTT_Vario(void)
{
unsigned int tmp = VARIO_ZERO;
c3d2: 80 e3 ldi r24, 0x30 ; 48
c3d4: 95 e7 ldi r25, 0x75 ; 117
c3d6: 08 95 ret
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY))
{
tmp = VARIO_ZERO + HoTTVarioMeter;
if(tmp > VARIO_ZERO)
{
if(tmp < VARIO_ZERO + 100) tmp = VARIO_ZERO;
c3d8: 80 e3 ldi r24, 0x30 ; 48
c3da: 95 e7 ldi r25, 0x75 ; 117
c3dc: 08 95 ret
else tmp -= 100;
}
if(tmp < VARIO_ZERO)
{
if(tmp > VARIO_ZERO - 100) tmp = VARIO_ZERO;
c3de: 80 e3 ldi r24, 0x30 ; 48
c3e0: 95 e7 ldi r25, 0x75 ; 117
c3e2: 08 95 ret
}
}
unsigned int BuildHoTT_Vario(void)
{
unsigned int tmp = VARIO_ZERO;
c3e4: 80 e3 ldi r24, 0x30 ; 48
c3e6: 95 e7 ldi r25, 0x75 ; 117
else
if(VarioCharacter == '^') tmp = VARIO_ZERO + FromNC_AltitudeSpeed * 10;
else
if(VarioCharacter == 'v') tmp = VARIO_ZERO - FromNC_AltitudeSpeed * 10;
return(tmp);
}
c3e8: 08 95 ret
0000c3ea <HoTT_Telemety>:
//---------------------------------------------------------------
unsigned char HoTT_Telemety(unsigned char packet_request)
{
c3ea: cf 93 push r28
unsigned char i = 0;
//Debug("rqst: %02X",packet_request);
switch(packet_request)
c3ec: 8a 38 cpi r24, 0x8A ; 138
c3ee: 09 f4 brne .+2 ; 0xc3f2 <HoTT_Telemety+0x8>
c3f0: 36 c2 rjmp .+1132 ; 0xc85e <HoTT_Telemety+0x474>
c3f2: 18 f4 brcc .+6 ; 0xc3fa <HoTT_Telemety+0x10>
c3f4: 89 38 cpi r24, 0x89 ; 137
c3f6: 41 f0 breq .+16 ; 0xc408 <HoTT_Telemety+0x1e>
c3f8: 17 c4 rjmp .+2094 ; 0xcc28 <HoTT_Telemety+0x83e>
c3fa: 8d 38 cpi r24, 0x8D ; 141
c3fc: 09 f4 brne .+2 ; 0xc400 <HoTT_Telemety+0x16>
c3fe: 42 c3 rjmp .+1668 ; 0xca84 <HoTT_Telemety+0x69a>
c400: 8e 38 cpi r24, 0x8E ; 142
c402: 09 f4 brne .+2 ; 0xc406 <HoTT_Telemety+0x1c>
c404: 85 c2 rjmp .+1290 ; 0xc910 <HoTT_Telemety+0x526>
c406: 10 c4 rjmp .+2080 ; 0xcc28 <HoTT_Telemety+0x83e>
{
case HOTT_VARIO_PACKET_ID:
GPSPacket.WarnBeep = HoTT_Waring(); // Achtung: das ist richtig hier, damit der Varioton schon vorher abgestellt wird
c408: c7 de rcall .-626 ; 0xc198 <HoTT_Waring>
c40a: c8 2f mov r28, r24
c40c: 80 93 b6 07 sts 0x07B6, r24
VarioPacket.Altitude = HoehenWert/100 + 500;
c410: 60 91 fe 03 lds r22, 0x03FE
c414: 70 91 ff 03 lds r23, 0x03FF
c418: 80 91 00 04 lds r24, 0x0400
c41c: 90 91 01 04 lds r25, 0x0401
c420: 24 e6 ldi r18, 0x64 ; 100
c422: 30 e0 ldi r19, 0x00 ; 0
c424: 40 e0 ldi r20, 0x00 ; 0
c426: 50 e0 ldi r21, 0x00 ; 0
c428: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
c42c: 2c 50 subi r18, 0x0C ; 12
c42e: 3e 4f sbci r19, 0xFE ; 254
c430: 30 93 e2 06 sts 0x06E2, r19
c434: 20 93 e1 06 sts 0x06E1, r18
if(!GPSPacket.WarnBeep) VarioPacket.m_sec = BuildHoTT_Vario(); else VarioPacket.m_sec = VARIO_ZERO;
c438: c1 11 cpse r28, r1
c43a: 06 c0 rjmp .+12 ; 0xc448 <HoTT_Telemety+0x5e>
c43c: 69 df rcall .-302 ; 0xc310 <BuildHoTT_Vario>
c43e: 90 93 e8 06 sts 0x06E8, r25
c442: 80 93 e7 06 sts 0x06E7, r24
c446: 06 c0 rjmp .+12 ; 0xc454 <HoTT_Telemety+0x6a>
c448: 80 e3 ldi r24, 0x30 ; 48
c44a: 95 e7 ldi r25, 0x75 ; 117
c44c: 90 93 e8 06 sts 0x06E8, r25
c450: 80 93 e7 06 sts 0x06E7, r24
VarioPacket.m_3sec = VarioPacket.m_sec;
c454: 80 91 e7 06 lds r24, 0x06E7
c458: 90 91 e8 06 lds r25, 0x06E8
c45c: 90 93 ea 06 sts 0x06EA, r25
c460: 80 93 e9 06 sts 0x06E9, r24
VarioPacket.m_10sec = VarioPacket.m_sec;
c464: 90 93 ec 06 sts 0x06EC, r25
c468: 80 93 eb 06 sts 0x06EB, r24
if (VarioPacket.Altitude < VarioPacket.MinAltitude) VarioPacket.MinAltitude = VarioPacket.Altitude;
c46c: 80 91 e1 06 lds r24, 0x06E1
c470: 90 91 e2 06 lds r25, 0x06E2
c474: 20 91 e5 06 lds r18, 0x06E5
c478: 30 91 e6 06 lds r19, 0x06E6
c47c: 82 17 cp r24, r18
c47e: 93 07 cpc r25, r19
c480: 24 f4 brge .+8 ; 0xc48a <HoTT_Telemety+0xa0>
c482: 90 93 e6 06 sts 0x06E6, r25
c486: 80 93 e5 06 sts 0x06E5, r24
if (VarioPacket.Altitude > VarioPacket.MaxAltitude) VarioPacket.MaxAltitude = VarioPacket.Altitude;
c48a: 20 91 e3 06 lds r18, 0x06E3
c48e: 30 91 e4 06 lds r19, 0x06E4
c492: 28 17 cp r18, r24
c494: 39 07 cpc r19, r25
c496: 24 f4 brge .+8 ; 0xc4a0 <HoTT_Telemety+0xb6>
c498: 90 93 e4 06 sts 0x06E4, r25
c49c: 80 93 e3 06 sts 0x06E3, r24
VarioPacket.WarnBeep = 0;//HoTT_Waring();
c4a0: 10 92 de 06 sts 0x06DE, r1
HoTT_DataPointer = (unsigned char *) &VarioPacket;
c4a4: 8c ed ldi r24, 0xDC ; 220
c4a6: 96 e0 ldi r25, 0x06 ; 6
c4a8: 90 93 f1 02 sts 0x02F1, r25
c4ac: 80 93 f0 02 sts 0x02F0, r24
VarioPacket.FreeCharacters[0] = VarioCharacter;
c4b0: 80 91 20 01 lds r24, 0x0120
c4b4: 80 93 02 07 sts 0x0702, r24
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) VarioPacket.FreeCharacters[1] = 'C'; else VarioPacket.FreeCharacters[1] = ' ';
c4b8: 80 91 ca 03 lds r24, 0x03CA
c4bc: 80 ff sbrs r24, 0
c4be: 04 c0 rjmp .+8 ; 0xc4c8 <HoTT_Telemety+0xde>
c4c0: 83 e4 ldi r24, 0x43 ; 67
c4c2: 80 93 03 07 sts 0x0703, r24
c4c6: 03 c0 rjmp .+6 ; 0xc4ce <HoTT_Telemety+0xe4>
c4c8: 80 e2 ldi r24, 0x20 ; 32
c4ca: 80 93 03 07 sts 0x0703, r24
// VarioPacket.FreeCharacters[2] = ' ';
if(NC_ErrorCode)
c4ce: e0 91 bb 04 lds r30, 0x04BB
c4d2: ee 23 and r30, r30
c4d4: 81 f1 breq .+96 ; 0xc536 <HoTT_Telemety+0x14c>
{
VarioPacket.Text[0] = NC_ErrorCode/10 + '0';
c4d6: 8d ec ldi r24, 0xCD ; 205
c4d8: e8 9f mul r30, r24
c4da: 81 2d mov r24, r1
c4dc: 11 24 eor r1, r1
c4de: 86 95 lsr r24
c4e0: 86 95 lsr r24
c4e2: 86 95 lsr r24
c4e4: 90 e3 ldi r25, 0x30 ; 48
c4e6: 98 0f add r25, r24
c4e8: 90 93 ed 06 sts 0x06ED, r25
VarioPacket.Text[1] = NC_ErrorCode%10 + '0';
c4ec: 88 0f add r24, r24
c4ee: 98 2f mov r25, r24
c4f0: 99 0f add r25, r25
c4f2: 99 0f add r25, r25
c4f4: 89 0f add r24, r25
c4f6: 2e 2f mov r18, r30
c4f8: 28 1b sub r18, r24
c4fa: 82 2f mov r24, r18
c4fc: 80 5d subi r24, 0xD0 ; 208
c4fe: 80 93 ee 06 sts 0x06EE, r24
VarioPacket.Text[2] = ':';
c502: 8a e3 ldi r24, 0x3A ; 58
c504: 80 93 ef 06 sts 0x06EF, r24
c508: 41 e1 ldi r20, 0x11 ; 17
c50a: e4 9f mul r30, r20
c50c: f0 01 movw r30, r0
c50e: 11 24 eor r1, r1
c510: e4 59 subi r30, 0x94 ; 148
c512: f4 4f sbci r31, 0xF4 ; 244
c514: a0 ef ldi r26, 0xF0 ; 240
c516: b6 e0 ldi r27, 0x06 ; 6
c518: 80 e0 ldi r24, 0x00 ; 0
c51a: 97 e0 ldi r25, 0x07 ; 7
for(i=0; i<16;i++) VarioPacket.Text[i+3] = pgm_read_byte(&NC_ERROR_TEXT[NC_ErrorCode][i]);
c51c: 24 91 lpm r18, Z
c51e: 2d 93 st X+, r18
c520: 31 96 adiw r30, 0x01 ; 1
c522: a8 17 cp r26, r24
c524: b9 07 cpc r27, r25
c526: d1 f7 brne .-12 ; 0xc51c <HoTT_Telemety+0x132>
VarioPacket.Text[19] = ' ';
c528: 80 e2 ldi r24, 0x20 ; 32
c52a: 80 93 00 07 sts 0x0700, r24
VarioPacket.Text[20] = ' ';
c52e: 80 93 01 07 sts 0x0701, r24
{
if(FC_StatusFlags3 & FC_STATUS3_BOAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&BOAT_MODE[i]); // no Error
else for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error
if(FC_StatusFlags3 & FC_STATUS3_REDUNDANCE) VarioPacket.Text[0] = 'R';
}
return(sizeof(VarioPacket));
c532: 8c e2 ldi r24, 0x2C ; 44
c534: 82 c3 rjmp .+1796 ; 0xcc3a <HoTT_Telemety+0x850>
for(i=0; i<16;i++) VarioPacket.Text[i+3] = pgm_read_byte(&NC_ERROR_TEXT[NC_ErrorCode][i]);
VarioPacket.Text[19] = ' ';
VarioPacket.Text[20] = ' ';
}
else
if(LowVoltageLandingActive) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&LANDING[i]); // no Error
c536: 80 91 c1 03 lds r24, 0x03C1
c53a: 88 23 and r24, r24
c53c: 69 f0 breq .+26 ; 0xc558 <HoTT_Telemety+0x16e>
c53e: e2 ef ldi r30, 0xF2 ; 242
c540: fd e0 ldi r31, 0x0D ; 13
c542: ad ee ldi r26, 0xED ; 237
c544: b6 e0 ldi r27, 0x06 ; 6
c546: 87 e0 ldi r24, 0x07 ; 7
c548: 9e e0 ldi r25, 0x0E ; 14
c54a: 24 91 lpm r18, Z
c54c: 2d 93 st X+, r18
c54e: 31 96 adiw r30, 0x01 ; 1
c550: e8 17 cp r30, r24
c552: f9 07 cpc r31, r25
c554: d1 f7 brne .-12 ; 0xc54a <HoTT_Telemety+0x160>
c556: 6a c3 rjmp .+1748 ; 0xcc2c <HoTT_Telemety+0x842>
else
if(FC_StatusFlags & FC_STATUS_LOWBAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&UNDERVOLTAGE[i]); // no Error
c558: 80 91 cb 03 lds r24, 0x03CB
c55c: 85 ff sbrs r24, 5
c55e: 0d c0 rjmp .+26 ; 0xc57a <HoTT_Telemety+0x190>
c560: e8 e0 ldi r30, 0x08 ; 8
c562: fe e0 ldi r31, 0x0E ; 14
c564: ad ee ldi r26, 0xED ; 237
c566: b6 e0 ldi r27, 0x06 ; 6
c568: 8d e1 ldi r24, 0x1D ; 29
c56a: 9e e0 ldi r25, 0x0E ; 14
c56c: 24 91 lpm r18, Z
c56e: 2d 93 st X+, r18
c570: 31 96 adiw r30, 0x01 ; 1
c572: e8 17 cp r30, r24
c574: f9 07 cpc r31, r25
c576: d1 f7 brne .-12 ; 0xc56c <HoTT_Telemety+0x182>
c578: 5b c3 rjmp .+1718 ; 0xcc30 <HoTT_Telemety+0x846>
else
if(ShowSettingNameTime) // no Error
c57a: 80 91 80 04 lds r24, 0x0480
c57e: 88 23 and r24, r24
c580: b9 f1 breq .+110 ; 0xc5f0 <HoTT_Telemety+0x206>
c582: ef eb ldi r30, 0xBF ; 191
c584: fd e0 ldi r31, 0x0D ; 13
c586: ad ee ldi r26, 0xED ; 237
c588: b6 e0 ldi r27, 0x06 ; 6
c58a: 86 ec ldi r24, 0xC6 ; 198
c58c: 9d e0 ldi r25, 0x0D ; 13
{
for(i=0; i<sizeof(SETTING);i++) VarioPacket.Text[i] = pgm_read_byte(&SETTING[i]);
c58e: 24 91 lpm r18, Z
c590: 2d 93 st X+, r18
c592: 31 96 adiw r30, 0x01 ; 1
c594: e8 17 cp r30, r24
c596: f9 07 cpc r31, r25
c598: d1 f7 brne .-12 ; 0xc58e <HoTT_Telemety+0x1a4>
VarioPacket.Text[4] = '0' + ActiveParamSet;
c59a: 80 91 52 01 lds r24, 0x0152
c59e: 80 5d subi r24, 0xD0 ; 208
c5a0: 80 93 f1 06 sts 0x06F1, r24
c5a4: ea eb ldi r30, 0xBA ; 186
c5a6: f5 e0 ldi r31, 0x05 ; 5
c5a8: a4 ef ldi r26, 0xF4 ; 244
c5aa: b6 e0 ldi r27, 0x06 ; 6
c5ac: 86 ec ldi r24, 0xC6 ; 198
c5ae: 95 e0 ldi r25, 0x05 ; 5
for(i=0; i<sizeof(EE_Parameter.Name);i++) VarioPacket.Text[i+7] = EE_Parameter.Name[i]; // no Error
c5b0: 21 91 ld r18, Z+
c5b2: 2d 93 st X+, r18
c5b4: e8 17 cp r30, r24
c5b6: f9 07 cpc r31, r25
c5b8: d9 f7 brne .-10 ; 0xc5b0 <HoTT_Telemety+0x1c6>
if(FC_StatusFlags3 & FC_STATUS3_BOAT)
c5ba: 80 91 c9 03 lds r24, 0x03C9
c5be: 81 ff sbrs r24, 1
c5c0: 0e c0 rjmp .+28 ; 0xc5de <HoTT_Telemety+0x1f4>
{
VarioPacket.Text[17] = 'B';
c5c2: 82 e4 ldi r24, 0x42 ; 66
c5c4: 80 93 fe 06 sts 0x06FE, r24
VarioPacket.Text[18] = 'O';
c5c8: 8f e4 ldi r24, 0x4F ; 79
c5ca: 80 93 ff 06 sts 0x06FF, r24
VarioPacket.Text[19] = 'A';
c5ce: 81 e4 ldi r24, 0x41 ; 65
c5d0: 80 93 00 07 sts 0x0700, r24
VarioPacket.Text[20] = 'T';
c5d4: 84 e5 ldi r24, 0x54 ; 84
c5d6: 80 93 01 07 sts 0x0701, r24
{
if(FC_StatusFlags3 & FC_STATUS3_BOAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&BOAT_MODE[i]); // no Error
else for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error
if(FC_StatusFlags3 & FC_STATUS3_REDUNDANCE) VarioPacket.Text[0] = 'R';
}
return(sizeof(VarioPacket));
c5da: 8c e2 ldi r24, 0x2C ; 44
c5dc: 2e c3 rjmp .+1628 ; 0xcc3a <HoTT_Telemety+0x850>
VarioPacket.Text[19] = 'A';
VarioPacket.Text[20] = 'T';
}
else
{
VarioPacket.Text[18] = ' ';
c5de: 80 e2 ldi r24, 0x20 ; 32
c5e0: 80 93 ff 06 sts 0x06FF, r24
VarioPacket.Text[19] = ' ';
c5e4: 80 93 00 07 sts 0x0700, r24
VarioPacket.Text[20] = ' ';
c5e8: 80 93 01 07 sts 0x0701, r24
{
if(FC_StatusFlags3 & FC_STATUS3_BOAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&BOAT_MODE[i]); // no Error
else for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error
if(FC_StatusFlags3 & FC_STATUS3_REDUNDANCE) VarioPacket.Text[0] = 'R';
}
return(sizeof(VarioPacket));
c5ec: 8c e2 ldi r24, 0x2C ; 44
c5ee: 25 c3 rjmp .+1610 ; 0xcc3a <HoTT_Telemety+0x850>
VarioPacket.Text[19] = ' ';
VarioPacket.Text[20] = ' ';
}
}
else
if(NaviData_WaypointNumber)
c5f0: 80 91 8c 04 lds r24, 0x048C
c5f4: 88 23 and r24, r24
c5f6: 09 f4 brne .+2 ; 0xc5fa <HoTT_Telemety+0x210>
c5f8: da c0 rjmp .+436 ; 0xc7ae <HoTT_Telemety+0x3c4>
{
unsigned int tmp_int;
unsigned char tmp;
VarioPacket.Text[0] = 'W'; VarioPacket.Text[1] = 'P';
c5fa: 97 e5 ldi r25, 0x57 ; 87
c5fc: 90 93 ed 06 sts 0x06ED, r25
c600: 90 e5 ldi r25, 0x50 ; 80
c602: 90 93 ee 06 sts 0x06EE, r25
VarioPacket.Text[2] = ' ';
c606: 90 e2 ldi r25, 0x20 ; 32
c608: 90 93 ef 06 sts 0x06EF, r25
VarioPacket.Text[3] = '0'+(NaviData_WaypointIndex) / 10;
c60c: 30 91 8d 04 lds r19, 0x048D
c610: 2d ec ldi r18, 0xCD ; 205
c612: 32 9f mul r19, r18
c614: 41 2d mov r20, r1
c616: 11 24 eor r1, r1
c618: 46 95 lsr r20
c61a: 46 95 lsr r20
c61c: 46 95 lsr r20
c61e: 50 e3 ldi r21, 0x30 ; 48
c620: 54 0f add r21, r20
c622: 50 93 f0 06 sts 0x06F0, r21
VarioPacket.Text[4] = '0'+(NaviData_WaypointIndex) % 10;
c626: 44 0f add r20, r20
c628: 54 2f mov r21, r20
c62a: 55 0f add r21, r21
c62c: 55 0f add r21, r21
c62e: 45 0f add r20, r21
c630: 34 1b sub r19, r20
c632: 30 5d subi r19, 0xD0 ; 208
c634: 30 93 f1 06 sts 0x06F1, r19
VarioPacket.Text[5] = '/';
c638: 3f e2 ldi r19, 0x2F ; 47
c63a: 30 93 f2 06 sts 0x06F2, r19
VarioPacket.Text[6] = '0'+(NaviData_WaypointNumber) / 10;
c63e: 82 9f mul r24, r18
c640: 21 2d mov r18, r1
c642: 11 24 eor r1, r1
c644: 26 95 lsr r18
c646: 26 95 lsr r18
c648: 26 95 lsr r18
c64a: 30 e3 ldi r19, 0x30 ; 48
c64c: 32 0f add r19, r18
c64e: 30 93 f3 06 sts 0x06F3, r19
VarioPacket.Text[7] = '0'+(NaviData_WaypointNumber) % 10;
c652: 22 0f add r18, r18
c654: 32 2f mov r19, r18
c656: 33 0f add r19, r19
c658: 33 0f add r19, r19
c65a: 23 0f add r18, r19
c65c: 82 1b sub r24, r18
c65e: 80 5d subi r24, 0xD0 ; 208
c660: 80 93 f4 06 sts 0x06F4, r24
VarioPacket.Text[8] = ' ';
c664: 90 93 f5 06 sts 0x06F5, r25
tmp_int = NaviData_TargetDistance;
c668: 40 91 85 04 lds r20, 0x0485
c66c: 50 91 86 04 lds r21, 0x0486
if(tmp_int > 1000) { VarioPacket.Text[9] = '0'+(tmp_int) / 1000; tmp_int %= 1000;}
c670: 49 3e cpi r20, 0xE9 ; 233
c672: 83 e0 ldi r24, 0x03 ; 3
c674: 58 07 cpc r21, r24
c676: 08 f1 brcs .+66 ; 0xc6ba <HoTT_Telemety+0x2d0>
c678: 9a 01 movw r18, r20
c67a: 36 95 lsr r19
c67c: 27 95 ror r18
c67e: 36 95 lsr r19
c680: 27 95 ror r18
c682: 36 95 lsr r19
c684: 27 95 ror r18
c686: a5 ec ldi r26, 0xC5 ; 197
c688: b0 e2 ldi r27, 0x20 ; 32
c68a: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
c68e: 92 95 swap r25
c690: 82 95 swap r24
c692: 8f 70 andi r24, 0x0F ; 15
c694: 89 27 eor r24, r25
c696: 9f 70 andi r25, 0x0F ; 15
c698: 89 27 eor r24, r25
c69a: 20 e3 ldi r18, 0x30 ; 48
c69c: 28 0f add r18, r24
c69e: 20 93 f6 06 sts 0x06F6, r18
c6a2: 68 ee ldi r22, 0xE8 ; 232
c6a4: 73 e0 ldi r23, 0x03 ; 3
c6a6: 86 9f mul r24, r22
c6a8: 90 01 movw r18, r0
c6aa: 87 9f mul r24, r23
c6ac: 30 0d add r19, r0
c6ae: 96 9f mul r25, r22
c6b0: 30 0d add r19, r0
c6b2: 11 24 eor r1, r1
c6b4: 42 1b sub r20, r18
c6b6: 53 0b sbc r21, r19
c6b8: 03 c0 rjmp .+6 ; 0xc6c0 <HoTT_Telemety+0x2d6>
else VarioPacket.Text[9] = ' ';
c6ba: 80 e2 ldi r24, 0x20 ; 32
c6bc: 80 93 f6 06 sts 0x06F6, r24
if(tmp_int > 100) { VarioPacket.Text[10] = '0'+(tmp_int) / 100; tmp_int %= 100;}
c6c0: 45 36 cpi r20, 0x65 ; 101
c6c2: 51 05 cpc r21, r1
c6c4: c0 f0 brcs .+48 ; 0xc6f6 <HoTT_Telemety+0x30c>
c6c6: 9a 01 movw r18, r20
c6c8: 36 95 lsr r19
c6ca: 27 95 ror r18
c6cc: 36 95 lsr r19
c6ce: 27 95 ror r18
c6d0: ab e7 ldi r26, 0x7B ; 123
c6d2: b4 e1 ldi r27, 0x14 ; 20
c6d4: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
c6d8: 96 95 lsr r25
c6da: 87 95 ror r24
c6dc: 20 e3 ldi r18, 0x30 ; 48
c6de: 28 0f add r18, r24
c6e0: 20 93 f7 06 sts 0x06F7, r18
c6e4: 64 e6 ldi r22, 0x64 ; 100
c6e6: 68 9f mul r22, r24
c6e8: 90 01 movw r18, r0
c6ea: 69 9f mul r22, r25
c6ec: 30 0d add r19, r0
c6ee: 11 24 eor r1, r1
c6f0: 42 1b sub r20, r18
c6f2: 53 0b sbc r21, r19
c6f4: 03 c0 rjmp .+6 ; 0xc6fc <HoTT_Telemety+0x312>
else VarioPacket.Text[10] = ' ';
c6f6: 80 e2 ldi r24, 0x20 ; 32
c6f8: 80 93 f7 06 sts 0x06F7, r24
VarioPacket.Text[11] = '0'+(tmp_int) / 10;
c6fc: 9a 01 movw r18, r20
c6fe: ad ec ldi r26, 0xCD ; 205
c700: bc ec ldi r27, 0xCC ; 204
c702: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
c706: 96 95 lsr r25
c708: 87 95 ror r24
c70a: 96 95 lsr r25
c70c: 87 95 ror r24
c70e: 96 95 lsr r25
c710: 87 95 ror r24
c712: 20 e3 ldi r18, 0x30 ; 48
c714: 28 0f add r18, r24
c716: 20 93 f8 06 sts 0x06F8, r18
VarioPacket.Text[12] = '0'+(tmp_int) % 10;
c71a: 9c 01 movw r18, r24
c71c: 22 0f add r18, r18
c71e: 33 1f adc r19, r19
c720: 88 0f add r24, r24
c722: 99 1f adc r25, r25
c724: 88 0f add r24, r24
c726: 99 1f adc r25, r25
c728: 88 0f add r24, r24
c72a: 99 1f adc r25, r25
c72c: 82 0f add r24, r18
c72e: 93 1f adc r25, r19
c730: 48 1b sub r20, r24
c732: 59 0b sbc r21, r25
c734: 40 5d subi r20, 0xD0 ; 208
c736: 40 93 f9 06 sts 0x06F9, r20
VarioPacket.Text[13] = 'm';
c73a: 8d e6 ldi r24, 0x6D ; 109
c73c: 80 93 fa 06 sts 0x06FA, r24
VarioPacket.Text[14] = ' ';
c740: 80 e2 ldi r24, 0x20 ; 32
c742: 80 93 fb 06 sts 0x06FB, r24
tmp = NaviData_TargetHoldTime;
c746: 80 91 8b 04 lds r24, 0x048B
if(tmp > 100) { VarioPacket.Text[15] = '0'+(tmp) / 100; tmp %= 100;} else VarioPacket.Text[15] = ' ';
c74a: 85 36 cpi r24, 0x65 ; 101
c74c: 78 f0 brcs .+30 ; 0xc76c <HoTT_Telemety+0x382>
c74e: 99 e2 ldi r25, 0x29 ; 41
c750: 89 9f mul r24, r25
c752: 91 2d mov r25, r1
c754: 11 24 eor r1, r1
c756: 92 95 swap r25
c758: 9f 70 andi r25, 0x0F ; 15
c75a: 20 e3 ldi r18, 0x30 ; 48
c75c: 29 0f add r18, r25
c75e: 20 93 fc 06 sts 0x06FC, r18
c762: 24 e6 ldi r18, 0x64 ; 100
c764: 92 9f mul r25, r18
c766: 80 19 sub r24, r0
c768: 11 24 eor r1, r1
c76a: 03 c0 rjmp .+6 ; 0xc772 <HoTT_Telemety+0x388>
c76c: 90 e2 ldi r25, 0x20 ; 32
c76e: 90 93 fc 06 sts 0x06FC, r25
VarioPacket.Text[16] = '0'+(tmp) / 10;
c772: 9d ec ldi r25, 0xCD ; 205
c774: 89 9f mul r24, r25
c776: 91 2d mov r25, r1
c778: 11 24 eor r1, r1
c77a: 96 95 lsr r25
c77c: 96 95 lsr r25
c77e: 96 95 lsr r25
c780: 20 e3 ldi r18, 0x30 ; 48
c782: 29 0f add r18, r25
c784: 20 93 fd 06 sts 0x06FD, r18
VarioPacket.Text[17] = '0'+(tmp) % 10;
c788: 99 0f add r25, r25
c78a: 29 2f mov r18, r25
c78c: 22 0f add r18, r18
c78e: 22 0f add r18, r18
c790: 92 0f add r25, r18
c792: 89 1b sub r24, r25
c794: 80 5d subi r24, 0xD0 ; 208
c796: 80 93 fe 06 sts 0x06FE, r24
VarioPacket.Text[18] = 's';
c79a: 83 e7 ldi r24, 0x73 ; 115
c79c: 80 93 ff 06 sts 0x06FF, r24
VarioPacket.Text[19] = ' ';
c7a0: 80 e2 ldi r24, 0x20 ; 32
c7a2: 80 93 00 07 sts 0x0700, r24
VarioPacket.Text[20] = ' ';
c7a6: 80 93 01 07 sts 0x0701, r24
{
if(FC_StatusFlags3 & FC_STATUS3_BOAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&BOAT_MODE[i]); // no Error
else for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error
if(FC_StatusFlags3 & FC_STATUS3_REDUNDANCE) VarioPacket.Text[0] = 'R';
}
return(sizeof(VarioPacket));
c7aa: 8c e2 ldi r24, 0x2C ; 44
c7ac: 46 c2 rjmp .+1164 ; 0xcc3a <HoTT_Telemety+0x850>
VarioPacket.Text[18] = 's';
VarioPacket.Text[19] = ' ';
VarioPacket.Text[20] = ' ';
}
else
if(NC_To_FC_Flags & NC_TO_FC_SIMULATION_ACTIVE)
c7ae: 80 91 b7 04 lds r24, 0x04B7
c7b2: 84 ff sbrs r24, 4
c7b4: 0d c0 rjmp .+26 ; 0xc7d0 <HoTT_Telemety+0x3e6>
c7b6: ec ed ldi r30, 0xDC ; 220
c7b8: fd e0 ldi r31, 0x0D ; 13
c7ba: ad ee ldi r26, 0xED ; 237
c7bc: b6 e0 ldi r27, 0x06 ; 6
c7be: 81 ef ldi r24, 0xF1 ; 241
c7c0: 9d e0 ldi r25, 0x0D ; 13
{
for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&SIMULATION[i]);
c7c2: 24 91 lpm r18, Z
c7c4: 2d 93 st X+, r18
c7c6: 31 96 adiw r30, 0x01 ; 1
c7c8: e8 17 cp r30, r24
c7ca: f9 07 cpc r31, r25
c7cc: d1 f7 brne .-12 ; 0xc7c2 <HoTT_Telemety+0x3d8>
c7ce: 32 c2 rjmp .+1124 ; 0xcc34 <HoTT_Telemety+0x84a>
}
else
if(!CalibrationDone)
c7d0: 80 91 ef 03 lds r24, 0x03EF
c7d4: 81 11 cpse r24, r1
c7d6: 1d c0 rjmp .+58 ; 0xc812 <HoTT_Telemety+0x428>
c7d8: e0 e2 ldi r30, 0x20 ; 32
c7da: fe e0 ldi r31, 0x0E ; 14
c7dc: ad ee ldi r26, 0xED ; 237
c7de: b6 e0 ldi r27, 0x06 ; 6
c7e0: 81 e3 ldi r24, 0x31 ; 49
c7e2: 9e e0 ldi r25, 0x0E ; 14
{
for(i=0; i<17;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i+2]); // no Error and not calibrated
c7e4: 24 91 lpm r18, Z
c7e6: 2d 93 st X+, r18
c7e8: 31 96 adiw r30, 0x01 ; 1
c7ea: e8 17 cp r30, r24
c7ec: f9 07 cpc r31, r25
c7ee: d1 f7 brne .-12 ; 0xc7e4 <HoTT_Telemety+0x3fa>
VarioPacket.Text[16] = '0'+VERSION_MAJOR;
c7f0: 82 e3 ldi r24, 0x32 ; 50
c7f2: 80 93 fd 06 sts 0x06FD, r24
VarioPacket.Text[17] = '.';
c7f6: 8e e2 ldi r24, 0x2E ; 46
c7f8: 80 93 fe 06 sts 0x06FE, r24
VarioPacket.Text[18] = '0'+VERSION_MINOR/10;
c7fc: 80 e3 ldi r24, 0x30 ; 48
c7fe: 80 93 ff 06 sts 0x06FF, r24
VarioPacket.Text[19] = '0'+VERSION_MINOR%10;
c802: 88 e3 ldi r24, 0x38 ; 56
c804: 80 93 00 07 sts 0x0700, r24
VarioPacket.Text[20] = 'a'+VERSION_PATCH;
c808: 81 e6 ldi r24, 0x61 ; 97
c80a: 80 93 01 07 sts 0x0701, r24
{
if(FC_StatusFlags3 & FC_STATUS3_BOAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&BOAT_MODE[i]); // no Error
else for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error
if(FC_StatusFlags3 & FC_STATUS3_REDUNDANCE) VarioPacket.Text[0] = 'R';
}
return(sizeof(VarioPacket));
c80e: 8c e2 ldi r24, 0x2C ; 44
c810: 14 c2 rjmp .+1064 ; 0xcc3a <HoTT_Telemety+0x850>
VarioPacket.Text[19] = '0'+VERSION_MINOR%10;
VarioPacket.Text[20] = 'a'+VERSION_PATCH;
}
else
{
if(FC_StatusFlags3 & FC_STATUS3_BOAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&BOAT_MODE[i]); // no Error
c812: 80 91 c9 03 lds r24, 0x03C9
c816: 81 ff sbrs r24, 1
c818: 0d c0 rjmp .+26 ; 0xc834 <HoTT_Telemety+0x44a>
c81a: e6 ec ldi r30, 0xC6 ; 198
c81c: fd e0 ldi r31, 0x0D ; 13
c81e: ad ee ldi r26, 0xED ; 237
c820: b6 e0 ldi r27, 0x06 ; 6
c822: 8b ed ldi r24, 0xDB ; 219
c824: 9d e0 ldi r25, 0x0D ; 13
c826: 24 91 lpm r18, Z
c828: 2d 93 st X+, r18
c82a: 31 96 adiw r30, 0x01 ; 1
c82c: e8 17 cp r30, r24
c82e: f9 07 cpc r31, r25
c830: d1 f7 brne .-12 ; 0xc826 <HoTT_Telemety+0x43c>
c832: 0c c0 rjmp .+24 ; 0xc84c <HoTT_Telemety+0x462>
c834: ee e1 ldi r30, 0x1E ; 30
c836: fe e0 ldi r31, 0x0E ; 14
c838: ad ee ldi r26, 0xED ; 237
c83a: b6 e0 ldi r27, 0x06 ; 6
c83c: 83 e3 ldi r24, 0x33 ; 51
c83e: 9e e0 ldi r25, 0x0E ; 14
else for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error
c840: 24 91 lpm r18, Z
c842: 2d 93 st X+, r18
c844: 31 96 adiw r30, 0x01 ; 1
c846: e8 17 cp r30, r24
c848: f9 07 cpc r31, r25
c84a: d1 f7 brne .-12 ; 0xc840 <HoTT_Telemety+0x456>
if(FC_StatusFlags3 & FC_STATUS3_REDUNDANCE) VarioPacket.Text[0] = 'R';
c84c: 80 91 c9 03 lds r24, 0x03C9
c850: 80 ff sbrs r24, 0
c852: f2 c1 rjmp .+996 ; 0xcc38 <HoTT_Telemety+0x84e>
c854: 82 e5 ldi r24, 0x52 ; 82
c856: 80 93 ed 06 sts 0x06ED, r24
}
return(sizeof(VarioPacket));
c85a: 8c e2 ldi r24, 0x2C ; 44
c85c: ee c1 rjmp .+988 ; 0xcc3a <HoTT_Telemety+0x850>
break;
case HOTT_GPS_PACKET_ID:
GPSPacket.Altitude = HoehenWert/100 + 500;
c85e: 60 91 fe 03 lds r22, 0x03FE
c862: 70 91 ff 03 lds r23, 0x03FF
c866: 80 91 00 04 lds r24, 0x0400
c86a: 90 91 01 04 lds r25, 0x0401
c86e: 24 e6 ldi r18, 0x64 ; 100
c870: 30 e0 ldi r19, 0x00 ; 0
c872: 40 e0 ldi r20, 0x00 ; 0
c874: 50 e0 ldi r21, 0x00 ; 0
c876: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
c87a: 2c 50 subi r18, 0x0C ; 12
c87c: 3e 4f sbci r19, 0xFE ; 254
c87e: 30 93 ca 07 sts 0x07CA, r19
c882: 20 93 c9 07 sts 0x07C9, r18
// GPSPacket.Distance = GPSInfo.HomeDistance/10; // macht die NC
// GPSPacket.Heading = GPSInfo.HomeBearing/2; // macht die NC
// GPSPacket.Speed = (GPSInfo.Speed * 36) / 10; // macht die NC
// GPSPacket.WarnBeep = HoTT_Waring(); //(wird jetzt weiter oben gemacht)
if(!GPSPacket.WarnBeep) GPSPacket.m_sec = BuildHoTT_Vario(); else GPSPacket.m_sec = VARIO_ZERO;
c886: 80 91 b6 07 lds r24, 0x07B6
c88a: 81 11 cpse r24, r1
c88c: 06 c0 rjmp .+12 ; 0xc89a <HoTT_Telemety+0x4b0>
c88e: 40 dd rcall .-1408 ; 0xc310 <BuildHoTT_Vario>
c890: 90 93 cc 07 sts 0x07CC, r25
c894: 80 93 cb 07 sts 0x07CB, r24
c898: 06 c0 rjmp .+12 ; 0xc8a6 <HoTT_Telemety+0x4bc>
c89a: 80 e3 ldi r24, 0x30 ; 48
c89c: 95 e7 ldi r25, 0x75 ; 117
c89e: 90 93 cc 07 sts 0x07CC, r25
c8a2: 80 93 cb 07 sts 0x07CB, r24
GPSPacket.m_3sec = 120;
c8a6: 88 e7 ldi r24, 0x78 ; 120
c8a8: 80 93 cd 07 sts 0x07CD, r24
GPSPacket.NumOfSats = GPSInfo.NumOfSats;
c8ac: 80 91 d8 08 lds r24, 0x08D8
c8b0: 80 93 ce 07 sts 0x07CE, r24
if(GPSInfo.Flags & FLAG_DIFFSOLN) GPSPacket.SatFix = 'D';
c8b4: 80 91 d7 08 lds r24, 0x08D7
c8b8: 81 ff sbrs r24, 1
c8ba: 04 c0 rjmp .+8 ; 0xc8c4 <HoTT_Telemety+0x4da>
c8bc: 84 e4 ldi r24, 0x44 ; 68
c8be: 80 93 cf 07 sts 0x07CF, r24
c8c2: 0b c0 rjmp .+22 ; 0xc8da <HoTT_Telemety+0x4f0>
else
if(GPSInfo.SatFix == SATFIX_3D) GPSPacket.SatFix = ' ';
c8c4: 80 91 d9 08 lds r24, 0x08D9
c8c8: 83 30 cpi r24, 0x03 ; 3
c8ca: 21 f4 brne .+8 ; 0xc8d4 <HoTT_Telemety+0x4ea>
c8cc: 80 e2 ldi r24, 0x20 ; 32
c8ce: 80 93 cf 07 sts 0x07CF, r24
c8d2: 03 c0 rjmp .+6 ; 0xc8da <HoTT_Telemety+0x4f0>
else GPSPacket.SatFix = '!';
c8d4: 81 e2 ldi r24, 0x21 ; 33
c8d6: 80 93 cf 07 sts 0x07CF, r24
HoTT_DataPointer = (unsigned char *) &GPSPacket;
c8da: 84 eb ldi r24, 0xB4 ; 180
c8dc: 97 e0 ldi r25, 0x07 ; 7
c8de: 90 93 f1 02 sts 0x02F1, r25
c8e2: 80 93 f0 02 sts 0x02F0, r24
GPSPacket.FreeCharacters[0] = NC_GPS_ModeCharacter;
c8e6: 80 91 96 02 lds r24, 0x0296
c8ea: 80 93 db 07 sts 0x07DB, r24
GPSPacket.FreeCharacters[2] = GPSPacket.SatFix;
c8ee: 80 91 cf 07 lds r24, 0x07CF
c8f2: 80 93 dd 07 sts 0x07DD, r24
GPSPacket.HomeDirection = GPSInfo.HomeBearing / 2;//230;
c8f6: 80 91 dd 08 lds r24, 0x08DD
c8fa: 90 91 de 08 lds r25, 0x08DE
c8fe: 99 23 and r25, r25
c900: 0c f4 brge .+2 ; 0xc904 <HoTT_Telemety+0x51a>
c902: 01 96 adiw r24, 0x01 ; 1
c904: 95 95 asr r25
c906: 87 95 ror r24
c908: 80 93 d0 07 sts 0x07D0, r24
return(sizeof(GPSPacket));
c90c: 8c e2 ldi r24, 0x2C ; 44
c90e: 95 c1 rjmp .+810 ; 0xcc3a <HoTT_Telemety+0x850>
break;
case HOTT_ELECTRIC_AIR_PACKET_ID:
GetHottestBl();
c910: f0 db rcall .-2080 ; 0xc0f2 <GetHottestBl>
ElectricAirPacket.Altitude = HoehenWert/100 + 500;
c912: 60 91 fe 03 lds r22, 0x03FE
c916: 70 91 ff 03 lds r23, 0x03FF
c91a: 80 91 00 04 lds r24, 0x0400
c91e: 90 91 01 04 lds r25, 0x0401
c922: 24 e6 ldi r18, 0x64 ; 100
c924: 30 e0 ldi r19, 0x00 ; 0
c926: 40 e0 ldi r20, 0x00 ; 0
c928: 50 e0 ldi r21, 0x00 ; 0
c92a: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
c92e: 2c 50 subi r18, 0x0C ; 12
c930: 3e 4f sbci r19, 0xFE ; 254
c932: 30 93 95 06 sts 0x0695, r19
c936: 20 93 94 06 sts 0x0694, r18
ElectricAirPacket.Battery1 = UBat;
c93a: 80 91 1a 01 lds r24, 0x011A
c93e: 90 91 1b 01 lds r25, 0x011B
c942: 90 93 8f 06 sts 0x068F, r25
c946: 80 93 8e 06 sts 0x068E, r24
ElectricAirPacket.Battery2 = UBat;
c94a: 80 91 1a 01 lds r24, 0x011A
c94e: 90 91 1b 01 lds r25, 0x011B
c952: 90 93 91 06 sts 0x0691, r25
c956: 80 93 90 06 sts 0x0690, r24
ElectricAirPacket.VoltageCell1 = CompassCorrected / 2;
c95a: 80 91 65 06 lds r24, 0x0665
c95e: 90 91 66 06 lds r25, 0x0666
c962: 99 23 and r25, r25
c964: 0c f4 brge .+2 ; 0xc968 <HoTT_Telemety+0x57e>
c966: 01 96 adiw r24, 0x01 ; 1
c968: 95 95 asr r25
c96a: 87 95 ror r24
c96c: 80 93 80 06 sts 0x0680, r24
ElectricAirPacket.VoltageCell8 = ElectricAirPacket.VoltageCell1;
c970: 80 93 87 06 sts 0x0687, r24
ElectricAirPacket.VoltageCell6 = GPSInfo.HomeBearing / 2;
c974: 80 91 dd 08 lds r24, 0x08DD
c978: 90 91 de 08 lds r25, 0x08DE
c97c: 99 23 and r25, r25
c97e: 0c f4 brge .+2 ; 0xc982 <HoTT_Telemety+0x598>
c980: 01 96 adiw r24, 0x01 ; 1
c982: ac 01 movw r20, r24
c984: 55 95 asr r21
c986: 47 95 ror r20
c988: 40 93 85 06 sts 0x0685, r20
ElectricAirPacket.VoltageCell7 = GPSInfo.HomeDistance/20;
c98c: 20 91 db 08 lds r18, 0x08DB
c990: 30 91 dc 08 lds r19, 0x08DC
c994: ad ec ldi r26, 0xCD ; 205
c996: bc ec ldi r27, 0xCC ; 204
c998: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
c99c: 92 95 swap r25
c99e: 82 95 swap r24
c9a0: 8f 70 andi r24, 0x0F ; 15
c9a2: 89 27 eor r24, r25
c9a4: 9f 70 andi r25, 0x0F ; 15
c9a6: 89 27 eor r24, r25
c9a8: 80 93 86 06 sts 0x0686, r24
ElectricAirPacket.VoltageCell13 = ElectricAirPacket.VoltageCell6;
c9ac: 40 93 8c 06 sts 0x068C, r20
ElectricAirPacket.VoltageCell14 = ElectricAirPacket.VoltageCell7;
c9b0: 80 93 8d 06 sts 0x068D, r24
if(!GPSPacket.WarnBeep) ElectricAirPacket.m_sec = BuildHoTT_Vario(); else ElectricAirPacket.m_sec = VARIO_ZERO;
c9b4: 80 91 b6 07 lds r24, 0x07B6
c9b8: 81 11 cpse r24, r1
c9ba: 06 c0 rjmp .+12 ; 0xc9c8 <HoTT_Telemety+0x5de>
c9bc: a9 dc rcall .-1710 ; 0xc310 <BuildHoTT_Vario>
c9be: 90 93 9d 06 sts 0x069D, r25
c9c2: 80 93 9c 06 sts 0x069C, r24
c9c6: 06 c0 rjmp .+12 ; 0xc9d4 <HoTT_Telemety+0x5ea>
c9c8: 80 e3 ldi r24, 0x30 ; 48
c9ca: 95 e7 ldi r25, 0x75 ; 117
c9cc: 90 93 9d 06 sts 0x069D, r25
c9d0: 80 93 9c 06 sts 0x069C, r24
ElectricAirPacket.m_3sec = 120;
c9d4: 88 e7 ldi r24, 0x78 ; 120
c9d6: 80 93 9e 06 sts 0x069E, r24
ElectricAirPacket.InputVoltage = UBat;
c9da: 80 91 1a 01 lds r24, 0x011A
c9de: 90 91 1b 01 lds r25, 0x011B
c9e2: 90 93 99 06 sts 0x0699, r25
c9e6: 80 93 98 06 sts 0x0698, r24
ElectricAirPacket.Temperature1 = MinBlTemperture + 20;
c9ea: 80 91 83 04 lds r24, 0x0483
c9ee: 8c 5e subi r24, 0xEC ; 236
c9f0: 80 93 92 06 sts 0x0692, r24
ElectricAirPacket.Temperature2 = MaxBlTemperture + 20;
c9f4: 80 91 84 04 lds r24, 0x0484
c9f8: 8c 5e subi r24, 0xEC ; 236
c9fa: 80 93 93 06 sts 0x0693, r24
ElectricAirPacket.Capacity = Capacity.UsedCapacity/10;
c9fe: 20 91 19 05 lds r18, 0x0519
ca02: 30 91 1a 05 lds r19, 0x051A
ca06: ad ec ldi r26, 0xCD ; 205
ca08: bc ec ldi r27, 0xCC ; 204
ca0a: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
ca0e: 96 95 lsr r25
ca10: 87 95 ror r24
ca12: 96 95 lsr r25
ca14: 87 95 ror r24
ca16: 96 95 lsr r25
ca18: 87 95 ror r24
ca1a: 90 93 9b 06 sts 0x069B, r25
ca1e: 80 93 9a 06 sts 0x069A, r24
// ElectricAirPacket.WarnBeep = 0;//HoTT_Waring();
ElectricAirPacket.WarnBeep = GPSPacket.WarnBeep;
ca22: 80 91 b6 07 lds r24, 0x07B6
ca26: 80 93 7c 06 sts 0x067C, r24
ElectricAirPacket.Current = Capacity.ActualCurrent;
ca2a: 80 91 15 05 lds r24, 0x0515
ca2e: 90 91 16 05 lds r25, 0x0516
ca32: 90 93 97 06 sts 0x0697, r25
ca36: 80 93 96 06 sts 0x0696, r24
HoTT_DataPointer = (unsigned char *) &ElectricAirPacket;
ca3a: 8a e7 ldi r24, 0x7A ; 122
ca3c: 96 e0 ldi r25, 0x06 ; 6
ca3e: 90 93 f1 02 sts 0x02F1, r25
ca42: 80 93 f0 02 sts 0x02F0, r24
ElectricAirPacket.FlightTimeMinutes = FlugSekunden / 60;
ca46: 40 91 5e 04 lds r20, 0x045E
ca4a: 50 91 5f 04 lds r21, 0x045F
ca4e: 9a 01 movw r18, r20
ca50: a9 e8 ldi r26, 0x89 ; 137
ca52: b8 e8 ldi r27, 0x88 ; 136
ca54: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
ca58: 96 95 lsr r25
ca5a: 87 95 ror r24
ca5c: 92 95 swap r25
ca5e: 82 95 swap r24
ca60: 8f 70 andi r24, 0x0F ; 15
ca62: 89 27 eor r24, r25
ca64: 9f 70 andi r25, 0x0F ; 15
ca66: 89 27 eor r24, r25
ca68: 80 93 a1 06 sts 0x06A1, r24
ElectricAirPacket.FlightTimeSeconds = FlugSekunden % 60;
ca6c: 6c e3 ldi r22, 0x3C ; 60
ca6e: 68 9f mul r22, r24
ca70: 90 01 movw r18, r0
ca72: 69 9f mul r22, r25
ca74: 30 0d add r19, r0
ca76: 11 24 eor r1, r1
ca78: 42 1b sub r20, r18
ca7a: 53 0b sbc r21, r19
ca7c: 40 93 a2 06 sts 0x06A2, r20
return(sizeof(ElectricAirPacket));
ca80: 8c e2 ldi r24, 0x2C ; 44
ca82: db c0 rjmp .+438 ; 0xcc3a <HoTT_Telemety+0x850>
break;
case HOTT_GENERAL_PACKET_ID:
GetHottestBl();
ca84: 36 db rcall .-2452 ; 0xc0f2 <GetHottestBl>
HoTTGeneral.Rpm = GPSInfo.HomeDistance/100;
ca86: 20 91 db 08 lds r18, 0x08DB
ca8a: 30 91 dc 08 lds r19, 0x08DC
ca8e: 36 95 lsr r19
ca90: 27 95 ror r18
ca92: 36 95 lsr r19
ca94: 27 95 ror r18
ca96: ab e7 ldi r26, 0x7B ; 123
ca98: b4 e1 ldi r27, 0x14 ; 20
ca9a: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
ca9e: 96 95 lsr r25
caa0: 87 95 ror r24
caa2: 90 93 bc 06 sts 0x06BC, r25
caa6: 80 93 bb 06 sts 0x06BB, r24
HoTTGeneral.VoltageCell1 = CompassCorrected / 2;
caaa: 80 91 65 06 lds r24, 0x0665
caae: 90 91 66 06 lds r25, 0x0666
cab2: 99 23 and r25, r25
cab4: 0c f4 brge .+2 ; 0xcab8 <HoTT_Telemety+0x6ce>
cab6: 01 96 adiw r24, 0x01 ; 1
cab8: 95 95 asr r25
caba: 87 95 ror r24
cabc: 80 93 ac 06 sts 0x06AC, r24
HoTTGeneral.VoltageCell2 = KompassValue / 2;
cac0: 80 91 4e 01 lds r24, 0x014E
cac4: 90 91 4f 01 lds r25, 0x014F
cac8: 99 23 and r25, r25
caca: 0c f4 brge .+2 ; 0xcace <HoTT_Telemety+0x6e4>
cacc: 01 96 adiw r24, 0x01 ; 1
cace: 95 95 asr r25
cad0: 87 95 ror r24
cad2: 80 93 ad 06 sts 0x06AD, r24
//HoTTGeneral.VoltageCell3 = Magnetstaerke -> macht NC
//HoTTGeneral.VoltageCell4 = Inclinition -> macht NC
HoTTGeneral.VoltageCell5 = DebugOut.Analog[28]; // I2C ErrorCounter
cad6: 80 91 80 0c lds r24, 0x0C80
cada: 80 93 b0 06 sts 0x06B0, r24
HoTTGeneral.VoltageCell6 = GPSInfo.HomeBearing / 2;
cade: 80 91 dd 08 lds r24, 0x08DD
cae2: 90 91 de 08 lds r25, 0x08DE
cae6: 99 23 and r25, r25
cae8: 0c f4 brge .+2 ; 0xcaec <HoTT_Telemety+0x702>
caea: 01 96 adiw r24, 0x01 ; 1
caec: 95 95 asr r25
caee: 87 95 ror r24
caf0: 80 93 b1 06 sts 0x06B1, r24
if(UBat > BattLowVoltageWarning + 2) HoTTGeneral.FuelPercent = (UBat - (BattLowVoltageWarning + 2)) * 3;
caf4: 80 91 53 01 lds r24, 0x0153
caf8: 90 e0 ldi r25, 0x00 ; 0
cafa: 20 91 1a 01 lds r18, 0x011A
cafe: 30 91 1b 01 lds r19, 0x011B
cb02: ac 01 movw r20, r24
cb04: 4e 5f subi r20, 0xFE ; 254
cb06: 5f 4f sbci r21, 0xFF ; 255
cb08: 42 17 cp r20, r18
cb0a: 53 07 cpc r21, r19
cb0c: 8c f4 brge .+34 ; 0xcb30 <HoTT_Telemety+0x746>
cb0e: 20 91 1a 01 lds r18, 0x011A
cb12: 30 91 1b 01 lds r19, 0x011B
cb16: a9 01 movw r20, r18
cb18: 48 1b sub r20, r24
cb1a: 59 0b sbc r21, r25
cb1c: ca 01 movw r24, r20
cb1e: 02 97 sbiw r24, 0x02 ; 2
cb20: 98 2f mov r25, r24
cb22: 99 0f add r25, r25
cb24: 89 0f add r24, r25
cb26: 80 93 b8 06 sts 0x06B8, r24
else HoTTGeneral.FuelPercent = 0;
if(HoTTGeneral.FuelPercent > 100) HoTTGeneral.FuelPercent = 100;
cb2a: 85 36 cpi r24, 0x65 ; 101
cb2c: 20 f4 brcc .+8 ; 0xcb36 <HoTT_Telemety+0x74c>
cb2e: 06 c0 rjmp .+12 ; 0xcb3c <HoTT_Telemety+0x752>
//HoTTGeneral.VoltageCell3 = Magnetstaerke -> macht NC
//HoTTGeneral.VoltageCell4 = Inclinition -> macht NC
HoTTGeneral.VoltageCell5 = DebugOut.Analog[28]; // I2C ErrorCounter
HoTTGeneral.VoltageCell6 = GPSInfo.HomeBearing / 2;
if(UBat > BattLowVoltageWarning + 2) HoTTGeneral.FuelPercent = (UBat - (BattLowVoltageWarning + 2)) * 3;
else HoTTGeneral.FuelPercent = 0;
cb30: 10 92 b8 06 sts 0x06B8, r1
cb34: 03 c0 rjmp .+6 ; 0xcb3c <HoTT_Telemety+0x752>
if(HoTTGeneral.FuelPercent > 100) HoTTGeneral.FuelPercent = 100;
cb36: 84 e6 ldi r24, 0x64 ; 100
cb38: 80 93 b8 06 sts 0x06B8, r24
HoTTGeneral.FuelCapacity = NC_ErrorCode;//HoehenWert/100; // Oelpegel
cb3c: 80 91 bb 04 lds r24, 0x04BB
cb40: 90 e0 ldi r25, 0x00 ; 0
cb42: 90 93 ba 06 sts 0x06BA, r25
cb46: 80 93 b9 06 sts 0x06B9, r24
// if(HoTTGeneral.FuelCapacity < 0) HoTTGeneral.FuelCapacity = 0;
HoTTGeneral.Altitude = HoehenWert/100 + 500;
cb4a: 60 91 fe 03 lds r22, 0x03FE
cb4e: 70 91 ff 03 lds r23, 0x03FF
cb52: 80 91 00 04 lds r24, 0x0400
cb56: 90 91 01 04 lds r25, 0x0401
cb5a: 24 e6 ldi r18, 0x64 ; 100
cb5c: 30 e0 ldi r19, 0x00 ; 0
cb5e: 40 e0 ldi r20, 0x00 ; 0
cb60: 50 e0 ldi r21, 0x00 ; 0
cb62: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
cb66: 2c 50 subi r18, 0x0C ; 12
cb68: 3e 4f sbci r19, 0xFE ; 254
cb6a: 30 93 be 06 sts 0x06BE, r19
cb6e: 20 93 bd 06 sts 0x06BD, r18
HoTTGeneral.Battery1 = UBat;
cb72: 80 91 1a 01 lds r24, 0x011A
cb76: 90 91 1b 01 lds r25, 0x011B
cb7a: 90 93 b3 06 sts 0x06B3, r25
cb7e: 80 93 b2 06 sts 0x06B2, r24
HoTTGeneral.Battery2 = UBat;
cb82: 80 91 1a 01 lds r24, 0x011A
cb86: 90 91 1b 01 lds r25, 0x011B
cb8a: 90 93 b5 06 sts 0x06B5, r25
cb8e: 80 93 b4 06 sts 0x06B4, r24
if(!GPSPacket.WarnBeep) HoTTGeneral.m_sec = BuildHoTT_Vario(); else HoTTGeneral.m_sec = VARIO_ZERO;
cb92: 80 91 b6 07 lds r24, 0x07B6
cb96: 81 11 cpse r24, r1
cb98: 06 c0 rjmp .+12 ; 0xcba6 <HoTT_Telemety+0x7bc>
cb9a: ba db rcall .-2188 ; 0xc310 <BuildHoTT_Vario>
cb9c: 90 93 c0 06 sts 0x06C0, r25
cba0: 80 93 bf 06 sts 0x06BF, r24
cba4: 06 c0 rjmp .+12 ; 0xcbb2 <HoTT_Telemety+0x7c8>
cba6: 80 e3 ldi r24, 0x30 ; 48
cba8: 95 e7 ldi r25, 0x75 ; 117
cbaa: 90 93 c0 06 sts 0x06C0, r25
cbae: 80 93 bf 06 sts 0x06BF, r24
HoTTGeneral.m_3sec = 120 + GPSPacket.WarnBeep;
cbb2: 80 91 b6 07 lds r24, 0x07B6
cbb6: 88 58 subi r24, 0x88 ; 136
cbb8: 80 93 c1 06 sts 0x06C1, r24
HoTTGeneral.InputVoltage = UBat;
cbbc: 80 91 1a 01 lds r24, 0x011A
cbc0: 90 91 1b 01 lds r25, 0x011B
cbc4: 90 93 c5 06 sts 0x06C5, r25
cbc8: 80 93 c4 06 sts 0x06C4, r24
HoTTGeneral.Temperature1 = MinBlTemperture + 20;
cbcc: 80 91 83 04 lds r24, 0x0483
cbd0: 8c 5e subi r24, 0xEC ; 236
cbd2: 80 93 b6 06 sts 0x06B6, r24
HoTTGeneral.Temperature2 = MaxBlTemperture + 20;
cbd6: 80 91 84 04 lds r24, 0x0484
cbda: 8c 5e subi r24, 0xEC ; 236
cbdc: 80 93 b7 06 sts 0x06B7, r24
HoTTGeneral.Capacity = Capacity.UsedCapacity/10;
cbe0: 20 91 19 05 lds r18, 0x0519
cbe4: 30 91 1a 05 lds r19, 0x051A
cbe8: ad ec ldi r26, 0xCD ; 205
cbea: bc ec ldi r27, 0xCC ; 204
cbec: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
cbf0: 96 95 lsr r25
cbf2: 87 95 ror r24
cbf4: 96 95 lsr r25
cbf6: 87 95 ror r24
cbf8: 96 95 lsr r25
cbfa: 87 95 ror r24
cbfc: 90 93 c7 06 sts 0x06C7, r25
cc00: 80 93 c6 06 sts 0x06C6, r24
HoTTGeneral.WarnBeep = 0;//HoTT_Waring();
cc04: 10 92 a8 06 sts 0x06A8, r1
HoTTGeneral.Current = Capacity.ActualCurrent;
cc08: 80 91 15 05 lds r24, 0x0515
cc0c: 90 91 16 05 lds r25, 0x0516
cc10: 90 93 c3 06 sts 0x06C3, r25
cc14: 80 93 c2 06 sts 0x06C2, r24
//HoTTGeneral.ErrorNumber = HoTTErrorCode();
HoTT_DataPointer = (unsigned char *) &HoTTGeneral;
cc18: 86 ea ldi r24, 0xA6 ; 166
cc1a: 96 e0 ldi r25, 0x06 ; 6
cc1c: 90 93 f1 02 sts 0x02F1, r25
cc20: 80 93 f0 02 sts 0x02F0, r24
return(sizeof(HoTTGeneral));
cc24: 8c e2 ldi r24, 0x2C ; 44
cc26: 09 c0 rjmp .+18 ; 0xcc3a <HoTT_Telemety+0x850>
break;
default: return(0);
cc28: 80 e0 ldi r24, 0x00 ; 0
cc2a: 07 c0 rjmp .+14 ; 0xcc3a <HoTT_Telemety+0x850>
{
if(FC_StatusFlags3 & FC_STATUS3_BOAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&BOAT_MODE[i]); // no Error
else for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error
if(FC_StatusFlags3 & FC_STATUS3_REDUNDANCE) VarioPacket.Text[0] = 'R';
}
return(sizeof(VarioPacket));
cc2c: 8c e2 ldi r24, 0x2C ; 44
cc2e: 05 c0 rjmp .+10 ; 0xcc3a <HoTT_Telemety+0x850>
cc30: 8c e2 ldi r24, 0x2C ; 44
cc32: 03 c0 rjmp .+6 ; 0xcc3a <HoTT_Telemety+0x850>
cc34: 8c e2 ldi r24, 0x2C ; 44
cc36: 01 c0 rjmp .+2 ; 0xcc3a <HoTT_Telemety+0x850>
cc38: 8c e2 ldi r24, 0x2C ; 44
HoTT_DataPointer = (unsigned char *) &HoTTGeneral;
return(sizeof(HoTTGeneral));
break;
default: return(0);
}
}
cc3a: cf 91 pop r28
cc3c: 08 95 ret
0000cc3e <HoTT_Menu>:
//---------------------------------------------------------------
void HoTT_Menu(void)
{
cc3e: 2f 92 push r2
cc40: 3f 92 push r3
cc42: 4f 92 push r4
cc44: 5f 92 push r5
cc46: 6f 92 push r6
cc48: 7f 92 push r7
cc4a: 8f 92 push r8
cc4c: 9f 92 push r9
cc4e: af 92 push r10
cc50: bf 92 push r11
cc52: cf 92 push r12
cc54: df 92 push r13
cc56: ef 92 push r14
cc58: ff 92 push r15
cc5a: 0f 93 push r16
cc5c: 1f 93 push r17
cc5e: cf 93 push r28
cc60: df 93 push r29
cc62: 00 d0 rcall .+0 ; 0xcc64 <HoTT_Menu+0x26>
cc64: 00 d0 rcall .+0 ; 0xcc66 <HoTT_Menu+0x28>
cc66: cd b7 in r28, 0x3d ; 61
cc68: de b7 in r29, 0x3e ; 62
static unsigned char line, page = 0,show_current = 0,show_mag = 0, show_poti = 0;
unsigned char tmp;
HoTTVarioMeter = (HoTTVarioMeter * 7 + VarioMeter) / 8;
cc6a: 40 91 54 03 lds r20, 0x0354
cc6e: 50 91 55 03 lds r21, 0x0355
cc72: 20 91 7e 04 lds r18, 0x047E
cc76: 30 91 7f 04 lds r19, 0x047F
cc7a: c9 01 movw r24, r18
cc7c: 88 0f add r24, r24
cc7e: 99 1f adc r25, r25
cc80: 88 0f add r24, r24
cc82: 99 1f adc r25, r25
cc84: 88 0f add r24, r24
cc86: 99 1f adc r25, r25
cc88: 82 1b sub r24, r18
cc8a: 93 0b sbc r25, r19
cc8c: 84 0f add r24, r20
cc8e: 95 1f adc r25, r21
cc90: 99 23 and r25, r25
cc92: 0c f4 brge .+2 ; 0xcc96 <HoTT_Menu+0x58>
cc94: 07 96 adiw r24, 0x07 ; 7
cc96: 95 95 asr r25
cc98: 87 95 ror r24
cc9a: 95 95 asr r25
cc9c: 87 95 ror r24
cc9e: 95 95 asr r25
cca0: 87 95 ror r24
cca2: 90 93 7f 04 sts 0x047F, r25
cca6: 80 93 7e 04 sts 0x047E, r24
// if(HottKeyboard) {beeptime = 1000;};
switch(page)
ccaa: 80 91 76 04 lds r24, 0x0476
ccae: 90 e0 ldi r25, 0x00 ; 0
ccb0: 87 30 cpi r24, 0x07 ; 7
ccb2: 91 05 cpc r25, r1
ccb4: 10 f0 brcs .+4 ; 0xccba <HoTT_Menu+0x7c>
ccb6: 0c 94 97 7b jmp 0xf72e ; 0xf72e <HoTT_Menu+0x2af0>
ccba: fc 01 movw r30, r24
ccbc: e8 5a subi r30, 0xA8 ; 168
ccbe: ff 4f sbci r31, 0xFF ; 255
ccc0: 0c 94 a7 b1 jmp 0x1634e ; 0x1634e <__tablejump2__>
{
case 0:
switch(line++)
ccc4: 80 91 75 04 lds r24, 0x0475
ccc8: 91 e0 ldi r25, 0x01 ; 1
ccca: 98 0f add r25, r24
cccc: 90 93 75 04 sts 0x0475, r25
ccd0: 90 e0 ldi r25, 0x00 ; 0
ccd2: 81 31 cpi r24, 0x11 ; 17
ccd4: 91 05 cpc r25, r1
ccd6: 08 f0 brcs .+2 ; 0xccda <HoTT_Menu+0x9c>
ccd8: 37 c4 rjmp .+2158 ; 0xd548 <HoTT_Menu+0x90a>
ccda: fc 01 movw r30, r24
ccdc: e1 5a subi r30, 0xA1 ; 161
ccde: ff 4f sbci r31, 0xFF ; 255
cce0: 0c 94 a7 b1 jmp 0x1634e ; 0x1634e <__tablejump2__>
{
case 0:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
cce4: 80 91 cb 03 lds r24, 0x03CB
cce8: 85 ff sbrs r24, 5
ccea: 2b c0 rjmp .+86 ; 0xcd42 <HoTT_Menu+0x104>
HoTT_printfxy_BLINK(0,0," %2i.%1iV ",UBat/10, UBat%10)
ccec: 80 e0 ldi r24, 0x00 ; 0
ccee: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ccf2: 80 91 1a 01 lds r24, 0x011A
ccf6: 90 91 1b 01 lds r25, 0x011B
ccfa: e0 91 1a 01 lds r30, 0x011A
ccfe: f0 91 1b 01 lds r31, 0x011B
cd02: 2a e0 ldi r18, 0x0A ; 10
cd04: 30 e0 ldi r19, 0x00 ; 0
cd06: b9 01 movw r22, r18
cd08: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
cd0c: 9f 93 push r25
cd0e: 8f 93 push r24
cd10: cf 01 movw r24, r30
cd12: b9 01 movw r22, r18
cd14: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
cd18: 7f 93 push r23
cd1a: 6f 93 push r22
cd1c: 83 e0 ldi r24, 0x03 ; 3
cd1e: 9b e0 ldi r25, 0x0B ; 11
cd20: 9f 93 push r25
cd22: 8f 93 push r24
cd24: 8c e2 ldi r24, 0x2C ; 44
cd26: 95 e1 ldi r25, 0x15 ; 21
cd28: 9f 93 push r25
cd2a: 8f 93 push r24
cd2c: e0 91 78 06 lds r30, 0x0678
cd30: f0 91 79 06 lds r31, 0x0679
cd34: 09 95 icall
cd36: 0f b6 in r0, 0x3f ; 63
cd38: f8 94 cli
cd3a: de bf out 0x3e, r29 ; 62
cd3c: 0f be out 0x3f, r0 ; 63
cd3e: cd bf out 0x3d, r28 ; 61
cd40: 2a c0 rjmp .+84 ; 0xcd96 <HoTT_Menu+0x158>
else
HoTT_printfxy(0,0," %2i.%1iV ",UBat/10, UBat%10)
cd42: 80 e0 ldi r24, 0x00 ; 0
cd44: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
cd48: 80 91 1a 01 lds r24, 0x011A
cd4c: 90 91 1b 01 lds r25, 0x011B
cd50: e0 91 1a 01 lds r30, 0x011A
cd54: f0 91 1b 01 lds r31, 0x011B
cd58: 2a e0 ldi r18, 0x0A ; 10
cd5a: 30 e0 ldi r19, 0x00 ; 0
cd5c: b9 01 movw r22, r18
cd5e: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
cd62: 9f 93 push r25
cd64: 8f 93 push r24
cd66: cf 01 movw r24, r30
cd68: b9 01 movw r22, r18
cd6a: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
cd6e: 7f 93 push r23
cd70: 6f 93 push r22
cd72: 86 ef ldi r24, 0xF6 ; 246
cd74: 9a e0 ldi r25, 0x0A ; 10
cd76: 9f 93 push r25
cd78: 8f 93 push r24
cd7a: 8b e0 ldi r24, 0x0B ; 11
cd7c: 95 e1 ldi r25, 0x15 ; 21
cd7e: 9f 93 push r25
cd80: 8f 93 push r24
cd82: e0 91 78 06 lds r30, 0x0678
cd86: f0 91 79 06 lds r31, 0x0679
cd8a: 09 95 icall
cd8c: 0f b6 in r0, 0x3f ; 63
cd8e: f8 94 cli
cd90: de bf out 0x3e, r29 ; 62
cd92: 0f be out 0x3f, r0 ; 63
cd94: cd bf out 0x3d, r28 ; 61
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
cd96: 80 91 5c 06 lds r24, 0x065C
cd9a: 80 ff sbrs r24, 0
cd9c: 57 c0 rjmp .+174 ; 0xce4c <HoTT_Menu+0x20e>
{
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,0,"ALT:%4im %c", (int16_t)(HoehenWert/100),VarioCharacter)
cd9e: 80 91 1b 04 lds r24, 0x041B
cda2: 88 23 and r24, r24
cda4: 59 f1 breq .+86 ; 0xcdfc <HoTT_Menu+0x1be>
cda6: 8a e0 ldi r24, 0x0A ; 10
cda8: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
cdac: 80 91 20 01 lds r24, 0x0120
cdb0: 1f 92 push r1
cdb2: 8f 93 push r24
cdb4: 60 91 fe 03 lds r22, 0x03FE
cdb8: 70 91 ff 03 lds r23, 0x03FF
cdbc: 80 91 00 04 lds r24, 0x0400
cdc0: 90 91 01 04 lds r25, 0x0401
cdc4: 24 e6 ldi r18, 0x64 ; 100
cdc6: 30 e0 ldi r19, 0x00 ; 0
cdc8: 40 e0 ldi r20, 0x00 ; 0
cdca: 50 e0 ldi r21, 0x00 ; 0
cdcc: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
cdd0: 3f 93 push r19
cdd2: 2f 93 push r18
cdd4: 8a ee ldi r24, 0xEA ; 234
cdd6: 9a e0 ldi r25, 0x0A ; 10
cdd8: 9f 93 push r25
cdda: 8f 93 push r24
cddc: 8b e1 ldi r24, 0x1B ; 27
cdde: 95 e1 ldi r25, 0x15 ; 21
cde0: 9f 93 push r25
cde2: 8f 93 push r24
cde4: e0 91 78 06 lds r30, 0x0678
cde8: f0 91 79 06 lds r31, 0x0679
cdec: 09 95 icall
cdee: 0f b6 in r0, 0x3f ; 63
cdf0: f8 94 cli
cdf2: de bf out 0x3e, r29 ; 62
cdf4: 0f be out 0x3f, r0 ; 63
cdf6: cd bf out 0x3d, r28 ; 61
cdf8: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else HoTT_printfxy(10,0,"ALT:%4im ", (int16_t)(HoehenWert/100))
cdfc: 8a e0 ldi r24, 0x0A ; 10
cdfe: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ce02: 60 91 fe 03 lds r22, 0x03FE
ce06: 70 91 ff 03 lds r23, 0x03FF
ce0a: 80 91 00 04 lds r24, 0x0400
ce0e: 90 91 01 04 lds r25, 0x0401
ce12: 24 e6 ldi r18, 0x64 ; 100
ce14: 30 e0 ldi r19, 0x00 ; 0
ce16: 40 e0 ldi r20, 0x00 ; 0
ce18: 50 e0 ldi r21, 0x00 ; 0
ce1a: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
ce1e: 3f 93 push r19
ce20: 2f 93 push r18
ce22: 8f ed ldi r24, 0xDF ; 223
ce24: 9a e0 ldi r25, 0x0A ; 10
ce26: 9f 93 push r25
ce28: 8f 93 push r24
ce2a: 8b e0 ldi r24, 0x0B ; 11
ce2c: 95 e1 ldi r25, 0x15 ; 21
ce2e: 9f 93 push r25
ce30: 8f 93 push r24
ce32: e0 91 78 06 lds r30, 0x0678
ce36: f0 91 79 06 lds r31, 0x0679
ce3a: 09 95 icall
ce3c: 0f 90 pop r0
ce3e: 0f 90 pop r0
ce40: 0f 90 pop r0
ce42: 0f 90 pop r0
ce44: 0f 90 pop r0
ce46: 0f 90 pop r0
ce48: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
else HoTT_printfxy(10,0,"ALT:---- ");
ce4c: 8a e0 ldi r24, 0x0A ; 10
ce4e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ce52: 85 ed ldi r24, 0xD5 ; 213
ce54: 9a e0 ldi r25, 0x0A ; 10
ce56: 9f 93 push r25
ce58: 8f 93 push r24
ce5a: 8b e0 ldi r24, 0x0B ; 11
ce5c: 95 e1 ldi r25, 0x15 ; 21
ce5e: 9f 93 push r25
ce60: 8f 93 push r24
ce62: e0 91 78 06 lds r30, 0x0678
ce66: f0 91 79 06 lds r31, 0x0679
ce6a: 09 95 icall
ce6c: 0f 90 pop r0
ce6e: 0f 90 pop r0
ce70: 0f 90 pop r0
ce72: 0f 90 pop r0
ce74: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 1:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
ce78: 80 91 cb 03 lds r24, 0x03CB
ce7c: 85 ff sbrs r24, 5
ce7e: 3f c0 rjmp .+126 ; 0xcefe <HoTT_Menu+0x2c0>
HoTT_printfxy_BLINK(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60)
ce80: 85 e1 ldi r24, 0x15 ; 21
ce82: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ce86: 40 91 5e 04 lds r20, 0x045E
ce8a: 50 91 5f 04 lds r21, 0x045F
ce8e: 9a 01 movw r18, r20
ce90: a9 e8 ldi r26, 0x89 ; 137
ce92: b8 e8 ldi r27, 0x88 ; 136
ce94: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
ce98: 96 95 lsr r25
ce9a: 87 95 ror r24
ce9c: 92 95 swap r25
ce9e: 82 95 swap r24
cea0: 8f 70 andi r24, 0x0F ; 15
cea2: 89 27 eor r24, r25
cea4: 9f 70 andi r25, 0x0F ; 15
cea6: 89 27 eor r24, r25
cea8: 6c e3 ldi r22, 0x3C ; 60
ceaa: 68 9f mul r22, r24
ceac: 90 01 movw r18, r0
ceae: 69 9f mul r22, r25
ceb0: 30 0d add r19, r0
ceb2: 11 24 eor r1, r1
ceb4: ca 01 movw r24, r20
ceb6: 82 1b sub r24, r18
ceb8: 93 0b sbc r25, r19
ceba: 9f 93 push r25
cebc: 8f 93 push r24
cebe: 9a 01 movw r18, r20
cec0: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
cec4: 96 95 lsr r25
cec6: 87 95 ror r24
cec8: 92 95 swap r25
ceca: 82 95 swap r24
cecc: 8f 70 andi r24, 0x0F ; 15
cece: 89 27 eor r24, r25
ced0: 9f 70 andi r25, 0x0F ; 15
ced2: 89 27 eor r24, r25
ced4: 9f 93 push r25
ced6: 8f 93 push r24
ced8: 88 ec ldi r24, 0xC8 ; 200
ceda: 9a e0 ldi r25, 0x0A ; 10
cedc: 9f 93 push r25
cede: 8f 93 push r24
cee0: 8c e2 ldi r24, 0x2C ; 44
cee2: 95 e1 ldi r25, 0x15 ; 21
cee4: 9f 93 push r25
cee6: 8f 93 push r24
cee8: e0 91 78 06 lds r30, 0x0678
ceec: f0 91 79 06 lds r31, 0x0679
cef0: 09 95 icall
cef2: 0f b6 in r0, 0x3f ; 63
cef4: f8 94 cli
cef6: de bf out 0x3e, r29 ; 62
cef8: 0f be out 0x3f, r0 ; 63
cefa: cd bf out 0x3d, r28 ; 61
cefc: 3e c0 rjmp .+124 ; 0xcf7a <HoTT_Menu+0x33c>
else HoTT_printfxy(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60);
cefe: 85 e1 ldi r24, 0x15 ; 21
cf00: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
cf04: 40 91 5e 04 lds r20, 0x045E
cf08: 50 91 5f 04 lds r21, 0x045F
cf0c: 9a 01 movw r18, r20
cf0e: a9 e8 ldi r26, 0x89 ; 137
cf10: b8 e8 ldi r27, 0x88 ; 136
cf12: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
cf16: 96 95 lsr r25
cf18: 87 95 ror r24
cf1a: 92 95 swap r25
cf1c: 82 95 swap r24
cf1e: 8f 70 andi r24, 0x0F ; 15
cf20: 89 27 eor r24, r25
cf22: 9f 70 andi r25, 0x0F ; 15
cf24: 89 27 eor r24, r25
cf26: 6c e3 ldi r22, 0x3C ; 60
cf28: 68 9f mul r22, r24
cf2a: 90 01 movw r18, r0
cf2c: 69 9f mul r22, r25
cf2e: 30 0d add r19, r0
cf30: 11 24 eor r1, r1
cf32: ca 01 movw r24, r20
cf34: 82 1b sub r24, r18
cf36: 93 0b sbc r25, r19
cf38: 9f 93 push r25
cf3a: 8f 93 push r24
cf3c: 9a 01 movw r18, r20
cf3e: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
cf42: 96 95 lsr r25
cf44: 87 95 ror r24
cf46: 92 95 swap r25
cf48: 82 95 swap r24
cf4a: 8f 70 andi r24, 0x0F ; 15
cf4c: 89 27 eor r24, r25
cf4e: 9f 70 andi r25, 0x0F ; 15
cf50: 89 27 eor r24, r25
cf52: 9f 93 push r25
cf54: 8f 93 push r24
cf56: 8b eb ldi r24, 0xBB ; 187
cf58: 9a e0 ldi r25, 0x0A ; 10
cf5a: 9f 93 push r25
cf5c: 8f 93 push r24
cf5e: 8b e0 ldi r24, 0x0B ; 11
cf60: 95 e1 ldi r25, 0x15 ; 21
cf62: 9f 93 push r25
cf64: 8f 93 push r24
cf66: e0 91 78 06 lds r30, 0x0678
cf6a: f0 91 79 06 lds r31, 0x0679
cf6e: 09 95 icall
cf70: 0f b6 in r0, 0x3f ; 63
cf72: f8 94 cli
cf74: de bf out 0x3e, r29 ; 62
cf76: 0f be out 0x3f, r0 ; 63
cf78: cd bf out 0x3d, r28 ; 61
HoTT_printfxy(10,1,"DIR: %3d%c",CompassCorrected, HoTT_GRAD);
cf7a: 8f e1 ldi r24, 0x1F ; 31
cf7c: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
cf80: 1f 92 push r1
cf82: 80 e6 ldi r24, 0x60 ; 96
cf84: 8f 93 push r24
cf86: 80 91 66 06 lds r24, 0x0666
cf8a: 8f 93 push r24
cf8c: 80 91 65 06 lds r24, 0x0665
cf90: 8f 93 push r24
cf92: 80 eb ldi r24, 0xB0 ; 176
cf94: 9a e0 ldi r25, 0x0A ; 10
cf96: 9f 93 push r25
cf98: 8f 93 push r24
cf9a: 8b e0 ldi r24, 0x0B ; 11
cf9c: 95 e1 ldi r25, 0x15 ; 21
cf9e: 9f 93 push r25
cfa0: 8f 93 push r24
cfa2: e0 91 78 06 lds r30, 0x0678
cfa6: f0 91 79 06 lds r31, 0x0679
cfaa: 09 95 icall
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(20,1,"C") else HoTT_printfxy(20,1," ");
cfac: 80 91 ca 03 lds r24, 0x03CA
cfb0: 0f b6 in r0, 0x3f ; 63
cfb2: f8 94 cli
cfb4: de bf out 0x3e, r29 ; 62
cfb6: 0f be out 0x3f, r0 ; 63
cfb8: cd bf out 0x3d, r28 ; 61
cfba: 80 ff sbrs r24, 0
cfbc: 16 c0 rjmp .+44 ; 0xcfea <HoTT_Menu+0x3ac>
cfbe: 89 e2 ldi r24, 0x29 ; 41
cfc0: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
cfc4: 8e ea ldi r24, 0xAE ; 174
cfc6: 9a e0 ldi r25, 0x0A ; 10
cfc8: 9f 93 push r25
cfca: 8f 93 push r24
cfcc: 8b e1 ldi r24, 0x1B ; 27
cfce: 95 e1 ldi r25, 0x15 ; 21
cfd0: 9f 93 push r25
cfd2: 8f 93 push r24
cfd4: e0 91 78 06 lds r30, 0x0678
cfd8: f0 91 79 06 lds r31, 0x0679
cfdc: 09 95 icall
cfde: 0f 90 pop r0
cfe0: 0f 90 pop r0
cfe2: 0f 90 pop r0
cfe4: 0f 90 pop r0
cfe6: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
cfea: 89 e2 ldi r24, 0x29 ; 41
cfec: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
cff0: 8c ea ldi r24, 0xAC ; 172
cff2: 9a e0 ldi r25, 0x0A ; 10
cff4: 9f 93 push r25
cff6: 8f 93 push r24
cff8: 8b e0 ldi r24, 0x0B ; 11
cffa: 95 e1 ldi r25, 0x15 ; 21
cffc: 9f 93 push r25
cffe: 8f 93 push r24
d000: e0 91 78 06 lds r30, 0x0678
d004: f0 91 79 06 lds r31, 0x0679
d008: 09 95 icall
d00a: 0f 90 pop r0
d00c: 0f 90 pop r0
d00e: 0f 90 pop r0
d010: 0f 90 pop r0
d012: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 2:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
d016: 80 91 cb 03 lds r24, 0x03CB
d01a: 85 ff sbrs r24, 5
d01c: 1d c0 rjmp .+58 ; 0xd058 <HoTT_Menu+0x41a>
HoTT_printfxy_BLINK(0,2," %5i ",Capacity.UsedCapacity)
d01e: 8a e2 ldi r24, 0x2A ; 42
d020: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d024: e9 e1 ldi r30, 0x19 ; 25
d026: f5 e0 ldi r31, 0x05 ; 5
d028: 81 81 ldd r24, Z+1 ; 0x01
d02a: 8f 93 push r24
d02c: 80 81 ld r24, Z
d02e: 8f 93 push r24
d030: 84 ea ldi r24, 0xA4 ; 164
d032: 9a e0 ldi r25, 0x0A ; 10
d034: 9f 93 push r25
d036: 8f 93 push r24
d038: 8c e2 ldi r24, 0x2C ; 44
d03a: 95 e1 ldi r25, 0x15 ; 21
d03c: 9f 93 push r25
d03e: 8f 93 push r24
d040: e0 91 78 06 lds r30, 0x0678
d044: f0 91 79 06 lds r31, 0x0679
d048: 09 95 icall
d04a: 0f 90 pop r0
d04c: 0f 90 pop r0
d04e: 0f 90 pop r0
d050: 0f 90 pop r0
d052: 0f 90 pop r0
d054: 0f 90 pop r0
d056: 1c c0 rjmp .+56 ; 0xd090 <HoTT_Menu+0x452>
else HoTT_printfxy(0,2," %5i ",Capacity.UsedCapacity);
d058: 8a e2 ldi r24, 0x2A ; 42
d05a: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d05e: e9 e1 ldi r30, 0x19 ; 25
d060: f5 e0 ldi r31, 0x05 ; 5
d062: 81 81 ldd r24, Z+1 ; 0x01
d064: 8f 93 push r24
d066: 80 81 ld r24, Z
d068: 8f 93 push r24
d06a: 8c e9 ldi r24, 0x9C ; 156
d06c: 9a e0 ldi r25, 0x0A ; 10
d06e: 9f 93 push r25
d070: 8f 93 push r24
d072: 8b e0 ldi r24, 0x0B ; 11
d074: 95 e1 ldi r25, 0x15 ; 21
d076: 9f 93 push r25
d078: 8f 93 push r24
d07a: e0 91 78 06 lds r30, 0x0678
d07e: f0 91 79 06 lds r31, 0x0679
d082: 09 95 icall
d084: 0f 90 pop r0
d086: 0f 90 pop r0
d088: 0f 90 pop r0
d08a: 0f 90 pop r0
d08c: 0f 90 pop r0
d08e: 0f 90 pop r0
HoTT_printfxy(12,2,"I:%2i.%1iA ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10);
d090: 86 e3 ldi r24, 0x36 ; 54
d092: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d096: 40 91 15 05 lds r20, 0x0515
d09a: 50 91 16 05 lds r21, 0x0516
d09e: 9a 01 movw r18, r20
d0a0: ad ec ldi r26, 0xCD ; 205
d0a2: bc ec ldi r27, 0xCC ; 204
d0a4: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
d0a8: 96 95 lsr r25
d0aa: 87 95 ror r24
d0ac: 96 95 lsr r25
d0ae: 87 95 ror r24
d0b0: 96 95 lsr r25
d0b2: 87 95 ror r24
d0b4: 9c 01 movw r18, r24
d0b6: 22 0f add r18, r18
d0b8: 33 1f adc r19, r19
d0ba: 88 0f add r24, r24
d0bc: 99 1f adc r25, r25
d0be: 88 0f add r24, r24
d0c0: 99 1f adc r25, r25
d0c2: 88 0f add r24, r24
d0c4: 99 1f adc r25, r25
d0c6: 82 0f add r24, r18
d0c8: 93 1f adc r25, r19
d0ca: 9a 01 movw r18, r20
d0cc: 28 1b sub r18, r24
d0ce: 39 0b sbc r19, r25
d0d0: c9 01 movw r24, r18
d0d2: 9f 93 push r25
d0d4: 2f 93 push r18
d0d6: 9a 01 movw r18, r20
d0d8: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
d0dc: 96 95 lsr r25
d0de: 87 95 ror r24
d0e0: 96 95 lsr r25
d0e2: 87 95 ror r24
d0e4: 96 95 lsr r25
d0e6: 87 95 ror r24
d0e8: 9f 93 push r25
d0ea: 8f 93 push r24
d0ec: 80 e9 ldi r24, 0x90 ; 144
d0ee: 9a e0 ldi r25, 0x0A ; 10
d0f0: 9f 93 push r25
d0f2: 8f 93 push r24
d0f4: 8b e0 ldi r24, 0x0B ; 11
d0f6: 95 e1 ldi r25, 0x15 ; 21
d0f8: 9f 93 push r25
d0fa: 8f 93 push r24
d0fc: e0 91 78 06 lds r30, 0x0678
d100: f0 91 79 06 lds r31, 0x0679
d104: 09 95 icall
break;
d106: 0f b6 in r0, 0x3f ; 63
d108: f8 94 cli
d10a: de bf out 0x3e, r29 ; 62
d10c: 0f be out 0x3f, r0 ; 63
d10e: cd bf out 0x3d, r28 ; 61
d110: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
case 3:
HoTT_printfxy(9,0,":");
d114: 89 e0 ldi r24, 0x09 ; 9
d116: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d11a: 8e e8 ldi r24, 0x8E ; 142
d11c: 9a e0 ldi r25, 0x0A ; 10
d11e: 9f 93 push r25
d120: 8f 93 push r24
d122: 0b e0 ldi r16, 0x0B ; 11
d124: 15 e1 ldi r17, 0x15 ; 21
d126: 1f 93 push r17
d128: 0f 93 push r16
d12a: e0 91 78 06 lds r30, 0x0678
d12e: f0 91 79 06 lds r31, 0x0679
d132: 09 95 icall
HoTT_printfxy(9,1,":");
d134: 8e e1 ldi r24, 0x1E ; 30
d136: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d13a: 8c e8 ldi r24, 0x8C ; 140
d13c: 9a e0 ldi r25, 0x0A ; 10
d13e: 9f 93 push r25
d140: 8f 93 push r24
d142: 1f 93 push r17
d144: 0f 93 push r16
d146: e0 91 78 06 lds r30, 0x0678
d14a: f0 91 79 06 lds r31, 0x0679
d14e: 09 95 icall
HoTT_printfxy(9,2,":");
d150: 83 e3 ldi r24, 0x33 ; 51
d152: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d156: 8a e8 ldi r24, 0x8A ; 138
d158: 9a e0 ldi r25, 0x0A ; 10
d15a: 9f 93 push r25
d15c: 8f 93 push r24
d15e: 1f 93 push r17
d160: 0f 93 push r16
d162: e0 91 78 06 lds r30, 0x0678
d166: f0 91 79 06 lds r31, 0x0679
d16a: 09 95 icall
HoTT_printfxy(0,3,"---------+-----------");
d16c: 8f e3 ldi r24, 0x3F ; 63
d16e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d172: 84 e7 ldi r24, 0x74 ; 116
d174: 9a e0 ldi r25, 0x0A ; 10
d176: 9f 93 push r25
d178: 8f 93 push r24
d17a: 1f 93 push r17
d17c: 0f 93 push r16
d17e: e0 91 78 06 lds r30, 0x0678
d182: f0 91 79 06 lds r31, 0x0679
d186: 09 95 icall
// HoTT_printfxy(0,3,"---------------------");
HoTT_printfxy(0,6,"---------------------");
d188: 8e e7 ldi r24, 0x7E ; 126
d18a: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d18e: 8e e5 ldi r24, 0x5E ; 94
d190: 9a e0 ldi r25, 0x0A ; 10
d192: 9f 93 push r25
d194: 8f 93 push r24
d196: 1f 93 push r17
d198: 0f 93 push r16
d19a: e0 91 78 06 lds r30, 0x0678
d19e: f0 91 79 06 lds r31, 0x0679
d1a2: 09 95 icall
break;
d1a4: 0f b6 in r0, 0x3f ; 63
d1a6: f8 94 cli
d1a8: de bf out 0x3e, r29 ; 62
d1aa: 0f be out 0x3f, r0 ; 63
d1ac: cd bf out 0x3d, r28 ; 61
d1ae: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
case 4:
if(NaviDataOkay)
d1b2: 80 91 a4 02 lds r24, 0x02A4
d1b6: 88 23 and r24, r24
d1b8: 09 f4 brne .+2 ; 0xd1bc <HoTT_Menu+0x57e>
d1ba: 8e c0 rjmp .+284 ; 0xd2d8 <HoTT_Menu+0x69a>
{
HoTT_printfxy(9,4,":");
d1bc: 8d e5 ldi r24, 0x5D ; 93
d1be: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d1c2: 8c e5 ldi r24, 0x5C ; 92
d1c4: 9a e0 ldi r25, 0x0A ; 10
d1c6: 9f 93 push r25
d1c8: 8f 93 push r24
d1ca: 0b e0 ldi r16, 0x0B ; 11
d1cc: 15 e1 ldi r17, 0x15 ; 21
d1ce: 1f 93 push r17
d1d0: 0f 93 push r16
d1d2: e0 91 78 06 lds r30, 0x0678
d1d6: f0 91 79 06 lds r31, 0x0679
d1da: 09 95 icall
HoTT_printfxy(0,4,"SAT:%2d ",GPSInfo.NumOfSats);
d1dc: 84 e5 ldi r24, 0x54 ; 84
d1de: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d1e2: 80 91 d8 08 lds r24, 0x08D8
d1e6: 1f 92 push r1
d1e8: 8f 93 push r24
d1ea: 83 e5 ldi r24, 0x53 ; 83
d1ec: 9a e0 ldi r25, 0x0A ; 10
d1ee: 9f 93 push r25
d1f0: 8f 93 push r24
d1f2: 1f 93 push r17
d1f4: 0f 93 push r16
d1f6: e0 91 78 06 lds r30, 0x0678
d1fa: f0 91 79 06 lds r31, 0x0679
d1fe: 09 95 icall
HoTT_printfxy(10,4,"DIST:%3dm",GPSInfo.HomeDistance/10);
d200: 8e e5 ldi r24, 0x5E ; 94
d202: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d206: 20 91 db 08 lds r18, 0x08DB
d20a: 30 91 dc 08 lds r19, 0x08DC
d20e: ad ec ldi r26, 0xCD ; 205
d210: bc ec ldi r27, 0xCC ; 204
d212: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
d216: 96 95 lsr r25
d218: 87 95 ror r24
d21a: 96 95 lsr r25
d21c: 87 95 ror r24
d21e: 96 95 lsr r25
d220: 87 95 ror r24
d222: 9f 93 push r25
d224: 8f 93 push r24
d226: 89 e4 ldi r24, 0x49 ; 73
d228: 9a e0 ldi r25, 0x0A ; 10
d22a: 9f 93 push r25
d22c: 8f 93 push r24
d22e: 1f 93 push r17
d230: 0f 93 push r16
d232: e0 91 78 06 lds r30, 0x0678
d236: f0 91 79 06 lds r31, 0x0679
d23a: 09 95 icall
switch (GPSInfo.SatFix)
d23c: 0f b6 in r0, 0x3f ; 63
d23e: f8 94 cli
d240: de bf out 0x3e, r29 ; 62
d242: 0f be out 0x3f, r0 ; 63
d244: cd bf out 0x3d, r28 ; 61
d246: 80 91 d9 08 lds r24, 0x08D9
d24a: 83 30 cpi r24, 0x03 ; 3
d24c: 79 f5 brne .+94 ; 0xd2ac <HoTT_Menu+0x66e>
{
case SATFIX_3D:
if(GPSInfo.Flags & FLAG_DIFFSOLN) HoTT_printfxy(7,4,"D ")
d24e: 80 91 d7 08 lds r24, 0x08D7
d252: 81 ff sbrs r24, 1
d254: 15 c0 rjmp .+42 ; 0xd280 <HoTT_Menu+0x642>
d256: 8b e5 ldi r24, 0x5B ; 91
d258: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d25c: 86 e4 ldi r24, 0x46 ; 70
d25e: 9a e0 ldi r25, 0x0A ; 10
d260: 9f 93 push r25
d262: 8f 93 push r24
d264: c8 01 movw r24, r16
d266: 9f 93 push r25
d268: 0f 93 push r16
d26a: e0 91 78 06 lds r30, 0x0678
d26e: f0 91 79 06 lds r31, 0x0679
d272: 09 95 icall
d274: 0f 90 pop r0
d276: 0f 90 pop r0
d278: 0f 90 pop r0
d27a: 0f 90 pop r0
d27c: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else HoTT_printfxy(7,4,"3D");
d280: 8b e5 ldi r24, 0x5B ; 91
d282: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d286: 83 e4 ldi r24, 0x43 ; 67
d288: 9a e0 ldi r25, 0x0A ; 10
d28a: 9f 93 push r25
d28c: 8f 93 push r24
d28e: 8b e0 ldi r24, 0x0B ; 11
d290: 95 e1 ldi r25, 0x15 ; 21
d292: 9f 93 push r25
d294: 8f 93 push r24
d296: e0 91 78 06 lds r30, 0x0678
d29a: f0 91 79 06 lds r31, 0x0679
d29e: 09 95 icall
d2a0: 0f 90 pop r0
d2a2: 0f 90 pop r0
d2a4: 0f 90 pop r0
d2a6: 0f 90 pop r0
d2a8: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
break;
default:
HoTT_printfxy_BLINK(7,4,"!!");
d2ac: 8b e5 ldi r24, 0x5B ; 91
d2ae: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d2b2: 80 e4 ldi r24, 0x40 ; 64
d2b4: 9a e0 ldi r25, 0x0A ; 10
d2b6: 9f 93 push r25
d2b8: 8f 93 push r24
d2ba: 8c e2 ldi r24, 0x2C ; 44
d2bc: 95 e1 ldi r25, 0x15 ; 21
d2be: 9f 93 push r25
d2c0: 8f 93 push r24
d2c2: e0 91 78 06 lds r30, 0x0678
d2c6: f0 91 79 06 lds r31, 0x0679
d2ca: 09 95 icall
break;
d2cc: 0f 90 pop r0
d2ce: 0f 90 pop r0
d2d0: 0f 90 pop r0
d2d2: 0f 90 pop r0
d2d4: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
}
else
{
Hott_ClearLine(4);
d2d8: 84 e0 ldi r24, 0x04 ; 4
d2da: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
d2de: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 5:
if(NaviDataOkay)
d2e2: 80 91 a4 02 lds r24, 0x02A4
d2e6: 88 23 and r24, r24
d2e8: 09 f4 brne .+2 ; 0xd2ec <HoTT_Menu+0x6ae>
d2ea: 7f c0 rjmp .+254 ; 0xd3ea <HoTT_Menu+0x7ac>
{
if(show_mag)
d2ec: 80 91 74 04 lds r24, 0x0474
d2f0: 88 23 and r24, r24
d2f2: 09 f4 brne .+2 ; 0xd2f6 <HoTT_Menu+0x6b8>
d2f4: 52 c0 rjmp .+164 ; 0xd39a <HoTT_Menu+0x75c>
{
HoTT_printfxy(0,5,"MAG:%3u%% ",EarthMagneticField);
d2f6: 89 e6 ldi r24, 0x69 ; 105
d2f8: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d2fc: 80 91 ba 04 lds r24, 0x04BA
d300: 1f 92 push r1
d302: 8f 93 push r24
d304: 85 e3 ldi r24, 0x35 ; 53
d306: 9a e0 ldi r25, 0x0A ; 10
d308: 9f 93 push r25
d30a: 8f 93 push r24
d30c: 0f 2e mov r0, r31
d30e: fb e0 ldi r31, 0x0B ; 11
d310: ef 2e mov r14, r31
d312: f5 e1 ldi r31, 0x15 ; 21
d314: ff 2e mov r15, r31
d316: f0 2d mov r31, r0
d318: ff 92 push r15
d31a: ef 92 push r14
d31c: e0 91 78 06 lds r30, 0x0678
d320: f0 91 79 06 lds r31, 0x0679
d324: 09 95 icall
HoTT_printfxy(12,5,"HM:%3d%c %c", GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter);
d326: 85 e7 ldi r24, 0x75 ; 117
d328: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d32c: 80 91 96 02 lds r24, 0x0296
d330: 1f 92 push r1
d332: 8f 93 push r24
d334: 1f 92 push r1
d336: 10 e6 ldi r17, 0x60 ; 96
d338: 1f 93 push r17
d33a: ed ed ldi r30, 0xDD ; 221
d33c: f8 e0 ldi r31, 0x08 ; 8
d33e: 81 81 ldd r24, Z+1 ; 0x01
d340: 8f 93 push r24
d342: 80 81 ld r24, Z
d344: 8f 93 push r24
d346: 89 e2 ldi r24, 0x29 ; 41
d348: 9a e0 ldi r25, 0x0A ; 10
d34a: 9f 93 push r25
d34c: 8f 93 push r24
d34e: ff 92 push r15
d350: ef 92 push r14
d352: e0 91 78 06 lds r30, 0x0678
d356: f0 91 79 06 lds r31, 0x0679
d35a: 09 95 icall
HoTT_printfxy(9,5,"incl:%2d%c(%2i)",EarthMagneticInclination, HoTT_GRAD,EarthMagneticInclinationTheoretic);
d35c: 82 e7 ldi r24, 0x72 ; 114
d35e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d362: 80 91 b8 04 lds r24, 0x04B8
d366: 1f 92 push r1
d368: 8f 93 push r24
d36a: 1f 92 push r1
d36c: 1f 93 push r17
d36e: 80 91 b9 04 lds r24, 0x04B9
d372: 1f 92 push r1
d374: 8f 93 push r24
d376: 89 e1 ldi r24, 0x19 ; 25
d378: 9a e0 ldi r25, 0x0A ; 10
d37a: 9f 93 push r25
d37c: 8f 93 push r24
d37e: ff 92 push r15
d380: ef 92 push r14
d382: e0 91 78 06 lds r30, 0x0678
d386: f0 91 79 06 lds r31, 0x0679
d38a: 09 95 icall
d38c: 0f b6 in r0, 0x3f ; 63
d38e: f8 94 cli
d390: de bf out 0x3e, r29 ; 62
d392: 0f be out 0x3f, r0 ; 63
d394: cd bf out 0x3d, r28 ; 61
d396: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
else
{
HoTT_printfxy(0,5," %2um/s: HM:%3d%c %c",GPSInfo.Speed, GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter);
d39a: 89 e6 ldi r24, 0x69 ; 105
d39c: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d3a0: 80 91 96 02 lds r24, 0x0296
d3a4: 1f 92 push r1
d3a6: 8f 93 push r24
d3a8: 1f 92 push r1
d3aa: 80 e6 ldi r24, 0x60 ; 96
d3ac: 8f 93 push r24
d3ae: ed ed ldi r30, 0xDD ; 221
d3b0: f8 e0 ldi r31, 0x08 ; 8
d3b2: 81 81 ldd r24, Z+1 ; 0x01
d3b4: 8f 93 push r24
d3b6: 80 81 ld r24, Z
d3b8: 8f 93 push r24
d3ba: 80 91 da 08 lds r24, 0x08DA
d3be: 1f 92 push r1
d3c0: 8f 93 push r24
d3c2: 80 e0 ldi r24, 0x00 ; 0
d3c4: 9a e0 ldi r25, 0x0A ; 10
d3c6: 9f 93 push r25
d3c8: 8f 93 push r24
d3ca: 8b e0 ldi r24, 0x0B ; 11
d3cc: 95 e1 ldi r25, 0x15 ; 21
d3ce: 9f 93 push r25
d3d0: 8f 93 push r24
d3d2: e0 91 78 06 lds r30, 0x0678
d3d6: f0 91 79 06 lds r31, 0x0679
d3da: 09 95 icall
d3dc: 0f b6 in r0, 0x3f ; 63
d3de: f8 94 cli
d3e0: de bf out 0x3e, r29 ; 62
d3e2: 0f be out 0x3f, r0 ; 63
d3e4: cd bf out 0x3d, r28 ; 61
d3e6: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
}
else Hott_ClearLine(5);
d3ea: 85 e0 ldi r24, 0x05 ; 5
d3ec: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
d3f0: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 6:
break;
case 7: if(NC_ErrorCode)
d3f4: 80 91 bb 04 lds r24, 0x04BB
d3f8: 88 23 and r24, r24
d3fa: 09 f4 brne .+2 ; 0xd3fe <HoTT_Menu+0x7c0>
d3fc: 4f c0 rjmp .+158 ; 0xd49c <HoTT_Menu+0x85e>
{
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER)
d3fe: 90 91 ed 02 lds r25, 0x02ED
d402: 99 23 and r25, r25
d404: 09 f1 breq .+66 ; 0xd448 <HoTT_Menu+0x80a>
d406: 83 32 cpi r24, 0x23 ; 35
d408: f8 f4 brcc .+62 ; 0xd448 <HoTT_Menu+0x80a>
{
Hott_ClearLine(7);
d40a: 87 e0 ldi r24, 0x07 ; 7
d40c: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode);
d410: 83 e9 ldi r24, 0x93 ; 147
d412: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d416: 80 91 bb 04 lds r24, 0x04BB
d41a: 1f 92 push r1
d41c: 8f 93 push r24
d41e: 85 ef ldi r24, 0xF5 ; 245
d420: 99 e0 ldi r25, 0x09 ; 9
d422: 9f 93 push r25
d424: 8f 93 push r24
d426: 8b e1 ldi r24, 0x1B ; 27
d428: 95 e1 ldi r25, 0x15 ; 21
d42a: 9f 93 push r25
d42c: 8f 93 push r24
d42e: e0 91 78 06 lds r30, 0x0678
d432: f0 91 79 06 lds r31, 0x0679
d436: 09 95 icall
d438: 0f 90 pop r0
d43a: 0f 90 pop r0
d43c: 0f 90 pop r0
d43e: 0f 90 pop r0
d440: 0f 90 pop r0
d442: 0f 90 pop r0
d444: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
else
{
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);};
d448: 83 e9 ldi r24, 0x93 ; 147
d44a: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d44e: 8f ee ldi r24, 0xEF ; 239
d450: 99 e0 ldi r25, 0x09 ; 9
d452: 9f 93 push r25
d454: 8f 93 push r24
d456: 0b e0 ldi r16, 0x0B ; 11
d458: 15 e1 ldi r17, 0x15 ; 21
d45a: 1f 93 push r17
d45c: 0f 93 push r16
d45e: e0 91 78 06 lds r30, 0x0678
d462: f0 91 79 06 lds r31, 0x0679
d466: 09 95 icall
d468: 1f 92 push r1
d46a: 1f 92 push r1
d46c: 80 91 bb 04 lds r24, 0x04BB
d470: f1 e1 ldi r31, 0x11 ; 17
d472: 8f 9f mul r24, r31
d474: c0 01 movw r24, r0
d476: 11 24 eor r1, r1
d478: 84 59 subi r24, 0x94 ; 148
d47a: 94 4f sbci r25, 0xF4 ; 244
d47c: 9f 93 push r25
d47e: 8f 93 push r24
d480: 1f 93 push r17
d482: 0f 93 push r16
d484: e0 91 78 06 lds r30, 0x0678
d488: f0 91 79 06 lds r31, 0x0679
d48c: 09 95 icall
d48e: 0f b6 in r0, 0x3f ; 63
d490: f8 94 cli
d492: de bf out 0x3e, r29 ; 62
d494: 0f be out 0x3f, r0 ; 63
d496: cd bf out 0x3d, r28 ; 61
d498: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
else
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!")
d49c: 80 91 cb 03 lds r24, 0x03CB
d4a0: 85 ff sbrs r24, 5
d4a2: 16 c0 rjmp .+44 ; 0xd4d0 <HoTT_Menu+0x892>
d4a4: 84 e9 ldi r24, 0x94 ; 148
d4a6: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d4aa: 8c ed ldi r24, 0xDC ; 220
d4ac: 99 e0 ldi r25, 0x09 ; 9
d4ae: 9f 93 push r25
d4b0: 8f 93 push r24
d4b2: 8b e0 ldi r24, 0x0B ; 11
d4b4: 95 e1 ldi r25, 0x15 ; 21
d4b6: 9f 93 push r25
d4b8: 8f 93 push r24
d4ba: e0 91 78 06 lds r30, 0x0678
d4be: f0 91 79 06 lds r31, 0x0679
d4c2: 09 95 icall
d4c4: 0f 90 pop r0
d4c6: 0f 90 pop r0
d4c8: 0f 90 pop r0
d4ca: 0f 90 pop r0
d4cc: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else HoTT_printfxy(0,7," www.MikroKopter.de ");
d4d0: 83 e9 ldi r24, 0x93 ; 147
d4d2: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d4d6: 86 ec ldi r24, 0xC6 ; 198
d4d8: 99 e0 ldi r25, 0x09 ; 9
d4da: 9f 93 push r25
d4dc: 8f 93 push r24
d4de: 8b e0 ldi r24, 0x0B ; 11
d4e0: 95 e1 ldi r25, 0x15 ; 21
d4e2: 9f 93 push r25
d4e4: 8f 93 push r24
d4e6: e0 91 78 06 lds r30, 0x0678
d4ea: f0 91 79 06 lds r31, 0x0679
d4ee: 09 95 icall
d4f0: 0f 90 pop r0
d4f2: 0f 90 pop r0
d4f4: 0f 90 pop r0
d4f6: 0f 90 pop r0
d4f8: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
case 12:
case 13:
case 14:
case 15:
case 16:
if(HottKeyboard == HOTT_KEY_DOWN) { LIBFC_HoTT_Clear(); page = 5; line = 0;}
d4fc: 80 91 a9 0c lds r24, 0x0CA9
d500: 82 30 cpi r24, 0x02 ; 2
d502: 41 f4 brne .+16 ; 0xd514 <HoTT_Menu+0x8d6>
d504: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
d508: 85 e0 ldi r24, 0x05 ; 5
d50a: 80 93 76 04 sts 0x0476, r24
d50e: 10 92 75 04 sts 0x0475, r1
d512: 16 c0 rjmp .+44 ; 0xd540 <HoTT_Menu+0x902>
else
if(HottKeyboard == HOTT_KEY_SET) { if(show_mag) show_mag = 0; else show_mag = 1;}
d514: 86 30 cpi r24, 0x06 ; 6
d516: 59 f4 brne .+22 ; 0xd52e <HoTT_Menu+0x8f0>
d518: 80 91 74 04 lds r24, 0x0474
d51c: 88 23 and r24, r24
d51e: 19 f0 breq .+6 ; 0xd526 <HoTT_Menu+0x8e8>
d520: 10 92 74 04 sts 0x0474, r1
d524: 0d c0 rjmp .+26 ; 0xd540 <HoTT_Menu+0x902>
d526: 81 e0 ldi r24, 0x01 ; 1
d528: 80 93 74 04 sts 0x0474, r24
d52c: 09 c0 rjmp .+18 ; 0xd540 <HoTT_Menu+0x902>
else
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 1; line = 0;};
d52e: 88 30 cpi r24, 0x08 ; 8
d530: 39 f4 brne .+14 ; 0xd540 <HoTT_Menu+0x902>
d532: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
d536: 81 e0 ldi r24, 0x01 ; 1
d538: 80 93 76 04 sts 0x0476, r24
d53c: 10 92 75 04 sts 0x0475, r1
HottKeyboard = 0;
d540: 10 92 a9 0c sts 0x0CA9, r1
break;
d544: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
default: line = 0;
d548: 10 92 75 04 sts 0x0475, r1
break;
d54c: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 1:
switch(line++)
d550: 80 91 75 04 lds r24, 0x0475
d554: 91 e0 ldi r25, 0x01 ; 1
d556: 98 0f add r25, r24
d558: 90 93 75 04 sts 0x0475, r25
d55c: 90 e0 ldi r25, 0x00 ; 0
d55e: 81 31 cpi r24, 0x11 ; 17
d560: 91 05 cpc r25, r1
d562: 08 f0 brcs .+2 ; 0xd566 <HoTT_Menu+0x928>
d564: e9 c5 rjmp .+3026 ; 0xe138 <HoTT_Menu+0x14fa>
d566: fc 01 movw r30, r24
d568: e0 59 subi r30, 0x90 ; 144
d56a: ff 4f sbci r31, 0xFF ; 255
d56c: 0c 94 a7 b1 jmp 0x1634e ; 0x1634e <__tablejump2__>
{
case 0:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
d570: 80 91 cb 03 lds r24, 0x03CB
d574: 85 ff sbrs r24, 5
d576: 5d c0 rjmp .+186 ; 0xd632 <HoTT_Menu+0x9f4>
HoTT_printfxy_BLINK(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity)
d578: 80 e0 ldi r24, 0x00 ; 0
d57a: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d57e: 80 91 1a 01 lds r24, 0x011A
d582: 90 91 1b 01 lds r25, 0x011B
d586: 00 91 1a 01 lds r16, 0x011A
d58a: 10 91 1b 01 lds r17, 0x011B
d58e: e0 91 5e 04 lds r30, 0x045E
d592: f0 91 5f 04 lds r31, 0x045F
d596: a9 e1 ldi r26, 0x19 ; 25
d598: b5 e0 ldi r27, 0x05 ; 5
d59a: 11 96 adiw r26, 0x01 ; 1
d59c: 2c 91 ld r18, X
d59e: 11 97 sbiw r26, 0x01 ; 1
d5a0: 2f 93 push r18
d5a2: 2c 91 ld r18, X
d5a4: 2f 93 push r18
d5a6: 2a e0 ldi r18, 0x0A ; 10
d5a8: 30 e0 ldi r19, 0x00 ; 0
d5aa: b9 01 movw r22, r18
d5ac: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
d5b0: 9f 93 push r25
d5b2: 8f 93 push r24
d5b4: c8 01 movw r24, r16
d5b6: b9 01 movw r22, r18
d5b8: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
d5bc: 7f 93 push r23
d5be: 6f 93 push r22
d5c0: 9f 01 movw r18, r30
d5c2: a9 e8 ldi r26, 0x89 ; 137
d5c4: b8 e8 ldi r27, 0x88 ; 136
d5c6: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
d5ca: 96 95 lsr r25
d5cc: 87 95 ror r24
d5ce: 92 95 swap r25
d5d0: 82 95 swap r24
d5d2: 8f 70 andi r24, 0x0F ; 15
d5d4: 89 27 eor r24, r25
d5d6: 9f 70 andi r25, 0x0F ; 15
d5d8: 89 27 eor r24, r25
d5da: 4c e3 ldi r20, 0x3C ; 60
d5dc: 48 9f mul r20, r24
d5de: 90 01 movw r18, r0
d5e0: 49 9f mul r20, r25
d5e2: 30 0d add r19, r0
d5e4: 11 24 eor r1, r1
d5e6: cf 01 movw r24, r30
d5e8: 82 1b sub r24, r18
d5ea: 93 0b sbc r25, r19
d5ec: 9f 93 push r25
d5ee: 8f 93 push r24
d5f0: 9f 01 movw r18, r30
d5f2: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
d5f6: 96 95 lsr r25
d5f8: 87 95 ror r24
d5fa: 92 95 swap r25
d5fc: 82 95 swap r24
d5fe: 8f 70 andi r24, 0x0F ; 15
d600: 89 27 eor r24, r25
d602: 9f 70 andi r25, 0x0F ; 15
d604: 89 27 eor r24, r25
d606: 9f 93 push r25
d608: 8f 93 push r24
d60a: 8b ea ldi r24, 0xAB ; 171
d60c: 99 e0 ldi r25, 0x09 ; 9
d60e: 9f 93 push r25
d610: 8f 93 push r24
d612: 8c e2 ldi r24, 0x2C ; 44
d614: 95 e1 ldi r25, 0x15 ; 21
d616: 9f 93 push r25
d618: 8f 93 push r24
d61a: e0 91 78 06 lds r30, 0x0678
d61e: f0 91 79 06 lds r31, 0x0679
d622: 09 95 icall
d624: 0f b6 in r0, 0x3f ; 63
d626: f8 94 cli
d628: de bf out 0x3e, r29 ; 62
d62a: 0f be out 0x3f, r0 ; 63
d62c: cd bf out 0x3d, r28 ; 61
d62e: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else HoTT_printfxy(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity);
d632: 80 e0 ldi r24, 0x00 ; 0
d634: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d638: 80 91 1a 01 lds r24, 0x011A
d63c: 90 91 1b 01 lds r25, 0x011B
d640: 00 91 1a 01 lds r16, 0x011A
d644: 10 91 1b 01 lds r17, 0x011B
d648: e0 91 5e 04 lds r30, 0x045E
d64c: f0 91 5f 04 lds r31, 0x045F
d650: a9 e1 ldi r26, 0x19 ; 25
d652: b5 e0 ldi r27, 0x05 ; 5
d654: 11 96 adiw r26, 0x01 ; 1
d656: 2c 91 ld r18, X
d658: 11 97 sbiw r26, 0x01 ; 1
d65a: 2f 93 push r18
d65c: 2c 91 ld r18, X
d65e: 2f 93 push r18
d660: 2a e0 ldi r18, 0x0A ; 10
d662: 30 e0 ldi r19, 0x00 ; 0
d664: b9 01 movw r22, r18
d666: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
d66a: 9f 93 push r25
d66c: 8f 93 push r24
d66e: c8 01 movw r24, r16
d670: b9 01 movw r22, r18
d672: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
d676: 7f 93 push r23
d678: 6f 93 push r22
d67a: 9f 01 movw r18, r30
d67c: a9 e8 ldi r26, 0x89 ; 137
d67e: b8 e8 ldi r27, 0x88 ; 136
d680: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
d684: 96 95 lsr r25
d686: 87 95 ror r24
d688: 92 95 swap r25
d68a: 82 95 swap r24
d68c: 8f 70 andi r24, 0x0F ; 15
d68e: 89 27 eor r24, r25
d690: 9f 70 andi r25, 0x0F ; 15
d692: 89 27 eor r24, r25
d694: 4c e3 ldi r20, 0x3C ; 60
d696: 48 9f mul r20, r24
d698: 90 01 movw r18, r0
d69a: 49 9f mul r20, r25
d69c: 30 0d add r19, r0
d69e: 11 24 eor r1, r1
d6a0: cf 01 movw r24, r30
d6a2: 82 1b sub r24, r18
d6a4: 93 0b sbc r25, r19
d6a6: 9f 93 push r25
d6a8: 8f 93 push r24
d6aa: 9f 01 movw r18, r30
d6ac: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
d6b0: 96 95 lsr r25
d6b2: 87 95 ror r24
d6b4: 92 95 swap r25
d6b6: 82 95 swap r24
d6b8: 8f 70 andi r24, 0x0F ; 15
d6ba: 89 27 eor r24, r25
d6bc: 9f 70 andi r25, 0x0F ; 15
d6be: 89 27 eor r24, r25
d6c0: 9f 93 push r25
d6c2: 8f 93 push r24
d6c4: 80 e9 ldi r24, 0x90 ; 144
d6c6: 99 e0 ldi r25, 0x09 ; 9
d6c8: 9f 93 push r25
d6ca: 8f 93 push r24
d6cc: 8b e0 ldi r24, 0x0B ; 11
d6ce: 95 e1 ldi r25, 0x15 ; 21
d6d0: 9f 93 push r25
d6d2: 8f 93 push r24
d6d4: e0 91 78 06 lds r30, 0x0678
d6d8: f0 91 79 06 lds r31, 0x0679
d6dc: 09 95 icall
d6de: 0f b6 in r0, 0x3f ; 63
d6e0: f8 94 cli
d6e2: de bf out 0x3e, r29 ; 62
d6e4: 0f be out 0x3f, r0 ; 63
d6e6: cd bf out 0x3d, r28 ; 61
d6e8: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 1:
HoTT_printfxy(0,1,"DIR:%3d%c",CompassCorrected, HoTT_GRAD);
d6ec: 85 e1 ldi r24, 0x15 ; 21
d6ee: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d6f2: 1f 92 push r1
d6f4: 80 e6 ldi r24, 0x60 ; 96
d6f6: 8f 93 push r24
d6f8: 80 91 66 06 lds r24, 0x0666
d6fc: 8f 93 push r24
d6fe: 80 91 65 06 lds r24, 0x0665
d702: 8f 93 push r24
d704: 86 e8 ldi r24, 0x86 ; 134
d706: 99 e0 ldi r25, 0x09 ; 9
d708: 9f 93 push r25
d70a: 8f 93 push r24
d70c: 8b e0 ldi r24, 0x0B ; 11
d70e: 95 e1 ldi r25, 0x15 ; 21
d710: 9f 93 push r25
d712: 8f 93 push r24
d714: e0 91 78 06 lds r30, 0x0678
d718: f0 91 79 06 lds r31, 0x0679
d71c: 09 95 icall
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
d71e: 80 91 5c 06 lds r24, 0x065C
d722: 0f b6 in r0, 0x3f ; 63
d724: f8 94 cli
d726: de bf out 0x3e, r29 ; 62
d728: 0f be out 0x3f, r0 ; 63
d72a: cd bf out 0x3d, r28 ; 61
d72c: 80 ff sbrs r24, 0
d72e: 52 c0 rjmp .+164 ; 0xd7d4 <HoTT_Menu+0xb96>
{
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,1,"ALT:%4im", (int16_t)(HoehenWert/100))
d730: 80 91 1b 04 lds r24, 0x041B
d734: 88 23 and r24, r24
d736: 39 f1 breq .+78 ; 0xd786 <HoTT_Menu+0xb48>
d738: 8f e1 ldi r24, 0x1F ; 31
d73a: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d73e: 60 91 fe 03 lds r22, 0x03FE
d742: 70 91 ff 03 lds r23, 0x03FF
d746: 80 91 00 04 lds r24, 0x0400
d74a: 90 91 01 04 lds r25, 0x0401
d74e: 24 e6 ldi r18, 0x64 ; 100
d750: 30 e0 ldi r19, 0x00 ; 0
d752: 40 e0 ldi r20, 0x00 ; 0
d754: 50 e0 ldi r21, 0x00 ; 0
d756: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
d75a: 3f 93 push r19
d75c: 2f 93 push r18
d75e: 8d e7 ldi r24, 0x7D ; 125
d760: 99 e0 ldi r25, 0x09 ; 9
d762: 9f 93 push r25
d764: 8f 93 push r24
d766: 8b e1 ldi r24, 0x1B ; 27
d768: 95 e1 ldi r25, 0x15 ; 21
d76a: 9f 93 push r25
d76c: 8f 93 push r24
d76e: e0 91 78 06 lds r30, 0x0678
d772: f0 91 79 06 lds r31, 0x0679
d776: 09 95 icall
d778: 0f 90 pop r0
d77a: 0f 90 pop r0
d77c: 0f 90 pop r0
d77e: 0f 90 pop r0
d780: 0f 90 pop r0
d782: 0f 90 pop r0
d784: 3b c0 rjmp .+118 ; 0xd7fc <HoTT_Menu+0xbbe>
else HoTT_printfxy(10,1,"ALT:%4im", (int16_t)(HoehenWert/100))
d786: 8f e1 ldi r24, 0x1F ; 31
d788: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d78c: 60 91 fe 03 lds r22, 0x03FE
d790: 70 91 ff 03 lds r23, 0x03FF
d794: 80 91 00 04 lds r24, 0x0400
d798: 90 91 01 04 lds r25, 0x0401
d79c: 24 e6 ldi r18, 0x64 ; 100
d79e: 30 e0 ldi r19, 0x00 ; 0
d7a0: 40 e0 ldi r20, 0x00 ; 0
d7a2: 50 e0 ldi r21, 0x00 ; 0
d7a4: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
d7a8: 3f 93 push r19
d7aa: 2f 93 push r18
d7ac: 84 e7 ldi r24, 0x74 ; 116
d7ae: 99 e0 ldi r25, 0x09 ; 9
d7b0: 9f 93 push r25
d7b2: 8f 93 push r24
d7b4: 8b e0 ldi r24, 0x0B ; 11
d7b6: 95 e1 ldi r25, 0x15 ; 21
d7b8: 9f 93 push r25
d7ba: 8f 93 push r24
d7bc: e0 91 78 06 lds r30, 0x0678
d7c0: f0 91 79 06 lds r31, 0x0679
d7c4: 09 95 icall
d7c6: 0f 90 pop r0
d7c8: 0f 90 pop r0
d7ca: 0f 90 pop r0
d7cc: 0f 90 pop r0
d7ce: 0f 90 pop r0
d7d0: 0f 90 pop r0
d7d2: 14 c0 rjmp .+40 ; 0xd7fc <HoTT_Menu+0xbbe>
}
else HoTT_printfxy(10,1,"ALT:---- ");
d7d4: 8f e1 ldi r24, 0x1F ; 31
d7d6: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d7da: 8a e6 ldi r24, 0x6A ; 106
d7dc: 99 e0 ldi r25, 0x09 ; 9
d7de: 9f 93 push r25
d7e0: 8f 93 push r24
d7e2: 8b e0 ldi r24, 0x0B ; 11
d7e4: 95 e1 ldi r25, 0x15 ; 21
d7e6: 9f 93 push r25
d7e8: 8f 93 push r24
d7ea: e0 91 78 06 lds r30, 0x0678
d7ee: f0 91 79 06 lds r31, 0x0679
d7f2: 09 95 icall
d7f4: 0f 90 pop r0
d7f6: 0f 90 pop r0
d7f8: 0f 90 pop r0
d7fa: 0f 90 pop r0
HoTT_printfxy(20,1,"%c",VarioCharacter);
d7fc: 89 e2 ldi r24, 0x29 ; 41
d7fe: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d802: 80 91 20 01 lds r24, 0x0120
d806: 1f 92 push r1
d808: 8f 93 push r24
d80a: 87 e6 ldi r24, 0x67 ; 103
d80c: 99 e0 ldi r25, 0x09 ; 9
d80e: 9f 93 push r25
d810: 8f 93 push r24
d812: 8b e0 ldi r24, 0x0B ; 11
d814: 95 e1 ldi r25, 0x15 ; 21
d816: 9f 93 push r25
d818: 8f 93 push r24
d81a: e0 91 78 06 lds r30, 0x0678
d81e: f0 91 79 06 lds r31, 0x0679
d822: 09 95 icall
break;
d824: 0f 90 pop r0
d826: 0f 90 pop r0
d828: 0f 90 pop r0
d82a: 0f 90 pop r0
d82c: 0f 90 pop r0
d82e: 0f 90 pop r0
d830: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
case 2:
if(NaviDataOkay)
d834: 80 91 a4 02 lds r24, 0x02A4
d838: 88 23 and r24, r24
d83a: a1 f1 breq .+104 ; 0xd8a4 <HoTT_Menu+0xc66>
{
HoTT_printfxy(1,2,"HM:%3d%c DIST:%3dm %c", GPSInfo.HomeBearing, HoTT_GRAD, GPSInfo.HomeDistance/10, NC_GPS_ModeCharacter);
d83c: 8b e2 ldi r24, 0x2B ; 43
d83e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d842: 80 91 96 02 lds r24, 0x0296
d846: 1f 92 push r1
d848: 8f 93 push r24
d84a: 20 91 db 08 lds r18, 0x08DB
d84e: 30 91 dc 08 lds r19, 0x08DC
d852: ad ec ldi r26, 0xCD ; 205
d854: bc ec ldi r27, 0xCC ; 204
d856: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
d85a: 96 95 lsr r25
d85c: 87 95 ror r24
d85e: 96 95 lsr r25
d860: 87 95 ror r24
d862: 96 95 lsr r25
d864: 87 95 ror r24
d866: 9f 93 push r25
d868: 8f 93 push r24
d86a: 1f 92 push r1
d86c: 80 e6 ldi r24, 0x60 ; 96
d86e: 8f 93 push r24
d870: ed ed ldi r30, 0xDD ; 221
d872: f8 e0 ldi r31, 0x08 ; 8
d874: 81 81 ldd r24, Z+1 ; 0x01
d876: 8f 93 push r24
d878: 80 81 ld r24, Z
d87a: 8f 93 push r24
d87c: 80 e5 ldi r24, 0x50 ; 80
d87e: 99 e0 ldi r25, 0x09 ; 9
d880: 9f 93 push r25
d882: 8f 93 push r24
d884: 8b e0 ldi r24, 0x0B ; 11
d886: 95 e1 ldi r25, 0x15 ; 21
d888: 9f 93 push r25
d88a: 8f 93 push r24
d88c: e0 91 78 06 lds r30, 0x0678
d890: f0 91 79 06 lds r31, 0x0679
d894: 09 95 icall
d896: 0f b6 in r0, 0x3f ; 63
d898: f8 94 cli
d89a: de bf out 0x3e, r29 ; 62
d89c: 0f be out 0x3f, r0 ; 63
d89e: cd bf out 0x3d, r28 ; 61
d8a0: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
else
{
Hott_ClearLine(2);
d8a4: 82 e0 ldi r24, 0x02 ; 2
d8a6: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
d8aa: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 3:
HoTT_printfxy(0,3,"PWR:%2i.%1iA (%iW) ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10,Capacity.ActualPower);
d8ae: 8f e3 ldi r24, 0x3F ; 63
d8b0: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d8b4: 40 91 15 05 lds r20, 0x0515
d8b8: 50 91 16 05 lds r21, 0x0516
d8bc: e7 e1 ldi r30, 0x17 ; 23
d8be: f5 e0 ldi r31, 0x05 ; 5
d8c0: 81 81 ldd r24, Z+1 ; 0x01
d8c2: 8f 93 push r24
d8c4: 80 81 ld r24, Z
d8c6: 8f 93 push r24
d8c8: 9a 01 movw r18, r20
d8ca: ad ec ldi r26, 0xCD ; 205
d8cc: bc ec ldi r27, 0xCC ; 204
d8ce: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
d8d2: 96 95 lsr r25
d8d4: 87 95 ror r24
d8d6: 96 95 lsr r25
d8d8: 87 95 ror r24
d8da: 96 95 lsr r25
d8dc: 87 95 ror r24
d8de: 9c 01 movw r18, r24
d8e0: 22 0f add r18, r18
d8e2: 33 1f adc r19, r19
d8e4: 88 0f add r24, r24
d8e6: 99 1f adc r25, r25
d8e8: 88 0f add r24, r24
d8ea: 99 1f adc r25, r25
d8ec: 88 0f add r24, r24
d8ee: 99 1f adc r25, r25
d8f0: 82 0f add r24, r18
d8f2: 93 1f adc r25, r19
d8f4: fa 01 movw r30, r20
d8f6: e8 1b sub r30, r24
d8f8: f9 0b sbc r31, r25
d8fa: cf 01 movw r24, r30
d8fc: 9f 93 push r25
d8fe: ef 93 push r30
d900: 9a 01 movw r18, r20
d902: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
d906: 96 95 lsr r25
d908: 87 95 ror r24
d90a: 96 95 lsr r25
d90c: 87 95 ror r24
d90e: 96 95 lsr r25
d910: 87 95 ror r24
d912: 9f 93 push r25
d914: 8f 93 push r24
d916: 8c e3 ldi r24, 0x3C ; 60
d918: 99 e0 ldi r25, 0x09 ; 9
d91a: 9f 93 push r25
d91c: 8f 93 push r24
d91e: 8b e0 ldi r24, 0x0B ; 11
d920: 95 e1 ldi r25, 0x15 ; 21
d922: 9f 93 push r25
d924: 8f 93 push r24
d926: e0 91 78 06 lds r30, 0x0678
d92a: f0 91 79 06 lds r31, 0x0679
d92e: 09 95 icall
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(19,3,"CF") else HoTT_printfxy(19,3," ");
d930: 80 91 ca 03 lds r24, 0x03CA
d934: 0f b6 in r0, 0x3f ; 63
d936: f8 94 cli
d938: de bf out 0x3e, r29 ; 62
d93a: 0f be out 0x3f, r0 ; 63
d93c: cd bf out 0x3d, r28 ; 61
d93e: 80 ff sbrs r24, 0
d940: 16 c0 rjmp .+44 ; 0xd96e <HoTT_Menu+0xd30>
d942: 82 e5 ldi r24, 0x52 ; 82
d944: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d948: 89 e3 ldi r24, 0x39 ; 57
d94a: 99 e0 ldi r25, 0x09 ; 9
d94c: 9f 93 push r25
d94e: 8f 93 push r24
d950: 8b e1 ldi r24, 0x1B ; 27
d952: 95 e1 ldi r25, 0x15 ; 21
d954: 9f 93 push r25
d956: 8f 93 push r24
d958: e0 91 78 06 lds r30, 0x0678
d95c: f0 91 79 06 lds r31, 0x0679
d960: 09 95 icall
d962: 0f 90 pop r0
d964: 0f 90 pop r0
d966: 0f 90 pop r0
d968: 0f 90 pop r0
d96a: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
d96e: 82 e5 ldi r24, 0x52 ; 82
d970: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d974: 86 e3 ldi r24, 0x36 ; 54
d976: 99 e0 ldi r25, 0x09 ; 9
d978: 9f 93 push r25
d97a: 8f 93 push r24
d97c: 8b e0 ldi r24, 0x0B ; 11
d97e: 95 e1 ldi r25, 0x15 ; 21
d980: 9f 93 push r25
d982: 8f 93 push r24
d984: e0 91 78 06 lds r30, 0x0678
d988: f0 91 79 06 lds r31, 0x0679
d98c: 09 95 icall
d98e: 0f 90 pop r0
d990: 0f 90 pop r0
d992: 0f 90 pop r0
d994: 0f 90 pop r0
d996: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 4:
if(NaviDataOkay)
d99a: 80 91 a4 02 lds r24, 0x02A4
d99e: 88 23 and r24, r24
d9a0: 09 f4 brne .+2 ; 0xd9a4 <HoTT_Menu+0xd66>
d9a2: 66 c0 rjmp .+204 ; 0xda70 <HoTT_Menu+0xe32>
{
HoTT_printfxy(0,4,"GPS:%2um/s SAT:%d ",GPSInfo.Speed,GPSInfo.NumOfSats);
d9a4: 84 e5 ldi r24, 0x54 ; 84
d9a6: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d9aa: 80 91 d8 08 lds r24, 0x08D8
d9ae: 1f 92 push r1
d9b0: 8f 93 push r24
d9b2: 80 91 da 08 lds r24, 0x08DA
d9b6: 1f 92 push r1
d9b8: 8f 93 push r24
d9ba: 83 e2 ldi r24, 0x23 ; 35
d9bc: 99 e0 ldi r25, 0x09 ; 9
d9be: 9f 93 push r25
d9c0: 8f 93 push r24
d9c2: 8b e0 ldi r24, 0x0B ; 11
d9c4: 95 e1 ldi r25, 0x15 ; 21
d9c6: 9f 93 push r25
d9c8: 8f 93 push r24
d9ca: e0 91 78 06 lds r30, 0x0678
d9ce: f0 91 79 06 lds r31, 0x0679
d9d2: 09 95 icall
switch (GPSInfo.SatFix)
d9d4: 0f b6 in r0, 0x3f ; 63
d9d6: f8 94 cli
d9d8: de bf out 0x3e, r29 ; 62
d9da: 0f be out 0x3f, r0 ; 63
d9dc: cd bf out 0x3d, r28 ; 61
d9de: 80 91 d9 08 lds r24, 0x08D9
d9e2: 83 30 cpi r24, 0x03 ; 3
d9e4: a9 f4 brne .+42 ; 0xda10 <HoTT_Menu+0xdd2>
{
case SATFIX_3D:
HoTT_printfxy(16,4," 3D ");
d9e6: 84 e6 ldi r24, 0x64 ; 100
d9e8: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
d9ec: 8d e1 ldi r24, 0x1D ; 29
d9ee: 99 e0 ldi r25, 0x09 ; 9
d9f0: 9f 93 push r25
d9f2: 8f 93 push r24
d9f4: 8b e0 ldi r24, 0x0B ; 11
d9f6: 95 e1 ldi r25, 0x15 ; 21
d9f8: 9f 93 push r25
d9fa: 8f 93 push r24
d9fc: e0 91 78 06 lds r30, 0x0678
da00: f0 91 79 06 lds r31, 0x0679
da04: 09 95 icall
break;
da06: 0f 90 pop r0
da08: 0f 90 pop r0
da0a: 0f 90 pop r0
da0c: 0f 90 pop r0
da0e: 14 c0 rjmp .+40 ; 0xda38 <HoTT_Menu+0xdfa>
//case SATFIX_2D:
//case SATFIX_NONE:
default:
HoTT_printfxy_BLINK(16,4,"NOFIX");
da10: 84 e6 ldi r24, 0x64 ; 100
da12: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
da16: 87 e1 ldi r24, 0x17 ; 23
da18: 99 e0 ldi r25, 0x09 ; 9
da1a: 9f 93 push r25
da1c: 8f 93 push r24
da1e: 8c e2 ldi r24, 0x2C ; 44
da20: 95 e1 ldi r25, 0x15 ; 21
da22: 9f 93 push r25
da24: 8f 93 push r24
da26: e0 91 78 06 lds r30, 0x0678
da2a: f0 91 79 06 lds r31, 0x0679
da2e: 09 95 icall
break;
da30: 0f 90 pop r0
da32: 0f 90 pop r0
da34: 0f 90 pop r0
da36: 0f 90 pop r0
}
if(GPSInfo.Flags & FLAG_DIFFSOLN)
da38: 80 91 d7 08 lds r24, 0x08D7
da3c: 81 fd sbrc r24, 1
da3e: 02 c0 rjmp .+4 ; 0xda44 <HoTT_Menu+0xe06>
da40: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
{
HoTT_printfxy(16,4,"DGPS ");
da44: 84 e6 ldi r24, 0x64 ; 100
da46: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
da4a: 81 e1 ldi r24, 0x11 ; 17
da4c: 99 e0 ldi r25, 0x09 ; 9
da4e: 9f 93 push r25
da50: 8f 93 push r24
da52: 8b e0 ldi r24, 0x0B ; 11
da54: 95 e1 ldi r25, 0x15 ; 21
da56: 9f 93 push r25
da58: 8f 93 push r24
da5a: e0 91 78 06 lds r30, 0x0678
da5e: f0 91 79 06 lds r31, 0x0679
da62: 09 95 icall
da64: 0f 90 pop r0
da66: 0f 90 pop r0
da68: 0f 90 pop r0
da6a: 0f 90 pop r0
da6c: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
}
else
{ //012345678901234567890
HoTT_printfxy(0,4," No NaviCtrl ");
da70: 84 e5 ldi r24, 0x54 ; 84
da72: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
da76: 8b ef ldi r24, 0xFB ; 251
da78: 98 e0 ldi r25, 0x08 ; 8
da7a: 9f 93 push r25
da7c: 8f 93 push r24
da7e: 8b e0 ldi r24, 0x0B ; 11
da80: 95 e1 ldi r25, 0x15 ; 21
da82: 9f 93 push r25
da84: 8f 93 push r24
da86: e0 91 78 06 lds r30, 0x0678
da8a: f0 91 79 06 lds r31, 0x0679
da8e: 09 95 icall
da90: 0f 90 pop r0
da92: 0f 90 pop r0
da94: 0f 90 pop r0
da96: 0f 90 pop r0
da98: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 5:
if(show_current)
da9c: 80 91 73 04 lds r24, 0x0473
daa0: 88 23 and r24, r24
daa2: 09 f4 brne .+2 ; 0xdaa6 <HoTT_Menu+0xe68>
daa4: c6 c0 rjmp .+396 ; 0xdc32 <HoTT_Menu+0xff4>
{
// HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[0].Current/10,Motor[0].Current%10,Motor[1].Current/10,Motor[1].Current%10,Motor[2].Current/10,Motor[2].Current%10,Motor[3].Current/10,Motor[3].Current%10);
HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", BL3_Current(0)/10,BL3_Current(0)%10,BL3_Current(1)/10,BL3_Current(1)%10,BL3_Current(2)/10,BL3_Current(2)%10,BL3_Current(3)/10,BL3_Current(3)%10);
daa6: 89 e6 ldi r24, 0x69 ; 105
daa8: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
daac: 40 90 78 06 lds r4, 0x0678
dab0: 50 90 79 06 lds r5, 0x0679
dab4: 83 e0 ldi r24, 0x03 ; 3
dab6: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
daba: 6c 01 movw r12, r24
dabc: 83 e0 ldi r24, 0x03 ; 3
dabe: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dac2: 4c 01 movw r8, r24
dac4: 82 e0 ldi r24, 0x02 ; 2
dac6: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
daca: 7c 01 movw r14, r24
dacc: 82 e0 ldi r24, 0x02 ; 2
dace: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dad2: 5c 01 movw r10, r24
dad4: 81 e0 ldi r24, 0x01 ; 1
dad6: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dada: 8c 01 movw r16, r24
dadc: 81 e0 ldi r24, 0x01 ; 1
dade: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dae2: 3c 01 movw r6, r24
dae4: 80 e0 ldi r24, 0x00 ; 0
dae6: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
daea: 1c 01 movw r2, r24
daec: 80 e0 ldi r24, 0x00 ; 0
daee: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
daf2: ac 01 movw r20, r24
daf4: 96 01 movw r18, r12
daf6: ad ec ldi r26, 0xCD ; 205
daf8: bc ec ldi r27, 0xCC ; 204
dafa: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
dafe: 96 95 lsr r25
db00: 87 95 ror r24
db02: 96 95 lsr r25
db04: 87 95 ror r24
db06: 96 95 lsr r25
db08: 87 95 ror r24
db0a: 9c 01 movw r18, r24
db0c: 22 0f add r18, r18
db0e: 33 1f adc r19, r19
db10: 88 0f add r24, r24
db12: 99 1f adc r25, r25
db14: 88 0f add r24, r24
db16: 99 1f adc r25, r25
db18: 88 0f add r24, r24
db1a: 99 1f adc r25, r25
db1c: 82 0f add r24, r18
db1e: 93 1f adc r25, r19
db20: c8 1a sub r12, r24
db22: d9 0a sbc r13, r25
db24: df 92 push r13
db26: cf 92 push r12
db28: 94 01 movw r18, r8
db2a: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
db2e: 96 95 lsr r25
db30: 87 95 ror r24
db32: 96 95 lsr r25
db34: 87 95 ror r24
db36: 96 95 lsr r25
db38: 87 95 ror r24
db3a: 9f 93 push r25
db3c: 8f 93 push r24
db3e: 97 01 movw r18, r14
db40: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
db44: 96 95 lsr r25
db46: 87 95 ror r24
db48: 96 95 lsr r25
db4a: 87 95 ror r24
db4c: 96 95 lsr r25
db4e: 87 95 ror r24
db50: 9c 01 movw r18, r24
db52: 22 0f add r18, r18
db54: 33 1f adc r19, r19
db56: 88 0f add r24, r24
db58: 99 1f adc r25, r25
db5a: 88 0f add r24, r24
db5c: 99 1f adc r25, r25
db5e: 88 0f add r24, r24
db60: 99 1f adc r25, r25
db62: 82 0f add r24, r18
db64: 93 1f adc r25, r19
db66: e8 1a sub r14, r24
db68: f9 0a sbc r15, r25
db6a: ff 92 push r15
db6c: ef 92 push r14
db6e: 95 01 movw r18, r10
db70: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
db74: 96 95 lsr r25
db76: 87 95 ror r24
db78: 96 95 lsr r25
db7a: 87 95 ror r24
db7c: 96 95 lsr r25
db7e: 87 95 ror r24
db80: 9f 93 push r25
db82: 8f 93 push r24
db84: 98 01 movw r18, r16
db86: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
db8a: 96 95 lsr r25
db8c: 87 95 ror r24
db8e: 96 95 lsr r25
db90: 87 95 ror r24
db92: 96 95 lsr r25
db94: 87 95 ror r24
db96: 9c 01 movw r18, r24
db98: 22 0f add r18, r18
db9a: 33 1f adc r19, r19
db9c: 88 0f add r24, r24
db9e: 99 1f adc r25, r25
dba0: 88 0f add r24, r24
dba2: 99 1f adc r25, r25
dba4: 88 0f add r24, r24
dba6: 99 1f adc r25, r25
dba8: 82 0f add r24, r18
dbaa: 93 1f adc r25, r19
dbac: 08 1b sub r16, r24
dbae: 19 0b sbc r17, r25
dbb0: 1f 93 push r17
dbb2: 0f 93 push r16
dbb4: 93 01 movw r18, r6
dbb6: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
dbba: 96 95 lsr r25
dbbc: 87 95 ror r24
dbbe: 96 95 lsr r25
dbc0: 87 95 ror r24
dbc2: 96 95 lsr r25
dbc4: 87 95 ror r24
dbc6: 9f 93 push r25
dbc8: 8f 93 push r24
dbca: 91 01 movw r18, r2
dbcc: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
dbd0: 96 95 lsr r25
dbd2: 87 95 ror r24
dbd4: 96 95 lsr r25
dbd6: 87 95 ror r24
dbd8: 96 95 lsr r25
dbda: 87 95 ror r24
dbdc: 9c 01 movw r18, r24
dbde: 22 0f add r18, r18
dbe0: 33 1f adc r19, r19
dbe2: 88 0f add r24, r24
dbe4: 99 1f adc r25, r25
dbe6: 88 0f add r24, r24
dbe8: 99 1f adc r25, r25
dbea: 88 0f add r24, r24
dbec: 99 1f adc r25, r25
dbee: 82 0f add r24, r18
dbf0: 93 1f adc r25, r19
dbf2: 28 1a sub r2, r24
dbf4: 39 0a sbc r3, r25
dbf6: 3f 92 push r3
dbf8: 2f 92 push r2
dbfa: 9a 01 movw r18, r20
dbfc: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
dc00: 96 95 lsr r25
dc02: 87 95 ror r24
dc04: 96 95 lsr r25
dc06: 87 95 ror r24
dc08: 96 95 lsr r25
dc0a: 87 95 ror r24
dc0c: 9f 93 push r25
dc0e: 8f 93 push r24
dc10: 8e ed ldi r24, 0xDE ; 222
dc12: 98 e0 ldi r25, 0x08 ; 8
dc14: 9f 93 push r25
dc16: 8f 93 push r24
dc18: 8b e0 ldi r24, 0x0B ; 11
dc1a: 95 e1 ldi r25, 0x15 ; 21
dc1c: 9f 93 push r25
dc1e: 8f 93 push r24
dc20: f2 01 movw r30, r4
dc22: 09 95 icall
dc24: 0f b6 in r0, 0x3f ; 63
dc26: f8 94 cli
dc28: de bf out 0x3e, r29 ; 62
dc2a: 0f be out 0x3f, r0 ; 63
dc2c: cd bf out 0x3d, r28 ; 61
dc2e: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
else
{
HoTT_printfxy(0,5,"%3i %3i %3i %3i%cC", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature,HoTT_GRAD);
dc32: 89 e6 ldi r24, 0x69 ; 105
dc34: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
dc38: 1f 92 push r1
dc3a: 80 e6 ldi r24, 0x60 ; 96
dc3c: 8f 93 push r24
dc3e: 80 91 cb 09 lds r24, 0x09CB
dc42: 1f 92 push r1
dc44: 8f 93 push r24
dc46: 80 91 bc 09 lds r24, 0x09BC
dc4a: 1f 92 push r1
dc4c: 8f 93 push r24
dc4e: 80 91 ad 09 lds r24, 0x09AD
dc52: 1f 92 push r1
dc54: 8f 93 push r24
dc56: 80 91 9e 09 lds r24, 0x099E
dc5a: 1f 92 push r1
dc5c: 8f 93 push r24
dc5e: 8b ec ldi r24, 0xCB ; 203
dc60: 98 e0 ldi r25, 0x08 ; 8
dc62: 9f 93 push r25
dc64: 8f 93 push r24
dc66: 8b e0 ldi r24, 0x0B ; 11
dc68: 95 e1 ldi r25, 0x15 ; 21
dc6a: 9f 93 push r25
dc6c: 8f 93 push r24
dc6e: e0 91 78 06 lds r30, 0x0678
dc72: f0 91 79 06 lds r31, 0x0679
dc76: 09 95 icall
dc78: 0f b6 in r0, 0x3f ; 63
dc7a: f8 94 cli
dc7c: de bf out 0x3e, r29 ; 62
dc7e: 0f be out 0x3f, r0 ; 63
dc80: cd bf out 0x3d, r28 ; 61
dc82: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 6:
if(show_current)
dc86: 80 91 73 04 lds r24, 0x0473
dc8a: 88 23 and r24, r24
dc8c: 09 f4 brne .+2 ; 0xdc90 <HoTT_Menu+0x1052>
dc8e: 4a c1 rjmp .+660 ; 0xdf24 <HoTT_Menu+0x12e6>
{
if(RequiredMotors == 4) Hott_ClearLine(6);
dc90: 80 91 3d 05 lds r24, 0x053D
dc94: 84 30 cpi r24, 0x04 ; 4
dc96: 29 f4 brne .+10 ; 0xdca2 <HoTT_Menu+0x1064>
dc98: 86 e0 ldi r24, 0x06 ; 6
dc9a: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
dc9e: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else
// if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10)
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", BL3_Current(4)/10,BL3_Current(4)%10, BL3_Current(5)/10,BL3_Current(5)%10)
dca2: 86 30 cpi r24, 0x06 ; 6
dca4: 09 f0 breq .+2 ; 0xdca8 <HoTT_Menu+0x106a>
dca6: 42 c0 rjmp .+132 ; 0xdd2c <HoTT_Menu+0x10ee>
dca8: 8e e7 ldi r24, 0x7E ; 126
dcaa: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
dcae: a0 90 78 06 lds r10, 0x0678
dcb2: b0 90 79 06 lds r11, 0x0679
dcb6: 85 e0 ldi r24, 0x05 ; 5
dcb8: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dcbc: 6c 01 movw r12, r24
dcbe: 85 e0 ldi r24, 0x05 ; 5
dcc0: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dcc4: 7c 01 movw r14, r24
dcc6: 84 e0 ldi r24, 0x04 ; 4
dcc8: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dccc: 8c 01 movw r16, r24
dcce: 84 e0 ldi r24, 0x04 ; 4
dcd0: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dcd4: fc 01 movw r30, r24
dcd6: 2a e0 ldi r18, 0x0A ; 10
dcd8: 30 e0 ldi r19, 0x00 ; 0
dcda: c6 01 movw r24, r12
dcdc: b9 01 movw r22, r18
dcde: 0e 94 42 b1 call 0x16284 ; 0x16284 <__udivmodhi4>
dce2: 9f 93 push r25
dce4: 8f 93 push r24
dce6: c7 01 movw r24, r14
dce8: b9 01 movw r22, r18
dcea: 0e 94 42 b1 call 0x16284 ; 0x16284 <__udivmodhi4>
dcee: 7f 93 push r23
dcf0: 6f 93 push r22
dcf2: c8 01 movw r24, r16
dcf4: b9 01 movw r22, r18
dcf6: 0e 94 42 b1 call 0x16284 ; 0x16284 <__udivmodhi4>
dcfa: 9f 93 push r25
dcfc: 8f 93 push r24
dcfe: cf 01 movw r24, r30
dd00: b9 01 movw r22, r18
dd02: 0e 94 42 b1 call 0x16284 ; 0x16284 <__udivmodhi4>
dd06: 7f 93 push r23
dd08: 6f 93 push r22
dd0a: 8c eb ldi r24, 0xBC ; 188
dd0c: 98 e0 ldi r25, 0x08 ; 8
dd0e: 9f 93 push r25
dd10: 8f 93 push r24
dd12: 8b e0 ldi r24, 0x0B ; 11
dd14: 95 e1 ldi r25, 0x15 ; 21
dd16: 9f 93 push r25
dd18: 8f 93 push r24
dd1a: f5 01 movw r30, r10
dd1c: 09 95 icall
dd1e: 0f b6 in r0, 0x3f ; 63
dd20: f8 94 cli
dd22: de bf out 0x3e, r29 ; 62
dd24: 0f be out 0x3f, r0 ; 63
dd26: cd bf out 0x3d, r28 ; 61
dd28: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else
// if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10,Motor[6].Current/10,Motor[6].Current%10,Motor[7].Current/10,Motor[7].Current%10);
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", BL3_Current(4)/10,BL3_Current(4)%10,BL3_Current(5)/10,BL3_Current(5)%10,BL3_Current(6)/10,BL3_Current(6)%10,BL3_Current(7)/10,BL3_Current(7)%10,BL3_Current(8)/10,BL3_Current(8)%10);
dd2c: 87 30 cpi r24, 0x07 ; 7
dd2e: 10 f4 brcc .+4 ; 0xdd34 <HoTT_Menu+0x10f6>
dd30: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
dd34: 8e e7 ldi r24, 0x7E ; 126
dd36: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
dd3a: 80 91 78 06 lds r24, 0x0678
dd3e: 90 91 79 06 lds r25, 0x0679
dd42: 9a 83 std Y+2, r25 ; 0x02
dd44: 89 83 std Y+1, r24 ; 0x01
dd46: 88 e0 ldi r24, 0x08 ; 8
dd48: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dd4c: 5c 01 movw r10, r24
dd4e: 88 e0 ldi r24, 0x08 ; 8
dd50: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dd54: 4c 01 movw r8, r24
dd56: 87 e0 ldi r24, 0x07 ; 7
dd58: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dd5c: 6c 01 movw r12, r24
dd5e: 87 e0 ldi r24, 0x07 ; 7
dd60: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dd64: 3c 01 movw r6, r24
dd66: 86 e0 ldi r24, 0x06 ; 6
dd68: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dd6c: 7c 01 movw r14, r24
dd6e: 86 e0 ldi r24, 0x06 ; 6
dd70: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dd74: 2c 01 movw r4, r24
dd76: 85 e0 ldi r24, 0x05 ; 5
dd78: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dd7c: 8c 01 movw r16, r24
dd7e: 85 e0 ldi r24, 0x05 ; 5
dd80: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dd84: 1c 01 movw r2, r24
dd86: 84 e0 ldi r24, 0x04 ; 4
dd88: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dd8c: 9c 83 std Y+4, r25 ; 0x04
dd8e: 8b 83 std Y+3, r24 ; 0x03
dd90: 84 e0 ldi r24, 0x04 ; 4
dd92: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
dd96: ac 01 movw r20, r24
dd98: 95 01 movw r18, r10
dd9a: ad ec ldi r26, 0xCD ; 205
dd9c: bc ec ldi r27, 0xCC ; 204
dd9e: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
dda2: 96 95 lsr r25
dda4: 87 95 ror r24
dda6: 96 95 lsr r25
dda8: 87 95 ror r24
ddaa: 96 95 lsr r25
ddac: 87 95 ror r24
ddae: 9c 01 movw r18, r24
ddb0: 22 0f add r18, r18
ddb2: 33 1f adc r19, r19
ddb4: 88 0f add r24, r24
ddb6: 99 1f adc r25, r25
ddb8: 88 0f add r24, r24
ddba: 99 1f adc r25, r25
ddbc: 88 0f add r24, r24
ddbe: 99 1f adc r25, r25
ddc0: 82 0f add r24, r18
ddc2: 93 1f adc r25, r19
ddc4: a8 1a sub r10, r24
ddc6: b9 0a sbc r11, r25
ddc8: bf 92 push r11
ddca: af 92 push r10
ddcc: 94 01 movw r18, r8
ddce: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
ddd2: 96 95 lsr r25
ddd4: 87 95 ror r24
ddd6: 96 95 lsr r25
ddd8: 87 95 ror r24
ddda: 96 95 lsr r25
dddc: 87 95 ror r24
ddde: 9f 93 push r25
dde0: 8f 93 push r24
dde2: 96 01 movw r18, r12
dde4: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
dde8: 96 95 lsr r25
ddea: 87 95 ror r24
ddec: 96 95 lsr r25
ddee: 87 95 ror r24
ddf0: 96 95 lsr r25
ddf2: 87 95 ror r24
ddf4: 9c 01 movw r18, r24
ddf6: 22 0f add r18, r18
ddf8: 33 1f adc r19, r19
ddfa: 88 0f add r24, r24
ddfc: 99 1f adc r25, r25
ddfe: 88 0f add r24, r24
de00: 99 1f adc r25, r25
de02: 88 0f add r24, r24
de04: 99 1f adc r25, r25
de06: 82 0f add r24, r18
de08: 93 1f adc r25, r19
de0a: c8 1a sub r12, r24
de0c: d9 0a sbc r13, r25
de0e: df 92 push r13
de10: cf 92 push r12
de12: 93 01 movw r18, r6
de14: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
de18: 96 95 lsr r25
de1a: 87 95 ror r24
de1c: 96 95 lsr r25
de1e: 87 95 ror r24
de20: 96 95 lsr r25
de22: 87 95 ror r24
de24: 9f 93 push r25
de26: 8f 93 push r24
de28: 97 01 movw r18, r14
de2a: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
de2e: 96 95 lsr r25
de30: 87 95 ror r24
de32: 96 95 lsr r25
de34: 87 95 ror r24
de36: 96 95 lsr r25
de38: 87 95 ror r24
de3a: 9c 01 movw r18, r24
de3c: 22 0f add r18, r18
de3e: 33 1f adc r19, r19
de40: 88 0f add r24, r24
de42: 99 1f adc r25, r25
de44: 88 0f add r24, r24
de46: 99 1f adc r25, r25
de48: 88 0f add r24, r24
de4a: 99 1f adc r25, r25
de4c: 82 0f add r24, r18
de4e: 93 1f adc r25, r19
de50: e8 1a sub r14, r24
de52: f9 0a sbc r15, r25
de54: ff 92 push r15
de56: ef 92 push r14
de58: 92 01 movw r18, r4
de5a: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
de5e: 96 95 lsr r25
de60: 87 95 ror r24
de62: 96 95 lsr r25
de64: 87 95 ror r24
de66: 96 95 lsr r25
de68: 87 95 ror r24
de6a: 9f 93 push r25
de6c: 8f 93 push r24
de6e: 98 01 movw r18, r16
de70: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
de74: 96 95 lsr r25
de76: 87 95 ror r24
de78: 96 95 lsr r25
de7a: 87 95 ror r24
de7c: 96 95 lsr r25
de7e: 87 95 ror r24
de80: 9c 01 movw r18, r24
de82: 22 0f add r18, r18
de84: 33 1f adc r19, r19
de86: 88 0f add r24, r24
de88: 99 1f adc r25, r25
de8a: 88 0f add r24, r24
de8c: 99 1f adc r25, r25
de8e: 88 0f add r24, r24
de90: 99 1f adc r25, r25
de92: 82 0f add r24, r18
de94: 93 1f adc r25, r19
de96: 08 1b sub r16, r24
de98: 19 0b sbc r17, r25
de9a: 1f 93 push r17
de9c: 0f 93 push r16
de9e: 91 01 movw r18, r2
dea0: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
dea4: 96 95 lsr r25
dea6: 87 95 ror r24
dea8: 96 95 lsr r25
deaa: 87 95 ror r24
deac: 96 95 lsr r25
deae: 87 95 ror r24
deb0: 9f 93 push r25
deb2: 8f 93 push r24
deb4: 2b 81 ldd r18, Y+3 ; 0x03
deb6: 3c 81 ldd r19, Y+4 ; 0x04
deb8: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
debc: 96 95 lsr r25
debe: 87 95 ror r24
dec0: 96 95 lsr r25
dec2: 87 95 ror r24
dec4: 96 95 lsr r25
dec6: 87 95 ror r24
dec8: 9c 01 movw r18, r24
deca: 22 0f add r18, r18
decc: 33 1f adc r19, r19
dece: 88 0f add r24, r24
ded0: 99 1f adc r25, r25
ded2: 88 0f add r24, r24
ded4: 99 1f adc r25, r25
ded6: 88 0f add r24, r24
ded8: 99 1f adc r25, r25
deda: 82 0f add r24, r18
dedc: 93 1f adc r25, r19
dede: 2b 81 ldd r18, Y+3 ; 0x03
dee0: 3c 81 ldd r19, Y+4 ; 0x04
dee2: 28 1b sub r18, r24
dee4: 39 0b sbc r19, r25
dee6: 3f 93 push r19
dee8: 2f 93 push r18
deea: 9a 01 movw r18, r20
deec: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
def0: 96 95 lsr r25
def2: 87 95 ror r24
def4: 96 95 lsr r25
def6: 87 95 ror r24
def8: 96 95 lsr r25
defa: 87 95 ror r24
defc: 9f 93 push r25
defe: 8f 93 push r24
df00: 8f e9 ldi r24, 0x9F ; 159
df02: 98 e0 ldi r25, 0x08 ; 8
df04: 9f 93 push r25
df06: 8f 93 push r24
df08: 8b e0 ldi r24, 0x0B ; 11
df0a: 95 e1 ldi r25, 0x15 ; 21
df0c: 9f 93 push r25
df0e: 8f 93 push r24
df10: e9 81 ldd r30, Y+1 ; 0x01
df12: fa 81 ldd r31, Y+2 ; 0x02
df14: 09 95 icall
df16: 0f b6 in r0, 0x3f ; 63
df18: f8 94 cli
df1a: de bf out 0x3e, r29 ; 62
df1c: 0f be out 0x3f, r0 ; 63
df1e: cd bf out 0x3d, r28 ; 61
df20: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
else
{
if(RequiredMotors == 4) Hott_ClearLine(6);
df24: 80 91 3d 05 lds r24, 0x053D
df28: 84 30 cpi r24, 0x04 ; 4
df2a: 29 f4 brne .+10 ; 0xdf36 <HoTT_Menu+0x12f8>
df2c: 86 e0 ldi r24, 0x06 ; 6
df2e: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
df32: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%3i %3i%cC ", Motor[4].Temperature, Motor[5].Temperature,HoTT_GRAD)
df36: 86 30 cpi r24, 0x06 ; 6
df38: 11 f5 brne .+68 ; 0xdf7e <HoTT_Menu+0x1340>
df3a: 8e e7 ldi r24, 0x7E ; 126
df3c: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
df40: 1f 92 push r1
df42: 80 e6 ldi r24, 0x60 ; 96
df44: 8f 93 push r24
df46: 80 91 e9 09 lds r24, 0x09E9
df4a: 1f 92 push r1
df4c: 8f 93 push r24
df4e: 80 91 da 09 lds r24, 0x09DA
df52: 1f 92 push r1
df54: 8f 93 push r24
df56: 8c e8 ldi r24, 0x8C ; 140
df58: 98 e0 ldi r25, 0x08 ; 8
df5a: 9f 93 push r25
df5c: 8f 93 push r24
df5e: 8b e0 ldi r24, 0x0B ; 11
df60: 95 e1 ldi r25, 0x15 ; 21
df62: 9f 93 push r25
df64: 8f 93 push r24
df66: e0 91 78 06 lds r30, 0x0678
df6a: f0 91 79 06 lds r31, 0x0679
df6e: 09 95 icall
df70: 0f b6 in r0, 0x3f ; 63
df72: f8 94 cli
df74: de bf out 0x3e, r29 ; 62
df76: 0f be out 0x3f, r0 ; 63
df78: cd bf out 0x3d, r28 ; 61
df7a: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%3i %3i %3i %3i%cC", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature,HoTT_GRAD);
df7e: 87 30 cpi r24, 0x07 ; 7
df80: 10 f4 brcc .+4 ; 0xdf86 <HoTT_Menu+0x1348>
df82: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
df86: 8e e7 ldi r24, 0x7E ; 126
df88: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
df8c: 1f 92 push r1
df8e: 80 e6 ldi r24, 0x60 ; 96
df90: 8f 93 push r24
df92: 80 91 07 0a lds r24, 0x0A07
df96: 1f 92 push r1
df98: 8f 93 push r24
df9a: 80 91 f8 09 lds r24, 0x09F8
df9e: 1f 92 push r1
dfa0: 8f 93 push r24
dfa2: 80 91 e9 09 lds r24, 0x09E9
dfa6: 1f 92 push r1
dfa8: 8f 93 push r24
dfaa: 80 91 da 09 lds r24, 0x09DA
dfae: 1f 92 push r1
dfb0: 8f 93 push r24
dfb2: 89 e7 ldi r24, 0x79 ; 121
dfb4: 98 e0 ldi r25, 0x08 ; 8
dfb6: 9f 93 push r25
dfb8: 8f 93 push r24
dfba: 8b e0 ldi r24, 0x0B ; 11
dfbc: 95 e1 ldi r25, 0x15 ; 21
dfbe: 9f 93 push r25
dfc0: 8f 93 push r24
dfc2: e0 91 78 06 lds r30, 0x0678
dfc6: f0 91 79 06 lds r31, 0x0679
dfca: 09 95 icall
dfcc: 0f b6 in r0, 0x3f ; 63
dfce: f8 94 cli
dfd0: de bf out 0x3e, r29 ; 62
dfd2: 0f be out 0x3f, r0 ; 63
dfd4: cd bf out 0x3d, r28 ; 61
dfd6: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 7: if(NC_ErrorCode)
dfda: 80 91 bb 04 lds r24, 0x04BB
dfde: 88 23 and r24, r24
dfe0: 09 f4 brne .+2 ; 0xdfe4 <HoTT_Menu+0x13a6>
dfe2: 4f c0 rjmp .+158 ; 0xe082 <HoTT_Menu+0x1444>
{
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER)
dfe4: 90 91 ed 02 lds r25, 0x02ED
dfe8: 99 23 and r25, r25
dfea: 09 f1 breq .+66 ; 0xe02e <HoTT_Menu+0x13f0>
dfec: 83 32 cpi r24, 0x23 ; 35
dfee: f8 f4 brcc .+62 ; 0xe02e <HoTT_Menu+0x13f0>
{
Hott_ClearLine(7);
dff0: 87 e0 ldi r24, 0x07 ; 7
dff2: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode);
dff6: 83 e9 ldi r24, 0x93 ; 147
dff8: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
dffc: 80 91 bb 04 lds r24, 0x04BB
e000: 1f 92 push r1
e002: 8f 93 push r24
e004: 8e e6 ldi r24, 0x6E ; 110
e006: 98 e0 ldi r25, 0x08 ; 8
e008: 9f 93 push r25
e00a: 8f 93 push r24
e00c: 8b e1 ldi r24, 0x1B ; 27
e00e: 95 e1 ldi r25, 0x15 ; 21
e010: 9f 93 push r25
e012: 8f 93 push r24
e014: e0 91 78 06 lds r30, 0x0678
e018: f0 91 79 06 lds r31, 0x0679
e01c: 09 95 icall
e01e: 0f 90 pop r0
e020: 0f 90 pop r0
e022: 0f 90 pop r0
e024: 0f 90 pop r0
e026: 0f 90 pop r0
e028: 0f 90 pop r0
e02a: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
else
{
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);};
e02e: 83 e9 ldi r24, 0x93 ; 147
e030: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e034: 88 e6 ldi r24, 0x68 ; 104
e036: 98 e0 ldi r25, 0x08 ; 8
e038: 9f 93 push r25
e03a: 8f 93 push r24
e03c: 0b e0 ldi r16, 0x0B ; 11
e03e: 15 e1 ldi r17, 0x15 ; 21
e040: 1f 93 push r17
e042: 0f 93 push r16
e044: e0 91 78 06 lds r30, 0x0678
e048: f0 91 79 06 lds r31, 0x0679
e04c: 09 95 icall
e04e: 1f 92 push r1
e050: 1f 92 push r1
e052: 80 91 bb 04 lds r24, 0x04BB
e056: f1 e1 ldi r31, 0x11 ; 17
e058: 8f 9f mul r24, r31
e05a: c0 01 movw r24, r0
e05c: 11 24 eor r1, r1
e05e: 84 59 subi r24, 0x94 ; 148
e060: 94 4f sbci r25, 0xF4 ; 244
e062: 9f 93 push r25
e064: 8f 93 push r24
e066: 1f 93 push r17
e068: 0f 93 push r16
e06a: e0 91 78 06 lds r30, 0x0678
e06e: f0 91 79 06 lds r31, 0x0679
e072: 09 95 icall
e074: 0f b6 in r0, 0x3f ; 63
e076: f8 94 cli
e078: de bf out 0x3e, r29 ; 62
e07a: 0f be out 0x3f, r0 ; 63
e07c: cd bf out 0x3d, r28 ; 61
e07e: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
else
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!")
e082: 80 91 cb 03 lds r24, 0x03CB
e086: 85 ff sbrs r24, 5
e088: 16 c0 rjmp .+44 ; 0xe0b6 <HoTT_Menu+0x1478>
e08a: 84 e9 ldi r24, 0x94 ; 148
e08c: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e090: 85 e5 ldi r24, 0x55 ; 85
e092: 98 e0 ldi r25, 0x08 ; 8
e094: 9f 93 push r25
e096: 8f 93 push r24
e098: 8b e0 ldi r24, 0x0B ; 11
e09a: 95 e1 ldi r25, 0x15 ; 21
e09c: 9f 93 push r25
e09e: 8f 93 push r24
e0a0: e0 91 78 06 lds r30, 0x0678
e0a4: f0 91 79 06 lds r31, 0x0679
e0a8: 09 95 icall
e0aa: 0f 90 pop r0
e0ac: 0f 90 pop r0
e0ae: 0f 90 pop r0
e0b0: 0f 90 pop r0
e0b2: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else HoTT_printfxy(0,7," www.MikroKopter.de ");
e0b6: 83 e9 ldi r24, 0x93 ; 147
e0b8: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e0bc: 8f e3 ldi r24, 0x3F ; 63
e0be: 98 e0 ldi r25, 0x08 ; 8
e0c0: 9f 93 push r25
e0c2: 8f 93 push r24
e0c4: 8b e0 ldi r24, 0x0B ; 11
e0c6: 95 e1 ldi r25, 0x15 ; 21
e0c8: 9f 93 push r25
e0ca: 8f 93 push r24
e0cc: e0 91 78 06 lds r30, 0x0678
e0d0: f0 91 79 06 lds r31, 0x0679
e0d4: 09 95 icall
e0d6: 0f 90 pop r0
e0d8: 0f 90 pop r0
e0da: 0f 90 pop r0
e0dc: 0f 90 pop r0
e0de: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
case 12:
case 13:
case 14:
case 15:
case 16:
if(HottKeyboard == HOTT_KEY_SET) { if(show_current) show_current = 0; else show_current = 1; Hott_ClearLine(5); Hott_ClearLine(6);}
e0e2: 80 91 a9 0c lds r24, 0x0CA9
e0e6: 86 30 cpi r24, 0x06 ; 6
e0e8: 89 f4 brne .+34 ; 0xe10c <HoTT_Menu+0x14ce>
e0ea: 80 91 73 04 lds r24, 0x0473
e0ee: 88 23 and r24, r24
e0f0: 19 f0 breq .+6 ; 0xe0f8 <HoTT_Menu+0x14ba>
e0f2: 10 92 73 04 sts 0x0473, r1
e0f6: 03 c0 rjmp .+6 ; 0xe0fe <HoTT_Menu+0x14c0>
e0f8: 81 e0 ldi r24, 0x01 ; 1
e0fa: 80 93 73 04 sts 0x0473, r24
e0fe: 85 e0 ldi r24, 0x05 ; 5
e100: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
e104: 86 e0 ldi r24, 0x06 ; 6
e106: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
e10a: 12 c0 rjmp .+36 ; 0xe130 <HoTT_Menu+0x14f2>
else
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 2; line = 0;}
e10c: 88 30 cpi r24, 0x08 ; 8
e10e: 41 f4 brne .+16 ; 0xe120 <HoTT_Menu+0x14e2>
e110: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
e114: 82 e0 ldi r24, 0x02 ; 2
e116: 80 93 76 04 sts 0x0476, r24
e11a: 10 92 75 04 sts 0x0475, r1
e11e: 08 c0 rjmp .+16 ; 0xe130 <HoTT_Menu+0x14f2>
else
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 0; line = 0;}
e120: 81 30 cpi r24, 0x01 ; 1
e122: 31 f4 brne .+12 ; 0xe130 <HoTT_Menu+0x14f2>
e124: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
e128: 10 92 76 04 sts 0x0476, r1
e12c: 10 92 75 04 sts 0x0475, r1
//if(HottKeyboard) HoTT_printfxy(15,6,"%KEY:%02x ",HottKeyboard);
HottKeyboard = 0;
e130: 10 92 a9 0c sts 0x0CA9, r1
break;
e134: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
default: line = 0;
e138: 10 92 75 04 sts 0x0475, r1
break;
e13c: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 2:
switch(line++)
e140: 80 91 75 04 lds r24, 0x0475
e144: 91 e0 ldi r25, 0x01 ; 1
e146: 98 0f add r25, r24
e148: 90 93 75 04 sts 0x0475, r25
e14c: 90 e0 ldi r25, 0x00 ; 0
e14e: 81 31 cpi r24, 0x11 ; 17
e150: 91 05 cpc r25, r1
e152: 08 f0 brcs .+2 ; 0xe156 <HoTT_Menu+0x1518>
e154: 65 c3 rjmp .+1738 ; 0xe820 <HoTT_Menu+0x1be2>
e156: fc 01 movw r30, r24
e158: ef 57 subi r30, 0x7F ; 127
e15a: ff 4f sbci r31, 0xFF ; 255
e15c: 0c 94 a7 b1 jmp 0x1634e ; 0x1634e <__tablejump2__>
{
case 0:
HoTT_printfxy_INV(0,0,"Setting:%u %s ",ActiveParamSet,EE_Parameter.Name);
e160: 80 e0 ldi r24, 0x00 ; 0
e162: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e166: 8a eb ldi r24, 0xBA ; 186
e168: 95 e0 ldi r25, 0x05 ; 5
e16a: 9f 93 push r25
e16c: 8f 93 push r24
e16e: 80 91 52 01 lds r24, 0x0152
e172: 1f 92 push r1
e174: 8f 93 push r24
e176: 80 e3 ldi r24, 0x30 ; 48
e178: 98 e0 ldi r25, 0x08 ; 8
e17a: 9f 93 push r25
e17c: 8f 93 push r24
e17e: 8b e1 ldi r24, 0x1B ; 27
e180: 95 e1 ldi r25, 0x15 ; 21
e182: 9f 93 push r25
e184: 8f 93 push r24
e186: e0 91 78 06 lds r30, 0x0678
e18a: f0 91 79 06 lds r31, 0x0679
e18e: 09 95 icall
break;
e190: 0f b6 in r0, 0x3f ; 63
e192: f8 94 cli
e194: de bf out 0x3e, r29 ; 62
e196: 0f be out 0x3f, r0 ; 63
e198: cd bf out 0x3d, r28 ; 61
e19a: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
case 1: HoTT_printfxy(0,1,"Min:%2i.%1iV %s ",BattLowVoltageWarning/10, BattLowVoltageWarning%10, Mixer.Name);
e19e: 85 e1 ldi r24, 0x15 ; 21
e1a0: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e1a4: 20 91 53 01 lds r18, 0x0153
e1a8: 88 ec ldi r24, 0xC8 ; 200
e1aa: 95 e0 ldi r25, 0x05 ; 5
e1ac: 9f 93 push r25
e1ae: 8f 93 push r24
e1b0: 8d ec ldi r24, 0xCD ; 205
e1b2: 28 9f mul r18, r24
e1b4: 81 2d mov r24, r1
e1b6: 11 24 eor r1, r1
e1b8: 86 95 lsr r24
e1ba: 86 95 lsr r24
e1bc: 86 95 lsr r24
e1be: 98 2f mov r25, r24
e1c0: 99 0f add r25, r25
e1c2: 39 2f mov r19, r25
e1c4: 33 0f add r19, r19
e1c6: 33 0f add r19, r19
e1c8: 93 0f add r25, r19
e1ca: 29 1b sub r18, r25
e1cc: 1f 92 push r1
e1ce: 2f 93 push r18
e1d0: 1f 92 push r1
e1d2: 8f 93 push r24
e1d4: 8f e1 ldi r24, 0x1F ; 31
e1d6: 98 e0 ldi r25, 0x08 ; 8
e1d8: 9f 93 push r25
e1da: 8f 93 push r24
e1dc: 8b e0 ldi r24, 0x0B ; 11
e1de: 95 e1 ldi r25, 0x15 ; 21
e1e0: 9f 93 push r25
e1e2: 8f 93 push r24
e1e4: e0 91 78 06 lds r30, 0x0678
e1e8: f0 91 79 06 lds r31, 0x0679
e1ec: 09 95 icall
break;
e1ee: 0f b6 in r0, 0x3f ; 63
e1f0: f8 94 cli
e1f2: de bf out 0x3e, r29 ; 62
e1f4: 0f be out 0x3f, r0 ; 63
e1f6: cd bf out 0x3d, r28 ; 61
e1f8: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
case 2: HoTT_printfxy(0,2,"ALT:");
e1fc: 8a e2 ldi r24, 0x2A ; 42
e1fe: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e202: 8a e1 ldi r24, 0x1A ; 26
e204: 98 e0 ldi r25, 0x08 ; 8
e206: 9f 93 push r25
e208: 8f 93 push r24
e20a: 8b e0 ldi r24, 0x0B ; 11
e20c: 95 e1 ldi r25, 0x15 ; 21
e20e: 9f 93 push r25
e210: 8f 93 push r24
e212: e0 91 78 06 lds r30, 0x0678
e216: f0 91 79 06 lds r31, 0x0679
e21a: 09 95 icall
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
e21c: 80 91 5c 06 lds r24, 0x065C
e220: 0f 90 pop r0
e222: 0f 90 pop r0
e224: 0f 90 pop r0
e226: 0f 90 pop r0
e228: 80 ff sbrs r24, 0
e22a: 7a c0 rjmp .+244 ; 0xe320 <HoTT_Menu+0x16e2>
{
if(!(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER)) HoTT_printf("POTI:%3u ", Parameter_HoehenSchalter)
e22c: 80 91 4b 05 lds r24, 0x054B
e230: 81 fd sbrc r24, 1
e232: 19 c0 rjmp .+50 ; 0xe266 <HoTT_Menu+0x1628>
e234: 80 91 e1 03 lds r24, 0x03E1
e238: 1f 92 push r1
e23a: 8f 93 push r24
e23c: 80 e1 ldi r24, 0x10 ; 16
e23e: 98 e0 ldi r25, 0x08 ; 8
e240: 9f 93 push r25
e242: 8f 93 push r24
e244: 8b e0 ldi r24, 0x0B ; 11
e246: 95 e1 ldi r25, 0x15 ; 21
e248: 9f 93 push r25
e24a: 8f 93 push r24
e24c: e0 91 78 06 lds r30, 0x0678
e250: f0 91 79 06 lds r31, 0x0679
e254: 09 95 icall
e256: 0f 90 pop r0
e258: 0f 90 pop r0
e25a: 0f 90 pop r0
e25c: 0f 90 pop r0
e25e: 0f 90 pop r0
e260: 0f 90 pop r0
e262: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else
{
if(Parameter_HoehenSchalter > 50) HoTT_printf("(ON) ") else HoTT_printf("(OFF) ");
e266: 80 91 e1 03 lds r24, 0x03E1
e26a: 83 33 cpi r24, 0x33 ; 51
e26c: 90 f0 brcs .+36 ; 0xe292 <HoTT_Menu+0x1654>
e26e: 89 e0 ldi r24, 0x09 ; 9
e270: 98 e0 ldi r25, 0x08 ; 8
e272: 9f 93 push r25
e274: 8f 93 push r24
e276: 8b e0 ldi r24, 0x0B ; 11
e278: 95 e1 ldi r25, 0x15 ; 21
e27a: 9f 93 push r25
e27c: 8f 93 push r24
e27e: e0 91 78 06 lds r30, 0x0678
e282: f0 91 79 06 lds r31, 0x0679
e286: 09 95 icall
e288: 0f 90 pop r0
e28a: 0f 90 pop r0
e28c: 0f 90 pop r0
e28e: 0f 90 pop r0
e290: 11 c0 rjmp .+34 ; 0xe2b4 <HoTT_Menu+0x1676>
e292: 82 e0 ldi r24, 0x02 ; 2
e294: 98 e0 ldi r25, 0x08 ; 8
e296: 9f 93 push r25
e298: 8f 93 push r24
e29a: 8b e0 ldi r24, 0x0B ; 11
e29c: 95 e1 ldi r25, 0x15 ; 21
e29e: 9f 93 push r25
e2a0: 8f 93 push r24
e2a2: e0 91 78 06 lds r30, 0x0678
e2a6: f0 91 79 06 lds r31, 0x0679
e2aa: 09 95 icall
e2ac: 0f 90 pop r0
e2ae: 0f 90 pop r0
e2b0: 0f 90 pop r0
e2b2: 0f 90 pop r0
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) HoTT_printf("LIMIT", Parameter_HoehenSchalter)
e2b4: 80 91 40 06 lds r24, 0x0640
e2b8: 80 ff sbrs r24, 0
e2ba: 19 c0 rjmp .+50 ; 0xe2ee <HoTT_Menu+0x16b0>
e2bc: 80 91 e1 03 lds r24, 0x03E1
e2c0: 1f 92 push r1
e2c2: 8f 93 push r24
e2c4: 8c ef ldi r24, 0xFC ; 252
e2c6: 97 e0 ldi r25, 0x07 ; 7
e2c8: 9f 93 push r25
e2ca: 8f 93 push r24
e2cc: 8b e0 ldi r24, 0x0B ; 11
e2ce: 95 e1 ldi r25, 0x15 ; 21
e2d0: 9f 93 push r25
e2d2: 8f 93 push r24
e2d4: e0 91 78 06 lds r30, 0x0678
e2d8: f0 91 79 06 lds r31, 0x0679
e2dc: 09 95 icall
e2de: 0f 90 pop r0
e2e0: 0f 90 pop r0
e2e2: 0f 90 pop r0
e2e4: 0f 90 pop r0
e2e6: 0f 90 pop r0
e2e8: 0f 90 pop r0
e2ea: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else HoTT_printf("VARIO", Parameter_HoehenSchalter);
e2ee: 80 91 e1 03 lds r24, 0x03E1
e2f2: 1f 92 push r1
e2f4: 8f 93 push r24
e2f6: 86 ef ldi r24, 0xF6 ; 246
e2f8: 97 e0 ldi r25, 0x07 ; 7
e2fa: 9f 93 push r25
e2fc: 8f 93 push r24
e2fe: 8b e0 ldi r24, 0x0B ; 11
e300: 95 e1 ldi r25, 0x15 ; 21
e302: 9f 93 push r25
e304: 8f 93 push r24
e306: e0 91 78 06 lds r30, 0x0678
e30a: f0 91 79 06 lds r31, 0x0679
e30e: 09 95 icall
e310: 0f 90 pop r0
e312: 0f 90 pop r0
e314: 0f 90 pop r0
e316: 0f 90 pop r0
e318: 0f 90 pop r0
e31a: 0f 90 pop r0
e31c: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
}
else
HoTT_printf("DISABLED");
e320: 8d ee ldi r24, 0xED ; 237
e322: 97 e0 ldi r25, 0x07 ; 7
e324: 9f 93 push r25
e326: 8f 93 push r24
e328: 8b e0 ldi r24, 0x0B ; 11
e32a: 95 e1 ldi r25, 0x15 ; 21
e32c: 9f 93 push r25
e32e: 8f 93 push r24
e330: e0 91 78 06 lds r30, 0x0678
e334: f0 91 79 06 lds r31, 0x0679
e338: 09 95 icall
e33a: 0f 90 pop r0
e33c: 0f 90 pop r0
e33e: 0f 90 pop r0
e340: 0f 90 pop r0
e342: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 3: HoTT_printfxy(0,3,"CF:");
e346: 8f e3 ldi r24, 0x3F ; 63
e348: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e34c: 89 ee ldi r24, 0xE9 ; 233
e34e: 97 e0 ldi r25, 0x07 ; 7
e350: 9f 93 push r25
e352: 8f 93 push r24
e354: 8b e0 ldi r24, 0x0B ; 11
e356: 95 e1 ldi r25, 0x15 ; 21
e358: 9f 93 push r25
e35a: 8f 93 push r24
e35c: e0 91 78 06 lds r30, 0x0678
e360: f0 91 79 06 lds r31, 0x0679
e364: 09 95 icall
if(!EE_Parameter.CareFreeChannel) HoTT_printf("DISABLED")
e366: 0f 90 pop r0
e368: 0f 90 pop r0
e36a: 0f 90 pop r0
e36c: 0f 90 pop r0
e36e: 80 91 a2 05 lds r24, 0x05A2
e372: 81 11 cpse r24, r1
e374: 13 c0 rjmp .+38 ; 0xe39c <HoTT_Menu+0x175e>
e376: 80 ee ldi r24, 0xE0 ; 224
e378: 97 e0 ldi r25, 0x07 ; 7
e37a: 9f 93 push r25
e37c: 8f 93 push r24
e37e: 8b e0 ldi r24, 0x0B ; 11
e380: 95 e1 ldi r25, 0x15 ; 21
e382: 9f 93 push r25
e384: 8f 93 push r24
e386: e0 91 78 06 lds r30, 0x0678
e38a: f0 91 79 06 lds r31, 0x0679
e38e: 09 95 icall
e390: 0f 90 pop r0
e392: 0f 90 pop r0
e394: 0f 90 pop r0
e396: 0f 90 pop r0
e398: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
else
{
if(CareFree) HoTT_printf(" (ON) ") else HoTT_printf(" (OFF)");
e39c: 80 91 d8 03 lds r24, 0x03D8
e3a0: 88 23 and r24, r24
e3a2: 91 f0 breq .+36 ; 0xe3c8 <HoTT_Menu+0x178a>
e3a4: 89 ed ldi r24, 0xD9 ; 217
e3a6: 97 e0 ldi r25, 0x07 ; 7
e3a8: 9f 93 push r25
e3aa: 8f 93 push r24
e3ac: 8b e0 ldi r24, 0x0B ; 11
e3ae: 95 e1 ldi r25, 0x15 ; 21
e3b0: 9f 93 push r25
e3b2: 8f 93 push r24
e3b4: e0 91 78 06 lds r30, 0x0678
e3b8: f0 91 79 06 lds r31, 0x0679
e3bc: 09 95 icall
e3be: 0f 90 pop r0
e3c0: 0f 90 pop r0
e3c2: 0f 90 pop r0
e3c4: 0f 90 pop r0
e3c6: 11 c0 rjmp .+34 ; 0xe3ea <HoTT_Menu+0x17ac>
e3c8: 82 ed ldi r24, 0xD2 ; 210
e3ca: 97 e0 ldi r25, 0x07 ; 7
e3cc: 9f 93 push r25
e3ce: 8f 93 push r24
e3d0: 8b e0 ldi r24, 0x0B ; 11
e3d2: 95 e1 ldi r25, 0x15 ; 21
e3d4: 9f 93 push r25
e3d6: 8f 93 push r24
e3d8: e0 91 78 06 lds r30, 0x0678
e3dc: f0 91 79 06 lds r31, 0x0679
e3e0: 09 95 icall
e3e2: 0f 90 pop r0
e3e4: 0f 90 pop r0
e3e6: 0f 90 pop r0
e3e8: 0f 90 pop r0
if(EE_Parameter.ExtraConfig & CFG_LEARNABLE_CAREFREE) HoTT_printf(" TEACH");
e3ea: 80 91 b8 05 lds r24, 0x05B8
e3ee: 86 fd sbrc r24, 6
e3f0: 02 c0 rjmp .+4 ; 0xe3f6 <HoTT_Menu+0x17b8>
e3f2: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
e3f6: 8b ec ldi r24, 0xCB ; 203
e3f8: 97 e0 ldi r25, 0x07 ; 7
e3fa: 9f 93 push r25
e3fc: 8f 93 push r24
e3fe: 8b e0 ldi r24, 0x0B ; 11
e400: 95 e1 ldi r25, 0x15 ; 21
e402: 9f 93 push r25
e404: 8f 93 push r24
e406: e0 91 78 06 lds r30, 0x0678
e40a: f0 91 79 06 lds r31, 0x0679
e40e: 09 95 icall
e410: 0f 90 pop r0
e412: 0f 90 pop r0
e414: 0f 90 pop r0
e416: 0f 90 pop r0
e418: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 4: HoTT_printfxy(0,4,"GPS:");
e41c: 84 e5 ldi r24, 0x54 ; 84
e41e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e422: 86 ec ldi r24, 0xC6 ; 198
e424: 97 e0 ldi r25, 0x07 ; 7
e426: 9f 93 push r25
e428: 8f 93 push r24
e42a: 8b e0 ldi r24, 0x0B ; 11
e42c: 95 e1 ldi r25, 0x15 ; 21
e42e: 9f 93 push r25
e430: 8f 93 push r24
e432: e0 91 78 06 lds r30, 0x0678
e436: f0 91 79 06 lds r31, 0x0679
e43a: 09 95 icall
if(!(Parameter_GlobalConfig & CFG_GPS_AKTIV)) HoTT_printf("DISABLED")
e43c: 80 91 5c 06 lds r24, 0x065C
e440: 0f 90 pop r0
e442: 0f 90 pop r0
e444: 0f 90 pop r0
e446: 0f 90 pop r0
e448: 85 fd sbrc r24, 5
e44a: 12 c0 rjmp .+36 ; 0xe470 <HoTT_Menu+0x1832>
e44c: 8d eb ldi r24, 0xBD ; 189
e44e: 97 e0 ldi r25, 0x07 ; 7
e450: 9f 93 push r25
e452: 8f 93 push r24
e454: 8b e0 ldi r24, 0x0B ; 11
e456: 95 e1 ldi r25, 0x15 ; 21
e458: 9f 93 push r25
e45a: 8f 93 push r24
e45c: e0 91 78 06 lds r30, 0x0678
e460: f0 91 79 06 lds r31, 0x0679
e464: 09 95 icall
e466: 0f 90 pop r0
e468: 0f 90 pop r0
e46a: 0f 90 pop r0
e46c: 0f 90 pop r0
e46e: 53 c0 rjmp .+166 ; 0xe516 <HoTT_Menu+0x18d8>
else
{
tmp = GetChannelValue(EE_Parameter.NaviGpsModeChannel);
e470: 80 91 8f 05 lds r24, 0x058F
e474: 0e 94 0e 34 call 0x681c ; 0x681c <GetChannelValue>
if(tmp < 50) HoTT_printf("(FREE)")
e478: 82 33 cpi r24, 0x32 ; 50
e47a: 90 f4 brcc .+36 ; 0xe4a0 <HoTT_Menu+0x1862>
e47c: 86 eb ldi r24, 0xB6 ; 182
e47e: 97 e0 ldi r25, 0x07 ; 7
e480: 9f 93 push r25
e482: 8f 93 push r24
e484: 8b e0 ldi r24, 0x0B ; 11
e486: 95 e1 ldi r25, 0x15 ; 21
e488: 9f 93 push r25
e48a: 8f 93 push r24
e48c: e0 91 78 06 lds r30, 0x0678
e490: f0 91 79 06 lds r31, 0x0679
e494: 09 95 icall
e496: 0f 90 pop r0
e498: 0f 90 pop r0
e49a: 0f 90 pop r0
e49c: 0f 90 pop r0
e49e: 3b c0 rjmp .+118 ; 0xe516 <HoTT_Menu+0x18d8>
else
if(tmp >= 180) HoTT_printf("(HOME)")
e4a0: 84 3b cpi r24, 0xB4 ; 180
e4a2: 90 f0 brcs .+36 ; 0xe4c8 <HoTT_Menu+0x188a>
e4a4: 8f ea ldi r24, 0xAF ; 175
e4a6: 97 e0 ldi r25, 0x07 ; 7
e4a8: 9f 93 push r25
e4aa: 8f 93 push r24
e4ac: 8b e0 ldi r24, 0x0B ; 11
e4ae: 95 e1 ldi r25, 0x15 ; 21
e4b0: 9f 93 push r25
e4b2: 8f 93 push r24
e4b4: e0 91 78 06 lds r30, 0x0678
e4b8: f0 91 79 06 lds r31, 0x0679
e4bc: 09 95 icall
e4be: 0f 90 pop r0
e4c0: 0f 90 pop r0
e4c2: 0f 90 pop r0
e4c4: 0f 90 pop r0
e4c6: 27 c0 rjmp .+78 ; 0xe516 <HoTT_Menu+0x18d8>
else
if(EE_Parameter.ExtraConfig & CFG_GPS_AID) HoTT_printf("(AID) ")
e4c8: 80 91 b8 05 lds r24, 0x05B8
e4cc: 85 ff sbrs r24, 5
e4ce: 12 c0 rjmp .+36 ; 0xe4f4 <HoTT_Menu+0x18b6>
e4d0: 88 ea ldi r24, 0xA8 ; 168
e4d2: 97 e0 ldi r25, 0x07 ; 7
e4d4: 9f 93 push r25
e4d6: 8f 93 push r24
e4d8: 8b e0 ldi r24, 0x0B ; 11
e4da: 95 e1 ldi r25, 0x15 ; 21
e4dc: 9f 93 push r25
e4de: 8f 93 push r24
e4e0: e0 91 78 06 lds r30, 0x0678
e4e4: f0 91 79 06 lds r31, 0x0679
e4e8: 09 95 icall
e4ea: 0f 90 pop r0
e4ec: 0f 90 pop r0
e4ee: 0f 90 pop r0
e4f0: 0f 90 pop r0
e4f2: 11 c0 rjmp .+34 ; 0xe516 <HoTT_Menu+0x18d8>
else HoTT_printf("(HOLD)")
e4f4: 81 ea ldi r24, 0xA1 ; 161
e4f6: 97 e0 ldi r25, 0x07 ; 7
e4f8: 9f 93 push r25
e4fa: 8f 93 push r24
e4fc: 8b e0 ldi r24, 0x0B ; 11
e4fe: 95 e1 ldi r25, 0x15 ; 21
e500: 9f 93 push r25
e502: 8f 93 push r24
e504: e0 91 78 06 lds r30, 0x0678
e508: f0 91 79 06 lds r31, 0x0679
e50c: 09 95 icall
e50e: 0f 90 pop r0
e510: 0f 90 pop r0
e512: 0f 90 pop r0
e514: 0f 90 pop r0
}
if(EE_Parameter.FailSafeTime) HoTT_printfxy(10,4," FS:%usek ",EE_Parameter.FailSafeTime)
e516: 80 91 a6 05 lds r24, 0x05A6
e51a: 88 23 and r24, r24
e51c: 11 f4 brne .+4 ; 0xe522 <HoTT_Menu+0x18e4>
e51e: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
e522: 8e e5 ldi r24, 0x5E ; 94
e524: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e528: 80 91 a6 05 lds r24, 0x05A6
e52c: 1f 92 push r1
e52e: 8f 93 push r24
e530: 86 e9 ldi r24, 0x96 ; 150
e532: 97 e0 ldi r25, 0x07 ; 7
e534: 9f 93 push r25
e536: 8f 93 push r24
e538: 8b e0 ldi r24, 0x0B ; 11
e53a: 95 e1 ldi r25, 0x15 ; 21
e53c: 9f 93 push r25
e53e: 8f 93 push r24
e540: e0 91 78 06 lds r30, 0x0678
e544: f0 91 79 06 lds r31, 0x0679
e548: 09 95 icall
e54a: 0f 90 pop r0
e54c: 0f 90 pop r0
e54e: 0f 90 pop r0
e550: 0f 90 pop r0
e552: 0f 90 pop r0
e554: 0f 90 pop r0
e556: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 5: HoTT_printfxy(0,5,"HOME ALT:");
e55a: 89 e6 ldi r24, 0x69 ; 105
e55c: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e560: 8c e8 ldi r24, 0x8C ; 140
e562: 97 e0 ldi r25, 0x07 ; 7
e564: 9f 93 push r25
e566: 8f 93 push r24
e568: 8b e0 ldi r24, 0x0B ; 11
e56a: 95 e1 ldi r25, 0x15 ; 21
e56c: 9f 93 push r25
e56e: 8f 93 push r24
e570: e0 91 78 06 lds r30, 0x0678
e574: f0 91 79 06 lds r31, 0x0679
e578: 09 95 icall
if(EE_Parameter.ComingHomeAltitude) HoTT_printf("%um",EE_Parameter.ComingHomeAltitude) else HoTT_printf("HOLD ");
e57a: 80 91 a5 05 lds r24, 0x05A5
e57e: 0f 90 pop r0
e580: 0f 90 pop r0
e582: 0f 90 pop r0
e584: 0f 90 pop r0
e586: 88 23 and r24, r24
e588: b9 f0 breq .+46 ; 0xe5b8 <HoTT_Menu+0x197a>
e58a: 1f 92 push r1
e58c: 8f 93 push r24
e58e: 88 e8 ldi r24, 0x88 ; 136
e590: 97 e0 ldi r25, 0x07 ; 7
e592: 9f 93 push r25
e594: 8f 93 push r24
e596: 8b e0 ldi r24, 0x0B ; 11
e598: 95 e1 ldi r25, 0x15 ; 21
e59a: 9f 93 push r25
e59c: 8f 93 push r24
e59e: e0 91 78 06 lds r30, 0x0678
e5a2: f0 91 79 06 lds r31, 0x0679
e5a6: 09 95 icall
e5a8: 0f 90 pop r0
e5aa: 0f 90 pop r0
e5ac: 0f 90 pop r0
e5ae: 0f 90 pop r0
e5b0: 0f 90 pop r0
e5b2: 0f 90 pop r0
e5b4: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
e5b8: 82 e8 ldi r24, 0x82 ; 130
e5ba: 97 e0 ldi r25, 0x07 ; 7
e5bc: 9f 93 push r25
e5be: 8f 93 push r24
e5c0: 8b e0 ldi r24, 0x0B ; 11
e5c2: 95 e1 ldi r25, 0x15 ; 21
e5c4: 9f 93 push r25
e5c6: 8f 93 push r24
e5c8: e0 91 78 06 lds r30, 0x0678
e5cc: f0 91 79 06 lds r31, 0x0679
e5d0: 09 95 icall
e5d2: 0f 90 pop r0
e5d4: 0f 90 pop r0
e5d6: 0f 90 pop r0
e5d8: 0f 90 pop r0
e5da: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 6:
if(!show_poti)
e5de: 80 91 72 04 lds r24, 0x0472
e5e2: 81 11 cpse r24, r1
e5e4: 57 c0 rjmp .+174 ; 0xe694 <HoTT_Menu+0x1a56>
{
HoTT_printfxy(0,6,"Ni:%4i Ro:%4i C:%3i",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]], Parameter_ServoNickControl);
e5e6: 8e e7 ldi r24, 0x7E ; 126
e5e8: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e5ec: e0 91 40 05 lds r30, 0x0540
e5f0: f0 e0 ldi r31, 0x00 ; 0
e5f2: ee 0f add r30, r30
e5f4: ff 1f adc r31, r31
e5f6: ef 5c subi r30, 0xCF ; 207
e5f8: f7 4f sbci r31, 0xF7 ; 247
e5fa: 20 81 ld r18, Z
e5fc: 31 81 ldd r19, Z+1 ; 0x01
e5fe: e0 91 3f 05 lds r30, 0x053F
e602: f0 e0 ldi r31, 0x00 ; 0
e604: ee 0f add r30, r30
e606: ff 1f adc r31, r31
e608: ef 5c subi r30, 0xCF ; 207
e60a: f7 4f sbci r31, 0xF7 ; 247
e60c: 80 81 ld r24, Z
e60e: 91 81 ldd r25, Z+1 ; 0x01
e610: 40 91 2f 01 lds r20, 0x012F
e614: 1f 92 push r1
e616: 4f 93 push r20
e618: 3f 93 push r19
e61a: 2f 93 push r18
e61c: 9f 93 push r25
e61e: 8f 93 push r24
e620: 8e e6 ldi r24, 0x6E ; 110
e622: 97 e0 ldi r25, 0x07 ; 7
e624: 9f 93 push r25
e626: 8f 93 push r24
e628: 0b e0 ldi r16, 0x0B ; 11
e62a: 15 e1 ldi r17, 0x15 ; 21
e62c: 1f 93 push r17
e62e: 0f 93 push r16
e630: e0 91 78 06 lds r30, 0x0678
e634: f0 91 79 06 lds r31, 0x0679
e638: 09 95 icall
HoTT_printfxy(0,7,"Gs:%4i Ya:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
e63a: 83 e9 ldi r24, 0x93 ; 147
e63c: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e640: e0 91 42 05 lds r30, 0x0542
e644: f0 e0 ldi r31, 0x00 ; 0
e646: ee 0f add r30, r30
e648: ff 1f adc r31, r31
e64a: ef 5c subi r30, 0xCF ; 207
e64c: f7 4f sbci r31, 0xF7 ; 247
e64e: 20 81 ld r18, Z
e650: 31 81 ldd r19, Z+1 ; 0x01
e652: e0 91 41 05 lds r30, 0x0541
e656: f0 e0 ldi r31, 0x00 ; 0
e658: ee 0f add r30, r30
e65a: ff 1f adc r31, r31
e65c: ef 5c subi r30, 0xCF ; 207
e65e: f7 4f sbci r31, 0xF7 ; 247
e660: 80 81 ld r24, Z
e662: 91 81 ldd r25, Z+1 ; 0x01
e664: 3f 93 push r19
e666: 2f 93 push r18
e668: 81 58 subi r24, 0x81 ; 129
e66a: 9f 4f sbci r25, 0xFF ; 255
e66c: 9f 93 push r25
e66e: 8f 93 push r24
e670: 8f e5 ldi r24, 0x5F ; 95
e672: 97 e0 ldi r25, 0x07 ; 7
e674: 9f 93 push r25
e676: 8f 93 push r24
e678: 1f 93 push r17
e67a: 0f 93 push r16
e67c: e0 91 78 06 lds r30, 0x0678
e680: f0 91 79 06 lds r31, 0x0679
e684: 09 95 icall
e686: 0f b6 in r0, 0x3f ; 63
e688: f8 94 cli
e68a: de bf out 0x3e, r29 ; 62
e68c: 0f be out 0x3f, r0 ; 63
e68e: cd bf out 0x3d, r28 ; 61
e690: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
else
{
HoTT_printfxy(0,6,"P1:%4i P2:%4i 3:%3i",Poti1,Poti2, Poti3);
e694: 8e e7 ldi r24, 0x7E ; 126
e696: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e69a: 80 91 07 04 lds r24, 0x0407
e69e: 1f 92 push r1
e6a0: 8f 93 push r24
e6a2: 80 91 06 04 lds r24, 0x0406
e6a6: 1f 92 push r1
e6a8: 8f 93 push r24
e6aa: 80 91 05 04 lds r24, 0x0405
e6ae: 1f 92 push r1
e6b0: 8f 93 push r24
e6b2: 8b e4 ldi r24, 0x4B ; 75
e6b4: 97 e0 ldi r25, 0x07 ; 7
e6b6: 9f 93 push r25
e6b8: 8f 93 push r24
e6ba: 0b e0 ldi r16, 0x0B ; 11
e6bc: 15 e1 ldi r17, 0x15 ; 21
e6be: 1f 93 push r17
e6c0: 0f 93 push r16
e6c2: e0 91 78 06 lds r30, 0x0678
e6c6: f0 91 79 06 lds r31, 0x0679
e6ca: 09 95 icall
HoTT_printfxy(0,7,"P4:%4i P5:%4i 6:%3i",Poti4,Poti5, Poti6);
e6cc: 83 e9 ldi r24, 0x93 ; 147
e6ce: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e6d2: 80 91 0a 04 lds r24, 0x040A
e6d6: 1f 92 push r1
e6d8: 8f 93 push r24
e6da: 80 91 09 04 lds r24, 0x0409
e6de: 1f 92 push r1
e6e0: 8f 93 push r24
e6e2: 80 91 08 04 lds r24, 0x0408
e6e6: 1f 92 push r1
e6e8: 8f 93 push r24
e6ea: 87 e3 ldi r24, 0x37 ; 55
e6ec: 97 e0 ldi r25, 0x07 ; 7
e6ee: 9f 93 push r25
e6f0: 8f 93 push r24
e6f2: 1f 93 push r17
e6f4: 0f 93 push r16
e6f6: e0 91 78 06 lds r30, 0x0678
e6fa: f0 91 79 06 lds r31, 0x0679
e6fe: 09 95 icall
e700: 0f b6 in r0, 0x3f ; 63
e702: f8 94 cli
e704: de bf out 0x3e, r29 ; 62
e706: 0f be out 0x3f, r0 ; 63
e708: cd bf out 0x3d, r28 ; 61
e70a: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 7: //HoTT_printfxy(0,6,"WARNINGS:");
if(HoTTBlink)
e70e: 80 91 ed 02 lds r24, 0x02ED
e712: 88 23 and r24, r24
e714: 11 f4 brne .+4 ; 0xe71a <HoTT_Menu+0x1adc>
e716: 0c 94 99 7b jmp 0xf732 ; 0xf732 <HoTT_Menu+0x2af4>
{
LIBFC_HoTT_SetPos(6 * 21);
e71a: 8e e7 ldi r24, 0x7E ; 126
e71c: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
if(!(Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) HoTT_printf_BLINK("COUPLING OFF! ");
e720: 80 91 5c 06 lds r24, 0x065C
e724: 86 fd sbrc r24, 6
e726: 11 c0 rjmp .+34 ; 0xe74a <HoTT_Menu+0x1b0c>
e728: 88 e2 ldi r24, 0x28 ; 40
e72a: 97 e0 ldi r25, 0x07 ; 7
e72c: 9f 93 push r25
e72e: 8f 93 push r24
e730: 8c e2 ldi r24, 0x2C ; 44
e732: 95 e1 ldi r25, 0x15 ; 21
e734: 9f 93 push r25
e736: 8f 93 push r24
e738: e0 91 78 06 lds r30, 0x0678
e73c: f0 91 79 06 lds r31, 0x0679
e740: 09 95 icall
e742: 0f 90 pop r0
e744: 0f 90 pop r0
e746: 0f 90 pop r0
e748: 0f 90 pop r0
if(EE_Parameter.BitConfig & (CFG_LOOP_LINKS | CFG_LOOP_RECHTS | CFG_LOOP_UNTEN | CFG_LOOP_OBEN)) HoTT_printf_BLINK("LOOPING! ");
e74a: 80 91 b6 05 lds r24, 0x05B6
e74e: 8f 70 andi r24, 0x0F ; 15
e750: 89 f0 breq .+34 ; 0xe774 <HoTT_Menu+0x1b36>
e752: 8e e1 ldi r24, 0x1E ; 30
e754: 97 e0 ldi r25, 0x07 ; 7
e756: 9f 93 push r25
e758: 8f 93 push r24
e75a: 8c e2 ldi r24, 0x2C ; 44
e75c: 95 e1 ldi r25, 0x15 ; 21
e75e: 9f 93 push r25
e760: 8f 93 push r24
e762: e0 91 78 06 lds r30, 0x0678
e766: f0 91 79 06 lds r31, 0x0679
e76a: 09 95 icall
e76c: 0f 90 pop r0
e76e: 0f 90 pop r0
e770: 0f 90 pop r0
e772: 0f 90 pop r0
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) HoTT_printf_BLINK("HH! ");
e774: 80 91 5c 06 lds r24, 0x065C
e778: 82 ff sbrs r24, 2
e77a: 11 c0 rjmp .+34 ; 0xe79e <HoTT_Menu+0x1b60>
e77c: 89 e1 ldi r24, 0x19 ; 25
e77e: 97 e0 ldi r25, 0x07 ; 7
e780: 9f 93 push r25
e782: 8f 93 push r24
e784: 8c e2 ldi r24, 0x2C ; 44
e786: 95 e1 ldi r25, 0x15 ; 21
e788: 9f 93 push r25
e78a: 8f 93 push r24
e78c: e0 91 78 06 lds r30, 0x0678
e790: f0 91 79 06 lds r31, 0x0679
e794: 09 95 icall
e796: 0f 90 pop r0
e798: 0f 90 pop r0
e79a: 0f 90 pop r0
e79c: 0f 90 pop r0
if(!(Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) HoTT_printf_BLINK("COMPASS OFF! ");
e79e: 80 91 5c 06 lds r24, 0x065C
e7a2: 83 fd sbrc r24, 3
e7a4: c6 c7 rjmp .+3980 ; 0xf732 <HoTT_Menu+0x2af4>
e7a6: 8b e0 ldi r24, 0x0B ; 11
e7a8: 97 e0 ldi r25, 0x07 ; 7
e7aa: 9f 93 push r25
e7ac: 8f 93 push r24
e7ae: 8c e2 ldi r24, 0x2C ; 44
e7b0: 95 e1 ldi r25, 0x15 ; 21
e7b2: 9f 93 push r25
e7b4: 8f 93 push r24
e7b6: e0 91 78 06 lds r30, 0x0678
e7ba: f0 91 79 06 lds r31, 0x0679
e7be: 09 95 icall
e7c0: 0f 90 pop r0
e7c2: 0f 90 pop r0
e7c4: 0f 90 pop r0
e7c6: 0f 90 pop r0
e7c8: b4 c7 rjmp .+3944 ; 0xf732 <HoTT_Menu+0x2af4>
case 12:
case 13:
case 14:
case 15:
case 16:
if(HottKeyboard == HOTT_KEY_SET) { if(show_poti) show_poti = 0; else show_poti = 1; Hott_ClearLine(6); Hott_ClearLine(7);}
e7ca: 80 91 a9 0c lds r24, 0x0CA9
e7ce: 86 30 cpi r24, 0x06 ; 6
e7d0: 89 f4 brne .+34 ; 0xe7f4 <HoTT_Menu+0x1bb6>
e7d2: 80 91 72 04 lds r24, 0x0472
e7d6: 88 23 and r24, r24
e7d8: 19 f0 breq .+6 ; 0xe7e0 <HoTT_Menu+0x1ba2>
e7da: 10 92 72 04 sts 0x0472, r1
e7de: 03 c0 rjmp .+6 ; 0xe7e6 <HoTT_Menu+0x1ba8>
e7e0: 81 e0 ldi r24, 0x01 ; 1
e7e2: 80 93 72 04 sts 0x0472, r24
e7e6: 86 e0 ldi r24, 0x06 ; 6
e7e8: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
e7ec: 87 e0 ldi r24, 0x07 ; 7
e7ee: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
e7f2: 13 c0 rjmp .+38 ; 0xe81a <HoTT_Menu+0x1bdc>
else
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 3; line = 0;}
e7f4: 88 30 cpi r24, 0x08 ; 8
e7f6: 41 f4 brne .+16 ; 0xe808 <HoTT_Menu+0x1bca>
e7f8: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
e7fc: 83 e0 ldi r24, 0x03 ; 3
e7fe: 80 93 76 04 sts 0x0476, r24
e802: 10 92 75 04 sts 0x0475, r1
e806: 09 c0 rjmp .+18 ; 0xe81a <HoTT_Menu+0x1bdc>
else
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 1; line = 0;};
e808: 81 30 cpi r24, 0x01 ; 1
e80a: 39 f4 brne .+14 ; 0xe81a <HoTT_Menu+0x1bdc>
e80c: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
e810: 81 e0 ldi r24, 0x01 ; 1
e812: 80 93 76 04 sts 0x0476, r24
e816: 10 92 75 04 sts 0x0475, r1
HottKeyboard = 0;
e81a: 10 92 a9 0c sts 0x0CA9, r1
break;
e81e: 89 c7 rjmp .+3858 ; 0xf732 <HoTT_Menu+0x2af4>
default: line = 0;
e820: 10 92 75 04 sts 0x0475, r1
break;
e824: 86 c7 rjmp .+3852 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 3:
switch(line++)
e826: 80 91 75 04 lds r24, 0x0475
e82a: 91 e0 ldi r25, 0x01 ; 1
e82c: 98 0f add r25, r24
e82e: 90 93 75 04 sts 0x0475, r25
e832: 82 30 cpi r24, 0x02 ; 2
e834: 09 f4 brne .+2 ; 0xe838 <HoTT_Menu+0x1bfa>
e836: 65 c0 rjmp .+202 ; 0xe902 <HoTT_Menu+0x1cc4>
e838: 28 f4 brcc .+10 ; 0xe844 <HoTT_Menu+0x1c06>
e83a: 88 23 and r24, r24
e83c: 39 f0 breq .+14 ; 0xe84c <HoTT_Menu+0x1c0e>
e83e: 81 30 cpi r24, 0x01 ; 1
e840: 49 f1 breq .+82 ; 0xe894 <HoTT_Menu+0x1c56>
e842: aa c1 rjmp .+852 ; 0xeb98 <HoTT_Menu+0x1f5a>
e844: 86 30 cpi r24, 0x06 ; 6
e846: 08 f4 brcc .+2 ; 0xe84a <HoTT_Menu+0x1c0c>
e848: 98 c0 rjmp .+304 ; 0xe97a <HoTT_Menu+0x1d3c>
e84a: a6 c1 rjmp .+844 ; 0xeb98 <HoTT_Menu+0x1f5a>
{
static unsigned char load_waypoint_tmp2 = 1, changed2;
case 0:
HoTT_printfxy(0,0,"Load Waypoints");
e84c: 80 e0 ldi r24, 0x00 ; 0
e84e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e852: 8c ef ldi r24, 0xFC ; 252
e854: 96 e0 ldi r25, 0x06 ; 6
e856: 9f 93 push r25
e858: 8f 93 push r24
e85a: 0b e0 ldi r16, 0x0B ; 11
e85c: 15 e1 ldi r17, 0x15 ; 21
e85e: 1f 93 push r17
e860: 0f 93 push r16
e862: e0 91 78 06 lds r30, 0x0678
e866: f0 91 79 06 lds r31, 0x0679
e86a: 09 95 icall
HoTT_printfxy(0,1,"(Relative Positions)");
e86c: 85 e1 ldi r24, 0x15 ; 21
e86e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e872: 87 ee ldi r24, 0xE7 ; 231
e874: 96 e0 ldi r25, 0x06 ; 6
e876: 9f 93 push r25
e878: 8f 93 push r24
e87a: 1f 93 push r17
e87c: 0f 93 push r16
e87e: e0 91 78 06 lds r30, 0x0678
e882: f0 91 79 06 lds r31, 0x0679
e886: 09 95 icall
// HoTT_printfxy(0,1,"(Absolute)");
break;
e888: 0f b6 in r0, 0x3f ; 63
e88a: f8 94 cli
e88c: de bf out 0x3e, r29 ; 62
e88e: 0f be out 0x3f, r0 ; 63
e890: cd bf out 0x3d, r28 ; 61
e892: 4f c7 rjmp .+3742 ; 0xf732 <HoTT_Menu+0x2af4>
case 1:
if(NaviData_WaypointNumber) HoTT_printfxy(0,6,"Active WP:%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber)
e894: 80 91 8c 04 lds r24, 0x048C
e898: 88 23 and r24, r24
e89a: f1 f0 breq .+60 ; 0xe8d8 <HoTT_Menu+0x1c9a>
e89c: 8e e7 ldi r24, 0x7E ; 126
e89e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e8a2: 80 91 8c 04 lds r24, 0x048C
e8a6: 1f 92 push r1
e8a8: 8f 93 push r24
e8aa: 80 91 8d 04 lds r24, 0x048D
e8ae: 1f 92 push r1
e8b0: 8f 93 push r24
e8b2: 85 ed ldi r24, 0xD5 ; 213
e8b4: 96 e0 ldi r25, 0x06 ; 6
e8b6: 9f 93 push r25
e8b8: 8f 93 push r24
e8ba: 8b e0 ldi r24, 0x0B ; 11
e8bc: 95 e1 ldi r25, 0x15 ; 21
e8be: 9f 93 push r25
e8c0: 8f 93 push r24
e8c2: e0 91 78 06 lds r30, 0x0678
e8c6: f0 91 79 06 lds r31, 0x0679
e8ca: 09 95 icall
e8cc: 0f b6 in r0, 0x3f ; 63
e8ce: f8 94 cli
e8d0: de bf out 0x3e, r29 ; 62
e8d2: 0f be out 0x3f, r0 ; 63
e8d4: cd bf out 0x3d, r28 ; 61
e8d6: 2d c7 rjmp .+3674 ; 0xf732 <HoTT_Menu+0x2af4>
else HoTT_printfxy(0,6,"No WPs active ")
e8d8: 8e e7 ldi r24, 0x7E ; 126
e8da: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e8de: 82 ec ldi r24, 0xC2 ; 194
e8e0: 96 e0 ldi r25, 0x06 ; 6
e8e2: 9f 93 push r25
e8e4: 8f 93 push r24
e8e6: 8b e0 ldi r24, 0x0B ; 11
e8e8: 95 e1 ldi r25, 0x15 ; 21
e8ea: 9f 93 push r25
e8ec: 8f 93 push r24
e8ee: e0 91 78 06 lds r30, 0x0678
e8f2: f0 91 79 06 lds r31, 0x0679
e8f6: 09 95 icall
e8f8: 0f 90 pop r0
e8fa: 0f 90 pop r0
e8fc: 0f 90 pop r0
e8fe: 0f 90 pop r0
e900: 18 c7 rjmp .+3632 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 2:
HoTT_printfxy(0,7,"%2i.%1iV ",UBat/10, UBat%10)
e902: 83 e9 ldi r24, 0x93 ; 147
e904: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e908: 80 91 1a 01 lds r24, 0x011A
e90c: 90 91 1b 01 lds r25, 0x011B
e910: e0 91 1a 01 lds r30, 0x011A
e914: f0 91 1b 01 lds r31, 0x011B
e918: 2a e0 ldi r18, 0x0A ; 10
e91a: 30 e0 ldi r19, 0x00 ; 0
e91c: b9 01 movw r22, r18
e91e: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
e922: 9f 93 push r25
e924: 8f 93 push r24
e926: cf 01 movw r24, r30
e928: b9 01 movw r22, r18
e92a: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
e92e: 7f 93 push r23
e930: 6f 93 push r22
e932: 88 eb ldi r24, 0xB8 ; 184
e934: 96 e0 ldi r25, 0x06 ; 6
e936: 9f 93 push r25
e938: 8f 93 push r24
e93a: 0b e0 ldi r16, 0x0B ; 11
e93c: 15 e1 ldi r17, 0x15 ; 21
e93e: 1f 93 push r17
e940: 0f 93 push r16
e942: e0 91 78 06 lds r30, 0x0678
e946: f0 91 79 06 lds r31, 0x0679
e94a: 09 95 icall
HoTT_printfxy(11,7,"%s",WPL_Name)
e94c: 8e e9 ldi r24, 0x9E ; 158
e94e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e952: 82 ed ldi r24, 0xD2 ; 210
e954: 96 e0 ldi r25, 0x06 ; 6
e956: 9f 93 push r25
e958: 8f 93 push r24
e95a: 85 eb ldi r24, 0xB5 ; 181
e95c: 96 e0 ldi r25, 0x06 ; 6
e95e: 9f 93 push r25
e960: 8f 93 push r24
e962: 1f 93 push r17
e964: 0f 93 push r16
e966: e0 91 78 06 lds r30, 0x0678
e96a: f0 91 79 06 lds r31, 0x0679
e96e: 09 95 icall
e970: 0f b6 in r0, 0x3f ; 63
e972: f8 94 cli
e974: de bf out 0x3e, r29 ; 62
e976: 0f be out 0x3f, r0 ; 63
e978: cd bf out 0x3d, r28 ; 61
case 3:
case 4:
case 5:
if(load_waypoint_tmp2)
e97a: 80 91 56 01 lds r24, 0x0156
e97e: 88 23 and r24, r24
e980: 09 f4 brne .+2 ; 0xe984 <HoTT_Menu+0x1d46>
e982: 4c c0 rjmp .+152 ; 0xea1c <HoTT_Menu+0x1dde>
{
if(changed2 && HoTTBlink) HoTT_printfxy(10,3," ")
e984: 80 91 71 04 lds r24, 0x0471
e988: 88 23 and r24, r24
e98a: c9 f0 breq .+50 ; 0xe9be <HoTT_Menu+0x1d80>
e98c: 80 91 ed 02 lds r24, 0x02ED
e990: 88 23 and r24, r24
e992: a9 f0 breq .+42 ; 0xe9be <HoTT_Menu+0x1d80>
e994: 89 e4 ldi r24, 0x49 ; 73
e996: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e99a: 81 eb ldi r24, 0xB1 ; 177
e99c: 96 e0 ldi r25, 0x06 ; 6
e99e: 9f 93 push r25
e9a0: 8f 93 push r24
e9a2: 8b e0 ldi r24, 0x0B ; 11
e9a4: 95 e1 ldi r25, 0x15 ; 21
e9a6: 9f 93 push r25
e9a8: 8f 93 push r24
e9aa: e0 91 78 06 lds r30, 0x0678
e9ae: f0 91 79 06 lds r31, 0x0679
e9b2: 09 95 icall
e9b4: 0f 90 pop r0
e9b6: 0f 90 pop r0
e9b8: 0f 90 pop r0
e9ba: 0f 90 pop r0
e9bc: 1a c0 rjmp .+52 ; 0xe9f2 <HoTT_Menu+0x1db4>
else HoTT_printfxy(10,3,"%2i ",load_waypoint_tmp2);
e9be: 89 e4 ldi r24, 0x49 ; 73
e9c0: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e9c4: 80 91 56 01 lds r24, 0x0156
e9c8: 1f 92 push r1
e9ca: 8f 93 push r24
e9cc: 8a ea ldi r24, 0xAA ; 170
e9ce: 96 e0 ldi r25, 0x06 ; 6
e9d0: 9f 93 push r25
e9d2: 8f 93 push r24
e9d4: 8b e0 ldi r24, 0x0B ; 11
e9d6: 95 e1 ldi r25, 0x15 ; 21
e9d8: 9f 93 push r25
e9da: 8f 93 push r24
e9dc: e0 91 78 06 lds r30, 0x0678
e9e0: f0 91 79 06 lds r31, 0x0679
e9e4: 09 95 icall
e9e6: 0f 90 pop r0
e9e8: 0f 90 pop r0
e9ea: 0f 90 pop r0
e9ec: 0f 90 pop r0
e9ee: 0f 90 pop r0
e9f0: 0f 90 pop r0
HoTT_printfxy(0,3,"Load list:")
e9f2: 8f e3 ldi r24, 0x3F ; 63
e9f4: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
e9f8: 8f e9 ldi r24, 0x9F ; 159
e9fa: 96 e0 ldi r25, 0x06 ; 6
e9fc: 9f 93 push r25
e9fe: 8f 93 push r24
ea00: 8b e0 ldi r24, 0x0B ; 11
ea02: 95 e1 ldi r25, 0x15 ; 21
ea04: 9f 93 push r25
ea06: 8f 93 push r24
ea08: e0 91 78 06 lds r30, 0x0678
ea0c: f0 91 79 06 lds r31, 0x0679
ea10: 09 95 icall
ea12: 0f 90 pop r0
ea14: 0f 90 pop r0
ea16: 0f 90 pop r0
ea18: 0f 90 pop r0
ea1a: 14 c0 rjmp .+40 ; 0xea44 <HoTT_Menu+0x1e06>
}
else
{
HoTT_printfxy(0,3,"Load list: -- ");
ea1c: 8f e3 ldi r24, 0x3F ; 63
ea1e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ea22: 80 e9 ldi r24, 0x90 ; 144
ea24: 96 e0 ldi r25, 0x06 ; 6
ea26: 9f 93 push r25
ea28: 8f 93 push r24
ea2a: 8b e0 ldi r24, 0x0B ; 11
ea2c: 95 e1 ldi r25, 0x15 ; 21
ea2e: 9f 93 push r25
ea30: 8f 93 push r24
ea32: e0 91 78 06 lds r30, 0x0678
ea36: f0 91 79 06 lds r31, 0x0679
ea3a: 09 95 icall
ea3c: 0f 90 pop r0
ea3e: 0f 90 pop r0
ea40: 0f 90 pop r0
ea42: 0f 90 pop r0
}
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,4,"No SD-Card ")
ea44: 80 91 89 04 lds r24, 0x0489
ea48: 81 11 cpse r24, r1
ea4a: 15 c0 rjmp .+42 ; 0xea76 <HoTT_Menu+0x1e38>
ea4c: 84 e5 ldi r24, 0x54 ; 84
ea4e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ea52: 82 e8 ldi r24, 0x82 ; 130
ea54: 96 e0 ldi r25, 0x06 ; 6
ea56: 9f 93 push r25
ea58: 8f 93 push r24
ea5a: 8b e0 ldi r24, 0x0B ; 11
ea5c: 95 e1 ldi r25, 0x15 ; 21
ea5e: 9f 93 push r25
ea60: 8f 93 push r24
ea62: e0 91 78 06 lds r30, 0x0678
ea66: f0 91 79 06 lds r31, 0x0679
ea6a: 09 95 icall
ea6c: 0f 90 pop r0
ea6e: 0f 90 pop r0
ea70: 0f 90 pop r0
ea72: 0f 90 pop r0
ea74: 58 c0 rjmp .+176 ; 0xeb26 <HoTT_Menu+0x1ee8>
else
{
if(GPSInfo.SatFix == SATFIX_3D)
ea76: 80 91 d9 08 lds r24, 0x08D9
ea7a: 83 30 cpi r24, 0x03 ; 3
ea7c: 09 f0 breq .+2 ; 0xea80 <HoTT_Menu+0x1e42>
ea7e: 3f c0 rjmp .+126 ; 0xeafe <HoTT_Menu+0x1ec0>
{
if(changed2 && load_waypoint_tmp2) HoTT_printfxy(0,4,"(Set -> Load)")
ea80: 80 91 71 04 lds r24, 0x0471
ea84: 88 23 and r24, r24
ea86: c9 f0 breq .+50 ; 0xeaba <HoTT_Menu+0x1e7c>
ea88: 80 91 56 01 lds r24, 0x0156
ea8c: 88 23 and r24, r24
ea8e: a9 f0 breq .+42 ; 0xeaba <HoTT_Menu+0x1e7c>
ea90: 84 e5 ldi r24, 0x54 ; 84
ea92: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ea96: 84 e7 ldi r24, 0x74 ; 116
ea98: 96 e0 ldi r25, 0x06 ; 6
ea9a: 9f 93 push r25
ea9c: 8f 93 push r24
ea9e: 8b e0 ldi r24, 0x0B ; 11
eaa0: 95 e1 ldi r25, 0x15 ; 21
eaa2: 9f 93 push r25
eaa4: 8f 93 push r24
eaa6: e0 91 78 06 lds r30, 0x0678
eaaa: f0 91 79 06 lds r31, 0x0679
eaae: 09 95 icall
eab0: 0f 90 pop r0
eab2: 0f 90 pop r0
eab4: 0f 90 pop r0
eab6: 0f 90 pop r0
eab8: 14 c0 rjmp .+40 ; 0xeae2 <HoTT_Menu+0x1ea4>
else HoTT_printfxy(0,4," ");
eaba: 84 e5 ldi r24, 0x54 ; 84
eabc: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
eac0: 86 e6 ldi r24, 0x66 ; 102
eac2: 96 e0 ldi r25, 0x06 ; 6
eac4: 9f 93 push r25
eac6: 8f 93 push r24
eac8: 8b e0 ldi r24, 0x0B ; 11
eaca: 95 e1 ldi r25, 0x15 ; 21
eacc: 9f 93 push r25
eace: 8f 93 push r24
ead0: e0 91 78 06 lds r30, 0x0678
ead4: f0 91 79 06 lds r31, 0x0679
ead8: 09 95 icall
eada: 0f 90 pop r0
eadc: 0f 90 pop r0
eade: 0f 90 pop r0
eae0: 0f 90 pop r0
if(HottKeyboard == HOTT_KEY_SET) { if(load_waypoint_tmp2) ToNC_Load_WP_List = load_waypoint_tmp2 | 128; changed2 = 0;}
eae2: 80 91 a9 0c lds r24, 0x0CA9
eae6: 86 30 cpi r24, 0x06 ; 6
eae8: f1 f4 brne .+60 ; 0xeb26 <HoTT_Menu+0x1ee8>
eaea: 80 91 56 01 lds r24, 0x0156
eaee: 88 23 and r24, r24
eaf0: 19 f0 breq .+6 ; 0xeaf8 <HoTT_Menu+0x1eba>
eaf2: 80 68 ori r24, 0x80 ; 128
eaf4: 80 93 8a 04 sts 0x048A, r24
eaf8: 10 92 71 04 sts 0x0471, r1
eafc: 14 c0 rjmp .+40 ; 0xeb26 <HoTT_Menu+0x1ee8>
} else HoTT_printfxy(0,4,"!No GPS-Fix! ");
eafe: 84 e5 ldi r24, 0x54 ; 84
eb00: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
eb04: 88 e5 ldi r24, 0x58 ; 88
eb06: 96 e0 ldi r25, 0x06 ; 6
eb08: 9f 93 push r25
eb0a: 8f 93 push r24
eb0c: 8b e0 ldi r24, 0x0B ; 11
eb0e: 95 e1 ldi r25, 0x15 ; 21
eb10: 9f 93 push r25
eb12: 8f 93 push r24
eb14: e0 91 78 06 lds r30, 0x0678
eb18: f0 91 79 06 lds r31, 0x0679
eb1c: 09 95 icall
eb1e: 0f 90 pop r0
eb20: 0f 90 pop r0
eb22: 0f 90 pop r0
eb24: 0f 90 pop r0
}
if(HottKeyboard == HOTT_KEY_UP && load_waypoint_tmp2 < NaviData_MaxWpListIndex) { changed2 = 1; load_waypoint_tmp2++;HoTTBlink = 0;}
eb26: 80 91 a9 0c lds r24, 0x0CA9
eb2a: 84 30 cpi r24, 0x04 ; 4
eb2c: 79 f4 brne .+30 ; 0xeb4c <HoTT_Menu+0x1f0e>
eb2e: 80 91 56 01 lds r24, 0x0156
eb32: 90 91 89 04 lds r25, 0x0489
eb36: 89 17 cp r24, r25
eb38: 08 f5 brcc .+66 ; 0xeb7c <HoTT_Menu+0x1f3e>
eb3a: 91 e0 ldi r25, 0x01 ; 1
eb3c: 90 93 71 04 sts 0x0471, r25
eb40: 8f 5f subi r24, 0xFF ; 255
eb42: 80 93 56 01 sts 0x0156, r24
eb46: 10 92 ed 02 sts 0x02ED, r1
eb4a: 18 c0 rjmp .+48 ; 0xeb7c <HoTT_Menu+0x1f3e>
if(HottKeyboard == HOTT_KEY_DOWN && load_waypoint_tmp2 > 1) { changed2 = 1; load_waypoint_tmp2--;HoTTBlink = 0;};
eb4c: 82 30 cpi r24, 0x02 ; 2
eb4e: 69 f4 brne .+26 ; 0xeb6a <HoTT_Menu+0x1f2c>
eb50: 80 91 56 01 lds r24, 0x0156
eb54: 82 30 cpi r24, 0x02 ; 2
eb56: 90 f0 brcs .+36 ; 0xeb7c <HoTT_Menu+0x1f3e>
eb58: 91 e0 ldi r25, 0x01 ; 1
eb5a: 90 93 71 04 sts 0x0471, r25
eb5e: 81 50 subi r24, 0x01 ; 1
eb60: 80 93 56 01 sts 0x0156, r24
eb64: 10 92 ed 02 sts 0x02ED, r1
eb68: 09 c0 rjmp .+18 ; 0xeb7c <HoTT_Menu+0x1f3e>
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 4; line = 0;}
eb6a: 88 30 cpi r24, 0x08 ; 8
eb6c: 39 f4 brne .+14 ; 0xeb7c <HoTT_Menu+0x1f3e>
eb6e: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
eb72: 84 e0 ldi r24, 0x04 ; 4
eb74: 80 93 76 04 sts 0x0476, r24
eb78: 10 92 75 04 sts 0x0475, r1
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 2; line = 0;};
eb7c: 80 91 a9 0c lds r24, 0x0CA9
eb80: 81 30 cpi r24, 0x01 ; 1
eb82: 39 f4 brne .+14 ; 0xeb92 <HoTT_Menu+0x1f54>
eb84: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
eb88: 82 e0 ldi r24, 0x02 ; 2
eb8a: 80 93 76 04 sts 0x0476, r24
eb8e: 10 92 75 04 sts 0x0475, r1
HottKeyboard = 0;
eb92: 10 92 a9 0c sts 0x0CA9, r1
break;
eb96: cd c5 rjmp .+2970 ; 0xf732 <HoTT_Menu+0x2af4>
default: line = 0;
eb98: 10 92 75 04 sts 0x0475, r1
break;
eb9c: ca c5 rjmp .+2964 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 4:
switch(line++)
eb9e: 80 91 75 04 lds r24, 0x0475
eba2: 91 e0 ldi r25, 0x01 ; 1
eba4: 98 0f add r25, r24
eba6: 90 93 75 04 sts 0x0475, r25
ebaa: 82 30 cpi r24, 0x02 ; 2
ebac: 09 f4 brne .+2 ; 0xebb0 <HoTT_Menu+0x1f72>
ebae: 65 c0 rjmp .+202 ; 0xec7a <HoTT_Menu+0x203c>
ebb0: 28 f4 brcc .+10 ; 0xebbc <HoTT_Menu+0x1f7e>
ebb2: 88 23 and r24, r24
ebb4: 39 f0 breq .+14 ; 0xebc4 <HoTT_Menu+0x1f86>
ebb6: 81 30 cpi r24, 0x01 ; 1
ebb8: 49 f1 breq .+82 ; 0xec0c <HoTT_Menu+0x1fce>
ebba: 90 c1 rjmp .+800 ; 0xeedc <HoTT_Menu+0x229e>
ebbc: 86 30 cpi r24, 0x06 ; 6
ebbe: 08 f4 brcc .+2 ; 0xebc2 <HoTT_Menu+0x1f84>
ebc0: 98 c0 rjmp .+304 ; 0xecf2 <HoTT_Menu+0x20b4>
ebc2: 8c c1 rjmp .+792 ; 0xeedc <HoTT_Menu+0x229e>
{
static unsigned char load_waypoint_tmp = 1, changed;
case 0:
HoTT_printfxy(0,0,"Load Waypoints");
ebc4: 80 e0 ldi r24, 0x00 ; 0
ebc6: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ebca: 89 e4 ldi r24, 0x49 ; 73
ebcc: 96 e0 ldi r25, 0x06 ; 6
ebce: 9f 93 push r25
ebd0: 8f 93 push r24
ebd2: 0b e0 ldi r16, 0x0B ; 11
ebd4: 15 e1 ldi r17, 0x15 ; 21
ebd6: 1f 93 push r17
ebd8: 0f 93 push r16
ebda: e0 91 78 06 lds r30, 0x0678
ebde: f0 91 79 06 lds r31, 0x0679
ebe2: 09 95 icall
HoTT_printfxy(0,1,"(Fixed Positions)");
ebe4: 85 e1 ldi r24, 0x15 ; 21
ebe6: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ebea: 87 e3 ldi r24, 0x37 ; 55
ebec: 96 e0 ldi r25, 0x06 ; 6
ebee: 9f 93 push r25
ebf0: 8f 93 push r24
ebf2: 1f 93 push r17
ebf4: 0f 93 push r16
ebf6: e0 91 78 06 lds r30, 0x0678
ebfa: f0 91 79 06 lds r31, 0x0679
ebfe: 09 95 icall
break;
ec00: 0f b6 in r0, 0x3f ; 63
ec02: f8 94 cli
ec04: de bf out 0x3e, r29 ; 62
ec06: 0f be out 0x3f, r0 ; 63
ec08: cd bf out 0x3d, r28 ; 61
ec0a: 93 c5 rjmp .+2854 ; 0xf732 <HoTT_Menu+0x2af4>
case 1:
if(NaviData_WaypointNumber) HoTT_printfxy(0,6,"Active WP:%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber)
ec0c: 80 91 8c 04 lds r24, 0x048C
ec10: 88 23 and r24, r24
ec12: f1 f0 breq .+60 ; 0xec50 <HoTT_Menu+0x2012>
ec14: 8e e7 ldi r24, 0x7E ; 126
ec16: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ec1a: 80 91 8c 04 lds r24, 0x048C
ec1e: 1f 92 push r1
ec20: 8f 93 push r24
ec22: 80 91 8d 04 lds r24, 0x048D
ec26: 1f 92 push r1
ec28: 8f 93 push r24
ec2a: 85 e2 ldi r24, 0x25 ; 37
ec2c: 96 e0 ldi r25, 0x06 ; 6
ec2e: 9f 93 push r25
ec30: 8f 93 push r24
ec32: 8b e0 ldi r24, 0x0B ; 11
ec34: 95 e1 ldi r25, 0x15 ; 21
ec36: 9f 93 push r25
ec38: 8f 93 push r24
ec3a: e0 91 78 06 lds r30, 0x0678
ec3e: f0 91 79 06 lds r31, 0x0679
ec42: 09 95 icall
ec44: 0f b6 in r0, 0x3f ; 63
ec46: f8 94 cli
ec48: de bf out 0x3e, r29 ; 62
ec4a: 0f be out 0x3f, r0 ; 63
ec4c: cd bf out 0x3d, r28 ; 61
ec4e: 71 c5 rjmp .+2786 ; 0xf732 <HoTT_Menu+0x2af4>
else HoTT_printfxy(0,6,"No WPs active ")
ec50: 8e e7 ldi r24, 0x7E ; 126
ec52: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ec56: 83 e1 ldi r24, 0x13 ; 19
ec58: 96 e0 ldi r25, 0x06 ; 6
ec5a: 9f 93 push r25
ec5c: 8f 93 push r24
ec5e: 8b e0 ldi r24, 0x0B ; 11
ec60: 95 e1 ldi r25, 0x15 ; 21
ec62: 9f 93 push r25
ec64: 8f 93 push r24
ec66: e0 91 78 06 lds r30, 0x0678
ec6a: f0 91 79 06 lds r31, 0x0679
ec6e: 09 95 icall
ec70: 0f 90 pop r0
ec72: 0f 90 pop r0
ec74: 0f 90 pop r0
ec76: 0f 90 pop r0
ec78: 5c c5 rjmp .+2744 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 2:
HoTT_printfxy(0,7,"%2i.%1iV ",UBat/10, UBat%10)
ec7a: 83 e9 ldi r24, 0x93 ; 147
ec7c: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ec80: 80 91 1a 01 lds r24, 0x011A
ec84: 90 91 1b 01 lds r25, 0x011B
ec88: e0 91 1a 01 lds r30, 0x011A
ec8c: f0 91 1b 01 lds r31, 0x011B
ec90: 2a e0 ldi r18, 0x0A ; 10
ec92: 30 e0 ldi r19, 0x00 ; 0
ec94: b9 01 movw r22, r18
ec96: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
ec9a: 9f 93 push r25
ec9c: 8f 93 push r24
ec9e: cf 01 movw r24, r30
eca0: b9 01 movw r22, r18
eca2: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
eca6: 7f 93 push r23
eca8: 6f 93 push r22
ecaa: 89 e0 ldi r24, 0x09 ; 9
ecac: 96 e0 ldi r25, 0x06 ; 6
ecae: 9f 93 push r25
ecb0: 8f 93 push r24
ecb2: 0b e0 ldi r16, 0x0B ; 11
ecb4: 15 e1 ldi r17, 0x15 ; 21
ecb6: 1f 93 push r17
ecb8: 0f 93 push r16
ecba: e0 91 78 06 lds r30, 0x0678
ecbe: f0 91 79 06 lds r31, 0x0679
ecc2: 09 95 icall
HoTT_printfxy(11,7,"%s",WPL_Name)
ecc4: 8e e9 ldi r24, 0x9E ; 158
ecc6: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ecca: 82 ed ldi r24, 0xD2 ; 210
eccc: 96 e0 ldi r25, 0x06 ; 6
ecce: 9f 93 push r25
ecd0: 8f 93 push r24
ecd2: 86 e0 ldi r24, 0x06 ; 6
ecd4: 96 e0 ldi r25, 0x06 ; 6
ecd6: 9f 93 push r25
ecd8: 8f 93 push r24
ecda: 1f 93 push r17
ecdc: 0f 93 push r16
ecde: e0 91 78 06 lds r30, 0x0678
ece2: f0 91 79 06 lds r31, 0x0679
ece6: 09 95 icall
ece8: 0f b6 in r0, 0x3f ; 63
ecea: f8 94 cli
ecec: de bf out 0x3e, r29 ; 62
ecee: 0f be out 0x3f, r0 ; 63
ecf0: cd bf out 0x3d, r28 ; 61
case 3:
case 4:
case 5:
HoTT_printfxy(0,3,"Load list:")
ecf2: 8f e3 ldi r24, 0x3F ; 63
ecf4: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ecf8: 8b ef ldi r24, 0xFB ; 251
ecfa: 95 e0 ldi r25, 0x05 ; 5
ecfc: 9f 93 push r25
ecfe: 8f 93 push r24
ed00: 8b e0 ldi r24, 0x0B ; 11
ed02: 95 e1 ldi r25, 0x15 ; 21
ed04: 9f 93 push r25
ed06: 8f 93 push r24
ed08: e0 91 78 06 lds r30, 0x0678
ed0c: f0 91 79 06 lds r31, 0x0679
ed10: 09 95 icall
if(load_waypoint_tmp)
ed12: 0f 90 pop r0
ed14: 0f 90 pop r0
ed16: 0f 90 pop r0
ed18: 0f 90 pop r0
ed1a: 80 91 55 01 lds r24, 0x0155
ed1e: 88 23 and r24, r24
ed20: c1 f1 breq .+112 ; 0xed92 <HoTT_Menu+0x2154>
{
if(changed && HoTTBlink) HoTT_printfxy(10,3," ")
ed22: 80 91 70 04 lds r24, 0x0470
ed26: 88 23 and r24, r24
ed28: c9 f0 breq .+50 ; 0xed5c <HoTT_Menu+0x211e>
ed2a: 80 91 ed 02 lds r24, 0x02ED
ed2e: 88 23 and r24, r24
ed30: a9 f0 breq .+42 ; 0xed5c <HoTT_Menu+0x211e>
ed32: 89 e4 ldi r24, 0x49 ; 73
ed34: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ed38: 87 ef ldi r24, 0xF7 ; 247
ed3a: 95 e0 ldi r25, 0x05 ; 5
ed3c: 9f 93 push r25
ed3e: 8f 93 push r24
ed40: 8b e0 ldi r24, 0x0B ; 11
ed42: 95 e1 ldi r25, 0x15 ; 21
ed44: 9f 93 push r25
ed46: 8f 93 push r24
ed48: e0 91 78 06 lds r30, 0x0678
ed4c: f0 91 79 06 lds r31, 0x0679
ed50: 09 95 icall
ed52: 0f 90 pop r0
ed54: 0f 90 pop r0
ed56: 0f 90 pop r0
ed58: 0f 90 pop r0
ed5a: 2f c0 rjmp .+94 ; 0xedba <HoTT_Menu+0x217c>
else HoTT_printfxy(10,3,"%2d (FIX)",load_waypoint_tmp);
ed5c: 89 e4 ldi r24, 0x49 ; 73
ed5e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ed62: 80 91 55 01 lds r24, 0x0155
ed66: 1f 92 push r1
ed68: 8f 93 push r24
ed6a: 8d ee ldi r24, 0xED ; 237
ed6c: 95 e0 ldi r25, 0x05 ; 5
ed6e: 9f 93 push r25
ed70: 8f 93 push r24
ed72: 8b e0 ldi r24, 0x0B ; 11
ed74: 95 e1 ldi r25, 0x15 ; 21
ed76: 9f 93 push r25
ed78: 8f 93 push r24
ed7a: e0 91 78 06 lds r30, 0x0678
ed7e: f0 91 79 06 lds r31, 0x0679
ed82: 09 95 icall
ed84: 0f 90 pop r0
ed86: 0f 90 pop r0
ed88: 0f 90 pop r0
ed8a: 0f 90 pop r0
ed8c: 0f 90 pop r0
ed8e: 0f 90 pop r0
ed90: 14 c0 rjmp .+40 ; 0xedba <HoTT_Menu+0x217c>
}
else
{
HoTT_printfxy(10,3," --")
ed92: 89 e4 ldi r24, 0x49 ; 73
ed94: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ed98: 89 ee ldi r24, 0xE9 ; 233
ed9a: 95 e0 ldi r25, 0x05 ; 5
ed9c: 9f 93 push r25
ed9e: 8f 93 push r24
eda0: 8b e0 ldi r24, 0x0B ; 11
eda2: 95 e1 ldi r25, 0x15 ; 21
eda4: 9f 93 push r25
eda6: 8f 93 push r24
eda8: e0 91 78 06 lds r30, 0x0678
edac: f0 91 79 06 lds r31, 0x0679
edb0: 09 95 icall
edb2: 0f 90 pop r0
edb4: 0f 90 pop r0
edb6: 0f 90 pop r0
edb8: 0f 90 pop r0
}
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,4,"No SD-Card ")
edba: 80 91 89 04 lds r24, 0x0489
edbe: 81 11 cpse r24, r1
edc0: 15 c0 rjmp .+42 ; 0xedec <HoTT_Menu+0x21ae>
edc2: 84 e5 ldi r24, 0x54 ; 84
edc4: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
edc8: 8b ed ldi r24, 0xDB ; 219
edca: 95 e0 ldi r25, 0x05 ; 5
edcc: 9f 93 push r25
edce: 8f 93 push r24
edd0: 8b e0 ldi r24, 0x0B ; 11
edd2: 95 e1 ldi r25, 0x15 ; 21
edd4: 9f 93 push r25
edd6: 8f 93 push r24
edd8: e0 91 78 06 lds r30, 0x0678
eddc: f0 91 79 06 lds r31, 0x0679
ede0: 09 95 icall
ede2: 0f 90 pop r0
ede4: 0f 90 pop r0
ede6: 0f 90 pop r0
ede8: 0f 90 pop r0
edea: 31 c0 rjmp .+98 ; 0xee4e <HoTT_Menu+0x2210>
else
{
if(changed && load_waypoint_tmp) HoTT_printfxy(0,4,"(Set -> Load)")
edec: 80 91 70 04 lds r24, 0x0470
edf0: 88 23 and r24, r24
edf2: c9 f0 breq .+50 ; 0xee26 <HoTT_Menu+0x21e8>
edf4: 80 91 55 01 lds r24, 0x0155
edf8: 88 23 and r24, r24
edfa: a9 f0 breq .+42 ; 0xee26 <HoTT_Menu+0x21e8>
edfc: 84 e5 ldi r24, 0x54 ; 84
edfe: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ee02: 8d ec ldi r24, 0xCD ; 205
ee04: 95 e0 ldi r25, 0x05 ; 5
ee06: 9f 93 push r25
ee08: 8f 93 push r24
ee0a: 8b e0 ldi r24, 0x0B ; 11
ee0c: 95 e1 ldi r25, 0x15 ; 21
ee0e: 9f 93 push r25
ee10: 8f 93 push r24
ee12: e0 91 78 06 lds r30, 0x0678
ee16: f0 91 79 06 lds r31, 0x0679
ee1a: 09 95 icall
ee1c: 0f 90 pop r0
ee1e: 0f 90 pop r0
ee20: 0f 90 pop r0
ee22: 0f 90 pop r0
ee24: 14 c0 rjmp .+40 ; 0xee4e <HoTT_Menu+0x2210>
else HoTT_printfxy(0,4," ");
ee26: 84 e5 ldi r24, 0x54 ; 84
ee28: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ee2c: 8f eb ldi r24, 0xBF ; 191
ee2e: 95 e0 ldi r25, 0x05 ; 5
ee30: 9f 93 push r25
ee32: 8f 93 push r24
ee34: 8b e0 ldi r24, 0x0B ; 11
ee36: 95 e1 ldi r25, 0x15 ; 21
ee38: 9f 93 push r25
ee3a: 8f 93 push r24
ee3c: e0 91 78 06 lds r30, 0x0678
ee40: f0 91 79 06 lds r31, 0x0679
ee44: 09 95 icall
ee46: 0f 90 pop r0
ee48: 0f 90 pop r0
ee4a: 0f 90 pop r0
ee4c: 0f 90 pop r0
}
if(HottKeyboard == HOTT_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { changed = 1; load_waypoint_tmp++; HoTTBlink = 0;}
ee4e: 80 91 a9 0c lds r24, 0x0CA9
ee52: 84 30 cpi r24, 0x04 ; 4
ee54: 79 f4 brne .+30 ; 0xee74 <HoTT_Menu+0x2236>
ee56: 90 91 55 01 lds r25, 0x0155
ee5a: 20 91 89 04 lds r18, 0x0489
ee5e: 92 17 cp r25, r18
ee60: 10 f5 brcc .+68 ; 0xeea6 <HoTT_Menu+0x2268>
ee62: 21 e0 ldi r18, 0x01 ; 1
ee64: 20 93 70 04 sts 0x0470, r18
ee68: 9f 5f subi r25, 0xFF ; 255
ee6a: 90 93 55 01 sts 0x0155, r25
ee6e: 10 92 ed 02 sts 0x02ED, r1
ee72: 19 c0 rjmp .+50 ; 0xeea6 <HoTT_Menu+0x2268>
if(HottKeyboard == HOTT_KEY_DOWN && load_waypoint_tmp > 1) { changed = 1; load_waypoint_tmp--; HoTTBlink = 0;};
ee74: 82 30 cpi r24, 0x02 ; 2
ee76: 69 f4 brne .+26 ; 0xee92 <HoTT_Menu+0x2254>
ee78: 80 91 55 01 lds r24, 0x0155
ee7c: 82 30 cpi r24, 0x02 ; 2
ee7e: f0 f0 brcs .+60 ; 0xeebc <HoTT_Menu+0x227e>
ee80: 91 e0 ldi r25, 0x01 ; 1
ee82: 90 93 70 04 sts 0x0470, r25
ee86: 81 50 subi r24, 0x01 ; 1
ee88: 80 93 55 01 sts 0x0155, r24
ee8c: 10 92 ed 02 sts 0x02ED, r1
ee90: 15 c0 rjmp .+42 ; 0xeebc <HoTT_Menu+0x227e>
if(HottKeyboard == HOTT_KEY_SET) { if(load_waypoint_tmp) ToNC_Load_WP_List = load_waypoint_tmp; changed = 0;}
ee92: 86 30 cpi r24, 0x06 ; 6
ee94: 41 f4 brne .+16 ; 0xeea6 <HoTT_Menu+0x2268>
ee96: 80 91 55 01 lds r24, 0x0155
ee9a: 81 11 cpse r24, r1
ee9c: 80 93 8a 04 sts 0x048A, r24
eea0: 10 92 70 04 sts 0x0470, r1
eea4: 0b c0 rjmp .+22 ; 0xeebc <HoTT_Menu+0x227e>
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page++; line = 0;}
eea6: 88 30 cpi r24, 0x08 ; 8
eea8: 49 f4 brne .+18 ; 0xeebc <HoTT_Menu+0x227e>
eeaa: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
eeae: 80 91 76 04 lds r24, 0x0476
eeb2: 8f 5f subi r24, 0xFF ; 255
eeb4: 80 93 76 04 sts 0x0476, r24
eeb8: 10 92 75 04 sts 0x0475, r1
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page--; line = 0;};
eebc: 80 91 a9 0c lds r24, 0x0CA9
eec0: 81 30 cpi r24, 0x01 ; 1
eec2: 49 f4 brne .+18 ; 0xeed6 <HoTT_Menu+0x2298>
eec4: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
eec8: 80 91 76 04 lds r24, 0x0476
eecc: 81 50 subi r24, 0x01 ; 1
eece: 80 93 76 04 sts 0x0476, r24
eed2: 10 92 75 04 sts 0x0475, r1
HottKeyboard = 0;
eed6: 10 92 a9 0c sts 0x0CA9, r1
break;
eeda: 2b c4 rjmp .+2134 ; 0xf732 <HoTT_Menu+0x2af4>
default: line = 0;
eedc: 10 92 75 04 sts 0x0475, r1
break;
eee0: 28 c4 rjmp .+2128 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 5:
switch(line++)
eee2: 80 91 75 04 lds r24, 0x0475
eee6: 91 e0 ldi r25, 0x01 ; 1
eee8: 98 0f add r25, r24
eeea: 90 93 75 04 sts 0x0475, r25
eeee: 82 30 cpi r24, 0x02 ; 2
eef0: 09 f4 brne .+2 ; 0xeef4 <HoTT_Menu+0x22b6>
eef2: 81 c0 rjmp .+258 ; 0xeff6 <HoTT_Menu+0x23b8>
eef4: 28 f4 brcc .+10 ; 0xef00 <HoTT_Menu+0x22c2>
eef6: 88 23 and r24, r24
eef8: 39 f0 breq .+14 ; 0xef08 <HoTT_Menu+0x22ca>
eefa: 81 30 cpi r24, 0x01 ; 1
eefc: d1 f0 breq .+52 ; 0xef32 <HoTT_Menu+0x22f4>
eefe: c9 c1 rjmp .+914 ; 0xf292 <HoTT_Menu+0x2654>
ef00: 86 30 cpi r24, 0x06 ; 6
ef02: 08 f4 brcc .+2 ; 0xef06 <HoTT_Menu+0x22c8>
ef04: c7 c0 rjmp .+398 ; 0xf094 <HoTT_Menu+0x2456>
ef06: c5 c1 rjmp .+906 ; 0xf292 <HoTT_Menu+0x2654>
{
static unsigned char wp_tmp, changed;
case 0:
HoTT_printfxy(0,0,"Store single Position");
ef08: 80 e0 ldi r24, 0x00 ; 0
ef0a: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ef0e: 89 ea ldi r24, 0xA9 ; 169
ef10: 95 e0 ldi r25, 0x05 ; 5
ef12: 9f 93 push r25
ef14: 8f 93 push r24
ef16: 8b e0 ldi r24, 0x0B ; 11
ef18: 95 e1 ldi r25, 0x15 ; 21
ef1a: 9f 93 push r25
ef1c: 8f 93 push r24
ef1e: e0 91 78 06 lds r30, 0x0678
ef22: f0 91 79 06 lds r31, 0x0679
ef26: 09 95 icall
// HoTT_printfxy(0,1,"(Fixed Positions)");
break;
ef28: 0f 90 pop r0
ef2a: 0f 90 pop r0
ef2c: 0f 90 pop r0
ef2e: 0f 90 pop r0
ef30: 00 c4 rjmp .+2048 ; 0xf732 <HoTT_Menu+0x2af4>
case 1:
HoTT_printfxy(0,2," %2i.%1iV ",UBat/10, UBat%10)
ef32: 8a e2 ldi r24, 0x2A ; 42
ef34: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ef38: 80 91 1a 01 lds r24, 0x011A
ef3c: 90 91 1b 01 lds r25, 0x011B
ef40: e0 91 1a 01 lds r30, 0x011A
ef44: f0 91 1b 01 lds r31, 0x011B
ef48: 2a e0 ldi r18, 0x0A ; 10
ef4a: 30 e0 ldi r19, 0x00 ; 0
ef4c: b9 01 movw r22, r18
ef4e: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
ef52: 9f 93 push r25
ef54: 8f 93 push r24
ef56: cf 01 movw r24, r30
ef58: b9 01 movw r22, r18
ef5a: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
ef5e: 7f 93 push r23
ef60: 6f 93 push r22
ef62: 8e e9 ldi r24, 0x9E ; 158
ef64: 95 e0 ldi r25, 0x05 ; 5
ef66: 9f 93 push r25
ef68: 8f 93 push r24
ef6a: 0b e0 ldi r16, 0x0B ; 11
ef6c: 15 e1 ldi r17, 0x15 ; 21
ef6e: 1f 93 push r17
ef70: 0f 93 push r16
ef72: e0 91 78 06 lds r30, 0x0678
ef76: f0 91 79 06 lds r31, 0x0679
ef7a: 09 95 icall
HoTT_printfxy(0,3," %2i:%02i ",FlugSekunden/60,FlugSekunden%60);
ef7c: 8f e3 ldi r24, 0x3F ; 63
ef7e: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
ef82: 40 91 5e 04 lds r20, 0x045E
ef86: 50 91 5f 04 lds r21, 0x045F
ef8a: 9a 01 movw r18, r20
ef8c: a9 e8 ldi r26, 0x89 ; 137
ef8e: b8 e8 ldi r27, 0x88 ; 136
ef90: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
ef94: 96 95 lsr r25
ef96: 87 95 ror r24
ef98: 92 95 swap r25
ef9a: 82 95 swap r24
ef9c: 8f 70 andi r24, 0x0F ; 15
ef9e: 89 27 eor r24, r25
efa0: 9f 70 andi r25, 0x0F ; 15
efa2: 89 27 eor r24, r25
efa4: 6c e3 ldi r22, 0x3C ; 60
efa6: 68 9f mul r22, r24
efa8: 90 01 movw r18, r0
efaa: 69 9f mul r22, r25
efac: 30 0d add r19, r0
efae: 11 24 eor r1, r1
efb0: ca 01 movw r24, r20
efb2: 82 1b sub r24, r18
efb4: 93 0b sbc r25, r19
efb6: 9f 93 push r25
efb8: 8f 93 push r24
efba: 9a 01 movw r18, r20
efbc: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
efc0: 96 95 lsr r25
efc2: 87 95 ror r24
efc4: 92 95 swap r25
efc6: 82 95 swap r24
efc8: 8f 70 andi r24, 0x0F ; 15
efca: 89 27 eor r24, r25
efcc: 9f 70 andi r25, 0x0F ; 15
efce: 89 27 eor r24, r25
efd0: 9f 93 push r25
efd2: 8f 93 push r24
efd4: 83 e9 ldi r24, 0x93 ; 147
efd6: 95 e0 ldi r25, 0x05 ; 5
efd8: 9f 93 push r25
efda: 8f 93 push r24
efdc: 1f 93 push r17
efde: 0f 93 push r16
efe0: e0 91 78 06 lds r30, 0x0678
efe4: f0 91 79 06 lds r31, 0x0679
efe8: 09 95 icall
// HoTT_printfxy(0,4,"Dist:%3dm",NaviData_TargetDistance)
break;
efea: 0f b6 in r0, 0x3f ; 63
efec: f8 94 cli
efee: de bf out 0x3e, r29 ; 62
eff0: 0f be out 0x3f, r0 ; 63
eff2: cd bf out 0x3d, r28 ; 61
eff4: 9e c3 rjmp .+1852 ; 0xf732 <HoTT_Menu+0x2af4>
case 2:
HoTT_printfxy(11,2,"ALT:%4im", (int16_t)(HoehenWert/100))
eff6: 85 e3 ldi r24, 0x35 ; 53
eff8: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
effc: 60 91 fe 03 lds r22, 0x03FE
f000: 70 91 ff 03 lds r23, 0x03FF
f004: 80 91 00 04 lds r24, 0x0400
f008: 90 91 01 04 lds r25, 0x0401
f00c: 24 e6 ldi r18, 0x64 ; 100
f00e: 30 e0 ldi r19, 0x00 ; 0
f010: 40 e0 ldi r20, 0x00 ; 0
f012: 50 e0 ldi r21, 0x00 ; 0
f014: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
f018: 3f 93 push r19
f01a: 2f 93 push r18
f01c: 8a e8 ldi r24, 0x8A ; 138
f01e: 95 e0 ldi r25, 0x05 ; 5
f020: 9f 93 push r25
f022: 8f 93 push r24
f024: 0b e0 ldi r16, 0x0B ; 11
f026: 15 e1 ldi r17, 0x15 ; 21
f028: 1f 93 push r17
f02a: 0f 93 push r16
f02c: e0 91 78 06 lds r30, 0x0678
f030: f0 91 79 06 lds r31, 0x0679
f034: 09 95 icall
HoTT_printfxy(11,3,"DIR: %3d%c",CompassCorrected, HoTT_GRAD);
f036: 8a e4 ldi r24, 0x4A ; 74
f038: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f03c: 1f 92 push r1
f03e: 80 e6 ldi r24, 0x60 ; 96
f040: 8f 93 push r24
f042: 80 91 66 06 lds r24, 0x0666
f046: 8f 93 push r24
f048: 80 91 65 06 lds r24, 0x0665
f04c: 8f 93 push r24
f04e: 8f e7 ldi r24, 0x7F ; 127
f050: 95 e0 ldi r25, 0x05 ; 5
f052: 9f 93 push r25
f054: 8f 93 push r24
f056: 1f 93 push r17
f058: 0f 93 push r16
f05a: e0 91 78 06 lds r30, 0x0678
f05e: f0 91 79 06 lds r31, 0x0679
f062: 09 95 icall
HoTT_printfxy(11,4,"Cam: %3i",Parameter_ServoNickControl);
f064: 8f e5 ldi r24, 0x5F ; 95
f066: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f06a: 80 91 2f 01 lds r24, 0x012F
f06e: 1f 92 push r1
f070: 8f 93 push r24
f072: 86 e7 ldi r24, 0x76 ; 118
f074: 95 e0 ldi r25, 0x05 ; 5
f076: 9f 93 push r25
f078: 8f 93 push r24
f07a: 1f 93 push r17
f07c: 0f 93 push r16
f07e: e0 91 78 06 lds r30, 0x0678
f082: f0 91 79 06 lds r31, 0x0679
f086: 09 95 icall
break;
f088: 0f b6 in r0, 0x3f ; 63
f08a: f8 94 cli
f08c: de bf out 0x3e, r29 ; 62
f08e: 0f be out 0x3f, r0 ; 63
f090: cd bf out 0x3d, r28 ; 61
f092: 4f c3 rjmp .+1694 ; 0xf732 <HoTT_Menu+0x2af4>
case 3:
case 4:
case 5:
HoTT_printfxy(0,6,"Store point:")
f094: 8e e7 ldi r24, 0x7E ; 126
f096: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f09a: 89 e6 ldi r24, 0x69 ; 105
f09c: 95 e0 ldi r25, 0x05 ; 5
f09e: 9f 93 push r25
f0a0: 8f 93 push r24
f0a2: 8b e0 ldi r24, 0x0B ; 11
f0a4: 95 e1 ldi r25, 0x15 ; 21
f0a6: 9f 93 push r25
f0a8: 8f 93 push r24
f0aa: e0 91 78 06 lds r30, 0x0678
f0ae: f0 91 79 06 lds r31, 0x0679
f0b2: 09 95 icall
if(wp_tmp)
f0b4: 0f 90 pop r0
f0b6: 0f 90 pop r0
f0b8: 0f 90 pop r0
f0ba: 0f 90 pop r0
f0bc: 80 91 6f 04 lds r24, 0x046F
f0c0: 88 23 and r24, r24
f0c2: c1 f1 breq .+112 ; 0xf134 <HoTT_Menu+0x24f6>
{
if(changed && HoTTBlink) HoTT_printfxy(13,6," ")
f0c4: 80 91 6e 04 lds r24, 0x046E
f0c8: 88 23 and r24, r24
f0ca: c9 f0 breq .+50 ; 0xf0fe <HoTT_Menu+0x24c0>
f0cc: 80 91 ed 02 lds r24, 0x02ED
f0d0: 88 23 and r24, r24
f0d2: a9 f0 breq .+42 ; 0xf0fe <HoTT_Menu+0x24c0>
f0d4: 8b e8 ldi r24, 0x8B ; 139
f0d6: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f0da: 85 e6 ldi r24, 0x65 ; 101
f0dc: 95 e0 ldi r25, 0x05 ; 5
f0de: 9f 93 push r25
f0e0: 8f 93 push r24
f0e2: 8b e0 ldi r24, 0x0B ; 11
f0e4: 95 e1 ldi r25, 0x15 ; 21
f0e6: 9f 93 push r25
f0e8: 8f 93 push r24
f0ea: e0 91 78 06 lds r30, 0x0678
f0ee: f0 91 79 06 lds r31, 0x0679
f0f2: 09 95 icall
f0f4: 0f 90 pop r0
f0f6: 0f 90 pop r0
f0f8: 0f 90 pop r0
f0fa: 0f 90 pop r0
f0fc: 2f c0 rjmp .+94 ; 0xf15c <HoTT_Menu+0x251e>
else HoTT_printfxy(13,6,"%2d ",wp_tmp);
f0fe: 8b e8 ldi r24, 0x8B ; 139
f100: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f104: 80 91 6f 04 lds r24, 0x046F
f108: 1f 92 push r1
f10a: 8f 93 push r24
f10c: 80 e6 ldi r24, 0x60 ; 96
f10e: 95 e0 ldi r25, 0x05 ; 5
f110: 9f 93 push r25
f112: 8f 93 push r24
f114: 8b e0 ldi r24, 0x0B ; 11
f116: 95 e1 ldi r25, 0x15 ; 21
f118: 9f 93 push r25
f11a: 8f 93 push r24
f11c: e0 91 78 06 lds r30, 0x0678
f120: f0 91 79 06 lds r31, 0x0679
f124: 09 95 icall
f126: 0f 90 pop r0
f128: 0f 90 pop r0
f12a: 0f 90 pop r0
f12c: 0f 90 pop r0
f12e: 0f 90 pop r0
f130: 0f 90 pop r0
f132: 14 c0 rjmp .+40 ; 0xf15c <HoTT_Menu+0x251e>
}
else
{
HoTT_printfxy(13,6,"--")
f134: 8b e8 ldi r24, 0x8B ; 139
f136: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f13a: 8d e5 ldi r24, 0x5D ; 93
f13c: 95 e0 ldi r25, 0x05 ; 5
f13e: 9f 93 push r25
f140: 8f 93 push r24
f142: 8b e0 ldi r24, 0x0B ; 11
f144: 95 e1 ldi r25, 0x15 ; 21
f146: 9f 93 push r25
f148: 8f 93 push r24
f14a: e0 91 78 06 lds r30, 0x0678
f14e: f0 91 79 06 lds r31, 0x0679
f152: 09 95 icall
f154: 0f 90 pop r0
f156: 0f 90 pop r0
f158: 0f 90 pop r0
f15a: 0f 90 pop r0
}
if(GPSInfo.SatFix == SATFIX_3D)
f15c: 80 91 d9 08 lds r24, 0x08D9
f160: 83 30 cpi r24, 0x03 ; 3
f162: 09 f0 breq .+2 ; 0xf166 <HoTT_Menu+0x2528>
f164: 45 c0 rjmp .+138 ; 0xf1f0 <HoTT_Menu+0x25b2>
{
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,7,"No SD-Card ")
f166: 80 91 89 04 lds r24, 0x0489
f16a: 81 11 cpse r24, r1
f16c: 15 c0 rjmp .+42 ; 0xf198 <HoTT_Menu+0x255a>
f16e: 83 e9 ldi r24, 0x93 ; 147
f170: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f174: 8f e4 ldi r24, 0x4F ; 79
f176: 95 e0 ldi r25, 0x05 ; 5
f178: 9f 93 push r25
f17a: 8f 93 push r24
f17c: 8b e0 ldi r24, 0x0B ; 11
f17e: 95 e1 ldi r25, 0x15 ; 21
f180: 9f 93 push r25
f182: 8f 93 push r24
f184: e0 91 78 06 lds r30, 0x0678
f188: f0 91 79 06 lds r31, 0x0679
f18c: 09 95 icall
f18e: 0f 90 pop r0
f190: 0f 90 pop r0
f192: 0f 90 pop r0
f194: 0f 90 pop r0
f196: 20 c0 rjmp .+64 ; 0xf1d8 <HoTT_Menu+0x259a>
else
{
if(changed && wp_tmp) HoTT_printfxy(0,7,"(Set -> Store)")
f198: 80 91 6e 04 lds r24, 0x046E
f19c: 88 23 and r24, r24
f19e: c9 f0 breq .+50 ; 0xf1d2 <HoTT_Menu+0x2594>
f1a0: 80 91 6f 04 lds r24, 0x046F
f1a4: 88 23 and r24, r24
f1a6: a9 f0 breq .+42 ; 0xf1d2 <HoTT_Menu+0x2594>
f1a8: 83 e9 ldi r24, 0x93 ; 147
f1aa: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f1ae: 80 e4 ldi r24, 0x40 ; 64
f1b0: 95 e0 ldi r25, 0x05 ; 5
f1b2: 9f 93 push r25
f1b4: 8f 93 push r24
f1b6: 8b e0 ldi r24, 0x0B ; 11
f1b8: 95 e1 ldi r25, 0x15 ; 21
f1ba: 9f 93 push r25
f1bc: 8f 93 push r24
f1be: e0 91 78 06 lds r30, 0x0678
f1c2: f0 91 79 06 lds r31, 0x0679
f1c6: 09 95 icall
f1c8: 0f 90 pop r0
f1ca: 0f 90 pop r0
f1cc: 0f 90 pop r0
f1ce: 0f 90 pop r0
f1d0: 03 c0 rjmp .+6 ; 0xf1d8 <HoTT_Menu+0x259a>
else Hott_ClearLine(7);
f1d2: 87 e0 ldi r24, 0x07 ; 7
f1d4: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
}
if(HottKeyboard == HOTT_KEY_SET) { if(wp_tmp) ToNC_Store_SingePoint = wp_tmp; changed = 0;}
f1d8: 80 91 a9 0c lds r24, 0x0CA9
f1dc: 86 30 cpi r24, 0x06 ; 6
f1de: e1 f4 brne .+56 ; 0xf218 <HoTT_Menu+0x25da>
f1e0: 80 91 6f 04 lds r24, 0x046F
f1e4: 81 11 cpse r24, r1
f1e6: 80 93 87 04 sts 0x0487, r24
f1ea: 10 92 6e 04 sts 0x046E, r1
f1ee: 14 c0 rjmp .+40 ; 0xf218 <HoTT_Menu+0x25da>
}
else HoTT_printfxy(0,7,"!No GPS-Fix! ");
f1f0: 83 e9 ldi r24, 0x93 ; 147
f1f2: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f1f6: 82 e3 ldi r24, 0x32 ; 50
f1f8: 95 e0 ldi r25, 0x05 ; 5
f1fa: 9f 93 push r25
f1fc: 8f 93 push r24
f1fe: 8b e0 ldi r24, 0x0B ; 11
f200: 95 e1 ldi r25, 0x15 ; 21
f202: 9f 93 push r25
f204: 8f 93 push r24
f206: e0 91 78 06 lds r30, 0x0678
f20a: f0 91 79 06 lds r31, 0x0679
f20e: 09 95 icall
f210: 0f 90 pop r0
f212: 0f 90 pop r0
f214: 0f 90 pop r0
f216: 0f 90 pop r0
if(HottKeyboard == HOTT_KEY_UP && wp_tmp < NaviData_MaxWpListIndex) { changed = 1; wp_tmp++; HoTTBlink = 0;}
f218: 80 91 a9 0c lds r24, 0x0CA9
f21c: 84 30 cpi r24, 0x04 ; 4
f21e: 79 f4 brne .+30 ; 0xf23e <HoTT_Menu+0x2600>
f220: 80 91 6f 04 lds r24, 0x046F
f224: 90 91 89 04 lds r25, 0x0489
f228: 89 17 cp r24, r25
f22a: 18 f5 brcc .+70 ; 0xf272 <HoTT_Menu+0x2634>
f22c: 91 e0 ldi r25, 0x01 ; 1
f22e: 90 93 6e 04 sts 0x046E, r25
f232: 8f 5f subi r24, 0xFF ; 255
f234: 80 93 6f 04 sts 0x046F, r24
f238: 10 92 ed 02 sts 0x02ED, r1
f23c: 1a c0 rjmp .+52 ; 0xf272 <HoTT_Menu+0x2634>
if(HottKeyboard == HOTT_KEY_DOWN && wp_tmp > 1) { changed = 1; wp_tmp--; HoTTBlink = 0;};
f23e: 82 30 cpi r24, 0x02 ; 2
f240: 69 f4 brne .+26 ; 0xf25c <HoTT_Menu+0x261e>
f242: 80 91 6f 04 lds r24, 0x046F
f246: 82 30 cpi r24, 0x02 ; 2
f248: a0 f0 brcs .+40 ; 0xf272 <HoTT_Menu+0x2634>
f24a: 91 e0 ldi r25, 0x01 ; 1
f24c: 90 93 6e 04 sts 0x046E, r25
f250: 81 50 subi r24, 0x01 ; 1
f252: 80 93 6f 04 sts 0x046F, r24
f256: 10 92 ed 02 sts 0x02ED, r1
f25a: 0b c0 rjmp .+22 ; 0xf272 <HoTT_Menu+0x2634>
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page++; line = 0;}
f25c: 88 30 cpi r24, 0x08 ; 8
f25e: 49 f4 brne .+18 ; 0xf272 <HoTT_Menu+0x2634>
f260: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
f264: 80 91 76 04 lds r24, 0x0476
f268: 8f 5f subi r24, 0xFF ; 255
f26a: 80 93 76 04 sts 0x0476, r24
f26e: 10 92 75 04 sts 0x0475, r1
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page--; line = 0;};
f272: 80 91 a9 0c lds r24, 0x0CA9
f276: 81 30 cpi r24, 0x01 ; 1
f278: 49 f4 brne .+18 ; 0xf28c <HoTT_Menu+0x264e>
f27a: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
f27e: 80 91 76 04 lds r24, 0x0476
f282: 81 50 subi r24, 0x01 ; 1
f284: 80 93 76 04 sts 0x0476, r24
f288: 10 92 75 04 sts 0x0475, r1
HottKeyboard = 0;
f28c: 10 92 a9 0c sts 0x0CA9, r1
break;
f290: 50 c2 rjmp .+1184 ; 0xf732 <HoTT_Menu+0x2af4>
default: line = 0;
f292: 10 92 75 04 sts 0x0475, r1
break;
f296: 4d c2 rjmp .+1178 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
case 6:
switch(line++)
f298: 80 91 75 04 lds r24, 0x0475
f29c: 91 e0 ldi r25, 0x01 ; 1
f29e: 98 0f add r25, r24
f2a0: 90 93 75 04 sts 0x0475, r25
f2a4: 82 30 cpi r24, 0x02 ; 2
f2a6: 09 f4 brne .+2 ; 0xf2aa <HoTT_Menu+0x266c>
f2a8: ab c0 rjmp .+342 ; 0xf400 <HoTT_Menu+0x27c2>
f2aa: 28 f4 brcc .+10 ; 0xf2b6 <HoTT_Menu+0x2678>
f2ac: 88 23 and r24, r24
f2ae: 39 f0 breq .+14 ; 0xf2be <HoTT_Menu+0x2680>
f2b0: 81 30 cpi r24, 0x01 ; 1
f2b2: d1 f0 breq .+52 ; 0xf2e8 <HoTT_Menu+0x26aa>
f2b4: 39 c2 rjmp .+1138 ; 0xf728 <HoTT_Menu+0x2aea>
f2b6: 86 30 cpi r24, 0x06 ; 6
f2b8: 08 f4 brcc .+2 ; 0xf2bc <HoTT_Menu+0x267e>
f2ba: 36 c1 rjmp .+620 ; 0xf528 <HoTT_Menu+0x28ea>
f2bc: 35 c2 rjmp .+1130 ; 0xf728 <HoTT_Menu+0x2aea>
{
static unsigned char wp_tmp, changed;
case 0:
HoTT_printfxy(0,0,"Load single Position");
f2be: 80 e0 ldi r24, 0x00 ; 0
f2c0: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f2c4: 8d e1 ldi r24, 0x1D ; 29
f2c6: 95 e0 ldi r25, 0x05 ; 5
f2c8: 9f 93 push r25
f2ca: 8f 93 push r24
f2cc: 8b e0 ldi r24, 0x0B ; 11
f2ce: 95 e1 ldi r25, 0x15 ; 21
f2d0: 9f 93 push r25
f2d2: 8f 93 push r24
f2d4: e0 91 78 06 lds r30, 0x0678
f2d8: f0 91 79 06 lds r31, 0x0679
f2dc: 09 95 icall
// HoTT_printfxy(0,1,"(Fixed Positions)");
break;
f2de: 0f 90 pop r0
f2e0: 0f 90 pop r0
f2e2: 0f 90 pop r0
f2e4: 0f 90 pop r0
f2e6: 25 c2 rjmp .+1098 ; 0xf732 <HoTT_Menu+0x2af4>
case 1:
HoTT_printfxy(0,2," %2i.%1iV ",UBat/10, UBat%10)
f2e8: 8a e2 ldi r24, 0x2A ; 42
f2ea: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f2ee: 80 91 1a 01 lds r24, 0x011A
f2f2: 90 91 1b 01 lds r25, 0x011B
f2f6: e0 91 1a 01 lds r30, 0x011A
f2fa: f0 91 1b 01 lds r31, 0x011B
f2fe: 2a e0 ldi r18, 0x0A ; 10
f300: 30 e0 ldi r19, 0x00 ; 0
f302: b9 01 movw r22, r18
f304: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
f308: 9f 93 push r25
f30a: 8f 93 push r24
f30c: cf 01 movw r24, r30
f30e: b9 01 movw r22, r18
f310: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
f314: 7f 93 push r23
f316: 6f 93 push r22
f318: 82 e1 ldi r24, 0x12 ; 18
f31a: 95 e0 ldi r25, 0x05 ; 5
f31c: 9f 93 push r25
f31e: 8f 93 push r24
f320: 0b e0 ldi r16, 0x0B ; 11
f322: 15 e1 ldi r17, 0x15 ; 21
f324: 1f 93 push r17
f326: 0f 93 push r16
f328: e0 91 78 06 lds r30, 0x0678
f32c: f0 91 79 06 lds r31, 0x0679
f330: 09 95 icall
HoTT_printfxy(0,3," %2i:%02i ",FlugSekunden/60,FlugSekunden%60);
f332: 8f e3 ldi r24, 0x3F ; 63
f334: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f338: 40 91 5e 04 lds r20, 0x045E
f33c: 50 91 5f 04 lds r21, 0x045F
f340: 9a 01 movw r18, r20
f342: a9 e8 ldi r26, 0x89 ; 137
f344: b8 e8 ldi r27, 0x88 ; 136
f346: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
f34a: 96 95 lsr r25
f34c: 87 95 ror r24
f34e: 92 95 swap r25
f350: 82 95 swap r24
f352: 8f 70 andi r24, 0x0F ; 15
f354: 89 27 eor r24, r25
f356: 9f 70 andi r25, 0x0F ; 15
f358: 89 27 eor r24, r25
f35a: 6c e3 ldi r22, 0x3C ; 60
f35c: 68 9f mul r22, r24
f35e: 90 01 movw r18, r0
f360: 69 9f mul r22, r25
f362: 30 0d add r19, r0
f364: 11 24 eor r1, r1
f366: ca 01 movw r24, r20
f368: 82 1b sub r24, r18
f36a: 93 0b sbc r25, r19
f36c: 9f 93 push r25
f36e: 8f 93 push r24
f370: 9a 01 movw r18, r20
f372: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
f376: 96 95 lsr r25
f378: 87 95 ror r24
f37a: 92 95 swap r25
f37c: 82 95 swap r24
f37e: 8f 70 andi r24, 0x0F ; 15
f380: 89 27 eor r24, r25
f382: 9f 70 andi r25, 0x0F ; 15
f384: 89 27 eor r24, r25
f386: 9f 93 push r25
f388: 8f 93 push r24
f38a: 87 e0 ldi r24, 0x07 ; 7
f38c: 95 e0 ldi r25, 0x05 ; 5
f38e: 9f 93 push r25
f390: 8f 93 push r24
f392: 1f 93 push r17
f394: 0f 93 push r16
f396: e0 91 78 06 lds r30, 0x0678
f39a: f0 91 79 06 lds r31, 0x0679
f39e: 09 95 icall
// HoTT_printfxy(0,4,"Dist:%3dm",NaviData_TargetDistance)
if(NaviData_WaypointNumber) HoTT_printfxy(0,5,"WP:%2d/%d Dist:%3dm ",NaviData_WaypointIndex,NaviData_WaypointNumber,NaviData_TargetDistance)
f3a0: 0f b6 in r0, 0x3f ; 63
f3a2: f8 94 cli
f3a4: de bf out 0x3e, r29 ; 62
f3a6: 0f be out 0x3f, r0 ; 63
f3a8: cd bf out 0x3d, r28 ; 61
f3aa: 80 91 8c 04 lds r24, 0x048C
f3ae: 88 23 and r24, r24
f3b0: 19 f1 breq .+70 ; 0xf3f8 <HoTT_Menu+0x27ba>
f3b2: 89 e6 ldi r24, 0x69 ; 105
f3b4: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f3b8: 80 91 86 04 lds r24, 0x0486
f3bc: 8f 93 push r24
f3be: 80 91 85 04 lds r24, 0x0485
f3c2: 8f 93 push r24
f3c4: 80 91 8c 04 lds r24, 0x048C
f3c8: 1f 92 push r1
f3ca: 8f 93 push r24
f3cc: 80 91 8d 04 lds r24, 0x048D
f3d0: 1f 92 push r1
f3d2: 8f 93 push r24
f3d4: 82 ef ldi r24, 0xF2 ; 242
f3d6: 94 e0 ldi r25, 0x04 ; 4
f3d8: 9f 93 push r25
f3da: 8f 93 push r24
f3dc: c8 01 movw r24, r16
f3de: 9f 93 push r25
f3e0: 0f 93 push r16
f3e2: e0 91 78 06 lds r30, 0x0678
f3e6: f0 91 79 06 lds r31, 0x0679
f3ea: 09 95 icall
f3ec: 0f b6 in r0, 0x3f ; 63
f3ee: f8 94 cli
f3f0: de bf out 0x3e, r29 ; 62
f3f2: 0f be out 0x3f, r0 ; 63
f3f4: cd bf out 0x3d, r28 ; 61
f3f6: 9d c1 rjmp .+826 ; 0xf732 <HoTT_Menu+0x2af4>
else Hott_ClearLine(5);
f3f8: 85 e0 ldi r24, 0x05 ; 5
f3fa: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
f3fe: 99 c1 rjmp .+818 ; 0xf732 <HoTT_Menu+0x2af4>
break;
case 2:
if(FromNC_AltitudeSpeed)
f400: 80 91 f3 03 lds r24, 0x03F3
f404: 88 23 and r24, r24
f406: c9 f1 breq .+114 ; 0xf47a <HoTT_Menu+0x283c>
HoTT_printfxy(8,2,"ALT:%4i/%im ", (int16_t)(HoehenWert/100),(int16_t)(FromNC_AltitudeSetpoint/100))
f408: 82 e3 ldi r24, 0x32 ; 50
f40a: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f40e: 60 91 f4 03 lds r22, 0x03F4
f412: 70 91 f5 03 lds r23, 0x03F5
f416: 80 91 f6 03 lds r24, 0x03F6
f41a: 90 91 f7 03 lds r25, 0x03F7
f41e: 0f 2e mov r0, r31
f420: f4 e6 ldi r31, 0x64 ; 100
f422: cf 2e mov r12, r31
f424: d1 2c mov r13, r1
f426: e1 2c mov r14, r1
f428: f1 2c mov r15, r1
f42a: f0 2d mov r31, r0
f42c: a7 01 movw r20, r14
f42e: 96 01 movw r18, r12
f430: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
f434: 3f 93 push r19
f436: 2f 93 push r18
f438: 60 91 fe 03 lds r22, 0x03FE
f43c: 70 91 ff 03 lds r23, 0x03FF
f440: 80 91 00 04 lds r24, 0x0400
f444: 90 91 01 04 lds r25, 0x0401
f448: a7 01 movw r20, r14
f44a: 96 01 movw r18, r12
f44c: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
f450: 3f 93 push r19
f452: 2f 93 push r18
f454: 85 ee ldi r24, 0xE5 ; 229
f456: 94 e0 ldi r25, 0x04 ; 4
f458: 9f 93 push r25
f45a: 8f 93 push r24
f45c: 8b e0 ldi r24, 0x0B ; 11
f45e: 95 e1 ldi r25, 0x15 ; 21
f460: 9f 93 push r25
f462: 8f 93 push r24
f464: e0 91 78 06 lds r30, 0x0678
f468: f0 91 79 06 lds r31, 0x0679
f46c: 09 95 icall
f46e: 0f b6 in r0, 0x3f ; 63
f470: f8 94 cli
f472: de bf out 0x3e, r29 ; 62
f474: 0f be out 0x3f, r0 ; 63
f476: cd bf out 0x3d, r28 ; 61
f478: 26 c0 rjmp .+76 ; 0xf4c6 <HoTT_Menu+0x2888>
else
HoTT_printfxy(8,2,"ALT:%4im ",(int16_t)(HoehenWert/100))
f47a: 82 e3 ldi r24, 0x32 ; 50
f47c: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f480: 60 91 fe 03 lds r22, 0x03FE
f484: 70 91 ff 03 lds r23, 0x03FF
f488: 80 91 00 04 lds r24, 0x0400
f48c: 90 91 01 04 lds r25, 0x0401
f490: 24 e6 ldi r18, 0x64 ; 100
f492: 30 e0 ldi r19, 0x00 ; 0
f494: 40 e0 ldi r20, 0x00 ; 0
f496: 50 e0 ldi r21, 0x00 ; 0
f498: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
f49c: 3f 93 push r19
f49e: 2f 93 push r18
f4a0: 88 ed ldi r24, 0xD8 ; 216
f4a2: 94 e0 ldi r25, 0x04 ; 4
f4a4: 9f 93 push r25
f4a6: 8f 93 push r24
f4a8: 8b e0 ldi r24, 0x0B ; 11
f4aa: 95 e1 ldi r25, 0x15 ; 21
f4ac: 9f 93 push r25
f4ae: 8f 93 push r24
f4b0: e0 91 78 06 lds r30, 0x0678
f4b4: f0 91 79 06 lds r31, 0x0679
f4b8: 09 95 icall
f4ba: 0f 90 pop r0
f4bc: 0f 90 pop r0
f4be: 0f 90 pop r0
f4c0: 0f 90 pop r0
f4c2: 0f 90 pop r0
f4c4: 0f 90 pop r0
HoTT_printfxy(8,3,"DIR: %3d%c",CompassCorrected, HoTT_GRAD);
f4c6: 87 e4 ldi r24, 0x47 ; 71
f4c8: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f4cc: 1f 92 push r1
f4ce: 80 e6 ldi r24, 0x60 ; 96
f4d0: 8f 93 push r24
f4d2: 80 91 66 06 lds r24, 0x0666
f4d6: 8f 93 push r24
f4d8: 80 91 65 06 lds r24, 0x0665
f4dc: 8f 93 push r24
f4de: 8d ec ldi r24, 0xCD ; 205
f4e0: 94 e0 ldi r25, 0x04 ; 4
f4e2: 9f 93 push r25
f4e4: 8f 93 push r24
f4e6: 0b e0 ldi r16, 0x0B ; 11
f4e8: 15 e1 ldi r17, 0x15 ; 21
f4ea: 1f 93 push r17
f4ec: 0f 93 push r16
f4ee: e0 91 78 06 lds r30, 0x0678
f4f2: f0 91 79 06 lds r31, 0x0679
f4f6: 09 95 icall
HoTT_printfxy(8,4,"Cam: %3i",Parameter_ServoNickControl);
f4f8: 8c e5 ldi r24, 0x5C ; 92
f4fa: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f4fe: 80 91 2f 01 lds r24, 0x012F
f502: 1f 92 push r1
f504: 8f 93 push r24
f506: 84 ec ldi r24, 0xC4 ; 196
f508: 94 e0 ldi r25, 0x04 ; 4
f50a: 9f 93 push r25
f50c: 8f 93 push r24
f50e: 1f 93 push r17
f510: 0f 93 push r16
f512: e0 91 78 06 lds r30, 0x0678
f516: f0 91 79 06 lds r31, 0x0679
f51a: 09 95 icall
break;
f51c: 0f b6 in r0, 0x3f ; 63
f51e: f8 94 cli
f520: de bf out 0x3e, r29 ; 62
f522: 0f be out 0x3f, r0 ; 63
f524: cd bf out 0x3d, r28 ; 61
f526: 05 c1 rjmp .+522 ; 0xf732 <HoTT_Menu+0x2af4>
// HoTT_printfxy(11,7,"%s",WPL_Name)
case 3:
case 4:
case 5:
if(HottKeyboard) DebugOut.Analog[17]++;
f528: 80 91 a9 0c lds r24, 0x0CA9
f52c: 88 23 and r24, r24
f52e: 39 f0 breq .+14 ; 0xf53e <HoTT_Menu+0x2900>
f530: ea e6 ldi r30, 0x6A ; 106
f532: fc e0 ldi r31, 0x0C ; 12
f534: 80 81 ld r24, Z
f536: 91 81 ldd r25, Z+1 ; 0x01
f538: 01 96 adiw r24, 0x01 ; 1
f53a: 91 83 std Z+1, r25 ; 0x01
f53c: 80 83 st Z, r24
HoTT_printfxy(0,6,"load point:")
f53e: 8e e7 ldi r24, 0x7E ; 126
f540: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f544: 88 eb ldi r24, 0xB8 ; 184
f546: 94 e0 ldi r25, 0x04 ; 4
f548: 9f 93 push r25
f54a: 8f 93 push r24
f54c: 8b e0 ldi r24, 0x0B ; 11
f54e: 95 e1 ldi r25, 0x15 ; 21
f550: 9f 93 push r25
f552: 8f 93 push r24
f554: e0 91 78 06 lds r30, 0x0678
f558: f0 91 79 06 lds r31, 0x0679
f55c: 09 95 icall
if(wp_tmp)
f55e: 0f 90 pop r0
f560: 0f 90 pop r0
f562: 0f 90 pop r0
f564: 0f 90 pop r0
f566: 80 91 6d 04 lds r24, 0x046D
f56a: 88 23 and r24, r24
f56c: c1 f1 breq .+112 ; 0xf5de <HoTT_Menu+0x29a0>
{
if(changed && HoTTBlink) HoTT_printfxy(11,6," ")
f56e: 80 91 6c 04 lds r24, 0x046C
f572: 88 23 and r24, r24
f574: c9 f0 breq .+50 ; 0xf5a8 <HoTT_Menu+0x296a>
f576: 80 91 ed 02 lds r24, 0x02ED
f57a: 88 23 and r24, r24
f57c: a9 f0 breq .+42 ; 0xf5a8 <HoTT_Menu+0x296a>
f57e: 89 e8 ldi r24, 0x89 ; 137
f580: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f584: 84 eb ldi r24, 0xB4 ; 180
f586: 94 e0 ldi r25, 0x04 ; 4
f588: 9f 93 push r25
f58a: 8f 93 push r24
f58c: 8b e0 ldi r24, 0x0B ; 11
f58e: 95 e1 ldi r25, 0x15 ; 21
f590: 9f 93 push r25
f592: 8f 93 push r24
f594: e0 91 78 06 lds r30, 0x0678
f598: f0 91 79 06 lds r31, 0x0679
f59c: 09 95 icall
f59e: 0f 90 pop r0
f5a0: 0f 90 pop r0
f5a2: 0f 90 pop r0
f5a4: 0f 90 pop r0
f5a6: 2f c0 rjmp .+94 ; 0xf606 <HoTT_Menu+0x29c8>
else HoTT_printfxy(11,6,"%2d",wp_tmp);
f5a8: 89 e8 ldi r24, 0x89 ; 137
f5aa: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f5ae: 80 91 6d 04 lds r24, 0x046D
f5b2: 1f 92 push r1
f5b4: 8f 93 push r24
f5b6: 80 eb ldi r24, 0xB0 ; 176
f5b8: 94 e0 ldi r25, 0x04 ; 4
f5ba: 9f 93 push r25
f5bc: 8f 93 push r24
f5be: 8b e0 ldi r24, 0x0B ; 11
f5c0: 95 e1 ldi r25, 0x15 ; 21
f5c2: 9f 93 push r25
f5c4: 8f 93 push r24
f5c6: e0 91 78 06 lds r30, 0x0678
f5ca: f0 91 79 06 lds r31, 0x0679
f5ce: 09 95 icall
f5d0: 0f 90 pop r0
f5d2: 0f 90 pop r0
f5d4: 0f 90 pop r0
f5d6: 0f 90 pop r0
f5d8: 0f 90 pop r0
f5da: 0f 90 pop r0
f5dc: 14 c0 rjmp .+40 ; 0xf606 <HoTT_Menu+0x29c8>
}
else
{
HoTT_printfxy(11,6,"--")
f5de: 89 e8 ldi r24, 0x89 ; 137
f5e0: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f5e4: 8d ea ldi r24, 0xAD ; 173
f5e6: 94 e0 ldi r25, 0x04 ; 4
f5e8: 9f 93 push r25
f5ea: 8f 93 push r24
f5ec: 8b e0 ldi r24, 0x0B ; 11
f5ee: 95 e1 ldi r25, 0x15 ; 21
f5f0: 9f 93 push r25
f5f2: 8f 93 push r24
f5f4: e0 91 78 06 lds r30, 0x0678
f5f8: f0 91 79 06 lds r31, 0x0679
f5fc: 09 95 icall
f5fe: 0f 90 pop r0
f600: 0f 90 pop r0
f602: 0f 90 pop r0
f604: 0f 90 pop r0
}
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,7,"No SD-Card ")
f606: 80 91 89 04 lds r24, 0x0489
f60a: 81 11 cpse r24, r1
f60c: 15 c0 rjmp .+42 ; 0xf638 <HoTT_Menu+0x29fa>
f60e: 83 e9 ldi r24, 0x93 ; 147
f610: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f614: 8f e9 ldi r24, 0x9F ; 159
f616: 94 e0 ldi r25, 0x04 ; 4
f618: 9f 93 push r25
f61a: 8f 93 push r24
f61c: 8b e0 ldi r24, 0x0B ; 11
f61e: 95 e1 ldi r25, 0x15 ; 21
f620: 9f 93 push r25
f622: 8f 93 push r24
f624: e0 91 78 06 lds r30, 0x0678
f628: f0 91 79 06 lds r31, 0x0679
f62c: 09 95 icall
f62e: 0f 90 pop r0
f630: 0f 90 pop r0
f632: 0f 90 pop r0
f634: 0f 90 pop r0
f636: 3e c0 rjmp .+124 ; 0xf6b4 <HoTT_Menu+0x2a76>
else
{
if(changed && wp_tmp) HoTT_printfxy(0,7,"(Set -> Load)")
f638: 80 91 6c 04 lds r24, 0x046C
f63c: 88 23 and r24, r24
f63e: c9 f0 breq .+50 ; 0xf672 <HoTT_Menu+0x2a34>
f640: 80 91 6d 04 lds r24, 0x046D
f644: 88 23 and r24, r24
f646: a9 f0 breq .+42 ; 0xf672 <HoTT_Menu+0x2a34>
f648: 83 e9 ldi r24, 0x93 ; 147
f64a: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f64e: 81 e9 ldi r24, 0x91 ; 145
f650: 94 e0 ldi r25, 0x04 ; 4
f652: 9f 93 push r25
f654: 8f 93 push r24
f656: 8b e0 ldi r24, 0x0B ; 11
f658: 95 e1 ldi r25, 0x15 ; 21
f65a: 9f 93 push r25
f65c: 8f 93 push r24
f65e: e0 91 78 06 lds r30, 0x0678
f662: f0 91 79 06 lds r31, 0x0679
f666: 09 95 icall
f668: 0f 90 pop r0
f66a: 0f 90 pop r0
f66c: 0f 90 pop r0
f66e: 0f 90 pop r0
f670: 21 c0 rjmp .+66 ; 0xf6b4 <HoTT_Menu+0x2a76>
else
{
Hott_ClearLine(7);
f672: 87 e0 ldi r24, 0x07 ; 7
f674: 0e 94 b4 60 call 0xc168 ; 0xc168 <Hott_ClearLine>
if(NaviData_WaypointNumber) HoTT_printfxy(0,7,"%s",WPL_Name);
f678: 80 91 8c 04 lds r24, 0x048C
f67c: 88 23 and r24, r24
f67e: d1 f0 breq .+52 ; 0xf6b4 <HoTT_Menu+0x2a76>
f680: 83 e9 ldi r24, 0x93 ; 147
f682: 0e 94 35 15 call 0x2a6a ; 0x2a6a <LIBFC_HoTT_SetPos>
f686: 82 ed ldi r24, 0xD2 ; 210
f688: 96 e0 ldi r25, 0x06 ; 6
f68a: 9f 93 push r25
f68c: 8f 93 push r24
f68e: 8e e8 ldi r24, 0x8E ; 142
f690: 94 e0 ldi r25, 0x04 ; 4
f692: 9f 93 push r25
f694: 8f 93 push r24
f696: 8b e0 ldi r24, 0x0B ; 11
f698: 95 e1 ldi r25, 0x15 ; 21
f69a: 9f 93 push r25
f69c: 8f 93 push r24
f69e: e0 91 78 06 lds r30, 0x0678
f6a2: f0 91 79 06 lds r31, 0x0679
f6a6: 09 95 icall
f6a8: 0f 90 pop r0
f6aa: 0f 90 pop r0
f6ac: 0f 90 pop r0
f6ae: 0f 90 pop r0
f6b0: 0f 90 pop r0
f6b2: 0f 90 pop r0
}
}
if(HottKeyboard == HOTT_KEY_UP && wp_tmp < NaviData_MaxWpListIndex) { changed = 1; wp_tmp++; HoTTBlink = 0;}
f6b4: 80 91 a9 0c lds r24, 0x0CA9
f6b8: 84 30 cpi r24, 0x04 ; 4
f6ba: 79 f4 brne .+30 ; 0xf6da <HoTT_Menu+0x2a9c>
f6bc: 90 91 6d 04 lds r25, 0x046D
f6c0: 20 91 89 04 lds r18, 0x0489
f6c4: 92 17 cp r25, r18
f6c6: 10 f5 brcc .+68 ; 0xf70c <HoTT_Menu+0x2ace>
f6c8: 21 e0 ldi r18, 0x01 ; 1
f6ca: 20 93 6c 04 sts 0x046C, r18
f6ce: 9f 5f subi r25, 0xFF ; 255
f6d0: 90 93 6d 04 sts 0x046D, r25
f6d4: 10 92 ed 02 sts 0x02ED, r1
f6d8: 19 c0 rjmp .+50 ; 0xf70c <HoTT_Menu+0x2ace>
if(HottKeyboard == HOTT_KEY_DOWN && wp_tmp > 1) { changed = 1; wp_tmp--; HoTTBlink = 0;};
f6da: 82 30 cpi r24, 0x02 ; 2
f6dc: 69 f4 brne .+26 ; 0xf6f8 <HoTT_Menu+0x2aba>
f6de: 80 91 6d 04 lds r24, 0x046D
f6e2: 82 30 cpi r24, 0x02 ; 2
f6e4: f0 f0 brcs .+60 ; 0xf722 <HoTT_Menu+0x2ae4>
f6e6: 91 e0 ldi r25, 0x01 ; 1
f6e8: 90 93 6c 04 sts 0x046C, r25
f6ec: 81 50 subi r24, 0x01 ; 1
f6ee: 80 93 6d 04 sts 0x046D, r24
f6f2: 10 92 ed 02 sts 0x02ED, r1
f6f6: 15 c0 rjmp .+42 ; 0xf722 <HoTT_Menu+0x2ae4>
if(HottKeyboard == HOTT_KEY_SET) { if(wp_tmp) ToNC_Load_SingePoint = wp_tmp; changed = 0;}
f6f8: 86 30 cpi r24, 0x06 ; 6
f6fa: 41 f4 brne .+16 ; 0xf70c <HoTT_Menu+0x2ace>
f6fc: 80 91 6d 04 lds r24, 0x046D
f700: 81 11 cpse r24, r1
f702: 80 93 88 04 sts 0x0488, r24
f706: 10 92 6c 04 sts 0x046C, r1
f70a: 0b c0 rjmp .+22 ; 0xf722 <HoTT_Menu+0x2ae4>
// if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page++; line = 0;}
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page--; line = 0;};
f70c: 81 30 cpi r24, 0x01 ; 1
f70e: 49 f4 brne .+18 ; 0xf722 <HoTT_Menu+0x2ae4>
f710: 0e 94 3a 15 call 0x2a74 ; 0x2a74 <LIBFC_HoTT_Clear>
f714: 80 91 76 04 lds r24, 0x0476
f718: 81 50 subi r24, 0x01 ; 1
f71a: 80 93 76 04 sts 0x0476, r24
f71e: 10 92 75 04 sts 0x0475, r1
HottKeyboard = 0;
f722: 10 92 a9 0c sts 0x0CA9, r1
break;
f726: 05 c0 rjmp .+10 ; 0xf732 <HoTT_Menu+0x2af4>
default: line = 0;
f728: 10 92 75 04 sts 0x0475, r1
break;
f72c: 02 c0 rjmp .+4 ; 0xf732 <HoTT_Menu+0x2af4>
}
break;
default: page = 0;
f72e: 10 92 76 04 sts 0x0476, r1
break;
}
}
f732: 0f 90 pop r0
f734: 0f 90 pop r0
f736: 0f 90 pop r0
f738: 0f 90 pop r0
f73a: df 91 pop r29
f73c: cf 91 pop r28
f73e: 1f 91 pop r17
f740: 0f 91 pop r16
f742: ff 90 pop r15
f744: ef 90 pop r14
f746: df 90 pop r13
f748: cf 90 pop r12
f74a: bf 90 pop r11
f74c: af 90 pop r10
f74e: 9f 90 pop r9
f750: 8f 90 pop r8
f752: 7f 90 pop r7
f754: 6f 90 pop r6
f756: 5f 90 pop r5
f758: 4f 90 pop r4
f75a: 3f 90 pop r3
f75c: 2f 90 pop r2
f75e: 08 95 ret
0000f760 <Menu_Temperature>:
#endif
}
void Menu_Temperature(uint8_t key)
{ //0123456789ABCDEF
f760: cf 93 push r28
f762: df 93 push r29
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"%3i %3i %3i %3i", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature);
f764: 80 e0 ldi r24, 0x00 ; 0
f766: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
f76a: 80 91 cb 09 lds r24, 0x09CB
f76e: 1f 92 push r1
f770: 8f 93 push r24
f772: 80 91 bc 09 lds r24, 0x09BC
f776: 1f 92 push r1
f778: 8f 93 push r24
f77a: 80 91 ad 09 lds r24, 0x09AD
f77e: 1f 92 push r1
f780: 8f 93 push r24
f782: 80 91 9e 09 lds r24, 0x099E
f786: 1f 92 push r1
f788: 8f 93 push r24
f78a: 82 e4 ldi r24, 0x42 ; 66
f78c: 90 e1 ldi r25, 0x10 ; 16
f78e: 9f 93 push r25
f790: 8f 93 push r24
f792: ce e6 ldi r28, 0x6E ; 110
f794: df e0 ldi r29, 0x0F ; 15
f796: df 93 push r29
f798: cf 93 push r28
f79a: e0 91 78 06 lds r30, 0x0678
f79e: f0 91 79 06 lds r31, 0x0679
f7a2: 09 95 icall
JetiBox_printfxy(0,1,"%3i %3i %3i %3i", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature);
f7a4: 80 e1 ldi r24, 0x10 ; 16
f7a6: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
f7aa: 80 91 07 0a lds r24, 0x0A07
f7ae: 1f 92 push r1
f7b0: 8f 93 push r24
f7b2: 80 91 f8 09 lds r24, 0x09F8
f7b6: 1f 92 push r1
f7b8: 8f 93 push r24
f7ba: 80 91 e9 09 lds r24, 0x09E9
f7be: 1f 92 push r1
f7c0: 8f 93 push r24
f7c2: 80 91 da 09 lds r24, 0x09DA
f7c6: 1f 92 push r1
f7c8: 8f 93 push r24
f7ca: 82 e3 ldi r24, 0x32 ; 50
f7cc: 90 e1 ldi r25, 0x10 ; 16
f7ce: 9f 93 push r25
f7d0: 8f 93 push r24
f7d2: df 93 push r29
f7d4: cf 93 push r28
f7d6: e0 91 78 06 lds r30, 0x0678
f7da: f0 91 79 06 lds r31, 0x0679
f7de: 09 95 icall
if(RequiredMotors <= 4)
f7e0: 80 91 3d 05 lds r24, 0x053D
f7e4: 2d b7 in r18, 0x3d ; 61
f7e6: 3e b7 in r19, 0x3e ; 62
f7e8: 28 5e subi r18, 0xE8 ; 232
f7ea: 3f 4f sbci r19, 0xFF ; 255
f7ec: 0f b6 in r0, 0x3f ; 63
f7ee: f8 94 cli
f7f0: 3e bf out 0x3e, r19 ; 62
f7f2: 0f be out 0x3f, r0 ; 63
f7f4: 2d bf out 0x3d, r18 ; 61
f7f6: 85 30 cpi r24, 0x05 ; 5
f7f8: a0 f4 brcc .+40 ; 0xf822 <Menu_Temperature+0xc2>
{
JetiBox_printfxy(0,1,"Temperatures ");
f7fa: 80 e1 ldi r24, 0x10 ; 16
f7fc: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
f800: 81 e2 ldi r24, 0x21 ; 33
f802: 90 e1 ldi r25, 0x10 ; 16
f804: 9f 93 push r25
f806: 8f 93 push r24
f808: ce 01 movw r24, r28
f80a: 9f 93 push r25
f80c: cf 93 push r28
f80e: e0 91 78 06 lds r30, 0x0678
f812: f0 91 79 06 lds r31, 0x0679
f816: 09 95 icall
f818: 0f 90 pop r0
f81a: 0f 90 pop r0
f81c: 0f 90 pop r0
f81e: 0f 90 pop r0
f820: 1b c0 rjmp .+54 ; 0xf858 <Menu_Temperature+0xf8>
}
else
if(RequiredMotors <= 6)
f822: 87 30 cpi r24, 0x07 ; 7
f824: c8 f4 brcc .+50 ; 0xf858 <Menu_Temperature+0xf8>
{
JetiBox_printfxy(8,1,"\%cC ",0xdf);
f826: 88 e1 ldi r24, 0x18 ; 24
f828: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
f82c: 1f 92 push r1
f82e: 8f ed ldi r24, 0xDF ; 223
f830: 8f 93 push r24
f832: 88 e1 ldi r24, 0x18 ; 24
f834: 90 e1 ldi r25, 0x10 ; 16
f836: 9f 93 push r25
f838: 8f 93 push r24
f83a: 8e e6 ldi r24, 0x6E ; 110
f83c: 9f e0 ldi r25, 0x0F ; 15
f83e: 9f 93 push r25
f840: 8f 93 push r24
f842: e0 91 78 06 lds r30, 0x0678
f846: f0 91 79 06 lds r31, 0x0679
f84a: 09 95 icall
f84c: 0f 90 pop r0
f84e: 0f 90 pop r0
f850: 0f 90 pop r0
f852: 0f 90 pop r0
f854: 0f 90 pop r0
f856: 0f 90 pop r0
}
#endif
}
f858: df 91 pop r29
f85a: cf 91 pop r28
f85c: 08 95 ret
0000f85e <Menu_Battery>:
void Menu_Battery(uint8_t key)
{ //0123456789ABCDEF
f85e: cf 93 push r28
f860: df 93 push r29
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"%2i.%1iV %3i.%1iA", UBat/10, UBat%10, Capacity.ActualCurrent/10, Capacity.ActualCurrent%10);
f862: 80 e0 ldi r24, 0x00 ; 0
f864: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
f868: 40 91 15 05 lds r20, 0x0515
f86c: 50 91 16 05 lds r21, 0x0516
f870: c0 91 1a 01 lds r28, 0x011A
f874: d0 91 1b 01 lds r29, 0x011B
f878: e0 91 1a 01 lds r30, 0x011A
f87c: f0 91 1b 01 lds r31, 0x011B
f880: 9a 01 movw r18, r20
f882: ad ec ldi r26, 0xCD ; 205
f884: bc ec ldi r27, 0xCC ; 204
f886: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
f88a: 9c 01 movw r18, r24
f88c: 36 95 lsr r19
f88e: 27 95 ror r18
f890: 36 95 lsr r19
f892: 27 95 ror r18
f894: 36 95 lsr r19
f896: 27 95 ror r18
f898: c9 01 movw r24, r18
f89a: 88 0f add r24, r24
f89c: 99 1f adc r25, r25
f89e: 22 0f add r18, r18
f8a0: 33 1f adc r19, r19
f8a2: 22 0f add r18, r18
f8a4: 33 1f adc r19, r19
f8a6: 22 0f add r18, r18
f8a8: 33 1f adc r19, r19
f8aa: 28 0f add r18, r24
f8ac: 39 1f adc r19, r25
f8ae: ca 01 movw r24, r20
f8b0: 82 1b sub r24, r18
f8b2: 93 0b sbc r25, r19
f8b4: 9c 01 movw r18, r24
f8b6: 3f 93 push r19
f8b8: 8f 93 push r24
f8ba: 9a 01 movw r18, r20
f8bc: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
f8c0: 96 95 lsr r25
f8c2: 87 95 ror r24
f8c4: 96 95 lsr r25
f8c6: 87 95 ror r24
f8c8: 96 95 lsr r25
f8ca: 87 95 ror r24
f8cc: 9f 93 push r25
f8ce: 8f 93 push r24
f8d0: 2a e0 ldi r18, 0x0A ; 10
f8d2: 30 e0 ldi r19, 0x00 ; 0
f8d4: ce 01 movw r24, r28
f8d6: b9 01 movw r22, r18
f8d8: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
f8dc: 9f 93 push r25
f8de: 8f 93 push r24
f8e0: cf 01 movw r24, r30
f8e2: b9 01 movw r22, r18
f8e4: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
f8e8: 7f 93 push r23
f8ea: 6f 93 push r22
f8ec: 86 e0 ldi r24, 0x06 ; 6
f8ee: 90 e1 ldi r25, 0x10 ; 16
f8f0: 9f 93 push r25
f8f2: 8f 93 push r24
f8f4: ce e6 ldi r28, 0x6E ; 110
f8f6: df e0 ldi r29, 0x0F ; 15
f8f8: df 93 push r29
f8fa: cf 93 push r28
f8fc: e0 91 78 06 lds r30, 0x0678
f900: f0 91 79 06 lds r31, 0x0679
f904: 09 95 icall
JetiBox_printfxy(0,1,"%4iW %6imAh",Capacity.ActualPower, Capacity.UsedCapacity);
f906: 80 e1 ldi r24, 0x10 ; 16
f908: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
f90c: e9 e1 ldi r30, 0x19 ; 25
f90e: f5 e0 ldi r31, 0x05 ; 5
f910: 81 81 ldd r24, Z+1 ; 0x01
f912: 8f 93 push r24
f914: 80 81 ld r24, Z
f916: 8f 93 push r24
f918: e7 e1 ldi r30, 0x17 ; 23
f91a: f5 e0 ldi r31, 0x05 ; 5
f91c: 81 81 ldd r24, Z+1 ; 0x01
f91e: 8f 93 push r24
f920: 80 81 ld r24, Z
f922: 8f 93 push r24
f924: 8a ef ldi r24, 0xFA ; 250
f926: 9f e0 ldi r25, 0x0F ; 15
f928: 9f 93 push r25
f92a: 8f 93 push r24
f92c: df 93 push r29
f92e: cf 93 push r28
f930: e0 91 78 06 lds r30, 0x0678
f934: f0 91 79 06 lds r31, 0x0679
f938: 09 95 icall
f93a: 8d b7 in r24, 0x3d ; 61
f93c: 9e b7 in r25, 0x3e ; 62
f93e: 44 96 adiw r24, 0x14 ; 20
f940: 0f b6 in r0, 0x3f ; 63
f942: f8 94 cli
f944: 9e bf out 0x3e, r25 ; 62
f946: 0f be out 0x3f, r0 ; 63
f948: 8d bf out 0x3d, r24 ; 61
#endif
}
f94a: df 91 pop r29
f94c: cf 91 pop r28
f94e: 08 95 ret
0000f950 <Magnet_Values>:
void Magnet_Values(uint8_t key)
{ //0123456789ABCDEF
f950: 1f 93 push r17
f952: cf 93 push r28
f954: df 93 push r29
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"Magnet:%3i%% %3i%c",EarthMagneticField, KompassValue,0xDF);
f956: 80 e0 ldi r24, 0x00 ; 0
f958: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
f95c: 1f 92 push r1
f95e: 1f ed ldi r17, 0xDF ; 223
f960: 1f 93 push r17
f962: 80 91 4f 01 lds r24, 0x014F
f966: 8f 93 push r24
f968: 80 91 4e 01 lds r24, 0x014E
f96c: 8f 93 push r24
f96e: 80 91 ba 04 lds r24, 0x04BA
f972: 1f 92 push r1
f974: 8f 93 push r24
f976: 87 ee ldi r24, 0xE7 ; 231
f978: 9f e0 ldi r25, 0x0F ; 15
f97a: 9f 93 push r25
f97c: 8f 93 push r24
f97e: ce e6 ldi r28, 0x6E ; 110
f980: df e0 ldi r29, 0x0F ; 15
f982: df 93 push r29
f984: cf 93 push r28
f986: e0 91 78 06 lds r30, 0x0678
f98a: f0 91 79 06 lds r31, 0x0679
f98e: 09 95 icall
JetiBox_printfxy(0,1,"Incli.:%3i%c (%i) ",EarthMagneticInclination, 0xDF,EarthMagneticInclinationTheoretic);
f990: 80 e1 ldi r24, 0x10 ; 16
f992: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
f996: 80 91 b8 04 lds r24, 0x04B8
f99a: 1f 92 push r1
f99c: 8f 93 push r24
f99e: 1f 92 push r1
f9a0: 1f 93 push r17
f9a2: 80 91 b9 04 lds r24, 0x04B9
f9a6: 1f 92 push r1
f9a8: 8f 93 push r24
f9aa: 84 ed ldi r24, 0xD4 ; 212
f9ac: 9f e0 ldi r25, 0x0F ; 15
f9ae: 9f 93 push r25
f9b0: 8f 93 push r24
f9b2: df 93 push r29
f9b4: cf 93 push r28
f9b6: e0 91 78 06 lds r30, 0x0678
f9ba: f0 91 79 06 lds r31, 0x0679
f9be: 09 95 icall
f9c0: 8d b7 in r24, 0x3d ; 61
f9c2: 9e b7 in r25, 0x3e ; 62
f9c4: 44 96 adiw r24, 0x14 ; 20
f9c6: 0f b6 in r0, 0x3f ; 63
f9c8: f8 94 cli
f9ca: 9e bf out 0x3e, r25 ; 62
f9cc: 0f be out 0x3f, r0 ; 63
f9ce: 8d bf out 0x3d, r24 ; 61
#endif
}
f9d0: df 91 pop r29
f9d2: cf 91 pop r28
f9d4: 1f 91 pop r17
f9d6: 08 95 ret
0000f9d8 <Menu_WPL_A1>:
void Menu_WPL_A1(uint8_t key)
{ //0123456789ABCDEF
f9d8: cf 93 push r28
f9da: df 93 push r29
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"Load Waypoints");
f9dc: 80 e0 ldi r24, 0x00 ; 0
f9de: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
f9e2: 85 ec ldi r24, 0xC5 ; 197
f9e4: 9f e0 ldi r25, 0x0F ; 15
f9e6: 9f 93 push r25
f9e8: 8f 93 push r24
f9ea: ce e6 ldi r28, 0x6E ; 110
f9ec: df e0 ldi r29, 0x0F ; 15
f9ee: df 93 push r29
f9f0: cf 93 push r28
f9f2: e0 91 78 06 lds r30, 0x0678
f9f6: f0 91 79 06 lds r31, 0x0679
f9fa: 09 95 icall
JetiBox_printfxy(0,1,"(Fixed) ");
f9fc: 80 e1 ldi r24, 0x10 ; 16
f9fe: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fa02: 87 eb ldi r24, 0xB7 ; 183
fa04: 9f e0 ldi r25, 0x0F ; 15
fa06: 9f 93 push r25
fa08: 8f 93 push r24
fa0a: df 93 push r29
fa0c: cf 93 push r28
fa0e: e0 91 78 06 lds r30, 0x0678
fa12: f0 91 79 06 lds r31, 0x0679
fa16: 09 95 icall
fa18: 8d b7 in r24, 0x3d ; 61
fa1a: 9e b7 in r25, 0x3e ; 62
fa1c: 08 96 adiw r24, 0x08 ; 8
fa1e: 0f b6 in r0, 0x3f ; 63
fa20: f8 94 cli
fa22: 9e bf out 0x3e, r25 ; 62
fa24: 0f be out 0x3f, r0 ; 63
fa26: 8d bf out 0x3d, r24 ; 61
#endif
}
fa28: df 91 pop r29
fa2a: cf 91 pop r28
fa2c: 08 95 ret
0000fa2e <Menu_WPL_R1>:
void Menu_WPL_R1(uint8_t key)
{ //0123456789ABCDEF
fa2e: cf 93 push r28
fa30: df 93 push r29
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"Load Waypoints");
fa32: 80 e0 ldi r24, 0x00 ; 0
fa34: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fa38: 88 ea ldi r24, 0xA8 ; 168
fa3a: 9f e0 ldi r25, 0x0F ; 15
fa3c: 9f 93 push r25
fa3e: 8f 93 push r24
fa40: ce e6 ldi r28, 0x6E ; 110
fa42: df e0 ldi r29, 0x0F ; 15
fa44: df 93 push r29
fa46: cf 93 push r28
fa48: e0 91 78 06 lds r30, 0x0678
fa4c: f0 91 79 06 lds r31, 0x0679
fa50: 09 95 icall
JetiBox_printfxy(0,1,"(Relative) ");
fa52: 80 e1 ldi r24, 0x10 ; 16
fa54: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fa58: 8a e9 ldi r24, 0x9A ; 154
fa5a: 9f e0 ldi r25, 0x0F ; 15
fa5c: 9f 93 push r25
fa5e: 8f 93 push r24
fa60: df 93 push r29
fa62: cf 93 push r28
fa64: e0 91 78 06 lds r30, 0x0678
fa68: f0 91 79 06 lds r31, 0x0679
fa6c: 09 95 icall
fa6e: 8d b7 in r24, 0x3d ; 61
fa70: 9e b7 in r25, 0x3e ; 62
fa72: 08 96 adiw r24, 0x08 ; 8
fa74: 0f b6 in r0, 0x3f ; 63
fa76: f8 94 cli
fa78: 9e bf out 0x3e, r25 ; 62
fa7a: 0f be out 0x3f, r0 ; 63
fa7c: 8d bf out 0x3d, r24 ; 61
#endif
}
fa7e: df 91 pop r29
fa80: cf 91 pop r28
fa82: 08 95 ret
0000fa84 <Menu_POINT_LD>:
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
void Menu_POINT_LD(uint8_t key)
{ //0123456789ABCDEF
JetiBox_printfxy(0,0,"Load singl.Point");
fa84: 80 e0 ldi r24, 0x00 ; 0
fa86: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fa8a: 89 e8 ldi r24, 0x89 ; 137
fa8c: 9f e0 ldi r25, 0x0F ; 15
fa8e: 9f 93 push r25
fa90: 8f 93 push r24
fa92: 8e e6 ldi r24, 0x6E ; 110
fa94: 9f e0 ldi r25, 0x0F ; 15
fa96: 9f 93 push r25
fa98: 8f 93 push r24
fa9a: e0 91 78 06 lds r30, 0x0678
fa9e: f0 91 79 06 lds r31, 0x0679
faa2: 09 95 icall
faa4: 0f 90 pop r0
faa6: 0f 90 pop r0
faa8: 0f 90 pop r0
faaa: 0f 90 pop r0
faac: 08 95 ret
0000faae <Menu_POINT_SV>:
#endif
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
void Menu_POINT_SV(uint8_t key)
{ //0123456789ABCDEF
JetiBox_printfxy(0,0,"Save singl.Point");
faae: 80 e0 ldi r24, 0x00 ; 0
fab0: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fab4: 88 e7 ldi r24, 0x78 ; 120
fab6: 9f e0 ldi r25, 0x0F ; 15
fab8: 9f 93 push r25
faba: 8f 93 push r24
fabc: 8e e6 ldi r24, 0x6E ; 110
fabe: 9f e0 ldi r25, 0x0F ; 15
fac0: 9f 93 push r25
fac2: 8f 93 push r24
fac4: e0 91 78 06 lds r30, 0x0678
fac8: f0 91 79 06 lds r31, 0x0679
facc: 09 95 icall
face: 0f 90 pop r0
fad0: 0f 90 pop r0
fad2: 0f 90 pop r0
fad4: 0f 90 pop r0
fad6: 08 95 ret
0000fad8 <Menu_POINT_SV2>:
}
#endif
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
void Menu_POINT_SV2(uint8_t key)
{ //0123456789ABCDEF
fad8: 1f 93 push r17
fada: cf 93 push r28
fadc: df 93 push r29
fade: 18 2f mov r17, r24
static unsigned char load_waypoint_tmp = 1, changed;
// if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"Relative WPs ")
// else JetiBox_printfxy(0,0,"Rel:%s",WPL_Name);
JetiBox_printfxy(0,0,"Save Point:");
fae0: 80 e0 ldi r24, 0x00 ; 0
fae2: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fae6: 2c e6 ldi r18, 0x6C ; 108
fae8: 3f e0 ldi r19, 0x0F ; 15
faea: 3f 93 push r19
faec: 2f 93 push r18
faee: 2e e6 ldi r18, 0x6E ; 110
faf0: 3f e0 ldi r19, 0x0F ; 15
faf2: 3f 93 push r19
faf4: 2f 93 push r18
faf6: e0 91 78 06 lds r30, 0x0678
fafa: f0 91 79 06 lds r31, 0x0679
fafe: 09 95 icall
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card")
fb00: 0f 90 pop r0
fb02: 0f 90 pop r0
fb04: 0f 90 pop r0
fb06: 0f 90 pop r0
fb08: 80 91 89 04 lds r24, 0x0489
fb0c: 81 11 cpse r24, r1
fb0e: 15 c0 rjmp .+42 ; 0xfb3a <Menu_POINT_SV2+0x62>
fb10: 80 e1 ldi r24, 0x10 ; 16
fb12: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fb16: 81 e6 ldi r24, 0x61 ; 97
fb18: 9f e0 ldi r25, 0x0F ; 15
fb1a: 9f 93 push r25
fb1c: 8f 93 push r24
fb1e: 8e e6 ldi r24, 0x6E ; 110
fb20: 9f e0 ldi r25, 0x0F ; 15
fb22: 9f 93 push r25
fb24: 8f 93 push r24
fb26: e0 91 78 06 lds r30, 0x0678
fb2a: f0 91 79 06 lds r31, 0x0679
fb2e: 09 95 icall
fb30: 0f 90 pop r0
fb32: 0f 90 pop r0
fb34: 0f 90 pop r0
fb36: 0f 90 pop r0
fb38: ab c0 rjmp .+342 ; 0xfc90 <Menu_POINT_SV2+0x1b8>
else
if(GPSInfo.SatFix != SATFIX_3D) JetiBox_printfxy(0,1,"no GPS-Fix")
fb3a: 80 91 d9 08 lds r24, 0x08D9
fb3e: 83 30 cpi r24, 0x03 ; 3
fb40: a9 f0 breq .+42 ; 0xfb6c <Menu_POINT_SV2+0x94>
fb42: 80 e1 ldi r24, 0x10 ; 16
fb44: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fb48: 86 e5 ldi r24, 0x56 ; 86
fb4a: 9f e0 ldi r25, 0x0F ; 15
fb4c: 9f 93 push r25
fb4e: 8f 93 push r24
fb50: 8e e6 ldi r24, 0x6E ; 110
fb52: 9f e0 ldi r25, 0x0F ; 15
fb54: 9f 93 push r25
fb56: 8f 93 push r24
fb58: e0 91 78 06 lds r30, 0x0678
fb5c: f0 91 79 06 lds r31, 0x0679
fb60: 09 95 icall
fb62: 0f 90 pop r0
fb64: 0f 90 pop r0
fb66: 0f 90 pop r0
fb68: 0f 90 pop r0
fb6a: 92 c0 rjmp .+292 ; 0xfc90 <Menu_POINT_SV2+0x1b8>
else
{
JetiBox_printfxy(11,0,"%2d",load_waypoint_tmp);
fb6c: 8b e0 ldi r24, 0x0B ; 11
fb6e: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fb72: 80 91 5c 01 lds r24, 0x015C
fb76: 1f 92 push r1
fb78: 8f 93 push r24
fb7a: 22 e5 ldi r18, 0x52 ; 82
fb7c: 3f e0 ldi r19, 0x0F ; 15
fb7e: 3f 93 push r19
fb80: 2f 93 push r18
fb82: ce e6 ldi r28, 0x6E ; 110
fb84: df e0 ldi r29, 0x0F ; 15
fb86: df 93 push r29
fb88: cf 93 push r28
fb8a: e0 91 78 06 lds r30, 0x0678
fb8e: f0 91 79 06 lds r31, 0x0679
fb92: 09 95 icall
// if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber)
// else JetiBox_printfxy(8,1,"--/--")
JetiBox_printfxy(0,1,"Dir:%3d Alt:%3dm",CompassCorrected,(int16_t)(HoehenWert/100))
fb94: 80 e1 ldi r24, 0x10 ; 16
fb96: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fb9a: 60 91 fe 03 lds r22, 0x03FE
fb9e: 70 91 ff 03 lds r23, 0x03FF
fba2: 80 91 00 04 lds r24, 0x0400
fba6: 90 91 01 04 lds r25, 0x0401
fbaa: 24 e6 ldi r18, 0x64 ; 100
fbac: 30 e0 ldi r19, 0x00 ; 0
fbae: 40 e0 ldi r20, 0x00 ; 0
fbb0: 50 e0 ldi r21, 0x00 ; 0
fbb2: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
fbb6: 3f 93 push r19
fbb8: 2f 93 push r18
fbba: 80 91 66 06 lds r24, 0x0666
fbbe: 8f 93 push r24
fbc0: 80 91 65 06 lds r24, 0x0665
fbc4: 8f 93 push r24
fbc6: 21 e4 ldi r18, 0x41 ; 65
fbc8: 3f e0 ldi r19, 0x0F ; 15
fbca: 3f 93 push r19
fbcc: 2f 93 push r18
fbce: df 93 push r29
fbd0: cf 93 push r28
fbd2: e0 91 78 06 lds r30, 0x0678
fbd6: f0 91 79 06 lds r31, 0x0679
fbda: 09 95 icall
if(changed) JetiBox_printfxy(14,0,"->")
fbdc: 8d b7 in r24, 0x3d ; 61
fbde: 9e b7 in r25, 0x3e ; 62
fbe0: 0e 96 adiw r24, 0x0e ; 14
fbe2: 0f b6 in r0, 0x3f ; 63
fbe4: f8 94 cli
fbe6: 9e bf out 0x3e, r25 ; 62
fbe8: 0f be out 0x3f, r0 ; 63
fbea: 8d bf out 0x3d, r24 ; 61
fbec: 80 91 94 04 lds r24, 0x0494
fbf0: 88 23 and r24, r24
fbf2: a1 f0 breq .+40 ; 0xfc1c <Menu_POINT_SV2+0x144>
fbf4: 8e e0 ldi r24, 0x0E ; 14
fbf6: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fbfa: 8e e3 ldi r24, 0x3E ; 62
fbfc: 9f e0 ldi r25, 0x0F ; 15
fbfe: 9f 93 push r25
fc00: 8f 93 push r24
fc02: ce 01 movw r24, r28
fc04: 9f 93 push r25
fc06: cf 93 push r28
fc08: e0 91 78 06 lds r30, 0x0678
fc0c: f0 91 79 06 lds r31, 0x0679
fc10: 09 95 icall
fc12: 0f 90 pop r0
fc14: 0f 90 pop r0
fc16: 0f 90 pop r0
fc18: 0f 90 pop r0
fc1a: 14 c0 rjmp .+40 ; 0xfc44 <Menu_POINT_SV2+0x16c>
else JetiBox_printfxy(14,0," ");
fc1c: 8e e0 ldi r24, 0x0E ; 14
fc1e: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fc22: 8b e3 ldi r24, 0x3B ; 59
fc24: 9f e0 ldi r25, 0x0F ; 15
fc26: 9f 93 push r25
fc28: 8f 93 push r24
fc2a: 8e e6 ldi r24, 0x6E ; 110
fc2c: 9f e0 ldi r25, 0x0F ; 15
fc2e: 9f 93 push r25
fc30: 8f 93 push r24
fc32: e0 91 78 06 lds r30, 0x0678
fc36: f0 91 79 06 lds r31, 0x0679
fc3a: 09 95 icall
fc3c: 0f 90 pop r0
fc3e: 0f 90 pop r0
fc40: 0f 90 pop r0
fc42: 0f 90 pop r0
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;}
fc44: 1f 32 cpi r17, 0x2F ; 47
fc46: 69 f4 brne .+26 ; 0xfc62 <Menu_POINT_SV2+0x18a>
fc48: 80 91 5c 01 lds r24, 0x015C
fc4c: 90 91 89 04 lds r25, 0x0489
fc50: 89 17 cp r24, r25
fc52: f0 f4 brcc .+60 ; 0xfc90 <Menu_POINT_SV2+0x1b8>
fc54: 8f 5f subi r24, 0xFF ; 255
fc56: 80 93 5c 01 sts 0x015C, r24
fc5a: 81 e0 ldi r24, 0x01 ; 1
fc5c: 80 93 94 04 sts 0x0494, r24
fc60: 17 c0 rjmp .+46 ; 0xfc90 <Menu_POINT_SV2+0x1b8>
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; }
fc62: 1f 34 cpi r17, 0x4F ; 79
fc64: 59 f4 brne .+22 ; 0xfc7c <Menu_POINT_SV2+0x1a4>
fc66: 80 91 5c 01 lds r24, 0x015C
fc6a: 82 30 cpi r24, 0x02 ; 2
fc6c: 88 f0 brcs .+34 ; 0xfc90 <Menu_POINT_SV2+0x1b8>
fc6e: 81 50 subi r24, 0x01 ; 1
fc70: 80 93 5c 01 sts 0x015C, r24
fc74: 81 e0 ldi r24, 0x01 ; 1
fc76: 80 93 94 04 sts 0x0494, r24
fc7a: 0a c0 rjmp .+20 ; 0xfc90 <Menu_POINT_SV2+0x1b8>
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp)
fc7c: 1f 31 cpi r17, 0x1F ; 31
fc7e: 41 f4 brne .+16 ; 0xfc90 <Menu_POINT_SV2+0x1b8>
fc80: 80 91 5c 01 lds r24, 0x015C
fc84: 88 23 and r24, r24
fc86: 21 f0 breq .+8 ; 0xfc90 <Menu_POINT_SV2+0x1b8>
{
ToNC_Store_SingePoint = load_waypoint_tmp;
fc88: 80 93 87 04 sts 0x0487, r24
changed = 0;
fc8c: 10 92 94 04 sts 0x0494, r1
}
}
}
fc90: df 91 pop r29
fc92: cf 91 pop r28
fc94: 1f 91 pop r17
fc96: 08 95 ret
0000fc98 <Menu_POINT_LD2>:
#endif
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
void Menu_POINT_LD2(uint8_t key)
{ //0123456789ABCDEF
fc98: cf 93 push r28
fc9a: c8 2f mov r28, r24
static unsigned char load_waypoint_tmp = 1, changed;
// if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"FIX Waypoints")
// else JetiBox_printfxy(0,0,"FIX:%s",WPL_Name);
JetiBox_printfxy(0,0,"Load Point")
fc9c: 80 e0 ldi r24, 0x00 ; 0
fc9e: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fca2: 20 e3 ldi r18, 0x30 ; 48
fca4: 3f e0 ldi r19, 0x0F ; 15
fca6: 3f 93 push r19
fca8: 2f 93 push r18
fcaa: 2e e6 ldi r18, 0x6E ; 110
fcac: 3f e0 ldi r19, 0x0F ; 15
fcae: 3f 93 push r19
fcb0: 2f 93 push r18
fcb2: e0 91 78 06 lds r30, 0x0678
fcb6: f0 91 79 06 lds r31, 0x0679
fcba: 09 95 icall
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card")
fcbc: 0f 90 pop r0
fcbe: 0f 90 pop r0
fcc0: 0f 90 pop r0
fcc2: 0f 90 pop r0
fcc4: 80 91 89 04 lds r24, 0x0489
fcc8: 81 11 cpse r24, r1
fcca: 15 c0 rjmp .+42 ; 0xfcf6 <Menu_POINT_LD2+0x5e>
fccc: 80 e1 ldi r24, 0x10 ; 16
fcce: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fcd2: 85 e2 ldi r24, 0x25 ; 37
fcd4: 9f e0 ldi r25, 0x0F ; 15
fcd6: 9f 93 push r25
fcd8: 8f 93 push r24
fcda: 8e e6 ldi r24, 0x6E ; 110
fcdc: 9f e0 ldi r25, 0x0F ; 15
fcde: 9f 93 push r25
fce0: 8f 93 push r24
fce2: e0 91 78 06 lds r30, 0x0678
fce6: f0 91 79 06 lds r31, 0x0679
fcea: 09 95 icall
fcec: 0f 90 pop r0
fcee: 0f 90 pop r0
fcf0: 0f 90 pop r0
fcf2: 0f 90 pop r0
fcf4: b4 c0 rjmp .+360 ; 0xfe5e <Menu_POINT_LD2+0x1c6>
else
{
JetiBox_printfxy(11,0,"%2d",load_waypoint_tmp);
fcf6: 8b e0 ldi r24, 0x0B ; 11
fcf8: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fcfc: 80 91 5b 01 lds r24, 0x015B
fd00: 1f 92 push r1
fd02: 8f 93 push r24
fd04: 21 e2 ldi r18, 0x21 ; 33
fd06: 3f e0 ldi r19, 0x0F ; 15
fd08: 3f 93 push r19
fd0a: 2f 93 push r18
fd0c: 2e e6 ldi r18, 0x6E ; 110
fd0e: 3f e0 ldi r19, 0x0F ; 15
fd10: 3f 93 push r19
fd12: 2f 93 push r18
fd14: e0 91 78 06 lds r30, 0x0678
fd18: f0 91 79 06 lds r31, 0x0679
fd1c: 09 95 icall
if(NaviData_WaypointNumber) JetiBox_printfxy(0,1,"Dist:%3d Alt:%3d ",NaviData_TargetDistance,(int16_t)(FromNC_AltitudeSetpoint/100))
fd1e: 0f 90 pop r0
fd20: 0f 90 pop r0
fd22: 0f 90 pop r0
fd24: 0f 90 pop r0
fd26: 0f 90 pop r0
fd28: 0f 90 pop r0
fd2a: 80 91 8c 04 lds r24, 0x048C
fd2e: 88 23 and r24, r24
fd30: 79 f1 breq .+94 ; 0xfd90 <Menu_POINT_LD2+0xf8>
fd32: 80 e1 ldi r24, 0x10 ; 16
fd34: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fd38: 60 91 f4 03 lds r22, 0x03F4
fd3c: 70 91 f5 03 lds r23, 0x03F5
fd40: 80 91 f6 03 lds r24, 0x03F6
fd44: 90 91 f7 03 lds r25, 0x03F7
fd48: 24 e6 ldi r18, 0x64 ; 100
fd4a: 30 e0 ldi r19, 0x00 ; 0
fd4c: 40 e0 ldi r20, 0x00 ; 0
fd4e: 50 e0 ldi r21, 0x00 ; 0
fd50: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
fd54: 3f 93 push r19
fd56: 2f 93 push r18
fd58: 80 91 86 04 lds r24, 0x0486
fd5c: 8f 93 push r24
fd5e: 80 91 85 04 lds r24, 0x0485
fd62: 8f 93 push r24
fd64: 8f e0 ldi r24, 0x0F ; 15
fd66: 9f e0 ldi r25, 0x0F ; 15
fd68: 9f 93 push r25
fd6a: 8f 93 push r24
fd6c: 8e e6 ldi r24, 0x6E ; 110
fd6e: 9f e0 ldi r25, 0x0F ; 15
fd70: 9f 93 push r25
fd72: 8f 93 push r24
fd74: e0 91 78 06 lds r30, 0x0678
fd78: f0 91 79 06 lds r31, 0x0679
fd7c: 09 95 icall
fd7e: 8d b7 in r24, 0x3d ; 61
fd80: 9e b7 in r25, 0x3e ; 62
fd82: 08 96 adiw r24, 0x08 ; 8
fd84: 0f b6 in r0, 0x3f ; 63
fd86: f8 94 cli
fd88: 9e bf out 0x3e, r25 ; 62
fd8a: 0f be out 0x3f, r0 ; 63
fd8c: 8d bf out 0x3d, r24 ; 61
fd8e: 14 c0 rjmp .+40 ; 0xfdb8 <Menu_POINT_LD2+0x120>
else JetiBox_printfxy(8,1," ");
fd90: 88 e1 ldi r24, 0x18 ; 24
fd92: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fd96: 8e ef ldi r24, 0xFE ; 254
fd98: 9e e0 ldi r25, 0x0E ; 14
fd9a: 9f 93 push r25
fd9c: 8f 93 push r24
fd9e: 8e e6 ldi r24, 0x6E ; 110
fda0: 9f e0 ldi r25, 0x0F ; 15
fda2: 9f 93 push r25
fda4: 8f 93 push r24
fda6: e0 91 78 06 lds r30, 0x0678
fdaa: f0 91 79 06 lds r31, 0x0679
fdae: 09 95 icall
fdb0: 0f 90 pop r0
fdb2: 0f 90 pop r0
fdb4: 0f 90 pop r0
fdb6: 0f 90 pop r0
if(changed) JetiBox_printfxy(14,0,"->")
fdb8: 80 91 93 04 lds r24, 0x0493
fdbc: 88 23 and r24, r24
fdbe: a9 f0 breq .+42 ; 0xfdea <Menu_POINT_LD2+0x152>
fdc0: 8e e0 ldi r24, 0x0E ; 14
fdc2: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fdc6: 8b ef ldi r24, 0xFB ; 251
fdc8: 9e e0 ldi r25, 0x0E ; 14
fdca: 9f 93 push r25
fdcc: 8f 93 push r24
fdce: 8e e6 ldi r24, 0x6E ; 110
fdd0: 9f e0 ldi r25, 0x0F ; 15
fdd2: 9f 93 push r25
fdd4: 8f 93 push r24
fdd6: e0 91 78 06 lds r30, 0x0678
fdda: f0 91 79 06 lds r31, 0x0679
fdde: 09 95 icall
fde0: 0f 90 pop r0
fde2: 0f 90 pop r0
fde4: 0f 90 pop r0
fde6: 0f 90 pop r0
fde8: 14 c0 rjmp .+40 ; 0xfe12 <Menu_POINT_LD2+0x17a>
else JetiBox_printfxy(14,0," ");
fdea: 8e e0 ldi r24, 0x0E ; 14
fdec: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fdf0: 88 ef ldi r24, 0xF8 ; 248
fdf2: 9e e0 ldi r25, 0x0E ; 14
fdf4: 9f 93 push r25
fdf6: 8f 93 push r24
fdf8: 8e e6 ldi r24, 0x6E ; 110
fdfa: 9f e0 ldi r25, 0x0F ; 15
fdfc: 9f 93 push r25
fdfe: 8f 93 push r24
fe00: e0 91 78 06 lds r30, 0x0678
fe04: f0 91 79 06 lds r31, 0x0679
fe08: 09 95 icall
fe0a: 0f 90 pop r0
fe0c: 0f 90 pop r0
fe0e: 0f 90 pop r0
fe10: 0f 90 pop r0
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;}
fe12: cf 32 cpi r28, 0x2F ; 47
fe14: 69 f4 brne .+26 ; 0xfe30 <Menu_POINT_LD2+0x198>
fe16: 80 91 5b 01 lds r24, 0x015B
fe1a: 90 91 89 04 lds r25, 0x0489
fe1e: 89 17 cp r24, r25
fe20: f0 f4 brcc .+60 ; 0xfe5e <Menu_POINT_LD2+0x1c6>
fe22: 8f 5f subi r24, 0xFF ; 255
fe24: 80 93 5b 01 sts 0x015B, r24
fe28: 81 e0 ldi r24, 0x01 ; 1
fe2a: 80 93 93 04 sts 0x0493, r24
fe2e: 17 c0 rjmp .+46 ; 0xfe5e <Menu_POINT_LD2+0x1c6>
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; }
fe30: cf 34 cpi r28, 0x4F ; 79
fe32: 59 f4 brne .+22 ; 0xfe4a <Menu_POINT_LD2+0x1b2>
fe34: 80 91 5b 01 lds r24, 0x015B
fe38: 82 30 cpi r24, 0x02 ; 2
fe3a: 88 f0 brcs .+34 ; 0xfe5e <Menu_POINT_LD2+0x1c6>
fe3c: 81 50 subi r24, 0x01 ; 1
fe3e: 80 93 5b 01 sts 0x015B, r24
fe42: 81 e0 ldi r24, 0x01 ; 1
fe44: 80 93 93 04 sts 0x0493, r24
fe48: 0a c0 rjmp .+20 ; 0xfe5e <Menu_POINT_LD2+0x1c6>
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp)
fe4a: cf 31 cpi r28, 0x1F ; 31
fe4c: 41 f4 brne .+16 ; 0xfe5e <Menu_POINT_LD2+0x1c6>
fe4e: 80 91 5b 01 lds r24, 0x015B
fe52: 88 23 and r24, r24
fe54: 21 f0 breq .+8 ; 0xfe5e <Menu_POINT_LD2+0x1c6>
{
ToNC_Load_SingePoint = load_waypoint_tmp;
fe56: 80 93 88 04 sts 0x0488, r24
changed = 0;
fe5a: 10 92 93 04 sts 0x0493, r1
}
}
}
fe5e: cf 91 pop r28
fe60: 08 95 ret
0000fe62 <Menu_WPL_A2>:
#endif
void Menu_WPL_A2(uint8_t key)
{ //0123456789ABCDEF
fe62: cf 93 push r28
fe64: c8 2f mov r28, r24
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
static unsigned char load_waypoint_tmp = 1, changed;
if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"FIX Waypoints")
fe66: 80 91 d2 06 lds r24, 0x06D2
fe6a: 81 11 cpse r24, r1
fe6c: 14 c0 rjmp .+40 ; 0xfe96 <Menu_WPL_A2+0x34>
fe6e: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fe72: 2a ee ldi r18, 0xEA ; 234
fe74: 3e e0 ldi r19, 0x0E ; 14
fe76: 3f 93 push r19
fe78: 2f 93 push r18
fe7a: 2e e6 ldi r18, 0x6E ; 110
fe7c: 3f e0 ldi r19, 0x0F ; 15
fe7e: 3f 93 push r19
fe80: 2f 93 push r18
fe82: e0 91 78 06 lds r30, 0x0678
fe86: f0 91 79 06 lds r31, 0x0679
fe8a: 09 95 icall
fe8c: 0f 90 pop r0
fe8e: 0f 90 pop r0
fe90: 0f 90 pop r0
fe92: 0f 90 pop r0
fe94: 1a c0 rjmp .+52 ; 0xfeca <Menu_WPL_A2+0x68>
else JetiBox_printfxy(0,0,"FIX:%s",WPL_Name);
fe96: 80 e0 ldi r24, 0x00 ; 0
fe98: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fe9c: 22 ed ldi r18, 0xD2 ; 210
fe9e: 36 e0 ldi r19, 0x06 ; 6
fea0: 3f 93 push r19
fea2: 2f 93 push r18
fea4: 23 ee ldi r18, 0xE3 ; 227
fea6: 3e e0 ldi r19, 0x0E ; 14
fea8: 3f 93 push r19
feaa: 2f 93 push r18
feac: 2e e6 ldi r18, 0x6E ; 110
feae: 3f e0 ldi r19, 0x0F ; 15
feb0: 3f 93 push r19
feb2: 2f 93 push r18
feb4: e0 91 78 06 lds r30, 0x0678
feb8: f0 91 79 06 lds r31, 0x0679
febc: 09 95 icall
febe: 0f 90 pop r0
fec0: 0f 90 pop r0
fec2: 0f 90 pop r0
fec4: 0f 90 pop r0
fec6: 0f 90 pop r0
fec8: 0f 90 pop r0
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card")
feca: 80 91 89 04 lds r24, 0x0489
fece: 81 11 cpse r24, r1
fed0: 15 c0 rjmp .+42 ; 0xfefc <Menu_WPL_A2+0x9a>
fed2: 80 e1 ldi r24, 0x10 ; 16
fed4: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
fed8: 88 ed ldi r24, 0xD8 ; 216
feda: 9e e0 ldi r25, 0x0E ; 14
fedc: 9f 93 push r25
fede: 8f 93 push r24
fee0: 8e e6 ldi r24, 0x6E ; 110
fee2: 9f e0 ldi r25, 0x0F ; 15
fee4: 9f 93 push r25
fee6: 8f 93 push r24
fee8: e0 91 78 06 lds r30, 0x0678
feec: f0 91 79 06 lds r31, 0x0679
fef0: 09 95 icall
fef2: 0f 90 pop r0
fef4: 0f 90 pop r0
fef6: 0f 90 pop r0
fef8: 0f 90 pop r0
fefa: a6 c0 rjmp .+332 ; 0x10048 <Menu_WPL_A2+0x1e6>
else
{
JetiBox_printfxy(0,1,"#%2d WP:",load_waypoint_tmp);
fefc: 80 e1 ldi r24, 0x10 ; 16
fefe: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
ff02: 80 91 5a 01 lds r24, 0x015A
ff06: 1f 92 push r1
ff08: 8f 93 push r24
ff0a: 2f ec ldi r18, 0xCF ; 207
ff0c: 3e e0 ldi r19, 0x0E ; 14
ff0e: 3f 93 push r19
ff10: 2f 93 push r18
ff12: 2e e6 ldi r18, 0x6E ; 110
ff14: 3f e0 ldi r19, 0x0F ; 15
ff16: 3f 93 push r19
ff18: 2f 93 push r18
ff1a: e0 91 78 06 lds r30, 0x0678
ff1e: f0 91 79 06 lds r31, 0x0679
ff22: 09 95 icall
if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber)
ff24: 0f 90 pop r0
ff26: 0f 90 pop r0
ff28: 0f 90 pop r0
ff2a: 0f 90 pop r0
ff2c: 0f 90 pop r0
ff2e: 0f 90 pop r0
ff30: 80 91 8c 04 lds r24, 0x048C
ff34: 88 23 and r24, r24
ff36: 09 f1 breq .+66 ; 0xff7a <Menu_WPL_A2+0x118>
ff38: 88 e1 ldi r24, 0x18 ; 24
ff3a: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
ff3e: 80 91 8c 04 lds r24, 0x048C
ff42: 1f 92 push r1
ff44: 8f 93 push r24
ff46: 80 91 8d 04 lds r24, 0x048D
ff4a: 1f 92 push r1
ff4c: 8f 93 push r24
ff4e: 87 ec ldi r24, 0xC7 ; 199
ff50: 9e e0 ldi r25, 0x0E ; 14
ff52: 9f 93 push r25
ff54: 8f 93 push r24
ff56: 8e e6 ldi r24, 0x6E ; 110
ff58: 9f e0 ldi r25, 0x0F ; 15
ff5a: 9f 93 push r25
ff5c: 8f 93 push r24
ff5e: e0 91 78 06 lds r30, 0x0678
ff62: f0 91 79 06 lds r31, 0x0679
ff66: 09 95 icall
ff68: 8d b7 in r24, 0x3d ; 61
ff6a: 9e b7 in r25, 0x3e ; 62
ff6c: 08 96 adiw r24, 0x08 ; 8
ff6e: 0f b6 in r0, 0x3f ; 63
ff70: f8 94 cli
ff72: 9e bf out 0x3e, r25 ; 62
ff74: 0f be out 0x3f, r0 ; 63
ff76: 8d bf out 0x3d, r24 ; 61
ff78: 14 c0 rjmp .+40 ; 0xffa2 <Menu_WPL_A2+0x140>
else JetiBox_printfxy(8,1,"--/--")
ff7a: 88 e1 ldi r24, 0x18 ; 24
ff7c: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
ff80: 81 ec ldi r24, 0xC1 ; 193
ff82: 9e e0 ldi r25, 0x0E ; 14
ff84: 9f 93 push r25
ff86: 8f 93 push r24
ff88: 8e e6 ldi r24, 0x6E ; 110
ff8a: 9f e0 ldi r25, 0x0F ; 15
ff8c: 9f 93 push r25
ff8e: 8f 93 push r24
ff90: e0 91 78 06 lds r30, 0x0678
ff94: f0 91 79 06 lds r31, 0x0679
ff98: 09 95 icall
ff9a: 0f 90 pop r0
ff9c: 0f 90 pop r0
ff9e: 0f 90 pop r0
ffa0: 0f 90 pop r0
if(changed) JetiBox_printfxy(14,1,"->")
ffa2: 80 91 92 04 lds r24, 0x0492
ffa6: 88 23 and r24, r24
ffa8: a9 f0 breq .+42 ; 0xffd4 <Menu_WPL_A2+0x172>
ffaa: 8e e1 ldi r24, 0x1E ; 30
ffac: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
ffb0: 8e eb ldi r24, 0xBE ; 190
ffb2: 9e e0 ldi r25, 0x0E ; 14
ffb4: 9f 93 push r25
ffb6: 8f 93 push r24
ffb8: 8e e6 ldi r24, 0x6E ; 110
ffba: 9f e0 ldi r25, 0x0F ; 15
ffbc: 9f 93 push r25
ffbe: 8f 93 push r24
ffc0: e0 91 78 06 lds r30, 0x0678
ffc4: f0 91 79 06 lds r31, 0x0679
ffc8: 09 95 icall
ffca: 0f 90 pop r0
ffcc: 0f 90 pop r0
ffce: 0f 90 pop r0
ffd0: 0f 90 pop r0
ffd2: 14 c0 rjmp .+40 ; 0xfffc <Menu_WPL_A2+0x19a>
else JetiBox_printfxy(14,1," ");
ffd4: 8e e1 ldi r24, 0x1E ; 30
ffd6: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
ffda: 8b eb ldi r24, 0xBB ; 187
ffdc: 9e e0 ldi r25, 0x0E ; 14
ffde: 9f 93 push r25
ffe0: 8f 93 push r24
ffe2: 8e e6 ldi r24, 0x6E ; 110
ffe4: 9f e0 ldi r25, 0x0F ; 15
ffe6: 9f 93 push r25
ffe8: 8f 93 push r24
ffea: e0 91 78 06 lds r30, 0x0678
ffee: f0 91 79 06 lds r31, 0x0679
fff2: 09 95 icall
fff4: 0f 90 pop r0
fff6: 0f 90 pop r0
fff8: 0f 90 pop r0
fffa: 0f 90 pop r0
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;}
fffc: cf 32 cpi r28, 0x2F ; 47
fffe: 69 f4 brne .+26 ; 0x1001a <Menu_WPL_A2+0x1b8>
10000: 80 91 5a 01 lds r24, 0x015A
10004: 90 91 89 04 lds r25, 0x0489
10008: 89 17 cp r24, r25
1000a: f0 f4 brcc .+60 ; 0x10048 <Menu_WPL_A2+0x1e6>
1000c: 8f 5f subi r24, 0xFF ; 255
1000e: 80 93 5a 01 sts 0x015A, r24
10012: 81 e0 ldi r24, 0x01 ; 1
10014: 80 93 92 04 sts 0x0492, r24
10018: 17 c0 rjmp .+46 ; 0x10048 <Menu_WPL_A2+0x1e6>
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; }
1001a: cf 34 cpi r28, 0x4F ; 79
1001c: 59 f4 brne .+22 ; 0x10034 <Menu_WPL_A2+0x1d2>
1001e: 80 91 5a 01 lds r24, 0x015A
10022: 82 30 cpi r24, 0x02 ; 2
10024: 88 f0 brcs .+34 ; 0x10048 <Menu_WPL_A2+0x1e6>
10026: 81 50 subi r24, 0x01 ; 1
10028: 80 93 5a 01 sts 0x015A, r24
1002c: 81 e0 ldi r24, 0x01 ; 1
1002e: 80 93 92 04 sts 0x0492, r24
10032: 0a c0 rjmp .+20 ; 0x10048 <Menu_WPL_A2+0x1e6>
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp)
10034: cf 31 cpi r28, 0x1F ; 31
10036: 41 f4 brne .+16 ; 0x10048 <Menu_WPL_A2+0x1e6>
10038: 80 91 5a 01 lds r24, 0x015A
1003c: 88 23 and r24, r24
1003e: 21 f0 breq .+8 ; 0x10048 <Menu_WPL_A2+0x1e6>
{
ToNC_Load_WP_List = load_waypoint_tmp;
10040: 80 93 8a 04 sts 0x048A, r24
changed = 0;
10044: 10 92 92 04 sts 0x0492, r1
}
}
#endif
}
10048: cf 91 pop r28
1004a: 08 95 ret
0001004c <Menu_WPL_R2>:
void Menu_WPL_R2(uint8_t key)
{ //0123456789ABCDEF
1004c: cf 93 push r28
1004e: c8 2f mov r28, r24
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
static unsigned char load_waypoint_tmp = 1, changed;
if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"Relative WPs ")
10050: 80 91 d2 06 lds r24, 0x06D2
10054: 81 11 cpse r24, r1
10056: 14 c0 rjmp .+40 ; 0x10080 <Menu_WPL_R2+0x34>
10058: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
1005c: 2d ea ldi r18, 0xAD ; 173
1005e: 3e e0 ldi r19, 0x0E ; 14
10060: 3f 93 push r19
10062: 2f 93 push r18
10064: 2e e6 ldi r18, 0x6E ; 110
10066: 3f e0 ldi r19, 0x0F ; 15
10068: 3f 93 push r19
1006a: 2f 93 push r18
1006c: e0 91 78 06 lds r30, 0x0678
10070: f0 91 79 06 lds r31, 0x0679
10074: 09 95 icall
10076: 0f 90 pop r0
10078: 0f 90 pop r0
1007a: 0f 90 pop r0
1007c: 0f 90 pop r0
1007e: 1a c0 rjmp .+52 ; 0x100b4 <Menu_WPL_R2+0x68>
else JetiBox_printfxy(0,0,"Rel:%s",WPL_Name);
10080: 80 e0 ldi r24, 0x00 ; 0
10082: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
10086: 22 ed ldi r18, 0xD2 ; 210
10088: 36 e0 ldi r19, 0x06 ; 6
1008a: 3f 93 push r19
1008c: 2f 93 push r18
1008e: 26 ea ldi r18, 0xA6 ; 166
10090: 3e e0 ldi r19, 0x0E ; 14
10092: 3f 93 push r19
10094: 2f 93 push r18
10096: 2e e6 ldi r18, 0x6E ; 110
10098: 3f e0 ldi r19, 0x0F ; 15
1009a: 3f 93 push r19
1009c: 2f 93 push r18
1009e: e0 91 78 06 lds r30, 0x0678
100a2: f0 91 79 06 lds r31, 0x0679
100a6: 09 95 icall
100a8: 0f 90 pop r0
100aa: 0f 90 pop r0
100ac: 0f 90 pop r0
100ae: 0f 90 pop r0
100b0: 0f 90 pop r0
100b2: 0f 90 pop r0
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card")
100b4: 80 91 89 04 lds r24, 0x0489
100b8: 81 11 cpse r24, r1
100ba: 15 c0 rjmp .+42 ; 0x100e6 <Menu_WPL_R2+0x9a>
100bc: 80 e1 ldi r24, 0x10 ; 16
100be: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
100c2: 8b e9 ldi r24, 0x9B ; 155
100c4: 9e e0 ldi r25, 0x0E ; 14
100c6: 9f 93 push r25
100c8: 8f 93 push r24
100ca: 8e e6 ldi r24, 0x6E ; 110
100cc: 9f e0 ldi r25, 0x0F ; 15
100ce: 9f 93 push r25
100d0: 8f 93 push r24
100d2: e0 91 78 06 lds r30, 0x0678
100d6: f0 91 79 06 lds r31, 0x0679
100da: 09 95 icall
100dc: 0f 90 pop r0
100de: 0f 90 pop r0
100e0: 0f 90 pop r0
100e2: 0f 90 pop r0
100e4: c0 c0 rjmp .+384 ; 0x10266 <Menu_WPL_R2+0x21a>
else
if(GPSInfo.SatFix != SATFIX_3D) JetiBox_printfxy(0,1,"no GPS-Fix")
100e6: 80 91 d9 08 lds r24, 0x08D9
100ea: 83 30 cpi r24, 0x03 ; 3
100ec: a9 f0 breq .+42 ; 0x10118 <Menu_WPL_R2+0xcc>
100ee: 80 e1 ldi r24, 0x10 ; 16
100f0: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
100f4: 80 e9 ldi r24, 0x90 ; 144
100f6: 9e e0 ldi r25, 0x0E ; 14
100f8: 9f 93 push r25
100fa: 8f 93 push r24
100fc: 8e e6 ldi r24, 0x6E ; 110
100fe: 9f e0 ldi r25, 0x0F ; 15
10100: 9f 93 push r25
10102: 8f 93 push r24
10104: e0 91 78 06 lds r30, 0x0678
10108: f0 91 79 06 lds r31, 0x0679
1010c: 09 95 icall
1010e: 0f 90 pop r0
10110: 0f 90 pop r0
10112: 0f 90 pop r0
10114: 0f 90 pop r0
10116: a7 c0 rjmp .+334 ; 0x10266 <Menu_WPL_R2+0x21a>
else
{
JetiBox_printfxy(0,1,"#%2d WPs:",load_waypoint_tmp);
10118: 80 e1 ldi r24, 0x10 ; 16
1011a: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
1011e: 80 91 59 01 lds r24, 0x0159
10122: 1f 92 push r1
10124: 8f 93 push r24
10126: 86 e8 ldi r24, 0x86 ; 134
10128: 9e e0 ldi r25, 0x0E ; 14
1012a: 9f 93 push r25
1012c: 8f 93 push r24
1012e: 2e e6 ldi r18, 0x6E ; 110
10130: 3f e0 ldi r19, 0x0F ; 15
10132: 3f 93 push r19
10134: 2f 93 push r18
10136: e0 91 78 06 lds r30, 0x0678
1013a: f0 91 79 06 lds r31, 0x0679
1013e: 09 95 icall
if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber)
10140: 0f 90 pop r0
10142: 0f 90 pop r0
10144: 0f 90 pop r0
10146: 0f 90 pop r0
10148: 0f 90 pop r0
1014a: 0f 90 pop r0
1014c: 80 91 8c 04 lds r24, 0x048C
10150: 88 23 and r24, r24
10152: 09 f1 breq .+66 ; 0x10196 <Menu_WPL_R2+0x14a>
10154: 88 e1 ldi r24, 0x18 ; 24
10156: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
1015a: 80 91 8c 04 lds r24, 0x048C
1015e: 1f 92 push r1
10160: 8f 93 push r24
10162: 80 91 8d 04 lds r24, 0x048D
10166: 1f 92 push r1
10168: 8f 93 push r24
1016a: 8e e7 ldi r24, 0x7E ; 126
1016c: 9e e0 ldi r25, 0x0E ; 14
1016e: 9f 93 push r25
10170: 8f 93 push r24
10172: 8e e6 ldi r24, 0x6E ; 110
10174: 9f e0 ldi r25, 0x0F ; 15
10176: 9f 93 push r25
10178: 8f 93 push r24
1017a: e0 91 78 06 lds r30, 0x0678
1017e: f0 91 79 06 lds r31, 0x0679
10182: 09 95 icall
10184: 8d b7 in r24, 0x3d ; 61
10186: 9e b7 in r25, 0x3e ; 62
10188: 08 96 adiw r24, 0x08 ; 8
1018a: 0f b6 in r0, 0x3f ; 63
1018c: f8 94 cli
1018e: 9e bf out 0x3e, r25 ; 62
10190: 0f be out 0x3f, r0 ; 63
10192: 8d bf out 0x3d, r24 ; 61
10194: 14 c0 rjmp .+40 ; 0x101be <Menu_WPL_R2+0x172>
else JetiBox_printfxy(8,1,"--/--")
10196: 88 e1 ldi r24, 0x18 ; 24
10198: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
1019c: 88 e7 ldi r24, 0x78 ; 120
1019e: 9e e0 ldi r25, 0x0E ; 14
101a0: 9f 93 push r25
101a2: 8f 93 push r24
101a4: 8e e6 ldi r24, 0x6E ; 110
101a6: 9f e0 ldi r25, 0x0F ; 15
101a8: 9f 93 push r25
101aa: 8f 93 push r24
101ac: e0 91 78 06 lds r30, 0x0678
101b0: f0 91 79 06 lds r31, 0x0679
101b4: 09 95 icall
101b6: 0f 90 pop r0
101b8: 0f 90 pop r0
101ba: 0f 90 pop r0
101bc: 0f 90 pop r0
if(changed) JetiBox_printfxy(14,1,"->")
101be: 80 91 91 04 lds r24, 0x0491
101c2: 88 23 and r24, r24
101c4: a9 f0 breq .+42 ; 0x101f0 <Menu_WPL_R2+0x1a4>
101c6: 8e e1 ldi r24, 0x1E ; 30
101c8: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
101cc: 85 e7 ldi r24, 0x75 ; 117
101ce: 9e e0 ldi r25, 0x0E ; 14
101d0: 9f 93 push r25
101d2: 8f 93 push r24
101d4: 8e e6 ldi r24, 0x6E ; 110
101d6: 9f e0 ldi r25, 0x0F ; 15
101d8: 9f 93 push r25
101da: 8f 93 push r24
101dc: e0 91 78 06 lds r30, 0x0678
101e0: f0 91 79 06 lds r31, 0x0679
101e4: 09 95 icall
101e6: 0f 90 pop r0
101e8: 0f 90 pop r0
101ea: 0f 90 pop r0
101ec: 0f 90 pop r0
101ee: 14 c0 rjmp .+40 ; 0x10218 <Menu_WPL_R2+0x1cc>
else JetiBox_printfxy(14,1," ");
101f0: 8e e1 ldi r24, 0x1E ; 30
101f2: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
101f6: 82 e7 ldi r24, 0x72 ; 114
101f8: 9e e0 ldi r25, 0x0E ; 14
101fa: 9f 93 push r25
101fc: 8f 93 push r24
101fe: 8e e6 ldi r24, 0x6E ; 110
10200: 9f e0 ldi r25, 0x0F ; 15
10202: 9f 93 push r25
10204: 8f 93 push r24
10206: e0 91 78 06 lds r30, 0x0678
1020a: f0 91 79 06 lds r31, 0x0679
1020e: 09 95 icall
10210: 0f 90 pop r0
10212: 0f 90 pop r0
10214: 0f 90 pop r0
10216: 0f 90 pop r0
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;}
10218: cf 32 cpi r28, 0x2F ; 47
1021a: 69 f4 brne .+26 ; 0x10236 <Menu_WPL_R2+0x1ea>
1021c: 80 91 59 01 lds r24, 0x0159
10220: 90 91 89 04 lds r25, 0x0489
10224: 89 17 cp r24, r25
10226: f8 f4 brcc .+62 ; 0x10266 <Menu_WPL_R2+0x21a>
10228: 8f 5f subi r24, 0xFF ; 255
1022a: 80 93 59 01 sts 0x0159, r24
1022e: 81 e0 ldi r24, 0x01 ; 1
10230: 80 93 91 04 sts 0x0491, r24
10234: 18 c0 rjmp .+48 ; 0x10266 <Menu_WPL_R2+0x21a>
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; }
10236: cf 34 cpi r28, 0x4F ; 79
10238: 59 f4 brne .+22 ; 0x10250 <Menu_WPL_R2+0x204>
1023a: 80 91 59 01 lds r24, 0x0159
1023e: 82 30 cpi r24, 0x02 ; 2
10240: 90 f0 brcs .+36 ; 0x10266 <Menu_WPL_R2+0x21a>
10242: 81 50 subi r24, 0x01 ; 1
10244: 80 93 59 01 sts 0x0159, r24
10248: 81 e0 ldi r24, 0x01 ; 1
1024a: 80 93 91 04 sts 0x0491, r24
1024e: 0b c0 rjmp .+22 ; 0x10266 <Menu_WPL_R2+0x21a>
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp)
10250: cf 31 cpi r28, 0x1F ; 31
10252: 49 f4 brne .+18 ; 0x10266 <Menu_WPL_R2+0x21a>
10254: 80 91 59 01 lds r24, 0x0159
10258: 88 23 and r24, r24
1025a: 29 f0 breq .+10 ; 0x10266 <Menu_WPL_R2+0x21a>
{
ToNC_Load_WP_List = load_waypoint_tmp | 0x80;
1025c: 80 68 ori r24, 0x80 ; 128
1025e: 80 93 8a 04 sts 0x048A, r24
changed = 0;
10262: 10 92 91 04 sts 0x0491, r1
}
}
#endif
}
10266: cf 91 pop r28
10268: 08 95 ret
0001026a <Menu_PosInfo>:
void Menu_PosInfo(uint8_t key)
{
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
if(NaviDataOkay)
1026a: 80 91 a4 02 lds r24, 0x02A4
1026e: 88 23 and r24, r24
10270: 09 f4 brne .+2 ; 0x10274 <Menu_PosInfo+0xa>
10272: 9b c0 rjmp .+310 ; 0x103aa <Menu_PosInfo+0x140>
{
JetiBox_printfxy(0,0,"%2um/s Sat:%d ",GPSInfo.Speed,GPSInfo.NumOfSats);
10274: 80 e0 ldi r24, 0x00 ; 0
10276: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
1027a: 80 91 d8 08 lds r24, 0x08D8
1027e: 1f 92 push r1
10280: 8f 93 push r24
10282: 80 91 da 08 lds r24, 0x08DA
10286: 1f 92 push r1
10288: 8f 93 push r24
1028a: 83 e6 ldi r24, 0x63 ; 99
1028c: 9e e0 ldi r25, 0x0E ; 14
1028e: 9f 93 push r25
10290: 8f 93 push r24
10292: 8e e6 ldi r24, 0x6E ; 110
10294: 9f e0 ldi r25, 0x0F ; 15
10296: 9f 93 push r25
10298: 8f 93 push r24
1029a: e0 91 78 06 lds r30, 0x0678
1029e: f0 91 79 06 lds r31, 0x0679
102a2: 09 95 icall
switch (GPSInfo.SatFix)
102a4: 8d b7 in r24, 0x3d ; 61
102a6: 9e b7 in r25, 0x3e ; 62
102a8: 08 96 adiw r24, 0x08 ; 8
102aa: 0f b6 in r0, 0x3f ; 63
102ac: f8 94 cli
102ae: 9e bf out 0x3e, r25 ; 62
102b0: 0f be out 0x3f, r0 ; 63
102b2: 8d bf out 0x3d, r24 ; 61
102b4: 80 91 d9 08 lds r24, 0x08D9
102b8: 83 30 cpi r24, 0x03 ; 3
102ba: a9 f4 brne .+42 ; 0x102e6 <Menu_PosInfo+0x7c>
{
case SATFIX_3D:
JetiBox_printfxy(12,0," 3D");
102bc: 8c e0 ldi r24, 0x0C ; 12
102be: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
102c2: 8e e5 ldi r24, 0x5E ; 94
102c4: 9e e0 ldi r25, 0x0E ; 14
102c6: 9f 93 push r25
102c8: 8f 93 push r24
102ca: 8e e6 ldi r24, 0x6E ; 110
102cc: 9f e0 ldi r25, 0x0F ; 15
102ce: 9f 93 push r25
102d0: 8f 93 push r24
102d2: e0 91 78 06 lds r30, 0x0678
102d6: f0 91 79 06 lds r31, 0x0679
102da: 09 95 icall
break;
102dc: 0f 90 pop r0
102de: 0f 90 pop r0
102e0: 0f 90 pop r0
102e2: 0f 90 pop r0
102e4: 14 c0 rjmp .+40 ; 0x1030e <Menu_PosInfo+0xa4>
// case SATFIX_2D:
// case SATFIX_NONE:
default:
JetiBox_printfxy(12,0,"NoFx");
102e6: 8c e0 ldi r24, 0x0C ; 12
102e8: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
102ec: 89 e5 ldi r24, 0x59 ; 89
102ee: 9e e0 ldi r25, 0x0E ; 14
102f0: 9f 93 push r25
102f2: 8f 93 push r24
102f4: 8e e6 ldi r24, 0x6E ; 110
102f6: 9f e0 ldi r25, 0x0F ; 15
102f8: 9f 93 push r25
102fa: 8f 93 push r24
102fc: e0 91 78 06 lds r30, 0x0678
10300: f0 91 79 06 lds r31, 0x0679
10304: 09 95 icall
break;
10306: 0f 90 pop r0
10308: 0f 90 pop r0
1030a: 0f 90 pop r0
1030c: 0f 90 pop r0
}
if(GPSInfo.Flags & FLAG_DIFFSOLN)
1030e: 80 91 d7 08 lds r24, 0x08D7
10312: 81 ff sbrs r24, 1
10314: 14 c0 rjmp .+40 ; 0x1033e <Menu_PosInfo+0xd4>
{
JetiBox_printfxy(12,0,"DGPS");
10316: 8c e0 ldi r24, 0x0C ; 12
10318: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
1031c: 84 e5 ldi r24, 0x54 ; 84
1031e: 9e e0 ldi r25, 0x0E ; 14
10320: 9f 93 push r25
10322: 8f 93 push r24
10324: 8e e6 ldi r24, 0x6E ; 110
10326: 9f e0 ldi r25, 0x0F ; 15
10328: 9f 93 push r25
1032a: 8f 93 push r24
1032c: e0 91 78 06 lds r30, 0x0678
10330: f0 91 79 06 lds r31, 0x0679
10334: 09 95 icall
10336: 0f 90 pop r0
10338: 0f 90 pop r0
1033a: 0f 90 pop r0
1033c: 0f 90 pop r0
}
JetiBox_printfxy(0,1,"Home:%3dm %3d%c %c", GPSInfo.HomeDistance/10, GPSInfo.HomeBearing, 0xDF,NC_GPS_ModeCharacter);
1033e: 80 e1 ldi r24, 0x10 ; 16
10340: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
10344: 80 91 96 02 lds r24, 0x0296
10348: 1f 92 push r1
1034a: 8f 93 push r24
1034c: 1f 92 push r1
1034e: 8f ed ldi r24, 0xDF ; 223
10350: 8f 93 push r24
10352: ed ed ldi r30, 0xDD ; 221
10354: f8 e0 ldi r31, 0x08 ; 8
10356: 81 81 ldd r24, Z+1 ; 0x01
10358: 8f 93 push r24
1035a: 80 81 ld r24, Z
1035c: 8f 93 push r24
1035e: 20 91 db 08 lds r18, 0x08DB
10362: 30 91 dc 08 lds r19, 0x08DC
10366: ad ec ldi r26, 0xCD ; 205
10368: bc ec ldi r27, 0xCC ; 204
1036a: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
1036e: 96 95 lsr r25
10370: 87 95 ror r24
10372: 96 95 lsr r25
10374: 87 95 ror r24
10376: 96 95 lsr r25
10378: 87 95 ror r24
1037a: 9f 93 push r25
1037c: 8f 93 push r24
1037e: 81 e4 ldi r24, 0x41 ; 65
10380: 9e e0 ldi r25, 0x0E ; 14
10382: 9f 93 push r25
10384: 8f 93 push r24
10386: 8e e6 ldi r24, 0x6E ; 110
10388: 9f e0 ldi r25, 0x0F ; 15
1038a: 9f 93 push r25
1038c: 8f 93 push r24
1038e: e0 91 78 06 lds r30, 0x0678
10392: f0 91 79 06 lds r31, 0x0679
10396: 09 95 icall
10398: 8d b7 in r24, 0x3d ; 61
1039a: 9e b7 in r25, 0x3e ; 62
1039c: 0c 96 adiw r24, 0x0c ; 12
1039e: 0f b6 in r0, 0x3f ; 63
103a0: f8 94 cli
103a2: 9e bf out 0x3e, r25 ; 62
103a4: 0f be out 0x3f, r0 ; 63
103a6: 8d bf out 0x3d, r24 ; 61
103a8: 08 95 ret
}
else
{ //0123456789ABCDEF
JetiBox_printfxy(2,0,"No NaviCtrl!");
103aa: 82 e0 ldi r24, 0x02 ; 2
103ac: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
103b0: 84 e3 ldi r24, 0x34 ; 52
103b2: 9e e0 ldi r25, 0x0E ; 14
103b4: 9f 93 push r25
103b6: 8f 93 push r24
103b8: 8e e6 ldi r24, 0x6E ; 110
103ba: 9f e0 ldi r25, 0x0F ; 15
103bc: 9f 93 push r25
103be: 8f 93 push r24
103c0: e0 91 78 06 lds r30, 0x0678
103c4: f0 91 79 06 lds r31, 0x0679
103c8: 09 95 icall
103ca: 0f 90 pop r0
103cc: 0f 90 pop r0
103ce: 0f 90 pop r0
103d0: 0f 90 pop r0
103d2: 08 95 ret
000103d4 <Menu_Status>:
// the menu functions
// -----------------------------------------------------------
void Menu_Status(uint8_t key)
{ //0123456789ABCDEF
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"%2i.%1iV",UBat/10, UBat%10);
103d4: 80 e0 ldi r24, 0x00 ; 0
103d6: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
103da: 80 91 1a 01 lds r24, 0x011A
103de: 90 91 1b 01 lds r25, 0x011B
103e2: e0 91 1a 01 lds r30, 0x011A
103e6: f0 91 1b 01 lds r31, 0x011B
103ea: 2a e0 ldi r18, 0x0A ; 10
103ec: 30 e0 ldi r19, 0x00 ; 0
103ee: b9 01 movw r22, r18
103f0: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
103f4: 9f 93 push r25
103f6: 8f 93 push r24
103f8: cf 01 movw r24, r30
103fa: b9 01 movw r22, r18
103fc: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
10400: 7f 93 push r23
10402: 6f 93 push r22
10404: 8c ea ldi r24, 0xAC ; 172
10406: 90 e1 ldi r25, 0x10 ; 16
10408: 9f 93 push r25
1040a: 8f 93 push r24
1040c: 8e e6 ldi r24, 0x6E ; 110
1040e: 9f e0 ldi r25, 0x0F ; 15
10410: 9f 93 push r25
10412: 8f 93 push r24
10414: e0 91 78 06 lds r30, 0x0678
10418: f0 91 79 06 lds r31, 0x0679
1041c: 09 95 icall
if(NaviDataOkay)
1041e: 2d b7 in r18, 0x3d ; 61
10420: 3e b7 in r19, 0x3e ; 62
10422: 28 5f subi r18, 0xF8 ; 248
10424: 3f 4f sbci r19, 0xFF ; 255
10426: 0f b6 in r0, 0x3f ; 63
10428: f8 94 cli
1042a: 3e bf out 0x3e, r19 ; 62
1042c: 0f be out 0x3f, r0 ; 63
1042e: 2d bf out 0x3d, r18 ; 61
10430: 80 91 a4 02 lds r24, 0x02A4
10434: 88 23 and r24, r24
10436: b1 f1 breq .+108 ; 0x104a4 <Menu_Status+0xd0>
{
JetiBox_printfxy(6,0,"%3d%c %3dm%c",CompassCorrected, 0xDF, GPSInfo.HomeDistance/10,NC_GPS_ModeCharacter);
10438: 86 e0 ldi r24, 0x06 ; 6
1043a: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
1043e: 80 91 96 02 lds r24, 0x0296
10442: 1f 92 push r1
10444: 8f 93 push r24
10446: 20 91 db 08 lds r18, 0x08DB
1044a: 30 91 dc 08 lds r19, 0x08DC
1044e: ad ec ldi r26, 0xCD ; 205
10450: bc ec ldi r27, 0xCC ; 204
10452: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
10456: 96 95 lsr r25
10458: 87 95 ror r24
1045a: 96 95 lsr r25
1045c: 87 95 ror r24
1045e: 96 95 lsr r25
10460: 87 95 ror r24
10462: 9f 93 push r25
10464: 8f 93 push r24
10466: 1f 92 push r1
10468: 8f ed ldi r24, 0xDF ; 223
1046a: 8f 93 push r24
1046c: 80 91 66 06 lds r24, 0x0666
10470: 8f 93 push r24
10472: 80 91 65 06 lds r24, 0x0665
10476: 8f 93 push r24
10478: 8f e9 ldi r24, 0x9F ; 159
1047a: 90 e1 ldi r25, 0x10 ; 16
1047c: 9f 93 push r25
1047e: 8f 93 push r24
10480: 8e e6 ldi r24, 0x6E ; 110
10482: 9f e0 ldi r25, 0x0F ; 15
10484: 9f 93 push r25
10486: 8f 93 push r24
10488: e0 91 78 06 lds r30, 0x0678
1048c: f0 91 79 06 lds r31, 0x0679
10490: 09 95 icall
10492: 8d b7 in r24, 0x3d ; 61
10494: 9e b7 in r25, 0x3e ; 62
10496: 0c 96 adiw r24, 0x0c ; 12
10498: 0f b6 in r0, 0x3f ; 63
1049a: f8 94 cli
1049c: 9e bf out 0x3e, r25 ; 62
1049e: 0f be out 0x3f, r0 ; 63
104a0: 8d bf out 0x3d, r24 ; 61
104a2: 14 c0 rjmp .+40 ; 0x104cc <Menu_Status+0xf8>
}
else
{
JetiBox_printfxy(6,0,"Status ");
104a4: 86 e0 ldi r24, 0x06 ; 6
104a6: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
104aa: 84 e9 ldi r24, 0x94 ; 148
104ac: 90 e1 ldi r25, 0x10 ; 16
104ae: 9f 93 push r25
104b0: 8f 93 push r24
104b2: 8e e6 ldi r24, 0x6E ; 110
104b4: 9f e0 ldi r25, 0x0F ; 15
104b6: 9f 93 push r25
104b8: 8f 93 push r24
104ba: e0 91 78 06 lds r30, 0x0678
104be: f0 91 79 06 lds r31, 0x0679
104c2: 09 95 icall
104c4: 0f 90 pop r0
104c6: 0f 90 pop r0
104c8: 0f 90 pop r0
104ca: 0f 90 pop r0
}
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(NC_ErrorCode)
104cc: 80 91 bb 04 lds r24, 0x04BB
104d0: 88 23 and r24, r24
104d2: 09 f4 brne .+2 ; 0x104d6 <Menu_Status+0x102>
104d4: 58 c0 rjmp .+176 ; 0x10586 <Menu_Status+0x1b2>
{
static unsigned int timer;
static char toggle = 1;
if(CheckDelay(timer)) { if(toggle) toggle = 0; else toggle = 1; timer = SetDelay(1500);};
104d6: 80 91 95 04 lds r24, 0x0495
104da: 90 91 96 04 lds r25, 0x0496
104de: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
104e2: 88 23 and r24, r24
104e4: 91 f0 breq .+36 ; 0x1050a <Menu_Status+0x136>
104e6: 80 91 5d 01 lds r24, 0x015D
104ea: 88 23 and r24, r24
104ec: 19 f0 breq .+6 ; 0x104f4 <Menu_Status+0x120>
104ee: 10 92 5d 01 sts 0x015D, r1
104f2: 03 c0 rjmp .+6 ; 0x104fa <Menu_Status+0x126>
104f4: 81 e0 ldi r24, 0x01 ; 1
104f6: 80 93 5d 01 sts 0x015D, r24
104fa: 8c ed ldi r24, 0xDC ; 220
104fc: 95 e0 ldi r25, 0x05 ; 5
104fe: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
10502: 90 93 96 04 sts 0x0496, r25
10506: 80 93 95 04 sts 0x0495, r24
if(toggle)
1050a: 80 91 5d 01 lds r24, 0x015D
1050e: 88 23 and r24, r24
10510: f9 f0 breq .+62 ; 0x10550 <Menu_Status+0x17c>
{
LIBFC_JetiBox_SetPos(0);
10512: 80 e0 ldi r24, 0x00 ; 0
10514: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
_printf_P(&LIBFC_JetiBox_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);
10518: 1f 92 push r1
1051a: 1f 92 push r1
1051c: 80 91 bb 04 lds r24, 0x04BB
10520: 21 e1 ldi r18, 0x11 ; 17
10522: 82 9f mul r24, r18
10524: c0 01 movw r24, r0
10526: 11 24 eor r1, r1
10528: 84 59 subi r24, 0x94 ; 148
1052a: 94 4f sbci r25, 0xF4 ; 244
1052c: 9f 93 push r25
1052e: 8f 93 push r24
10530: 8e e6 ldi r24, 0x6E ; 110
10532: 9f e0 ldi r25, 0x0F ; 15
10534: 9f 93 push r25
10536: 8f 93 push r24
10538: e0 91 78 06 lds r30, 0x0678
1053c: f0 91 79 06 lds r31, 0x0679
10540: 09 95 icall
10542: 0f 90 pop r0
10544: 0f 90 pop r0
10546: 0f 90 pop r0
10548: 0f 90 pop r0
1054a: 0f 90 pop r0
1054c: 0f 90 pop r0
1054e: 74 c0 rjmp .+232 ; 0x10638 <Menu_Status+0x264>
}
else
{
JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode);
10550: 86 e0 ldi r24, 0x06 ; 6
10552: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
10556: 80 91 bb 04 lds r24, 0x04BB
1055a: 1f 92 push r1
1055c: 8f 93 push r24
1055e: 88 e8 ldi r24, 0x88 ; 136
10560: 90 e1 ldi r25, 0x10 ; 16
10562: 9f 93 push r25
10564: 8f 93 push r24
10566: 8e e6 ldi r24, 0x6E ; 110
10568: 9f e0 ldi r25, 0x0F ; 15
1056a: 9f 93 push r25
1056c: 8f 93 push r24
1056e: e0 91 78 06 lds r30, 0x0678
10572: f0 91 79 06 lds r31, 0x0679
10576: 09 95 icall
10578: 0f 90 pop r0
1057a: 0f 90 pop r0
1057c: 0f 90 pop r0
1057e: 0f 90 pop r0
10580: 0f 90 pop r0
10582: 0f 90 pop r0
10584: 59 c0 rjmp .+178 ; 0x10638 <Menu_Status+0x264>
// if(MotorenEin) JetiBeep = 'O';
}
}
else
if(NC_To_FC_Flags & NC_TO_FC_SIMULATION_ACTIVE)
10586: 80 91 b7 04 lds r24, 0x04B7
1058a: 84 ff sbrs r24, 4
1058c: 15 c0 rjmp .+42 ; 0x105b8 <Menu_Status+0x1e4>
{
JetiBox_printfxy(6,0,"SIMULATION");
1058e: 86 e0 ldi r24, 0x06 ; 6
10590: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
10594: 8d e7 ldi r24, 0x7D ; 125
10596: 90 e1 ldi r25, 0x10 ; 16
10598: 9f 93 push r25
1059a: 8f 93 push r24
1059c: 8e e6 ldi r24, 0x6E ; 110
1059e: 9f e0 ldi r25, 0x0F ; 15
105a0: 9f 93 push r25
105a2: 8f 93 push r24
105a4: e0 91 78 06 lds r30, 0x0678
105a8: f0 91 79 06 lds r31, 0x0679
105ac: 09 95 icall
105ae: 0f 90 pop r0
105b0: 0f 90 pop r0
105b2: 0f 90 pop r0
105b4: 0f 90 pop r0
105b6: 40 c0 rjmp .+128 ; 0x10638 <Menu_Status+0x264>
}
else
if(ShowSettingNameTime)
105b8: 80 91 80 04 lds r24, 0x0480
105bc: 88 23 and r24, r24
105be: e1 f1 breq .+120 ; 0x10638 <Menu_Status+0x264>
{
LIBFC_JetiBox_Clear();
105c0: 0e 94 81 0f call 0x1f02 ; 0x1f02 <LIBFC_JetiBox_Clear>
JetiBox_printfxy(0,0,"Set%d:%s",ActiveParamSet,EE_Parameter.Name);
105c4: 80 e0 ldi r24, 0x00 ; 0
105c6: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
105ca: 8a eb ldi r24, 0xBA ; 186
105cc: 95 e0 ldi r25, 0x05 ; 5
105ce: 9f 93 push r25
105d0: 8f 93 push r24
105d2: 80 91 52 01 lds r24, 0x0152
105d6: 1f 92 push r1
105d8: 8f 93 push r24
105da: 84 e7 ldi r24, 0x74 ; 116
105dc: 90 e1 ldi r25, 0x10 ; 16
105de: 9f 93 push r25
105e0: 8f 93 push r24
105e2: 8e e6 ldi r24, 0x6E ; 110
105e4: 9f e0 ldi r25, 0x0F ; 15
105e6: 9f 93 push r25
105e8: 8f 93 push r24
105ea: e0 91 78 06 lds r30, 0x0678
105ee: f0 91 79 06 lds r31, 0x0679
105f2: 09 95 icall
if(FC_StatusFlags3 & FC_STATUS3_BOAT) JetiBox_printfxy(0,1,"(Boat-Mode)");
105f4: 80 91 c9 03 lds r24, 0x03C9
105f8: 2d b7 in r18, 0x3d ; 61
105fa: 3e b7 in r19, 0x3e ; 62
105fc: 28 5f subi r18, 0xF8 ; 248
105fe: 3f 4f sbci r19, 0xFF ; 255
10600: 0f b6 in r0, 0x3f ; 63
10602: f8 94 cli
10604: 3e bf out 0x3e, r19 ; 62
10606: 0f be out 0x3f, r0 ; 63
10608: 2d bf out 0x3d, r18 ; 61
1060a: 81 ff sbrs r24, 1
1060c: a5 c0 rjmp .+330 ; 0x10758 <Menu_Status+0x384>
1060e: 80 e1 ldi r24, 0x10 ; 16
10610: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
10614: 88 e6 ldi r24, 0x68 ; 104
10616: 90 e1 ldi r25, 0x10 ; 16
10618: 9f 93 push r25
1061a: 8f 93 push r24
1061c: 8e e6 ldi r24, 0x6E ; 110
1061e: 9f e0 ldi r25, 0x0F ; 15
10620: 9f 93 push r25
10622: 8f 93 push r24
10624: e0 91 78 06 lds r30, 0x0678
10628: f0 91 79 06 lds r31, 0x0679
1062c: 09 95 icall
1062e: 0f 90 pop r0
10630: 0f 90 pop r0
10632: 0f 90 pop r0
10634: 0f 90 pop r0
10636: 08 95 ret
}
#else
if(NC_ErrorCode) { JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); if(MotorenEin) JetiBeep = 'S';};
#endif
JetiBox_printfxy(0,1,"%4i %2i:%02i",Capacity.UsedCapacity,FlugSekunden/60,FlugSekunden%60);
10638: 80 e1 ldi r24, 0x10 ; 16
1063a: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
1063e: 40 91 5e 04 lds r20, 0x045E
10642: 50 91 5f 04 lds r21, 0x045F
10646: 9a 01 movw r18, r20
10648: a9 e8 ldi r26, 0x89 ; 137
1064a: b8 e8 ldi r27, 0x88 ; 136
1064c: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
10650: 96 95 lsr r25
10652: 87 95 ror r24
10654: 92 95 swap r25
10656: 82 95 swap r24
10658: 8f 70 andi r24, 0x0F ; 15
1065a: 89 27 eor r24, r25
1065c: 9f 70 andi r25, 0x0F ; 15
1065e: 89 27 eor r24, r25
10660: 6c e3 ldi r22, 0x3C ; 60
10662: 68 9f mul r22, r24
10664: 90 01 movw r18, r0
10666: 69 9f mul r22, r25
10668: 30 0d add r19, r0
1066a: 11 24 eor r1, r1
1066c: ca 01 movw r24, r20
1066e: 82 1b sub r24, r18
10670: 93 0b sbc r25, r19
10672: 9f 93 push r25
10674: 8f 93 push r24
10676: 9a 01 movw r18, r20
10678: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
1067c: 96 95 lsr r25
1067e: 87 95 ror r24
10680: 92 95 swap r25
10682: 82 95 swap r24
10684: 8f 70 andi r24, 0x0F ; 15
10686: 89 27 eor r24, r25
10688: 9f 70 andi r25, 0x0F ; 15
1068a: 89 27 eor r24, r25
1068c: 9f 93 push r25
1068e: 8f 93 push r24
10690: e9 e1 ldi r30, 0x19 ; 25
10692: f5 e0 ldi r31, 0x05 ; 5
10694: 81 81 ldd r24, Z+1 ; 0x01
10696: 8f 93 push r24
10698: 80 81 ld r24, Z
1069a: 8f 93 push r24
1069c: 8b e5 ldi r24, 0x5B ; 91
1069e: 90 e1 ldi r25, 0x10 ; 16
106a0: 9f 93 push r25
106a2: 8f 93 push r24
106a4: 8e e6 ldi r24, 0x6E ; 110
106a6: 9f e0 ldi r25, 0x0F ; 15
106a8: 9f 93 push r25
106aa: 8f 93 push r24
106ac: e0 91 78 06 lds r30, 0x0678
106b0: f0 91 79 06 lds r31, 0x0679
106b4: 09 95 icall
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
106b6: 80 91 5c 06 lds r24, 0x065C
106ba: 2d b7 in r18, 0x3d ; 61
106bc: 3e b7 in r19, 0x3e ; 62
106be: 26 5f subi r18, 0xF6 ; 246
106c0: 3f 4f sbci r19, 0xFF ; 255
106c2: 0f b6 in r0, 0x3f ; 63
106c4: f8 94 cli
106c6: 3e bf out 0x3e, r19 ; 62
106c8: 0f be out 0x3f, r0 ; 63
106ca: 2d bf out 0x3d, r18 ; 61
106cc: 80 ff sbrs r24, 0
106ce: 2c c0 rjmp .+88 ; 0x10728 <Menu_Status+0x354>
{
JetiBox_printfxy(10,1,"%4im%c", (int16_t)(HoehenWert/100),VarioCharacter);
106d0: 8a e1 ldi r24, 0x1A ; 26
106d2: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
106d6: 80 91 20 01 lds r24, 0x0120
106da: 1f 92 push r1
106dc: 8f 93 push r24
106de: 60 91 fe 03 lds r22, 0x03FE
106e2: 70 91 ff 03 lds r23, 0x03FF
106e6: 80 91 00 04 lds r24, 0x0400
106ea: 90 91 01 04 lds r25, 0x0401
106ee: 24 e6 ldi r18, 0x64 ; 100
106f0: 30 e0 ldi r19, 0x00 ; 0
106f2: 40 e0 ldi r20, 0x00 ; 0
106f4: 50 e0 ldi r21, 0x00 ; 0
106f6: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
106fa: 3f 93 push r19
106fc: 2f 93 push r18
106fe: 84 e5 ldi r24, 0x54 ; 84
10700: 90 e1 ldi r25, 0x10 ; 16
10702: 9f 93 push r25
10704: 8f 93 push r24
10706: 8e e6 ldi r24, 0x6E ; 110
10708: 9f e0 ldi r25, 0x0F ; 15
1070a: 9f 93 push r25
1070c: 8f 93 push r24
1070e: e0 91 78 06 lds r30, 0x0678
10712: f0 91 79 06 lds r31, 0x0679
10716: 09 95 icall
10718: 8d b7 in r24, 0x3d ; 61
1071a: 9e b7 in r25, 0x3e ; 62
1071c: 08 96 adiw r24, 0x08 ; 8
1071e: 0f b6 in r0, 0x3f ; 63
10720: f8 94 cli
10722: 9e bf out 0x3e, r25 ; 62
10724: 0f be out 0x3f, r0 ; 63
10726: 8d bf out 0x3d, r24 ; 61
}
if(FC_StatusFlags3 & FC_STATUS3_REDUNDANCE) JetiBox_printfxy(10,1,"R");
10728: 80 91 c9 03 lds r24, 0x03C9
1072c: 80 ff sbrs r24, 0
1072e: 14 c0 rjmp .+40 ; 0x10758 <Menu_Status+0x384>
10730: 8a e1 ldi r24, 0x1A ; 26
10732: 0e 94 7b 0f call 0x1ef6 ; 0x1ef6 <LIBFC_JetiBox_SetPos>
10736: 82 e5 ldi r24, 0x52 ; 82
10738: 90 e1 ldi r25, 0x10 ; 16
1073a: 9f 93 push r25
1073c: 8f 93 push r24
1073e: 8e e6 ldi r24, 0x6E ; 110
10740: 9f e0 ldi r25, 0x0F ; 15
10742: 9f 93 push r25
10744: 8f 93 push r24
10746: e0 91 78 06 lds r30, 0x0678
1074a: f0 91 79 06 lds r31, 0x0679
1074e: 09 95 icall
10750: 0f 90 pop r0
10752: 0f 90 pop r0
10754: 0f 90 pop r0
10756: 0f 90 pop r0
10758: 08 95 ret
0001075a <JetiBox_Update>:
// -----------------------------------------------------------
// Update display buffer
// -----------------------------------------------------------
unsigned char JetiBox_Update(unsigned char key)
{
1075a: cf 93 push r28
1075c: c8 2f mov r28, r24
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
static uint8_t item = 0, last_item = 0; // the menu item
static uint8_t updateDelay = 1 , last_key;
// navigate within the menu by key action
last_item = item;
1075e: 40 91 90 04 lds r20, 0x0490
10762: 40 93 8f 04 sts 0x048F, r20
switch(key)
10766: 8f 32 cpi r24, 0x2F ; 47
10768: 49 f1 breq .+82 ; 0x107bc <JetiBox_Update+0x62>
1076a: 18 f4 brcc .+6 ; 0x10772 <JetiBox_Update+0x18>
1076c: 8f 31 cpi r24, 0x1F ; 31
1076e: b1 f0 breq .+44 ; 0x1079c <JetiBox_Update+0x42>
10770: 44 c0 rjmp .+136 ; 0x107fa <JetiBox_Update+0xa0>
10772: 8f 34 cpi r24, 0x4F ; 79
10774: 99 f1 breq .+102 ; 0x107dc <JetiBox_Update+0x82>
10776: 8f 38 cpi r24, 0x8F ; 143
10778: 09 f0 breq .+2 ; 0x1077c <JetiBox_Update+0x22>
1077a: 3f c0 rjmp .+126 ; 0x107fa <JetiBox_Update+0xa0>
{
case JETIBOX_KEY_LEFT:
//if (item == 0) return (1); // switch back to jeti expander menu
// else
item = pgm_read_byte(&JetiBox_Menu[item].left); //trigger to left menu item
1077c: 84 2f mov r24, r20
1077e: 90 e0 ldi r25, 0x00 ; 0
10780: fc 01 movw r30, r24
10782: ee 0f add r30, r30
10784: ff 1f adc r31, r31
10786: 8e 0f add r24, r30
10788: 9f 1f adc r25, r31
1078a: fc 01 movw r30, r24
1078c: ee 0f add r30, r30
1078e: ff 1f adc r31, r31
10790: eb 54 subi r30, 0x4B ; 75
10792: ff 4e sbci r31, 0xEF ; 239
10794: e4 91 lpm r30, Z
10796: e0 93 90 04 sts 0x0490, r30
break;
1079a: 2f c0 rjmp .+94 ; 0x107fa <JetiBox_Update+0xa0>
case JETIBOX_KEY_RIGHT:
item = pgm_read_byte(&JetiBox_Menu[item].right); //trigger to right menu item
1079c: 84 2f mov r24, r20
1079e: 90 e0 ldi r25, 0x00 ; 0
107a0: fc 01 movw r30, r24
107a2: ee 0f add r30, r30
107a4: ff 1f adc r31, r31
107a6: 8e 0f add r24, r30
107a8: 9f 1f adc r25, r31
107aa: fc 01 movw r30, r24
107ac: ee 0f add r30, r30
107ae: ff 1f adc r31, r31
107b0: ea 54 subi r30, 0x4A ; 74
107b2: ff 4e sbci r31, 0xEF ; 239
107b4: e4 91 lpm r30, Z
107b6: e0 93 90 04 sts 0x0490, r30
break;
107ba: 1f c0 rjmp .+62 ; 0x107fa <JetiBox_Update+0xa0>
case JETIBOX_KEY_UP:
item = pgm_read_byte(&JetiBox_Menu[item].up); //trigger to up menu item
107bc: 84 2f mov r24, r20
107be: 90 e0 ldi r25, 0x00 ; 0
107c0: fc 01 movw r30, r24
107c2: ee 0f add r30, r30
107c4: ff 1f adc r31, r31
107c6: 8e 0f add r24, r30
107c8: 9f 1f adc r25, r31
107ca: fc 01 movw r30, r24
107cc: ee 0f add r30, r30
107ce: ff 1f adc r31, r31
107d0: e9 54 subi r30, 0x49 ; 73
107d2: ff 4e sbci r31, 0xEF ; 239
107d4: e4 91 lpm r30, Z
107d6: e0 93 90 04 sts 0x0490, r30
break;
107da: 0f c0 rjmp .+30 ; 0x107fa <JetiBox_Update+0xa0>
case JETIBOX_KEY_DOWN:
item = pgm_read_byte(&JetiBox_Menu[item].down); //trigger to down menu item
107dc: 24 2f mov r18, r20
107de: 30 e0 ldi r19, 0x00 ; 0
107e0: f9 01 movw r30, r18
107e2: ee 0f add r30, r30
107e4: ff 1f adc r31, r31
107e6: 2e 0f add r18, r30
107e8: 3f 1f adc r19, r31
107ea: f9 01 movw r30, r18
107ec: ee 0f add r30, r30
107ee: ff 1f adc r31, r31
107f0: e8 54 subi r30, 0x48 ; 72
107f2: ff 4e sbci r31, 0xEF ; 239
107f4: e4 91 lpm r30, Z
107f6: e0 93 90 04 sts 0x0490, r30
default:
break;
}
// if the menu item has been changed, do not pass the key to the item handler
// to avoid jumping over to items
if(item != last_item) key = JETIBOX_KEY_UNDEF;
107fa: 80 91 90 04 lds r24, 0x0490
107fe: 48 13 cpse r20, r24
10800: 21 c0 rjmp .+66 ; 0x10844 <JetiBox_Update+0xea>
// if((updateDelay++ & 0x01) || (key != last_key))
if((updateDelay++ & 0x01) || (key != JETIBOX_KEY_NONE))
10802: 80 91 58 01 lds r24, 0x0158
10806: 91 e0 ldi r25, 0x01 ; 1
10808: 98 0f add r25, r24
1080a: 90 93 58 01 sts 0x0158, r25
1080e: 80 fd sbrc r24, 0
10810: 02 c0 rjmp .+4 ; 0x10816 <JetiBox_Update+0xbc>
10812: cf 30 cpi r28, 0x0F ; 15
10814: f1 f0 breq .+60 ; 0x10852 <JetiBox_Update+0xf8>
{
last_key = key;
10816: c0 93 8e 04 sts 0x048E, r28
LIBFC_JetiBox_Clear();
1081a: 0e 94 81 0f call 0x1f02 ; 0x1f02 <LIBFC_JetiBox_Clear>
//execute menu item handler
((pFctMenu)(pgm_read_word(&(JetiBox_Menu[item].pHandler))))(key);
1081e: 20 91 90 04 lds r18, 0x0490
10822: 30 e0 ldi r19, 0x00 ; 0
10824: f9 01 movw r30, r18
10826: ee 0f add r30, r30
10828: ff 1f adc r31, r31
1082a: 2e 0f add r18, r30
1082c: 3f 1f adc r19, r31
1082e: f9 01 movw r30, r18
10830: ee 0f add r30, r30
10832: ff 1f adc r31, r31
10834: e7 54 subi r30, 0x47 ; 71
10836: ff 4e sbci r31, 0xEF ; 239
10838: 25 91 lpm r18, Z+
1083a: 34 91 lpm r19, Z
1083c: 8c 2f mov r24, r28
1083e: f9 01 movw r30, r18
10840: 09 95 icall
10842: 07 c0 rjmp .+14 ; 0x10852 <JetiBox_Update+0xf8>
// if the menu item has been changed, do not pass the key to the item handler
// to avoid jumping over to items
if(item != last_item) key = JETIBOX_KEY_UNDEF;
// if((updateDelay++ & 0x01) || (key != last_key))
if((updateDelay++ & 0x01) || (key != JETIBOX_KEY_NONE))
10844: 80 91 58 01 lds r24, 0x0158
10848: 8f 5f subi r24, 0xFF ; 255
1084a: 80 93 58 01 sts 0x0158, r24
default:
break;
}
// if the menu item has been changed, do not pass the key to the item handler
// to avoid jumping over to items
if(item != last_item) key = JETIBOX_KEY_UNDEF;
1084e: c0 e0 ldi r28, 0x00 ; 0
10850: e2 cf rjmp .-60 ; 0x10816 <JetiBox_Update+0xbc>
//execute menu item handler
((pFctMenu)(pgm_read_word(&(JetiBox_Menu[item].pHandler))))(key);
}
#endif
return (0);
}
10852: 80 e0 ldi r24, 0x00 ; 0
10854: cf 91 pop r28
10856: 08 95 ret
00010858 <BuildJeti_Vario>:
void BuildJeti_Vario(void)
{
signed int tmp = 0;
static signed int JetiVarioMeter = 0;
JetiVarioMeter = (JetiVarioMeter * 3 + VarioMeter) / 4;
10858: 40 91 54 03 lds r20, 0x0354
1085c: 50 91 55 03 lds r21, 0x0355
10860: 20 91 97 04 lds r18, 0x0497
10864: 30 91 98 04 lds r19, 0x0498
10868: c9 01 movw r24, r18
1086a: 88 0f add r24, r24
1086c: 99 1f adc r25, r25
1086e: 82 0f add r24, r18
10870: 93 1f adc r25, r19
10872: 84 0f add r24, r20
10874: 95 1f adc r25, r21
10876: 99 23 and r25, r25
10878: 0c f4 brge .+2 ; 0x1087c <BuildJeti_Vario+0x24>
1087a: 03 96 adiw r24, 0x03 ; 3
1087c: 95 95 asr r25
1087e: 87 95 ror r24
10880: 95 95 asr r25
10882: 87 95 ror r24
10884: 90 93 98 04 sts 0x0498, r25
10888: 80 93 97 04 sts 0x0497, r24
if(VarioCharacter == '+')
1088c: 20 91 20 01 lds r18, 0x0120
10890: 2b 32 cpi r18, 0x2B ; 43
10892: d1 f4 brne .+52 ; 0x108c8 <BuildJeti_Vario+0x70>
{
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 + 5;
10894: 40 91 50 05 lds r20, 0x0550
10898: 20 91 f8 03 lds r18, 0x03F8
1089c: 30 91 f9 03 lds r19, 0x03F9
108a0: 42 9f mul r20, r18
108a2: c0 01 movw r24, r0
108a4: 43 9f mul r20, r19
108a6: 90 0d add r25, r0
108a8: 11 24 eor r1, r1
108aa: 99 23 and r25, r25
108ac: 0c f4 brge .+2 ; 0x108b0 <BuildJeti_Vario+0x58>
108ae: 4f 96 adiw r24, 0x1f ; 31
108b0: 95 95 asr r25
108b2: 87 95 ror r24
108b4: 95 95 asr r25
108b6: 87 95 ror r24
108b8: 95 95 asr r25
108ba: 87 95 ror r24
108bc: 95 95 asr r25
108be: 87 95 ror r24
108c0: 95 95 asr r25
108c2: 87 95 ror r24
108c4: 05 96 adiw r24, 0x05 ; 5
108c6: 47 c0 rjmp .+142 ; 0x10956 <BuildJeti_Vario+0xfe>
}
else
if(VarioCharacter == '-')
108c8: 2d 32 cpi r18, 0x2D ; 45
108ca: d1 f4 brne .+52 ; 0x10900 <BuildJeti_Vario+0xa8>
{
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 - 5;
108cc: 40 91 50 05 lds r20, 0x0550
108d0: 20 91 f8 03 lds r18, 0x03F8
108d4: 30 91 f9 03 lds r19, 0x03F9
108d8: 42 9f mul r20, r18
108da: c0 01 movw r24, r0
108dc: 43 9f mul r20, r19
108de: 90 0d add r25, r0
108e0: 11 24 eor r1, r1
108e2: 99 23 and r25, r25
108e4: 0c f4 brge .+2 ; 0x108e8 <BuildJeti_Vario+0x90>
108e6: 4f 96 adiw r24, 0x1f ; 31
108e8: 95 95 asr r25
108ea: 87 95 ror r24
108ec: 95 95 asr r25
108ee: 87 95 ror r24
108f0: 95 95 asr r25
108f2: 87 95 ror r24
108f4: 95 95 asr r25
108f6: 87 95 ror r24
108f8: 95 95 asr r25
108fa: 87 95 ror r24
108fc: 05 97 sbiw r24, 0x05 ; 5
108fe: 2b c0 rjmp .+86 ; 0x10956 <BuildJeti_Vario+0xfe>
}
else
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY))
10900: 20 32 cpi r18, 0x20 ; 32
10902: a9 f4 brne .+42 ; 0x1092e <BuildJeti_Vario+0xd6>
10904: 20 91 cb 03 lds r18, 0x03CB
10908: 21 ff sbrs r18, 1
1090a: 20 c0 rjmp .+64 ; 0x1094c <BuildJeti_Vario+0xf4>
{
tmp = (JetiVarioMeter/32);
1090c: 9c 01 movw r18, r24
1090e: 99 23 and r25, r25
10910: 14 f4 brge .+4 ; 0x10916 <BuildJeti_Vario+0xbe>
10912: 21 5e subi r18, 0xE1 ; 225
10914: 3f 4f sbci r19, 0xFF ; 255
10916: c9 01 movw r24, r18
10918: 95 95 asr r25
1091a: 87 95 ror r24
1091c: 95 95 asr r25
1091e: 87 95 ror r24
10920: 95 95 asr r25
10922: 87 95 ror r24
10924: 95 95 asr r25
10926: 87 95 ror r24
10928: 95 95 asr r25
1092a: 87 95 ror r24
1092c: 14 c0 rjmp .+40 ; 0x10956 <BuildJeti_Vario+0xfe>
}
else
if(VarioCharacter == '^') tmp = FromNC_AltitudeSpeed;
1092e: 2e 35 cpi r18, 0x5E ; 94
10930: 21 f4 brne .+8 ; 0x1093a <BuildJeti_Vario+0xe2>
10932: 80 91 f3 03 lds r24, 0x03F3
10936: 90 e0 ldi r25, 0x00 ; 0
10938: 0e c0 rjmp .+28 ; 0x10956 <BuildJeti_Vario+0xfe>
else
if(VarioCharacter == 'v') tmp = tmp - FromNC_AltitudeSpeed;
1093a: 26 37 cpi r18, 0x76 ; 118
1093c: 51 f4 brne .+20 ; 0x10952 <BuildJeti_Vario+0xfa>
1093e: 80 91 f3 03 lds r24, 0x03F3
10942: 90 e0 ldi r25, 0x00 ; 0
10944: 91 95 neg r25
10946: 81 95 neg r24
10948: 91 09 sbc r25, r1
1094a: 05 c0 rjmp .+10 ; 0x10956 <BuildJeti_Vario+0xfe>
};
void BuildJeti_Vario(void)
{
signed int tmp = 0;
1094c: 80 e0 ldi r24, 0x00 ; 0
1094e: 90 e0 ldi r25, 0x00 ; 0
10950: 02 c0 rjmp .+4 ; 0x10956 <BuildJeti_Vario+0xfe>
10952: 80 e0 ldi r24, 0x00 ; 0
10954: 90 e0 ldi r25, 0x00 ; 0
else
if(VarioCharacter == '^') tmp = FromNC_AltitudeSpeed;
else
if(VarioCharacter == 'v') tmp = tmp - FromNC_AltitudeSpeed;
JetiExData[12].Value = tmp;
10956: aa 27 eor r26, r26
10958: 97 fd sbrc r25, 7
1095a: a0 95 com r26
1095c: ba 2f mov r27, r26
1095e: 80 93 50 02 sts 0x0250, r24
10962: 90 93 51 02 sts 0x0251, r25
10966: a0 93 52 02 sts 0x0252, r26
1096a: b0 93 53 02 sts 0x0253, r27
1096e: 08 95 ret
00010970 <JetiEX_Update>:
// --------------------------------------------------------------------------------------------------
void JetiEX_Update(void)
{
GetHottestBl();
10970: 0e 94 79 60 call 0xc0f2 ; 0xc0f2 <GetHottestBl>
JetiExData[1].Value = UBat;
10974: 80 91 1a 01 lds r24, 0x011A
10978: 90 91 1b 01 lds r25, 0x011B
1097c: aa 27 eor r26, r26
1097e: 97 fd sbrc r25, 7
10980: a0 95 com r26
10982: ba 2f mov r27, r26
10984: 80 93 7f 01 sts 0x017F, r24
10988: 90 93 80 01 sts 0x0180, r25
1098c: a0 93 81 01 sts 0x0181, r26
10990: b0 93 82 01 sts 0x0182, r27
JetiExData[2].Value = Capacity.ActualCurrent;
10994: 80 91 15 05 lds r24, 0x0515
10998: 90 91 16 05 lds r25, 0x0516
1099c: a0 e0 ldi r26, 0x00 ; 0
1099e: b0 e0 ldi r27, 0x00 ; 0
109a0: 80 93 92 01 sts 0x0192, r24
109a4: 90 93 93 01 sts 0x0193, r25
109a8: a0 93 94 01 sts 0x0194, r26
109ac: b0 93 95 01 sts 0x0195, r27
JetiExData[3].Value = Capacity.UsedCapacity / 10;
109b0: 20 91 19 05 lds r18, 0x0519
109b4: 30 91 1a 05 lds r19, 0x051A
109b8: ad ec ldi r26, 0xCD ; 205
109ba: bc ec ldi r27, 0xCC ; 204
109bc: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
109c0: 96 95 lsr r25
109c2: 87 95 ror r24
109c4: 96 95 lsr r25
109c6: 87 95 ror r24
109c8: 96 95 lsr r25
109ca: 87 95 ror r24
109cc: a0 e0 ldi r26, 0x00 ; 0
109ce: b0 e0 ldi r27, 0x00 ; 0
109d0: 80 93 a5 01 sts 0x01A5, r24
109d4: 90 93 a6 01 sts 0x01A6, r25
109d8: a0 93 a7 01 sts 0x01A7, r26
109dc: b0 93 a8 01 sts 0x01A8, r27
JetiExData[4].Value = HoehenWert / 100;
109e0: 60 91 fe 03 lds r22, 0x03FE
109e4: 70 91 ff 03 lds r23, 0x03FF
109e8: 80 91 00 04 lds r24, 0x0400
109ec: 90 91 01 04 lds r25, 0x0401
109f0: 24 e6 ldi r18, 0x64 ; 100
109f2: 30 e0 ldi r19, 0x00 ; 0
109f4: 40 e0 ldi r20, 0x00 ; 0
109f6: 50 e0 ldi r21, 0x00 ; 0
109f8: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
109fc: 20 93 b8 01 sts 0x01B8, r18
10a00: 30 93 b9 01 sts 0x01B9, r19
10a04: 40 93 ba 01 sts 0x01BA, r20
10a08: 50 93 bb 01 sts 0x01BB, r21
JetiExData[5].Value = KompassValue;
10a0c: 80 91 4e 01 lds r24, 0x014E
10a10: 90 91 4f 01 lds r25, 0x014F
10a14: aa 27 eor r26, r26
10a16: 97 fd sbrc r25, 7
10a18: a0 95 com r26
10a1a: ba 2f mov r27, r26
10a1c: 80 93 cb 01 sts 0x01CB, r24
10a20: 90 93 cc 01 sts 0x01CC, r25
10a24: a0 93 cd 01 sts 0x01CD, r26
10a28: b0 93 ce 01 sts 0x01CE, r27
JetiExData[6].Value = GPSInfo.NumOfSats;
10a2c: 80 91 d8 08 lds r24, 0x08D8
10a30: 90 e0 ldi r25, 0x00 ; 0
10a32: a0 e0 ldi r26, 0x00 ; 0
10a34: b0 e0 ldi r27, 0x00 ; 0
10a36: 80 93 de 01 sts 0x01DE, r24
10a3a: 90 93 df 01 sts 0x01DF, r25
10a3e: a0 93 e0 01 sts 0x01E0, r26
10a42: b0 93 e1 01 sts 0x01E1, r27
JetiExData[7].Value = GPSInfo.Speed;
10a46: 80 91 da 08 lds r24, 0x08DA
10a4a: 90 e0 ldi r25, 0x00 ; 0
10a4c: a0 e0 ldi r26, 0x00 ; 0
10a4e: b0 e0 ldi r27, 0x00 ; 0
10a50: 80 93 f1 01 sts 0x01F1, r24
10a54: 90 93 f2 01 sts 0x01F2, r25
10a58: a0 93 f3 01 sts 0x01F3, r26
10a5c: b0 93 f4 01 sts 0x01F4, r27
JetiExData[8].Value = GPSInfo.HomeDistance / 10;
10a60: 20 91 db 08 lds r18, 0x08DB
10a64: 30 91 dc 08 lds r19, 0x08DC
10a68: ad ec ldi r26, 0xCD ; 205
10a6a: bc ec ldi r27, 0xCC ; 204
10a6c: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
10a70: 96 95 lsr r25
10a72: 87 95 ror r24
10a74: 96 95 lsr r25
10a76: 87 95 ror r24
10a78: 96 95 lsr r25
10a7a: 87 95 ror r24
10a7c: a0 e0 ldi r26, 0x00 ; 0
10a7e: b0 e0 ldi r27, 0x00 ; 0
10a80: 80 93 04 02 sts 0x0204, r24
10a84: 90 93 05 02 sts 0x0205, r25
10a88: a0 93 06 02 sts 0x0206, r26
10a8c: b0 93 07 02 sts 0x0207, r27
JetiExData[9].Value = GPSInfo.HomeBearing;
10a90: 80 91 dd 08 lds r24, 0x08DD
10a94: 90 91 de 08 lds r25, 0x08DE
10a98: aa 27 eor r26, r26
10a9a: 97 fd sbrc r25, 7
10a9c: a0 95 com r26
10a9e: ba 2f mov r27, r26
10aa0: 80 93 17 02 sts 0x0217, r24
10aa4: 90 93 18 02 sts 0x0218, r25
10aa8: a0 93 19 02 sts 0x0219, r26
10aac: b0 93 1a 02 sts 0x021A, r27
JetiExData[10].Value = MaxBlTemperture;
10ab0: 80 91 84 04 lds r24, 0x0484
10ab4: 90 e0 ldi r25, 0x00 ; 0
10ab6: a0 e0 ldi r26, 0x00 ; 0
10ab8: b0 e0 ldi r27, 0x00 ; 0
10aba: 80 93 2a 02 sts 0x022A, r24
10abe: 90 93 2b 02 sts 0x022B, r25
10ac2: a0 93 2c 02 sts 0x022C, r26
10ac6: b0 93 2d 02 sts 0x022D, r27
JetiExData[11].Value = EarthMagneticField;
10aca: 80 91 ba 04 lds r24, 0x04BA
10ace: 90 e0 ldi r25, 0x00 ; 0
10ad0: a0 e0 ldi r26, 0x00 ; 0
10ad2: b0 e0 ldi r27, 0x00 ; 0
10ad4: 80 93 3d 02 sts 0x023D, r24
10ad8: 90 93 3e 02 sts 0x023E, r25
10adc: a0 93 3f 02 sts 0x023F, r26
10ae0: b0 93 40 02 sts 0x0240, r27
// JetiExData[12].Value = Vario; // wird in BuildJeti_Vario() gemacht
JetiExData[13].Value = NC_ErrorCode;
10ae4: 80 91 bb 04 lds r24, 0x04BB
10ae8: 90 e0 ldi r25, 0x00 ; 0
10aea: a0 e0 ldi r26, 0x00 ; 0
10aec: b0 e0 ldi r27, 0x00 ; 0
10aee: 80 93 63 02 sts 0x0263, r24
10af2: 90 93 64 02 sts 0x0264, r25
10af6: a0 93 65 02 sts 0x0265, r26
10afa: b0 93 66 02 sts 0x0266, r27
10afe: 08 95 ret
00010b00 <LED_Init>:
// initializes the LED control outputs J16, J17
void LED_Init(void)
{
// set PC2 & PC3 as output (control of J16 & J17)
DDRC |= (1<<DDRC2)|(1<<DDRC3);
10b00: 87 b1 in r24, 0x07 ; 7
10b02: 8c 60 ori r24, 0x0C ; 12
10b04: 87 b9 out 0x07, r24 ; 7
J16_OFF;
10b06: 42 98 cbi 0x08, 2 ; 8
J17_OFF;
10b08: 43 98 cbi 0x08, 3 ; 8
J16Blinkcount = 0; J16Mask = 128;
10b0a: 10 92 a1 04 sts 0x04A1, r1
10b0e: 80 e8 ldi r24, 0x80 ; 128
10b10: 80 93 8f 02 sts 0x028F, r24
J17Blinkcount = 0; J17Mask = 128;
10b14: 10 92 a0 04 sts 0x04A0, r1
10b18: 80 93 8e 02 sts 0x028E, r24
10b1c: 08 95 ret
00010b1e <LED_Update>:
static unsigned char J16Bitmask = 0;
static unsigned char J17Bitmask = 0;
static unsigned char J16Warn = 0, J17Warn = 0;
static unsigned char from_nc = 0; // Copy for the timing
if(FromNC_WP_EventChannel_New) from_nc = FromNC_WP_EventChannel_New;
10b1e: 80 91 bd 04 lds r24, 0x04BD
10b22: 81 11 cpse r24, r1
10b24: 80 93 9e 04 sts 0x049E, r24
if(!delay--) // 20ms Intervall
10b28: 80 91 9d 04 lds r24, 0x049D
10b2c: 9f ef ldi r25, 0xFF ; 255
10b2e: 98 0f add r25, r24
10b30: 90 93 9d 04 sts 0x049D, r25
10b34: 81 11 cpse r24, r1
10b36: 73 c1 rjmp .+742 ; 0x10e1e <LED_Update+0x300>
{
J16Bitmask = EE_Parameter.J16Bitmask;
10b38: 80 91 88 05 lds r24, 0x0588
10b3c: 80 93 9c 04 sts 0x049C, r24
J17Bitmask = EE_Parameter.J17Bitmask;
10b40: 80 91 8a 05 lds r24, 0x058A
10b44: 80 93 9b 04 sts 0x049B, r24
delay = 9;
10b48: 89 e0 ldi r24, 0x09 ; 9
10b4a: 80 93 9d 04 sts 0x049D, r24
if(FC_StatusFlags & (FC_STATUS_LOWBAT | FC_STATUS_EMERGENCY_LANDING) || (VersionInfo.HardwareError[1] & FC_ERROR1_I2C))
10b4e: 80 91 cb 03 lds r24, 0x03CB
10b52: 80 73 andi r24, 0x30 ; 48
10b54: 21 f4 brne .+8 ; 0x10b5e <LED_Update+0x40>
10b56: 80 91 63 0a lds r24, 0x0A63
10b5a: 80 ff sbrs r24, 0
10b5c: 1d c0 rjmp .+58 ; 0x10b98 <LED_Update+0x7a>
{
if(EE_Parameter.WARN_J16_Bitmask)
10b5e: 80 91 8c 05 lds r24, 0x058C
10b62: 88 23 and r24, r24
10b64: 51 f0 breq .+20 ; 0x10b7a <LED_Update+0x5c>
{
if(!J16Warn) J16Blinkcount = 4;
10b66: 80 91 9a 04 lds r24, 0x049A
10b6a: 81 11 cpse r24, r1
10b6c: 03 c0 rjmp .+6 ; 0x10b74 <LED_Update+0x56>
10b6e: 84 e0 ldi r24, 0x04 ; 4
10b70: 80 93 a1 04 sts 0x04A1, r24
J16Warn = 1;
10b74: 81 e0 ldi r24, 0x01 ; 1
10b76: 80 93 9a 04 sts 0x049A, r24
}
if(EE_Parameter.WARN_J17_Bitmask)
10b7a: 80 91 8d 05 lds r24, 0x058D
10b7e: 88 23 and r24, r24
10b80: 79 f0 breq .+30 ; 0x10ba0 <LED_Update+0x82>
{
if(!J17Warn) J17Blinkcount = 4;
10b82: 80 91 99 04 lds r24, 0x0499
10b86: 81 11 cpse r24, r1
10b88: 03 c0 rjmp .+6 ; 0x10b90 <LED_Update+0x72>
10b8a: 84 e0 ldi r24, 0x04 ; 4
10b8c: 80 93 a0 04 sts 0x04A0, r24
J17Warn = 1;
10b90: 81 e0 ldi r24, 0x01 ; 1
10b92: 80 93 99 04 sts 0x0499, r24
10b96: 04 c0 rjmp .+8 ; 0x10ba0 <LED_Update+0x82>
}
}
else
{
J16Warn = 0;
10b98: 10 92 9a 04 sts 0x049A, r1
J17Warn = 0;
10b9c: 10 92 99 04 sts 0x0499, r1
}
//DebugOut.Analog[29] = EE_Parameter.GlobalConfig3;
// Output 1
if(!J16Warn)
10ba0: 80 91 9a 04 lds r24, 0x049A
10ba4: 81 11 cpse r24, r1
10ba6: 95 c0 rjmp .+298 ; 0x10cd2 <LED_Update+0x1b4>
{
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK1) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED1) J16_ON; else J16_OFF;}
10ba8: 80 91 b6 05 lds r24, 0x05B6
10bac: 84 ff sbrs r24, 4
10bae: 0a c0 rjmp .+20 ; 0x10bc4 <LED_Update+0xa6>
10bb0: 90 91 03 04 lds r25, 0x0403
10bb4: 91 11 cpse r25, r1
10bb6: 06 c0 rjmp .+12 ; 0x10bc4 <LED_Update+0xa6>
10bb8: 85 ff sbrs r24, 5
10bba: 02 c0 rjmp .+4 ; 0x10bc0 <LED_Update+0xa2>
10bbc: 42 9a sbi 0x08, 2 ; 8
10bbe: a8 c0 rjmp .+336 ; 0x10d10 <LED_Update+0x1f2>
10bc0: 42 98 cbi 0x08, 2 ; 8
10bc2: a6 c0 rjmp .+332 ; 0x10d10 <LED_Update+0x1f2>
else
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing > 220)) {if(J16Bitmask & 128) J16_OFF; else J16_ON; J16Mask = 1; NC_Wait_for_LED = 0;} // Manual overwrite
10bc4: 80 91 89 05 lds r24, 0x0589
10bc8: 88 3f cpi r24, 0xF8 ; 248
10bca: 00 f1 brcs .+64 ; 0x10c0c <LED_Update+0xee>
10bcc: 80 91 3b 06 lds r24, 0x063B
10bd0: 8d 3d cpi r24, 0xDD ; 221
10bd2: 68 f0 brcs .+26 ; 0x10bee <LED_Update+0xd0>
10bd4: 80 91 9c 04 lds r24, 0x049C
10bd8: 88 23 and r24, r24
10bda: 14 f4 brge .+4 ; 0x10be0 <LED_Update+0xc2>
10bdc: 42 98 cbi 0x08, 2 ; 8
10bde: 01 c0 rjmp .+2 ; 0x10be2 <LED_Update+0xc4>
10be0: 42 9a sbi 0x08, 2 ; 8
10be2: 81 e0 ldi r24, 0x01 ; 1
10be4: 80 93 8f 02 sts 0x028F, r24
10be8: 10 92 9f 04 sts 0x049F, r1
10bec: 91 c0 rjmp .+290 ; 0x10d10 <LED_Update+0x1f2>
else
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing == 5)) {if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 1; NC_Wait_for_LED = 0;} // Manual overwrite
10bee: 85 30 cpi r24, 0x05 ; 5
10bf0: 69 f4 brne .+26 ; 0x10c0c <LED_Update+0xee>
10bf2: 80 91 9c 04 lds r24, 0x049C
10bf6: 88 23 and r24, r24
10bf8: 14 f4 brge .+4 ; 0x10bfe <LED_Update+0xe0>
10bfa: 42 9a sbi 0x08, 2 ; 8
10bfc: 01 c0 rjmp .+2 ; 0x10c00 <LED_Update+0xe2>
10bfe: 42 98 cbi 0x08, 2 ; 8
10c00: 81 e0 ldi r24, 0x01 ; 1
10c02: 80 93 8f 02 sts 0x028F, r24
10c06: 10 92 9f 04 sts 0x049F, r1
10c0a: 82 c0 rjmp .+260 ; 0x10d10 <LED_Update+0x1f2>
else
if(!J16Blinkcount--)
10c0c: 80 91 a1 04 lds r24, 0x04A1
10c10: 9f ef ldi r25, 0xFF ; 255
10c12: 98 0f add r25, r24
10c14: 90 93 a1 04 sts 0x04A1, r25
10c18: 81 11 cpse r24, r1
10c1a: 7a c0 rjmp .+244 ; 0x10d10 <LED_Update+0x1f2>
{
if(EE_Parameter.GlobalConfig3 & CFG3_USE_NC_FOR_OUT1)
10c1c: 80 91 b9 05 lds r24, 0x05B9
10c20: 85 ff sbrs r24, 5
10c22: 39 c0 rjmp .+114 ; 0x10c96 <LED_Update+0x178>
{
J16Blinkcount = from_nc / 2;
10c24: 80 91 9e 04 lds r24, 0x049E
10c28: 98 2f mov r25, r24
10c2a: 96 95 lsr r25
10c2c: 90 93 a1 04 sts 0x04A1, r25
if(!from_nc) { NC_Wait_for_LED = 0; if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 0; } // Ausschalten
10c30: 81 11 cpse r24, r1
10c32: 0c c0 rjmp .+24 ; 0x10c4c <LED_Update+0x12e>
10c34: 10 92 9f 04 sts 0x049F, r1
10c38: 80 91 9c 04 lds r24, 0x049C
10c3c: 88 23 and r24, r24
10c3e: 14 f4 brge .+4 ; 0x10c44 <LED_Update+0x126>
10c40: 42 9a sbi 0x08, 2 ; 8
10c42: 01 c0 rjmp .+2 ; 0x10c46 <LED_Update+0x128>
10c44: 42 98 cbi 0x08, 2 ; 8
10c46: 10 92 8f 02 sts 0x028F, r1
10c4a: 62 c0 rjmp .+196 ; 0x10d10 <LED_Update+0x1f2>
else
{
NC_Wait_for_LED = 1;
10c4c: 81 e0 ldi r24, 0x01 ; 1
10c4e: 80 93 9f 04 sts 0x049F, r24
if(J16Mask == 0)
10c52: 80 91 8f 02 lds r24, 0x028F
10c56: 81 11 cpse r24, r1
10c58: 11 c0 rjmp .+34 ; 0x10c7c <LED_Update+0x15e>
{
from_nc = FromNC_WP_EventChannel_New;
10c5a: 80 91 bd 04 lds r24, 0x04BD
10c5e: 80 93 9e 04 sts 0x049E, r24
FromNC_WP_EventChannel_New = 0;
10c62: 10 92 bd 04 sts 0x04BD, r1
J16Mask = 64;
10c66: 80 e4 ldi r24, 0x40 ; 64
10c68: 80 93 8f 02 sts 0x028F, r24
if(J16Bitmask & 128) J16_ON; else J16_OFF; // Ausschalten
10c6c: 80 91 9c 04 lds r24, 0x049C
10c70: 88 23 and r24, r24
10c72: 14 f4 brge .+4 ; 0x10c78 <LED_Update+0x15a>
10c74: 42 9a sbi 0x08, 2 ; 8
10c76: 4c c0 rjmp .+152 ; 0x10d10 <LED_Update+0x1f2>
10c78: 42 98 cbi 0x08, 2 ; 8
10c7a: 4a c0 rjmp .+148 ; 0x10d10 <LED_Update+0x1f2>
}
else
{
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF;
10c7c: 90 91 9c 04 lds r25, 0x049C
10c80: 89 23 and r24, r25
10c82: 11 f0 breq .+4 ; 0x10c88 <LED_Update+0x16a>
10c84: 42 9a sbi 0x08, 2 ; 8
10c86: 01 c0 rjmp .+2 ; 0x10c8a <LED_Update+0x16c>
10c88: 42 98 cbi 0x08, 2 ; 8
J16Mask /= 2;
10c8a: 80 91 8f 02 lds r24, 0x028F
10c8e: 86 95 lsr r24
10c90: 80 93 8f 02 sts 0x028F, r24
10c94: 3d c0 rjmp .+122 ; 0x10d10 <LED_Update+0x1f2>
}
}
}
else
{
J16Blinkcount = Parameter_J16Timing / 2;
10c96: 80 91 3b 06 lds r24, 0x063B
10c9a: 86 95 lsr r24
10c9c: 80 93 a1 04 sts 0x04A1, r24
if(J16Mask == 1) { from_nc = 0; J16Mask = 64; } else J16Mask /= 2;
10ca0: 80 91 8f 02 lds r24, 0x028F
10ca4: 81 30 cpi r24, 0x01 ; 1
10ca6: 31 f4 brne .+12 ; 0x10cb4 <LED_Update+0x196>
10ca8: 10 92 9e 04 sts 0x049E, r1
10cac: 80 e4 ldi r24, 0x40 ; 64
10cae: 80 93 8f 02 sts 0x028F, r24
10cb2: 03 c0 rjmp .+6 ; 0x10cba <LED_Update+0x19c>
10cb4: 86 95 lsr r24
10cb6: 80 93 8f 02 sts 0x028F, r24
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF;
10cba: 90 91 9c 04 lds r25, 0x049C
10cbe: 80 91 8f 02 lds r24, 0x028F
10cc2: 89 23 and r24, r25
10cc4: 11 f0 breq .+4 ; 0x10cca <LED_Update+0x1ac>
10cc6: 42 9a sbi 0x08, 2 ; 8
10cc8: 01 c0 rjmp .+2 ; 0x10ccc <LED_Update+0x1ae>
10cca: 42 98 cbi 0x08, 2 ; 8
NC_Wait_for_LED = 0;
10ccc: 10 92 9f 04 sts 0x049F, r1
10cd0: 1f c0 rjmp .+62 ; 0x10d10 <LED_Update+0x1f2>
}
}
}
else // warning case
if(!J16Blinkcount--)
10cd2: 80 91 a1 04 lds r24, 0x04A1
10cd6: 88 23 and r24, r24
10cd8: 21 f0 breq .+8 ; 0x10ce2 <LED_Update+0x1c4>
10cda: 81 50 subi r24, 0x01 ; 1
10cdc: 80 93 a1 04 sts 0x04A1, r24
10ce0: 17 c0 rjmp .+46 ; 0x10d10 <LED_Update+0x1f2>
{
J16Blinkcount = 10-1;
10ce2: 89 e0 ldi r24, 0x09 ; 9
10ce4: 80 93 a1 04 sts 0x04A1, r24
if(J16Mask == 1) J16Mask = 128; else J16Mask /= 2;
10ce8: 80 91 8f 02 lds r24, 0x028F
10cec: 81 30 cpi r24, 0x01 ; 1
10cee: 21 f4 brne .+8 ; 0x10cf8 <LED_Update+0x1da>
10cf0: 80 e8 ldi r24, 0x80 ; 128
10cf2: 80 93 8f 02 sts 0x028F, r24
10cf6: 03 c0 rjmp .+6 ; 0x10cfe <LED_Update+0x1e0>
10cf8: 86 95 lsr r24
10cfa: 80 93 8f 02 sts 0x028F, r24
if(J16Mask & EE_Parameter.WARN_J16_Bitmask) J16_ON; else J16_OFF;
10cfe: 90 91 8f 02 lds r25, 0x028F
10d02: 80 91 8c 05 lds r24, 0x058C
10d06: 89 23 and r24, r25
10d08: 11 f0 breq .+4 ; 0x10d0e <LED_Update+0x1f0>
10d0a: 42 9a sbi 0x08, 2 ; 8
10d0c: 01 c0 rjmp .+2 ; 0x10d10 <LED_Update+0x1f2>
10d0e: 42 98 cbi 0x08, 2 ; 8
}
// Output 2
if(!J17Warn)
10d10: 80 91 99 04 lds r24, 0x0499
10d14: 81 11 cpse r24, r1
10d16: 50 c0 rjmp .+160 ; 0x10db8 <LED_Update+0x29a>
{
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK2) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED2) J17_ON; else J17_OFF;}
10d18: 80 91 b6 05 lds r24, 0x05B6
10d1c: 88 23 and r24, r24
10d1e: 54 f4 brge .+20 ; 0x10d34 <LED_Update+0x216>
10d20: 90 91 03 04 lds r25, 0x0403
10d24: 91 11 cpse r25, r1
10d26: 06 c0 rjmp .+12 ; 0x10d34 <LED_Update+0x216>
10d28: 86 ff sbrs r24, 6
10d2a: 02 c0 rjmp .+4 ; 0x10d30 <LED_Update+0x212>
10d2c: 43 9a sbi 0x08, 3 ; 8
10d2e: 63 c0 rjmp .+198 ; 0x10df6 <LED_Update+0x2d8>
10d30: 43 98 cbi 0x08, 3 ; 8
10d32: 61 c0 rjmp .+194 ; 0x10df6 <LED_Update+0x2d8>
else
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing > 220)) {if(J17Bitmask & 128) J17_OFF; else J17_ON; J17Mask = 1;}
10d34: 80 91 8b 05 lds r24, 0x058B
10d38: 88 3f cpi r24, 0xF8 ; 248
10d3a: e0 f0 brcs .+56 ; 0x10d74 <LED_Update+0x256>
10d3c: 80 91 63 06 lds r24, 0x0663
10d40: 8d 3d cpi r24, 0xDD ; 221
10d42: 58 f0 brcs .+22 ; 0x10d5a <LED_Update+0x23c>
10d44: 80 91 9b 04 lds r24, 0x049B
10d48: 88 23 and r24, r24
10d4a: 14 f4 brge .+4 ; 0x10d50 <LED_Update+0x232>
10d4c: 43 98 cbi 0x08, 3 ; 8
10d4e: 01 c0 rjmp .+2 ; 0x10d52 <LED_Update+0x234>
10d50: 43 9a sbi 0x08, 3 ; 8
10d52: 81 e0 ldi r24, 0x01 ; 1
10d54: 80 93 8e 02 sts 0x028E, r24
10d58: 4e c0 rjmp .+156 ; 0x10df6 <LED_Update+0x2d8>
else
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing == 5)) {if(J17Bitmask & 128) J17_ON; else J17_OFF; J17Mask = 1;}
10d5a: 85 30 cpi r24, 0x05 ; 5
10d5c: 59 f4 brne .+22 ; 0x10d74 <LED_Update+0x256>
10d5e: 80 91 9b 04 lds r24, 0x049B
10d62: 88 23 and r24, r24
10d64: 14 f4 brge .+4 ; 0x10d6a <LED_Update+0x24c>
10d66: 43 9a sbi 0x08, 3 ; 8
10d68: 01 c0 rjmp .+2 ; 0x10d6c <LED_Update+0x24e>
10d6a: 43 98 cbi 0x08, 3 ; 8
10d6c: 81 e0 ldi r24, 0x01 ; 1
10d6e: 80 93 8e 02 sts 0x028E, r24
10d72: 41 c0 rjmp .+130 ; 0x10df6 <LED_Update+0x2d8>
else
if(!J17Blinkcount--)
10d74: 80 91 a0 04 lds r24, 0x04A0
10d78: 9f ef ldi r25, 0xFF ; 255
10d7a: 98 0f add r25, r24
10d7c: 90 93 a0 04 sts 0x04A0, r25
10d80: 81 11 cpse r24, r1
10d82: 39 c0 rjmp .+114 ; 0x10df6 <LED_Update+0x2d8>
{
J17Blinkcount = Parameter_J17Timing / 2;
10d84: 80 91 63 06 lds r24, 0x0663
10d88: 86 95 lsr r24
10d8a: 80 93 a0 04 sts 0x04A0, r24
if(J17Mask == 1) J17Mask = 64; else J17Mask /= 2;
10d8e: 80 91 8e 02 lds r24, 0x028E
10d92: 81 30 cpi r24, 0x01 ; 1
10d94: 21 f4 brne .+8 ; 0x10d9e <LED_Update+0x280>
10d96: 80 e4 ldi r24, 0x40 ; 64
10d98: 80 93 8e 02 sts 0x028E, r24
10d9c: 03 c0 rjmp .+6 ; 0x10da4 <LED_Update+0x286>
10d9e: 86 95 lsr r24
10da0: 80 93 8e 02 sts 0x028E, r24
if(J17Mask & J17Bitmask) J17_ON; else J17_OFF;
10da4: 90 91 9b 04 lds r25, 0x049B
10da8: 80 91 8e 02 lds r24, 0x028E
10dac: 89 23 and r24, r25
10dae: 11 f0 breq .+4 ; 0x10db4 <LED_Update+0x296>
10db0: 43 9a sbi 0x08, 3 ; 8
10db2: 21 c0 rjmp .+66 ; 0x10df6 <LED_Update+0x2d8>
10db4: 43 98 cbi 0x08, 3 ; 8
10db6: 1f c0 rjmp .+62 ; 0x10df6 <LED_Update+0x2d8>
}
}
else // warning case
if(!J17Blinkcount--)
10db8: 80 91 a0 04 lds r24, 0x04A0
10dbc: 88 23 and r24, r24
10dbe: 21 f0 breq .+8 ; 0x10dc8 <LED_Update+0x2aa>
10dc0: 81 50 subi r24, 0x01 ; 1
10dc2: 80 93 a0 04 sts 0x04A0, r24
10dc6: 17 c0 rjmp .+46 ; 0x10df6 <LED_Update+0x2d8>
{
J17Blinkcount = 10-1;
10dc8: 89 e0 ldi r24, 0x09 ; 9
10dca: 80 93 a0 04 sts 0x04A0, r24
if(J17Mask == 1) J17Mask = 128; else J17Mask /= 2;
10dce: 80 91 8e 02 lds r24, 0x028E
10dd2: 81 30 cpi r24, 0x01 ; 1
10dd4: 21 f4 brne .+8 ; 0x10dde <LED_Update+0x2c0>
10dd6: 80 e8 ldi r24, 0x80 ; 128
10dd8: 80 93 8e 02 sts 0x028E, r24
10ddc: 03 c0 rjmp .+6 ; 0x10de4 <LED_Update+0x2c6>
10dde: 86 95 lsr r24
10de0: 80 93 8e 02 sts 0x028E, r24
if(J17Mask & EE_Parameter.WARN_J17_Bitmask) J17_ON; else J17_OFF;
10de4: 90 91 8e 02 lds r25, 0x028E
10de8: 80 91 8d 05 lds r24, 0x058D
10dec: 89 23 and r24, r25
10dee: 11 f0 breq .+4 ; 0x10df4 <LED_Update+0x2d6>
10df0: 43 9a sbi 0x08, 3 ; 8
10df2: 01 c0 rjmp .+2 ; 0x10df6 <LED_Update+0x2d8>
10df4: 43 98 cbi 0x08, 3 ; 8
}
if(PORTC & (1<<PORTC2)) FC_StatusFlags2 |= FC_STATUS2_OUT1_ACTIVE; //else FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16) -> wird in der SPI zurück gesetzt
10df6: 42 9b sbis 0x08, 2 ; 8
10df8: 05 c0 rjmp .+10 ; 0x10e04 <LED_Update+0x2e6>
10dfa: 80 91 ca 03 lds r24, 0x03CA
10dfe: 88 60 ori r24, 0x08 ; 8
10e00: 80 93 ca 03 sts 0x03CA, r24
if(PORTC & (1<<PORTC3)) FC_StatusFlags2 |= FC_STATUS2_OUT2_ACTIVE; else FC_StatusFlags2 &= ~FC_STATUS2_OUT2_ACTIVE; // Out2 (J17)
10e04: 43 9b sbis 0x08, 3 ; 8
10e06: 06 c0 rjmp .+12 ; 0x10e14 <LED_Update+0x2f6>
10e08: 80 91 ca 03 lds r24, 0x03CA
10e0c: 80 61 ori r24, 0x10 ; 16
10e0e: 80 93 ca 03 sts 0x03CA, r24
10e12: 08 95 ret
10e14: 80 91 ca 03 lds r24, 0x03CA
10e18: 8f 7e andi r24, 0xEF ; 239
10e1a: 80 93 ca 03 sts 0x03CA, r24
10e1e: 08 95 ret
00010e20 <Menu_Putchar>:
for(i=0;i<80;i++) DisplayBuff[i] = ' ';
}
void Menu_Putchar(char c)
{
if(DispPtr < 80) DisplayBuff[DispPtr++] = c;
10e20: e0 91 a4 04 lds r30, 0x04A4
10e24: e0 35 cpi r30, 0x50 ; 80
10e26: 40 f4 brcc .+16 ; 0x10e38 <Menu_Putchar+0x18>
10e28: 91 e0 ldi r25, 0x01 ; 1
10e2a: 9e 0f add r25, r30
10e2c: 90 93 a4 04 sts 0x04A4, r25
10e30: f0 e0 ldi r31, 0x00 ; 0
10e32: e0 52 subi r30, 0x20 ; 32
10e34: f8 4f sbci r31, 0xF8 ; 248
10e36: 80 83 st Z, r24
10e38: 08 95 ret
00010e3a <LcdClear>:
#define KEY3 0x04
#define KEY4 0x08
#define KEY5 0x10
void LcdClear(void)
{
10e3a: e0 ee ldi r30, 0xE0 ; 224
10e3c: f7 e0 ldi r31, 0x07 ; 7
10e3e: 80 e3 ldi r24, 0x30 ; 48
10e40: 98 e0 ldi r25, 0x08 ; 8
unsigned char i;
for(i=0;i<80;i++) DisplayBuff[i] = ' ';
10e42: 20 e2 ldi r18, 0x20 ; 32
10e44: 21 93 st Z+, r18
10e46: e8 17 cp r30, r24
10e48: f9 07 cpc r31, r25
10e4a: e1 f7 brne .-8 ; 0x10e44 <LcdClear+0xa>
}
10e4c: 08 95 ret
00010e4e <Menu>:
{
if(DispPtr < 80) DisplayBuff[DispPtr++] = c;
}
void Menu(void)
{
10e4e: 2f 92 push r2
10e50: 3f 92 push r3
10e52: 5f 92 push r5
10e54: 6f 92 push r6
10e56: 7f 92 push r7
10e58: 8f 92 push r8
10e5a: 9f 92 push r9
10e5c: af 92 push r10
10e5e: bf 92 push r11
10e60: cf 92 push r12
10e62: df 92 push r13
10e64: ef 92 push r14
10e66: ff 92 push r15
10e68: 0f 93 push r16
10e6a: 1f 93 push r17
10e6c: cf 93 push r28
10e6e: df 93 push r29
unsigned char i;
if(RemoteKeys & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue;}
10e70: 80 91 a2 04 lds r24, 0x04A2
10e74: 80 ff sbrs r24, 0
10e76: 0c c0 rjmp .+24 ; 0x10e90 <Menu+0x42>
10e78: 90 91 a3 04 lds r25, 0x04A3
10e7c: 99 23 and r25, r25
10e7e: 21 f0 breq .+8 ; 0x10e88 <Menu+0x3a>
10e80: 91 50 subi r25, 0x01 ; 1
10e82: 90 93 a3 04 sts 0x04A3, r25
10e86: 04 c0 rjmp .+8 ; 0x10e90 <Menu+0x42>
10e88: 90 91 90 02 lds r25, 0x0290
10e8c: 90 93 a3 04 sts 0x04A3, r25
if(RemoteKeys & KEY2) { if(MenuePunkt == MaxMenue) MenuePunkt = 0; else MenuePunkt++;}
10e90: 81 ff sbrs r24, 1
10e92: 0c c0 rjmp .+24 ; 0x10eac <Menu+0x5e>
10e94: 90 91 a3 04 lds r25, 0x04A3
10e98: 20 91 90 02 lds r18, 0x0290
10e9c: 92 13 cpse r25, r18
10e9e: 03 c0 rjmp .+6 ; 0x10ea6 <Menu+0x58>
10ea0: 10 92 a3 04 sts 0x04A3, r1
10ea4: 03 c0 rjmp .+6 ; 0x10eac <Menu+0x5e>
10ea6: 9f 5f subi r25, 0xFF ; 255
10ea8: 90 93 a3 04 sts 0x04A3, r25
10eac: 83 70 andi r24, 0x03 ; 3
if((RemoteKeys & KEY1) && (RemoteKeys & KEY2)) MenuePunkt = 0;
10eae: 83 30 cpi r24, 0x03 ; 3
10eb0: 11 f4 brne .+4 ; 0x10eb6 <Menu+0x68>
10eb2: 10 92 a3 04 sts 0x04A3, r1
LcdClear();
10eb6: c1 df rcall .-126 ; 0x10e3a <LcdClear>
if(MenuePunkt < 10) {LCD_printfxy(17,0,"[%i]",MenuePunkt);}
10eb8: 80 91 a3 04 lds r24, 0x04A3
10ebc: 8a 30 cpi r24, 0x0A ; 10
10ebe: c8 f4 brcc .+50 ; 0x10ef2 <Menu+0xa4>
10ec0: 91 e1 ldi r25, 0x11 ; 17
10ec2: 90 93 a4 04 sts 0x04A4, r25
10ec6: 1f 92 push r1
10ec8: 8f 93 push r24
10eca: 86 e5 ldi r24, 0x56 ; 86
10ecc: 95 e1 ldi r25, 0x15 ; 21
10ece: 9f 93 push r25
10ed0: 8f 93 push r24
10ed2: 80 e1 ldi r24, 0x10 ; 16
10ed4: 97 e8 ldi r25, 0x87 ; 135
10ed6: 9f 93 push r25
10ed8: 8f 93 push r24
10eda: e0 91 78 06 lds r30, 0x0678
10ede: f0 91 79 06 lds r31, 0x0679
10ee2: 09 95 icall
10ee4: 0f 90 pop r0
10ee6: 0f 90 pop r0
10ee8: 0f 90 pop r0
10eea: 0f 90 pop r0
10eec: 0f 90 pop r0
10eee: 0f 90 pop r0
10ef0: 18 c0 rjmp .+48 ; 0x10f22 <Menu+0xd4>
else {LCD_printfxy(16,0,"[%i]",MenuePunkt);};
10ef2: 90 e1 ldi r25, 0x10 ; 16
10ef4: 90 93 a4 04 sts 0x04A4, r25
10ef8: 1f 92 push r1
10efa: 8f 93 push r24
10efc: 81 e5 ldi r24, 0x51 ; 81
10efe: 95 e1 ldi r25, 0x15 ; 21
10f00: 9f 93 push r25
10f02: 8f 93 push r24
10f04: 80 e1 ldi r24, 0x10 ; 16
10f06: 97 e8 ldi r25, 0x87 ; 135
10f08: 9f 93 push r25
10f0a: 8f 93 push r24
10f0c: e0 91 78 06 lds r30, 0x0678
10f10: f0 91 79 06 lds r31, 0x0679
10f14: 09 95 icall
10f16: 0f 90 pop r0
10f18: 0f 90 pop r0
10f1a: 0f 90 pop r0
10f1c: 0f 90 pop r0
10f1e: 0f 90 pop r0
10f20: 0f 90 pop r0
switch(MenuePunkt)
10f22: 20 91 a3 04 lds r18, 0x04A3
10f26: 82 2f mov r24, r18
10f28: 90 e0 ldi r25, 0x00 ; 0
10f2a: 84 31 cpi r24, 0x14 ; 20
10f2c: 91 05 cpc r25, r1
10f2e: 10 f0 brcs .+4 ; 0x10f34 <Menu+0xe6>
10f30: 0c 94 10 91 jmp 0x12220 ; 0x12220 <Menu+0x13d2>
10f34: fc 01 movw r30, r24
10f36: ee 56 subi r30, 0x6E ; 110
10f38: ff 4f sbci r31, 0xFF ; 255
10f3a: 0c 94 a7 b1 jmp 0x1634e ; 0x1634e <__tablejump2__>
{
case 0:
LCD_printfxy(0,0,"+ MikroKopter +");
10f3e: 10 92 a4 04 sts 0x04A4, r1
10f42: 81 e4 ldi r24, 0x41 ; 65
10f44: 95 e1 ldi r25, 0x15 ; 21
10f46: 9f 93 push r25
10f48: 8f 93 push r24
10f4a: c0 e1 ldi r28, 0x10 ; 16
10f4c: d7 e8 ldi r29, 0x87 ; 135
10f4e: df 93 push r29
10f50: cf 93 push r28
10f52: e0 91 78 06 lds r30, 0x0678
10f56: f0 91 79 06 lds r31, 0x0679
10f5a: 09 95 icall
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%02d%c ",PlatinenVersion/10,PlatinenVersion%10, VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH +'a');
10f5c: 84 e1 ldi r24, 0x14 ; 20
10f5e: 80 93 a4 04 sts 0x04A4, r24
10f62: 90 91 54 01 lds r25, 0x0154
10f66: 1f 92 push r1
10f68: 81 e6 ldi r24, 0x61 ; 97
10f6a: 8f 93 push r24
10f6c: 1f 92 push r1
10f6e: 88 e0 ldi r24, 0x08 ; 8
10f70: 8f 93 push r24
10f72: 1f 92 push r1
10f74: 82 e0 ldi r24, 0x02 ; 2
10f76: 8f 93 push r24
10f78: 8d ec ldi r24, 0xCD ; 205
10f7a: 98 9f mul r25, r24
10f7c: 81 2d mov r24, r1
10f7e: 11 24 eor r1, r1
10f80: 86 95 lsr r24
10f82: 86 95 lsr r24
10f84: 86 95 lsr r24
10f86: 28 2f mov r18, r24
10f88: 22 0f add r18, r18
10f8a: 32 2f mov r19, r18
10f8c: 33 0f add r19, r19
10f8e: 33 0f add r19, r19
10f90: 23 0f add r18, r19
10f92: 92 1b sub r25, r18
10f94: 1f 92 push r1
10f96: 9f 93 push r25
10f98: 1f 92 push r1
10f9a: 8f 93 push r24
10f9c: 89 e2 ldi r24, 0x29 ; 41
10f9e: 95 e1 ldi r25, 0x15 ; 21
10fa0: 9f 93 push r25
10fa2: 8f 93 push r24
10fa4: df 93 push r29
10fa6: cf 93 push r28
10fa8: e0 91 78 06 lds r30, 0x0678
10fac: f0 91 79 06 lds r31, 0x0679
10fb0: 09 95 icall
LCD_printfxy(0,2,"Set:%d %s", ActiveParamSet,Mixer.Name);
10fb2: 88 e2 ldi r24, 0x28 ; 40
10fb4: 80 93 a4 04 sts 0x04A4, r24
10fb8: 88 ec ldi r24, 0xC8 ; 200
10fba: 95 e0 ldi r25, 0x05 ; 5
10fbc: 9f 93 push r25
10fbe: 8f 93 push r24
10fc0: 80 91 52 01 lds r24, 0x0152
10fc4: 1f 92 push r1
10fc6: 8f 93 push r24
10fc8: 8f e1 ldi r24, 0x1F ; 31
10fca: 95 e1 ldi r25, 0x15 ; 21
10fcc: 9f 93 push r25
10fce: 8f 93 push r24
10fd0: df 93 push r29
10fd2: cf 93 push r28
10fd4: e0 91 78 06 lds r30, 0x0678
10fd8: f0 91 79 06 lds r31, 0x0679
10fdc: 09 95 icall
if(FC_StatusFlags3 & FC_STATUS3_BOAT) LCD_printfxy(16,2,"BOAT");
10fde: 80 91 c9 03 lds r24, 0x03C9
10fe2: 2d b7 in r18, 0x3d ; 61
10fe4: 3e b7 in r19, 0x3e ; 62
10fe6: 26 5e subi r18, 0xE6 ; 230
10fe8: 3f 4f sbci r19, 0xFF ; 255
10fea: 0f b6 in r0, 0x3f ; 63
10fec: f8 94 cli
10fee: 3e bf out 0x3e, r19 ; 62
10ff0: 0f be out 0x3f, r0 ; 63
10ff2: 2d bf out 0x3d, r18 ; 61
10ff4: 81 ff sbrs r24, 1
10ff6: 13 c0 rjmp .+38 ; 0x1101e <Menu+0x1d0>
10ff8: 88 e3 ldi r24, 0x38 ; 56
10ffa: 80 93 a4 04 sts 0x04A4, r24
10ffe: 8a e1 ldi r24, 0x1A ; 26
11000: 95 e1 ldi r25, 0x15 ; 21
11002: 9f 93 push r25
11004: 8f 93 push r24
11006: ce 01 movw r24, r28
11008: 9f 93 push r25
1100a: cf 93 push r28
1100c: e0 91 78 06 lds r30, 0x0678
11010: f0 91 79 06 lds r31, 0x0679
11014: 09 95 icall
11016: 0f 90 pop r0
11018: 0f 90 pop r0
1101a: 0f 90 pop r0
1101c: 0f 90 pop r0
if(VersionInfo.HardwareError[1] & FC_ERROR1_MIXER) LCD_printfxy(0,3,"Mixer Error!")
1101e: 80 91 63 0a lds r24, 0x0A63
11022: 84 ff sbrs r24, 4
11024: 16 c0 rjmp .+44 ; 0x11052 <Menu+0x204>
11026: 8c e3 ldi r24, 0x3C ; 60
11028: 80 93 a4 04 sts 0x04A4, r24
1102c: 8d e0 ldi r24, 0x0D ; 13
1102e: 95 e1 ldi r25, 0x15 ; 21
11030: 9f 93 push r25
11032: 8f 93 push r24
11034: 80 e1 ldi r24, 0x10 ; 16
11036: 97 e8 ldi r25, 0x87 ; 135
11038: 9f 93 push r25
1103a: 8f 93 push r24
1103c: e0 91 78 06 lds r30, 0x0678
11040: f0 91 79 06 lds r31, 0x0679
11044: 09 95 icall
11046: 0f 90 pop r0
11048: 0f 90 pop r0
1104a: 0f 90 pop r0
1104c: 0f 90 pop r0
1104e: 0c 94 19 91 jmp 0x12232 ; 0x12232 <Menu+0x13e4>
else
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(NC_ErrorCode)
11052: 80 91 bb 04 lds r24, 0x04BB
11056: 88 23 and r24, r24
11058: 79 f1 breq .+94 ; 0x110b8 <Menu+0x26a>
{
LCD_printfxy(0,3,"ERR%2d:",NC_ErrorCode);
1105a: 9c e3 ldi r25, 0x3C ; 60
1105c: 90 93 a4 04 sts 0x04A4, r25
11060: 1f 92 push r1
11062: 8f 93 push r24
11064: 85 e0 ldi r24, 0x05 ; 5
11066: 95 e1 ldi r25, 0x15 ; 21
11068: 9f 93 push r25
1106a: 8f 93 push r24
1106c: c0 e1 ldi r28, 0x10 ; 16
1106e: d7 e8 ldi r29, 0x87 ; 135
11070: df 93 push r29
11072: cf 93 push r28
11074: e0 91 78 06 lds r30, 0x0678
11078: f0 91 79 06 lds r31, 0x0679
1107c: 09 95 icall
_printf_P(&Menu_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);
1107e: 1f 92 push r1
11080: 1f 92 push r1
11082: 80 91 bb 04 lds r24, 0x04BB
11086: e1 e1 ldi r30, 0x11 ; 17
11088: 8e 9f mul r24, r30
1108a: c0 01 movw r24, r0
1108c: 11 24 eor r1, r1
1108e: 84 59 subi r24, 0x94 ; 148
11090: 94 4f sbci r25, 0xF4 ; 244
11092: 9f 93 push r25
11094: 8f 93 push r24
11096: df 93 push r29
11098: cf 93 push r28
1109a: e0 91 78 06 lds r30, 0x0678
1109e: f0 91 79 06 lds r31, 0x0679
110a2: 09 95 icall
110a4: 8d b7 in r24, 0x3d ; 61
110a6: 9e b7 in r25, 0x3e ; 62
110a8: 0c 96 adiw r24, 0x0c ; 12
110aa: 0f b6 in r0, 0x3f ; 63
110ac: f8 94 cli
110ae: 9e bf out 0x3e, r25 ; 62
110b0: 0f be out 0x3f, r0 ; 63
110b2: 8d bf out 0x3d, r24 ; 61
110b4: 0c 94 19 91 jmp 0x12232 ; 0x12232 <Menu+0x13e4>
}
else
#endif
if(VersionInfo.HardwareError[0]) LCD_printfxy(0,3,"Hardware Error 1:%d !!",VersionInfo.HardwareError[0])
110b8: 80 91 62 0a lds r24, 0x0A62
110bc: 88 23 and r24, r24
110be: d1 f0 breq .+52 ; 0x110f4 <Menu+0x2a6>
110c0: 9c e3 ldi r25, 0x3C ; 60
110c2: 90 93 a4 04 sts 0x04A4, r25
110c6: 1f 92 push r1
110c8: 8f 93 push r24
110ca: 8e ee ldi r24, 0xEE ; 238
110cc: 94 e1 ldi r25, 0x14 ; 20
110ce: 9f 93 push r25
110d0: 8f 93 push r24
110d2: 80 e1 ldi r24, 0x10 ; 16
110d4: 97 e8 ldi r25, 0x87 ; 135
110d6: 9f 93 push r25
110d8: 8f 93 push r24
110da: e0 91 78 06 lds r30, 0x0678
110de: f0 91 79 06 lds r31, 0x0679
110e2: 09 95 icall
110e4: 0f 90 pop r0
110e6: 0f 90 pop r0
110e8: 0f 90 pop r0
110ea: 0f 90 pop r0
110ec: 0f 90 pop r0
110ee: 0f 90 pop r0
110f0: 0c 94 19 91 jmp 0x12232 ; 0x12232 <Menu+0x13e4>
else
if(MissingMotor) LCD_printfxy(0,3,"Missing BL-Ctrl:%d !!",MissingMotor)
110f4: 80 91 df 04 lds r24, 0x04DF
110f8: 88 23 and r24, r24
110fa: d1 f0 breq .+52 ; 0x11130 <Menu+0x2e2>
110fc: 9c e3 ldi r25, 0x3C ; 60
110fe: 90 93 a4 04 sts 0x04A4, r25
11102: 1f 92 push r1
11104: 8f 93 push r24
11106: 88 ed ldi r24, 0xD8 ; 216
11108: 94 e1 ldi r25, 0x14 ; 20
1110a: 9f 93 push r25
1110c: 8f 93 push r24
1110e: 80 e1 ldi r24, 0x10 ; 16
11110: 97 e8 ldi r25, 0x87 ; 135
11112: 9f 93 push r25
11114: 8f 93 push r24
11116: e0 91 78 06 lds r30, 0x0678
1111a: f0 91 79 06 lds r31, 0x0679
1111e: 09 95 icall
11120: 0f 90 pop r0
11122: 0f 90 pop r0
11124: 0f 90 pop r0
11126: 0f 90 pop r0
11128: 0f 90 pop r0
1112a: 0f 90 pop r0
1112c: 0c 94 19 91 jmp 0x12232 ; 0x12232 <Menu+0x13e4>
LCD_printfxy(0,3,"! NC-ERR: %2d ! ",NC_ErrorCode);
}
#endif
// if(VersionInfo.HardwareError[1]) LCD_printfxy(0,3,"Error 2:%d !!",VersionInfo.HardwareError[1])
else
if(I2CTimeout < 6) LCD_printfxy(0,3,"I2C ERROR!!!")
11130: 80 91 b0 02 lds r24, 0x02B0
11134: 90 91 b1 02 lds r25, 0x02B1
11138: 06 97 sbiw r24, 0x06 ; 6
1113a: b0 f4 brcc .+44 ; 0x11168 <Menu+0x31a>
1113c: 8c e3 ldi r24, 0x3C ; 60
1113e: 80 93 a4 04 sts 0x04A4, r24
11142: 8b ec ldi r24, 0xCB ; 203
11144: 94 e1 ldi r25, 0x14 ; 20
11146: 9f 93 push r25
11148: 8f 93 push r24
1114a: 80 e1 ldi r24, 0x10 ; 16
1114c: 97 e8 ldi r25, 0x87 ; 135
1114e: 9f 93 push r25
11150: 8f 93 push r24
11152: e0 91 78 06 lds r30, 0x0678
11156: f0 91 79 06 lds r31, 0x0679
1115a: 09 95 icall
1115c: 0f 90 pop r0
1115e: 0f 90 pop r0
11160: 0f 90 pop r0
11162: 0f 90 pop r0
11164: 0c 94 19 91 jmp 0x12232 ; 0x12232 <Menu+0x13e4>
else
if(Capacity.MinOfMaxPWM < 30) LCD_printfxy(0,3,"BL-Selftest Err:%2d",Capacity.MinOfMaxPWM)
11168: 80 91 1b 05 lds r24, 0x051B
1116c: 8e 31 cpi r24, 0x1E ; 30
1116e: 10 f0 brcs .+4 ; 0x11174 <Menu+0x326>
11170: 0c 94 19 91 jmp 0x12232 ; 0x12232 <Menu+0x13e4>
11174: 9c e3 ldi r25, 0x3C ; 60
11176: 90 93 a4 04 sts 0x04A4, r25
1117a: 1f 92 push r1
1117c: 8f 93 push r24
1117e: 87 eb ldi r24, 0xB7 ; 183
11180: 94 e1 ldi r25, 0x14 ; 20
11182: 9f 93 push r25
11184: 8f 93 push r24
11186: 80 e1 ldi r24, 0x10 ; 16
11188: 97 e8 ldi r25, 0x87 ; 135
1118a: 9f 93 push r25
1118c: 8f 93 push r24
1118e: e0 91 78 06 lds r30, 0x0678
11192: f0 91 79 06 lds r31, 0x0679
11196: 09 95 icall
11198: 0f 90 pop r0
1119a: 0f 90 pop r0
1119c: 0f 90 pop r0
1119e: 0f 90 pop r0
111a0: 0f 90 pop r0
111a2: 0f 90 pop r0
111a4: 0c 94 19 91 jmp 0x12232 ; 0x12232 <Menu+0x13e4>
break;
case 1:
LCD_printfxy(0,0,"Height: %5i",(int)(HoehenWert/5));
111a8: 10 92 a4 04 sts 0x04A4, r1
111ac: 60 91 fe 03 lds r22, 0x03FE
111b0: 70 91 ff 03 lds r23, 0x03FF
111b4: 80 91 00 04 lds r24, 0x0400
111b8: 90 91 01 04 lds r25, 0x0401
111bc: 0f 2e mov r0, r31
111be: f5 e0 ldi r31, 0x05 ; 5
111c0: cf 2e mov r12, r31
111c2: d1 2c mov r13, r1
111c4: e1 2c mov r14, r1
111c6: f1 2c mov r15, r1
111c8: f0 2d mov r31, r0
111ca: a7 01 movw r20, r14
111cc: 96 01 movw r18, r12
111ce: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
111d2: 3f 93 push r19
111d4: 2f 93 push r18
111d6: 8a ea ldi r24, 0xAA ; 170
111d8: 94 e1 ldi r25, 0x14 ; 20
111da: 9f 93 push r25
111dc: 8f 93 push r24
111de: c0 e1 ldi r28, 0x10 ; 16
111e0: d7 e8 ldi r29, 0x87 ; 135
111e2: df 93 push r29
111e4: cf 93 push r28
111e6: e0 91 78 06 lds r30, 0x0678
111ea: f0 91 79 06 lds r31, 0x0679
111ee: 09 95 icall
LCD_printfxy(0,1,"Setpoint:%5i",(int)(SollHoehe/5));
111f0: 84 e1 ldi r24, 0x14 ; 20
111f2: 80 93 a4 04 sts 0x04A4, r24
111f6: 60 91 fa 03 lds r22, 0x03FA
111fa: 70 91 fb 03 lds r23, 0x03FB
111fe: 80 91 fc 03 lds r24, 0x03FC
11202: 90 91 fd 03 lds r25, 0x03FD
11206: a7 01 movw r20, r14
11208: 96 01 movw r18, r12
1120a: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
1120e: 3f 93 push r19
11210: 2f 93 push r18
11212: 8d e9 ldi r24, 0x9D ; 157
11214: 94 e1 ldi r25, 0x14 ; 20
11216: 9f 93 push r25
11218: 8f 93 push r24
1121a: df 93 push r29
1121c: cf 93 push r28
1121e: e0 91 78 06 lds r30, 0x0678
11222: f0 91 79 06 lds r31, 0x0679
11226: 09 95 icall
LCD_printfxy(0,2,"Pressure:%5i",MessLuftdruck);
11228: 88 e2 ldi r24, 0x28 ; 40
1122a: 80 93 a4 04 sts 0x04A4, r24
1122e: 80 91 10 01 lds r24, 0x0110
11232: 90 91 11 01 lds r25, 0x0111
11236: 9f 93 push r25
11238: 8f 93 push r24
1123a: 80 e9 ldi r24, 0x90 ; 144
1123c: 94 e1 ldi r25, 0x14 ; 20
1123e: 9f 93 push r25
11240: 8f 93 push r24
11242: df 93 push r29
11244: cf 93 push r28
11246: e0 91 78 06 lds r30, 0x0678
1124a: f0 91 79 06 lds r31, 0x0679
1124e: 09 95 icall
LCD_printfxy(0,3,"Offset: %5i",OCR0A);
11250: 8c e3 ldi r24, 0x3C ; 60
11252: 80 93 a4 04 sts 0x04A4, r24
11256: 87 b5 in r24, 0x27 ; 39
11258: 1f 92 push r1
1125a: 8f 93 push r24
1125c: 83 e8 ldi r24, 0x83 ; 131
1125e: 94 e1 ldi r25, 0x14 ; 20
11260: 9f 93 push r25
11262: 8f 93 push r24
11264: df 93 push r29
11266: cf 93 push r28
11268: e0 91 78 06 lds r30, 0x0678
1126c: f0 91 79 06 lds r31, 0x0679
11270: 09 95 icall
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(ACC_AltitudeControl)
11272: 2d b7 in r18, 0x3d ; 61
11274: 3e b7 in r19, 0x3e ; 62
11276: 28 5e subi r18, 0xE8 ; 232
11278: 3f 4f sbci r19, 0xFF ; 255
1127a: 0f b6 in r0, 0x3f ; 63
1127c: f8 94 cli
1127e: 3e bf out 0x3e, r19 ; 62
11280: 0f be out 0x3f, r0 ; 63
11282: 2d bf out 0x3d, r18 ; 61
11284: 80 91 c2 03 lds r24, 0x03C2
11288: 88 23 and r24, r24
1128a: 09 f4 brne .+2 ; 0x1128e <Menu+0x440>
1128c: d2 c7 rjmp .+4004 ; 0x12232 <Menu+0x13e4>
{
LCD_printfxy(17,2,"(A)");
1128e: 89 e3 ldi r24, 0x39 ; 57
11290: 80 93 a4 04 sts 0x04A4, r24
11294: 8f e7 ldi r24, 0x7F ; 127
11296: 94 e1 ldi r25, 0x14 ; 20
11298: 9f 93 push r25
1129a: 8f 93 push r24
1129c: df 93 push r29
1129e: cf 93 push r28
112a0: e0 91 78 06 lds r30, 0x0678
112a4: f0 91 79 06 lds r31, 0x0679
112a8: 09 95 icall
LCD_printfxy(17,3,"%i",CalAthmospheare);
112aa: 8d e4 ldi r24, 0x4D ; 77
112ac: 80 93 a4 04 sts 0x04A4, r24
112b0: 80 91 0c 01 lds r24, 0x010C
112b4: 1f 92 push r1
112b6: 8f 93 push r24
112b8: 8c e7 ldi r24, 0x7C ; 124
112ba: 94 e1 ldi r25, 0x14 ; 20
112bc: 9f 93 push r25
112be: 8f 93 push r24
112c0: df 93 push r29
112c2: cf 93 push r28
112c4: e0 91 78 06 lds r30, 0x0678
112c8: f0 91 79 06 lds r31, 0x0679
112cc: 09 95 icall
112ce: 2d b7 in r18, 0x3d ; 61
112d0: 3e b7 in r19, 0x3e ; 62
112d2: 26 5f subi r18, 0xF6 ; 246
112d4: 3f 4f sbci r19, 0xFF ; 255
112d6: 0f b6 in r0, 0x3f ; 63
112d8: f8 94 cli
112da: 3e bf out 0x3e, r19 ; 62
112dc: 0f be out 0x3f, r0 ; 63
112de: 2d bf out 0x3d, r18 ; 61
112e0: a8 c7 rjmp .+3920 ; 0x12232 <Menu+0x13e4>
}
#endif
break;
case 2:
LCD_printfxy(0,0,"act. bearing");
112e2: 10 92 a4 04 sts 0x04A4, r1
112e6: 8f e6 ldi r24, 0x6F ; 111
112e8: 94 e1 ldi r25, 0x14 ; 20
112ea: 9f 93 push r25
112ec: 8f 93 push r24
112ee: 80 e1 ldi r24, 0x10 ; 16
112f0: 97 e8 ldi r25, 0x87 ; 135
112f2: 9f 93 push r25
112f4: 8f 93 push r24
112f6: e0 91 78 06 lds r30, 0x0678
112fa: f0 91 79 06 lds r31, 0x0679
112fe: 09 95 icall
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
11300: 84 e1 ldi r24, 0x14 ; 20
11302: 80 93 a4 04 sts 0x04A4, r24
11306: 80 91 42 04 lds r24, 0x0442
1130a: 90 91 43 04 lds r25, 0x0443
1130e: a0 91 44 04 lds r26, 0x0444
11312: b0 91 45 04 lds r27, 0x0445
11316: bb 23 and r27, r27
11318: 24 f4 brge .+8 ; 0x11322 <Menu+0x4d4>
1131a: 81 50 subi r24, 0x01 ; 1
1131c: 9c 4f sbci r25, 0xFC ; 252
1131e: af 4f sbci r26, 0xFF ; 255
11320: bf 4f sbci r27, 0xFF ; 255
11322: 07 2e mov r0, r23
11324: 7a e0 ldi r23, 0x0A ; 10
11326: b5 95 asr r27
11328: a7 95 ror r26
1132a: 97 95 ror r25
1132c: 87 95 ror r24
1132e: 7a 95 dec r23
11330: d1 f7 brne .-12 ; 0x11326 <Menu+0x4d8>
11332: 70 2d mov r23, r0
11334: bf 93 push r27
11336: af 93 push r26
11338: 9f 93 push r25
1133a: 8f 93 push r24
1133c: 80 e6 ldi r24, 0x60 ; 96
1133e: 94 e1 ldi r25, 0x14 ; 20
11340: 9f 93 push r25
11342: 8f 93 push r24
11344: 80 e1 ldi r24, 0x10 ; 16
11346: 97 e8 ldi r25, 0x87 ; 135
11348: 9f 93 push r25
1134a: 8f 93 push r24
1134c: e0 91 78 06 lds r30, 0x0678
11350: f0 91 79 06 lds r31, 0x0679
11354: 09 95 icall
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
11356: 88 e2 ldi r24, 0x28 ; 40
11358: 80 93 a4 04 sts 0x04A4, r24
1135c: 80 91 3e 04 lds r24, 0x043E
11360: 90 91 3f 04 lds r25, 0x043F
11364: a0 91 40 04 lds r26, 0x0440
11368: b0 91 41 04 lds r27, 0x0441
1136c: bb 23 and r27, r27
1136e: 24 f4 brge .+8 ; 0x11378 <Menu+0x52a>
11370: 81 50 subi r24, 0x01 ; 1
11372: 9c 4f sbci r25, 0xFC ; 252
11374: af 4f sbci r26, 0xFF ; 255
11376: bf 4f sbci r27, 0xFF ; 255
11378: 07 2e mov r0, r23
1137a: 7a e0 ldi r23, 0x0A ; 10
1137c: b5 95 asr r27
1137e: a7 95 ror r26
11380: 97 95 ror r25
11382: 87 95 ror r24
11384: 7a 95 dec r23
11386: d1 f7 brne .-12 ; 0x1137c <Menu+0x52e>
11388: 70 2d mov r23, r0
1138a: bf 93 push r27
1138c: af 93 push r26
1138e: 9f 93 push r25
11390: 8f 93 push r24
11392: 81 e5 ldi r24, 0x51 ; 81
11394: 94 e1 ldi r25, 0x14 ; 20
11396: 9f 93 push r25
11398: 8f 93 push r24
1139a: c0 e1 ldi r28, 0x10 ; 16
1139c: d7 e8 ldi r29, 0x87 ; 135
1139e: df 93 push r29
113a0: cf 93 push r28
113a2: e0 91 78 06 lds r30, 0x0678
113a6: f0 91 79 06 lds r31, 0x0679
113aa: 09 95 icall
LCD_printfxy(0,3,"Compass: %5i",CompassCorrected);
113ac: 8c e3 ldi r24, 0x3C ; 60
113ae: 80 93 a4 04 sts 0x04A4, r24
113b2: 80 91 66 06 lds r24, 0x0666
113b6: 8f 93 push r24
113b8: 80 91 65 06 lds r24, 0x0665
113bc: 8f 93 push r24
113be: 82 e4 ldi r24, 0x42 ; 66
113c0: 94 e1 ldi r25, 0x14 ; 20
113c2: 9f 93 push r25
113c4: 8f 93 push r24
113c6: df 93 push r29
113c8: cf 93 push r28
113ca: e0 91 78 06 lds r30, 0x0678
113ce: f0 91 79 06 lds r31, 0x0679
113d2: 09 95 icall
break;
113d4: 2d b7 in r18, 0x3d ; 61
113d6: 3e b7 in r19, 0x3e ; 62
113d8: 26 5e subi r18, 0xE6 ; 230
113da: 3f 4f sbci r19, 0xFF ; 255
113dc: 0f b6 in r0, 0x3f ; 63
113de: f8 94 cli
113e0: 3e bf out 0x3e, r19 ; 62
113e2: 0f be out 0x3f, r0 ; 63
113e4: 2d bf out 0x3d, r18 ; 61
113e6: 25 c7 rjmp .+3658 ; 0x12232 <Menu+0x13e4>
if((RemoteKeys & KEY1) && (RemoteKeys & KEY2)) MenuePunkt = 0;
LcdClear();
if(MenuePunkt < 10) {LCD_printfxy(17,0,"[%i]",MenuePunkt);}
else {LCD_printfxy(16,0,"[%i]",MenuePunkt);};
switch(MenuePunkt)
113e8: c1 e0 ldi r28, 0x01 ; 1
113ea: d0 e0 ldi r29, 0x00 ; 0
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Compass: %5i",CompassCorrected);
break;
case 3:
for(i=1;i<9;i+=2) LCD_printfxy(0,i/2,"K%i:%4i K%i:%4i ",i,PPM_in[i],i+1,PPM_in[i+1]);
113ec: 0f 2e mov r0, r31
113ee: f0 e3 ldi r31, 0x30 ; 48
113f0: ef 2e mov r14, r31
113f2: f4 e1 ldi r31, 0x14 ; 20
113f4: ff 2e mov r15, r31
113f6: f0 2d mov r31, r0
113f8: 00 e1 ldi r16, 0x10 ; 16
113fa: 17 e8 ldi r17, 0x87 ; 135
113fc: 8c 2f mov r24, r28
113fe: 86 95 lsr r24
11400: 88 0f add r24, r24
11402: 88 0f add r24, r24
11404: 98 2f mov r25, r24
11406: 99 0f add r25, r25
11408: 99 0f add r25, r25
1140a: 89 0f add r24, r25
1140c: 80 93 a4 04 sts 0x04A4, r24
11410: ce 01 movw r24, r28
11412: 01 96 adiw r24, 0x01 ; 1
11414: fc 01 movw r30, r24
11416: ee 0f add r30, r30
11418: ff 1f adc r31, r31
1141a: ef 5c subi r30, 0xCF ; 207
1141c: f7 4f sbci r31, 0xF7 ; 247
1141e: 40 81 ld r20, Z
11420: 51 81 ldd r21, Z+1 ; 0x01
11422: fe 01 movw r30, r28
11424: ee 0f add r30, r30
11426: ff 1f adc r31, r31
11428: ef 5c subi r30, 0xCF ; 207
1142a: f7 4f sbci r31, 0xF7 ; 247
1142c: 20 81 ld r18, Z
1142e: 31 81 ldd r19, Z+1 ; 0x01
11430: 5f 93 push r21
11432: 4f 93 push r20
11434: 9f 93 push r25
11436: 8f 93 push r24
11438: 3f 93 push r19
1143a: 2f 93 push r18
1143c: df 93 push r29
1143e: cf 93 push r28
11440: ff 92 push r15
11442: ef 92 push r14
11444: 1f 93 push r17
11446: 0f 93 push r16
11448: e0 91 78 06 lds r30, 0x0678
1144c: f0 91 79 06 lds r31, 0x0679
11450: 09 95 icall
11452: 22 96 adiw r28, 0x02 ; 2
11454: ed b7 in r30, 0x3d ; 61
11456: fe b7 in r31, 0x3e ; 62
11458: 3c 96 adiw r30, 0x0c ; 12
1145a: 0f b6 in r0, 0x3f ; 63
1145c: f8 94 cli
1145e: fe bf out 0x3e, r31 ; 62
11460: 0f be out 0x3f, r0 ; 63
11462: ed bf out 0x3d, r30 ; 61
11464: c9 30 cpi r28, 0x09 ; 9
11466: d1 05 cpc r29, r1
11468: 49 f6 brne .-110 ; 0x113fc <Menu+0x5ae>
1146a: e3 c6 rjmp .+3526 ; 0x12232 <Menu+0x13e4>
break;
case 4:
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]);
1146c: 10 92 a4 04 sts 0x04A4, r1
11470: e0 91 40 05 lds r30, 0x0540
11474: f0 e0 ldi r31, 0x00 ; 0
11476: ee 0f add r30, r30
11478: ff 1f adc r31, r31
1147a: ef 5c subi r30, 0xCF ; 207
1147c: f7 4f sbci r31, 0xF7 ; 247
1147e: 20 81 ld r18, Z
11480: 31 81 ldd r19, Z+1 ; 0x01
11482: e0 91 3f 05 lds r30, 0x053F
11486: f0 e0 ldi r31, 0x00 ; 0
11488: ee 0f add r30, r30
1148a: ff 1f adc r31, r31
1148c: ef 5c subi r30, 0xCF ; 207
1148e: f7 4f sbci r31, 0xF7 ; 247
11490: 80 81 ld r24, Z
11492: 91 81 ldd r25, Z+1 ; 0x01
11494: 3f 93 push r19
11496: 2f 93 push r18
11498: 9f 93 push r25
1149a: 8f 93 push r24
1149c: 80 e2 ldi r24, 0x20 ; 32
1149e: 94 e1 ldi r25, 0x14 ; 20
114a0: 9f 93 push r25
114a2: 8f 93 push r24
114a4: c0 e1 ldi r28, 0x10 ; 16
114a6: d7 e8 ldi r29, 0x87 ; 135
114a8: df 93 push r29
114aa: cf 93 push r28
114ac: e0 91 78 06 lds r30, 0x0678
114b0: f0 91 79 06 lds r31, 0x0679
114b4: 09 95 icall
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
114b6: 84 e1 ldi r24, 0x14 ; 20
114b8: 80 93 a4 04 sts 0x04A4, r24
114bc: e0 91 42 05 lds r30, 0x0542
114c0: f0 e0 ldi r31, 0x00 ; 0
114c2: ee 0f add r30, r30
114c4: ff 1f adc r31, r31
114c6: ef 5c subi r30, 0xCF ; 207
114c8: f7 4f sbci r31, 0xF7 ; 247
114ca: 20 81 ld r18, Z
114cc: 31 81 ldd r19, Z+1 ; 0x01
114ce: e0 91 41 05 lds r30, 0x0541
114d2: f0 e0 ldi r31, 0x00 ; 0
114d4: ee 0f add r30, r30
114d6: ff 1f adc r31, r31
114d8: ef 5c subi r30, 0xCF ; 207
114da: f7 4f sbci r31, 0xF7 ; 247
114dc: 80 81 ld r24, Z
114de: 91 81 ldd r25, Z+1 ; 0x01
114e0: 3f 93 push r19
114e2: 2f 93 push r18
114e4: 81 58 subi r24, 0x81 ; 129
114e6: 9f 4f sbci r25, 0xFF ; 255
114e8: 9f 93 push r25
114ea: 8f 93 push r24
114ec: 80 e1 ldi r24, 0x10 ; 16
114ee: 94 e1 ldi r25, 0x14 ; 20
114f0: 9f 93 push r25
114f2: 8f 93 push r24
114f4: df 93 push r29
114f6: cf 93 push r28
114f8: e0 91 78 06 lds r30, 0x0678
114fc: f0 91 79 06 lds r31, 0x0679
11500: 09 95 icall
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]+127);
11502: 88 e2 ldi r24, 0x28 ; 40
11504: 80 93 a4 04 sts 0x04A4, r24
11508: e0 91 44 05 lds r30, 0x0544
1150c: f0 e0 ldi r31, 0x00 ; 0
1150e: ee 0f add r30, r30
11510: ff 1f adc r31, r31
11512: ef 5c subi r30, 0xCF ; 207
11514: f7 4f sbci r31, 0xF7 ; 247
11516: 20 81 ld r18, Z
11518: 31 81 ldd r19, Z+1 ; 0x01
1151a: e0 91 43 05 lds r30, 0x0543
1151e: f0 e0 ldi r31, 0x00 ; 0
11520: ee 0f add r30, r30
11522: ff 1f adc r31, r31
11524: ef 5c subi r30, 0xCF ; 207
11526: f7 4f sbci r31, 0xF7 ; 247
11528: 80 81 ld r24, Z
1152a: 91 81 ldd r25, Z+1 ; 0x01
1152c: 21 58 subi r18, 0x81 ; 129
1152e: 3f 4f sbci r19, 0xFF ; 255
11530: 3f 93 push r19
11532: 2f 93 push r18
11534: 81 58 subi r24, 0x81 ; 129
11536: 9f 4f sbci r25, 0xFF ; 255
11538: 9f 93 push r25
1153a: 8f 93 push r24
1153c: 80 e0 ldi r24, 0x00 ; 0
1153e: 94 e1 ldi r25, 0x14 ; 20
11540: 9f 93 push r25
11542: 8f 93 push r24
11544: df 93 push r29
11546: cf 93 push r28
11548: e0 91 78 06 lds r30, 0x0678
1154c: f0 91 79 06 lds r31, 0x0679
11550: 09 95 icall
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]+127);
11552: 8c e3 ldi r24, 0x3C ; 60
11554: 80 93 a4 04 sts 0x04A4, r24
11558: e0 91 46 05 lds r30, 0x0546
1155c: f0 e0 ldi r31, 0x00 ; 0
1155e: ee 0f add r30, r30
11560: ff 1f adc r31, r31
11562: ef 5c subi r30, 0xCF ; 207
11564: f7 4f sbci r31, 0xF7 ; 247
11566: 20 81 ld r18, Z
11568: 31 81 ldd r19, Z+1 ; 0x01
1156a: e0 91 45 05 lds r30, 0x0545
1156e: f0 e0 ldi r31, 0x00 ; 0
11570: ee 0f add r30, r30
11572: ff 1f adc r31, r31
11574: ef 5c subi r30, 0xCF ; 207
11576: f7 4f sbci r31, 0xF7 ; 247
11578: 80 81 ld r24, Z
1157a: 91 81 ldd r25, Z+1 ; 0x01
1157c: 21 58 subi r18, 0x81 ; 129
1157e: 3f 4f sbci r19, 0xFF ; 255
11580: 3f 93 push r19
11582: 2f 93 push r18
11584: 81 58 subi r24, 0x81 ; 129
11586: 9f 4f sbci r25, 0xFF ; 255
11588: 9f 93 push r25
1158a: 8f 93 push r24
1158c: 80 ef ldi r24, 0xF0 ; 240
1158e: 93 e1 ldi r25, 0x13 ; 19
11590: 9f 93 push r25
11592: 8f 93 push r24
11594: df 93 push r29
11596: cf 93 push r28
11598: e0 91 78 06 lds r30, 0x0678
1159c: f0 91 79 06 lds r31, 0x0679
115a0: 09 95 icall
break;
115a2: 8d b7 in r24, 0x3d ; 61
115a4: 9e b7 in r25, 0x3e ; 62
115a6: 80 96 adiw r24, 0x20 ; 32
115a8: 0f b6 in r0, 0x3f ; 63
115aa: f8 94 cli
115ac: 9e bf out 0x3e, r25 ; 62
115ae: 0f be out 0x3f, r0 ; 63
115b0: 8d bf out 0x3d, r24 ; 61
115b2: 3f c6 rjmp .+3198 ; 0x12232 <Menu+0x13e4>
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
115b4: 10 92 a4 04 sts 0x04A4, r1
115b8: 82 ee ldi r24, 0xE2 ; 226
115ba: 93 e1 ldi r25, 0x13 ; 19
115bc: 9f 93 push r25
115be: 8f 93 push r24
115c0: 80 e1 ldi r24, 0x10 ; 16
115c2: 97 e8 ldi r25, 0x87 ; 135
115c4: 9f 93 push r25
115c6: 8f 93 push r24
115c8: e0 91 78 06 lds r30, 0x0678
115cc: f0 91 79 06 lds r31, 0x0679
115d0: 09 95 icall
LCD_printfxy(0,1,"Nick %4i (%4i)",AdWertNick - AdNeutralNick/8, AdNeutralNick);
115d2: 84 e1 ldi r24, 0x14 ; 20
115d4: 80 93 a4 04 sts 0x04A4, r24
115d8: 40 91 65 03 lds r20, 0x0365
115dc: 50 91 66 03 lds r21, 0x0366
115e0: 30 91 57 04 lds r19, 0x0457
115e4: 20 91 58 04 lds r18, 0x0458
115e8: 2f 93 push r18
115ea: 3f 93 push r19
115ec: 83 2f mov r24, r19
115ee: 92 2f mov r25, r18
115f0: 99 23 and r25, r25
115f2: 0c f4 brge .+2 ; 0x115f6 <Menu+0x7a8>
115f4: 07 96 adiw r24, 0x07 ; 7
115f6: 9c 01 movw r18, r24
115f8: 35 95 asr r19
115fa: 27 95 ror r18
115fc: 35 95 asr r19
115fe: 27 95 ror r18
11600: 35 95 asr r19
11602: 27 95 ror r18
11604: ca 01 movw r24, r20
11606: 82 1b sub r24, r18
11608: 93 0b sbc r25, r19
1160a: 9f 93 push r25
1160c: 8f 93 push r24
1160e: 83 ed ldi r24, 0xD3 ; 211
11610: 93 e1 ldi r25, 0x13 ; 19
11612: 9f 93 push r25
11614: 8f 93 push r24
11616: 80 e1 ldi r24, 0x10 ; 16
11618: 97 e8 ldi r25, 0x87 ; 135
1161a: 9f 93 push r25
1161c: 8f 93 push r24
1161e: e0 91 78 06 lds r30, 0x0678
11622: f0 91 79 06 lds r31, 0x0679
11626: 09 95 icall
LCD_printfxy(0,2,"Roll %4i (%4i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll);
11628: 88 e2 ldi r24, 0x28 ; 40
1162a: 80 93 a4 04 sts 0x04A4, r24
1162e: 40 91 63 03 lds r20, 0x0363
11632: 50 91 64 03 lds r21, 0x0364
11636: 30 91 55 04 lds r19, 0x0455
1163a: 20 91 56 04 lds r18, 0x0456
1163e: 2f 93 push r18
11640: 3f 93 push r19
11642: 83 2f mov r24, r19
11644: 92 2f mov r25, r18
11646: 99 23 and r25, r25
11648: 0c f4 brge .+2 ; 0x1164c <Menu+0x7fe>
1164a: 07 96 adiw r24, 0x07 ; 7
1164c: 9c 01 movw r18, r24
1164e: 35 95 asr r19
11650: 27 95 ror r18
11652: 35 95 asr r19
11654: 27 95 ror r18
11656: 35 95 asr r19
11658: 27 95 ror r18
1165a: ca 01 movw r24, r20
1165c: 82 1b sub r24, r18
1165e: 93 0b sbc r25, r19
11660: 9f 93 push r25
11662: 8f 93 push r24
11664: 84 ec ldi r24, 0xC4 ; 196
11666: 93 e1 ldi r25, 0x13 ; 19
11668: 9f 93 push r25
1166a: 8f 93 push r24
1166c: c0 e1 ldi r28, 0x10 ; 16
1166e: d7 e8 ldi r29, 0x87 ; 135
11670: df 93 push r29
11672: cf 93 push r28
11674: e0 91 78 06 lds r30, 0x0678
11678: f0 91 79 06 lds r31, 0x0679
1167c: 09 95 icall
LCD_printfxy(0,3,"Yaw %4i (%4i)",AdNeutralGier - AdWertGier, AdNeutralGier);
1167e: 8c e3 ldi r24, 0x3C ; 60
11680: 80 93 a4 04 sts 0x04A4, r24
11684: 80 91 53 04 lds r24, 0x0453
11688: 90 91 54 04 lds r25, 0x0454
1168c: 20 91 61 03 lds r18, 0x0361
11690: 30 91 62 03 lds r19, 0x0362
11694: 9f 93 push r25
11696: 8f 93 push r24
11698: 82 1b sub r24, r18
1169a: 93 0b sbc r25, r19
1169c: 9f 93 push r25
1169e: 8f 93 push r24
116a0: 85 eb ldi r24, 0xB5 ; 181
116a2: 93 e1 ldi r25, 0x13 ; 19
116a4: 9f 93 push r25
116a6: 8f 93 push r24
116a8: df 93 push r29
116aa: cf 93 push r28
116ac: e0 91 78 06 lds r30, 0x0678
116b0: f0 91 79 06 lds r31, 0x0679
116b4: 09 95 icall
LCD_printfxy(0,1,"Nick %4i (%3i)(%3i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16,AnalogOffsetNick);
LCD_printfxy(0,2,"Roll %4i (%3i)(%3i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16,AnalogOffsetRoll);
LCD_printfxy(0,3,"Yaw %4i (%3i)(%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2,AnalogOffsetGier);
}
*/
break;
116b6: 8d b7 in r24, 0x3d ; 61
116b8: 9e b7 in r25, 0x3e ; 62
116ba: 4c 96 adiw r24, 0x1c ; 28
116bc: 0f b6 in r0, 0x3f ; 63
116be: f8 94 cli
116c0: 9e bf out 0x3e, r25 ; 62
116c2: 0f be out 0x3f, r0 ; 63
116c4: 8d bf out 0x3d, r24 ; 61
116c6: b5 c5 rjmp .+2922 ; 0x12232 <Menu+0x13e4>
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
116c8: 10 92 a4 04 sts 0x04A4, r1
116cc: 88 ea ldi r24, 0xA8 ; 168
116ce: 93 e1 ldi r25, 0x13 ; 19
116d0: 9f 93 push r25
116d2: 8f 93 push r24
116d4: c0 e1 ldi r28, 0x10 ; 16
116d6: d7 e8 ldi r29, 0x87 ; 135
116d8: df 93 push r29
116da: cf 93 push r28
116dc: e0 91 78 06 lds r30, 0x0678
116e0: f0 91 79 06 lds r31, 0x0679
116e4: 09 95 icall
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX);
116e6: 84 e1 ldi r24, 0x14 ; 20
116e8: 80 93 a4 04 sts 0x04A4, r24
116ec: 80 91 5d 03 lds r24, 0x035D
116f0: 90 91 5e 03 lds r25, 0x035E
116f4: 20 91 4e 04 lds r18, 0x044E
116f8: 2f 93 push r18
116fa: 20 91 4d 04 lds r18, 0x044D
116fe: 2f 93 push r18
11700: 9f 93 push r25
11702: 8f 93 push r24
11704: 89 e9 ldi r24, 0x99 ; 153
11706: 93 e1 ldi r25, 0x13 ; 19
11708: 9f 93 push r25
1170a: 8f 93 push r24
1170c: df 93 push r29
1170e: cf 93 push r28
11710: e0 91 78 06 lds r30, 0x0678
11714: f0 91 79 06 lds r31, 0x0679
11718: 09 95 icall
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY);
1171a: 88 e2 ldi r24, 0x28 ; 40
1171c: 80 93 a4 04 sts 0x04A4, r24
11720: 80 91 5f 03 lds r24, 0x035F
11724: 90 91 60 03 lds r25, 0x0360
11728: 20 91 4c 04 lds r18, 0x044C
1172c: 2f 93 push r18
1172e: 20 91 4b 04 lds r18, 0x044B
11732: 2f 93 push r18
11734: 9f 93 push r25
11736: 8f 93 push r24
11738: 8a e8 ldi r24, 0x8A ; 138
1173a: 93 e1 ldi r25, 0x13 ; 19
1173c: 9f 93 push r25
1173e: 8f 93 push r24
11740: df 93 push r29
11742: cf 93 push r28
11744: e0 91 78 06 lds r30, 0x0678
11748: f0 91 79 06 lds r31, 0x0679
1174c: 09 95 icall
LCD_printfxy(0,3,"Z %4i (%3i)",AdWertAccHoch,(int)NeutralAccZ);
1174e: 8c e3 ldi r24, 0x3C ; 60
11750: 80 93 a4 04 sts 0x04A4, r24
11754: 80 91 5b 03 lds r24, 0x035B
11758: 90 91 5c 03 lds r25, 0x035C
1175c: 20 91 48 04 lds r18, 0x0448
11760: 2f 93 push r18
11762: 20 91 47 04 lds r18, 0x0447
11766: 2f 93 push r18
11768: 9f 93 push r25
1176a: 8f 93 push r24
1176c: 8b e7 ldi r24, 0x7B ; 123
1176e: 93 e1 ldi r25, 0x13 ; 19
11770: 9f 93 push r25
11772: 8f 93 push r24
11774: df 93 push r29
11776: cf 93 push r28
11778: e0 91 78 06 lds r30, 0x0678
1177c: f0 91 79 06 lds r31, 0x0679
11780: 09 95 icall
break;
11782: 2d b7 in r18, 0x3d ; 61
11784: 3e b7 in r19, 0x3e ; 62
11786: 24 5e subi r18, 0xE4 ; 228
11788: 3f 4f sbci r19, 0xFF ; 255
1178a: 0f b6 in r0, 0x3f ; 63
1178c: f8 94 cli
1178e: 3e bf out 0x3e, r19 ; 62
11790: 0f be out 0x3f, r0 ; 63
11792: 2d bf out 0x3d, r18 ; 61
11794: 4e c5 rjmp .+2716 ; 0x12232 <Menu+0x13e4>
case 7:
LCD_printfxy(0,0,"Voltage: %3i.%1iV",UBat/10, UBat%10);
11796: 10 92 a4 04 sts 0x04A4, r1
1179a: 80 91 1a 01 lds r24, 0x011A
1179e: 90 91 1b 01 lds r25, 0x011B
117a2: e0 91 1a 01 lds r30, 0x011A
117a6: f0 91 1b 01 lds r31, 0x011B
117aa: 2a e0 ldi r18, 0x0A ; 10
117ac: 30 e0 ldi r19, 0x00 ; 0
117ae: b9 01 movw r22, r18
117b0: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
117b4: 9f 93 push r25
117b6: 8f 93 push r24
117b8: cf 01 movw r24, r30
117ba: b9 01 movw r22, r18
117bc: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
117c0: 7f 93 push r23
117c2: 6f 93 push r22
117c4: 87 e6 ldi r24, 0x67 ; 103
117c6: 93 e1 ldi r25, 0x13 ; 19
117c8: 9f 93 push r25
117ca: 8f 93 push r24
117cc: c0 e1 ldi r28, 0x10 ; 16
117ce: d7 e8 ldi r29, 0x87 ; 135
117d0: df 93 push r29
117d2: cf 93 push r28
117d4: e0 91 78 06 lds r30, 0x0678
117d8: f0 91 79 06 lds r31, 0x0679
117dc: 09 95 icall
LCD_printfxy(0,1,"Current: %3i.%1iA",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10);
117de: 84 e1 ldi r24, 0x14 ; 20
117e0: 80 93 a4 04 sts 0x04A4, r24
117e4: 40 91 15 05 lds r20, 0x0515
117e8: 50 91 16 05 lds r21, 0x0516
117ec: 9a 01 movw r18, r20
117ee: ad ec ldi r26, 0xCD ; 205
117f0: bc ec ldi r27, 0xCC ; 204
117f2: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
117f6: 96 95 lsr r25
117f8: 87 95 ror r24
117fa: 96 95 lsr r25
117fc: 87 95 ror r24
117fe: 96 95 lsr r25
11800: 87 95 ror r24
11802: 9c 01 movw r18, r24
11804: 22 0f add r18, r18
11806: 33 1f adc r19, r19
11808: 88 0f add r24, r24
1180a: 99 1f adc r25, r25
1180c: 88 0f add r24, r24
1180e: 99 1f adc r25, r25
11810: 88 0f add r24, r24
11812: 99 1f adc r25, r25
11814: 82 0f add r24, r18
11816: 93 1f adc r25, r19
11818: fa 01 movw r30, r20
1181a: e8 1b sub r30, r24
1181c: f9 0b sbc r31, r25
1181e: cf 01 movw r24, r30
11820: 9f 93 push r25
11822: ef 93 push r30
11824: 9a 01 movw r18, r20
11826: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
1182a: 96 95 lsr r25
1182c: 87 95 ror r24
1182e: 96 95 lsr r25
11830: 87 95 ror r24
11832: 96 95 lsr r25
11834: 87 95 ror r24
11836: 9f 93 push r25
11838: 8f 93 push r24
1183a: 83 e5 ldi r24, 0x53 ; 83
1183c: 93 e1 ldi r25, 0x13 ; 19
1183e: 9f 93 push r25
11840: 8f 93 push r24
11842: df 93 push r29
11844: cf 93 push r28
11846: e0 91 78 06 lds r30, 0x0678
1184a: f0 91 79 06 lds r31, 0x0679
1184e: 09 95 icall
LCD_printfxy(0,2,"Power: %4iW",Capacity.ActualPower);
11850: 88 e2 ldi r24, 0x28 ; 40
11852: 80 93 a4 04 sts 0x04A4, r24
11856: e7 e1 ldi r30, 0x17 ; 23
11858: f5 e0 ldi r31, 0x05 ; 5
1185a: 81 81 ldd r24, Z+1 ; 0x01
1185c: 8f 93 push r24
1185e: 80 81 ld r24, Z
11860: 8f 93 push r24
11862: 83 e4 ldi r24, 0x43 ; 67
11864: 93 e1 ldi r25, 0x13 ; 19
11866: 9f 93 push r25
11868: 8f 93 push r24
1186a: df 93 push r29
1186c: cf 93 push r28
1186e: e0 91 78 06 lds r30, 0x0678
11872: f0 91 79 06 lds r31, 0x0679
11876: 09 95 icall
LCD_printfxy(0,3,"Discharge: %5imAh", Capacity.UsedCapacity);
11878: 8c e3 ldi r24, 0x3C ; 60
1187a: 80 93 a4 04 sts 0x04A4, r24
1187e: e9 e1 ldi r30, 0x19 ; 25
11880: f5 e0 ldi r31, 0x05 ; 5
11882: 81 81 ldd r24, Z+1 ; 0x01
11884: 8f 93 push r24
11886: 80 81 ld r24, Z
11888: 8f 93 push r24
1188a: 81 e3 ldi r24, 0x31 ; 49
1188c: 93 e1 ldi r25, 0x13 ; 19
1188e: 9f 93 push r25
11890: 8f 93 push r24
11892: df 93 push r29
11894: cf 93 push r28
11896: e0 91 78 06 lds r30, 0x0678
1189a: f0 91 79 06 lds r31, 0x0679
1189e: 09 95 icall
break;
118a0: 2d b7 in r18, 0x3d ; 61
118a2: 3e b7 in r19, 0x3e ; 62
118a4: 24 5e subi r18, 0xE4 ; 228
118a6: 3f 4f sbci r19, 0xFF ; 255
118a8: 0f b6 in r0, 0x3f ; 63
118aa: f8 94 cli
118ac: 3e bf out 0x3e, r19 ; 62
118ae: 0f be out 0x3f, r0 ; 63
118b0: 2d bf out 0x3d, r18 ; 61
118b2: bf c4 rjmp .+2430 ; 0x12232 <Menu+0x13e4>
case 8:
LCD_printfxy(0,0,"Receiver");
118b4: 10 92 a4 04 sts 0x04A4, r1
118b8: 88 e2 ldi r24, 0x28 ; 40
118ba: 93 e1 ldi r25, 0x13 ; 19
118bc: 9f 93 push r25
118be: 8f 93 push r24
118c0: c0 e1 ldi r28, 0x10 ; 16
118c2: d7 e8 ldi r29, 0x87 ; 135
118c4: df 93 push r29
118c6: cf 93 push r28
118c8: e0 91 78 06 lds r30, 0x0678
118cc: f0 91 79 06 lds r31, 0x0679
118d0: 09 95 icall
LCD_printfxy(0,2,"RC-Quality: %4i", SenderOkay);
118d2: 88 e2 ldi r24, 0x28 ; 40
118d4: 80 93 a4 04 sts 0x04A4, r24
118d8: 80 91 04 04 lds r24, 0x0404
118dc: 1f 92 push r1
118de: 8f 93 push r24
118e0: 88 e1 ldi r24, 0x18 ; 24
118e2: 93 e1 ldi r25, 0x13 ; 19
118e4: 9f 93 push r25
118e6: 8f 93 push r24
118e8: df 93 push r29
118ea: cf 93 push r28
118ec: e0 91 78 06 lds r30, 0x0678
118f0: f0 91 79 06 lds r31, 0x0679
118f4: 09 95 icall
LCD_printfxy(0,3,"RC-Channels:%4i", Channels-1);
118f6: 8c e3 ldi r24, 0x3C ; 60
118f8: 80 93 a4 04 sts 0x04A4, r24
118fc: 80 91 30 08 lds r24, 0x0830
11900: 90 e0 ldi r25, 0x00 ; 0
11902: 01 97 sbiw r24, 0x01 ; 1
11904: 9f 93 push r25
11906: 8f 93 push r24
11908: 88 e0 ldi r24, 0x08 ; 8
1190a: 93 e1 ldi r25, 0x13 ; 19
1190c: 9f 93 push r25
1190e: 8f 93 push r24
11910: df 93 push r29
11912: cf 93 push r28
11914: e0 91 78 06 lds r30, 0x0678
11918: f0 91 79 06 lds r31, 0x0679
1191c: 09 95 icall
break;
1191e: 8d b7 in r24, 0x3d ; 61
11920: 9e b7 in r25, 0x3e ; 62
11922: 40 96 adiw r24, 0x10 ; 16
11924: 0f b6 in r0, 0x3f ; 63
11926: f8 94 cli
11928: 9e bf out 0x3e, r25 ; 62
1192a: 0f be out 0x3f, r0 ; 63
1192c: 8d bf out 0x3d, r24 ; 61
1192e: 81 c4 rjmp .+2306 ; 0x12232 <Menu+0x13e4>
case 9:
LCD_printfxy(0,0,"Undervoltages " );
11930: 10 92 a4 04 sts 0x04A4, r1
11934: 88 ef ldi r24, 0xF8 ; 248
11936: 92 e1 ldi r25, 0x12 ; 18
11938: 9f 93 push r25
1193a: 8f 93 push r24
1193c: c0 e1 ldi r28, 0x10 ; 16
1193e: d7 e8 ldi r29, 0x87 ; 135
11940: df 93 push r29
11942: cf 93 push r28
11944: e0 91 78 06 lds r30, 0x0678
11948: f0 91 79 06 lds r31, 0x0679
1194c: 09 95 icall
LCD_printfxy(0,1,"Warn: %2d.%dV",BattLowVoltageWarning/10,BattLowVoltageWarning%10);
1194e: 84 e1 ldi r24, 0x14 ; 20
11950: 80 93 a4 04 sts 0x04A4, r24
11954: 90 91 53 01 lds r25, 0x0153
11958: 1d ec ldi r17, 0xCD ; 205
1195a: 91 9f mul r25, r17
1195c: 81 2d mov r24, r1
1195e: 11 24 eor r1, r1
11960: 86 95 lsr r24
11962: 86 95 lsr r24
11964: 86 95 lsr r24
11966: 28 2f mov r18, r24
11968: 22 0f add r18, r18
1196a: 32 2f mov r19, r18
1196c: 33 0f add r19, r19
1196e: 33 0f add r19, r19
11970: 23 0f add r18, r19
11972: 92 1b sub r25, r18
11974: 1f 92 push r1
11976: 9f 93 push r25
11978: 1f 92 push r1
1197a: 8f 93 push r24
1197c: 8a ee ldi r24, 0xEA ; 234
1197e: 92 e1 ldi r25, 0x12 ; 18
11980: 9f 93 push r25
11982: 8f 93 push r24
11984: df 93 push r29
11986: cf 93 push r28
11988: e0 91 78 06 lds r30, 0x0678
1198c: f0 91 79 06 lds r31, 0x0679
11990: 09 95 icall
LCD_printfxy(0,2,"Home: %2d.%dV",BattComingHomeVoltage/10,BattComingHomeVoltage%10);
11992: 88 e2 ldi r24, 0x28 ; 40
11994: 80 93 a4 04 sts 0x04A4, r24
11998: 90 91 64 04 lds r25, 0x0464
1199c: 91 9f mul r25, r17
1199e: 81 2d mov r24, r1
119a0: 11 24 eor r1, r1
119a2: 86 95 lsr r24
119a4: 86 95 lsr r24
119a6: 86 95 lsr r24
119a8: 28 2f mov r18, r24
119aa: 22 0f add r18, r18
119ac: 32 2f mov r19, r18
119ae: 33 0f add r19, r19
119b0: 33 0f add r19, r19
119b2: 23 0f add r18, r19
119b4: 92 1b sub r25, r18
119b6: 1f 92 push r1
119b8: 9f 93 push r25
119ba: 1f 92 push r1
119bc: 8f 93 push r24
119be: 8c ed ldi r24, 0xDC ; 220
119c0: 92 e1 ldi r25, 0x12 ; 18
119c2: 9f 93 push r25
119c4: 8f 93 push r24
119c6: df 93 push r29
119c8: cf 93 push r28
119ca: e0 91 78 06 lds r30, 0x0678
119ce: f0 91 79 06 lds r31, 0x0679
119d2: 09 95 icall
LCD_printfxy(0,3,"Land: %2d.%dV",BattAutoLandingVoltage/10,BattAutoLandingVoltage%10);
119d4: 8c e3 ldi r24, 0x3C ; 60
119d6: 80 93 a4 04 sts 0x04A4, r24
119da: 80 91 65 04 lds r24, 0x0465
119de: 81 9f mul r24, r17
119e0: 11 2d mov r17, r1
119e2: 11 24 eor r1, r1
119e4: 16 95 lsr r17
119e6: 16 95 lsr r17
119e8: 16 95 lsr r17
119ea: 91 2f mov r25, r17
119ec: 99 0f add r25, r25
119ee: 29 2f mov r18, r25
119f0: 22 0f add r18, r18
119f2: 22 0f add r18, r18
119f4: 92 0f add r25, r18
119f6: 89 1b sub r24, r25
119f8: 1f 92 push r1
119fa: 8f 93 push r24
119fc: 1f 92 push r1
119fe: 1f 93 push r17
11a00: 8e ec ldi r24, 0xCE ; 206
11a02: 92 e1 ldi r25, 0x12 ; 18
11a04: 9f 93 push r25
11a06: 8f 93 push r24
11a08: df 93 push r29
11a0a: cf 93 push r28
11a0c: e0 91 78 06 lds r30, 0x0678
11a10: f0 91 79 06 lds r31, 0x0679
11a14: 09 95 icall
break;
11a16: 2d b7 in r18, 0x3d ; 61
11a18: 3e b7 in r19, 0x3e ; 62
11a1a: 24 5e subi r18, 0xE4 ; 228
11a1c: 3f 4f sbci r19, 0xFF ; 255
11a1e: 0f b6 in r0, 0x3f ; 63
11a20: f8 94 cli
11a22: 3e bf out 0x3e, r19 ; 62
11a24: 0f be out 0x3f, r0 ; 63
11a26: 2d bf out 0x3d, r18 ; 61
11a28: 04 c4 rjmp .+2056 ; 0x12232 <Menu+0x13e4>
11a2a: c5 e0 ldi r28, 0x05 ; 5
11a2c: d4 e0 ldi r29, 0x04 ; 4
if((RemoteKeys & KEY1) && (RemoteKeys & KEY2)) MenuePunkt = 0;
LcdClear();
if(MenuePunkt < 10) {LCD_printfxy(17,0,"[%i]",MenuePunkt);}
else {LCD_printfxy(16,0,"[%i]",MenuePunkt);};
switch(MenuePunkt)
11a2e: 10 e0 ldi r17, 0x00 ; 0
LCD_printfxy(0,1,"Warn: %2d.%dV",BattLowVoltageWarning/10,BattLowVoltageWarning%10);
LCD_printfxy(0,2,"Home: %2d.%dV",BattComingHomeVoltage/10,BattComingHomeVoltage%10);
LCD_printfxy(0,3,"Land: %2d.%dV",BattAutoLandingVoltage/10,BattAutoLandingVoltage%10);
break;
case 10:
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+1,Poti[i]);
11a30: 0f 2e mov r0, r31
11a32: f1 ec ldi r31, 0xC1 ; 193
11a34: ef 2e mov r14, r31
11a36: f2 e1 ldi r31, 0x12 ; 18
11a38: ff 2e mov r15, r31
11a3a: f0 2d mov r31, r0
11a3c: 0f 2e mov r0, r31
11a3e: f0 e1 ldi r31, 0x10 ; 16
11a40: cf 2e mov r12, r31
11a42: f7 e8 ldi r31, 0x87 ; 135
11a44: df 2e mov r13, r31
11a46: f0 2d mov r31, r0
11a48: 10 93 a4 04 sts 0x04A4, r17
11a4c: 89 91 ld r24, Y+
11a4e: 1f 92 push r1
11a50: 8f 93 push r24
11a52: ce 01 movw r24, r28
11a54: 85 50 subi r24, 0x05 ; 5
11a56: 94 40 sbci r25, 0x04 ; 4
11a58: 9f 93 push r25
11a5a: 8f 93 push r24
11a5c: ff 92 push r15
11a5e: ef 92 push r14
11a60: df 92 push r13
11a62: cf 92 push r12
11a64: e0 91 78 06 lds r30, 0x0678
11a68: f0 91 79 06 lds r31, 0x0679
11a6c: 09 95 icall
11a6e: 1c 5e subi r17, 0xEC ; 236
11a70: 8d b7 in r24, 0x3d ; 61
11a72: 9e b7 in r25, 0x3e ; 62
11a74: 08 96 adiw r24, 0x08 ; 8
11a76: 0f b6 in r0, 0x3f ; 63
11a78: f8 94 cli
11a7a: 9e bf out 0x3e, r25 ; 62
11a7c: 0f be out 0x3f, r0 ; 63
11a7e: 8d bf out 0x3d, r24 ; 61
11a80: 10 35 cpi r17, 0x50 ; 80
11a82: 11 f7 brne .-60 ; 0x11a48 <Menu+0xbfa>
11a84: d6 c3 rjmp .+1964 ; 0x12232 <Menu+0x13e4>
11a86: c9 e0 ldi r28, 0x09 ; 9
11a88: d4 e0 ldi r29, 0x04 ; 4
if((RemoteKeys & KEY1) && (RemoteKeys & KEY2)) MenuePunkt = 0;
LcdClear();
if(MenuePunkt < 10) {LCD_printfxy(17,0,"[%i]",MenuePunkt);}
else {LCD_printfxy(16,0,"[%i]",MenuePunkt);};
switch(MenuePunkt)
11a8a: 10 e0 ldi r17, 0x00 ; 0
break;
case 10:
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+1,Poti[i]);
break;
case 11:
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+5,Poti[i+4]);
11a8c: 0f 2e mov r0, r31
11a8e: f4 eb ldi r31, 0xB4 ; 180
11a90: ef 2e mov r14, r31
11a92: f2 e1 ldi r31, 0x12 ; 18
11a94: ff 2e mov r15, r31
11a96: f0 2d mov r31, r0
11a98: 0f 2e mov r0, r31
11a9a: f0 e1 ldi r31, 0x10 ; 16
11a9c: cf 2e mov r12, r31
11a9e: f7 e8 ldi r31, 0x87 ; 135
11aa0: df 2e mov r13, r31
11aa2: f0 2d mov r31, r0
11aa4: 10 93 a4 04 sts 0x04A4, r17
11aa8: 89 91 ld r24, Y+
11aaa: 1f 92 push r1
11aac: 8f 93 push r24
11aae: ce 01 movw r24, r28
11ab0: 85 50 subi r24, 0x05 ; 5
11ab2: 94 40 sbci r25, 0x04 ; 4
11ab4: 9f 93 push r25
11ab6: 8f 93 push r24
11ab8: ff 92 push r15
11aba: ef 92 push r14
11abc: df 92 push r13
11abe: cf 92 push r12
11ac0: e0 91 78 06 lds r30, 0x0678
11ac4: f0 91 79 06 lds r31, 0x0679
11ac8: 09 95 icall
11aca: 1c 5e subi r17, 0xEC ; 236
11acc: ed b7 in r30, 0x3d ; 61
11ace: fe b7 in r31, 0x3e ; 62
11ad0: 38 96 adiw r30, 0x08 ; 8
11ad2: 0f b6 in r0, 0x3f ; 63
11ad4: f8 94 cli
11ad6: fe bf out 0x3e, r31 ; 62
11ad8: 0f be out 0x3f, r0 ; 63
11ada: ed bf out 0x3d, r30 ; 61
11adc: 10 35 cpi r17, 0x50 ; 80
11ade: 11 f7 brne .-60 ; 0x11aa4 <Menu+0xc56>
11ae0: a8 c3 rjmp .+1872 ; 0x12232 <Menu+0x13e4>
break;
case 12:
LCD_printfxy(0,0,"Flight-Time " );
11ae2: 10 92 a4 04 sts 0x04A4, r1
11ae6: 86 ea ldi r24, 0xA6 ; 166
11ae8: 92 e1 ldi r25, 0x12 ; 18
11aea: 9f 93 push r25
11aec: 8f 93 push r24
11aee: c0 e1 ldi r28, 0x10 ; 16
11af0: d7 e8 ldi r29, 0x87 ; 135
11af2: df 93 push r29
11af4: cf 93 push r28
11af6: e0 91 78 06 lds r30, 0x0678
11afa: f0 91 79 06 lds r31, 0x0679
11afe: 09 95 icall
LCD_printfxy(0,1,"Total:%5umin",FlugMinutenGesamt);
11b00: 84 e1 ldi r24, 0x14 ; 20
11b02: 80 93 a4 04 sts 0x04A4, r24
11b06: 80 91 61 04 lds r24, 0x0461
11b0a: 8f 93 push r24
11b0c: 80 91 60 04 lds r24, 0x0460
11b10: 8f 93 push r24
11b12: 89 e9 ldi r24, 0x99 ; 153
11b14: 92 e1 ldi r25, 0x12 ; 18
11b16: 9f 93 push r25
11b18: 8f 93 push r24
11b1a: df 93 push r29
11b1c: cf 93 push r28
11b1e: e0 91 78 06 lds r30, 0x0678
11b22: f0 91 79 06 lds r31, 0x0679
11b26: 09 95 icall
LCD_printfxy(0,2,"Act: %5umin",FlugMinuten);
11b28: 88 e2 ldi r24, 0x28 ; 40
11b2a: 80 93 a4 04 sts 0x04A4, r24
11b2e: 80 91 63 04 lds r24, 0x0463
11b32: 8f 93 push r24
11b34: 80 91 62 04 lds r24, 0x0462
11b38: 8f 93 push r24
11b3a: 8c e8 ldi r24, 0x8C ; 140
11b3c: 92 e1 ldi r25, 0x12 ; 18
11b3e: 9f 93 push r25
11b40: 8f 93 push r24
11b42: df 93 push r29
11b44: cf 93 push r28
11b46: e0 91 78 06 lds r30, 0x0678
11b4a: f0 91 79 06 lds r31, 0x0679
11b4e: 09 95 icall
LCD_printfxy(13,3,"(reset)");
11b50: 89 e4 ldi r24, 0x49 ; 73
11b52: 80 93 a4 04 sts 0x04A4, r24
11b56: 84 e8 ldi r24, 0x84 ; 132
11b58: 92 e1 ldi r25, 0x12 ; 18
11b5a: 9f 93 push r25
11b5c: 8f 93 push r24
11b5e: df 93 push r29
11b60: cf 93 push r28
11b62: e0 91 78 06 lds r30, 0x0678
11b66: f0 91 79 06 lds r31, 0x0679
11b6a: 09 95 icall
if(RemoteKeys & KEY4)
11b6c: 80 91 a2 04 lds r24, 0x04A2
11b70: ed b7 in r30, 0x3d ; 61
11b72: fe b7 in r31, 0x3e ; 62
11b74: 74 96 adiw r30, 0x14 ; 20
11b76: 0f b6 in r0, 0x3f ; 63
11b78: f8 94 cli
11b7a: fe bf out 0x3e, r31 ; 62
11b7c: 0f be out 0x3f, r0 ; 63
11b7e: ed bf out 0x3d, r30 ; 61
11b80: 83 ff sbrs r24, 3
11b82: 57 c3 rjmp .+1710 ; 0x12232 <Menu+0x13e4>
{
FlugMinuten = 0;
11b84: 10 92 63 04 sts 0x0463, r1
11b88: 10 92 62 04 sts 0x0462, r1
SetParamWord(PID_FLIGHT_MINUTES, FlugMinuten);
11b8c: 60 e0 ldi r22, 0x00 ; 0
11b8e: 70 e0 ldi r23, 0x00 ; 0
11b90: 8e e0 ldi r24, 0x0E ; 14
11b92: 90 e0 ldi r25, 0x00 ; 0
11b94: 0e 94 4b 25 call 0x4a96 ; 0x4a96 <SetParamWord>
11b98: 4c c3 rjmp .+1688 ; 0x12232 <Menu+0x13e4>
}
break;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
case 13:
LCD_printfxy(0,0,"Compass");
11b9a: 10 92 a4 04 sts 0x04A4, r1
11b9e: 8c e7 ldi r24, 0x7C ; 124
11ba0: 92 e1 ldi r25, 0x12 ; 18
11ba2: 9f 93 push r25
11ba4: 8f 93 push r24
11ba6: c0 e1 ldi r28, 0x10 ; 16
11ba8: d7 e8 ldi r29, 0x87 ; 135
11baa: df 93 push r29
11bac: cf 93 push r28
11bae: e0 91 78 06 lds r30, 0x0678
11bb2: f0 91 79 06 lds r31, 0x0679
11bb6: 09 95 icall
LCD_printfxy(0,1,"Magnet: %5i",KompassValue);
11bb8: 84 e1 ldi r24, 0x14 ; 20
11bba: 80 93 a4 04 sts 0x04A4, r24
11bbe: 80 91 4f 01 lds r24, 0x014F
11bc2: 8f 93 push r24
11bc4: 80 91 4e 01 lds r24, 0x014E
11bc8: 8f 93 push r24
11bca: 8e e6 ldi r24, 0x6E ; 110
11bcc: 92 e1 ldi r25, 0x12 ; 18
11bce: 9f 93 push r25
11bd0: 8f 93 push r24
11bd2: df 93 push r29
11bd4: cf 93 push r28
11bd6: e0 91 78 06 lds r30, 0x0678
11bda: f0 91 79 06 lds r31, 0x0679
11bde: 09 95 icall
LCD_printfxy(0,2,"Gyro: %5i",ErsatzKompassInGrad);
11be0: 88 e2 ldi r24, 0x28 ; 40
11be2: 80 93 a4 04 sts 0x04A4, r24
11be6: 80 91 22 06 lds r24, 0x0622
11bea: 8f 93 push r24
11bec: 80 91 21 06 lds r24, 0x0621
11bf0: 8f 93 push r24
11bf2: 80 e6 ldi r24, 0x60 ; 96
11bf4: 92 e1 ldi r25, 0x12 ; 18
11bf6: 9f 93 push r25
11bf8: 8f 93 push r24
11bfa: df 93 push r29
11bfc: cf 93 push r28
11bfe: e0 91 78 06 lds r30, 0x0678
11c02: f0 91 79 06 lds r31, 0x0679
11c06: 09 95 icall
LCD_printfxy(0,3,"True: %5i",CompassCorrected);
11c08: 8c e3 ldi r24, 0x3C ; 60
11c0a: 80 93 a4 04 sts 0x04A4, r24
11c0e: 80 91 66 06 lds r24, 0x0666
11c12: 8f 93 push r24
11c14: 80 91 65 06 lds r24, 0x0665
11c18: 8f 93 push r24
11c1a: 82 e5 ldi r24, 0x52 ; 82
11c1c: 92 e1 ldi r25, 0x12 ; 18
11c1e: 9f 93 push r25
11c20: 8f 93 push r24
11c22: df 93 push r29
11c24: cf 93 push r28
11c26: e0 91 78 06 lds r30, 0x0678
11c2a: f0 91 79 06 lds r31, 0x0679
11c2e: 09 95 icall
break;
11c30: 8d b7 in r24, 0x3d ; 61
11c32: 9e b7 in r25, 0x3e ; 62
11c34: 46 96 adiw r24, 0x16 ; 22
11c36: 0f b6 in r0, 0x3f ; 63
11c38: f8 94 cli
11c3a: 9e bf out 0x3e, r25 ; 62
11c3c: 0f be out 0x3f, r0 ; 63
11c3e: 8d bf out 0x3d, r24 ; 61
11c40: f8 c2 rjmp .+1520 ; 0x12232 <Menu+0x13e4>
case 14:
LCD_printfxy(0,0,"Servo " );
11c42: 10 92 a4 04 sts 0x04A4, r1
11c46: 8a e4 ldi r24, 0x4A ; 74
11c48: 92 e1 ldi r25, 0x12 ; 18
11c4a: 9f 93 push r25
11c4c: 8f 93 push r24
11c4e: c0 e1 ldi r28, 0x10 ; 16
11c50: d7 e8 ldi r29, 0x87 ; 135
11c52: df 93 push r29
11c54: cf 93 push r28
11c56: e0 91 78 06 lds r30, 0x0678
11c5a: f0 91 79 06 lds r31, 0x0679
11c5e: 09 95 icall
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
11c60: 84 e1 ldi r24, 0x14 ; 20
11c62: 80 93 a4 04 sts 0x04A4, r24
11c66: 80 91 2f 01 lds r24, 0x012F
11c6a: 1f 92 push r1
11c6c: 8f 93 push r24
11c6e: 8c e3 ldi r24, 0x3C ; 60
11c70: 92 e1 ldi r25, 0x12 ; 18
11c72: 9f 93 push r25
11c74: 8f 93 push r24
11c76: df 93 push r29
11c78: cf 93 push r28
11c7a: e0 91 78 06 lds r30, 0x0678
11c7e: f0 91 79 06 lds r31, 0x0679
11c82: 09 95 icall
LCD_printfxy(0,2,"Position: %3i",ServoNickValue/4);
11c84: 88 e2 ldi r24, 0x28 ; 40
11c86: 80 93 a4 04 sts 0x04A4, r24
11c8a: 80 91 c6 04 lds r24, 0x04C6
11c8e: 90 91 c7 04 lds r25, 0x04C7
11c92: 99 23 and r25, r25
11c94: 0c f4 brge .+2 ; 0x11c98 <Menu+0xe4a>
11c96: 03 96 adiw r24, 0x03 ; 3
11c98: 95 95 asr r25
11c9a: 87 95 ror r24
11c9c: 95 95 asr r25
11c9e: 87 95 ror r24
11ca0: 9f 93 push r25
11ca2: 8f 93 push r24
11ca4: 8e e2 ldi r24, 0x2E ; 46
11ca6: 92 e1 ldi r25, 0x12 ; 18
11ca8: 9f 93 push r25
11caa: 8f 93 push r24
11cac: c0 e1 ldi r28, 0x10 ; 16
11cae: d7 e8 ldi r29, 0x87 ; 135
11cb0: df 93 push r29
11cb2: cf 93 push r28
11cb4: e0 91 78 06 lds r30, 0x0678
11cb8: f0 91 79 06 lds r31, 0x0679
11cbc: 09 95 icall
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
11cbe: 8c e3 ldi r24, 0x3C ; 60
11cc0: 80 93 a4 04 sts 0x04A4, r24
11cc4: 80 91 6e 05 lds r24, 0x056E
11cc8: 1f 92 push r1
11cca: 8f 93 push r24
11ccc: 80 91 6d 05 lds r24, 0x056D
11cd0: 1f 92 push r1
11cd2: 8f 93 push r24
11cd4: 80 e2 ldi r24, 0x20 ; 32
11cd6: 92 e1 ldi r25, 0x12 ; 18
11cd8: 9f 93 push r25
11cda: 8f 93 push r24
11cdc: df 93 push r29
11cde: cf 93 push r28
11ce0: e0 91 78 06 lds r30, 0x0678
11ce4: f0 91 79 06 lds r31, 0x0679
11ce8: 09 95 icall
break;
11cea: 2d b7 in r18, 0x3d ; 61
11cec: 3e b7 in r19, 0x3e ; 62
11cee: 28 5e subi r18, 0xE8 ; 232
11cf0: 3f 4f sbci r19, 0xFF ; 255
11cf2: 0f b6 in r0, 0x3f ; 63
11cf4: f8 94 cli
11cf6: 3e bf out 0x3e, r19 ; 62
11cf8: 0f be out 0x3f, r0 ; 63
11cfa: 2d bf out 0x3d, r18 ; 61
11cfc: 9a c2 rjmp .+1332 ; 0x12232 <Menu+0x13e4>
case 15:
LCD_printfxy(0,0,"BL-Ctrl Errors " );
11cfe: 10 92 a4 04 sts 0x04A4, r1
11d02: 80 e1 ldi r24, 0x10 ; 16
11d04: 92 e1 ldi r25, 0x12 ; 18
11d06: 9f 93 push r25
11d08: 8f 93 push r24
11d0a: 80 e1 ldi r24, 0x10 ; 16
11d0c: 97 e8 ldi r25, 0x87 ; 135
11d0e: 9f 93 push r25
11d10: 8f 93 push r24
11d12: e0 91 78 06 lds r30, 0x0678
11d16: f0 91 79 06 lds r31, 0x0679
11d1a: 09 95 icall
11d1c: c7 ec ldi r28, 0xC7 ; 199
11d1e: d9 e0 ldi r29, 0x09 ; 9
11d20: 0f 90 pop r0
11d22: 0f 90 pop r0
11d24: 0f 90 pop r0
11d26: 0f 90 pop r0
11d28: 14 e1 ldi r17, 0x14 ; 20
for(i=0;i<3;i++)
{
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+1].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+2].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+3].State & MOTOR_STATE_ERROR_MASK);
11d2a: 0f 2e mov r0, r31
11d2c: ff ef ldi r31, 0xFF ; 255
11d2e: ef 2e mov r14, r31
11d30: f1 e1 ldi r31, 0x11 ; 17
11d32: ff 2e mov r15, r31
11d34: f0 2d mov r31, r0
11d36: 0f 2e mov r0, r31
11d38: f0 e1 ldi r31, 0x10 ; 16
11d3a: cf 2e mov r12, r31
11d3c: f7 e8 ldi r31, 0x87 ; 135
11d3e: df 2e mov r13, r31
11d40: f0 2d mov r31, r0
11d42: 10 93 a4 04 sts 0x04A4, r17
11d46: 88 81 ld r24, Y
11d48: 8f 77 andi r24, 0x7F ; 127
11d4a: 1f 92 push r1
11d4c: 8f 93 push r24
11d4e: fe 01 movw r30, r28
11d50: 3f 97 sbiw r30, 0x0f ; 15
11d52: 80 81 ld r24, Z
11d54: 8f 77 andi r24, 0x7F ; 127
11d56: 1f 92 push r1
11d58: 8f 93 push r24
11d5a: 3f 97 sbiw r30, 0x0f ; 15
11d5c: 80 81 ld r24, Z
11d5e: 8f 77 andi r24, 0x7F ; 127
11d60: 1f 92 push r1
11d62: 8f 93 push r24
11d64: 3f 97 sbiw r30, 0x0f ; 15
11d66: 80 81 ld r24, Z
11d68: 8f 77 andi r24, 0x7F ; 127
11d6a: 1f 92 push r1
11d6c: 8f 93 push r24
11d6e: ff 92 push r15
11d70: ef 92 push r14
11d72: df 92 push r13
11d74: cf 92 push r12
11d76: e0 91 78 06 lds r30, 0x0678
11d7a: f0 91 79 06 lds r31, 0x0679
11d7e: 09 95 icall
11d80: 1c 5e subi r17, 0xEC ; 236
11d82: ec 96 adiw r28, 0x3c ; 60
LCD_printfxy(0,2,"Position: %3i",ServoNickValue/4);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
case 15:
LCD_printfxy(0,0,"BL-Ctrl Errors " );
for(i=0;i<3;i++)
11d84: 8d b7 in r24, 0x3d ; 61
11d86: 9e b7 in r25, 0x3e ; 62
11d88: 0c 96 adiw r24, 0x0c ; 12
11d8a: 0f b6 in r0, 0x3f ; 63
11d8c: f8 94 cli
11d8e: 9e bf out 0x3e, r25 ; 62
11d90: 0f be out 0x3f, r0 ; 63
11d92: 8d bf out 0x3d, r24 ; 61
11d94: 10 35 cpi r17, 0x50 ; 80
11d96: a9 f6 brne .-86 ; 0x11d42 <Menu+0xef4>
11d98: 4c c2 rjmp .+1176 ; 0x12232 <Menu+0x13e4>
{
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+1].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+2].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+3].State & MOTOR_STATE_ERROR_MASK);
}
break;
case 16:
LCD_printfxy(0,0,"BL Temperature" );
11d9a: 10 92 a4 04 sts 0x04A4, r1
11d9e: 80 ef ldi r24, 0xF0 ; 240
11da0: 91 e1 ldi r25, 0x11 ; 17
11da2: 9f 93 push r25
11da4: 8f 93 push r24
11da6: 80 e1 ldi r24, 0x10 ; 16
11da8: 97 e8 ldi r25, 0x87 ; 135
11daa: 9f 93 push r25
11dac: 8f 93 push r24
11dae: e0 91 78 06 lds r30, 0x0678
11db2: f0 91 79 06 lds r31, 0x0679
11db6: 09 95 icall
11db8: cb ec ldi r28, 0xCB ; 203
11dba: d9 e0 ldi r29, 0x09 ; 9
11dbc: 0f 90 pop r0
11dbe: 0f 90 pop r0
11dc0: 0f 90 pop r0
11dc2: 0f 90 pop r0
11dc4: 14 e1 ldi r17, 0x14 ; 20
for(i=0;i<3;i++)
{
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].Temperature,Motor[i*4+1].Temperature,Motor[i*4+2].Temperature,Motor[i*4+3].Temperature);
11dc6: 0f 2e mov r0, r31
11dc8: ff ed ldi r31, 0xDF ; 223
11dca: ef 2e mov r14, r31
11dcc: f1 e1 ldi r31, 0x11 ; 17
11dce: ff 2e mov r15, r31
11dd0: f0 2d mov r31, r0
11dd2: 0f 2e mov r0, r31
11dd4: f0 e1 ldi r31, 0x10 ; 16
11dd6: cf 2e mov r12, r31
11dd8: f7 e8 ldi r31, 0x87 ; 135
11dda: df 2e mov r13, r31
11ddc: f0 2d mov r31, r0
11dde: 10 93 a4 04 sts 0x04A4, r17
11de2: 88 81 ld r24, Y
11de4: 1f 92 push r1
11de6: 8f 93 push r24
11de8: fe 01 movw r30, r28
11dea: 3f 97 sbiw r30, 0x0f ; 15
11dec: 80 81 ld r24, Z
11dee: 1f 92 push r1
11df0: 8f 93 push r24
11df2: 3f 97 sbiw r30, 0x0f ; 15
11df4: 80 81 ld r24, Z
11df6: 1f 92 push r1
11df8: 8f 93 push r24
11dfa: 3f 97 sbiw r30, 0x0f ; 15
11dfc: 80 81 ld r24, Z
11dfe: 1f 92 push r1
11e00: 8f 93 push r24
11e02: ff 92 push r15
11e04: ef 92 push r14
11e06: df 92 push r13
11e08: cf 92 push r12
11e0a: e0 91 78 06 lds r30, 0x0678
11e0e: f0 91 79 06 lds r31, 0x0679
11e12: 09 95 icall
11e14: 1c 5e subi r17, 0xEC ; 236
11e16: ec 96 adiw r28, 0x3c ; 60
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+1].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+2].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+3].State & MOTOR_STATE_ERROR_MASK);
}
break;
case 16:
LCD_printfxy(0,0,"BL Temperature" );
for(i=0;i<3;i++)
11e18: ed b7 in r30, 0x3d ; 61
11e1a: fe b7 in r31, 0x3e ; 62
11e1c: 3c 96 adiw r30, 0x0c ; 12
11e1e: 0f b6 in r0, 0x3f ; 63
11e20: f8 94 cli
11e22: fe bf out 0x3e, r31 ; 62
11e24: 0f be out 0x3f, r0 ; 63
11e26: ed bf out 0x3d, r30 ; 61
11e28: 10 35 cpi r17, 0x50 ; 80
11e2a: c9 f6 brne .-78 ; 0x11dde <Menu+0xf90>
11e2c: 02 c2 rjmp .+1028 ; 0x12232 <Menu+0x13e4>
{
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].Temperature,Motor[i*4+1].Temperature,Motor[i*4+2].Temperature,Motor[i*4+3].Temperature);
}
break;
case 17:
LCD_printfxy(0,0,"BL Current" );
11e2e: 10 92 a4 04 sts 0x04A4, r1
11e32: 84 ed ldi r24, 0xD4 ; 212
11e34: 91 e1 ldi r25, 0x11 ; 17
11e36: 9f 93 push r25
11e38: 8f 93 push r24
11e3a: c0 e1 ldi r28, 0x10 ; 16
11e3c: d7 e8 ldi r29, 0x87 ; 135
11e3e: df 93 push r29
11e40: cf 93 push r28
11e42: e0 91 78 06 lds r30, 0x0678
11e46: f0 91 79 06 lds r31, 0x0679
11e4a: 09 95 icall
LCD_printfxy(11,3,"(in 0.1A)" );
11e4c: 87 e4 ldi r24, 0x47 ; 71
11e4e: 80 93 a4 04 sts 0x04A4, r24
11e52: 8a ec ldi r24, 0xCA ; 202
11e54: 91 e1 ldi r25, 0x11 ; 17
11e56: 9f 93 push r25
11e58: 8f 93 push r24
11e5a: df 93 push r29
11e5c: cf 93 push r28
11e5e: e0 91 78 06 lds r30, 0x0678
11e62: f0 91 79 06 lds r31, 0x0679
11e66: 09 95 icall
11e68: ed b7 in r30, 0x3d ; 61
11e6a: fe b7 in r31, 0x3e ; 62
11e6c: 38 96 adiw r30, 0x08 ; 8
11e6e: 0f b6 in r0, 0x3f ; 63
11e70: f8 94 cli
11e72: fe bf out 0x3e, r31 ; 62
11e74: 0f be out 0x3f, r0 ; 63
11e76: ed bf out 0x3d, r30 ; 61
11e78: c4 e0 ldi r28, 0x04 ; 4
11e7a: d0 e0 ldi r29, 0x00 ; 0
11e7c: 14 e1 ldi r17, 0x14 ; 20
for(i=0;i<3;i++)
{
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",BL3_Current(i*4),BL3_Current(i*4+1),BL3_Current(i*4+2),BL3_Current(i*4+3));
11e7e: 0f 2e mov r0, r31
11e80: f9 eb ldi r31, 0xB9 ; 185
11e82: ef 2e mov r14, r31
11e84: f1 e1 ldi r31, 0x11 ; 17
11e86: ff 2e mov r15, r31
11e88: f0 2d mov r31, r0
11e8a: 0f 2e mov r0, r31
11e8c: f0 e1 ldi r31, 0x10 ; 16
11e8e: 2f 2e mov r2, r31
11e90: f7 e8 ldi r31, 0x87 ; 135
11e92: 3f 2e mov r3, r31
11e94: f0 2d mov r31, r0
11e96: 10 93 a4 04 sts 0x04A4, r17
11e9a: c0 90 78 06 lds r12, 0x0678
11e9e: d0 90 79 06 lds r13, 0x0679
11ea2: 8c 2f mov r24, r28
11ea4: 81 50 subi r24, 0x01 ; 1
11ea6: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
11eaa: 68 2e mov r6, r24
11eac: 59 2e mov r5, r25
11eae: 8c 2f mov r24, r28
11eb0: 82 50 subi r24, 0x02 ; 2
11eb2: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
11eb6: 88 2e mov r8, r24
11eb8: 79 2e mov r7, r25
11eba: 8c 2f mov r24, r28
11ebc: 83 50 subi r24, 0x03 ; 3
11ebe: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
11ec2: a8 2e mov r10, r24
11ec4: 99 2e mov r9, r25
11ec6: 8c 2f mov r24, r28
11ec8: 84 50 subi r24, 0x04 ; 4
11eca: 0e 94 ce 21 call 0x439c ; 0x439c <BL3_Current>
11ece: 5f 92 push r5
11ed0: 6f 92 push r6
11ed2: 7f 92 push r7
11ed4: 8f 92 push r8
11ed6: 9f 92 push r9
11ed8: af 92 push r10
11eda: 9f 93 push r25
11edc: 8f 93 push r24
11ede: ff 92 push r15
11ee0: ef 92 push r14
11ee2: 3f 92 push r3
11ee4: 2f 92 push r2
11ee6: f6 01 movw r30, r12
11ee8: 09 95 icall
if(4 + i * 4 >= RequiredMotors) break;
11eea: 80 91 3d 05 lds r24, 0x053D
11eee: 90 e0 ldi r25, 0x00 ; 0
11ef0: 2d b7 in r18, 0x3d ; 61
11ef2: 3e b7 in r19, 0x3e ; 62
11ef4: 24 5f subi r18, 0xF4 ; 244
11ef6: 3f 4f sbci r19, 0xFF ; 255
11ef8: 0f b6 in r0, 0x3f ; 63
11efa: f8 94 cli
11efc: 3e bf out 0x3e, r19 ; 62
11efe: 0f be out 0x3f, r0 ; 63
11f00: 2d bf out 0x3d, r18 ; 61
11f02: c8 17 cp r28, r24
11f04: d9 07 cpc r29, r25
11f06: 0c f0 brlt .+2 ; 0x11f0a <Menu+0x10bc>
11f08: 94 c1 rjmp .+808 ; 0x12232 <Menu+0x13e4>
11f0a: 1c 5e subi r17, 0xEC ; 236
11f0c: 24 96 adiw r28, 0x04 ; 4
}
break;
case 17:
LCD_printfxy(0,0,"BL Current" );
LCD_printfxy(11,3,"(in 0.1A)" );
for(i=0;i<3;i++)
11f0e: 10 35 cpi r17, 0x50 ; 80
11f10: 11 f6 brne .-124 ; 0x11e96 <Menu+0x1048>
11f12: 8f c1 rjmp .+798 ; 0x12232 <Menu+0x13e4>
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",BL3_Current(i*4),BL3_Current(i*4+1),BL3_Current(i*4+2),BL3_Current(i*4+3));
if(4 + i * 4 >= RequiredMotors) break;
}
break;
case 18:
LCD_printfxy(0,0,"BL-Ctrl found " );
11f14: 10 92 a4 04 sts 0x04A4, r1
11f18: 8a ea ldi r24, 0xAA ; 170
11f1a: 91 e1 ldi r25, 0x11 ; 17
11f1c: 9f 93 push r25
11f1e: 8f 93 push r24
11f20: c0 e1 ldi r28, 0x10 ; 16
11f22: d7 e8 ldi r29, 0x87 ; 135
11f24: df 93 push r29
11f26: cf 93 push r28
11f28: e0 91 78 06 lds r30, 0x0678
11f2c: f0 91 79 06 lds r31, 0x0679
11f30: 09 95 icall
LCD_printfxy(0,1," %c %c %c %c ",'-' + 4 * (Motor[0].State>>7),'-' + 5 * (Motor[1].State>>7),'-' + 6 * (Motor[2].State>>7),'-' + 7 * (Motor[3].State>>7));
11f32: 84 e1 ldi r24, 0x14 ; 20
11f34: 80 93 a4 04 sts 0x04A4, r24
11f38: 20 91 c7 09 lds r18, 0x09C7
11f3c: 22 1f adc r18, r18
11f3e: 22 27 eor r18, r18
11f40: 22 1f adc r18, r18
11f42: 30 e0 ldi r19, 0x00 ; 0
11f44: c9 01 movw r24, r18
11f46: 88 0f add r24, r24
11f48: 99 1f adc r25, r25
11f4a: 88 0f add r24, r24
11f4c: 99 1f adc r25, r25
11f4e: 88 0f add r24, r24
11f50: 99 1f adc r25, r25
11f52: 82 1b sub r24, r18
11f54: 93 0b sbc r25, r19
11f56: 8d 96 adiw r24, 0x2d ; 45
11f58: 9f 93 push r25
11f5a: 8f 93 push r24
11f5c: 80 91 b8 09 lds r24, 0x09B8
11f60: 88 1f adc r24, r24
11f62: 88 27 eor r24, r24
11f64: 88 1f adc r24, r24
11f66: 90 e0 ldi r25, 0x00 ; 0
11f68: 9c 01 movw r18, r24
11f6a: 22 0f add r18, r18
11f6c: 33 1f adc r19, r19
11f6e: 82 0f add r24, r18
11f70: 93 1f adc r25, r19
11f72: 88 0f add r24, r24
11f74: 99 1f adc r25, r25
11f76: 8d 96 adiw r24, 0x2d ; 45
11f78: 9f 93 push r25
11f7a: 8f 93 push r24
11f7c: 80 91 a9 09 lds r24, 0x09A9
11f80: 88 1f adc r24, r24
11f82: 88 27 eor r24, r24
11f84: 88 1f adc r24, r24
11f86: 90 e0 ldi r25, 0x00 ; 0
11f88: 9c 01 movw r18, r24
11f8a: 22 0f add r18, r18
11f8c: 33 1f adc r19, r19
11f8e: 22 0f add r18, r18
11f90: 33 1f adc r19, r19
11f92: 82 0f add r24, r18
11f94: 93 1f adc r25, r19
11f96: 8d 96 adiw r24, 0x2d ; 45
11f98: 9f 93 push r25
11f9a: 8f 93 push r24
11f9c: 80 91 9a 09 lds r24, 0x099A
11fa0: 88 1f adc r24, r24
11fa2: 88 27 eor r24, r24
11fa4: 88 1f adc r24, r24
11fa6: 90 e0 ldi r25, 0x00 ; 0
11fa8: 88 0f add r24, r24
11faa: 99 1f adc r25, r25
11fac: 88 0f add r24, r24
11fae: 99 1f adc r25, r25
11fb0: 8d 96 adiw r24, 0x2d ; 45
11fb2: 9f 93 push r25
11fb4: 8f 93 push r24
11fb6: 86 e9 ldi r24, 0x96 ; 150
11fb8: 91 e1 ldi r25, 0x11 ; 17
11fba: 9f 93 push r25
11fbc: 8f 93 push r24
11fbe: df 93 push r29
11fc0: cf 93 push r28
11fc2: e0 91 78 06 lds r30, 0x0678
11fc6: f0 91 79 06 lds r31, 0x0679
11fca: 09 95 icall
LCD_printfxy(0,2," %c %c %c %c ",'-' + 8 * (Motor[4].State>>7),'-' + 9 * (Motor[5].State>>7),'-' + 10 * (Motor[6].State>>7),'-' + 11 * (Motor[7].State>>7));
11fcc: 88 e2 ldi r24, 0x28 ; 40
11fce: 80 93 a4 04 sts 0x04A4, r24
11fd2: 80 91 03 0a lds r24, 0x0A03
11fd6: 88 1f adc r24, r24
11fd8: 88 27 eor r24, r24
11fda: 88 1f adc r24, r24
11fdc: fb e0 ldi r31, 0x0B ; 11
11fde: 8f 9f mul r24, r31
11fe0: c0 01 movw r24, r0
11fe2: 11 24 eor r1, r1
11fe4: 8d 96 adiw r24, 0x2d ; 45
11fe6: 9f 93 push r25
11fe8: 8f 93 push r24
11fea: 20 91 f4 09 lds r18, 0x09F4
11fee: 22 1f adc r18, r18
11ff0: 22 27 eor r18, r18
11ff2: 22 1f adc r18, r18
11ff4: 30 e0 ldi r19, 0x00 ; 0
11ff6: c9 01 movw r24, r18
11ff8: 88 0f add r24, r24
11ffa: 99 1f adc r25, r25
11ffc: 22 0f add r18, r18
11ffe: 33 1f adc r19, r19
12000: 22 0f add r18, r18
12002: 33 1f adc r19, r19
12004: 22 0f add r18, r18
12006: 33 1f adc r19, r19
12008: 82 0f add r24, r18
1200a: 93 1f adc r25, r19
1200c: 8d 96 adiw r24, 0x2d ; 45
1200e: 9f 93 push r25
12010: 8f 93 push r24
12012: 80 91 e5 09 lds r24, 0x09E5
12016: 88 1f adc r24, r24
12018: 88 27 eor r24, r24
1201a: 88 1f adc r24, r24
1201c: 90 e0 ldi r25, 0x00 ; 0
1201e: 9c 01 movw r18, r24
12020: 22 0f add r18, r18
12022: 33 1f adc r19, r19
12024: 22 0f add r18, r18
12026: 33 1f adc r19, r19
12028: 22 0f add r18, r18
1202a: 33 1f adc r19, r19
1202c: 82 0f add r24, r18
1202e: 93 1f adc r25, r19
12030: 8d 96 adiw r24, 0x2d ; 45
12032: 9f 93 push r25
12034: 8f 93 push r24
12036: 80 91 d6 09 lds r24, 0x09D6
1203a: 88 1f adc r24, r24
1203c: 88 27 eor r24, r24
1203e: 88 1f adc r24, r24
12040: 90 e0 ldi r25, 0x00 ; 0
12042: 88 0f add r24, r24
12044: 99 1f adc r25, r25
12046: 88 0f add r24, r24
12048: 99 1f adc r25, r25
1204a: 88 0f add r24, r24
1204c: 99 1f adc r25, r25
1204e: 8d 96 adiw r24, 0x2d ; 45
12050: 9f 93 push r25
12052: 8f 93 push r24
12054: 82 e8 ldi r24, 0x82 ; 130
12056: 91 e1 ldi r25, 0x11 ; 17
12058: 9f 93 push r25
1205a: 8f 93 push r24
1205c: df 93 push r29
1205e: cf 93 push r28
12060: e0 91 78 06 lds r30, 0x0678
12064: f0 91 79 06 lds r31, 0x0679
12068: 09 95 icall
LCD_printfxy(0,3," %c - - - ",'-' + 12 * (Motor[8].State>>7));
1206a: 8c e3 ldi r24, 0x3C ; 60
1206c: 80 93 a4 04 sts 0x04A4, r24
12070: 80 91 12 0a lds r24, 0x0A12
12074: 88 1f adc r24, r24
12076: 88 27 eor r24, r24
12078: 88 1f adc r24, r24
1207a: 90 e0 ldi r25, 0x00 ; 0
1207c: 9c 01 movw r18, r24
1207e: 22 0f add r18, r18
12080: 33 1f adc r19, r19
12082: 82 0f add r24, r18
12084: 93 1f adc r25, r19
12086: 88 0f add r24, r24
12088: 99 1f adc r25, r25
1208a: 88 0f add r24, r24
1208c: 99 1f adc r25, r25
1208e: 8d 96 adiw r24, 0x2d ; 45
12090: 9f 93 push r25
12092: 8f 93 push r24
12094: 81 e7 ldi r24, 0x71 ; 113
12096: 91 e1 ldi r25, 0x11 ; 17
12098: 9f 93 push r25
1209a: 8f 93 push r24
1209c: df 93 push r29
1209e: cf 93 push r28
120a0: e0 91 78 06 lds r30, 0x0678
120a4: f0 91 79 06 lds r31, 0x0679
120a8: 09 95 icall
if(Motor[9].State>>7) LCD_printfxy(4,3,"10");
120aa: ed b7 in r30, 0x3d ; 61
120ac: fe b7 in r31, 0x3e ; 62
120ae: b2 96 adiw r30, 0x22 ; 34
120b0: 0f b6 in r0, 0x3f ; 63
120b2: f8 94 cli
120b4: fe bf out 0x3e, r31 ; 62
120b6: 0f be out 0x3f, r0 ; 63
120b8: ed bf out 0x3d, r30 ; 61
120ba: 80 91 21 0a lds r24, 0x0A21
120be: 88 23 and r24, r24
120c0: 9c f4 brge .+38 ; 0x120e8 <Menu+0x129a>
120c2: 80 e4 ldi r24, 0x40 ; 64
120c4: 80 93 a4 04 sts 0x04A4, r24
120c8: 8e e6 ldi r24, 0x6E ; 110
120ca: 91 e1 ldi r25, 0x11 ; 17
120cc: 9f 93 push r25
120ce: 8f 93 push r24
120d0: ce 01 movw r24, r28
120d2: 9f 93 push r25
120d4: cf 93 push r28
120d6: e0 91 78 06 lds r30, 0x0678
120da: f0 91 79 06 lds r31, 0x0679
120de: 09 95 icall
120e0: 0f 90 pop r0
120e2: 0f 90 pop r0
120e4: 0f 90 pop r0
120e6: 0f 90 pop r0
if(Motor[10].State>>7) LCD_printfxy(8,3,"11");
120e8: 80 91 30 0a lds r24, 0x0A30
120ec: 88 23 and r24, r24
120ee: a4 f4 brge .+40 ; 0x12118 <Menu+0x12ca>
120f0: 84 e4 ldi r24, 0x44 ; 68
120f2: 80 93 a4 04 sts 0x04A4, r24
120f6: 8b e6 ldi r24, 0x6B ; 107
120f8: 91 e1 ldi r25, 0x11 ; 17
120fa: 9f 93 push r25
120fc: 8f 93 push r24
120fe: 80 e1 ldi r24, 0x10 ; 16
12100: 97 e8 ldi r25, 0x87 ; 135
12102: 9f 93 push r25
12104: 8f 93 push r24
12106: e0 91 78 06 lds r30, 0x0678
1210a: f0 91 79 06 lds r31, 0x0679
1210e: 09 95 icall
12110: 0f 90 pop r0
12112: 0f 90 pop r0
12114: 0f 90 pop r0
12116: 0f 90 pop r0
if(Motor[11].State>>7) LCD_printfxy(12,3,"12");
12118: 80 91 3f 0a lds r24, 0x0A3F
1211c: 88 23 and r24, r24
1211e: 0c f0 brlt .+2 ; 0x12122 <Menu+0x12d4>
12120: 88 c0 rjmp .+272 ; 0x12232 <Menu+0x13e4>
12122: 88 e4 ldi r24, 0x48 ; 72
12124: 80 93 a4 04 sts 0x04A4, r24
12128: 88 e6 ldi r24, 0x68 ; 104
1212a: 91 e1 ldi r25, 0x11 ; 17
1212c: 9f 93 push r25
1212e: 8f 93 push r24
12130: 80 e1 ldi r24, 0x10 ; 16
12132: 97 e8 ldi r25, 0x87 ; 135
12134: 9f 93 push r25
12136: 8f 93 push r24
12138: e0 91 78 06 lds r30, 0x0678
1213c: f0 91 79 06 lds r31, 0x0679
12140: 09 95 icall
12142: 0f 90 pop r0
12144: 0f 90 pop r0
12146: 0f 90 pop r0
12148: 0f 90 pop r0
1214a: 73 c0 rjmp .+230 ; 0x12232 <Menu+0x13e4>
break;
case 19:
LCD_printfxy(0,0,"BL Versions" );
1214c: 10 92 a4 04 sts 0x04A4, r1
12150: 8c e5 ldi r24, 0x5C ; 92
12152: 91 e1 ldi r25, 0x11 ; 17
12154: 9f 93 push r25
12156: 8f 93 push r24
12158: 80 e1 ldi r24, 0x10 ; 16
1215a: 97 e8 ldi r25, 0x87 ; 135
1215c: 9f 93 push r25
1215e: 8f 93 push r24
12160: e0 91 78 06 lds r30, 0x0678
12164: f0 91 79 06 lds r31, 0x0679
12168: 09 95 icall
1216a: c1 ed ldi r28, 0xD1 ; 209
1216c: d9 e0 ldi r29, 0x09 ; 9
1216e: 0f 90 pop r0
12170: 0f 90 pop r0
12172: 0f 90 pop r0
12174: 0f 90 pop r0
12176: 04 e0 ldi r16, 0x04 ; 4
12178: 10 e0 ldi r17, 0x00 ; 0
1217a: 0f 2e mov r0, r31
1217c: f4 e1 ldi r31, 0x14 ; 20
1217e: bf 2e mov r11, r31
12180: f0 2d mov r31, r0
for(i=0;i<3;i++)
{
LCD_printfxy(0,i+1,"%1d.%02d %1d.%02d %1d.%02d %1d.%02d",Motor[i*4].VersionMajor,Motor[i*4].VersionMinor,Motor[i*4+1].VersionMajor,Motor[i*4+1].VersionMinor,Motor[i*4+2].VersionMajor,Motor[i*4+2].VersionMinor,Motor[i*4+3].VersionMajor,Motor[i*4+3].VersionMinor);
12182: 0f 2e mov r0, r31
12184: f8 e3 ldi r31, 0x38 ; 56
12186: cf 2e mov r12, r31
12188: f1 e1 ldi r31, 0x11 ; 17
1218a: df 2e mov r13, r31
1218c: f0 2d mov r31, r0
1218e: 0f 2e mov r0, r31
12190: f0 e1 ldi r31, 0x10 ; 16
12192: ef 2e mov r14, r31
12194: f7 e8 ldi r31, 0x87 ; 135
12196: ff 2e mov r15, r31
12198: f0 2d mov r31, r0
1219a: b0 92 a4 04 sts 0x04A4, r11
1219e: 88 81 ld r24, Y
121a0: 1f 92 push r1
121a2: 8f 93 push r24
121a4: fe 01 movw r30, r28
121a6: 31 97 sbiw r30, 0x01 ; 1
121a8: 80 81 ld r24, Z
121aa: 1f 92 push r1
121ac: 8f 93 push r24
121ae: 3e 97 sbiw r30, 0x0e ; 14
121b0: 80 81 ld r24, Z
121b2: 1f 92 push r1
121b4: 8f 93 push r24
121b6: 31 97 sbiw r30, 0x01 ; 1
121b8: 80 81 ld r24, Z
121ba: 1f 92 push r1
121bc: 8f 93 push r24
121be: 3e 97 sbiw r30, 0x0e ; 14
121c0: 80 81 ld r24, Z
121c2: 1f 92 push r1
121c4: 8f 93 push r24
121c6: 31 97 sbiw r30, 0x01 ; 1
121c8: 80 81 ld r24, Z
121ca: 1f 92 push r1
121cc: 8f 93 push r24
121ce: 3e 97 sbiw r30, 0x0e ; 14
121d0: 80 81 ld r24, Z
121d2: 1f 92 push r1
121d4: 8f 93 push r24
121d6: 31 97 sbiw r30, 0x01 ; 1
121d8: 80 81 ld r24, Z
121da: 1f 92 push r1
121dc: 8f 93 push r24
121de: df 92 push r13
121e0: cf 92 push r12
121e2: ff 92 push r15
121e4: ef 92 push r14
121e6: e0 91 78 06 lds r30, 0x0678
121ea: f0 91 79 06 lds r31, 0x0679
121ee: 09 95 icall
if(4 + i * 4 >= RequiredMotors) break;
121f0: 80 91 3d 05 lds r24, 0x053D
121f4: 90 e0 ldi r25, 0x00 ; 0
121f6: 2d b7 in r18, 0x3d ; 61
121f8: 3e b7 in r19, 0x3e ; 62
121fa: 2c 5e subi r18, 0xEC ; 236
121fc: 3f 4f sbci r19, 0xFF ; 255
121fe: 0f b6 in r0, 0x3f ; 63
12200: f8 94 cli
12202: 3e bf out 0x3e, r19 ; 62
12204: 0f be out 0x3f, r0 ; 63
12206: 2d bf out 0x3d, r18 ; 61
12208: 08 17 cp r16, r24
1220a: 19 07 cpc r17, r25
1220c: 94 f4 brge .+36 ; 0x12232 <Menu+0x13e4>
1220e: 34 e1 ldi r19, 0x14 ; 20
12210: b3 0e add r11, r19
12212: ec 96 adiw r28, 0x3c ; 60
12214: 0c 5f subi r16, 0xFC ; 252
12216: 1f 4f sbci r17, 0xFF ; 255
if(Motor[10].State>>7) LCD_printfxy(8,3,"11");
if(Motor[11].State>>7) LCD_printfxy(12,3,"12");
break;
case 19:
LCD_printfxy(0,0,"BL Versions" );
for(i=0;i<3;i++)
12218: 80 e5 ldi r24, 0x50 ; 80
1221a: b8 12 cpse r11, r24
1221c: be cf rjmp .-132 ; 0x1219a <Menu+0x134c>
1221e: 09 c0 rjmp .+18 ; 0x12232 <Menu+0x13e4>
}
break;
*/
#endif
default:
if(MenuePunkt == MaxMenue) MaxMenue--;
12220: 80 91 90 02 lds r24, 0x0290
12224: 28 13 cpse r18, r24
12226: 03 c0 rjmp .+6 ; 0x1222e <Menu+0x13e0>
12228: 21 50 subi r18, 0x01 ; 1
1222a: 20 93 90 02 sts 0x0290, r18
MenuePunkt = 0;
1222e: 10 92 a3 04 sts 0x04A3, r1
break;
}
RemoteKeys = 0;
12232: 10 92 a2 04 sts 0x04A2, r1
}
12236: df 91 pop r29
12238: cf 91 pop r28
1223a: 1f 91 pop r17
1223c: 0f 91 pop r16
1223e: ff 90 pop r15
12240: ef 90 pop r14
12242: df 90 pop r13
12244: cf 90 pop r12
12246: bf 90 pop r11
12248: af 90 pop r10
1224a: 9f 90 pop r9
1224c: 8f 90 pop r8
1224e: 7f 90 pop r7
12250: 6f 90 pop r6
12252: 5f 90 pop r5
12254: 3f 90 pop r3
12256: 2f 90 pop r2
12258: 08 95 ret
0001225a <c_cos_8192>:
// Sinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit.
const uint16_t pgm_sinlookup[91] PROGMEM = {0, 143, 286, 429, 571, 714, 856, 998, 1140, 1282, 1423, 1563, 1703, 1843, 1982, 2120, 2258, 2395, 2531, 2667, 2802, 2936, 3069, 3201, 3332, 3462, 3591, 3719, 3846, 3972, 4096, 4219, 4341, 4462, 4581, 4699, 4815, 4930, 5043, 5155, 5266, 5374, 5482, 5587, 5691, 5793, 5893, 5991, 6088, 6183, 6275, 6366, 6455, 6542, 6627, 6710, 6791, 6870, 6947, 7022, 7094, 7165, 7233, 7299, 7363, 7424, 7484, 7541, 7595, 7648, 7698, 7746, 7791, 7834, 7875, 7913, 7949, 7982, 8013, 8041, 8068, 8091, 8112, 8131, 8147, 8161, 8172, 8181, 8187, 8191, 8192};
int16_t c_cos_8192(int16_t angle)
{
1225a: 1f 93 push r17
int8_t m,n;
int16_t sinus;
angle = 90 - angle; // we need the cosinus and not the sinus
1225c: 2a e5 ldi r18, 0x5A ; 90
1225e: 30 e0 ldi r19, 0x00 ; 0
12260: a9 01 movw r20, r18
12262: 48 1b sub r20, r24
12264: 59 0b sbc r21, r25
12266: ca 01 movw r24, r20
// avoid negative angles
if (angle < 0)
12268: 99 23 and r25, r25
1226a: 3c f4 brge .+14 ; 0x1227a <c_cos_8192+0x20>
{
m = -1;
angle = abs(angle);
1226c: 99 23 and r25, r25
1226e: 1c f4 brge .+6 ; 0x12276 <c_cos_8192+0x1c>
12270: 91 95 neg r25
12272: 81 95 neg r24
12274: 91 09 sbc r25, r1
int16_t sinus;
angle = 90 - angle; // we need the cosinus and not the sinus
// avoid negative angles
if (angle < 0)
{
m = -1;
12276: 1f ef ldi r17, 0xFF ; 255
12278: 01 c0 rjmp .+2 ; 0x1227c <c_cos_8192+0x22>
angle = abs(angle);
}
else m = +1;
1227a: 11 e0 ldi r17, 0x01 ; 1
// fold angle to intervall 0 to 359
angle %= 360;
1227c: 68 e6 ldi r22, 0x68 ; 104
1227e: 71 e0 ldi r23, 0x01 ; 1
12280: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
12284: fc 01 movw r30, r24
// check quadrant
if (angle <= 90) n=1; // first quadrant
12286: 8b 35 cpi r24, 0x5B ; 91
12288: 91 05 cpc r25, r1
1228a: ec f0 brlt .+58 ; 0x122c6 <c_cos_8192+0x6c>
else if ((angle > 90) && (angle <= 180)) {angle = 180 - angle; n = 1;} // second quadrant
1228c: 9c 01 movw r18, r24
1228e: 2b 55 subi r18, 0x5B ; 91
12290: 31 09 sbc r19, r1
12292: 2a 35 cpi r18, 0x5A ; 90
12294: 31 05 cpc r19, r1
12296: 30 f4 brcc .+12 ; 0x122a4 <c_cos_8192+0x4a>
12298: e4 eb ldi r30, 0xB4 ; 180
1229a: f0 e0 ldi r31, 0x00 ; 0
1229c: e8 1b sub r30, r24
1229e: f9 0b sbc r31, r25
122a0: 61 e0 ldi r22, 0x01 ; 1
122a2: 12 c0 rjmp .+36 ; 0x122c8 <c_cos_8192+0x6e>
else if ((angle > 180) && (angle <= 270)) {angle = angle - 180; n = -1;} // third quadrant
122a4: 9c 01 movw r18, r24
122a6: 25 5b subi r18, 0xB5 ; 181
122a8: 31 09 sbc r19, r1
122aa: 2a 35 cpi r18, 0x5A ; 90
122ac: 31 05 cpc r19, r1
122ae: 28 f4 brcc .+10 ; 0x122ba <c_cos_8192+0x60>
122b0: fc 01 movw r30, r24
122b2: e4 5b subi r30, 0xB4 ; 180
122b4: f1 09 sbc r31, r1
122b6: 6f ef ldi r22, 0xFF ; 255
122b8: 07 c0 rjmp .+14 ; 0x122c8 <c_cos_8192+0x6e>
else {angle = 360 - angle; n = -1;} //fourth quadrant
122ba: e8 e6 ldi r30, 0x68 ; 104
122bc: f1 e0 ldi r31, 0x01 ; 1
122be: e8 1b sub r30, r24
122c0: f9 0b sbc r31, r25
122c2: 6f ef ldi r22, 0xFF ; 255
122c4: 01 c0 rjmp .+2 ; 0x122c8 <c_cos_8192+0x6e>
// fold angle to intervall 0 to 359
angle %= 360;
// check quadrant
if (angle <= 90) n=1; // first quadrant
122c6: 61 e0 ldi r22, 0x01 ; 1
else if ((angle > 90) && (angle <= 180)) {angle = 180 - angle; n = 1;} // second quadrant
else if ((angle > 180) && (angle <= 270)) {angle = angle - 180; n = -1;} // third quadrant
else {angle = 360 - angle; n = -1;} //fourth quadrant
// get lookup value
sinus = pgm_read_word(&pgm_sinlookup[angle]);
122c8: ee 0f add r30, r30
122ca: ff 1f adc r31, r31
122cc: e5 5a subi r30, 0xA5 ; 165
122ce: fa 4e sbci r31, 0xEA ; 234
122d0: 25 91 lpm r18, Z+
122d2: 34 91 lpm r19, Z
// calculate sinus value
return (sinus * m * n);
122d4: 12 03 mulsu r17, r18
122d6: a0 01 movw r20, r0
122d8: 13 9f mul r17, r19
122da: 50 0d add r21, r0
122dc: 11 24 eor r1, r1
}
122de: 64 03 mulsu r22, r20
122e0: c0 01 movw r24, r0
122e2: 65 9f mul r22, r21
122e4: 90 0d add r25, r0
122e6: 11 24 eor r1, r1
122e8: 1f 91 pop r17
122ea: 08 95 ret
000122ec <rc_sum_init>:
//############################################################################
// Clear the values
void rc_sum_init(void)
//############################################################################
{
122ec: 80 e0 ldi r24, 0x00 ; 0
122ee: 90 e0 ldi r25, 0x00 ; 0
unsigned char i;
for(i=0;i<MAX_RC_IN;i++)
{
if(i < 5) PPM_in[i] = 0; else PPM_in[i] = -127;
122f0: 21 e8 ldi r18, 0x81 ; 129
122f2: 3f ef ldi r19, 0xFF ; 255
122f4: 85 30 cpi r24, 0x05 ; 5
122f6: 40 f4 brcc .+16 ; 0x12308 <rc_sum_init+0x1c>
122f8: fc 01 movw r30, r24
122fa: ee 0f add r30, r30
122fc: ff 1f adc r31, r31
122fe: ef 5c subi r30, 0xCF ; 207
12300: f7 4f sbci r31, 0xF7 ; 247
12302: 11 82 std Z+1, r1 ; 0x01
12304: 10 82 st Z, r1
12306: 07 c0 rjmp .+14 ; 0x12316 <rc_sum_init+0x2a>
12308: fc 01 movw r30, r24
1230a: ee 0f add r30, r30
1230c: ff 1f adc r31, r31
1230e: ef 5c subi r30, 0xCF ; 207
12310: f7 4f sbci r31, 0xF7 ; 247
12312: 31 83 std Z+1, r19 ; 0x01
12314: 20 83 st Z, r18
PPM_diff[i] = 0;
12316: fc 01 movw r30, r24
12318: ee 0f add r30, r30
1231a: ff 1f adc r31, r31
1231c: e9 58 subi r30, 0x89 ; 137
1231e: f7 4f sbci r31, 0xF7 ; 247
12320: 11 82 std Z+1, r1 ; 0x01
12322: 10 82 st Z, r1
12324: 01 96 adiw r24, 0x01 ; 1
// Clear the values
void rc_sum_init(void)
//############################################################################
{
unsigned char i;
for(i=0;i<MAX_RC_IN;i++)
12326: 83 32 cpi r24, 0x23 ; 35
12328: 91 05 cpc r25, r1
1232a: 21 f7 brne .-56 ; 0x122f4 <rc_sum_init+0x8>
{
if(i < 5) PPM_in[i] = 0; else PPM_in[i] = -127;
PPM_diff[i] = 0;
}
PPM_in[PPM_IN_MAX] = +127;
1232c: 8f e7 ldi r24, 0x7F ; 127
1232e: 90 e0 ldi r25, 0x00 ; 0
12330: 90 93 70 08 sts 0x0870, r25
12334: 80 93 6f 08 sts 0x086F, r24
PPM_in[PPM_IN_OFF] = -127;
12338: 81 e8 ldi r24, 0x81 ; 129
1233a: 9f ef ldi r25, 0xFF ; 255
1233c: 90 93 6e 08 sts 0x086E, r25
12340: 80 93 6d 08 sts 0x086D, r24
PPM_in[PPM_IN_MID] = 0;
12344: 10 92 72 08 sts 0x0872, r1
12348: 10 92 71 08 sts 0x0871, r1
AdNeutralGier = 0;
1234c: 10 92 54 04 sts 0x0454, r1
12350: 10 92 53 04 sts 0x0453, r1
AdNeutralRoll = 0;
12354: 10 92 56 04 sts 0x0456, r1
12358: 10 92 55 04 sts 0x0455, r1
AdNeutralNick = 0;
1235c: 10 92 58 04 sts 0x0458, r1
12360: 10 92 57 04 sts 0x0457, r1
12364: 08 95 ret
00012366 <__vector_12>:
#ifndef ACT_S3D_SUMMENSIGNAL
//############################################################################
// Interrupt function for the PPM-Input
ISR(TIMER1_CAPT_vect)
//############################################################################
{
12366: 1f 92 push r1
12368: 0f 92 push r0
1236a: 0f b6 in r0, 0x3f ; 63
1236c: 0f 92 push r0
1236e: 11 24 eor r1, r1
12370: 0b b6 in r0, 0x3b ; 59
12372: 0f 92 push r0
12374: 2f 93 push r18
12376: 3f 93 push r19
12378: 4f 93 push r20
1237a: 5f 93 push r21
1237c: 6f 93 push r22
1237e: 7f 93 push r23
12380: 8f 93 push r24
12382: 9f 93 push r25
12384: af 93 push r26
12386: bf 93 push r27
12388: cf 93 push r28
1238a: df 93 push r29
1238c: ef 93 push r30
1238e: ff 93 push r31
static unsigned int AltICR=0;
signed int signal = 0,tmp;
static int index;
signal = (unsigned int) ICR1 - AltICR;
12390: e6 e8 ldi r30, 0x86 ; 134
12392: f0 e0 ldi r31, 0x00 ; 0
12394: 80 81 ld r24, Z
12396: 91 81 ldd r25, Z+1 ; 0x01
12398: 20 91 a7 04 lds r18, 0x04A7
1239c: 30 91 a8 04 lds r19, 0x04A8
123a0: 82 1b sub r24, r18
123a2: 93 0b sbc r25, r19
AltICR = ICR1;
123a4: 20 81 ld r18, Z
123a6: 31 81 ldd r19, Z+1 ; 0x01
123a8: 30 93 a8 04 sts 0x04A8, r19
123ac: 20 93 a7 04 sts 0x04A7, r18
//Syncronisationspause? (3.52 ms < signal < 25.6 ms)
if((signal > 1100) && (signal < 8000))
123b0: 9c 01 movw r18, r24
123b2: 2d 54 subi r18, 0x4D ; 77
123b4: 34 40 sbci r19, 0x04 ; 4
123b6: 23 3f cpi r18, 0xF3 ; 243
123b8: 3a 41 sbci r19, 0x1A ; 26
123ba: 88 f4 brcc .+34 ; 0x123de <__vector_12+0x78>
{
Channels = index;
123bc: 80 91 a5 04 lds r24, 0x04A5
123c0: 90 91 a6 04 lds r25, 0x04A6
123c4: 80 93 30 08 sts 0x0830, r24
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten
123c8: 04 97 sbiw r24, 0x04 ; 4
123ca: 14 f0 brlt .+4 ; 0x123d0 <__vector_12+0x6a>
123cc: 10 92 93 02 sts 0x0293, r1
index = 1;
123d0: 81 e0 ldi r24, 0x01 ; 1
123d2: 90 e0 ldi r25, 0x00 ; 0
123d4: 90 93 a6 04 sts 0x04A6, r25
123d8: 80 93 a5 04 sts 0x04A5, r24
123dc: c1 c0 rjmp .+386 ; 0x12560 <__vector_12+0x1fa>
}
else
{
if(index < 13+4)
123de: 20 91 a5 04 lds r18, 0x04A5
123e2: 30 91 a6 04 lds r19, 0x04A6
123e6: 21 31 cpi r18, 0x11 ; 17
123e8: 31 05 cpc r19, r1
123ea: 0c f0 brlt .+2 ; 0x123ee <__vector_12+0x88>
123ec: b9 c0 rjmp .+370 ; 0x12560 <__vector_12+0x1fa>
{
if((signal > 250) && (signal < 687))
123ee: ac 01 movw r20, r24
123f0: 4b 5f subi r20, 0xFB ; 251
123f2: 51 09 sbc r21, r1
123f4: 44 3b cpi r20, 0xB4 ; 180
123f6: 51 40 sbci r21, 0x01 ; 1
123f8: 08 f0 brcs .+2 ; 0x123fc <__vector_12+0x96>
123fa: ac c0 rjmp .+344 ; 0x12554 <__vector_12+0x1ee>
{
signal -= PPM_Neutral;
123fc: 40 91 91 02 lds r20, 0x0291
12400: 50 91 92 02 lds r21, 0x0292
12404: 84 1b sub r24, r20
12406: 95 0b sbc r25, r21
// Stabiles Signal
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
12408: e0 91 a8 05 lds r30, 0x05A8
1240c: ee 23 and r30, r30
1240e: 51 f0 breq .+20 ; 0x12424 <__vector_12+0xbe>
12410: f0 e0 ldi r31, 0x00 ; 0
12412: ee 0f add r30, r30
12414: ff 1f adc r31, r31
12416: ef 5c subi r30, 0xCF ; 207
12418: f7 4f sbci r31, 0xF7 ; 247
1241a: 40 81 ld r20, Z
1241c: 51 81 ldd r21, Z+1 ; 0x01
1241e: 44 36 cpi r20, 0x64 ; 100
12420: 51 05 cpc r21, r1
12422: 04 f5 brge .+64 ; 0x12464 <__vector_12+0xfe>
{
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10; else SenderOkay = 200;}
12424: f9 01 movw r30, r18
12426: ee 0f add r30, r30
12428: ff 1f adc r31, r31
1242a: ef 5c subi r30, 0xCF ; 207
1242c: f7 4f sbci r31, 0xF7 ; 247
1242e: 40 81 ld r20, Z
12430: 51 81 ldd r21, Z+1 ; 0x01
12432: bc 01 movw r22, r24
12434: 64 1b sub r22, r20
12436: 75 0b sbc r23, r21
12438: ab 01 movw r20, r22
1243a: 22 f4 brpl .+8 ; 0x12444 <__vector_12+0xde>
1243c: 44 27 eor r20, r20
1243e: 55 27 eor r21, r21
12440: 46 1b sub r20, r22
12442: 57 0b sbc r21, r23
12444: 46 30 cpi r20, 0x06 ; 6
12446: 51 05 cpc r21, r1
12448: 6c f4 brge .+26 ; 0x12464 <__vector_12+0xfe>
1244a: 40 91 04 04 lds r20, 0x0404
1244e: 48 3c cpi r20, 0xC8 ; 200
12450: 30 f4 brcc .+12 ; 0x1245e <__vector_12+0xf8>
12452: 40 91 04 04 lds r20, 0x0404
12456: 46 5f subi r20, 0xF6 ; 246
12458: 40 93 04 04 sts 0x0404, r20
1245c: 03 c0 rjmp .+6 ; 0x12464 <__vector_12+0xfe>
1245e: 48 ec ldi r20, 0xC8 ; 200
12460: 40 93 04 04 sts 0x0404, r20
}
tmp = (3 * (PPM_in[index]) + signal) / 4;
12464: f9 01 movw r30, r18
12466: ee 0f add r30, r30
12468: ff 1f adc r31, r31
1246a: ef 5c subi r30, 0xCF ; 207
1246c: f7 4f sbci r31, 0xF7 ; 247
1246e: 40 81 ld r20, Z
12470: 51 81 ldd r21, Z+1 ; 0x01
12472: fa 01 movw r30, r20
12474: ee 0f add r30, r30
12476: ff 1f adc r31, r31
12478: e4 0f add r30, r20
1247a: f5 1f adc r31, r21
1247c: e8 0f add r30, r24
1247e: f9 1f adc r31, r25
12480: ff 23 and r31, r31
12482: 0c f4 brge .+2 ; 0x12486 <__vector_12+0x120>
12484: 33 96 adiw r30, 0x03 ; 3
12486: f5 95 asr r31
12488: e7 95 ror r30
1248a: f5 95 asr r31
1248c: e7 95 ror r30
if(tmp > signal+1) tmp--; else
1248e: ac 01 movw r20, r24
12490: 4f 5f subi r20, 0xFF ; 255
12492: 5f 4f sbci r21, 0xFF ; 255
12494: 4e 17 cp r20, r30
12496: 5f 07 cpc r21, r31
12498: 14 f4 brge .+4 ; 0x1249e <__vector_12+0x138>
1249a: 31 97 sbiw r30, 0x01 ; 1
1249c: 05 c0 rjmp .+10 ; 0x124a8 <__vector_12+0x142>
if(tmp < signal-1) tmp++;
1249e: 01 97 sbiw r24, 0x01 ; 1
124a0: e8 17 cp r30, r24
124a2: f9 07 cpc r31, r25
124a4: 0c f4 brge .+2 ; 0x124a8 <__vector_12+0x142>
124a6: 31 96 adiw r30, 0x01 ; 1
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
124a8: 80 91 04 04 lds r24, 0x0404
124ac: 83 3c cpi r24, 0xC3 ; 195
124ae: d0 f0 brcs .+52 ; 0x124e4 <__vector_12+0x17e>
124b0: e9 01 movw r28, r18
124b2: cc 0f add r28, r28
124b4: dd 1f adc r29, r29
124b6: de 01 movw r26, r28
124b8: af 5c subi r26, 0xCF ; 207
124ba: b7 4f sbci r27, 0xF7 ; 247
124bc: 8d 91 ld r24, X+
124be: 9c 91 ld r25, X
124c0: af 01 movw r20, r30
124c2: 48 1b sub r20, r24
124c4: 59 0b sbc r21, r25
124c6: ca 01 movw r24, r20
124c8: 63 e0 ldi r22, 0x03 ; 3
124ca: 70 e0 ldi r23, 0x00 ; 0
124cc: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
124d0: cb 01 movw r24, r22
124d2: 88 0f add r24, r24
124d4: 99 1f adc r25, r25
124d6: 68 0f add r22, r24
124d8: 79 1f adc r23, r25
124da: c9 58 subi r28, 0x89 ; 137
124dc: d7 4f sbci r29, 0xF7 ; 247
124de: 79 83 std Y+1, r23 ; 0x01
124e0: 68 83 st Y, r22
124e2: 08 c0 rjmp .+16 ; 0x124f4 <__vector_12+0x18e>
else PPM_diff[index] = 0;
124e4: d9 01 movw r26, r18
124e6: aa 0f add r26, r26
124e8: bb 1f adc r27, r27
124ea: a9 58 subi r26, 0x89 ; 137
124ec: b7 4f sbci r27, 0xF7 ; 247
124ee: 11 96 adiw r26, 0x01 ; 1
124f0: 1c 92 st X, r1
124f2: 1e 92 st -X, r1
PPM_in[index] = tmp;
124f4: d9 01 movw r26, r18
124f6: aa 0f add r26, r26
124f8: bb 1f adc r27, r27
124fa: af 5c subi r26, 0xCF ; 207
124fc: b7 4f sbci r27, 0xF7 ; 247
124fe: 11 96 adiw r26, 0x01 ; 1
12500: fc 93 st X, r31
12502: ee 93 st -X, r30
if(SenderOkay < 50)
12504: 80 91 04 04 lds r24, 0x0404
12508: 82 33 cpi r24, 0x32 ; 50
1250a: 20 f5 brcc .+72 ; 0x12554 <__vector_12+0x1ee>
{
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
1250c: e0 91 3f 05 lds r30, 0x053F
12510: f0 e0 ldi r31, 0x00 ; 0
12512: ee 0f add r30, r30
12514: ff 1f adc r31, r31
12516: ef 5c subi r30, 0xCF ; 207
12518: f7 4f sbci r31, 0xF7 ; 247
1251a: 11 82 std Z+1, r1 ; 0x01
1251c: 10 82 st Z, r1
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
1251e: e0 91 40 05 lds r30, 0x0540
12522: f0 e0 ldi r31, 0x00 ; 0
12524: ee 0f add r30, r30
12526: ff 1f adc r31, r31
12528: ef 5c subi r30, 0xCF ; 207
1252a: f7 4f sbci r31, 0xF7 ; 247
1252c: 11 82 std Z+1, r1 ; 0x01
1252e: 10 82 st Z, r1
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
12530: e0 91 42 05 lds r30, 0x0542
12534: f0 e0 ldi r31, 0x00 ; 0
12536: ee 0f add r30, r30
12538: ff 1f adc r31, r31
1253a: ef 5c subi r30, 0xCF ; 207
1253c: f7 4f sbci r31, 0xF7 ; 247
1253e: 11 82 std Z+1, r1 ; 0x01
12540: 10 82 st Z, r1
PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] = 0;
12542: e0 91 41 05 lds r30, 0x0541
12546: f0 e0 ldi r31, 0x00 ; 0
12548: ee 0f add r30, r30
1254a: ff 1f adc r31, r31
1254c: ef 5c subi r30, 0xCF ; 207
1254e: f7 4f sbci r31, 0xF7 ; 247
12550: 11 82 std Z+1, r1 ; 0x01
12552: 10 82 st Z, r1
}
}
index++;
12554: 2f 5f subi r18, 0xFF ; 255
12556: 3f 4f sbci r19, 0xFF ; 255
12558: 30 93 a6 04 sts 0x04A6, r19
1255c: 20 93 a5 04 sts 0x04A5, r18
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen
}
*/
}
}
}
12560: ff 91 pop r31
12562: ef 91 pop r30
12564: df 91 pop r29
12566: cf 91 pop r28
12568: bf 91 pop r27
1256a: af 91 pop r26
1256c: 9f 91 pop r25
1256e: 8f 91 pop r24
12570: 7f 91 pop r23
12572: 6f 91 pop r22
12574: 5f 91 pop r21
12576: 4f 91 pop r20
12578: 3f 91 pop r19
1257a: 2f 91 pop r18
1257c: 0f 90 pop r0
1257e: 0b be out 0x3b, r0 ; 59
12580: 0f 90 pop r0
12582: 0f be out 0x3f, r0 ; 63
12584: 0f 90 pop r0
12586: 1f 90 pop r1
12588: 18 95 reti
0001258a <SbusUartInit>:
//############################################################################
// USART1 initialisation from killagreg
void SbusUartInit(void)
//############################################################################
{
1258a: cf 93 push r28
1258c: df 93 push r29
// -- Start of USART1 initialisation for Spekturm seriell-mode
// USART1 Control and Status Register A, B, C and baud rate register
uint8_t sreg = SREG;
1258e: 9f b7 in r25, 0x3f ; 63
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 100000) - 1);
// disable all interrupts before reconfiguration
cli();
12590: f8 94 cli
// disable RX-Interrupt
UCSR1B &= ~(1 << RXCIE1);
12592: a9 ec ldi r26, 0xC9 ; 201
12594: b0 e0 ldi r27, 0x00 ; 0
12596: 8c 91 ld r24, X
12598: 8f 77 andi r24, 0x7F ; 127
1259a: 8c 93 st X, r24
// disable TX-Interrupt
UCSR1B &= ~(1 << TXCIE1);
1259c: 8c 91 ld r24, X
1259e: 8f 7b andi r24, 0xBF ; 191
125a0: 8c 93 st X, r24
// disable DRE-Interrupt
UCSR1B &= ~(1 << UDRIE1);
125a2: 8c 91 ld r24, X
125a4: 8f 7d andi r24, 0xDF ; 223
125a6: 8c 93 st X, r24
PORTD |= (1 << PORTD3);
DDRD |= (1 << DDD3);
*/
// USART0 Baud Rate Register
// set clock divider
UBRR1H = (uint8_t)(ubrr>>8);
125a8: 10 92 cd 00 sts 0x00CD, r1
UBRR1L = (uint8_t)ubrr;
125ac: 88 e1 ldi r24, 0x18 ; 24
125ae: 80 93 cc 00 sts 0x00CC, r24
// enable double speed operation
UCSR1A |= (1 << U2X1);
125b2: c8 ec ldi r28, 0xC8 ; 200
125b4: d0 e0 ldi r29, 0x00 ; 0
125b6: 88 81 ld r24, Y
125b8: 82 60 ori r24, 0x02 ; 2
125ba: 88 83 st Y, r24
// enable receiver and transmitter
//UCSR1B = (1<<RXEN1)|(1<<TXEN1);
UCSR1B = (1<<RXEN1);
125bc: 80 e1 ldi r24, 0x10 ; 16
125be: 8c 93 st X, r24
// set asynchronous mode
UCSR1C &= ~(1 << UMSEL11);
125c0: ea ec ldi r30, 0xCA ; 202
125c2: f0 e0 ldi r31, 0x00 ; 0
125c4: 80 81 ld r24, Z
125c6: 8f 77 andi r24, 0x7F ; 127
125c8: 80 83 st Z, r24
UCSR1C &= ~(1 << UMSEL10);
125ca: 80 81 ld r24, Z
125cc: 8f 7b andi r24, 0xBF ; 191
125ce: 80 83 st Z, r24
// parity
UCSR1C <= (1 << UPM11); // even
125d0: 80 81 ld r24, Z
UCSR1C &= ~(1 << UPM10);
125d2: 80 81 ld r24, Z
125d4: 8f 7e andi r24, 0xEF ; 239
125d6: 80 83 st Z, r24
// stop bit
UCSR1C |= (1 << USBS1); // two
125d8: 80 81 ld r24, Z
125da: 88 60 ori r24, 0x08 ; 8
125dc: 80 83 st Z, r24
// 8-bit
UCSR1B &= ~(1 << UCSZ12);
125de: 8c 91 ld r24, X
125e0: 8b 7f andi r24, 0xFB ; 251
125e2: 8c 93 st X, r24
UCSR1C |= (1 << UCSZ11);
125e4: 80 81 ld r24, Z
125e6: 84 60 ori r24, 0x04 ; 4
125e8: 80 83 st Z, r24
UCSR1C |= (1 << UCSZ10);
125ea: 80 81 ld r24, Z
125ec: 82 60 ori r24, 0x02 ; 2
125ee: 80 83 st Z, r24
// flush receive buffer explicit
while(UCSR1A & (1<<RXC1)) UDR1;
125f0: 88 81 ld r24, Y
125f2: 88 23 and r24, r24
125f4: 44 f4 brge .+16 ; 0x12606 <SbusUartInit+0x7c>
125f6: ae ec ldi r26, 0xCE ; 206
125f8: b0 e0 ldi r27, 0x00 ; 0
125fa: e8 ec ldi r30, 0xC8 ; 200
125fc: f0 e0 ldi r31, 0x00 ; 0
125fe: 8c 91 ld r24, X
12600: 80 81 ld r24, Z
12602: 88 23 and r24, r24
12604: e4 f3 brlt .-8 ; 0x125fe <SbusUartInit+0x74>
// enable RX-interrupts at the end
UCSR1B |= (1 << RXCIE1);
12606: e9 ec ldi r30, 0xC9 ; 201
12608: f0 e0 ldi r31, 0x00 ; 0
1260a: 80 81 ld r24, Z
1260c: 80 68 ori r24, 0x80 ; 128
1260e: 80 83 st Z, r24
// -- End of USART1 initialisation
// restore global interrupt flags
sBusBuffer[23] |= 4; // This Bit contains the 'Signal loss'
12610: e4 ed ldi r30, 0xD4 ; 212
12612: f8 e0 ldi r31, 0x08 ; 8
12614: 80 81 ld r24, Z
12616: 84 60 ori r24, 0x04 ; 4
12618: 80 83 st Z, r24
SREG = sreg;
1261a: 9f bf out 0x3f, r25 ; 63
return;
}
1261c: df 91 pop r29
1261e: cf 91 pop r28
12620: 08 95 ret
00012622 <SbusParser>:
// Is called by the uart RX interrupt
//############################################################################
void SbusParser(unsigned char udr)
{
static unsigned char ptr = 0;
if(!SpektrumTimer && udr == 0x0f) // wait for the start
12622: 90 91 b0 04 lds r25, 0x04B0
12626: 91 11 cpse r25, r1
12628: 08 c0 rjmp .+16 ; 0x1263a <SbusParser+0x18>
1262a: 8f 30 cpi r24, 0x0F ; 15
1262c: 31 f4 brne .+12 ; 0x1263a <SbusParser+0x18>
{
ptr = 0;
1262e: 10 92 aa 04 sts 0x04AA, r1
SpektrumTimer = 80; // 8ms gap
12632: 80 e5 ldi r24, 0x50 ; 80
12634: 80 93 b0 04 sts 0x04B0, r24
12638: 08 95 ret
}
else
{
if(++ptr == 24) // last byte
1263a: e0 91 aa 04 lds r30, 0x04AA
1263e: ef 5f subi r30, 0xFF ; 255
12640: e0 93 aa 04 sts 0x04AA, r30
12644: e8 31 cpi r30, 0x18 ; 24
12646: 21 f4 brne .+8 ; 0x12650 <SbusParser+0x2e>
{
NewSBusData = 1;
12648: 81 e0 ldi r24, 0x01 ; 1
1264a: 80 93 ab 04 sts 0x04AB, r24
1264e: 08 95 ret
}
else
if(ptr > 24) ptr = 25;
12650: e9 31 cpi r30, 0x19 ; 25
12652: 20 f0 brcs .+8 ; 0x1265c <SbusParser+0x3a>
12654: 89 e1 ldi r24, 0x19 ; 25
12656: 80 93 aa 04 sts 0x04AA, r24
1265a: 08 95 ret
else
{
sBusBuffer[ptr] = udr; // collect all bytes
1265c: f0 e0 ldi r31, 0x00 ; 0
1265e: e3 54 subi r30, 0x43 ; 67
12660: f7 4f sbci r31, 0xF7 ; 247
12662: 80 83 st Z, r24
12664: 08 95 ret
00012666 <ProcessSBus>:
}
}
}
void ProcessSBus(void)
{
12666: 5f 92 push r5
12668: 6f 92 push r6
1266a: 7f 92 push r7
1266c: 8f 92 push r8
1266e: 9f 92 push r9
12670: af 92 push r10
12672: bf 92 push r11
12674: cf 92 push r12
12676: df 92 push r13
12678: ef 92 push r14
1267a: ff 92 push r15
1267c: 0f 93 push r16
1267e: 1f 93 push r17
12680: cf 93 push r28
12682: df 93 push r29
static unsigned char load = 0;
unsigned char bitmask8 = 1, sbyte = 2, i, index = 1, process;
unsigned int bitmask11 = 256;
signed int signal = 0,tmp;
if(!(sBusBuffer[23] & 4)) // This Bit contains the 'Signal loss'
12684: 80 91 d4 08 lds r24, 0x08D4
12688: 82 fd sbrc r24, 2
1268a: a4 c0 rjmp .+328 ; 0x127d4 <ProcessSBus+0x16e>
{
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input
1268c: ef e6 ldi r30, 0x6F ; 111
1268e: f0 e0 ldi r31, 0x00 ; 0
12690: 80 81 ld r24, Z
12692: 8f 7d andi r24, 0xDF ; 223
12694: 80 83 st Z, r24
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
12696: e0 91 a8 05 lds r30, 0x05A8
1269a: ee 23 and r30, r30
1269c: 51 f0 breq .+20 ; 0x126b2 <ProcessSBus+0x4c>
1269e: f0 e0 ldi r31, 0x00 ; 0
126a0: ee 0f add r30, r30
126a2: ff 1f adc r31, r31
126a4: ef 5c subi r30, 0xCF ; 207
126a6: f7 4f sbci r31, 0xF7 ; 247
126a8: 80 81 ld r24, Z
126aa: 91 81 ldd r25, Z+1 ; 0x01
126ac: 84 36 cpi r24, 0x64 ; 100
126ae: 91 05 cpc r25, r1
126b0: 6c f4 brge .+26 ; 0x126cc <ProcessSBus+0x66>
{
if(SenderOkay < 200) SenderOkay += 20; else SenderOkay = 200;
126b2: 80 91 04 04 lds r24, 0x0404
126b6: 88 3c cpi r24, 0xC8 ; 200
126b8: 30 f4 brcc .+12 ; 0x126c6 <ProcessSBus+0x60>
126ba: 80 91 04 04 lds r24, 0x0404
126be: 8c 5e subi r24, 0xEC ; 236
126c0: 80 93 04 04 sts 0x0404, r24
126c4: 03 c0 rjmp .+6 ; 0x126cc <ProcessSBus+0x66>
126c6: 88 ec ldi r24, 0xC8 ; 200
126c8: 80 93 04 04 sts 0x0404, r24
}
signal = sBusBuffer[1];
126cc: 80 91 be 08 lds r24, 0x08BE
126d0: 90 e0 ldi r25, 0x00 ; 0
if(!load--) { process = (16*11 - 8); load = 2;} else process = (4*11 - 8); // lowers the processor load
126d2: 20 91 a9 04 lds r18, 0x04A9
126d6: 21 11 cpse r18, r1
126d8: 80 c0 rjmp .+256 ; 0x127da <ProcessSBus+0x174>
126da: 22 e0 ldi r18, 0x02 ; 2
126dc: 20 93 a9 04 sts 0x04A9, r18
126e0: 0f 2e mov r0, r31
126e2: f8 ea ldi r31, 0xA8 ; 168
126e4: bf 2e mov r11, r31
126e6: f0 2d mov r31, r0
126e8: 7f c0 rjmp .+254 ; 0x127e8 <ProcessSBus+0x182>
for(i = 0; i < process; i++) // collect the single bits
{
if(sBusBuffer[sbyte] & bitmask8) signal |= bitmask11;
126ea: ec 2d mov r30, r12
126ec: f0 e0 ldi r31, 0x00 ; 0
126ee: e3 54 subi r30, 0x43 ; 67
126f0: f7 4f sbci r31, 0xF7 ; 247
126f2: 50 81 ld r21, Z
126f4: 54 23 and r21, r20
126f6: 11 f0 breq .+4 ; 0x126fc <ProcessSBus+0x96>
126f8: 82 2b or r24, r18
126fa: 93 2b or r25, r19
bitmask8 *= 2;
126fc: 44 0f add r20, r20
if(!bitmask8)
126fe: 11 f4 brne .+4 ; 0x12704 <ProcessSBus+0x9e>
{
bitmask8 = 1;
sbyte++;
12700: c3 94 inc r12
{
if(sBusBuffer[sbyte] & bitmask8) signal |= bitmask11;
bitmask8 *= 2;
if(!bitmask8)
{
bitmask8 = 1;
12702: 49 2d mov r20, r9
sbyte++;
}
bitmask11 *= 2;
12704: 22 0f add r18, r18
12706: 33 1f adc r19, r19
if(bitmask11 == 2048)
12708: 21 15 cp r18, r1
1270a: 58 e0 ldi r21, 0x08 ; 8
1270c: 35 07 cpc r19, r21
1270e: 09 f0 breq .+2 ; 0x12712 <ProcessSBus+0xac>
12710: 5b c0 rjmp .+182 ; 0x127c8 <ProcessSBus+0x162>
{
bitmask11 = 1;
signal = (signal-1024) / 5; // the resolution is higher than required
12712: 94 50 subi r25, 0x04 ; 4
12714: b8 01 movw r22, r16
12716: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
tmp = (3 * (PPM_in[index]) + signal) / 4;
1271a: ea 2d mov r30, r10
1271c: f0 e0 ldi r31, 0x00 ; 0
1271e: df 01 movw r26, r30
12720: aa 0f add r26, r26
12722: bb 1f adc r27, r27
12724: af 5c subi r26, 0xCF ; 207
12726: b7 4f sbci r27, 0xF7 ; 247
12728: 8d 91 ld r24, X+
1272a: 9c 91 ld r25, X
1272c: 9c 01 movw r18, r24
1272e: 22 0f add r18, r18
12730: 33 1f adc r19, r19
12732: 28 0f add r18, r24
12734: 39 1f adc r19, r25
12736: 26 0f add r18, r22
12738: 37 1f adc r19, r23
1273a: 33 23 and r19, r19
1273c: 14 f4 brge .+4 ; 0x12742 <ProcessSBus+0xdc>
1273e: 2d 5f subi r18, 0xFD ; 253
12740: 3f 4f sbci r19, 0xFF ; 255
12742: 35 95 asr r19
12744: 27 95 ror r18
12746: 35 95 asr r19
12748: 27 95 ror r18
if(tmp > signal+1) tmp--; else
1274a: cb 01 movw r24, r22
1274c: 01 96 adiw r24, 0x01 ; 1
1274e: 82 17 cp r24, r18
12750: 93 07 cpc r25, r19
12752: 1c f4 brge .+6 ; 0x1275a <ProcessSBus+0xf4>
12754: 21 50 subi r18, 0x01 ; 1
12756: 31 09 sbc r19, r1
12758: 07 c0 rjmp .+14 ; 0x12768 <ProcessSBus+0x102>
if(tmp < signal-1) tmp++;
1275a: 61 50 subi r22, 0x01 ; 1
1275c: 71 09 sbc r23, r1
1275e: 26 17 cp r18, r22
12760: 37 07 cpc r19, r23
12762: 14 f4 brge .+4 ; 0x12768 <ProcessSBus+0x102>
12764: 2f 5f subi r18, 0xFF ; 255
12766: 3f 4f sbci r19, 0xFF ; 255
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
12768: 80 91 04 04 lds r24, 0x0404
1276c: 83 3c cpi r24, 0xC3 ; 195
1276e: c8 f0 brcs .+50 ; 0x127a2 <ProcessSBus+0x13c>
12770: ef 01 movw r28, r30
12772: cc 0f add r28, r28
12774: dd 1f adc r29, r29
12776: de 01 movw r26, r28
12778: af 5c subi r26, 0xCF ; 207
1277a: b7 4f sbci r27, 0xF7 ; 247
1277c: 8d 91 ld r24, X+
1277e: 9c 91 ld r25, X
12780: b9 01 movw r22, r18
12782: 68 1b sub r22, r24
12784: 79 0b sbc r23, r25
12786: cb 01 movw r24, r22
12788: b7 01 movw r22, r14
1278a: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
1278e: cb 01 movw r24, r22
12790: 88 0f add r24, r24
12792: 99 1f adc r25, r25
12794: 68 0f add r22, r24
12796: 79 1f adc r23, r25
12798: c9 58 subi r28, 0x89 ; 137
1279a: d7 4f sbci r29, 0xF7 ; 247
1279c: 79 83 std Y+1, r23 ; 0x01
1279e: 68 83 st Y, r22
127a0: 08 c0 rjmp .+16 ; 0x127b2 <ProcessSBus+0x14c>
else PPM_diff[index] = 0;
127a2: df 01 movw r26, r30
127a4: aa 0f add r26, r26
127a6: bb 1f adc r27, r27
127a8: a9 58 subi r26, 0x89 ; 137
127aa: b7 4f sbci r27, 0xF7 ; 247
127ac: 11 96 adiw r26, 0x01 ; 1
127ae: 1c 92 st X, r1
127b0: 1e 92 st -X, r1
PPM_in[index] = tmp;
127b2: ee 0f add r30, r30
127b4: ff 1f adc r31, r31
127b6: ef 5c subi r30, 0xCF ; 207
127b8: f7 4f sbci r31, 0xF7 ; 247
127ba: 31 83 std Z+1, r19 ; 0x01
127bc: 20 83 st Z, r18
signal = 0;
index++; // next channel
127be: a3 94 inc r10
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
else PPM_diff[index] = 0;
PPM_in[index] = tmp;
signal = 0;
127c0: 88 2d mov r24, r8
127c2: 97 2d mov r25, r7
sbyte++;
}
bitmask11 *= 2;
if(bitmask11 == 2048)
{
bitmask11 = 1;
127c4: 26 2d mov r18, r6
127c6: 35 2d mov r19, r5
{
if(SenderOkay < 200) SenderOkay += 20; else SenderOkay = 200;
}
signal = sBusBuffer[1];
if(!load--) { process = (16*11 - 8); load = 2;} else process = (4*11 - 8); // lowers the processor load
for(i = 0; i < process; i++) // collect the single bits
127c8: d3 94 inc r13
127ca: db 14 cp r13, r11
127cc: 08 f4 brcc .+2 ; 0x127d0 <ProcessSBus+0x16a>
127ce: 8d cf rjmp .-230 ; 0x126ea <ProcessSBus+0x84>
PPM_in[index] = tmp;
signal = 0;
index++; // next channel
}
}
NewPpmData = 0; // Null bedeutet: Neue Daten
127d0: 10 92 93 02 sts 0x0293, r1
}
NewSBusData = 0;
127d4: 10 92 ab 04 sts 0x04AB, r1
127d8: 1f c0 rjmp .+62 ; 0x12818 <ProcessSBus+0x1b2>
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
{
if(SenderOkay < 200) SenderOkay += 20; else SenderOkay = 200;
}
signal = sBusBuffer[1];
if(!load--) { process = (16*11 - 8); load = 2;} else process = (4*11 - 8); // lowers the processor load
127da: 21 50 subi r18, 0x01 ; 1
127dc: 20 93 a9 04 sts 0x04A9, r18
127e0: 0f 2e mov r0, r31
127e2: f4 e2 ldi r31, 0x24 ; 36
127e4: bf 2e mov r11, r31
127e6: f0 2d mov r31, r0
void ProcessSBus(void)
{
static unsigned char load = 0;
unsigned char bitmask8 = 1, sbyte = 2, i, index = 1, process;
unsigned int bitmask11 = 256;
127e8: 20 e0 ldi r18, 0x00 ; 0
127ea: 31 e0 ldi r19, 0x01 ; 1
}
void ProcessSBus(void)
{
static unsigned char load = 0;
unsigned char bitmask8 = 1, sbyte = 2, i, index = 1, process;
127ec: aa 24 eor r10, r10
127ee: a3 94 inc r10
{
if(SenderOkay < 200) SenderOkay += 20; else SenderOkay = 200;
}
signal = sBusBuffer[1];
if(!load--) { process = (16*11 - 8); load = 2;} else process = (4*11 - 8); // lowers the processor load
for(i = 0; i < process; i++) // collect the single bits
127f0: d1 2c mov r13, r1
}
void ProcessSBus(void)
{
static unsigned char load = 0;
unsigned char bitmask8 = 1, sbyte = 2, i, index = 1, process;
127f2: 68 94 set
127f4: cc 24 eor r12, r12
127f6: c1 f8 bld r12, 1
127f8: 41 e0 ldi r20, 0x01 ; 1
{
if(sBusBuffer[sbyte] & bitmask8) signal |= bitmask11;
bitmask8 *= 2;
if(!bitmask8)
{
bitmask8 = 1;
127fa: 99 24 eor r9, r9
127fc: 93 94 inc r9
}
bitmask11 *= 2;
if(bitmask11 == 2048)
{
bitmask11 = 1;
signal = (signal-1024) / 5; // the resolution is higher than required
127fe: 05 e0 ldi r16, 0x05 ; 5
12800: 10 e0 ldi r17, 0x00 ; 0
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
else PPM_diff[index] = 0;
PPM_in[index] = tmp;
signal = 0;
12802: 81 2c mov r8, r1
12804: 71 2c mov r7, r1
sbyte++;
}
bitmask11 *= 2;
if(bitmask11 == 2048)
{
bitmask11 = 1;
12806: 66 24 eor r6, r6
12808: 63 94 inc r6
1280a: 51 2c mov r5, r1
signal = (signal-1024) / 5; // the resolution is higher than required
tmp = (3 * (PPM_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
1280c: 0f 2e mov r0, r31
1280e: f3 e0 ldi r31, 0x03 ; 3
12810: ef 2e mov r14, r31
12812: f1 2c mov r15, r1
12814: f0 2d mov r31, r0
12816: 69 cf rjmp .-302 ; 0x126ea <ProcessSBus+0x84>
}
}
NewPpmData = 0; // Null bedeutet: Neue Daten
}
NewSBusData = 0;
}
12818: df 91 pop r29
1281a: cf 91 pop r28
1281c: 1f 91 pop r17
1281e: 0f 91 pop r16
12820: ff 90 pop r15
12822: ef 90 pop r14
12824: df 90 pop r13
12826: cf 90 pop r12
12828: bf 90 pop r11
1282a: af 90 pop r10
1282c: 9f 90 pop r9
1282e: 8f 90 pop r8
12830: 7f 90 pop r7
12832: 6f 90 pop r6
12834: 5f 90 pop r5
12836: 08 95 ret
00012838 <SpektrumUartInit>:
//############################################################################
// USART1 initialisation from killagreg
void SpektrumUartInit(void)
//############################################################################
{
12838: cf 93 push r28
1283a: df 93 push r29
// -- Start of USART1 initialisation for Spekturm seriell-mode
// USART1 Control and Status Register A, B, C and baud rate register
uint8_t sreg = SREG;
1283c: 9f b7 in r25, 0x3f ; 63
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1);
// disable all interrupts before reconfiguration
cli();
1283e: f8 94 cli
// disable RX-Interrupt
UCSR1B &= ~(1 << RXCIE1);
12840: a9 ec ldi r26, 0xC9 ; 201
12842: b0 e0 ldi r27, 0x00 ; 0
12844: 8c 91 ld r24, X
12846: 8f 77 andi r24, 0x7F ; 127
12848: 8c 93 st X, r24
// disable TX-Interrupt
UCSR1B &= ~(1 << TXCIE1);
1284a: 8c 91 ld r24, X
1284c: 8f 7b andi r24, 0xBF ; 191
1284e: 8c 93 st X, r24
// disable DRE-Interrupt
UCSR1B &= ~(1 << UDRIE1);
12850: 8c 91 ld r24, X
12852: 8f 7d andi r24, 0xDF ; 223
12854: 8c 93 st X, r24
PORTD |= (1 << PORTD3);
DDRD |= (1 << DDD3);
*/
// USART0 Baud Rate Register
// set clock divider
UBRR1H = (uint8_t)(ubrr>>8);
12856: 10 92 cd 00 sts 0x00CD, r1
UBRR1L = (uint8_t)ubrr;
1285a: 84 e1 ldi r24, 0x14 ; 20
1285c: 80 93 cc 00 sts 0x00CC, r24
// enable double speed operation
UCSR1A |= (1 << U2X1);
12860: c8 ec ldi r28, 0xC8 ; 200
12862: d0 e0 ldi r29, 0x00 ; 0
12864: 88 81 ld r24, Y
12866: 82 60 ori r24, 0x02 ; 2
12868: 88 83 st Y, r24
// enable receiver and transmitter
//UCSR1B = (1<<RXEN1)|(1<<TXEN1);
UCSR1B = (1<<RXEN1);
1286a: 80 e1 ldi r24, 0x10 ; 16
1286c: 8c 93 st X, r24
// set asynchronous mode
UCSR1C &= ~(1 << UMSEL11);
1286e: ea ec ldi r30, 0xCA ; 202
12870: f0 e0 ldi r31, 0x00 ; 0
12872: 80 81 ld r24, Z
12874: 8f 77 andi r24, 0x7F ; 127
12876: 80 83 st Z, r24
UCSR1C &= ~(1 << UMSEL10);
12878: 80 81 ld r24, Z
1287a: 8f 7b andi r24, 0xBF ; 191
1287c: 80 83 st Z, r24
// no parity
UCSR1C &= ~(1 << UPM11);
1287e: 80 81 ld r24, Z
12880: 8f 7d andi r24, 0xDF ; 223
12882: 80 83 st Z, r24
UCSR1C &= ~(1 << UPM10);
12884: 80 81 ld r24, Z
12886: 8f 7e andi r24, 0xEF ; 239
12888: 80 83 st Z, r24
// 1 stop bit
UCSR1C &= ~(1 << USBS1);
1288a: 80 81 ld r24, Z
1288c: 87 7f andi r24, 0xF7 ; 247
1288e: 80 83 st Z, r24
// 8-bit
UCSR1B &= ~(1 << UCSZ12);
12890: 8c 91 ld r24, X
12892: 8b 7f andi r24, 0xFB ; 251
12894: 8c 93 st X, r24
UCSR1C |= (1 << UCSZ11);
12896: 80 81 ld r24, Z
12898: 84 60 ori r24, 0x04 ; 4
1289a: 80 83 st Z, r24
UCSR1C |= (1 << UCSZ10);
1289c: 80 81 ld r24, Z
1289e: 82 60 ori r24, 0x02 ; 2
128a0: 80 83 st Z, r24
// flush receive buffer explicit
while(UCSR1A & (1<<RXC1)) UDR1;
128a2: 88 81 ld r24, Y
128a4: 88 23 and r24, r24
128a6: 44 f4 brge .+16 ; 0x128b8 <SpektrumUartInit+0x80>
128a8: ae ec ldi r26, 0xCE ; 206
128aa: b0 e0 ldi r27, 0x00 ; 0
128ac: e8 ec ldi r30, 0xC8 ; 200
128ae: f0 e0 ldi r31, 0x00 ; 0
128b0: 8c 91 ld r24, X
128b2: 80 81 ld r24, Z
128b4: 88 23 and r24, r24
128b6: e4 f3 brlt .-8 ; 0x128b0 <SpektrumUartInit+0x78>
// enable RX-interrupts at the end
UCSR1B |= (1 << RXCIE1);
128b8: e9 ec ldi r30, 0xC9 ; 201
128ba: f0 e0 ldi r31, 0x00 ; 0
128bc: 80 81 ld r24, Z
128be: 80 68 ori r24, 0x80 ; 128
128c0: 80 83 st Z, r24
// -- End of USART1 initialisation
// restore global interrupt flags
SREG = sreg;
128c2: 9f bf out 0x3f, r25 ; 63
return;
}
128c4: df 91 pop r29
128c6: cf 91 pop r28
128c8: 08 95 ret
000128ca <SpektrumParser>:
//############################################################################
// Wird im UART-Interrupt aufgerufen
//############################################################################
void SpektrumParser(unsigned char c)
{
128ca: cf 93 push r28
128cc: df 93 push r29
static unsigned char Sync=0, FrameCnt=0, ByteHigh=0, ReSync=1, Frame2=0;
unsigned int Channel, index = 0;
signed int signal = 0, tmp;
int bCheckDelay;
// c = UDR1; // get data byte
if(ReSync == 1)
128ce: 90 91 94 02 lds r25, 0x0294
128d2: 91 30 cpi r25, 0x01 ; 1
128d4: 61 f4 brne .+24 ; 0x128ee <SpektrumParser+0x24>
{
// wait for beginning of new frame
ReSync = 0;
128d6: 10 92 94 02 sts 0x0294, r1
SpektrumTimer = MIN_FRAMEGAP;
128da: 84 e4 ldi r24, 0x44 ; 68
128dc: 80 93 b0 04 sts 0x04B0, r24
FrameCnt = 0;
128e0: 10 92 af 04 sts 0x04AF, r1
Sync = 0;
128e4: 10 92 ae 04 sts 0x04AE, r1
ByteHigh = 0;
128e8: 10 92 ad 04 sts 0x04AD, r1
128ec: 43 c1 rjmp .+646 ; 0x12b74 <SpektrumParser+0x2aa>
}
else
{
if(!SpektrumTimer) bCheckDelay = 1; else bCheckDelay = 0;//CheckDelay(FrameTimer);
128ee: 41 e0 ldi r20, 0x01 ; 1
128f0: 90 e0 ldi r25, 0x00 ; 0
128f2: 20 91 b0 04 lds r18, 0x04B0
128f6: 21 11 cpse r18, r1
128f8: 40 e0 ldi r20, 0x00 ; 0
128fa: 24 2f mov r18, r20
128fc: 39 2f mov r19, r25
if ( Sync == 0 )
128fe: 90 91 ae 04 lds r25, 0x04AE
12902: 91 11 cpse r25, r1
12904: 18 c0 rjmp .+48 ; 0x12936 <SpektrumParser+0x6c>
{
if(bCheckDelay)
12906: 23 2b or r18, r19
12908: 61 f0 breq .+24 ; 0x12922 <SpektrumParser+0x58>
{
// nach einer Pause von mind. 7ms erstes Sync-Character gefunden
// Zeichen ignorieren, da Bedeutung unbekannt
Sync = 1;
1290a: 81 e0 ldi r24, 0x01 ; 1
1290c: 80 93 ae 04 sts 0x04AE, r24
FrameCnt ++;
12910: 80 91 af 04 lds r24, 0x04AF
12914: 8f 5f subi r24, 0xFF ; 255
12916: 80 93 af 04 sts 0x04AF, r24
SpektrumTimer = MAX_BYTEGAP;
1291a: 83 e0 ldi r24, 0x03 ; 3
1291c: 80 93 b0 04 sts 0x04B0, r24
12920: 12 c1 rjmp .+548 ; 0x12b46 <SpektrumParser+0x27c>
}
else
{
// Zeichen kam vor Ablauf der 7ms Sync-Pause
// warten auf erstes Sync-Zeichen
SpektrumTimer = MIN_FRAMEGAP;
12922: 84 e4 ldi r24, 0x44 ; 68
12924: 80 93 b0 04 sts 0x04B0, r24
FrameCnt = 0;
12928: 10 92 af 04 sts 0x04AF, r1
Sync = 0;
1292c: 10 92 ae 04 sts 0x04AE, r1
ByteHigh = 0;
12930: 10 92 ad 04 sts 0x04AD, r1
12934: 08 c1 rjmp .+528 ; 0x12b46 <SpektrumParser+0x27c>
}
}
else if((Sync == 1) && !bCheckDelay)
12936: 91 30 cpi r25, 0x01 ; 1
12938: 79 f4 brne .+30 ; 0x12958 <SpektrumParser+0x8e>
1293a: 23 2b or r18, r19
1293c: 09 f0 breq .+2 ; 0x12940 <SpektrumParser+0x76>
1293e: f9 c0 rjmp .+498 ; 0x12b32 <SpektrumParser+0x268>
{
// zweites Sync-Character ignorieren, Bedeutung unbekannt
Sync = 2;
12940: 82 e0 ldi r24, 0x02 ; 2
12942: 80 93 ae 04 sts 0x04AE, r24
FrameCnt ++;
12946: 80 91 af 04 lds r24, 0x04AF
1294a: 8f 5f subi r24, 0xFF ; 255
1294c: 80 93 af 04 sts 0x04AF, r24
SpektrumTimer = MAX_BYTEGAP;
12950: 83 e0 ldi r24, 0x03 ; 3
12952: 80 93 b0 04 sts 0x04B0, r24
12956: f7 c0 rjmp .+494 ; 0x12b46 <SpektrumParser+0x27c>
}
else if((Sync == 2) && !bCheckDelay)
12958: 92 30 cpi r25, 0x02 ; 2
1295a: d9 f4 brne .+54 ; 0x12992 <SpektrumParser+0xc8>
1295c: 23 2b or r18, r19
1295e: 09 f0 breq .+2 ; 0x12962 <SpektrumParser+0x98>
12960: e8 c0 rjmp .+464 ; 0x12b32 <SpektrumParser+0x268>
{
SpektrumTimer = MAX_BYTEGAP;
12962: 93 e0 ldi r25, 0x03 ; 3
12964: 90 93 b0 04 sts 0x04B0, r25
// Datenbyte high
ByteHigh = c;
12968: 80 93 ad 04 sts 0x04AD, r24
if (FrameCnt == 2)
1296c: 90 91 af 04 lds r25, 0x04AF
12970: 92 30 cpi r25, 0x02 ; 2
12972: 41 f4 brne .+16 ; 0x12984 <SpektrumParser+0xba>
{
// is 1st Byte of Channel-data
// Frame 1 with Channel 1-7 comming next
Frame2 = 0;
if(ByteHigh & 0x80)
12974: 88 23 and r24, r24
12976: 1c f0 brlt .+6 ; 0x1297e <SpektrumParser+0xb4>
ByteHigh = c;
if (FrameCnt == 2)
{
// is 1st Byte of Channel-data
// Frame 1 with Channel 1-7 comming next
Frame2 = 0;
12978: 10 92 ac 04 sts 0x04AC, r1
1297c: 03 c0 rjmp .+6 ; 0x12984 <SpektrumParser+0xba>
if(ByteHigh & 0x80)
{
// DS9: Frame 2 with Channel 8-9 comming next
Frame2 = 1;
1297e: 81 e0 ldi r24, 0x01 ; 1
12980: 80 93 ac 04 sts 0x04AC, r24
}
}
Sync = 3;
12984: 83 e0 ldi r24, 0x03 ; 3
12986: 80 93 ae 04 sts 0x04AE, r24
FrameCnt ++;
1298a: 9f 5f subi r25, 0xFF ; 255
1298c: 90 93 af 04 sts 0x04AF, r25
12990: da c0 rjmp .+436 ; 0x12b46 <SpektrumParser+0x27c>
}
else if((Sync == 3) && !bCheckDelay)
12992: 93 30 cpi r25, 0x03 ; 3
12994: 09 f0 breq .+2 ; 0x12998 <SpektrumParser+0xce>
12996: cd c0 rjmp .+410 ; 0x12b32 <SpektrumParser+0x268>
12998: 23 2b or r18, r19
1299a: 09 f0 breq .+2 ; 0x1299e <SpektrumParser+0xd4>
1299c: ca c0 rjmp .+404 ; 0x12b32 <SpektrumParser+0x268>
{
// Datenbyte low
// High-Byte for next channel comes next
SpektrumTimer = MAX_BYTEGAP;
1299e: 90 93 b0 04 sts 0x04B0, r25
Sync = 2;
129a2: 92 e0 ldi r25, 0x02 ; 2
129a4: 90 93 ae 04 sts 0x04AE, r25
FrameCnt ++;
129a8: 90 91 af 04 lds r25, 0x04AF
129ac: 9f 5f subi r25, 0xFF ; 255
129ae: 90 93 af 04 sts 0x04AF, r25
Channel = ((unsigned int)ByteHigh << 8) | c;
129b2: 20 91 ad 04 lds r18, 0x04AD
129b6: 90 e0 ldi r25, 0x00 ; 0
129b8: 92 2b or r25, r18
if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM)
129ba: 30 91 65 05 lds r19, 0x0565
129be: 31 30 cpi r19, 0x01 ; 1
129c0: 59 f4 brne .+22 ; 0x129d8 <SpektrumParser+0x10e>
{
signal = Channel & 0x3ff;
129c2: 93 70 andi r25, 0x03 ; 3
signal -= 0x200; // Offset, range 0x000..0x3ff?
129c4: 92 50 subi r25, 0x02 ; 2
signal = signal/3; // scaling to fit PPM resolution
129c6: 63 e0 ldi r22, 0x03 ; 3
129c8: 70 e0 ldi r23, 0x00 ; 0
129ca: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
index = (ByteHigh >> 2) & 0x0f;
129ce: 26 95 lsr r18
129d0: 26 95 lsr r18
129d2: 2f 70 andi r18, 0x0F ; 15
129d4: 30 e0 ldi r19, 0x00 ; 0
129d6: 1c c0 rjmp .+56 ; 0x12a10 <SpektrumParser+0x146>
}
else
if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_HI_RES)
129d8: 32 30 cpi r19, 0x02 ; 2
129da: 61 f4 brne .+24 ; 0x129f4 <SpektrumParser+0x12a>
{
signal = Channel & 0x7ff;
129dc: 97 70 andi r25, 0x07 ; 7
signal -= 0x400; // Offset, range 0x000..0x7ff?
129de: 94 50 subi r25, 0x04 ; 4
signal = signal/6; // scaling to fit PPM resolution
129e0: 66 e0 ldi r22, 0x06 ; 6
129e2: 70 e0 ldi r23, 0x00 ; 0
129e4: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
index = (ByteHigh >> 3) & 0x0f;
129e8: 26 95 lsr r18
129ea: 26 95 lsr r18
129ec: 26 95 lsr r18
129ee: 2f 70 andi r18, 0x0F ; 15
129f0: 30 e0 ldi r19, 0x00 ; 0
129f2: 0e c0 rjmp .+28 ; 0x12a10 <SpektrumParser+0x146>
}
else
//if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_LOW_RES)
{
signal = Channel & 0x3ff;
129f4: 93 70 andi r25, 0x03 ; 3
signal -= 360; // Offset, range 0x000..0x3ff?
129f6: 88 56 subi r24, 0x68 ; 104
129f8: 91 40 sbci r25, 0x01 ; 1
signal = signal/2; // scaling to fit PPM resolution
129fa: bc 01 movw r22, r24
129fc: 99 23 and r25, r25
129fe: 14 f4 brge .+4 ; 0x12a04 <SpektrumParser+0x13a>
12a00: 6f 5f subi r22, 0xFF ; 255
12a02: 7f 4f sbci r23, 0xFF ; 255
12a04: 75 95 asr r23
12a06: 67 95 ror r22
index = (ByteHigh >> 2) & 0x0f;
12a08: 26 95 lsr r18
12a0a: 26 95 lsr r18
12a0c: 2f 70 andi r18, 0x0F ; 15
12a0e: 30 e0 ldi r19, 0x00 ; 0
}
index++;
12a10: 2f 5f subi r18, 0xFF ; 255
12a12: 3f 4f sbci r19, 0xFF ; 255
if(index < 13)
12a14: 2d 30 cpi r18, 0x0D ; 13
12a16: 31 05 cpc r19, r1
12a18: 08 f0 brcs .+2 ; 0x12a1c <SpektrumParser+0x152>
12a1a: 84 c0 rjmp .+264 ; 0x12b24 <SpektrumParser+0x25a>
// Stabiles Signal
#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4)
else if (index == 4) index = 2;
#endif
if(abs(signal - PPM_in[index]) < 6)
12a1c: f9 01 movw r30, r18
12a1e: ee 0f add r30, r30
12a20: ff 1f adc r31, r31
12a22: ef 5c subi r30, 0xCF ; 207
12a24: f7 4f sbci r31, 0xF7 ; 247
12a26: 80 81 ld r24, Z
12a28: 91 81 ldd r25, Z+1 ; 0x01
12a2a: ab 01 movw r20, r22
12a2c: 48 1b sub r20, r24
12a2e: 59 0b sbc r21, r25
12a30: ca 01 movw r24, r20
12a32: 99 23 and r25, r25
12a34: 24 f4 brge .+8 ; 0x12a3e <SpektrumParser+0x174>
12a36: 88 27 eor r24, r24
12a38: 99 27 eor r25, r25
12a3a: 84 1b sub r24, r20
12a3c: 95 0b sbc r25, r21
12a3e: 06 97 sbiw r24, 0x06 ; 6
12a40: 04 f5 brge .+64 ; 0x12a82 <SpektrumParser+0x1b8>
{
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
12a42: e0 91 a8 05 lds r30, 0x05A8
12a46: ee 23 and r30, r30
12a48: 51 f0 breq .+20 ; 0x12a5e <SpektrumParser+0x194>
12a4a: f0 e0 ldi r31, 0x00 ; 0
12a4c: ee 0f add r30, r30
12a4e: ff 1f adc r31, r31
12a50: ef 5c subi r30, 0xCF ; 207
12a52: f7 4f sbci r31, 0xF7 ; 247
12a54: 80 81 ld r24, Z
12a56: 91 81 ldd r25, Z+1 ; 0x01
12a58: 84 36 cpi r24, 0x64 ; 100
12a5a: 91 05 cpc r25, r1
12a5c: 94 f4 brge .+36 ; 0x12a82 <SpektrumParser+0x1b8>
{
if(SenderOkay < 200) SenderOkay += 10;
12a5e: 80 91 04 04 lds r24, 0x0404
12a62: 88 3c cpi r24, 0xC8 ; 200
12a64: 30 f4 brcc .+12 ; 0x12a72 <SpektrumParser+0x1a8>
12a66: 80 91 04 04 lds r24, 0x0404
12a6a: 86 5f subi r24, 0xF6 ; 246
12a6c: 80 93 04 04 sts 0x0404, r24
12a70: 08 c0 rjmp .+16 ; 0x12a82 <SpektrumParser+0x1b8>
else
{
SenderOkay = 200;
12a72: 88 ec ldi r24, 0xC8 ; 200
12a74: 80 93 04 04 sts 0x0404, r24
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input
12a78: ef e6 ldi r30, 0x6F ; 111
12a7a: f0 e0 ldi r31, 0x00 ; 0
12a7c: 80 81 ld r24, Z
12a7e: 8f 7d andi r24, 0xDF ; 223
12a80: 80 83 st Z, r24
}
}
}
tmp = (3 * (PPM_in[index]) + signal) / 4;
12a82: f9 01 movw r30, r18
12a84: ee 0f add r30, r30
12a86: ff 1f adc r31, r31
12a88: ef 5c subi r30, 0xCF ; 207
12a8a: f7 4f sbci r31, 0xF7 ; 247
12a8c: 80 81 ld r24, Z
12a8e: 91 81 ldd r25, Z+1 ; 0x01
12a90: fc 01 movw r30, r24
12a92: ee 0f add r30, r30
12a94: ff 1f adc r31, r31
12a96: e8 0f add r30, r24
12a98: f9 1f adc r31, r25
12a9a: e6 0f add r30, r22
12a9c: f7 1f adc r31, r23
12a9e: ff 23 and r31, r31
12aa0: 0c f4 brge .+2 ; 0x12aa4 <SpektrumParser+0x1da>
12aa2: 33 96 adiw r30, 0x03 ; 3
12aa4: f5 95 asr r31
12aa6: e7 95 ror r30
12aa8: f5 95 asr r31
12aaa: e7 95 ror r30
if(tmp > signal+1) tmp--; else
12aac: cb 01 movw r24, r22
12aae: 01 96 adiw r24, 0x01 ; 1
12ab0: 8e 17 cp r24, r30
12ab2: 9f 07 cpc r25, r31
12ab4: 14 f4 brge .+4 ; 0x12aba <SpektrumParser+0x1f0>
12ab6: 31 97 sbiw r30, 0x01 ; 1
12ab8: 06 c0 rjmp .+12 ; 0x12ac6 <SpektrumParser+0x1fc>
if(tmp < signal-1) tmp++;
12aba: 61 50 subi r22, 0x01 ; 1
12abc: 71 09 sbc r23, r1
12abe: e6 17 cp r30, r22
12ac0: f7 07 cpc r31, r23
12ac2: 0c f4 brge .+2 ; 0x12ac6 <SpektrumParser+0x1fc>
12ac4: 31 96 adiw r30, 0x01 ; 1
else if (index == 7) s_update(7,signal); // R Trim (CH7)
else if (index == 5) s_update(8,signal); // AUX2 (CH8)
else if (index == 8) s_update(11,signal); // AUX3 (CH11)
#else
if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
12ac6: 80 91 04 04 lds r24, 0x0404
12aca: 84 3b cpi r24, 0xB4 ; 180
12acc: d0 f0 brcs .+52 ; 0x12b02 <SpektrumParser+0x238>
12ace: e9 01 movw r28, r18
12ad0: cc 0f add r28, r28
12ad2: dd 1f adc r29, r29
12ad4: de 01 movw r26, r28
12ad6: af 5c subi r26, 0xCF ; 207
12ad8: b7 4f sbci r27, 0xF7 ; 247
12ada: 8d 91 ld r24, X+
12adc: 9c 91 ld r25, X
12ade: af 01 movw r20, r30
12ae0: 48 1b sub r20, r24
12ae2: 59 0b sbc r21, r25
12ae4: ca 01 movw r24, r20
12ae6: 63 e0 ldi r22, 0x03 ; 3
12ae8: 70 e0 ldi r23, 0x00 ; 0
12aea: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
12aee: cb 01 movw r24, r22
12af0: 88 0f add r24, r24
12af2: 99 1f adc r25, r25
12af4: 68 0f add r22, r24
12af6: 79 1f adc r23, r25
12af8: c9 58 subi r28, 0x89 ; 137
12afa: d7 4f sbci r29, 0xF7 ; 247
12afc: 79 83 std Y+1, r23 ; 0x01
12afe: 68 83 st Y, r22
12b00: 08 c0 rjmp .+16 ; 0x12b12 <SpektrumParser+0x248>
else PPM_diff[index] = 0;
12b02: d9 01 movw r26, r18
12b04: aa 0f add r26, r26
12b06: bb 1f adc r27, r27
12b08: a9 58 subi r26, 0x89 ; 137
12b0a: b7 4f sbci r27, 0xF7 ; 247
12b0c: 11 96 adiw r26, 0x01 ; 1
12b0e: 1c 92 st X, r1
12b10: 1e 92 st -X, r1
PPM_in[index] = tmp;
12b12: d9 01 movw r26, r18
12b14: aa 0f add r26, r26
12b16: bb 1f adc r27, r27
12b18: af 5c subi r26, 0xCF ; 207
12b1a: b7 4f sbci r27, 0xF7 ; 247
12b1c: 11 96 adiw r26, 0x01 ; 1
12b1e: fc 93 st X, r31
12b20: ee 93 st -X, r30
12b22: 11 c0 rjmp .+34 ; 0x12b46 <SpektrumParser+0x27c>
#endif
}
else if(index > 17) ReSync = 1; // hier stimmt was nicht: neu synchronisieren
12b24: 22 31 cpi r18, 0x12 ; 18
12b26: 31 05 cpc r19, r1
12b28: 70 f0 brcs .+28 ; 0x12b46 <SpektrumParser+0x27c>
12b2a: 81 e0 ldi r24, 0x01 ; 1
12b2c: 80 93 94 02 sts 0x0294, r24
12b30: 0a c0 rjmp .+20 ; 0x12b46 <SpektrumParser+0x27c>
}
else
{
// hier stimmt was nicht: neu synchronisieren
ReSync = 1;
12b32: 81 e0 ldi r24, 0x01 ; 1
12b34: 80 93 94 02 sts 0x0294, r24
FrameCnt = 0;
12b38: 10 92 af 04 sts 0x04AF, r1
Frame2 = 0;
12b3c: 10 92 ac 04 sts 0x04AC, r1
// new frame next, nach fruehestens 7ms erwartet
SpektrumTimer = MIN_FRAMEGAP;
12b40: 84 e4 ldi r24, 0x44 ; 68
12b42: 80 93 b0 04 sts 0x04B0, r24
}
// 16 Bytes eingetroffen -> Komplett
if(FrameCnt >= 16)
12b46: 80 91 af 04 lds r24, 0x04AF
12b4a: 80 31 cpi r24, 0x10 ; 16
12b4c: 98 f0 brcs .+38 ; 0x12b74 <SpektrumParser+0x2aa>
{
// Frame complete
if(Frame2 == 0)
12b4e: 80 91 ac 04 lds r24, 0x04AC
12b52: 81 11 cpse r24, r1
12b54: 06 c0 rjmp .+12 ; 0x12b62 <SpektrumParser+0x298>
{
// Null bedeutet: Neue Daten
// nur beim ersten Frame (CH 0-7) setzen
if(!ReSync) NewPpmData = 0;
12b56: 80 91 94 02 lds r24, 0x0294
12b5a: 81 11 cpse r24, r1
12b5c: 02 c0 rjmp .+4 ; 0x12b62 <SpektrumParser+0x298>
12b5e: 10 92 93 02 sts 0x0293, r1
}
FrameCnt = 0;
12b62: 10 92 af 04 sts 0x04AF, r1
Frame2 = 0;
12b66: 10 92 ac 04 sts 0x04AC, r1
Sync = 0;
12b6a: 10 92 ae 04 sts 0x04AE, r1
SpektrumTimer = MIN_FRAMEGAP;
12b6e: 84 e4 ldi r24, 0x44 ; 68
12b70: 80 93 b0 04 sts 0x04B0, r24
}
}
}
12b74: df 91 pop r29
12b76: cf 91 pop r28
12b78: 08 95 ret
00012b7a <SPI_MasterInit>:
#ifdef USE_SPI_COMMUNICATION
//------------------------------------------------------
void SPI_MasterInit(void)
{
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK); // Set MOSI and SCK output, all others input
12b7a: 84 b1 in r24, 0x04 ; 4
12b7c: 80 6a ori r24, 0xA0 ; 160
12b7e: 84 b9 out 0x04, r24 ; 4
SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT);
12b80: 3d 9a sbi 0x07, 5 ; 7
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPR0)|(0<<SPIE); // Enable SPI, Master, set clock rate fck/64
12b82: 82 e5 ldi r24, 0x52 ; 82
12b84: 8c bd out 0x2c, r24 ; 44
SPSR = 0;//(1<<SPI2X);
12b86: 1d bc out 0x2d, r1 ; 45
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT);
12b88: 45 9a sbi 0x08, 5 ; 8
SPITransferCompleted = 1;
12b8a: 81 e0 ldi r24, 0x01 ; 1
12b8c: 80 93 d6 08 sts 0x08D6, r24
//SPDR = 0x00; // dummy write
ToNaviCtrl.Sync1 = 0xAA;
12b90: 8a ea ldi r24, 0xAA ; 170
12b92: 80 93 e7 08 sts 0x08E7, r24
ToNaviCtrl.Sync2 = 0x83;
12b96: 83 e8 ldi r24, 0x83 ; 131
12b98: 80 93 e8 08 sts 0x08E8, r24
ToNaviCtrl.Command = SPI_FCCMD_USER;
12b9c: 8a e0 ldi r24, 0x0A ; 10
12b9e: 80 93 e9 08 sts 0x08E9, r24
ToNaviCtrl.IntegralNick = 0;
12ba2: 10 92 eb 08 sts 0x08EB, r1
12ba6: 10 92 ea 08 sts 0x08EA, r1
ToNaviCtrl.IntegralRoll = 0;
12baa: 10 92 ed 08 sts 0x08ED, r1
12bae: 10 92 ec 08 sts 0x08EC, r1
FromNaviCtrl_Value.SerialDataOkay = 0;
12bb2: 10 92 4f 09 sts 0x094F, r1
SPI_RxDataValid = 0;
12bb6: 10 92 0b 09 sts 0x090B, r1
12bba: 08 95 ret
00012bbc <SPI_TransmitByte>:
{
static unsigned char SPI_RXState = 0;
unsigned char rxdata;
static unsigned char rxchksum;
if (SPITransferCompleted) return;
12bbc: 80 91 d6 08 lds r24, 0x08D6
12bc0: 81 11 cpse r24, r1
12bc2: 79 c0 rjmp .+242 ; 0x12cb6 <SPI_TransmitByte+0xfa>
if (!(SPSR & (1 << SPIF))) return;
12bc4: 0d b4 in r0, 0x2d ; 45
12bc6: 07 fe sbrs r0, 7
12bc8: 76 c0 rjmp .+236 ; 0x12cb6 <SPI_TransmitByte+0xfa>
BytegapSPI = SPI_BYTEGAP;
12bca: 85 e0 ldi r24, 0x05 ; 5
12bcc: 80 93 cc 04 sts 0x04CC, r24
// _delay_us(30);
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave
12bd0: 45 9a sbi 0x08, 5 ; 8
rxdata = SPDR;
12bd2: 9e b5 in r25, 0x2e ; 46
switch ( SPI_RXState)
12bd4: 80 91 b4 04 lds r24, 0x04B4
12bd8: 81 30 cpi r24, 0x01 ; 1
12bda: 71 f0 breq .+28 ; 0x12bf8 <SPI_TransmitByte+0x3c>
12bdc: 18 f0 brcs .+6 ; 0x12be4 <SPI_TransmitByte+0x28>
12bde: 82 30 cpi r24, 0x02 ; 2
12be0: c9 f0 breq .+50 ; 0x12c14 <SPI_TransmitByte+0x58>
12be2: 3f c0 rjmp .+126 ; 0x12c62 <SPI_TransmitByte+0xa6>
{
case 0:
SPI_RxBufferIndex = 0;
12be4: 10 92 0a 09 sts 0x090A, r1
rxchksum = rxdata;
12be8: 90 93 b3 04 sts 0x04B3, r25
if (rxdata == 0x81 ) { SPI_RXState = 1; } // 1. Syncbyte ok
12bec: 91 38 cpi r25, 0x81 ; 129
12bee: c9 f5 brne .+114 ; 0x12c62 <SPI_TransmitByte+0xa6>
12bf0: 81 e0 ldi r24, 0x01 ; 1
12bf2: 80 93 b4 04 sts 0x04B4, r24
12bf6: 35 c0 rjmp .+106 ; 0x12c62 <SPI_TransmitByte+0xa6>
break;
case 1:
if (rxdata == 0x55) { rxchksum += rxdata; SPI_RXState = 2; } // 2. Syncbyte ok
12bf8: 95 35 cpi r25, 0x55 ; 85
12bfa: 49 f4 brne .+18 ; 0x12c0e <SPI_TransmitByte+0x52>
12bfc: 80 91 b3 04 lds r24, 0x04B3
12c00: 8b 5a subi r24, 0xAB ; 171
12c02: 80 93 b3 04 sts 0x04B3, r24
12c06: 82 e0 ldi r24, 0x02 ; 2
12c08: 80 93 b4 04 sts 0x04B4, r24
12c0c: 2a c0 rjmp .+84 ; 0x12c62 <SPI_TransmitByte+0xa6>
else SPI_RXState = 0;
12c0e: 10 92 b4 04 sts 0x04B4, r1
12c12: 27 c0 rjmp .+78 ; 0x12c62 <SPI_TransmitByte+0xa6>
break;
case 2:
SPI_Buffer[SPI_RxBufferIndex++]= rxdata; // get data
12c14: e0 91 0a 09 lds r30, 0x090A
12c18: 81 e0 ldi r24, 0x01 ; 1
12c1a: 8e 0f add r24, r30
12c1c: 80 93 0a 09 sts 0x090A, r24
12c20: f0 e0 ldi r31, 0x00 ; 0
12c22: e4 5d subi r30, 0xD4 ; 212
12c24: f6 4f sbci r31, 0xF6 ; 246
12c26: 90 83 st Z, r25
//DebugOut.Analog[19]++;
if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl))
12c28: 80 32 cpi r24, 0x20 ; 32
12c2a: b0 f0 brcs .+44 ; 0x12c58 <SPI_TransmitByte+0x9c>
{
if (rxdata == rxchksum)
12c2c: 80 91 b3 04 lds r24, 0x04B3
12c30: 98 13 cpse r25, r24
12c32: 0d c0 rjmp .+26 ; 0x12c4e <SPI_TransmitByte+0x92>
{
unsigned char *ptr = (unsigned char *)&FromNaviCtrl;
memcpy(ptr, (unsigned char *) SPI_Buffer, sizeof(SPI_Buffer));
12c34: 80 e2 ldi r24, 0x20 ; 32
12c36: ec e2 ldi r30, 0x2C ; 44
12c38: f9 e0 ldi r31, 0x09 ; 9
12c3a: ac e0 ldi r26, 0x0C ; 12
12c3c: b9 e0 ldi r27, 0x09 ; 9
12c3e: 01 90 ld r0, Z+
12c40: 0d 92 st X+, r0
12c42: 8a 95 dec r24
12c44: e1 f7 brne .-8 ; 0x12c3e <SPI_TransmitByte+0x82>
SPI_RxDataValid = 1;
12c46: 81 e0 ldi r24, 0x01 ; 1
12c48: 80 93 0b 09 sts 0x090B, r24
12c4c: 02 c0 rjmp .+4 ; 0x12c52 <SPI_TransmitByte+0x96>
}
else
{
SPI_RxDataValid = 0;
12c4e: 10 92 0b 09 sts 0x090B, r1
}
SPI_RXState = 0;
12c52: 10 92 b4 04 sts 0x04B4, r1
12c56: 05 c0 rjmp .+10 ; 0x12c62 <SPI_TransmitByte+0xa6>
}
else rxchksum += rxdata;
12c58: 80 91 b3 04 lds r24, 0x04B3
12c5c: 98 0f add r25, r24
12c5e: 90 93 b3 04 sts 0x04B3, r25
break;
}
if (SPI_BufferIndex < sizeof(ToNaviCtrl))
12c62: 80 91 e6 08 lds r24, 0x08E6
12c66: 82 32 cpi r24, 0x22 ; 34
12c68: f0 f4 brcc .+60 ; 0x12ca6 <SPI_TransmitByte+0xea>
{
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave
12c6a: 45 98 cbi 0x08, 5 ; 8
...
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
SPDR = SPI_TX_Buffer[SPI_BufferIndex];
12c74: 80 91 e6 08 lds r24, 0x08E6
12c78: e0 91 df 08 lds r30, 0x08DF
12c7c: f0 91 e0 08 lds r31, 0x08E0
12c80: e8 0f add r30, r24
12c82: f1 1d adc r31, r1
12c84: 80 81 ld r24, Z
12c86: 8e bd out 0x2e, r24 ; 46
ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex];
12c88: e8 e0 ldi r30, 0x08 ; 8
12c8a: f9 e0 ldi r31, 0x09 ; 9
12c8c: 80 91 e6 08 lds r24, 0x08E6
12c90: a0 91 df 08 lds r26, 0x08DF
12c94: b0 91 e0 08 lds r27, 0x08E0
12c98: a8 0f add r26, r24
12c9a: b1 1d adc r27, r1
12c9c: 9c 91 ld r25, X
12c9e: 80 81 ld r24, Z
12ca0: 89 0f add r24, r25
12ca2: 80 83 st Z, r24
12ca4: 03 c0 rjmp .+6 ; 0x12cac <SPI_TransmitByte+0xf0>
}
else SPITransferCompleted = 1;
12ca6: 81 e0 ldi r24, 0x01 ; 1
12ca8: 80 93 d6 08 sts 0x08D6, r24
SPI_BufferIndex++;
12cac: 80 91 e6 08 lds r24, 0x08E6
12cb0: 8f 5f subi r24, 0xFF ; 255
12cb2: 80 93 e6 08 sts 0x08E6, r24
12cb6: 08 95 ret
00012cb8 <UpdateSPI_Buffer>:
}
//------------------------------------------------------
void UpdateSPI_Buffer(void)
{
12cb8: cf 92 push r12
12cba: df 92 push r13
12cbc: ef 92 push r14
12cbe: ff 92 push r15
12cc0: 0f 93 push r16
12cc2: 1f 93 push r17
signed int tmp;
static unsigned char motorindex, oldcommand = SPI_NCCMD_VERSION, slow_command;
ToNaviCtrl.IntegralNick = (int) (IntegralNick / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
12cc4: c0 90 5a 05 lds r12, 0x055A
12cc8: d1 2c mov r13, r1
12cca: cc 0c add r12, r12
12ccc: dd 1c adc r13, r13
12cce: cc 0c add r12, r12
12cd0: dd 1c adc r13, r13
12cd2: ee 24 eor r14, r14
12cd4: d7 fc sbrc r13, 7
12cd6: e0 94 com r14
12cd8: fe 2c mov r15, r14
12cda: 60 91 42 04 lds r22, 0x0442
12cde: 70 91 43 04 lds r23, 0x0443
12ce2: 80 91 44 04 lds r24, 0x0444
12ce6: 90 91 45 04 lds r25, 0x0445
12cea: a7 01 movw r20, r14
12cec: 96 01 movw r18, r12
12cee: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
12cf2: 30 93 eb 08 sts 0x08EB, r19
12cf6: 20 93 ea 08 sts 0x08EA, r18
ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
12cfa: 60 91 3e 04 lds r22, 0x043E
12cfe: 70 91 3f 04 lds r23, 0x043F
12d02: 80 91 40 04 lds r24, 0x0440
12d06: 90 91 41 04 lds r25, 0x0441
12d0a: a7 01 movw r20, r14
12d0c: 96 01 movw r18, r12
12d0e: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
12d12: 30 93 ed 08 sts 0x08ED, r19
12d16: 20 93 ec 08 sts 0x08EC, r18
ToNaviCtrl.GyroCompass = (10 * ErsatzKompass) / GIER_GRAD_FAKTOR;
12d1a: 80 91 6e 06 lds r24, 0x066E
12d1e: 90 91 6f 06 lds r25, 0x066F
12d22: a0 91 70 06 lds r26, 0x0670
12d26: b0 91 71 06 lds r27, 0x0671
12d2a: 88 0f add r24, r24
12d2c: 99 1f adc r25, r25
12d2e: aa 1f adc r26, r26
12d30: bb 1f adc r27, r27
12d32: ac 01 movw r20, r24
12d34: bd 01 movw r22, r26
12d36: 44 0f add r20, r20
12d38: 55 1f adc r21, r21
12d3a: 66 1f adc r22, r22
12d3c: 77 1f adc r23, r23
12d3e: 44 0f add r20, r20
12d40: 55 1f adc r21, r21
12d42: 66 1f adc r22, r22
12d44: 77 1f adc r23, r23
12d46: 8c 01 movw r16, r24
12d48: 9d 01 movw r18, r26
12d4a: 04 0f add r16, r20
12d4c: 15 1f adc r17, r21
12d4e: 26 1f adc r18, r22
12d50: 37 1f adc r19, r23
12d52: c9 01 movw r24, r18
12d54: b8 01 movw r22, r16
12d56: 20 91 21 01 lds r18, 0x0121
12d5a: 30 91 22 01 lds r19, 0x0122
12d5e: 40 91 23 01 lds r20, 0x0123
12d62: 50 91 24 01 lds r21, 0x0124
12d66: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
12d6a: 30 93 f3 08 sts 0x08F3, r19
12d6e: 20 93 f2 08 sts 0x08F2, r18
ToNaviCtrl.GyroGier = (signed int) AdNeutralGier - AdWertGier;
12d72: e0 90 53 04 lds r14, 0x0453
12d76: f0 90 54 04 lds r15, 0x0454
12d7a: 80 91 61 03 lds r24, 0x0361
12d7e: 90 91 62 03 lds r25, 0x0362
12d82: 97 01 movw r18, r14
12d84: 28 1b sub r18, r24
12d86: 39 0b sbc r19, r25
12d88: 30 93 f9 08 sts 0x08F9, r19
12d8c: 20 93 f8 08 sts 0x08F8, r18
ToNaviCtrl.AccNick = ((int) ACC_AMPLIFY * (NaviAccNick / NaviCntAcc))/4;
12d90: 20 91 49 04 lds r18, 0x0449
12d94: 30 91 4a 04 lds r19, 0x044A
12d98: 80 91 39 06 lds r24, 0x0639
12d9c: 90 91 3a 06 lds r25, 0x063A
12da0: b9 01 movw r22, r18
12da2: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
12da6: cb 01 movw r24, r22
12da8: 88 0f add r24, r24
12daa: 99 1f adc r25, r25
12dac: 68 0f add r22, r24
12dae: 79 1f adc r23, r25
12db0: 66 0f add r22, r22
12db2: 77 1f adc r23, r23
12db4: cb 01 movw r24, r22
12db6: 99 23 and r25, r25
12db8: 0c f4 brge .+2 ; 0x12dbc <UpdateSPI_Buffer+0x104>
12dba: 03 96 adiw r24, 0x03 ; 3
12dbc: 95 95 asr r25
12dbe: 87 95 ror r24
12dc0: 95 95 asr r25
12dc2: 87 95 ror r24
12dc4: 90 93 ef 08 sts 0x08EF, r25
12dc8: 80 93 ee 08 sts 0x08EE, r24
ToNaviCtrl.AccRoll = ((int) ACC_AMPLIFY * (NaviAccRoll / NaviCntAcc))/4;
12dcc: 80 91 6a 06 lds r24, 0x066A
12dd0: 90 91 6b 06 lds r25, 0x066B
12dd4: b9 01 movw r22, r18
12dd6: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
12dda: cb 01 movw r24, r22
12ddc: 88 0f add r24, r24
12dde: 99 1f adc r25, r25
12de0: 68 0f add r22, r24
12de2: 79 1f adc r23, r25
12de4: 66 0f add r22, r22
12de6: 77 1f adc r23, r23
12de8: cb 01 movw r24, r22
12dea: 99 23 and r25, r25
12dec: 0c f4 brge .+2 ; 0x12df0 <UpdateSPI_Buffer+0x138>
12dee: 03 96 adiw r24, 0x03 ; 3
12df0: 95 95 asr r25
12df2: 87 95 ror r24
12df4: 95 95 asr r25
12df6: 87 95 ror r24
12df8: 90 93 f1 08 sts 0x08F1, r25
12dfc: 80 93 f0 08 sts 0x08F0, r24
NaviCntAcc = 0; NaviAccNick = 0; NaviAccRoll = 0;
12e00: 10 92 4a 04 sts 0x044A, r1
12e04: 10 92 49 04 sts 0x0449, r1
12e08: 10 92 3a 06 sts 0x063A, r1
12e0c: 10 92 39 06 sts 0x0639, r1
12e10: 10 92 6b 06 sts 0x066B, r1
12e14: 10 92 6a 06 sts 0x066A, r1
// ToNaviCtrl.User8 = Parameter_UserParam8;
// ToNaviCtrl.CalState = WinkelOut.CalcState;
switch(ToNaviCtrl.Command) //
12e18: 80 91 e9 08 lds r24, 0x08E9
12e1c: 90 e0 ldi r25, 0x00 ; 0
12e1e: 0a 97 sbiw r24, 0x0a ; 10
12e20: 8a 30 cpi r24, 0x0A ; 10
12e22: 91 05 cpc r25, r1
12e24: 08 f0 brcs .+2 ; 0x12e28 <UpdateSPI_Buffer+0x170>
12e26: a1 c2 rjmp .+1346 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
12e28: 8a 55 subi r24, 0x5A ; 90
12e2a: 9f 4f sbci r25, 0xFF ; 255
12e2c: fc 01 movw r30, r24
12e2e: 0c 94 a7 b1 jmp 0x1634e ; 0x1634e <__tablejump2__>
{
case SPI_FCCMD_USER:
ToNaviCtrl.Param.Byte[0] = Parameter_UserParam1;
12e32: 80 91 e0 03 lds r24, 0x03E0
12e36: 80 93 fc 08 sts 0x08FC, r24
ToNaviCtrl.Param.Byte[1] = Parameter_UserParam2;
12e3a: 80 91 df 03 lds r24, 0x03DF
12e3e: 80 93 fd 08 sts 0x08FD, r24
ToNaviCtrl.Param.Byte[2] = Parameter_UserParam3;
12e42: 80 91 de 03 lds r24, 0x03DE
12e46: 80 93 fe 08 sts 0x08FE, r24
ToNaviCtrl.Param.Byte[3] = Parameter_UserParam4;
12e4a: 80 91 dd 03 lds r24, 0x03DD
12e4e: 80 93 ff 08 sts 0x08FF, r24
ToNaviCtrl.Param.Byte[4] = Parameter_UserParam5;
12e52: 80 91 dc 03 lds r24, 0x03DC
12e56: 80 93 00 09 sts 0x0900, r24
ToNaviCtrl.Param.Byte[5] = Parameter_UserParam6;
12e5a: 80 91 db 03 lds r24, 0x03DB
12e5e: 80 93 01 09 sts 0x0901, r24
ToNaviCtrl.Param.Byte[6] = Parameter_UserParam7;
12e62: 80 91 da 03 lds r24, 0x03DA
12e66: 80 93 02 09 sts 0x0902, r24
ToNaviCtrl.Param.Byte[7] = Parameter_UserParam8;
12e6a: 80 91 d9 03 lds r24, 0x03D9
12e6e: 80 93 03 09 sts 0x0903, r24
ToNaviCtrl.Param.Byte[8] = FC_StatusFlags;
12e72: 80 91 cb 03 lds r24, 0x03CB
12e76: 80 93 04 09 sts 0x0904, r24
//if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) ToNaviCtrl.Param.Byte[8] &= ~FC_STATUS_FLY;
FC_StatusFlags &= ~(FC_STATUS_CALIBRATE | FC_STATUS_START);
12e7a: 80 91 cb 03 lds r24, 0x03CB
12e7e: 83 7f andi r24, 0xF3 ; 243
12e80: 80 93 cb 03 sts 0x03CB, r24
ToNaviCtrl.Param.Byte[9] = ActiveParamSet;
12e84: 80 91 52 01 lds r24, 0x0152
12e88: 80 93 05 09 sts 0x0905, r24
ToNaviCtrl.Param.Byte[10] = (unsigned char) UBat; // 0.1V
12e8c: 80 91 1a 01 lds r24, 0x011A
12e90: 90 91 1b 01 lds r25, 0x011B
12e94: 80 93 06 09 sts 0x0906, r24
ToNaviCtrl.Param.Byte[11] = FC_StatusFlags2;
12e98: 80 91 ca 03 lds r24, 0x03CA
12e9c: 80 93 07 09 sts 0x0907, r24
if(!(PORTC & (1<<PORTC2))) FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16)
12ea0: 42 99 sbic 0x08, 2 ; 8
12ea2: 63 c2 rjmp .+1222 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
12ea4: 80 91 ca 03 lds r24, 0x03CA
12ea8: 87 7f andi r24, 0xF7 ; 247
12eaa: 80 93 ca 03 sts 0x03CA, r24
12eae: 5d c2 rjmp .+1210 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
break;
case SPI_FCCMD_BL_ACCU:
ToNaviCtrl.Param.Int[0] = Capacity.ActualCurrent; // 0.1A
12eb0: 80 91 15 05 lds r24, 0x0515
12eb4: 90 91 16 05 lds r25, 0x0516
12eb8: 90 93 fd 08 sts 0x08FD, r25
12ebc: 80 93 fc 08 sts 0x08FC, r24
ToNaviCtrl.Param.Byte[2] = motorindex;
12ec0: 80 91 b2 04 lds r24, 0x04B2
12ec4: 80 93 fe 08 sts 0x08FE, r24
ToNaviCtrl.Param.Byte[3] = Capacity.MinOfMaxPWM;
12ec8: 80 91 1b 05 lds r24, 0x051B
12ecc: 80 93 ff 08 sts 0x08FF, r24
ToNaviCtrl.Param.Byte[4] = GetChannelValue(EE_Parameter.NaviGpsModeChannel); // GPS-Mode control
12ed0: 80 91 8f 05 lds r24, 0x058F
12ed4: 0e 94 0e 34 call 0x681c ; 0x681c <GetChannelValue>
12ed8: 80 93 00 09 sts 0x0900, r24
ToNaviCtrl.Param.Byte[5] = VarioCharacter;
12edc: 80 91 20 01 lds r24, 0x0120
12ee0: 80 93 01 09 sts 0x0901, r24
ToNaviCtrl.Param.Byte[6] = Motor[motorindex].NotReadyCnt;
12ee4: 20 91 b2 04 lds r18, 0x04B2
12ee8: 0f e0 ldi r16, 0x0F ; 15
12eea: 20 9f mul r18, r16
12eec: f0 01 movw r30, r0
12eee: 11 24 eor r1, r1
12ef0: e9 56 subi r30, 0x69 ; 105
12ef2: f6 4f sbci r31, 0xF6 ; 246
12ef4: 86 85 ldd r24, Z+14 ; 0x0e
12ef6: 80 93 02 09 sts 0x0902, r24
ToNaviCtrl.Param.Byte[7] = Motor[motorindex].Version;
12efa: 80 81 ld r24, Z
12efc: 80 93 03 09 sts 0x0903, r24
ToNaviCtrl.Param.Byte[8] = Motor[motorindex].MaxPWM;
12f00: 86 81 ldd r24, Z+6 ; 0x06
12f02: 80 93 04 09 sts 0x0904, r24
ToNaviCtrl.Param.Byte[9] = Motor[motorindex].State;
12f06: 83 81 ldd r24, Z+3 ; 0x03
12f08: 80 93 05 09 sts 0x0905, r24
ToNaviCtrl.Param.Byte[10] = Motor[motorindex].Temperature;
12f0c: 87 81 ldd r24, Z+7 ; 0x07
12f0e: 80 93 06 09 sts 0x0906, r24
ToNaviCtrl.Param.Byte[11] = Motor[motorindex].Current;
12f12: 85 81 ldd r24, Z+5 ; 0x05
12f14: 80 93 07 09 sts 0x0907, r24
if(Mixer.Motor[++motorindex][0] <= 0) // next motor is not used ?
12f18: 2f 5f subi r18, 0xFF ; 255
12f1a: 20 93 b2 04 sts 0x04B2, r18
12f1e: 82 2f mov r24, r18
12f20: 90 e0 ldi r25, 0x00 ; 0
12f22: fc 01 movw r30, r24
12f24: ee 0f add r30, r30
12f26: ff 1f adc r31, r31
12f28: ee 0f add r30, r30
12f2a: ff 1f adc r31, r31
12f2c: e9 53 subi r30, 0x39 ; 57
12f2e: fa 4f sbci r31, 0xFA ; 250
12f30: 35 85 ldd r19, Z+13 ; 0x0d
12f32: 13 16 cp r1, r19
12f34: 0c f4 brge .+2 ; 0x12f38 <UpdateSPI_Buffer+0x280>
12f36: 19 c2 rjmp .+1074 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
while(Mixer.Motor[motorindex][0] <= 0 && motorindex) motorindex = (motorindex + 1) % 13;
12f38: 22 23 and r18, r18
12f3a: 09 f4 brne .+2 ; 0x12f3e <UpdateSPI_Buffer+0x286>
12f3c: 16 c2 rjmp .+1068 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
12f3e: 2d e0 ldi r18, 0x0D ; 13
12f40: 30 e0 ldi r19, 0x00 ; 0
12f42: 01 96 adiw r24, 0x01 ; 1
12f44: b9 01 movw r22, r18
12f46: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
12f4a: 48 2f mov r20, r24
12f4c: 99 27 eor r25, r25
12f4e: fc 01 movw r30, r24
12f50: ee 0f add r30, r30
12f52: ff 1f adc r31, r31
12f54: ee 0f add r30, r30
12f56: ff 1f adc r31, r31
12f58: e9 53 subi r30, 0x39 ; 57
12f5a: fa 4f sbci r31, 0xFA ; 250
12f5c: 55 85 ldd r21, Z+13 ; 0x0d
12f5e: 15 16 cp r1, r21
12f60: 1c f4 brge .+6 ; 0x12f68 <UpdateSPI_Buffer+0x2b0>
12f62: 40 93 b2 04 sts 0x04B2, r20
12f66: 01 c2 rjmp .+1026 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
12f68: 41 11 cpse r20, r1
12f6a: eb cf rjmp .-42 ; 0x12f42 <UpdateSPI_Buffer+0x28a>
12f6c: 40 93 b2 04 sts 0x04B2, r20
12f70: fc c1 rjmp .+1016 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
break;
case SPI_FCCMD_SLOW:
switch(slow_command)
12f72: 80 91 b1 04 lds r24, 0x04B1
12f76: 81 11 cpse r24, r1
12f78: 37 c0 rjmp .+110 ; 0x12fe8 <UpdateSPI_Buffer+0x330>
{
case 0:
ToNaviCtrl.Command = SPI_FCCMD_PARAMETER1; slow_command = 1;
12f7a: 8d e0 ldi r24, 0x0D ; 13
12f7c: 80 93 e9 08 sts 0x08E9, r24
12f80: 81 e0 ldi r24, 0x01 ; 1
12f82: 80 93 b1 04 sts 0x04B1, r24
ToNaviCtrl.Param.Byte[0] = (unsigned char) BattLowVoltageWarning; //0.1V
12f86: 80 91 53 01 lds r24, 0x0153
12f8a: 80 93 fc 08 sts 0x08FC, r24
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain; // Parameters for the Naviboard
12f8e: 80 91 90 05 lds r24, 0x0590
12f92: 80 93 fd 08 sts 0x08FD, r24
ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP;
12f96: 80 91 91 05 lds r24, 0x0591
12f9a: 80 93 fe 08 sts 0x08FE, r24
ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI;
12f9e: 80 91 92 05 lds r24, 0x0592
12fa2: 80 93 ff 08 sts 0x08FF, r24
ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD;
12fa6: 80 91 93 05 lds r24, 0x0593
12faa: 80 93 00 09 sts 0x0900, r24
ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsA;
12fae: 80 91 97 05 lds r24, 0x0597
12fb2: 80 93 01 09 sts 0x0901, r24
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsMinSat;
12fb6: 80 91 98 05 lds r24, 0x0598
12fba: 80 93 02 09 sts 0x0902, r24
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold;
12fbe: 80 91 99 05 lds r24, 0x0599
12fc2: 80 93 03 09 sts 0x0903, r24
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviMaxFlyingRange;
12fc6: 80 91 9c 05 lds r24, 0x059C
12fca: 80 93 04 09 sts 0x0904, r24
ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection;
12fce: 80 91 9a 05 lds r24, 0x059A
12fd2: 80 93 05 09 sts 0x0905, r24
ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviAccCompensation;
12fd6: 80 91 9b 05 lds r24, 0x059B
12fda: 80 93 06 09 sts 0x0906, r24
ToNaviCtrl.Param.Byte[11] = EE_Parameter.NaviAngleLimitation;
12fde: 80 91 9d 05 lds r24, 0x059D
12fe2: 80 93 07 09 sts 0x0907, r24
break;
12fe6: c1 c1 rjmp .+898 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
default:
ToNaviCtrl.Command = SPI_FCCMD_NEUTRAL; slow_command = 0;
12fe8: 82 e1 ldi r24, 0x12 ; 18
12fea: 80 93 e9 08 sts 0x08E9, r24
12fee: 10 92 b1 04 sts 0x04B1, r1
ToNaviCtrl.Param.Int[0] = AdNeutralNick; // 0 & 1
12ff2: 80 91 57 04 lds r24, 0x0457
12ff6: 90 91 58 04 lds r25, 0x0458
12ffa: 90 93 fd 08 sts 0x08FD, r25
12ffe: 80 93 fc 08 sts 0x08FC, r24
ToNaviCtrl.Param.Int[1] = AdNeutralRoll; // 2 & 3
13002: 80 91 55 04 lds r24, 0x0455
13006: 90 91 56 04 lds r25, 0x0456
1300a: 90 93 ff 08 sts 0x08FF, r25
1300e: 80 93 fe 08 sts 0x08FE, r24
ToNaviCtrl.Param.Int[2] = AdNeutralGier; // 4 & 5
13012: f0 92 01 09 sts 0x0901, r15
13016: e0 92 00 09 sts 0x0900, r14
ToNaviCtrl.Param.Byte[6] = EE_Parameter.Driftkomp;
1301a: 80 91 82 05 lds r24, 0x0582
1301e: 80 93 02 09 sts 0x0902, r24
ToNaviCtrl.Param.Byte[7] = HoverGas / 4;
13022: 80 91 e8 03 lds r24, 0x03E8
13026: 90 91 e9 03 lds r25, 0x03E9
1302a: 99 23 and r25, r25
1302c: 0c f4 brge .+2 ; 0x13030 <UpdateSPI_Buffer+0x378>
1302e: 03 96 adiw r24, 0x03 ; 3
13030: 95 95 asr r25
13032: 87 95 ror r24
13034: 95 95 asr r25
13036: 87 95 ror r24
13038: 80 93 03 09 sts 0x0903, r24
ToNaviCtrl.Param.Byte[8] = 0;
1303c: 10 92 04 09 sts 0x0904, r1
ToNaviCtrl.Param.Byte[9] = 0;
13040: 10 92 05 09 sts 0x0905, r1
ToNaviCtrl.Param.Byte[10] = 0;
13044: 10 92 06 09 sts 0x0906, r1
ToNaviCtrl.Param.Byte[11] = 0;
13048: 10 92 07 09 sts 0x0907, r1
break;
1304c: 8e c1 rjmp .+796 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
}
break;
case SPI_FCCMD_PARAMETER2:
ToNaviCtrl.Param.Byte[0] = EE_Parameter.AutoPhotoDistance; // Distance between Photo releases
1304e: 80 91 8e 05 lds r24, 0x058E
13052: 80 93 fc 08 sts 0x08FC, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
// create the ToNC_SpeakHoTT
if(EE_Parameter.Receiver != RECEIVER_HOTT)
13056: 80 91 65 05 lds r24, 0x0565
1305a: 86 30 cpi r24, 0x06 ; 6
1305c: 81 f0 breq .+32 ; 0x1307e <UpdateSPI_Buffer+0x3c6>
{
if(JetiBeep != 'B') JetiBeep = pgm_read_byte(&JETI_CODE[HoTT_Waring()]);
1305e: 80 91 5c 04 lds r24, 0x045C
13062: 82 34 cpi r24, 0x42 ; 66
13064: 51 f0 breq .+20 ; 0x1307a <UpdateSPI_Buffer+0x3c2>
13066: 0e 94 cc 60 call 0xc198 ; 0xc198 <HoTT_Waring>
1306a: e8 2f mov r30, r24
1306c: f0 e0 ldi r31, 0x00 ; 0
1306e: ed 5f subi r30, 0xFD ; 253
13070: fe 4e sbci r31, 0xEE ; 238
13072: e4 91 lpm r30, Z
13074: e0 93 5c 04 sts 0x045C, r30
13078: 02 c0 rjmp .+4 ; 0x1307e <UpdateSPI_Buffer+0x3c6>
else HoTT_Waring();
1307a: 0e 94 cc 60 call 0xc198 ; 0xc198 <HoTT_Waring>
}
ToNaviCtrl.Param.Byte[1] = ToNC_SpeakHoTT;
1307e: 80 91 81 04 lds r24, 0x0481
13082: 80 93 fd 08 sts 0x08FD, r24
#else
ToNaviCtrl.Param.Byte[1] = 0;
#endif
ToNaviCtrl.Param.Byte[2] = EE_Parameter.LandingSpeed;
13086: 80 91 b0 05 lds r24, 0x05B0
1308a: 80 93 fe 08 sts 0x08FE, r24
ToNaviCtrl.Param.Byte[3] = EE_Parameter.ComingHomeAltitude;
1308e: 80 91 a5 05 lds r24, 0x05A5
13092: 80 93 ff 08 sts 0x08FF, r24
ToNaviCtrl.Param.Byte[4] = LowVoltageHomeActive;
13096: 80 91 c0 03 lds r24, 0x03C0
1309a: 80 93 00 09 sts 0x0900, r24
ToNaviCtrl.Param.Byte[5] = ToNC_Load_WP_List;
1309e: 80 91 8a 04 lds r24, 0x048A
130a2: 80 93 01 09 sts 0x0901, r24
ToNaviCtrl.Param.Byte[6] = ToNC_Load_SingePoint;
130a6: 80 91 88 04 lds r24, 0x0488
130aa: 80 93 02 09 sts 0x0902, r24
ToNaviCtrl.Param.Byte[7] = ToNC_Store_SingePoint;
130ae: 80 91 87 04 lds r24, 0x0487
130b2: 80 93 03 09 sts 0x0903, r24
ToNC_Load_WP_List = 0;
130b6: 10 92 8a 04 sts 0x048A, r1
ToNC_Load_SingePoint = 0;
130ba: 10 92 88 04 sts 0x0488, r1
ToNC_Store_SingePoint = 0;
130be: 10 92 87 04 sts 0x0487, r1
if(Parameter_KompassWirkung) ToNaviCtrl.Param.sInt[4] = KompassSollWert; // Pos. 8 & 9
130c2: 80 91 37 01 lds r24, 0x0137
130c6: 88 23 and r24, r24
130c8: 49 f0 breq .+18 ; 0x130dc <UpdateSPI_Buffer+0x424>
130ca: 80 91 1c 04 lds r24, 0x041C
130ce: 90 91 1d 04 lds r25, 0x041D
130d2: 90 93 05 09 sts 0x0905, r25
130d6: 80 93 04 09 sts 0x0904, r24
130da: 08 c0 rjmp .+16 ; 0x130ec <UpdateSPI_Buffer+0x434>
else ToNaviCtrl.Param.sInt[4] = ErsatzKompassInGrad; // answer with the compass value if the Compass effect is zero
130dc: 80 91 21 06 lds r24, 0x0621
130e0: 90 91 22 06 lds r25, 0x0622
130e4: 90 93 05 09 sts 0x0905, r25
130e8: 80 93 04 09 sts 0x0904, r24
ToNaviCtrl.Param.Byte[10] = EE_Parameter.AutoPhotoAtitudes;
130ec: 80 91 b4 05 lds r24, 0x05B4
130f0: 80 93 06 09 sts 0x0906, r24
ToNaviCtrl.Param.Byte[11] = EE_Parameter.SingleWpSpeed;
130f4: 80 91 b5 05 lds r24, 0x05B5
130f8: 80 93 07 09 sts 0x0907, r24
break;
130fc: 36 c1 rjmp .+620 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
case SPI_FCCMD_STICK:
cli();
130fe: f8 94 cli
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
13100: e0 91 41 05 lds r30, 0x0541
13104: f0 e0 ldi r31, 0x00 ; 0
13106: ee 0f add r30, r30
13108: ff 1f adc r31, r31
1310a: ef 5c subi r30, 0xCF ; 207
1310c: f7 4f sbci r31, 0xF7 ; 247
1310e: 80 81 ld r24, Z
13110: 91 81 ldd r25, Z+1 ; 0x01
13112: 81 38 cpi r24, 0x81 ; 129
13114: 1f ef ldi r17, 0xFF ; 255
13116: 91 07 cpc r25, r17
13118: 14 f4 brge .+4 ; 0x1311e <UpdateSPI_Buffer+0x466>
1311a: 81 e8 ldi r24, 0x81 ; 129
1311c: 9f ef ldi r25, 0xFF ; 255
1311e: 80 38 cpi r24, 0x80 ; 128
13120: 91 05 cpc r25, r1
13122: 14 f0 brlt .+4 ; 0x13128 <UpdateSPI_Buffer+0x470>
13124: 8f e7 ldi r24, 0x7F ; 127
13126: 90 e0 ldi r25, 0x00 ; 0
ToNaviCtrl.Param.Byte[0] = (char) tmp;
13128: 80 93 fc 08 sts 0x08FC, r24
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
1312c: e0 91 42 05 lds r30, 0x0542
13130: f0 e0 ldi r31, 0x00 ; 0
13132: ee 0f add r30, r30
13134: ff 1f adc r31, r31
13136: ef 5c subi r30, 0xCF ; 207
13138: f7 4f sbci r31, 0xF7 ; 247
1313a: 80 81 ld r24, Z
1313c: 91 81 ldd r25, Z+1 ; 0x01
1313e: 81 38 cpi r24, 0x81 ; 129
13140: 2f ef ldi r18, 0xFF ; 255
13142: 92 07 cpc r25, r18
13144: 14 f4 brge .+4 ; 0x1314a <UpdateSPI_Buffer+0x492>
13146: 81 e8 ldi r24, 0x81 ; 129
13148: 9f ef ldi r25, 0xFF ; 255
1314a: 80 38 cpi r24, 0x80 ; 128
1314c: 91 05 cpc r25, r1
1314e: 14 f0 brlt .+4 ; 0x13154 <UpdateSPI_Buffer+0x49c>
13150: 8f e7 ldi r24, 0x7F ; 127
13152: 90 e0 ldi r25, 0x00 ; 0
ToNaviCtrl.Param.Byte[1] = (char) tmp;
13154: 80 93 fd 08 sts 0x08FD, r24
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
13158: e0 91 40 05 lds r30, 0x0540
1315c: f0 e0 ldi r31, 0x00 ; 0
1315e: ee 0f add r30, r30
13160: ff 1f adc r31, r31
13162: ef 5c subi r30, 0xCF ; 207
13164: f7 4f sbci r31, 0xF7 ; 247
13166: 80 81 ld r24, Z
13168: 91 81 ldd r25, Z+1 ; 0x01
1316a: 81 38 cpi r24, 0x81 ; 129
1316c: 3f ef ldi r19, 0xFF ; 255
1316e: 93 07 cpc r25, r19
13170: 14 f4 brge .+4 ; 0x13176 <UpdateSPI_Buffer+0x4be>
13172: 81 e8 ldi r24, 0x81 ; 129
13174: 9f ef ldi r25, 0xFF ; 255
13176: 80 38 cpi r24, 0x80 ; 128
13178: 91 05 cpc r25, r1
1317a: 14 f0 brlt .+4 ; 0x13180 <UpdateSPI_Buffer+0x4c8>
1317c: 8f e7 ldi r24, 0x7F ; 127
1317e: 90 e0 ldi r25, 0x00 ; 0
ToNaviCtrl.Param.Byte[2] = (char) tmp;
13180: 80 93 fe 08 sts 0x08FE, r24
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
13184: e0 91 3f 05 lds r30, 0x053F
13188: f0 e0 ldi r31, 0x00 ; 0
1318a: ee 0f add r30, r30
1318c: ff 1f adc r31, r31
1318e: ef 5c subi r30, 0xCF ; 207
13190: f7 4f sbci r31, 0xF7 ; 247
13192: 80 81 ld r24, Z
13194: 91 81 ldd r25, Z+1 ; 0x01
13196: 81 38 cpi r24, 0x81 ; 129
13198: 4f ef ldi r20, 0xFF ; 255
1319a: 94 07 cpc r25, r20
1319c: 14 f4 brge .+4 ; 0x131a2 <UpdateSPI_Buffer+0x4ea>
1319e: 81 e8 ldi r24, 0x81 ; 129
131a0: 9f ef ldi r25, 0xFF ; 255
sei();
131a2: 78 94 sei
131a4: 80 38 cpi r24, 0x80 ; 128
131a6: 91 05 cpc r25, r1
131a8: 14 f0 brlt .+4 ; 0x131ae <UpdateSPI_Buffer+0x4f6>
131aa: 8f e7 ldi r24, 0x7F ; 127
131ac: 90 e0 ldi r25, 0x00 ; 0
ToNaviCtrl.Param.Byte[3] = (char) tmp;
131ae: 80 93 ff 08 sts 0x08FF, r24
ToNaviCtrl.Param.Byte[4] = (unsigned char) Poti[0];
131b2: 80 91 05 04 lds r24, 0x0405
131b6: 80 93 00 09 sts 0x0900, r24
ToNaviCtrl.Param.Byte[5] = (unsigned char) Poti[1];
131ba: 80 91 06 04 lds r24, 0x0406
131be: 80 93 01 09 sts 0x0901, r24
ToNaviCtrl.Param.Byte[6] = (unsigned char) Poti[2];
131c2: 80 91 07 04 lds r24, 0x0407
131c6: 80 93 02 09 sts 0x0902, r24
ToNaviCtrl.Param.Byte[7] = (unsigned char) Poti[3];
131ca: 80 91 08 04 lds r24, 0x0408
131ce: 80 93 03 09 sts 0x0903, r24
ToNaviCtrl.Param.Byte[8] = (unsigned char) Poti[4];
131d2: 80 91 09 04 lds r24, 0x0409
131d6: 80 93 04 09 sts 0x0904, r24
ToNaviCtrl.Param.Byte[9] = (unsigned char) Poti[5];
131da: 80 91 0a 04 lds r24, 0x040A
131de: 80 93 05 09 sts 0x0905, r24
ToNaviCtrl.Param.Byte[10] = (unsigned char) Poti[6];
131e2: 80 91 0b 04 lds r24, 0x040B
131e6: 80 93 06 09 sts 0x0906, r24
ToNaviCtrl.Param.Byte[11] = (unsigned char) Poti[7];
131ea: 80 91 0c 04 lds r24, 0x040C
131ee: 80 93 07 09 sts 0x0907, r24
break;
131f2: bb c0 rjmp .+374 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
case SPI_FCCMD_MISC:
if(WinkelOut.CalcState >= 5)
131f4: 80 91 7d 0a lds r24, 0x0A7D
131f8: 85 30 cpi r24, 0x05 ; 5
131fa: 30 f0 brcs .+12 ; 0x13208 <UpdateSPI_Buffer+0x550>
{
WinkelOut.CalcState = 0;
131fc: 10 92 7d 0a sts 0x0A7D, r1
ToNaviCtrl.Param.Byte[0] = 5;
13200: 85 e0 ldi r24, 0x05 ; 5
13202: 80 93 fc 08 sts 0x08FC, r24
13206: 02 c0 rjmp .+4 ; 0x1320c <UpdateSPI_Buffer+0x554>
}
else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState;
13208: 80 93 fc 08 sts 0x08FC, r24
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviPH_LoginTime;
1320c: 80 91 9e 05 lds r24, 0x059E
13210: 80 93 fd 08 sts 0x08FD, r24
ToNaviCtrl.Param.Int[1] = (int)(HoehenWert/5);
13214: 60 91 fe 03 lds r22, 0x03FE
13218: 70 91 ff 03 lds r23, 0x03FF
1321c: 80 91 00 04 lds r24, 0x0400
13220: 90 91 01 04 lds r25, 0x0401
13224: 0f 2e mov r0, r31
13226: f5 e0 ldi r31, 0x05 ; 5
13228: cf 2e mov r12, r31
1322a: d1 2c mov r13, r1
1322c: e1 2c mov r14, r1
1322e: f1 2c mov r15, r1
13230: f0 2d mov r31, r0
13232: a7 01 movw r20, r14
13234: 96 01 movw r18, r12
13236: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
1323a: 30 93 ff 08 sts 0x08FF, r19
1323e: 20 93 fe 08 sts 0x08FE, r18
ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5);
13242: 60 91 fa 03 lds r22, 0x03FA
13246: 70 91 fb 03 lds r23, 0x03FB
1324a: 80 91 fc 03 lds r24, 0x03FC
1324e: 90 91 fd 03 lds r25, 0x03FD
13252: a7 01 movw r20, r14
13254: 96 01 movw r18, r12
13256: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
1325a: 30 93 01 09 sts 0x0901, r19
1325e: 20 93 00 09 sts 0x0900, r18
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsPLimit;
13262: 80 91 94 05 lds r24, 0x0594
13266: 80 93 02 09 sts 0x0902, r24
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviGpsILimit;
1326a: 80 91 95 05 lds r24, 0x0595
1326e: 80 93 03 09 sts 0x0903, r24
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviGpsDLimit;
13272: 80 91 96 05 lds r24, 0x0596
13276: 80 93 04 09 sts 0x0904, r24
ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay;
1327a: 80 91 04 04 lds r24, 0x0404
1327e: 80 93 05 09 sts 0x0905, r24
ToNaviCtrl.Param.Byte[10] = NC_Wait_for_LED;
13282: 80 91 9f 04 lds r24, 0x049F
13286: 80 93 06 09 sts 0x0906, r24
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil
1328a: 80 91 56 0c lds r24, 0x0C56
1328e: 90 91 57 0c lds r25, 0x0C57
13292: 99 23 and r25, r25
13294: 0c f4 brge .+2 ; 0x13298 <UpdateSPI_Buffer+0x5e0>
13296: 03 96 adiw r24, 0x03 ; 3
13298: 95 95 asr r25
1329a: 87 95 ror r24
1329c: 95 95 asr r25
1329e: 87 95 ror r24
132a0: 80 93 07 09 sts 0x0907, r24
break;
132a4: 62 c0 rjmp .+196 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
case SPI_FCCMD_VERSION:
ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR;
132a6: 82 e0 ldi r24, 0x02 ; 2
132a8: 80 93 fc 08 sts 0x08FC, r24
ToNaviCtrl.Param.Byte[1] = VERSION_MINOR;
132ac: 88 e0 ldi r24, 0x08 ; 8
132ae: 80 93 fd 08 sts 0x08FD, r24
ToNaviCtrl.Param.Byte[2] = VERSION_PATCH;
132b2: 10 92 fe 08 sts 0x08FE, r1
ToNaviCtrl.Param.Byte[3] = NC_SPI_COMPATIBLE;
132b6: 87 e4 ldi r24, 0x47 ; 71
132b8: 80 93 ff 08 sts 0x08FF, r24
ToNaviCtrl.Param.Byte[4] = PlatinenVersion;
132bc: 80 91 54 01 lds r24, 0x0154
132c0: 80 93 00 09 sts 0x0900, r24
ToNaviCtrl.Param.Byte[5] = VersionInfo.HardwareError[0];
132c4: a2 e6 ldi r26, 0x62 ; 98
132c6: ba e0 ldi r27, 0x0A ; 10
132c8: 9c 91 ld r25, X
132ca: 90 93 01 09 sts 0x0901, r25
ToNaviCtrl.Param.Byte[6] = VersionInfo.HardwareError[1];
132ce: e3 e6 ldi r30, 0x63 ; 99
132d0: fa e0 ldi r31, 0x0A ; 10
132d2: 80 81 ld r24, Z
132d4: 80 93 02 09 sts 0x0902, r24
VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; // VersionInfo.HardwareError[0] = 0;
132d8: 9f 77 andi r25, 0x7F ; 127
132da: 9c 93 st X, r25
VersionInfo.HardwareError[1] &= FC_ERROR1_MIXER;
132dc: 80 71 andi r24, 0x10 ; 16
132de: 80 83 st Z, r24
ToNaviCtrl.Param.Byte[7] = EE_Parameter.CompassOffset;
132e0: 80 91 b1 05 lds r24, 0x05B1
132e4: 80 93 03 09 sts 0x0903, r24
ToNaviCtrl.Param.Byte[8] = Parameter_GlobalConfig;
132e8: 80 91 5c 06 lds r24, 0x065C
132ec: 80 93 04 09 sts 0x0904, r24
ToNaviCtrl.Param.Byte[9] = Parameter_ExtraConfig;
132f0: 80 91 40 06 lds r24, 0x0640
132f4: 80 93 05 09 sts 0x0905, r24
ToNaviCtrl.Param.Byte[10] = EE_Parameter.OrientationAngle;
132f8: 80 91 a1 05 lds r24, 0x05A1
132fc: 80 93 06 09 sts 0x0906, r24
ToNaviCtrl.Param.Byte[11] = EE_Parameter.GlobalConfig3;
13300: 80 91 b9 05 lds r24, 0x05B9
13304: 80 93 07 09 sts 0x0907, r24
break;
13308: 30 c0 rjmp .+96 ; 0x1336a <UpdateSPI_Buffer+0x6b2>
case SPI_FCCMD_SERVOS:
ToNaviCtrl.Param.Int[0] = Capacity.UsedCapacity; // mAh
1330a: 80 91 19 05 lds r24, 0x0519
1330e: 90 91 1a 05 lds r25, 0x051A
13312: 90 93 fd 08 sts 0x08FD, r25
13316: 80 93 fc 08 sts 0x08FC, r24
ToNaviCtrl.Param.Byte[2] = Parameter_ServoNickControl;
1331a: 80 91 2f 01 lds r24, 0x012F
1331e: 80 93 fe 08 sts 0x08FE, r24
ToNaviCtrl.Param.Byte[3] = Parameter_ServoRollControl;
13322: 80 91 2e 01 lds r24, 0x012E
13326: 80 93 ff 08 sts 0x08FF, r24
ToNaviCtrl.Param.Byte[4] = DebugOut.Analog[28]; // I2C-Error counter
1332a: 80 91 80 0c lds r24, 0x0C80
1332e: 80 93 00 09 sts 0x0900, r24
ToNaviCtrl.Param.Byte[5] = FC_StatusFlags3;
13332: 80 91 c9 03 lds r24, 0x03C9
13336: 80 93 01 09 sts 0x0901, r24
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviDescendRange; // in 10m
1333a: 80 91 9f 05 lds r24, 0x059F
1333e: 80 93 02 09 sts 0x0902, r24
ToNaviCtrl.Param.Byte[7] = Parameter_MaximumAltitude;
13342: 80 91 24 06 lds r24, 0x0624
13346: 80 93 03 09 sts 0x0903, r24
ToNaviCtrl.Param.Int[4] = FlugMinutenGesamt; // 8 & 9
1334a: 80 91 60 04 lds r24, 0x0460
1334e: 90 91 61 04 lds r25, 0x0461
13352: 90 93 05 09 sts 0x0905, r25
13356: 80 93 04 09 sts 0x0904, r24
ToNaviCtrl.Param.Byte[10] = EE_Parameter.CamOrientation;
1335a: 80 91 75 05 lds r24, 0x0575
1335e: 80 93 06 09 sts 0x0906, r24
ToNaviCtrl.Param.Byte[11] = VersionInfo.BL_Firmware;
13362: 80 91 65 0a lds r24, 0x0A65
13366: 80 93 07 09 sts 0x0907, r24
break;
}
if(SPI_RxDataValid)
1336a: 80 91 0b 09 lds r24, 0x090B
1336e: 88 23 and r24, r24
13370: 09 f4 brne .+2 ; 0x13374 <UpdateSPI_Buffer+0x6bc>
13372: 71 c1 rjmp .+738 ; 0x13656 <UpdateSPI_Buffer+0x99e>
{
if(FromNaviCtrl.Command != oldcommand) NaviDataOkay = 250;
13374: 60 91 0c 09 lds r22, 0x090C
13378: 80 91 95 02 lds r24, 0x0295
1337c: 68 17 cp r22, r24
1337e: 19 f0 breq .+6 ; 0x13386 <UpdateSPI_Buffer+0x6ce>
13380: 8a ef ldi r24, 0xFA ; 250
13382: 80 93 a4 02 sts 0x02A4, r24
oldcommand = FromNaviCtrl.Command;
13386: 60 93 95 02 sts 0x0295, r22
CalculateCompassTimer = 1;
1338a: 81 e0 ldi r24, 0x01 ; 1
1338c: 80 93 4d 01 sts 0x014D, r24
if(abs(FromNaviCtrl.GPS_Nick) < 512 && abs(FromNaviCtrl.GPS_Roll) < 512 && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV))
13390: 80 91 0d 09 lds r24, 0x090D
13394: 90 91 0e 09 lds r25, 0x090E
13398: 9c 01 movw r18, r24
1339a: 21 50 subi r18, 0x01 ; 1
1339c: 3e 4f sbci r19, 0xFE ; 254
1339e: 2f 3f cpi r18, 0xFF ; 255
133a0: 33 40 sbci r19, 0x03 ; 3
133a2: b0 f4 brcc .+44 ; 0x133d0 <UpdateSPI_Buffer+0x718>
133a4: 20 91 0f 09 lds r18, 0x090F
133a8: 30 91 10 09 lds r19, 0x0910
133ac: a9 01 movw r20, r18
133ae: 41 50 subi r20, 0x01 ; 1
133b0: 5e 4f sbci r21, 0xFE ; 254
133b2: 4f 3f cpi r20, 0xFF ; 255
133b4: 53 40 sbci r21, 0x03 ; 3
133b6: 60 f4 brcc .+24 ; 0x133d0 <UpdateSPI_Buffer+0x718>
133b8: 40 91 4b 05 lds r20, 0x054B
133bc: 45 ff sbrs r20, 5
133be: 08 c0 rjmp .+16 ; 0x133d0 <UpdateSPI_Buffer+0x718>
{
GPS_Nick = FromNaviCtrl.GPS_Nick;
133c0: 90 93 6b 04 sts 0x046B, r25
133c4: 80 93 6a 04 sts 0x046A, r24
GPS_Roll = FromNaviCtrl.GPS_Roll;
133c8: 30 93 69 04 sts 0x0469, r19
133cc: 20 93 68 04 sts 0x0468, r18
// update compass readings
// MagVec.x = FromNaviCtrl.MagVecX;
// MagVec.y = FromNaviCtrl.MagVecY;
// MagVec.z = FromNaviCtrl.MagVecZ;
if(FromNaviCtrl.CompassValue <= 360) KompassValue = FromNaviCtrl.CompassValue;
133d0: 80 91 13 09 lds r24, 0x0913
133d4: 90 91 14 09 lds r25, 0x0914
133d8: 89 36 cpi r24, 0x69 ; 105
133da: f1 e0 ldi r31, 0x01 ; 1
133dc: 9f 07 cpc r25, r31
133de: 24 f4 brge .+8 ; 0x133e8 <UpdateSPI_Buffer+0x730>
133e0: 90 93 4f 01 sts 0x014F, r25
133e4: 80 93 4e 01 sts 0x014E, r24
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
if(FromNaviCtrl.BeepTime > beeptime && !DisableRcOffBeeping) beeptime = FromNaviCtrl.BeepTime;
133e8: 80 91 1d 09 lds r24, 0x091D
133ec: 90 91 1e 09 lds r25, 0x091E
133f0: 20 91 cd 04 lds r18, 0x04CD
133f4: 30 91 ce 04 lds r19, 0x04CE
133f8: 28 17 cp r18, r24
133fa: 39 07 cpc r19, r25
133fc: 40 f4 brcc .+16 ; 0x1340e <UpdateSPI_Buffer+0x756>
133fe: 20 91 66 04 lds r18, 0x0466
13402: 21 11 cpse r18, r1
13404: 04 c0 rjmp .+8 ; 0x1340e <UpdateSPI_Buffer+0x756>
13406: 90 93 ce 04 sts 0x04CE, r25
1340a: 80 93 cd 04 sts 0x04CD, r24
switch (FromNaviCtrl.Command)
1340e: 69 36 cpi r22, 0x69 ; 105
13410: 09 f4 brne .+2 ; 0x13414 <UpdateSPI_Buffer+0x75c>
13412: 85 c0 rjmp .+266 ; 0x1351e <UpdateSPI_Buffer+0x866>
13414: 30 f4 brcc .+12 ; 0x13422 <UpdateSPI_Buffer+0x76a>
13416: 67 36 cpi r22, 0x67 ; 103
13418: 59 f0 breq .+22 ; 0x13430 <UpdateSPI_Buffer+0x778>
1341a: 68 36 cpi r22, 0x68 ; 104
1341c: 09 f4 brne .+2 ; 0x13420 <UpdateSPI_Buffer+0x768>
1341e: 4a c0 rjmp .+148 ; 0x134b4 <UpdateSPI_Buffer+0x7fc>
13420: 22 c1 rjmp .+580 ; 0x13666 <UpdateSPI_Buffer+0x9ae>
13422: 6a 36 cpi r22, 0x6A ; 106
13424: 09 f4 brne .+2 ; 0x13428 <UpdateSPI_Buffer+0x770>
13426: 14 c1 rjmp .+552 ; 0x13650 <UpdateSPI_Buffer+0x998>
13428: 6b 36 cpi r22, 0x6B ; 107
1342a: 09 f4 brne .+2 ; 0x1342e <UpdateSPI_Buffer+0x776>
1342c: d7 c0 rjmp .+430 ; 0x135dc <UpdateSPI_Buffer+0x924>
1342e: 1b c1 rjmp .+566 ; 0x13666 <UpdateSPI_Buffer+0x9ae>
{
case SPI_NCCMD_KALMAN:
FromNaviCtrl_Value.Kalman_K = FromNaviCtrl.Param.sByte[0];
13430: 80 91 1f 09 lds r24, 0x091F
13434: 80 93 4c 09 sts 0x094C, r24
FromNaviCtrl_Value.Kalman_MaxFusion = FromNaviCtrl.Param.sByte[1];
13438: 80 91 20 09 lds r24, 0x0920
1343c: 80 93 4e 09 sts 0x094E, r24
FromNaviCtrl_Value.Kalman_MaxDrift = FromNaviCtrl.Param.sByte[2];
13440: 80 91 21 09 lds r24, 0x0921
13444: 80 93 4d 09 sts 0x094D, r24
KompassFusion = FromNaviCtrl.Param.sByte[3];
13448: 80 91 22 09 lds r24, 0x0922
1344c: 80 93 4c 01 sts 0x014C, r24
FromNaviCtrl_Value.GpsZ = FromNaviCtrl.Param.Byte[4];
13450: 80 91 23 09 lds r24, 0x0923
13454: 80 93 50 09 sts 0x0950, r24
FromNC_Rotate_C = FromNaviCtrl.Param.Byte[5];
13458: 80 91 24 09 lds r24, 0x0924
1345c: 80 93 a5 02 sts 0x02A5, r24
FromNC_Rotate_S = FromNaviCtrl.Param.Byte[6];
13460: 80 91 25 09 lds r24, 0x0925
13464: 80 93 be 04 sts 0x04BE, r24
GPS_Aid_StickMultiplikator = FromNaviCtrl.Param.Byte[7];
13468: 80 91 26 09 lds r24, 0x0926
1346c: 80 93 67 04 sts 0x0467, r24
if(CareFree && FromNaviCtrl.Param.sInt[4] >= 0)
13470: 80 91 d8 03 lds r24, 0x03D8
13474: 88 23 and r24, r24
13476: 51 f0 breq .+20 ; 0x1348c <UpdateSPI_Buffer+0x7d4>
13478: 80 91 27 09 lds r24, 0x0927
1347c: 90 91 28 09 lds r25, 0x0928
13480: 99 23 and r25, r25
13482: 24 f0 brlt .+8 ; 0x1348c <UpdateSPI_Buffer+0x7d4>
{
KompassSollWert = FromNaviCtrl.Param.sInt[4]; // bei Carefree kann NC den Kompass-Sollwinkel vorgeben
13484: 90 93 1d 04 sts 0x041D, r25
13488: 80 93 1c 04 sts 0x041C, r24
KompassSollWert += 360 - ((unsigned int) EE_Parameter.CamOrientation * 15);
KompassSollWert %= 360;
}
*/
}
POI_KameraNick = (POI_KameraNick + FromNaviCtrl.Param.sInt[5]) / 2; // FromNaviCtrl.Param.sInt[5]; // Nickwinkel
1348c: 20 91 29 09 lds r18, 0x0929
13490: 30 91 2a 09 lds r19, 0x092A
13494: 80 91 b5 04 lds r24, 0x04B5
13498: 90 91 b6 04 lds r25, 0x04B6
1349c: 82 0f add r24, r18
1349e: 93 1f adc r25, r19
134a0: 99 23 and r25, r25
134a2: 0c f4 brge .+2 ; 0x134a6 <UpdateSPI_Buffer+0x7ee>
134a4: 01 96 adiw r24, 0x01 ; 1
134a6: 95 95 asr r25
134a8: 87 95 ror r24
134aa: 90 93 b6 04 sts 0x04B6, r25
134ae: 80 93 b5 04 sts 0x04B5, r24
break;
134b2: d9 c0 rjmp .+434 ; 0x13666 <UpdateSPI_Buffer+0x9ae>
case SPI_NCCMD_VERSION:
NC_Version.Major = FromNaviCtrl.Param.Byte[0];
134b4: 80 91 1f 09 lds r24, 0x091F
134b8: 80 93 e1 08 sts 0x08E1, r24
NC_Version.Minor = FromNaviCtrl.Param.Byte[1];
134bc: 80 91 20 09 lds r24, 0x0920
134c0: 80 93 e2 08 sts 0x08E2, r24
NC_Version.Patch = FromNaviCtrl.Param.Byte[2];
134c4: 80 91 21 09 lds r24, 0x0921
134c8: 80 93 e3 08 sts 0x08E3, r24
NC_Version.Compatible = FromNaviCtrl.Param.Byte[3];
134cc: 80 91 22 09 lds r24, 0x0922
134d0: 80 93 e4 08 sts 0x08E4, r24
NC_Version.Hardware = FromNaviCtrl.Param.Byte[4];
134d4: 80 91 23 09 lds r24, 0x0923
134d8: 80 93 e5 08 sts 0x08E5, r24
DebugOut.Status[0] |= FromNaviCtrl.Param.Byte[5];
134dc: e6 e4 ldi r30, 0x46 ; 70
134de: fc e0 ldi r31, 0x0C ; 12
134e0: 90 91 24 09 lds r25, 0x0924
134e4: 80 81 ld r24, Z
134e6: 89 2b or r24, r25
134e8: 80 83 st Z, r24
DebugOut.Status[1] = (DebugOut.Status[1] & (0x01|0x02)) | (FromNaviCtrl.Param.Byte[6] & (0x04 | 0x08));
134ea: e7 e4 ldi r30, 0x47 ; 71
134ec: fc e0 ldi r31, 0x0C ; 12
134ee: 90 91 25 09 lds r25, 0x0925
134f2: 9c 70 andi r25, 0x0C ; 12
134f4: 80 81 ld r24, Z
134f6: 83 70 andi r24, 0x03 ; 3
134f8: 89 2b or r24, r25
134fa: 80 83 st Z, r24
NC_ErrorCode = FromNaviCtrl.Param.Byte[7];
134fc: 80 91 26 09 lds r24, 0x0926
13500: 80 93 bb 04 sts 0x04BB, r24
NC_GPS_ModeCharacter = FromNaviCtrl.Param.Byte[8];
13504: 80 91 27 09 lds r24, 0x0927
13508: 80 93 96 02 sts 0x0296, r24
FromNaviCtrl_Value.SerialDataOkay = FromNaviCtrl.Param.Byte[9];
1350c: 80 91 28 09 lds r24, 0x0928
13510: 80 93 4f 09 sts 0x094F, r24
NC_To_FC_Flags = FromNaviCtrl.Param.Byte[10];
13514: 80 91 29 09 lds r24, 0x0929
13518: 80 93 b7 04 sts 0x04B7, r24
//NC_To_FC_MaxAltitude = FromNaviCtrl.Param.Byte[11];
break;
1351c: a4 c0 rjmp .+328 ; 0x13666 <UpdateSPI_Buffer+0x9ae>
case SPI_NCCMD_GPSINFO:
GPSInfo.Flags = FromNaviCtrl.Param.Byte[0];
1351e: 80 91 1f 09 lds r24, 0x091F
13522: 80 93 d7 08 sts 0x08D7, r24
GPSInfo.NumOfSats = FromNaviCtrl.Param.Byte[1];
13526: 80 91 20 09 lds r24, 0x0920
1352a: 80 93 d8 08 sts 0x08D8, r24
GPSInfo.SatFix = FromNaviCtrl.Param.Byte[2];
1352e: 80 91 21 09 lds r24, 0x0921
13532: 80 93 d9 08 sts 0x08D9, r24
GPSInfo.Speed = FromNaviCtrl.Param.Byte[3];
13536: 80 91 22 09 lds r24, 0x0922
1353a: 80 93 da 08 sts 0x08DA, r24
GPSInfo.HomeDistance = FromNaviCtrl.Param.Int[2];
1353e: 80 91 23 09 lds r24, 0x0923
13542: 90 91 24 09 lds r25, 0x0924
13546: 90 93 dc 08 sts 0x08DC, r25
1354a: 80 93 db 08 sts 0x08DB, r24
GPSInfo.HomeBearing = FromNaviCtrl.Param.sInt[3];
1354e: 80 91 25 09 lds r24, 0x0925
13552: 90 91 26 09 lds r25, 0x0926
13556: 90 93 de 08 sts 0x08DE, r25
1355a: 80 93 dd 08 sts 0x08DD, r24
if((signed char) PPM_in[WP_EVENT_PPM_IN] == -127) // zuletzt war der WP-Event auf Null
1355e: 80 91 6b 08 lds r24, 0x086B
13562: 90 91 6c 08 lds r25, 0x086C
13566: 81 38 cpi r24, 0x81 ; 129
13568: 49 f4 brne .+18 ; 0x1357c <UpdateSPI_Buffer+0x8c4>
{
if(!FromNC_WP_EventChannel_New) FromNC_WP_EventChannel_New = (unsigned char) FromNaviCtrl.Param.Byte[8] + 127; // zwischenspeichern, damit keiner verpasst wird
1356a: 80 91 bd 04 lds r24, 0x04BD
1356e: 81 11 cpse r24, r1
13570: 05 c0 rjmp .+10 ; 0x1357c <UpdateSPI_Buffer+0x8c4>
13572: 80 91 27 09 lds r24, 0x0927
13576: 81 58 subi r24, 0x81 ; 129
13578: 80 93 bd 04 sts 0x04BD, r24
}
PPM_in[WP_EVENT_PPM_IN] = (signed char) FromNaviCtrl.Param.Byte[8]; // WP_EVENT-Channel-Value (FromNC_WP_EventChannel)
1357c: 80 91 27 09 lds r24, 0x0927
13580: 99 27 eor r25, r25
13582: 87 fd sbrc r24, 7
13584: 90 95 com r25
13586: 90 93 6c 08 sts 0x086C, r25
1358a: 80 93 6b 08 sts 0x086B, r24
FromNC_AltitudeSpeed = FromNaviCtrl.Param.Byte[9];
1358e: 80 91 28 09 lds r24, 0x0928
13592: 80 93 f3 03 sts 0x03F3, r24
FromNC_AltitudeSetpoint = (long) FromNaviCtrl.Param.sInt[5] * 10; // in cm
13596: 80 91 29 09 lds r24, 0x0929
1359a: 90 91 2a 09 lds r25, 0x092A
1359e: aa 27 eor r26, r26
135a0: 97 fd sbrc r25, 7
135a2: a0 95 com r26
135a4: ba 2f mov r27, r26
135a6: 88 0f add r24, r24
135a8: 99 1f adc r25, r25
135aa: aa 1f adc r26, r26
135ac: bb 1f adc r27, r27
135ae: ac 01 movw r20, r24
135b0: bd 01 movw r22, r26
135b2: 44 0f add r20, r20
135b4: 55 1f adc r21, r21
135b6: 66 1f adc r22, r22
135b8: 77 1f adc r23, r23
135ba: 44 0f add r20, r20
135bc: 55 1f adc r21, r21
135be: 66 1f adc r22, r22
135c0: 77 1f adc r23, r23
135c2: 84 0f add r24, r20
135c4: 95 1f adc r25, r21
135c6: a6 1f adc r26, r22
135c8: b7 1f adc r27, r23
135ca: 80 93 f4 03 sts 0x03F4, r24
135ce: 90 93 f5 03 sts 0x03F5, r25
135d2: a0 93 f6 03 sts 0x03F6, r26
135d6: b0 93 f7 03 sts 0x03F7, r27
break;
135da: 45 c0 rjmp .+138 ; 0x13666 <UpdateSPI_Buffer+0x9ae>
case SPI_MISC:
EarthMagneticField = FromNaviCtrl.Param.Byte[0];
135dc: 80 91 1f 09 lds r24, 0x091F
135e0: 80 93 ba 04 sts 0x04BA, r24
EarthMagneticInclination = FromNaviCtrl.Param.Byte[1];
135e4: 80 91 20 09 lds r24, 0x0920
135e8: 80 93 b9 04 sts 0x04B9, r24
EarthMagneticInclinationTheoretic = FromNaviCtrl.Param.Byte[2];
135ec: 80 91 21 09 lds r24, 0x0921
135f0: 80 93 b8 04 sts 0x04B8, r24
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(FromNaviCtrl.Param.Byte[3])
135f4: 80 91 22 09 lds r24, 0x0922
135f8: 88 23 and r24, r24
135fa: 49 f0 breq .+18 ; 0x1360e <UpdateSPI_Buffer+0x956>
if(!SpeakHoTT || (SpeakHoTT >= SPEAK_GPS_HOLD && SpeakHoTT <= SPEAK_GPS_OFF)) SpeakHoTT = FromNaviCtrl.Param.Byte[3];
135fc: 90 91 57 01 lds r25, 0x0157
13600: 99 23 and r25, r25
13602: 19 f0 breq .+6 ; 0x1360a <UpdateSPI_Buffer+0x952>
13604: 91 51 subi r25, 0x11 ; 17
13606: 93 30 cpi r25, 0x03 ; 3
13608: 10 f4 brcc .+4 ; 0x1360e <UpdateSPI_Buffer+0x956>
1360a: 80 93 57 01 sts 0x0157, r24
NaviData_TargetDistance = FromNaviCtrl.Param.Int[3];
1360e: 80 91 25 09 lds r24, 0x0925
13612: 90 91 26 09 lds r25, 0x0926
13616: 90 93 86 04 sts 0x0486, r25
1361a: 80 93 85 04 sts 0x0485, r24
#endif
NaviData_WaypointIndex = FromNaviCtrl.Param.Byte[4];
1361e: 80 91 23 09 lds r24, 0x0923
13622: 80 93 8d 04 sts 0x048D, r24
NaviData_WaypointNumber = FromNaviCtrl.Param.Byte[5];
13626: 80 91 24 09 lds r24, 0x0924
1362a: 80 93 8c 04 sts 0x048C, r24
NaviData_TargetHoldTime = FromNaviCtrl.Param.Byte[8];
1362e: 80 91 27 09 lds r24, 0x0927
13632: 80 93 8b 04 sts 0x048B, r24
NaviData_MaxWpListIndex = FromNaviCtrl.Param.Byte[9];
13636: 80 91 28 09 lds r24, 0x0928
1363a: 80 93 89 04 sts 0x0489, r24
CompassCorrected = FromNaviCtrl.Param.sInt[5]; // Bytes 10 & 11
1363e: 80 91 29 09 lds r24, 0x0929
13642: 90 91 2a 09 lds r25, 0x092A
13646: 90 93 66 06 sts 0x0666, r25
1364a: 80 93 65 06 sts 0x0665, r24
break;
1364e: 0b c0 rjmp .+22 ; 0x13666 <UpdateSPI_Buffer+0x9ae>
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
case SPI_NCCMD_HOTT_DATA:
//if(EE_Parameter.Receiver == RECEIVER_HOTT)
NC_Fills_HoTT_Telemety();
13650: 0e 94 3e 61 call 0xc27c ; 0xc27c <NC_Fills_HoTT_Telemety>
break;
13654: 08 c0 rjmp .+16 ; 0x13666 <UpdateSPI_Buffer+0x9ae>
}
else
{
// KompassValue = 0;
// KompassRichtung = 0;
GPS_Nick = 0;
13656: 10 92 6b 04 sts 0x046B, r1
1365a: 10 92 6a 04 sts 0x046A, r1
GPS_Roll = 0;
1365e: 10 92 69 04 sts 0x0469, r1
13662: 10 92 68 04 sts 0x0468, r1
}
}
13666: 1f 91 pop r17
13668: 0f 91 pop r16
1366a: ff 90 pop r15
1366c: ef 90 pop r14
1366e: df 90 pop r13
13670: cf 90 pop r12
13672: 08 95 ret
00013674 <SPI_StartTransmitPacket>:
}
//------------------------------------------------------
unsigned char SPI_StartTransmitPacket(void)
{
if(!SPITransferCompleted) return(0);
13674: 80 91 d6 08 lds r24, 0x08D6
13678: 88 23 and r24, r24
1367a: 21 f1 breq .+72 ; 0x136c4 <SPI_StartTransmitPacket+0x50>
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave
1367c: 45 98 cbi 0x08, 5 ; 8
SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl;
1367e: 87 ee ldi r24, 0xE7 ; 231
13680: 98 e0 ldi r25, 0x08 ; 8
13682: 90 93 e0 08 sts 0x08E0, r25
13686: 80 93 df 08 sts 0x08DF, r24
ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++];
1368a: e0 91 bc 04 lds r30, 0x04BC
1368e: 81 e0 ldi r24, 0x01 ; 1
13690: 8e 0f add r24, r30
13692: 80 93 bc 04 sts 0x04BC, r24
13696: f0 e0 ldi r31, 0x00 ; 0
13698: e9 56 subi r30, 0x69 ; 105
1369a: fd 4f sbci r31, 0xFD ; 253
1369c: 90 81 ld r25, Z
1369e: 90 93 e9 08 sts 0x08E9, r25
if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0;
136a2: 8d 30 cpi r24, 0x0D ; 13
136a4: 10 f0 brcs .+4 ; 0x136aa <SPI_StartTransmitPacket+0x36>
136a6: 10 92 bc 04 sts 0x04BC, r1
SPITransferCompleted = 0;
136aa: 10 92 d6 08 sts 0x08D6, r1
UpdateSPI_Buffer(); // update buffer
136ae: 04 db rcall .-2552 ; 0x12cb8 <UpdateSPI_Buffer>
SPI_BufferIndex = 1;
136b0: 81 e0 ldi r24, 0x01 ; 1
136b2: 80 93 e6 08 sts 0x08E6, r24
ToNaviCtrl.Chksum = ToNaviCtrl.Sync1;
136b6: 80 91 e7 08 lds r24, 0x08E7
136ba: 80 93 08 09 sts 0x0908, r24
SPDR = ToNaviCtrl.Sync1; // Start transmission
136be: 8e bd out 0x2e, r24 ; 46
return(1);
136c0: 81 e0 ldi r24, 0x01 ; 1
136c2: 08 95 ret
}
//------------------------------------------------------
unsigned char SPI_StartTransmitPacket(void)
{
if(!SPITransferCompleted) return(0);
136c4: 80 e0 ldi r24, 0x00 ; 0
UpdateSPI_Buffer(); // update buffer
SPI_BufferIndex = 1;
ToNaviCtrl.Chksum = ToNaviCtrl.Sync1;
SPDR = ToNaviCtrl.Sync1; // Start transmission
return(1);
}
136c6: 08 95 ret
000136c8 <__vector_18>:
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
136c8: 1f 92 push r1
136ca: 0f 92 push r0
136cc: 0f b6 in r0, 0x3f ; 63
136ce: 0f 92 push r0
136d0: 11 24 eor r1, r1
136d2: 0b b6 in r0, 0x3b ; 59
136d4: 0f 92 push r0
136d6: 2f 93 push r18
136d8: 3f 93 push r19
136da: 4f 93 push r20
136dc: 5f 93 push r21
136de: 6f 93 push r22
136e0: 7f 93 push r23
136e2: 8f 93 push r24
136e4: 9f 93 push r25
136e6: af 93 push r26
136e8: bf 93 push r27
136ea: ef 93 push r30
136ec: ff 93 push r31
136ee: 80 91 cc 04 lds r24, 0x04CC
136f2: 88 23 and r24, r24
136f4: 29 f0 breq .+10 ; 0x13700 <__vector_18+0x38>
136f6: 80 91 cc 04 lds r24, 0x04CC
136fa: 81 50 subi r24, 0x01 ; 1
136fc: 80 93 cc 04 sts 0x04CC, r24
13700: 80 91 b0 04 lds r24, 0x04B0
13704: 88 23 and r24, r24
13706: 19 f0 breq .+6 ; 0x1370e <__vector_18+0x46>
13708: 81 50 subi r24, 0x01 ; 1
1370a: 80 93 b0 04 sts 0x04B0, r24
1370e: 80 91 c3 04 lds r24, 0x04C3
13712: 88 23 and r24, r24
13714: 21 f0 breq .+8 ; 0x1371e <__vector_18+0x56>
13716: 81 50 subi r24, 0x01 ; 1
13718: 80 93 c3 04 sts 0x04C3, r24
1371c: 53 c0 rjmp .+166 ; 0x137c4 <__vector_18+0xfc>
1371e: 89 e0 ldi r24, 0x09 ; 9
13720: 80 93 c3 04 sts 0x04C3, r24
13724: 80 91 d2 04 lds r24, 0x04D2
13728: 90 91 d3 04 lds r25, 0x04D3
1372c: 01 96 adiw r24, 0x01 ; 1
1372e: 90 93 d3 04 sts 0x04D3, r25
13732: 80 93 d2 04 sts 0x04D2, r24
13736: 80 91 a6 02 lds r24, 0x02A6
1373a: 8f 5f subi r24, 0xFF ; 255
1373c: 81 70 andi r24, 0x01 ; 1
1373e: 80 93 a6 02 sts 0x02A6, r24
13742: 81 11 cpse r24, r1
13744: 09 c0 rjmp .+18 ; 0x13758 <__vector_18+0x90>
13746: 80 91 d1 04 lds r24, 0x04D1
1374a: 84 30 cpi r24, 0x04 ; 4
1374c: 28 f4 brcc .+10 ; 0x13758 <__vector_18+0x90>
1374e: 80 91 d1 04 lds r24, 0x04D1
13752: 8f 5f subi r24, 0xFF ; 255
13754: 80 93 d1 04 sts 0x04D1, r24
13758: 34 99 sbic 0x06, 4 ; 6
1375a: 03 c0 rjmp .+6 ; 0x13762 <__vector_18+0x9a>
1375c: 81 e0 ldi r24, 0x01 ; 1
1375e: 80 93 ca 04 sts 0x04CA, r24
13762: 80 91 cd 04 lds r24, 0x04CD
13766: 90 91 ce 04 lds r25, 0x04CE
1376a: 89 2b or r24, r25
1376c: 09 f1 breq .+66 ; 0x137b0 <__vector_18+0xe8>
1376e: 80 91 cd 04 lds r24, 0x04CD
13772: 90 91 ce 04 lds r25, 0x04CE
13776: 0b 97 sbiw r24, 0x0b ; 11
13778: 50 f0 brcs .+20 ; 0x1378e <__vector_18+0xc6>
1377a: 80 91 cd 04 lds r24, 0x04CD
1377e: 90 91 ce 04 lds r25, 0x04CE
13782: 0a 97 sbiw r24, 0x0a ; 10
13784: 90 93 ce 04 sts 0x04CE, r25
13788: 80 93 cd 04 sts 0x04CD, r24
1378c: 04 c0 rjmp .+8 ; 0x13796 <__vector_18+0xce>
1378e: 10 92 ce 04 sts 0x04CE, r1
13792: 10 92 cd 04 sts 0x04CD, r1
13796: 20 91 cd 04 lds r18, 0x04CD
1379a: 30 91 ce 04 lds r19, 0x04CE
1379e: 80 91 a9 02 lds r24, 0x02A9
137a2: 90 91 aa 02 lds r25, 0x02AA
137a6: 82 23 and r24, r18
137a8: 93 23 and r25, r19
137aa: 89 2b or r24, r25
137ac: 41 f4 brne .+16 ; 0x137be <__vector_18+0xf6>
137ae: 09 c0 rjmp .+18 ; 0x137c2 <__vector_18+0xfa>
137b0: 8f ef ldi r24, 0xFF ; 255
137b2: 9f ef ldi r25, 0xFF ; 255
137b4: 90 93 aa 02 sts 0x02AA, r25
137b8: 80 93 a9 02 sts 0x02A9, r24
137bc: 02 c0 rjmp .+4 ; 0x137c2 <__vector_18+0xfa>
137be: 47 9a sbi 0x08, 7 ; 8
137c0: 01 c0 rjmp .+2 ; 0x137c4 <__vector_18+0xfc>
137c2: 47 98 cbi 0x08, 7 ; 8
137c4: 80 91 ca 04 lds r24, 0x04CA
137c8: 88 23 and r24, r24
137ca: 09 f4 brne .+2 ; 0x137ce <__vector_18+0x106>
137cc: 60 c0 rjmp .+192 ; 0x1388e <__vector_18+0x1c6>
137ce: 80 91 a4 02 lds r24, 0x02A4
137d2: 81 11 cpse r24, r1
137d4: 5c c0 rjmp .+184 ; 0x1388e <__vector_18+0x1c6>
137d6: 80 91 5c 06 lds r24, 0x065C
137da: 83 ff sbrs r24, 3
137dc: 58 c0 rjmp .+176 ; 0x1388e <__vector_18+0x1c6>
137de: 34 9b sbis 0x06, 4 ; 6
137e0: 10 c0 rjmp .+32 ; 0x13802 <__vector_18+0x13a>
137e2: 80 91 cf 04 lds r24, 0x04CF
137e6: 90 91 d0 04 lds r25, 0x04D0
137ea: 01 96 adiw r24, 0x01 ; 1
137ec: 90 93 d0 04 sts 0x04D0, r25
137f0: 80 93 cf 04 sts 0x04CF, r24
137f4: 89 3e cpi r24, 0xE9 ; 233
137f6: 93 40 sbci r25, 0x03 ; 3
137f8: 08 f4 brcc .+2 ; 0x137fc <__vector_18+0x134>
137fa: 49 c0 rjmp .+146 ; 0x1388e <__vector_18+0x1c6>
137fc: 10 92 ca 04 sts 0x04CA, r1
13800: 46 c0 rjmp .+140 ; 0x1388e <__vector_18+0x1c6>
13802: 80 91 cf 04 lds r24, 0x04CF
13806: 90 91 d0 04 lds r25, 0x04D0
1380a: 89 2b or r24, r25
1380c: e1 f1 breq .+120 ; 0x13886 <__vector_18+0x1be>
1380e: 80 91 cf 04 lds r24, 0x04CF
13812: 90 91 d0 04 lds r25, 0x04D0
13816: 8a 36 cpi r24, 0x6A ; 106
13818: 91 40 sbci r25, 0x01 ; 1
1381a: a8 f5 brcc .+106 ; 0x13886 <__vector_18+0x1be>
1381c: 40 91 cf 04 lds r20, 0x04CF
13820: 50 91 d0 04 lds r21, 0x04D0
13824: e0 91 cf 04 lds r30, 0x04CF
13828: f0 91 d0 04 lds r31, 0x04D0
1382c: 9a 01 movw r18, r20
1382e: ad e9 ldi r26, 0x9D ; 157
13830: bf e8 ldi r27, 0x8F ; 143
13832: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
13836: 48 1b sub r20, r24
13838: 59 0b sbc r21, r25
1383a: 56 95 lsr r21
1383c: 47 95 ror r20
1383e: 84 0f add r24, r20
13840: 95 1f adc r25, r21
13842: 96 95 lsr r25
13844: 87 95 ror r24
13846: 92 95 swap r25
13848: 82 95 swap r24
1384a: 8f 70 andi r24, 0x0F ; 15
1384c: 89 27 eor r24, r25
1384e: 9f 70 andi r25, 0x0F ; 15
13850: 89 27 eor r24, r25
13852: e8 0f add r30, r24
13854: f9 1f adc r31, r25
13856: f0 93 d0 04 sts 0x04D0, r31
1385a: e0 93 cf 04 sts 0x04CF, r30
1385e: 80 91 cf 04 lds r24, 0x04CF
13862: 90 91 d0 04 lds r25, 0x04D0
13866: 0b 97 sbiw r24, 0x0b ; 11
13868: 50 f0 brcs .+20 ; 0x1387e <__vector_18+0x1b6>
1386a: 80 91 cf 04 lds r24, 0x04CF
1386e: 90 91 d0 04 lds r25, 0x04D0
13872: 0a 97 sbiw r24, 0x0a ; 10
13874: 90 93 4f 01 sts 0x014F, r25
13878: 80 93 4e 01 sts 0x014E, r24
1387c: 04 c0 rjmp .+8 ; 0x13886 <__vector_18+0x1be>
1387e: 10 92 4f 01 sts 0x014F, r1
13882: 10 92 4e 01 sts 0x014E, r1
13886: 10 92 d0 04 sts 0x04D0, r1
1388a: 10 92 cf 04 sts 0x04CF, r1
1388e: ff 91 pop r31
13890: ef 91 pop r30
13892: bf 91 pop r27
13894: af 91 pop r26
13896: 9f 91 pop r25
13898: 8f 91 pop r24
1389a: 7f 91 pop r23
1389c: 6f 91 pop r22
1389e: 5f 91 pop r21
138a0: 4f 91 pop r20
138a2: 3f 91 pop r19
138a4: 2f 91 pop r18
138a6: 0f 90 pop r0
138a8: 0b be out 0x3b, r0 ; 59
138aa: 0f 90 pop r0
138ac: 0f be out 0x3f, r0 ; 63
138ae: 0f 90 pop r0
138b0: 1f 90 pop r1
138b2: 18 95 reti
000138b4 <SetDelay>:
138b4: 20 91 d2 04 lds r18, 0x04D2
138b8: 30 91 d3 04 lds r19, 0x04D3
138bc: 2f 5f subi r18, 0xFF ; 255
138be: 3f 4f sbci r19, 0xFF ; 255
138c0: 82 0f add r24, r18
138c2: 93 1f adc r25, r19
138c4: 08 95 ret
000138c6 <CheckDelay>:
138c6: 20 91 d2 04 lds r18, 0x04D2
138ca: 30 91 d3 04 lds r19, 0x04D3
138ce: 82 1b sub r24, r18
138d0: 93 0b sbc r25, r19
138d2: 88 27 eor r24, r24
138d4: 90 78 andi r25, 0x80 ; 128
138d6: 89 2f mov r24, r25
138d8: 86 95 lsr r24
138da: 08 95 ret
000138dc <Delay_ms_Mess>:
void Delay_ms_Mess(unsigned int w)
{
138dc: ff 92 push r15
138de: 0f 93 push r16
138e0: 1f 93 push r17
138e2: cf 93 push r28
138e4: df 93 push r29
// -----------------------------------------------------------------------
unsigned int SetDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
138e6: c0 91 d2 04 lds r28, 0x04D2
138ea: d0 91 d3 04 lds r29, 0x04D3
138ee: 21 96 adiw r28, 0x01 ; 1
138f0: c8 0f add r28, r24
138f2: d9 1f adc r29, r25
void Delay_ms_Mess(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt)) if(AdReady) {AdReady = 0; ANALOG_ON;}
138f4: 0a e7 ldi r16, 0x7A ; 122
138f6: 10 e0 ldi r17, 0x00 ; 0
138f8: 0f 2e mov r0, r31
138fa: ff ec ldi r31, 0xCF ; 207
138fc: ff 2e mov r15, r31
138fe: f0 2d mov r31, r0
13900: 08 c0 rjmp .+16 ; 0x13912 <Delay_ms_Mess+0x36>
13902: 80 91 0f 01 lds r24, 0x010F
13906: 88 23 and r24, r24
13908: 21 f0 breq .+8 ; 0x13912 <Delay_ms_Mess+0x36>
1390a: 10 92 0f 01 sts 0x010F, r1
1390e: f8 01 movw r30, r16
13910: f0 82 st Z, r15
13912: ce 01 movw r24, r28
13914: d8 df rcall .-80 ; 0x138c6 <CheckDelay>
13916: 88 23 and r24, r24
13918: a1 f3 breq .-24 ; 0x13902 <Delay_ms_Mess+0x26>
}
1391a: df 91 pop r29
1391c: cf 91 pop r28
1391e: 1f 91 pop r17
13920: 0f 91 pop r16
13922: ff 90 pop r15
13924: 08 95 ret
00013926 <TIMER2_Init>:
/*****************************************************/
// The timer 2 is used to generate the PWM at PD7 (J7)
// to control a camera servo for nick compensation.
void TIMER2_Init(void)
{
uint8_t sreg = SREG;
13926: 8f b7 in r24, 0x3f ; 63
// disable all interrupts before reconfiguration
cli();
13928: f8 94 cli
PORTD &= ~(1<<PORTD7); // set PD7 to low
1392a: 5f 98 cbi 0x0b, 7 ; 11
DDRC |= (1<<DDRC6); // set PC6 as output (Reset for HEF4017)
1392c: 3e 9a sbi 0x07, 6 ; 7
HEF4017Reset_ON;
1392e: 46 9a sbi 0x08, 6 ; 8
// Timer/Counter 2 Control Register A
// Timer Mode is FastPWM with timer reload at OCR2A (Bits: WGM22 = 1, WGM21 = 1, WGM20 = 1)
// PD7: Normal port operation, OC2A disconnected, (Bits: COM2A1 = 0, COM2A0 = 0)
// PD6: Normal port operation, OC2B disconnected, (Bits: COM2B1 = 0, COM2B0 = 0)
TCCR2A &= ~((1<<COM2A1)|(1<<COM2A0)|(1<<COM2B1)|(1<<COM2B0));
13930: e0 eb ldi r30, 0xB0 ; 176
13932: f0 e0 ldi r31, 0x00 ; 0
13934: 90 81 ld r25, Z
13936: 9f 70 andi r25, 0x0F ; 15
13938: 90 83 st Z, r25
TCCR2A |= (1<<WGM21)|(1<<WGM20);
1393a: 90 81 ld r25, Z
1393c: 93 60 ori r25, 0x03 ; 3
1393e: 90 83 st Z, r25
// Set clock divider for timer 2 to SYSKLOCK/32 = 20MHz / 32 = 625 kHz
// The timer increments from 0x00 to 0xFF with an update rate of 625 kHz or 1.6 us
// hence the timer overflow interrupt frequency is 625 kHz / 256 = 2.44 kHz or 0.4096 ms
// divider 32 (Bits: CS022 = 0, CS21 = 1, CS20 = 1)
TCCR2B &= ~((1<<FOC2A)|(1<<FOC2B)|(1<<CS22));
13940: a1 eb ldi r26, 0xB1 ; 177
13942: b0 e0 ldi r27, 0x00 ; 0
13944: 9c 91 ld r25, X
13946: 9b 73 andi r25, 0x3B ; 59
13948: 9c 93 st X, r25
TCCR2B |= (1<<CS21)|(1<<CS20)|(1<<WGM22);
1394a: 9c 91 ld r25, X
1394c: 9b 60 ori r25, 0x0B ; 11
1394e: 9c 93 st X, r25
// Initialize the Timer/Counter 2 Register
TCNT2 = 0;
13950: 10 92 b2 00 sts 0x00B2, r1
// Initialize the Output Compare Register A used for PWM generation on port PD7.
OCR2A = 255;
13954: 9f ef ldi r25, 0xFF ; 255
13956: 90 93 b3 00 sts 0x00B3, r25
TCCR2A |= (1<<COM2A1); // set or clear at compare match depends on value of COM2A0
1395a: 90 81 ld r25, Z
1395c: 90 68 ori r25, 0x80 ; 128
1395e: 90 83 st Z, r25
// Timer/Counter 2 Interrupt Mask Register
// Enable timer output compare match A Interrupt only
TIMSK2 &= ~((1<<OCIE2B)|(1<<TOIE2));
13960: e0 e7 ldi r30, 0x70 ; 112
13962: f0 e0 ldi r31, 0x00 ; 0
13964: 90 81 ld r25, Z
13966: 9a 7f andi r25, 0xFA ; 250
13968: 90 83 st Z, r25
TIMSK2 |= (1<<OCIE2A);
1396a: 90 81 ld r25, Z
1396c: 92 60 ori r25, 0x02 ; 2
1396e: 90 83 st Z, r25
SREG = sreg;
13970: 8f bf out 0x3f, r24 ; 63
13972: 08 95 ret
00013974 <Timer_Init>:
// -----------------------------------------------------------------------
unsigned int SetDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
13974: 80 91 d2 04 lds r24, 0x04D2
13978: 90 91 d3 04 lds r25, 0x04D3
1397c: 0b 96 adiw r24, 0x0b ; 11
}
//----------------------------
void Timer_Init(void)
{
tim_main = SetDelay(10);
1397e: 90 93 52 09 sts 0x0952, r25
13982: 80 93 51 09 sts 0x0951, r24
TCCR0B = CK8;
13986: 82 e0 ldi r24, 0x02 ; 2
13988: 85 bd out 0x25, r24 ; 37
// TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|(1<<COM0B0)|3;//fast PWM
1398a: 83 eb ldi r24, 0xB3 ; 179
1398c: 84 bd out 0x24, r24 ; 36
OCR0B = 255;
1398e: 8f ef ldi r24, 0xFF ; 255
13990: 88 bd out 0x28, r24 ; 40
OCR0A = 180;
13992: 84 eb ldi r24, 0xB4 ; 180
13994: 87 bd out 0x27, r24 ; 39
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload
13996: 86 e0 ldi r24, 0x06 ; 6
13998: 86 bd out 0x26, r24 ; 38
//OCR1 = 0x00;
TIMSK0 |= _BV(TOIE0);
1399a: ee e6 ldi r30, 0x6E ; 110
1399c: f0 e0 ldi r31, 0x00 ; 0
1399e: 80 81 ld r24, Z
139a0: 81 60 ori r24, 0x01 ; 1
139a2: 80 83 st Z, r24
139a4: 08 95 ret
000139a6 <CalcNickServoValue>:
/*****************************************************/
void CalcNickServoValue(void)
{
signed int max, min;
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) // relative moving of the servo value
139a6: 80 91 b7 05 lds r24, 0x05B7
139aa: 82 ff sbrs r24, 2
139ac: 32 c0 rjmp .+100 ; 0x13a12 <CalcNickServoValue+0x6c>
{
max = ((unsigned int) EE_Parameter.ServoNickMax * MULTIPLYER * 15);
139ae: 50 91 6e 05 lds r21, 0x056E
min = ((unsigned int) EE_Parameter.ServoNickMin * MULTIPLYER * 20);
139b2: 20 91 6d 05 lds r18, 0x056D
139b6: 40 e5 ldi r20, 0x50 ; 80
139b8: 24 9f mul r18, r20
139ba: 90 01 movw r18, r0
139bc: 11 24 eor r1, r1
NickServoValue -= ((signed char) (Parameter_ServoNickControl - 128) / 4) * 6;
139be: 80 91 2f 01 lds r24, 0x012F
139c2: 80 58 subi r24, 0x80 ; 128
139c4: 0a f4 brpl .+2 ; 0x139c8 <CalcNickServoValue+0x22>
139c6: 8d 5f subi r24, 0xFD ; 253
139c8: 48 2f mov r20, r24
139ca: 45 95 asr r20
139cc: 45 95 asr r20
139ce: 80 91 a7 02 lds r24, 0x02A7
139d2: 90 91 a8 02 lds r25, 0x02A8
139d6: 66 e0 ldi r22, 0x06 ; 6
139d8: 46 02 muls r20, r22
139da: 80 19 sub r24, r0
139dc: 91 09 sbc r25, r1
139de: 11 24 eor r1, r1
LIMIT_MIN_MAX(NickServoValue,min, max);
139e0: 28 17 cp r18, r24
139e2: 39 07 cpc r19, r25
139e4: 2c f0 brlt .+10 ; 0x139f0 <CalcNickServoValue+0x4a>
139e6: 30 93 a8 02 sts 0x02A8, r19
139ea: 20 93 a7 02 sts 0x02A7, r18
139ee: 08 95 ret
{
signed int max, min;
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) // relative moving of the servo value
{
max = ((unsigned int) EE_Parameter.ServoNickMax * MULTIPLYER * 15);
139f0: 4c e3 ldi r20, 0x3C ; 60
139f2: 54 9f mul r21, r20
139f4: 90 01 movw r18, r0
139f6: 11 24 eor r1, r1
min = ((unsigned int) EE_Parameter.ServoNickMin * MULTIPLYER * 20);
NickServoValue -= ((signed char) (Parameter_ServoNickControl - 128) / 4) * 6;
LIMIT_MIN_MAX(NickServoValue,min, max);
139f8: 82 17 cp r24, r18
139fa: 93 07 cpc r25, r19
139fc: 2c f4 brge .+10 ; 0x13a08 <CalcNickServoValue+0x62>
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) // relative moving of the servo value
{
max = ((unsigned int) EE_Parameter.ServoNickMax * MULTIPLYER * 15);
min = ((unsigned int) EE_Parameter.ServoNickMin * MULTIPLYER * 20);
NickServoValue -= ((signed char) (Parameter_ServoNickControl - 128) / 4) * 6;
139fe: 90 93 a8 02 sts 0x02A8, r25
13a02: 80 93 a7 02 sts 0x02A7, r24
13a06: 08 95 ret
LIMIT_MIN_MAX(NickServoValue,min, max);
13a08: 30 93 a8 02 sts 0x02A8, r19
13a0c: 20 93 a7 02 sts 0x02A7, r18
13a10: 08 95 ret
}
else NickServoValue = (int16_t)Parameter_ServoNickControl * (MULTIPLYER*16); // direct poti control
13a12: 80 91 2f 01 lds r24, 0x012F
13a16: 60 e4 ldi r22, 0x40 ; 64
13a18: 86 9f mul r24, r22
13a1a: c0 01 movw r24, r0
13a1c: 11 24 eor r1, r1
13a1e: 90 93 a8 02 sts 0x02A8, r25
13a22: 80 93 a7 02 sts 0x02A7, r24
13a26: 08 95 ret
00013a28 <CalculateServo>:
}
void CalculateServo(void)
{
13a28: 8f 92 push r8
13a2a: 9f 92 push r9
13a2c: af 92 push r10
13a2e: bf 92 push r11
13a30: cf 92 push r12
13a32: df 92 push r13
13a34: ef 92 push r14
13a36: ff 92 push r15
13a38: 0f 93 push r16
13a3a: 1f 93 push r17
signed char cosinus, sinus;
signed long nick, roll;
cosinus = sintab[EE_Parameter.CamOrientation + 6];
13a3c: e0 91 75 05 lds r30, 0x0575
13a40: f0 e0 ldi r31, 0x00 ; 0
13a42: e5 53 subi r30, 0x35 ; 53
13a44: fd 4f sbci r31, 0xFD ; 253
13a46: a6 81 ldd r26, Z+6 ; 0x06
sinus = sintab[EE_Parameter.CamOrientation];
13a48: e0 81 ld r30, Z
if(CalculateServoSignals == 1)
13a4a: 80 91 af 02 lds r24, 0x02AF
13a4e: 81 30 cpi r24, 0x01 ; 1
13a50: 09 f0 breq .+2 ; 0x13a54 <CalculateServo+0x2c>
13a52: 31 c1 rjmp .+610 ; 0x13cb6 <CalculateServo+0x28e>
{
if(EE_Parameter.GlobalConfig3 & CFG3_SERVO_NICK_COMP_OFF) nick = 0;
13a54: 80 91 b9 05 lds r24, 0x05B9
13a58: 88 23 and r24, r24
13a5a: 0c f4 brge .+2 ; 0x13a5e <CalculateServo+0x36>
13a5c: 47 c0 rjmp .+142 ; 0x13aec <CalculateServo+0xc4>
else nick = (cosinus * IntegralNick) / 128L - (sinus * IntegralRoll) / 128L;
13a5e: 20 91 42 04 lds r18, 0x0442
13a62: 30 91 43 04 lds r19, 0x0443
13a66: 40 91 44 04 lds r20, 0x0444
13a6a: 50 91 45 04 lds r21, 0x0445
13a6e: bb 27 eor r27, r27
13a70: a7 fd sbrc r26, 7
13a72: b0 95 com r27
13a74: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
13a78: 8b 01 movw r16, r22
13a7a: 9c 01 movw r18, r24
13a7c: 99 23 and r25, r25
13a7e: 24 f4 brge .+8 ; 0x13a88 <CalculateServo+0x60>
13a80: 01 58 subi r16, 0x81 ; 129
13a82: 1f 4f sbci r17, 0xFF ; 255
13a84: 2f 4f sbci r18, 0xFF ; 255
13a86: 3f 4f sbci r19, 0xFF ; 255
13a88: 68 01 movw r12, r16
13a8a: 79 01 movw r14, r18
13a8c: 68 94 set
13a8e: 16 f8 bld r1, 6
13a90: f5 94 asr r15
13a92: e7 94 ror r14
13a94: d7 94 ror r13
13a96: c7 94 ror r12
13a98: 16 94 lsr r1
13a9a: d1 f7 brne .-12 ; 0x13a90 <CalculateServo+0x68>
13a9c: 20 91 3e 04 lds r18, 0x043E
13aa0: 30 91 3f 04 lds r19, 0x043F
13aa4: 40 91 40 04 lds r20, 0x0440
13aa8: 50 91 41 04 lds r21, 0x0441
13aac: ae 2f mov r26, r30
13aae: bb 27 eor r27, r27
13ab0: a7 fd sbrc r26, 7
13ab2: b0 95 com r27
13ab4: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
13ab8: 4b 01 movw r8, r22
13aba: 5c 01 movw r10, r24
13abc: 99 23 and r25, r25
13abe: 2c f4 brge .+10 ; 0x13aca <CalculateServo+0xa2>
13ac0: 2f e7 ldi r18, 0x7F ; 127
13ac2: 82 0e add r8, r18
13ac4: 91 1c adc r9, r1
13ac6: a1 1c adc r10, r1
13ac8: b1 1c adc r11, r1
13aca: d5 01 movw r26, r10
13acc: c4 01 movw r24, r8
13ace: 68 94 set
13ad0: 16 f8 bld r1, 6
13ad2: b5 95 asr r27
13ad4: a7 95 ror r26
13ad6: 97 95 ror r25
13ad8: 87 95 ror r24
13ada: 16 94 lsr r1
13adc: d1 f7 brne .-12 ; 0x13ad2 <CalculateServo+0xaa>
13ade: 97 01 movw r18, r14
13ae0: 86 01 movw r16, r12
13ae2: 08 1b sub r16, r24
13ae4: 19 0b sbc r17, r25
13ae6: 2a 0b sbc r18, r26
13ae8: 3b 0b sbc r19, r27
13aea: 03 c0 rjmp .+6 ; 0x13af2 <CalculateServo+0xca>
cosinus = sintab[EE_Parameter.CamOrientation + 6];
sinus = sintab[EE_Parameter.CamOrientation];
if(CalculateServoSignals == 1)
{
if(EE_Parameter.GlobalConfig3 & CFG3_SERVO_NICK_COMP_OFF) nick = 0;
13aec: 00 e0 ldi r16, 0x00 ; 0
13aee: 10 e0 ldi r17, 0x00 ; 0
13af0: 98 01 movw r18, r16
else nick = (cosinus * IntegralNick) / 128L - (sinus * IntegralRoll) / 128L;
nick -= POI_KameraNick * 7;
nick = ((long)Parameter_ServoNickComp * nick) / 512L;
13af2: e0 91 2d 01 lds r30, 0x012D
if(CalculateServoSignals == 1)
{
if(EE_Parameter.GlobalConfig3 & CFG3_SERVO_NICK_COMP_OFF) nick = 0;
else nick = (cosinus * IntegralNick) / 128L - (sinus * IntegralRoll) / 128L;
nick -= POI_KameraNick * 7;
13af6: 60 91 b5 04 lds r22, 0x04B5
13afa: 70 91 b6 04 lds r23, 0x04B6
13afe: cb 01 movw r24, r22
13b00: 88 0f add r24, r24
13b02: 99 1f adc r25, r25
13b04: 88 0f add r24, r24
13b06: 99 1f adc r25, r25
13b08: 88 0f add r24, r24
13b0a: 99 1f adc r25, r25
13b0c: 86 1b sub r24, r22
13b0e: 97 0b sbc r25, r23
13b10: aa 27 eor r26, r26
13b12: 97 fd sbrc r25, 7
13b14: a0 95 com r26
13b16: ba 2f mov r27, r26
13b18: a9 01 movw r20, r18
13b1a: 98 01 movw r18, r16
13b1c: 28 1b sub r18, r24
13b1e: 39 0b sbc r19, r25
13b20: 4a 0b sbc r20, r26
13b22: 5b 0b sbc r21, r27
nick = ((long)Parameter_ServoNickComp * nick) / 512L;
13b24: ae 2f mov r26, r30
13b26: b0 e0 ldi r27, 0x00 ; 0
13b28: 0e 94 c8 b1 call 0x16390 ; 0x16390 <__muluhisi3>
13b2c: 6b 01 movw r12, r22
13b2e: 7c 01 movw r14, r24
13b30: 99 23 and r25, r25
13b32: 34 f4 brge .+12 ; 0x13b40 <CalculateServo+0x118>
13b34: 3f ef ldi r19, 0xFF ; 255
13b36: c3 0e add r12, r19
13b38: 31 e0 ldi r19, 0x01 ; 1
13b3a: d3 1e adc r13, r19
13b3c: e1 1c adc r14, r1
13b3e: f1 1c adc r15, r1
13b40: 0b 2e mov r0, r27
13b42: b9 e0 ldi r27, 0x09 ; 9
13b44: f5 94 asr r15
13b46: e7 94 ror r14
13b48: d7 94 ror r13
13b4a: c7 94 ror r12
13b4c: ba 95 dec r27
13b4e: d1 f7 brne .-12 ; 0x13b44 <CalculateServo+0x11c>
13b50: b0 2d mov r27, r0
// offset (Range from 0 to 255 * 3 = 765)
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) ServoNickOffset = NickServoValue;
13b52: e0 91 b7 05 lds r30, 0x05B7
13b56: e2 ff sbrs r30, 2
13b58: 09 c0 rjmp .+18 ; 0x13b6c <CalculateServo+0x144>
13b5a: 80 91 a7 02 lds r24, 0x02A7
13b5e: 90 91 a8 02 lds r25, 0x02A8
13b62: 90 93 ae 02 sts 0x02AE, r25
13b66: 80 93 ad 02 sts 0x02AD, r24
13b6a: 19 c0 rjmp .+50 ; 0x13b9e <CalculateServo+0x176>
else ServoNickOffset += (NickServoValue - ServoNickOffset) / EE_Parameter.ServoManualControlSpeed;
13b6c: 40 91 ad 02 lds r20, 0x02AD
13b70: 50 91 ae 02 lds r21, 0x02AE
13b74: 20 91 ad 02 lds r18, 0x02AD
13b78: 30 91 ae 02 lds r19, 0x02AE
13b7c: 80 91 a7 02 lds r24, 0x02A7
13b80: 90 91 a8 02 lds r25, 0x02A8
13b84: 84 1b sub r24, r20
13b86: 95 0b sbc r25, r21
13b88: 60 91 74 05 lds r22, 0x0574
13b8c: 70 e0 ldi r23, 0x00 ; 0
13b8e: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
13b92: 26 0f add r18, r22
13b94: 37 1f adc r19, r23
13b96: 30 93 ae 02 sts 0x02AE, r19
13b9a: 20 93 ad 02 sts 0x02AD, r18
if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) // inverting movement of servo
13b9e: e0 ff sbrs r30, 0
13ba0: 18 c0 rjmp .+48 ; 0x13bd2 <CalculateServo+0x1aa>
{
nick = ServoNickOffset / 16 + nick;
13ba2: 80 91 ad 02 lds r24, 0x02AD
13ba6: 90 91 ae 02 lds r25, 0x02AE
13baa: 99 23 and r25, r25
13bac: 0c f4 brge .+2 ; 0x13bb0 <CalculateServo+0x188>
13bae: 0f 96 adiw r24, 0x0f ; 15
13bb0: 95 95 asr r25
13bb2: 87 95 ror r24
13bb4: 95 95 asr r25
13bb6: 87 95 ror r24
13bb8: 95 95 asr r25
13bba: 87 95 ror r24
13bbc: 95 95 asr r25
13bbe: 87 95 ror r24
13bc0: aa 27 eor r26, r26
13bc2: 97 fd sbrc r25, 7
13bc4: a0 95 com r26
13bc6: ba 2f mov r27, r26
13bc8: c8 0e add r12, r24
13bca: d9 1e adc r13, r25
13bcc: ea 1e adc r14, r26
13bce: fb 1e adc r15, r27
13bd0: 1b c0 rjmp .+54 ; 0x13c08 <CalculateServo+0x1e0>
}
else
{ // inverting movement of servo
nick = ServoNickOffset / 16 - nick;
13bd2: 80 91 ad 02 lds r24, 0x02AD
13bd6: 90 91 ae 02 lds r25, 0x02AE
13bda: 99 23 and r25, r25
13bdc: 0c f4 brge .+2 ; 0x13be0 <CalculateServo+0x1b8>
13bde: 0f 96 adiw r24, 0x0f ; 15
13be0: 95 95 asr r25
13be2: 87 95 ror r24
13be4: 95 95 asr r25
13be6: 87 95 ror r24
13be8: 95 95 asr r25
13bea: 87 95 ror r24
13bec: 95 95 asr r25
13bee: 87 95 ror r24
13bf0: aa 27 eor r26, r26
13bf2: 97 fd sbrc r25, 7
13bf4: a0 95 com r26
13bf6: ba 2f mov r27, r26
13bf8: 9c 01 movw r18, r24
13bfa: ad 01 movw r20, r26
13bfc: 2c 19 sub r18, r12
13bfe: 3d 09 sbc r19, r13
13c00: 4e 09 sbc r20, r14
13c02: 5f 09 sbc r21, r15
13c04: 69 01 movw r12, r18
13c06: 7a 01 movw r14, r20
}
if(EE_Parameter.ServoFilterNick) ServoNickValue = ((ServoNickValue * EE_Parameter.ServoFilterNick) + nick) / (EE_Parameter.ServoFilterNick + 1);
13c08: 20 91 a9 05 lds r18, 0x05A9
13c0c: 22 23 and r18, r18
13c0e: 21 f1 breq .+72 ; 0x13c58 <CalculateServo+0x230>
13c10: 30 e0 ldi r19, 0x00 ; 0
13c12: 80 91 c6 04 lds r24, 0x04C6
13c16: 90 91 c7 04 lds r25, 0x04C7
13c1a: 28 9f mul r18, r24
13c1c: b0 01 movw r22, r0
13c1e: 29 9f mul r18, r25
13c20: 70 0d add r23, r0
13c22: 38 9f mul r19, r24
13c24: 70 0d add r23, r0
13c26: 11 24 eor r1, r1
13c28: cb 01 movw r24, r22
13c2a: aa 27 eor r26, r26
13c2c: 97 fd sbrc r25, 7
13c2e: a0 95 com r26
13c30: ba 2f mov r27, r26
13c32: bc 01 movw r22, r24
13c34: cd 01 movw r24, r26
13c36: 6c 0d add r22, r12
13c38: 7d 1d adc r23, r13
13c3a: 8e 1d adc r24, r14
13c3c: 9f 1d adc r25, r15
13c3e: 2f 5f subi r18, 0xFF ; 255
13c40: 3f 4f sbci r19, 0xFF ; 255
13c42: 44 27 eor r20, r20
13c44: 37 fd sbrc r19, 7
13c46: 40 95 com r20
13c48: 54 2f mov r21, r20
13c4a: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
13c4e: 30 93 c7 04 sts 0x04C7, r19
13c52: 20 93 c6 04 sts 0x04C6, r18
13c56: 04 c0 rjmp .+8 ; 0x13c60 <CalculateServo+0x238>
else ServoNickValue = nick;
13c58: d0 92 c7 04 sts 0x04C7, r13
13c5c: c0 92 c6 04 sts 0x04C6, r12
// limit servo value to its parameter range definition
if(ServoNickValue < ((int16_t)EE_Parameter.ServoNickMin * MULTIPLYER))
13c60: 80 91 6d 05 lds r24, 0x056D
13c64: 90 e0 ldi r25, 0x00 ; 0
13c66: 88 0f add r24, r24
13c68: 99 1f adc r25, r25
13c6a: 88 0f add r24, r24
13c6c: 99 1f adc r25, r25
13c6e: 20 91 c6 04 lds r18, 0x04C6
13c72: 30 91 c7 04 lds r19, 0x04C7
13c76: 28 17 cp r18, r24
13c78: 39 07 cpc r19, r25
13c7a: 2c f4 brge .+10 ; 0x13c86 <CalculateServo+0x25e>
{
ServoNickValue = (int16_t)EE_Parameter.ServoNickMin * MULTIPLYER;
13c7c: 90 93 c7 04 sts 0x04C7, r25
13c80: 80 93 c6 04 sts 0x04C6, r24
13c84: 12 c0 rjmp .+36 ; 0x13caa <CalculateServo+0x282>
}
else
if(ServoNickValue > ((int16_t)EE_Parameter.ServoNickMax * MULTIPLYER))
13c86: 80 91 6e 05 lds r24, 0x056E
13c8a: 90 e0 ldi r25, 0x00 ; 0
13c8c: 88 0f add r24, r24
13c8e: 99 1f adc r25, r25
13c90: 88 0f add r24, r24
13c92: 99 1f adc r25, r25
13c94: 20 91 c6 04 lds r18, 0x04C6
13c98: 30 91 c7 04 lds r19, 0x04C7
13c9c: 82 17 cp r24, r18
13c9e: 93 07 cpc r25, r19
13ca0: 24 f4 brge .+8 ; 0x13caa <CalculateServo+0x282>
{
ServoNickValue = (int16_t)EE_Parameter.ServoNickMax * MULTIPLYER;
13ca2: 90 93 c7 04 sts 0x04C7, r25
13ca6: 80 93 c6 04 sts 0x04C6, r24
}
// if(PlatinenVersion < 20) CalculateServoSignals = 0; else
CalculateServoSignals++;
13caa: 80 91 af 02 lds r24, 0x02AF
13cae: 8f 5f subi r24, 0xFF ; 255
13cb0: 80 93 af 02 sts 0x02AF, r24
13cb4: 07 c1 rjmp .+526 ; 0x13ec4 <CalculateServo+0x49c>
}
else
{
roll = (cosinus * IntegralRoll) / 128L + (sinus * IntegralNick) / 128L;
roll = ((long)Parameter_ServoRollComp * roll) / 512L;
13cb6: c0 90 2c 01 lds r12, 0x012C
13cba: d1 2c mov r13, r1
13cbc: e1 2c mov r14, r1
13cbe: f1 2c mov r15, r1
// if(PlatinenVersion < 20) CalculateServoSignals = 0; else
CalculateServoSignals++;
}
else
{
roll = (cosinus * IntegralRoll) / 128L + (sinus * IntegralNick) / 128L;
13cc0: 20 91 3e 04 lds r18, 0x043E
13cc4: 30 91 3f 04 lds r19, 0x043F
13cc8: 40 91 40 04 lds r20, 0x0440
13ccc: 50 91 41 04 lds r21, 0x0441
13cd0: bb 27 eor r27, r27
13cd2: a7 fd sbrc r26, 7
13cd4: b0 95 com r27
13cd6: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
13cda: 8b 01 movw r16, r22
13cdc: 9c 01 movw r18, r24
13cde: 99 23 and r25, r25
13ce0: 24 f4 brge .+8 ; 0x13cea <CalculateServo+0x2c2>
13ce2: 01 58 subi r16, 0x81 ; 129
13ce4: 1f 4f sbci r17, 0xFF ; 255
13ce6: 2f 4f sbci r18, 0xFF ; 255
13ce8: 3f 4f sbci r19, 0xFF ; 255
13cea: 48 01 movw r8, r16
13cec: 59 01 movw r10, r18
13cee: 68 94 set
13cf0: 16 f8 bld r1, 6
13cf2: b5 94 asr r11
13cf4: a7 94 ror r10
13cf6: 97 94 ror r9
13cf8: 87 94 ror r8
13cfa: 16 94 lsr r1
13cfc: d1 f7 brne .-12 ; 0x13cf2 <CalculateServo+0x2ca>
13cfe: 20 91 42 04 lds r18, 0x0442
13d02: 30 91 43 04 lds r19, 0x0443
13d06: 40 91 44 04 lds r20, 0x0444
13d0a: 50 91 45 04 lds r21, 0x0445
13d0e: ae 2f mov r26, r30
13d10: bb 27 eor r27, r27
13d12: a7 fd sbrc r26, 7
13d14: b0 95 com r27
13d16: 0e 94 d2 b1 call 0x163a4 ; 0x163a4 <__mulshisi3>
13d1a: 8b 01 movw r16, r22
13d1c: 9c 01 movw r18, r24
13d1e: 99 23 and r25, r25
13d20: 24 f4 brge .+8 ; 0x13d2a <CalculateServo+0x302>
13d22: 01 58 subi r16, 0x81 ; 129
13d24: 1f 4f sbci r17, 0xFF ; 255
13d26: 2f 4f sbci r18, 0xFF ; 255
13d28: 3f 4f sbci r19, 0xFF ; 255
13d2a: d9 01 movw r26, r18
13d2c: c8 01 movw r24, r16
13d2e: 68 94 set
13d30: 16 f8 bld r1, 6
13d32: b5 95 asr r27
13d34: a7 95 ror r26
13d36: 97 95 ror r25
13d38: 87 95 ror r24
13d3a: 16 94 lsr r1
13d3c: d1 f7 brne .-12 ; 0x13d32 <CalculateServo+0x30a>
13d3e: bc 01 movw r22, r24
13d40: cd 01 movw r24, r26
13d42: 68 0d add r22, r8
13d44: 79 1d adc r23, r9
13d46: 8a 1d adc r24, r10
13d48: 9b 1d adc r25, r11
roll = ((long)Parameter_ServoRollComp * roll) / 512L;
13d4a: a7 01 movw r20, r14
13d4c: 96 01 movw r18, r12
13d4e: 0e 94 27 b1 call 0x1624e ; 0x1624e <__mulsi3>
13d52: 6b 01 movw r12, r22
13d54: 7c 01 movw r14, r24
13d56: 99 23 and r25, r25
13d58: 34 f4 brge .+12 ; 0x13d66 <CalculateServo+0x33e>
13d5a: 3f ef ldi r19, 0xFF ; 255
13d5c: c3 0e add r12, r19
13d5e: 31 e0 ldi r19, 0x01 ; 1
13d60: d3 1e adc r13, r19
13d62: e1 1c adc r14, r1
13d64: f1 1c adc r15, r1
13d66: 0b 2e mov r0, r27
13d68: b9 e0 ldi r27, 0x09 ; 9
13d6a: f5 94 asr r15
13d6c: e7 94 ror r14
13d6e: d7 94 ror r13
13d70: c7 94 ror r12
13d72: ba 95 dec r27
13d74: d1 f7 brne .-12 ; 0x13d6a <CalculateServo+0x342>
13d76: b0 2d mov r27, r0
ServoRollOffset += ((int16_t)Parameter_ServoRollControl * (MULTIPLYER*16) - ServoRollOffset) / EE_Parameter.ServoManualControlSpeed;
13d78: 40 91 ab 02 lds r20, 0x02AB
13d7c: 50 91 ac 02 lds r21, 0x02AC
13d80: 20 91 ab 02 lds r18, 0x02AB
13d84: 30 91 ac 02 lds r19, 0x02AC
13d88: 80 91 2e 01 lds r24, 0x012E
13d8c: 60 e4 ldi r22, 0x40 ; 64
13d8e: 86 9f mul r24, r22
13d90: c0 01 movw r24, r0
13d92: 11 24 eor r1, r1
13d94: 84 1b sub r24, r20
13d96: 95 0b sbc r25, r21
13d98: 60 91 74 05 lds r22, 0x0574
13d9c: 70 e0 ldi r23, 0x00 ; 0
13d9e: 0e 94 56 b1 call 0x162ac ; 0x162ac <__divmodhi4>
13da2: 26 0f add r18, r22
13da4: 37 1f adc r19, r23
13da6: 30 93 ac 02 sts 0x02AC, r19
13daa: 20 93 ab 02 sts 0x02AB, r18
if(EE_Parameter.ServoCompInvert & SERVO_ROLL_INV)
13dae: 80 91 b7 05 lds r24, 0x05B7
13db2: 81 ff sbrs r24, 1
13db4: 18 c0 rjmp .+48 ; 0x13de6 <CalculateServo+0x3be>
{ // inverting movement of servo
roll = ServoRollOffset / 16 + roll;
13db6: 80 91 ab 02 lds r24, 0x02AB
13dba: 90 91 ac 02 lds r25, 0x02AC
13dbe: 99 23 and r25, r25
13dc0: 0c f4 brge .+2 ; 0x13dc4 <CalculateServo+0x39c>
13dc2: 0f 96 adiw r24, 0x0f ; 15
13dc4: 95 95 asr r25
13dc6: 87 95 ror r24
13dc8: 95 95 asr r25
13dca: 87 95 ror r24
13dcc: 95 95 asr r25
13dce: 87 95 ror r24
13dd0: 95 95 asr r25
13dd2: 87 95 ror r24
13dd4: aa 27 eor r26, r26
13dd6: 97 fd sbrc r25, 7
13dd8: a0 95 com r26
13dda: ba 2f mov r27, r26
13ddc: c8 0e add r12, r24
13dde: d9 1e adc r13, r25
13de0: ea 1e adc r14, r26
13de2: fb 1e adc r15, r27
13de4: 1b c0 rjmp .+54 ; 0x13e1c <CalculateServo+0x3f4>
}
else
{ // inverting movement of servo
roll = ServoRollOffset / 16 - roll;
13de6: 80 91 ab 02 lds r24, 0x02AB
13dea: 90 91 ac 02 lds r25, 0x02AC
13dee: 99 23 and r25, r25
13df0: 0c f4 brge .+2 ; 0x13df4 <CalculateServo+0x3cc>
13df2: 0f 96 adiw r24, 0x0f ; 15
13df4: 95 95 asr r25
13df6: 87 95 ror r24
13df8: 95 95 asr r25
13dfa: 87 95 ror r24
13dfc: 95 95 asr r25
13dfe: 87 95 ror r24
13e00: 95 95 asr r25
13e02: 87 95 ror r24
13e04: aa 27 eor r26, r26
13e06: 97 fd sbrc r25, 7
13e08: a0 95 com r26
13e0a: ba 2f mov r27, r26
13e0c: 9c 01 movw r18, r24
13e0e: ad 01 movw r20, r26
13e10: 2c 19 sub r18, r12
13e12: 3d 09 sbc r19, r13
13e14: 4e 09 sbc r20, r14
13e16: 5f 09 sbc r21, r15
13e18: 69 01 movw r12, r18
13e1a: 7a 01 movw r14, r20
}
if(EE_Parameter.ServoFilterRoll) ServoRollValue = ((ServoRollValue * EE_Parameter.ServoFilterRoll) + roll) / (EE_Parameter.ServoFilterRoll + 1);
13e1c: 40 91 aa 05 lds r20, 0x05AA
13e20: 44 23 and r20, r20
13e22: 29 f1 breq .+74 ; 0x13e6e <CalculateServo+0x446>
13e24: 50 e0 ldi r21, 0x00 ; 0
13e26: 80 91 c4 04 lds r24, 0x04C4
13e2a: 90 91 c5 04 lds r25, 0x04C5
13e2e: 48 9f mul r20, r24
13e30: b0 01 movw r22, r0
13e32: 49 9f mul r20, r25
13e34: 70 0d add r23, r0
13e36: 58 9f mul r21, r24
13e38: 70 0d add r23, r0
13e3a: 11 24 eor r1, r1
13e3c: cb 01 movw r24, r22
13e3e: aa 27 eor r26, r26
13e40: 97 fd sbrc r25, 7
13e42: a0 95 com r26
13e44: ba 2f mov r27, r26
13e46: bc 01 movw r22, r24
13e48: cd 01 movw r24, r26
13e4a: 6c 0d add r22, r12
13e4c: 7d 1d adc r23, r13
13e4e: 8e 1d adc r24, r14
13e50: 9f 1d adc r25, r15
13e52: 9a 01 movw r18, r20
13e54: 2f 5f subi r18, 0xFF ; 255
13e56: 3f 4f sbci r19, 0xFF ; 255
13e58: 44 27 eor r20, r20
13e5a: 37 fd sbrc r19, 7
13e5c: 40 95 com r20
13e5e: 54 2f mov r21, r20
13e60: 0e 94 8b b1 call 0x16316 ; 0x16316 <__divmodsi4>
13e64: 30 93 c5 04 sts 0x04C5, r19
13e68: 20 93 c4 04 sts 0x04C4, r18
13e6c: 04 c0 rjmp .+8 ; 0x13e76 <CalculateServo+0x44e>
else ServoRollValue = roll;
13e6e: d0 92 c5 04 sts 0x04C5, r13
13e72: c0 92 c4 04 sts 0x04C4, r12
// limit servo value to its parameter range definition
if(ServoRollValue < ((int16_t)EE_Parameter.ServoRollMin * MULTIPLYER))
13e76: 80 91 71 05 lds r24, 0x0571
13e7a: 90 e0 ldi r25, 0x00 ; 0
13e7c: 88 0f add r24, r24
13e7e: 99 1f adc r25, r25
13e80: 88 0f add r24, r24
13e82: 99 1f adc r25, r25
13e84: 20 91 c4 04 lds r18, 0x04C4
13e88: 30 91 c5 04 lds r19, 0x04C5
13e8c: 28 17 cp r18, r24
13e8e: 39 07 cpc r19, r25
13e90: 2c f4 brge .+10 ; 0x13e9c <CalculateServo+0x474>
{
ServoRollValue = (int16_t)EE_Parameter.ServoRollMin * MULTIPLYER;
13e92: 90 93 c5 04 sts 0x04C5, r25
13e96: 80 93 c4 04 sts 0x04C4, r24
13e9a: 12 c0 rjmp .+36 ; 0x13ec0 <CalculateServo+0x498>
}
else
if(ServoRollValue > ((int16_t)EE_Parameter.ServoRollMax * MULTIPLYER))
13e9c: 80 91 72 05 lds r24, 0x0572
13ea0: 90 e0 ldi r25, 0x00 ; 0
13ea2: 88 0f add r24, r24
13ea4: 99 1f adc r25, r25
13ea6: 88 0f add r24, r24
13ea8: 99 1f adc r25, r25
13eaa: 20 91 c4 04 lds r18, 0x04C4
13eae: 30 91 c5 04 lds r19, 0x04C5
13eb2: 82 17 cp r24, r18
13eb4: 93 07 cpc r25, r19
13eb6: 24 f4 brge .+8 ; 0x13ec0 <CalculateServo+0x498>
{
ServoRollValue = (int16_t)EE_Parameter.ServoRollMax * MULTIPLYER;
13eb8: 90 93 c5 04 sts 0x04C5, r25
13ebc: 80 93 c4 04 sts 0x04C4, r24
}
CalculateServoSignals = 0;
13ec0: 10 92 af 02 sts 0x02AF, r1
}
}
13ec4: 1f 91 pop r17
13ec6: 0f 91 pop r16
13ec8: ff 90 pop r15
13eca: ef 90 pop r14
13ecc: df 90 pop r13
13ece: cf 90 pop r12
13ed0: bf 90 pop r11
13ed2: af 90 pop r10
13ed4: 9f 90 pop r9
13ed6: 8f 90 pop r8
13ed8: 08 95 ret
00013eda <__vector_9>:
ISR(TIMER2_COMPA_vect)
{
13eda: 1f 92 push r1
13edc: 0f 92 push r0
13ede: 0f b6 in r0, 0x3f ; 63
13ee0: 0f 92 push r0
13ee2: 11 24 eor r1, r1
13ee4: 0b b6 in r0, 0x3b ; 59
13ee6: 0f 92 push r0
13ee8: 2f 93 push r18
13eea: 3f 93 push r19
13eec: 4f 93 push r20
13eee: 8f 93 push r24
13ef0: 9f 93 push r25
13ef2: ef 93 push r30
13ef4: ff 93 push r31
*/
{
//-----------------------------------------------------
// PPM state machine, onboard demultiplexed by HEF4017
//-----------------------------------------------------
if(!PulseOutput) // pulse output complete
13ef6: 80 91 c2 04 lds r24, 0x04C2
13efa: 81 11 cpse r24, r1
13efc: f9 c0 rjmp .+498 ; 0x140f0 <__vector_9+0x216>
{
if(TCCR2A & (1<<COM2A0)) // we had a low pulse
13efe: 80 91 b0 00 lds r24, 0x00B0
13f02: 86 ff sbrs r24, 6
13f04: bc c0 rjmp .+376 ; 0x1407e <__vector_9+0x1a4>
{
TCCR2A &= ~(1<<COM2A0);// make a high pulse
13f06: e0 eb ldi r30, 0xB0 ; 176
13f08: f0 e0 ldi r31, 0x00 ; 0
13f0a: 80 81 ld r24, Z
13f0c: 8f 7b andi r24, 0xBF ; 191
13f0e: 80 83 st Z, r24
if(ServoIndex == 0) // if we are at the sync gap
13f10: e0 91 c1 04 lds r30, 0x04C1
13f14: e1 11 cpse r30, r1
13f16: 19 c0 rjmp .+50 ; 0x13f4a <__vector_9+0x70>
{
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; // generate sync gap by filling time to full frame time
13f18: 40 91 73 05 lds r20, 0x0573
13f1c: 2d ed ldi r18, 0xDD ; 221
13f1e: 36 e0 ldi r19, 0x06 ; 6
13f20: 42 9f mul r20, r18
13f22: c0 01 movw r24, r0
13f24: 43 9f mul r20, r19
13f26: 90 0d add r25, r0
13f28: 11 24 eor r1, r1
13f2a: 20 91 bf 04 lds r18, 0x04BF
13f2e: 30 91 c0 04 lds r19, 0x04C0
13f32: 82 1b sub r24, r18
13f34: 93 0b sbc r25, r19
13f36: 90 93 c9 04 sts 0x04C9, r25
13f3a: 80 93 c8 04 sts 0x04C8, r24
ServoFrameTime = 0; // reset servo frame time
13f3e: 10 92 c0 04 sts 0x04C0, r1
13f42: 10 92 bf 04 sts 0x04BF, r1
HEF4017Reset_ON; // enable HEF4017 reset
13f46: 46 9a sbi 0x08, 6 ; 8
13f48: d0 c0 rjmp .+416 ; 0x140ea <__vector_9+0x210>
}
else // servo channels
if(ServoIndex > EE_Parameter.ServoNickRefresh)
13f4a: 80 91 73 05 lds r24, 0x0573
13f4e: 8e 17 cp r24, r30
13f50: 38 f4 brcc .+14 ; 0x13f60 <__vector_9+0x86>
{
RemainingPulse = 10; // end it here
13f52: 8a e0 ldi r24, 0x0A ; 10
13f54: 90 e0 ldi r25, 0x00 ; 0
13f56: 90 93 c9 04 sts 0x04C9, r25
13f5a: 80 93 c8 04 sts 0x04C8, r24
13f5e: c5 c0 rjmp .+394 ; 0x140ea <__vector_9+0x210>
}
else
{
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms
13f60: 89 ea ldi r24, 0xA9 ; 169
13f62: 93 e0 ldi r25, 0x03 ; 3
13f64: 90 93 c9 04 sts 0x04C9, r25
13f68: 80 93 c8 04 sts 0x04C8, r24
switch(ServoIndex) // map servo channels
13f6c: e3 30 cpi r30, 0x03 ; 3
13f6e: 09 f1 breq .+66 ; 0x13fb2 <__vector_9+0xd8>
13f70: 28 f4 brcc .+10 ; 0x13f7c <__vector_9+0xa2>
13f72: e1 30 cpi r30, 0x01 ; 1
13f74: 41 f0 breq .+16 ; 0x13f86 <__vector_9+0xac>
13f76: e2 30 cpi r30, 0x02 ; 2
13f78: 89 f0 breq .+34 ; 0x13f9c <__vector_9+0xc2>
13f7a: 45 c0 rjmp .+138 ; 0x14006 <__vector_9+0x12c>
13f7c: e4 30 cpi r30, 0x04 ; 4
13f7e: 39 f1 breq .+78 ; 0x13fce <__vector_9+0xf4>
13f80: e5 30 cpi r30, 0x05 ; 5
13f82: 99 f1 breq .+102 ; 0x13fea <__vector_9+0x110>
13f84: 40 c0 rjmp .+128 ; 0x14006 <__vector_9+0x12c>
{
case 1: // Nick Compensation Servo
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
13f86: 80 91 c6 04 lds r24, 0x04C6
13f8a: 90 91 c7 04 lds r25, 0x04C7
13f8e: 87 55 subi r24, 0x57 ; 87
13f90: 9e 4f sbci r25, 0xFE ; 254
13f92: 90 93 c9 04 sts 0x04C9, r25
13f96: 80 93 c8 04 sts 0x04C8, r24
break;
13f9a: 44 c0 rjmp .+136 ; 0x14024 <__vector_9+0x14a>
case 2: // Roll Compensation Servo
RemainingPulse += ServoRollValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
13f9c: 80 91 c4 04 lds r24, 0x04C4
13fa0: 90 91 c5 04 lds r25, 0x04C5
13fa4: 87 55 subi r24, 0x57 ; 87
13fa6: 9e 4f sbci r25, 0xFE ; 254
13fa8: 90 93 c9 04 sts 0x04C9, r25
13fac: 80 93 c8 04 sts 0x04C8, r24
break;
13fb0: 39 c0 rjmp .+114 ; 0x14024 <__vector_9+0x14a>
case 3:
RemainingPulse += ((int16_t)Parameter_Servo3 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
13fb2: 80 91 38 06 lds r24, 0x0638
13fb6: 90 e0 ldi r25, 0x00 ; 0
13fb8: 88 0f add r24, r24
13fba: 99 1f adc r25, r25
13fbc: 88 0f add r24, r24
13fbe: 99 1f adc r25, r25
13fc0: 87 55 subi r24, 0x57 ; 87
13fc2: 9e 4f sbci r25, 0xFE ; 254
13fc4: 90 93 c9 04 sts 0x04C9, r25
13fc8: 80 93 c8 04 sts 0x04C8, r24
break;
13fcc: 2b c0 rjmp .+86 ; 0x14024 <__vector_9+0x14a>
case 4:
RemainingPulse += ((int16_t)Parameter_Servo4 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
13fce: 80 91 19 06 lds r24, 0x0619
13fd2: 90 e0 ldi r25, 0x00 ; 0
13fd4: 88 0f add r24, r24
13fd6: 99 1f adc r25, r25
13fd8: 88 0f add r24, r24
13fda: 99 1f adc r25, r25
13fdc: 87 55 subi r24, 0x57 ; 87
13fde: 9e 4f sbci r25, 0xFE ; 254
13fe0: 90 93 c9 04 sts 0x04C9, r25
13fe4: 80 93 c8 04 sts 0x04C8, r24
break;
13fe8: 1d c0 rjmp .+58 ; 0x14024 <__vector_9+0x14a>
case 5:
RemainingPulse += ((int16_t)Parameter_Servo5 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
13fea: 80 91 41 06 lds r24, 0x0641
13fee: 90 e0 ldi r25, 0x00 ; 0
13ff0: 88 0f add r24, r24
13ff2: 99 1f adc r25, r25
13ff4: 88 0f add r24, r24
13ff6: 99 1f adc r25, r25
13ff8: 87 55 subi r24, 0x57 ; 87
13ffa: 9e 4f sbci r25, 0xFE ; 254
13ffc: 90 93 c9 04 sts 0x04C9, r25
14000: 80 93 c8 04 sts 0x04C8, r24
break;
14004: 0f c0 rjmp .+30 ; 0x14024 <__vector_9+0x14a>
default: // other servo channels
RemainingPulse += 2 * PPM_in[ServoIndex]; // add channel value, factor of 2 because timer 1 increments 3.2µs
14006: f0 e0 ldi r31, 0x00 ; 0
14008: ee 0f add r30, r30
1400a: ff 1f adc r31, r31
1400c: ef 5c subi r30, 0xCF ; 207
1400e: f7 4f sbci r31, 0xF7 ; 247
14010: 80 81 ld r24, Z
14012: 91 81 ldd r25, Z+1 ; 0x01
14014: 88 0f add r24, r24
14016: 99 1f adc r25, r25
14018: 87 55 subi r24, 0x57 ; 87
1401a: 9c 4f sbci r25, 0xFC ; 252
1401c: 90 93 c9 04 sts 0x04C9, r25
14020: 80 93 c8 04 sts 0x04C8, r24
break;
}
// range servo pulse width
if(RemainingPulse > MAXSERVOPULSE) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit
14024: 80 91 c8 04 lds r24, 0x04C8
14028: 90 91 c9 04 lds r25, 0x04C9
1402c: 8d 3d cpi r24, 0xDD ; 221
1402e: 25 e0 ldi r18, 0x05 ; 5
14030: 92 07 cpc r25, r18
14032: 38 f0 brcs .+14 ; 0x14042 <__vector_9+0x168>
14034: 8c ed ldi r24, 0xDC ; 220
14036: 95 e0 ldi r25, 0x05 ; 5
14038: 90 93 c9 04 sts 0x04C9, r25
1403c: 80 93 c8 04 sts 0x04C8, r24
14040: 09 c0 rjmp .+18 ; 0x14054 <__vector_9+0x17a>
else if(RemainingPulse < MINSERVOPULSE) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit
14042: 87 37 cpi r24, 0x77 ; 119
14044: 91 40 sbci r25, 0x01 ; 1
14046: 30 f4 brcc .+12 ; 0x14054 <__vector_9+0x17a>
14048: 87 e7 ldi r24, 0x77 ; 119
1404a: 91 e0 ldi r25, 0x01 ; 1
1404c: 90 93 c9 04 sts 0x04C9, r25
14050: 80 93 c8 04 sts 0x04C8, r24
// substract stop pulse width
RemainingPulse -= PPM_STOPPULSE;
14054: 80 91 c8 04 lds r24, 0x04C8
14058: 90 91 c9 04 lds r25, 0x04C9
1405c: 8c 5b subi r24, 0xBC ; 188
1405e: 91 09 sbc r25, r1
14060: 90 93 c9 04 sts 0x04C9, r25
14064: 80 93 c8 04 sts 0x04C8, r24
// accumulate time for correct sync gap
ServoFrameTime += RemainingPulse;
14068: 20 91 bf 04 lds r18, 0x04BF
1406c: 30 91 c0 04 lds r19, 0x04C0
14070: 82 0f add r24, r18
14072: 93 1f adc r25, r19
14074: 90 93 c0 04 sts 0x04C0, r25
14078: 80 93 bf 04 sts 0x04BF, r24
1407c: 36 c0 rjmp .+108 ; 0x140ea <__vector_9+0x210>
}
}
else // we had a high pulse
{
TCCR2A |= (1<<COM2A0); // make a low pulse
1407e: e0 eb ldi r30, 0xB0 ; 176
14080: f0 e0 ldi r31, 0x00 ; 0
14082: 80 81 ld r24, Z
14084: 80 64 ori r24, 0x40 ; 64
14086: 80 83 st Z, r24
// set pulsewidth to stop pulse width
RemainingPulse = PPM_STOPPULSE;
14088: 8c eb ldi r24, 0xBC ; 188
1408a: 90 e0 ldi r25, 0x00 ; 0
1408c: 90 93 c9 04 sts 0x04C9, r25
14090: 80 93 c8 04 sts 0x04C8, r24
// accumulate time for correct sync gap
ServoFrameTime += RemainingPulse;
14094: 80 91 bf 04 lds r24, 0x04BF
14098: 90 91 c0 04 lds r25, 0x04C0
1409c: 84 54 subi r24, 0x44 ; 68
1409e: 9f 4f sbci r25, 0xFF ; 255
140a0: 90 93 c0 04 sts 0x04C0, r25
140a4: 80 93 bf 04 sts 0x04BF, r24
if((ServoActive && SenderOkay) || ServoActive == 2) HEF4017Reset_OFF; // disable HEF4017 reset
140a8: 80 91 cb 04 lds r24, 0x04CB
140ac: 88 23 and r24, r24
140ae: 21 f0 breq .+8 ; 0x140b8 <__vector_9+0x1de>
140b0: 80 91 04 04 lds r24, 0x0404
140b4: 81 11 cpse r24, r1
140b6: 04 c0 rjmp .+8 ; 0x140c0 <__vector_9+0x1e6>
140b8: 80 91 cb 04 lds r24, 0x04CB
140bc: 82 30 cpi r24, 0x02 ; 2
140be: 11 f4 brne .+4 ; 0x140c4 <__vector_9+0x1ea>
140c0: 46 98 cbi 0x08, 6 ; 8
140c2: 01 c0 rjmp .+2 ; 0x140c6 <__vector_9+0x1ec>
else HEF4017Reset_ON;
140c4: 46 9a sbi 0x08, 6 ; 8
ServoIndex++;
140c6: 20 91 c1 04 lds r18, 0x04C1
140ca: 2f 5f subi r18, 0xFF ; 255
140cc: 20 93 c1 04 sts 0x04C1, r18
if(ServoIndex > EE_Parameter.ServoNickRefresh+1)
140d0: 30 e0 ldi r19, 0x00 ; 0
140d2: 80 91 73 05 lds r24, 0x0573
140d6: 90 e0 ldi r25, 0x00 ; 0
140d8: 01 96 adiw r24, 0x01 ; 1
140da: 82 17 cp r24, r18
140dc: 93 07 cpc r25, r19
140de: 2c f4 brge .+10 ; 0x140ea <__vector_9+0x210>
{
CalculateServoSignals = 1;
140e0: 81 e0 ldi r24, 0x01 ; 1
140e2: 80 93 af 02 sts 0x02AF, r24
ServoIndex = 0; // reset to the sync gap
140e6: 10 92 c1 04 sts 0x04C1, r1
}
}
// set pulse output active
PulseOutput = 1;
140ea: 81 e0 ldi r24, 0x01 ; 1
140ec: 80 93 c2 04 sts 0x04C2, r24
}
} // EOF PPM state machine
// General pulse output generator
if(RemainingPulse > (255 + IRS_RUNTIME))
140f0: 80 91 c8 04 lds r24, 0x04C8
140f4: 90 91 c9 04 lds r25, 0x04C9
140f8: 8f 37 cpi r24, 0x7F ; 127
140fa: 21 e0 ldi r18, 0x01 ; 1
140fc: 92 07 cpc r25, r18
140fe: 70 f0 brcs .+28 ; 0x1411c <__vector_9+0x242>
{
OCR2A = 255;
14100: 8f ef ldi r24, 0xFF ; 255
14102: 80 93 b3 00 sts 0x00B3, r24
RemainingPulse -= 255;
14106: 80 91 c8 04 lds r24, 0x04C8
1410a: 90 91 c9 04 lds r25, 0x04C9
1410e: 8f 5f subi r24, 0xFF ; 255
14110: 91 09 sbc r25, r1
14112: 90 93 c9 04 sts 0x04C9, r25
14116: 80 93 c8 04 sts 0x04C8, r24
1411a: 2d c0 rjmp .+90 ; 0x14176 <__vector_9+0x29c>
}
else
{
if(RemainingPulse > 255) // this is the 2nd last part
1411c: 8f 3f cpi r24, 0xFF ; 255
1411e: 91 05 cpc r25, r1
14120: 11 f1 breq .+68 ; 0x14166 <__vector_9+0x28c>
14122: 08 f1 brcs .+66 ; 0x14166 <__vector_9+0x28c>
{
if((RemainingPulse - 255) < IRS_RUNTIME)
14124: 8f 5f subi r24, 0xFF ; 255
14126: 91 09 sbc r25, r1
14128: 8f 37 cpi r24, 0x7F ; 127
1412a: 91 05 cpc r25, r1
1412c: 70 f4 brcc .+28 ; 0x1414a <__vector_9+0x270>
{
OCR2A = 255 - IRS_RUNTIME;
1412e: 80 e8 ldi r24, 0x80 ; 128
14130: 80 93 b3 00 sts 0x00B3, r24
RemainingPulse -= 255 - IRS_RUNTIME;
14134: 80 91 c8 04 lds r24, 0x04C8
14138: 90 91 c9 04 lds r25, 0x04C9
1413c: 80 58 subi r24, 0x80 ; 128
1413e: 91 09 sbc r25, r1
14140: 90 93 c9 04 sts 0x04C9, r25
14144: 80 93 c8 04 sts 0x04C8, r24
14148: 16 c0 rjmp .+44 ; 0x14176 <__vector_9+0x29c>
}
else // last part > ISR_RUNTIME
{
OCR2A = 255;
1414a: 8f ef ldi r24, 0xFF ; 255
1414c: 80 93 b3 00 sts 0x00B3, r24
RemainingPulse -= 255;
14150: 80 91 c8 04 lds r24, 0x04C8
14154: 90 91 c9 04 lds r25, 0x04C9
14158: 8f 5f subi r24, 0xFF ; 255
1415a: 91 09 sbc r25, r1
1415c: 90 93 c9 04 sts 0x04C9, r25
14160: 80 93 c8 04 sts 0x04C8, r24
14164: 08 c0 rjmp .+16 ; 0x14176 <__vector_9+0x29c>
}
}
else // this is the last part
{
OCR2A = RemainingPulse;
14166: 80 93 b3 00 sts 0x00B3, r24
RemainingPulse = 0;
1416a: 10 92 c9 04 sts 0x04C9, r1
1416e: 10 92 c8 04 sts 0x04C8, r1
PulseOutput = 0; // trigger to stop pulse
14172: 10 92 c2 04 sts 0x04C2, r1
}
} // EOF general pulse output generator
}
14176: ff 91 pop r31
14178: ef 91 pop r30
1417a: 9f 91 pop r25
1417c: 8f 91 pop r24
1417e: 4f 91 pop r20
14180: 3f 91 pop r19
14182: 2f 91 pop r18
14184: 0f 90 pop r0
14186: 0b be out 0x3b, r0 ; 59
14188: 0f 90 pop r0
1418a: 0f be out 0x3f, r0 ; 63
1418c: 0f 90 pop r0
1418e: 1f 90 pop r1
14190: 18 95 reti
00014192 <I2C_Init>:
/**************************************************/
void I2C_Init(char clear)
{
uint8_t i;
uint8_t sreg = SREG;
14192: 2f b7 in r18, 0x3f ; 63
cli();
14194: f8 94 cli
// SDA is INPUT
DDRC &= ~(1<<DDRC1);
14196: 39 98 cbi 0x07, 1 ; 7
// SCL is output
DDRC |= (1<<DDRC0);
14198: 38 9a sbi 0x07, 0 ; 7
// pull up SDA
PORTC |= (1<<PORTC0)|(1<<PORTC1);
1419a: 98 b1 in r25, 0x08 ; 8
1419c: 93 60 ori r25, 0x03 ; 3
1419e: 98 b9 out 0x08, r25 ; 8
// TWI Status Register
// prescaler 1 (TWPS1 = 0, TWPS0 = 0)
TWSR &= ~((1<<TWPS1)|(1<<TWPS0));
141a0: e9 eb ldi r30, 0xB9 ; 185
141a2: f0 e0 ldi r31, 0x00 ; 0
141a4: 90 81 ld r25, Z
141a6: 9c 7f andi r25, 0xFC ; 252
141a8: 90 83 st Z, r25
// set TWI Bit Rate Register
TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
141aa: 9a e2 ldi r25, 0x2A ; 42
141ac: 90 93 b8 00 sts 0x00B8, r25
twi_state = TWI_STATE_MOTOR_TX;
141b0: 10 92 e3 04 sts 0x04E3, r1
motor_write = 0;
141b4: 10 92 e2 04 sts 0x04E2, r1
motor_read = 0;
141b8: 10 92 e1 04 sts 0x04E1, r1
if(clear) for(i=0; i < MAX_MOTORS; i++)
141bc: 88 23 and r24, r24
141be: 31 f1 breq .+76 ; 0x1420c <I2C_Init+0x7a>
141c0: e5 ea ldi r30, 0xA5 ; 165
141c2: f9 e0 ldi r31, 0x09 ; 9
141c4: 89 e5 ldi r24, 0x59 ; 89
141c6: 9a e0 ldi r25, 0x0A ; 10
141c8: df 01 movw r26, r30
141ca: 1e 97 sbiw r26, 0x0e ; 14
{
Motor[i].Version = 0;
141cc: 1c 92 st X, r1
141ce: 11 96 adiw r26, 0x01 ; 1
Motor[i].SetPoint = 0;
141d0: 1c 92 st X, r1
141d2: 11 96 adiw r26, 0x01 ; 1
Motor[i].SetPointLowerBits = 0;
141d4: 1c 92 st X, r1
141d6: 11 96 adiw r26, 0x01 ; 1
Motor[i].State = 0;
141d8: 1c 92 st X, r1
141da: 11 96 adiw r26, 0x01 ; 1
Motor[i].ReadMode = BL_READMODE_STATUS;
141dc: 1c 92 st X, r1
141de: 11 96 adiw r26, 0x01 ; 1
Motor[i].Current = 0;
141e0: 1c 92 st X, r1
141e2: 11 96 adiw r26, 0x01 ; 1
Motor[i].MaxPWM = 0;
141e4: 1c 92 st X, r1
141e6: 11 96 adiw r26, 0x01 ; 1
Motor[i].Temperature = 0;
141e8: 1c 92 st X, r1
Motor[i].NotReadyCnt = 0;
141ea: 10 82 st Z, r1
141ec: 11 96 adiw r26, 0x01 ; 1
Motor[i].RPM = 0;
141ee: 1c 92 st X, r1
141f0: 11 96 adiw r26, 0x01 ; 1
Motor[i].reserved1 = 0;
141f2: 1c 92 st X, r1
141f4: 11 96 adiw r26, 0x01 ; 1
Motor[i].Voltage = 0;
141f6: 1c 92 st X, r1
141f8: 11 96 adiw r26, 0x01 ; 1
Motor[i].SlaveI2cError = 0;
141fa: 1c 92 st X, r1
141fc: 11 96 adiw r26, 0x01 ; 1
Motor[i].VersionMajor = 0;
141fe: 1c 92 st X, r1
14200: 11 96 adiw r26, 0x01 ; 1
Motor[i].VersionMinor = 0;
14202: 1c 92 st X, r1
14204: 3f 96 adiw r30, 0x0f ; 15
twi_state = TWI_STATE_MOTOR_TX;
motor_write = 0;
motor_read = 0;
if(clear) for(i=0; i < MAX_MOTORS; i++)
14206: e8 17 cp r30, r24
14208: f9 07 cpc r31, r25
1420a: f1 f6 brne .-68 ; 0x141c8 <I2C_Init+0x36>
Motor[i].Voltage = 0;
Motor[i].SlaveI2cError = 0;
Motor[i].VersionMajor = 0;
Motor[i].VersionMinor = 0;
}
sei();
1420c: 78 94 sei
SREG = sreg;
1420e: 2f bf out 0x3f, r18 ; 63
14210: 08 95 ret
00014212 <I2C_Reset>:
}
void I2C_Reset(void)
{
14212: 0f 93 push r16
14214: 1f 93 push r17
14216: cf 93 push r28
14218: df 93 push r29
// stop i2c bus
I2C_Stop(TWI_STATE_MOTOR_TX);
1421a: 10 92 e3 04 sts 0x04E3, r1
1421e: cc eb ldi r28, 0xBC ; 188
14220: d0 e0 ldi r29, 0x00 ; 0
14222: 84 e9 ldi r24, 0x94 ; 148
14224: 88 83 st Y, r24
TWCR = (1<<TWINT); // reset to original state incl. interrupt flag reset
14226: 80 e8 ldi r24, 0x80 ; 128
14228: 88 83 st Y, r24
TWAMR = 0;
1422a: 10 92 bd 00 sts 0x00BD, r1
TWAR = 0;
1422e: 10 92 ba 00 sts 0x00BA, r1
TWDR = 0;
14232: 0b eb ldi r16, 0xBB ; 187
14234: 10 e0 ldi r17, 0x00 ; 0
14236: f8 01 movw r30, r16
14238: 10 82 st Z, r1
TWSR = 0;
1423a: 10 92 b9 00 sts 0x00B9, r1
TWBR = 0;
1423e: 10 92 b8 00 sts 0x00B8, r1
I2C_TransferActive = 0;
14242: 10 92 e0 04 sts 0x04E0, r1
I2C_Init(0);
14246: 80 e0 ldi r24, 0x00 ; 0
14248: a4 df rcall .-184 ; 0x14192 <I2C_Init>
I2C_WriteByte(0);
1424a: f8 01 movw r30, r16
1424c: 10 82 st Z, r1
1424e: 85 e8 ldi r24, 0x85 ; 133
14250: 88 83 st Y, r24
BLFlags |= BLFLAG_READ_VERSION;
14252: 80 91 de 04 lds r24, 0x04DE
14256: 82 60 ori r24, 0x02 ; 2
14258: 80 93 de 04 sts 0x04DE, r24
}
1425c: df 91 pop r29
1425e: cf 91 pop r28
14260: 1f 91 pop r17
14262: 0f 91 pop r16
14264: 08 95 ret
00014266 <__vector_26>:
/****************************************/
/* I2C ISR */
/****************************************/
ISR (TWI_vect)
{
14266: 1f 92 push r1
14268: 0f 92 push r0
1426a: 0f b6 in r0, 0x3f ; 63
1426c: 0f 92 push r0
1426e: 11 24 eor r1, r1
14270: 0b b6 in r0, 0x3b ; 59
14272: 0f 92 push r0
14274: 2f 93 push r18
14276: 3f 93 push r19
14278: 4f 93 push r20
1427a: 8f 93 push r24
1427c: 9f 93 push r25
1427e: af 93 push r26
14280: bf 93 push r27
14282: ef 93 push r30
14284: ff 93 push r31
static uint8_t missing_motor = 0, motor_read_temperature = 0;
static uint8_t *pBuff = 0;
static uint8_t BuffLen = 0;
static uint8_t max_packets = 0;
switch (twi_state++)
14286: 80 91 e3 04 lds r24, 0x04E3
1428a: 91 e0 ldi r25, 0x01 ; 1
1428c: 98 0f add r25, r24
1428e: 90 93 e3 04 sts 0x04E3, r25
14292: 90 e0 ldi r25, 0x00 ; 0
14294: 87 30 cpi r24, 0x07 ; 7
14296: 91 05 cpc r25, r1
14298: 08 f0 brcs .+2 ; 0x1429c <__vector_26+0x36>
1429a: d8 c2 rjmp .+1456 ; 0x1484c <__vector_26+0x5e6>
1429c: fc 01 movw r30, r24
1429e: e0 55 subi r30, 0x50 ; 80
142a0: ff 4f sbci r31, 0xFF ; 255
142a2: 0c 94 a7 b1 jmp 0x1634e ; 0x1634e <__tablejump2__>
{
// Master Transmit
case 0: // TWI_STATE_MOTOR_TX
I2C_TransferActive = 1;
142a6: 81 e0 ldi r24, 0x01 ; 1
142a8: 80 93 e0 04 sts 0x04E0, r24
// skip motor if not used in mixer
while((Mixer.Motor[motor_write][MIX_GAS] <= 0) && (motor_write < MAX_MOTORS)) motor_write++;
142ac: e0 91 e2 04 lds r30, 0x04E2
142b0: f0 e0 ldi r31, 0x00 ; 0
142b2: ee 0f add r30, r30
142b4: ff 1f adc r31, r31
142b6: ee 0f add r30, r30
142b8: ff 1f adc r31, r31
142ba: e9 53 subi r30, 0x39 ; 57
142bc: fa 4f sbci r31, 0xFA ; 250
142be: 85 85 ldd r24, Z+13 ; 0x0d
142c0: 18 16 cp r1, r24
142c2: cc f0 brlt .+50 ; 0x142f6 <__vector_26+0x90>
142c4: 80 91 e2 04 lds r24, 0x04E2
142c8: 8c 30 cpi r24, 0x0C ; 12
142ca: a8 f4 brcc .+42 ; 0x142f6 <__vector_26+0x90>
142cc: 80 91 e2 04 lds r24, 0x04E2
142d0: 8f 5f subi r24, 0xFF ; 255
142d2: 80 93 e2 04 sts 0x04E2, r24
142d6: e0 91 e2 04 lds r30, 0x04E2
142da: f0 e0 ldi r31, 0x00 ; 0
142dc: ee 0f add r30, r30
142de: ff 1f adc r31, r31
142e0: ee 0f add r30, r30
142e2: ff 1f adc r31, r31
142e4: e9 53 subi r30, 0x39 ; 57
142e6: fa 4f sbci r31, 0xFA ; 250
142e8: 85 85 ldd r24, Z+13 ; 0x0d
142ea: 18 16 cp r1, r24
142ec: 24 f0 brlt .+8 ; 0x142f6 <__vector_26+0x90>
142ee: 80 91 e2 04 lds r24, 0x04E2
142f2: 8c 30 cpi r24, 0x0C ; 12
142f4: 58 f3 brcs .-42 ; 0x142cc <__vector_26+0x66>
motor_write %= MAX_MOTORS;
142f6: 90 91 e2 04 lds r25, 0x04E2
142fa: 8b ea ldi r24, 0xAB ; 171
142fc: 98 9f mul r25, r24
142fe: 81 2d mov r24, r1
14300: 11 24 eor r1, r1
14302: 86 95 lsr r24
14304: 86 95 lsr r24
14306: 86 95 lsr r24
14308: 28 2f mov r18, r24
1430a: 22 0f add r18, r18
1430c: 82 0f add r24, r18
1430e: 88 0f add r24, r24
14310: 88 0f add r24, r24
14312: 98 1b sub r25, r24
14314: 90 93 e2 04 sts 0x04E2, r25
if(++max_packets > Max_I2C_Packets) // writing finished, read now
14318: 80 91 d9 04 lds r24, 0x04D9
1431c: 8f 5f subi r24, 0xFF ; 255
1431e: 80 93 d9 04 sts 0x04D9, r24
14322: 90 91 b2 02 lds r25, 0x02B2
14326: 98 17 cp r25, r24
14328: 98 f4 brcc .+38 ; 0x14350 <__vector_26+0xea>
{
max_packets = 0;
1432a: 10 92 d9 04 sts 0x04D9, r1
BLConfig_WriteMask = 0; // reset configuration bitmask
1432e: 10 92 dd 04 sts 0x04DD, r1
14332: 10 92 dc 04 sts 0x04DC, r1
//motor_write = 0; // reset motor write counter for next cycle
twi_state = TWI_STATE_MOTOR_RX;
14336: 85 e0 ldi r24, 0x05 ; 5
14338: 80 93 e3 04 sts 0x04E3, r24
I2C_WriteByte(TWI_BASE_ADDRESS + TW_READ + (motor_read<<1) ); // select slave address in rx mode
1433c: 80 91 e1 04 lds r24, 0x04E1
14340: 88 0f add r24, r24
14342: 8d 5a subi r24, 0xAD ; 173
14344: 80 93 bb 00 sts 0x00BB, r24
14348: 85 e8 ldi r24, 0x85 ; 133
1434a: 80 93 bc 00 sts 0x00BC, r24
1434e: 94 c2 rjmp .+1320 ; 0x14878 <__vector_26+0x612>
}
else I2C_WriteByte(TWI_BASE_ADDRESS + TW_WRITE + (motor_write<<1) ); // select slave address in tx mode
14350: 80 91 e2 04 lds r24, 0x04E2
14354: 88 0f add r24, r24
14356: 8e 5a subi r24, 0xAE ; 174
14358: 80 93 bb 00 sts 0x00BB, r24
1435c: 85 e8 ldi r24, 0x85 ; 133
1435e: 80 93 bc 00 sts 0x00BC, r24
14362: 8a c2 rjmp .+1300 ; 0x14878 <__vector_26+0x612>
break;
case 1: // Send Data to Slave
I2C_WriteByte(Motor[motor_write].SetPoint); // transmit setpoint
14364: a0 91 e2 04 lds r26, 0x04E2
14368: 8f e0 ldi r24, 0x0F ; 15
1436a: 8a 9f mul r24, r26
1436c: d0 01 movw r26, r0
1436e: 11 24 eor r1, r1
14370: a9 56 subi r26, 0x69 ; 105
14372: b6 4f sbci r27, 0xF6 ; 246
14374: 11 96 adiw r26, 0x01 ; 1
14376: 9c 91 ld r25, X
14378: 90 93 bb 00 sts 0x00BB, r25
1437c: 95 e8 ldi r25, 0x85 ; 133
1437e: 90 93 bc 00 sts 0x00BC, r25
// if old version has been detected
if(!(Motor[motor_write].Version & MOTOR_STATE_NEW_PROTOCOL_MASK))
14382: e0 91 e2 04 lds r30, 0x04E2
14386: 8e 9f mul r24, r30
14388: f0 01 movw r30, r0
1438a: 11 24 eor r1, r1
1438c: e9 56 subi r30, 0x69 ; 105
1438e: f6 4f sbci r31, 0xF6 ; 246
14390: 80 81 ld r24, Z
14392: 80 fd sbrc r24, 0
14394: 04 c0 rjmp .+8 ; 0x1439e <__vector_26+0x138>
{
twi_state = 4; //jump over sending more data
14396: 84 e0 ldi r24, 0x04 ; 4
14398: 80 93 e3 04 sts 0x04E3, r24
1439c: 6d c2 rjmp .+1242 ; 0x14878 <__vector_26+0x612>
}
// the new version has been detected
else if(!( (Motor[motor_write].SetPointLowerBits && (RequiredMotors < 7)) || BLConfig_WriteMask || BLConfig_ReadMask ) )
1439e: e0 91 e2 04 lds r30, 0x04E2
143a2: 2f e0 ldi r18, 0x0F ; 15
143a4: e2 9f mul r30, r18
143a6: f0 01 movw r30, r0
143a8: 11 24 eor r1, r1
143aa: e9 56 subi r30, 0x69 ; 105
143ac: f6 4f sbci r31, 0xF6 ; 246
143ae: 82 81 ldd r24, Z+2 ; 0x02
143b0: 88 23 and r24, r24
143b2: 29 f0 breq .+10 ; 0x143be <__vector_26+0x158>
143b4: 80 91 3d 05 lds r24, 0x053D
143b8: 87 30 cpi r24, 0x07 ; 7
143ba: 08 f4 brcc .+2 ; 0x143be <__vector_26+0x158>
143bc: 5d c2 rjmp .+1210 ; 0x14878 <__vector_26+0x612>
143be: 80 91 dc 04 lds r24, 0x04DC
143c2: 90 91 dd 04 lds r25, 0x04DD
143c6: 89 2b or r24, r25
143c8: 09 f0 breq .+2 ; 0x143cc <__vector_26+0x166>
143ca: 56 c2 rjmp .+1196 ; 0x14878 <__vector_26+0x612>
143cc: 80 91 da 04 lds r24, 0x04DA
143d0: 90 91 db 04 lds r25, 0x04DB
143d4: 89 2b or r24, r25
143d6: 09 f0 breq .+2 ; 0x143da <__vector_26+0x174>
143d8: 4f c2 rjmp .+1182 ; 0x14878 <__vector_26+0x612>
{ // or LowerBits are zero and no BlConfig should be sent (saves round trip time)
twi_state = 4; //jump over sending more data
143da: 84 e0 ldi r24, 0x04 ; 4
143dc: 80 93 e3 04 sts 0x04E3, r24
143e0: 4b c2 rjmp .+1174 ; 0x14878 <__vector_26+0x612>
}
break;
case 2: // lower bits of setpoint (higher resolution)
if ((0x0001<<motor_write) & BLConfig_ReadMask)
143e2: 40 91 e2 04 lds r20, 0x04E2
143e6: 20 91 da 04 lds r18, 0x04DA
143ea: 30 91 db 04 lds r19, 0x04DB
143ee: 81 e0 ldi r24, 0x01 ; 1
143f0: 90 e0 ldi r25, 0x00 ; 0
143f2: 02 c0 rjmp .+4 ; 0x143f8 <__vector_26+0x192>
143f4: 88 0f add r24, r24
143f6: 99 1f adc r25, r25
143f8: 4a 95 dec r20
143fa: e2 f7 brpl .-8 ; 0x143f4 <__vector_26+0x18e>
143fc: 82 23 and r24, r18
143fe: 93 23 and r25, r19
14400: 89 2b or r24, r25
14402: 59 f0 breq .+22 ; 0x1441a <__vector_26+0x1b4>
{
Motor[motor_write].ReadMode = BL_READMODE_CONFIG; // configuration request
14404: e0 91 e2 04 lds r30, 0x04E2
14408: 8f e0 ldi r24, 0x0F ; 15
1440a: e8 9f mul r30, r24
1440c: f0 01 movw r30, r0
1440e: 11 24 eor r1, r1
14410: e9 56 subi r30, 0x69 ; 105
14412: f6 4f sbci r31, 0xF6 ; 246
14414: 80 e1 ldi r24, 0x10 ; 16
14416: 84 83 std Z+4, r24 ; 0x04
14418: 09 c0 rjmp .+18 ; 0x1442c <__vector_26+0x1c6>
}
else
{
Motor[motor_write].ReadMode = BL_READMODE_STATUS; // normal status request
1441a: e0 91 e2 04 lds r30, 0x04E2
1441e: 2f e0 ldi r18, 0x0F ; 15
14420: e2 9f mul r30, r18
14422: f0 01 movw r30, r0
14424: 11 24 eor r1, r1
14426: e9 56 subi r30, 0x69 ; 105
14428: f6 4f sbci r31, 0xF6 ; 246
1442a: 14 82 std Z+4, r1 ; 0x04
}
// send read mode and the lower bits of setpoint
I2C_WriteByte((Motor[motor_write].ReadMode<<3)|(Motor[motor_write].SetPointLowerBits & 0x07));
1442c: a0 91 e2 04 lds r26, 0x04E2
14430: e0 91 e2 04 lds r30, 0x04E2
14434: 8f e0 ldi r24, 0x0F ; 15
14436: 8a 9f mul r24, r26
14438: d0 01 movw r26, r0
1443a: 11 24 eor r1, r1
1443c: a9 56 subi r26, 0x69 ; 105
1443e: b6 4f sbci r27, 0xF6 ; 246
14440: 14 96 adiw r26, 0x04 ; 4
14442: 9c 91 ld r25, X
14444: 99 0f add r25, r25
14446: 99 0f add r25, r25
14448: 99 0f add r25, r25
1444a: 8e 9f mul r24, r30
1444c: f0 01 movw r30, r0
1444e: 11 24 eor r1, r1
14450: e9 56 subi r30, 0x69 ; 105
14452: f6 4f sbci r31, 0xF6 ; 246
14454: 82 81 ldd r24, Z+2 ; 0x02
14456: 87 70 andi r24, 0x07 ; 7
14458: 89 2b or r24, r25
1445a: 80 93 bb 00 sts 0x00BB, r24
1445e: 85 e8 ldi r24, 0x85 ; 133
14460: 80 93 bc 00 sts 0x00BC, r24
// configuration tranmission request?
if((0x0001<<motor_write) & BLConfig_WriteMask)
14464: 40 91 e2 04 lds r20, 0x04E2
14468: 20 91 dc 04 lds r18, 0x04DC
1446c: 30 91 dd 04 lds r19, 0x04DD
14470: 81 e0 ldi r24, 0x01 ; 1
14472: 90 e0 ldi r25, 0x00 ; 0
14474: 02 c0 rjmp .+4 ; 0x1447a <__vector_26+0x214>
14476: 88 0f add r24, r24
14478: 99 1f adc r25, r25
1447a: 4a 95 dec r20
1447c: e2 f7 brpl .-8 ; 0x14476 <__vector_26+0x210>
1447e: 82 23 and r24, r18
14480: 93 23 and r25, r19
14482: 89 2b or r24, r25
14484: 51 f0 breq .+20 ; 0x1449a <__vector_26+0x234>
{ // redirect tx pointer to configuration data
pBuff = (uint8_t*)&BLConfig; // select config for motor
14486: 8f e8 ldi r24, 0x8F ; 143
14488: 99 e0 ldi r25, 0x09 ; 9
1448a: 90 93 d8 04 sts 0x04D8, r25
1448e: 80 93 d7 04 sts 0x04D7, r24
BuffLen = sizeof(BLConfig_t);
14492: 88 e0 ldi r24, 0x08 ; 8
14494: 80 93 d6 04 sts 0x04D6, r24
14498: ef c1 rjmp .+990 ; 0x14878 <__vector_26+0x612>
}
else
{ // jump to end of transmission for that motor
twi_state = 4;
1449a: 84 e0 ldi r24, 0x04 ; 4
1449c: 80 93 e3 04 sts 0x04E3, r24
144a0: eb c1 rjmp .+982 ; 0x14878 <__vector_26+0x612>
}
break;
case 3: // send configuration
I2C_WriteByte(*pBuff);
144a2: e0 91 d7 04 lds r30, 0x04D7
144a6: f0 91 d8 04 lds r31, 0x04D8
144aa: 80 81 ld r24, Z
144ac: 80 93 bb 00 sts 0x00BB, r24
144b0: 85 e8 ldi r24, 0x85 ; 133
144b2: 80 93 bc 00 sts 0x00BC, r24
pBuff++;
144b6: 80 91 d7 04 lds r24, 0x04D7
144ba: 90 91 d8 04 lds r25, 0x04D8
144be: 01 96 adiw r24, 0x01 ; 1
144c0: 90 93 d8 04 sts 0x04D8, r25
144c4: 80 93 d7 04 sts 0x04D7, r24
if(--BuffLen > 0) twi_state = 3; // if there are some bytes left
144c8: 80 91 d6 04 lds r24, 0x04D6
144cc: 81 50 subi r24, 0x01 ; 1
144ce: 80 93 d6 04 sts 0x04D6, r24
144d2: 88 23 and r24, r24
144d4: 09 f4 brne .+2 ; 0x144d8 <__vector_26+0x272>
144d6: d0 c1 rjmp .+928 ; 0x14878 <__vector_26+0x612>
144d8: 83 e0 ldi r24, 0x03 ; 3
144da: 80 93 e3 04 sts 0x04E3, r24
144de: cc c1 rjmp .+920 ; 0x14878 <__vector_26+0x612>
break;
case 4: // repeat case 0-4 for all motors
if(TWSR == TW_MT_DATA_NACK) // Data transmitted, NACK received
144e0: 80 91 b9 00 lds r24, 0x00B9
144e4: 80 33 cpi r24, 0x30 ; 48
144e6: 11 f5 brne .+68 ; 0x1452c <__vector_26+0x2c6>
{
if(!missing_motor) missing_motor = motor_write + 1;
144e8: 80 91 d5 04 lds r24, 0x04D5
144ec: 81 11 cpse r24, r1
144ee: 05 c0 rjmp .+10 ; 0x144fa <__vector_26+0x294>
144f0: 80 91 e2 04 lds r24, 0x04E2
144f4: 8f 5f subi r24, 0xFF ; 255
144f6: 80 93 d5 04 sts 0x04D5, r24
if((Motor[motor_write].State & MOTOR_STATE_ERROR_MASK) < MOTOR_STATE_ERROR_MASK) Motor[motor_write].State++; // increment error counter and handle overflow
144fa: e0 91 e2 04 lds r30, 0x04E2
144fe: 8f e0 ldi r24, 0x0F ; 15
14500: e8 9f mul r30, r24
14502: f0 01 movw r30, r0
14504: 11 24 eor r1, r1
14506: e9 56 subi r30, 0x69 ; 105
14508: f6 4f sbci r31, 0xF6 ; 246
1450a: 83 81 ldd r24, Z+3 ; 0x03
1450c: 8f 77 andi r24, 0x7F ; 127
1450e: 90 e0 ldi r25, 0x00 ; 0
14510: 8f 37 cpi r24, 0x7F ; 127
14512: 91 05 cpc r25, r1
14514: 5c f4 brge .+22 ; 0x1452c <__vector_26+0x2c6>
14516: e0 91 e2 04 lds r30, 0x04E2
1451a: 2f e0 ldi r18, 0x0F ; 15
1451c: e2 9f mul r30, r18
1451e: f0 01 movw r30, r0
14520: 11 24 eor r1, r1
14522: e9 56 subi r30, 0x69 ; 105
14524: f6 4f sbci r31, 0xF6 ; 246
14526: 83 81 ldd r24, Z+3 ; 0x03
14528: 8f 5f subi r24, 0xFF ; 255
1452a: 83 83 std Z+3, r24 ; 0x03
}
I2C_Stop(TWI_STATE_MOTOR_TX);
1452c: 10 92 e3 04 sts 0x04E3, r1
14530: ec eb ldi r30, 0xBC ; 188
14532: f0 e0 ldi r31, 0x00 ; 0
14534: 84 e9 ldi r24, 0x94 ; 148
14536: 80 83 st Z, r24
I2CTimeout = 10;
14538: 8a e0 ldi r24, 0x0A ; 10
1453a: 90 e0 ldi r25, 0x00 ; 0
1453c: 90 93 b1 02 sts 0x02B1, r25
14540: 80 93 b0 02 sts 0x02B0, r24
motor_write++; // next motor
14544: 80 91 e2 04 lds r24, 0x04E2
14548: 8f 5f subi r24, 0xFF ; 255
1454a: 80 93 e2 04 sts 0x04E2, r24
I2C_Start(TWI_STATE_MOTOR_TX); // Repeated start -> switch slave or switch Master Transmit -> Master Receive
1454e: 10 92 e3 04 sts 0x04E3, r1
14552: 80 91 de 04 lds r24, 0x04DE
14556: 8e 7f andi r24, 0xFE ; 254
14558: 80 93 de 04 sts 0x04DE, r24
1455c: 85 ea ldi r24, 0xA5 ; 165
1455e: 80 83 st Z, r24
break;
14560: 8b c1 rjmp .+790 ; 0x14878 <__vector_26+0x612>
// Master Receive Data
case 5: // TWI_STATE_MOTOR_RX
if(TWSR != TW_MR_SLA_ACK) // SLA+R transmitted but no ACK received
14562: 80 91 b9 00 lds r24, 0x00B9
14566: 80 34 cpi r24, 0x40 ; 64
14568: a1 f1 breq .+104 ; 0x145d2 <__vector_26+0x36c>
{ // no response from the addressed slave received
Motor[motor_read].State &= ~MOTOR_STATE_PRESENT_MASK; // clear present bit
1456a: e0 91 e1 04 lds r30, 0x04E1
1456e: 8f e0 ldi r24, 0x0F ; 15
14570: e8 9f mul r30, r24
14572: f0 01 movw r30, r0
14574: 11 24 eor r1, r1
14576: e9 56 subi r30, 0x69 ; 105
14578: f6 4f sbci r31, 0xF6 ; 246
1457a: 83 81 ldd r24, Z+3 ; 0x03
1457c: 8f 77 andi r24, 0x7F ; 127
1457e: 83 83 std Z+3, r24 ; 0x03
if(++motor_read >= MAX_MOTORS)
14580: 80 91 e1 04 lds r24, 0x04E1
14584: 8f 5f subi r24, 0xFF ; 255
14586: 80 93 e1 04 sts 0x04E1, r24
1458a: 8c 30 cpi r24, 0x0C ; 12
1458c: a8 f0 brcs .+42 ; 0x145b8 <__vector_26+0x352>
{ // all motors read
motor_read = 0; // restart from beginning
1458e: 10 92 e1 04 sts 0x04E1, r1
BLConfig_ReadMask = 0; // reset read configuration bitmask
14592: 10 92 db 04 sts 0x04DB, r1
14596: 10 92 da 04 sts 0x04DA, r1
if(++motor_read_temperature >= MAX_MOTORS)
1459a: 80 91 d4 04 lds r24, 0x04D4
1459e: 8f 5f subi r24, 0xFF ; 255
145a0: 8c 30 cpi r24, 0x0C ; 12
145a2: 18 f4 brcc .+6 ; 0x145aa <__vector_26+0x344>
145a4: 80 93 d4 04 sts 0x04D4, r24
145a8: 07 c0 rjmp .+14 ; 0x145b8 <__vector_26+0x352>
{
motor_read_temperature = 0;
145aa: 10 92 d4 04 sts 0x04D4, r1
BLFlags &= ~BLFLAG_READ_VERSION;
145ae: 80 91 de 04 lds r24, 0x04DE
145b2: 8d 7f andi r24, 0xFD ; 253
145b4: 80 93 de 04 sts 0x04DE, r24
}
}
BLFlags |= BLFLAG_TX_COMPLETE;
145b8: 80 91 de 04 lds r24, 0x04DE
145bc: 81 60 ori r24, 0x01 ; 1
145be: 80 93 de 04 sts 0x04DE, r24
I2C_Stop(TWI_STATE_MOTOR_TX);
145c2: 10 92 e3 04 sts 0x04E3, r1
145c6: 84 e9 ldi r24, 0x94 ; 148
145c8: 80 93 bc 00 sts 0x00BC, r24
I2C_TransferActive = 0;
145cc: 10 92 e0 04 sts 0x04E0, r1
145d0: 7a c0 rjmp .+244 ; 0x146c6 <__vector_26+0x460>
}
else
{ // motor successfully addressed
Motor[motor_read].State |= MOTOR_STATE_PRESENT_MASK; // set present bit
145d2: e0 91 e1 04 lds r30, 0x04E1
145d6: 8f e0 ldi r24, 0x0F ; 15
145d8: 8e 9f mul r24, r30
145da: f0 01 movw r30, r0
145dc: 11 24 eor r1, r1
145de: e9 56 subi r30, 0x69 ; 105
145e0: f6 4f sbci r31, 0xF6 ; 246
145e2: 93 81 ldd r25, Z+3 ; 0x03
145e4: 90 68 ori r25, 0x80 ; 128
145e6: 93 83 std Z+3, r25 ; 0x03
if(Motor[motor_read].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)
145e8: e0 91 e1 04 lds r30, 0x04E1
145ec: 8e 9f mul r24, r30
145ee: f0 01 movw r30, r0
145f0: 11 24 eor r1, r1
145f2: e9 56 subi r30, 0x69 ; 105
145f4: f6 4f sbci r31, 0xF6 ; 246
145f6: 80 81 ld r24, Z
145f8: 80 ff sbrs r24, 0
145fa: 3c c0 rjmp .+120 ; 0x14674 <__vector_26+0x40e>
{
// new BL found
switch(Motor[motor_read].ReadMode)
145fc: e0 91 e1 04 lds r30, 0x04E1
14600: 2f e0 ldi r18, 0x0F ; 15
14602: e2 9f mul r30, r18
14604: f0 01 movw r30, r0
14606: 11 24 eor r1, r1
14608: e9 56 subi r30, 0x69 ; 105
1460a: f6 4f sbci r31, 0xF6 ; 246
1460c: 84 81 ldd r24, Z+4 ; 0x04
1460e: 88 23 and r24, r24
14610: b1 f0 breq .+44 ; 0x1463e <__vector_26+0x3d8>
14612: 80 31 cpi r24, 0x10 ; 16
14614: 09 f0 breq .+2 ; 0x14618 <__vector_26+0x3b2>
14616: 4c c0 rjmp .+152 ; 0x146b0 <__vector_26+0x44a>
{
case BL_READMODE_CONFIG:
pBuff = (uint8_t*)&BLConfig;
14618: 8f e8 ldi r24, 0x8F ; 143
1461a: 99 e0 ldi r25, 0x09 ; 9
1461c: 90 93 d8 04 sts 0x04D8, r25
14620: 80 93 d7 04 sts 0x04D7, r24
BuffLen = sizeof(BLConfig_t);
14624: 88 e0 ldi r24, 0x08 ; 8
14626: 80 93 d6 04 sts 0x04D6, r24
Motor[motor_read].ReadMode = BL_READMODE_STATUS; // only once
1462a: e0 91 e1 04 lds r30, 0x04E1
1462e: 8f e0 ldi r24, 0x0F ; 15
14630: e8 9f mul r30, r24
14632: f0 01 movw r30, r0
14634: 11 24 eor r1, r1
14636: e9 56 subi r30, 0x69 ; 105
14638: f6 4f sbci r31, 0xF6 ; 246
1463a: 14 82 std Z+4, r1 ; 0x04
break;
1463c: 39 c0 rjmp .+114 ; 0x146b0 <__vector_26+0x44a>
case BL_READMODE_STATUS:
pBuff = (uint8_t*)&(Motor[motor_read].Current);
1463e: 80 91 e1 04 lds r24, 0x04E1
14642: 2f e0 ldi r18, 0x0F ; 15
14644: 82 9f mul r24, r18
14646: c0 01 movw r24, r0
14648: 11 24 eor r1, r1
1464a: 84 56 subi r24, 0x64 ; 100
1464c: 96 4f sbci r25, 0xF6 ; 246
1464e: 90 93 d8 04 sts 0x04D8, r25
14652: 80 93 d7 04 sts 0x04D7, r24
if(motor_read == motor_read_temperature) BuffLen = ReadBlSize; // read Current, MaxPwm & Temp (is 3 or 9)
14656: 90 91 e1 04 lds r25, 0x04E1
1465a: 80 91 d4 04 lds r24, 0x04D4
1465e: 98 13 cpse r25, r24
14660: 05 c0 rjmp .+10 ; 0x1466c <__vector_26+0x406>
14662: 80 91 b3 02 lds r24, 0x02B3
14666: 80 93 d6 04 sts 0x04D6, r24
1466a: 22 c0 rjmp .+68 ; 0x146b0 <__vector_26+0x44a>
else BuffLen = 1;// read Current only
1466c: 81 e0 ldi r24, 0x01 ; 1
1466e: 80 93 d6 04 sts 0x04D6, r24
14672: 22 c0 rjmp .+68 ; 0x146b8 <__vector_26+0x452>
break;
}
}
else // old BL version
{
pBuff = (uint8_t*)&(Motor[motor_read].Current);
14674: 80 91 e1 04 lds r24, 0x04E1
14678: 2f e0 ldi r18, 0x0F ; 15
1467a: 82 9f mul r24, r18
1467c: c0 01 movw r24, r0
1467e: 11 24 eor r1, r1
14680: 84 56 subi r24, 0x64 ; 100
14682: 96 4f sbci r25, 0xF6 ; 246
14684: 90 93 d8 04 sts 0x04D8, r25
14688: 80 93 d7 04 sts 0x04D7, r24
if((BLFlags & BLFLAG_READ_VERSION) || (motor_read == motor_read_temperature)) BuffLen = 2; // Current & MaxPwm
1468c: 80 91 de 04 lds r24, 0x04DE
14690: 81 fd sbrc r24, 1
14692: 06 c0 rjmp .+12 ; 0x146a0 <__vector_26+0x43a>
14694: 90 91 e1 04 lds r25, 0x04E1
14698: 80 91 d4 04 lds r24, 0x04D4
1469c: 98 13 cpse r25, r24
1469e: 04 c0 rjmp .+8 ; 0x146a8 <__vector_26+0x442>
146a0: 82 e0 ldi r24, 0x02 ; 2
146a2: 80 93 d6 04 sts 0x04D6, r24
146a6: 0c c0 rjmp .+24 ; 0x146c0 <__vector_26+0x45a>
else BuffLen = 1; // read Current only
146a8: 81 e0 ldi r24, 0x01 ; 1
146aa: 80 93 d6 04 sts 0x04D6, r24
146ae: 04 c0 rjmp .+8 ; 0x146b8 <__vector_26+0x452>
}
if(BuffLen == 1)
146b0: 80 91 d6 04 lds r24, 0x04D6
146b4: 81 30 cpi r24, 0x01 ; 1
146b6: 21 f4 brne .+8 ; 0x146c0 <__vector_26+0x45a>
{
I2C_ReceiveLastByte(); // read last byte
146b8: 85 e8 ldi r24, 0x85 ; 133
146ba: 80 93 bc 00 sts 0x00BC, r24
146be: 03 c0 rjmp .+6 ; 0x146c6 <__vector_26+0x460>
}
else
{
I2C_ReceiveByte(); // read next byte
146c0: 85 ec ldi r24, 0xC5 ; 197
146c2: 80 93 bc 00 sts 0x00BC, r24
}
}
MissingMotor = missing_motor;
146c6: 80 91 d5 04 lds r24, 0x04D5
146ca: 80 93 df 04 sts 0x04DF, r24
missing_motor = 0;
146ce: 10 92 d5 04 sts 0x04D5, r1
break;
146d2: d2 c0 rjmp .+420 ; 0x14878 <__vector_26+0x612>
case 6: // receive bytes
*pBuff = TWDR;
146d4: 80 91 bb 00 lds r24, 0x00BB
146d8: e0 91 d7 04 lds r30, 0x04D7
146dc: f0 91 d8 04 lds r31, 0x04D8
146e0: 81 93 st Z+, r24
pBuff++; // set Pointer to next element : Motor[].Current,Motor[].Temperature
146e2: f0 93 d8 04 sts 0x04D8, r31
146e6: e0 93 d7 04 sts 0x04D7, r30
BuffLen--;
146ea: 80 91 d6 04 lds r24, 0x04D6
146ee: 81 50 subi r24, 0x01 ; 1
146f0: 80 93 d6 04 sts 0x04D6, r24
if(BuffLen>1)
146f4: 82 30 cpi r24, 0x02 ; 2
146f6: 20 f0 brcs .+8 ; 0x14700 <__vector_26+0x49a>
{
I2C_ReceiveByte(); // read next byte
146f8: 85 ec ldi r24, 0xC5 ; 197
146fa: 80 93 bc 00 sts 0x00BC, r24
146fe: a2 c0 rjmp .+324 ; 0x14844 <__vector_26+0x5de>
}
else if (BuffLen == 1)
14700: 81 30 cpi r24, 0x01 ; 1
14702: 21 f4 brne .+8 ; 0x1470c <__vector_26+0x4a6>
{
I2C_ReceiveLastByte(); // read last byte
14704: 85 e8 ldi r24, 0x85 ; 133
14706: 80 93 bc 00 sts 0x00BC, r24
1470a: 9c c0 rjmp .+312 ; 0x14844 <__vector_26+0x5de>
}
else // nothing left -> ready
{
if(BLFlags & BLFLAG_READ_VERSION)
1470c: 80 91 de 04 lds r24, 0x04DE
14710: 81 ff sbrs r24, 1
14712: 52 c0 rjmp .+164 ; 0x147b8 <__vector_26+0x552>
{
if(!(FC_StatusFlags & FC_STATUS_MOTOR_RUN))
14714: 80 91 cb 03 lds r24, 0x03CB
14718: 80 fd sbrc r24, 0
1471a: 4e c0 rjmp .+156 ; 0x147b8 <__vector_26+0x552>
{
if((Motor[motor_read].MaxPWM & 252) == 248) Motor[motor_read].Version |= MOTOR_STATE_NEW_PROTOCOL_MASK;
1471c: e0 91 e1 04 lds r30, 0x04E1
14720: 8f e0 ldi r24, 0x0F ; 15
14722: e8 9f mul r30, r24
14724: f0 01 movw r30, r0
14726: 11 24 eor r1, r1
14728: e9 56 subi r30, 0x69 ; 105
1472a: f6 4f sbci r31, 0xF6 ; 246
1472c: 86 81 ldd r24, Z+6 ; 0x06
1472e: 8c 7f andi r24, 0xFC ; 252
14730: 88 3f cpi r24, 0xF8 ; 248
14732: 61 f4 brne .+24 ; 0x1474c <__vector_26+0x4e6>
14734: e0 91 e1 04 lds r30, 0x04E1
14738: 2f e0 ldi r18, 0x0F ; 15
1473a: e2 9f mul r30, r18
1473c: f0 01 movw r30, r0
1473e: 11 24 eor r1, r1
14740: e9 56 subi r30, 0x69 ; 105
14742: f6 4f sbci r31, 0xF6 ; 246
14744: 80 81 ld r24, Z
14746: 81 60 ori r24, 0x01 ; 1
14748: 80 83 st Z, r24
1474a: 09 c0 rjmp .+18 ; 0x1475e <__vector_26+0x4f8>
else Motor[motor_read].Version = 0;
1474c: e0 91 e1 04 lds r30, 0x04E1
14750: 8f e0 ldi r24, 0x0F ; 15
14752: e8 9f mul r30, r24
14754: f0 01 movw r30, r0
14756: 11 24 eor r1, r1
14758: e9 56 subi r30, 0x69 ; 105
1475a: f6 4f sbci r31, 0xF6 ; 246
1475c: 10 82 st Z, r1
if(Motor[motor_read].MaxPWM == 248) Motor[motor_read].Version |= (MOTOR_STATE_FAST_MODE | MOTOR_STATE_BL30);
1475e: e0 91 e1 04 lds r30, 0x04E1
14762: 2f e0 ldi r18, 0x0F ; 15
14764: e2 9f mul r30, r18
14766: f0 01 movw r30, r0
14768: 11 24 eor r1, r1
1476a: e9 56 subi r30, 0x69 ; 105
1476c: f6 4f sbci r31, 0xF6 ; 246
1476e: 86 81 ldd r24, Z+6 ; 0x06
14770: 88 3f cpi r24, 0xF8 ; 248
14772: 61 f4 brne .+24 ; 0x1478c <__vector_26+0x526>
14774: e0 91 e1 04 lds r30, 0x04E1
14778: 8f e0 ldi r24, 0x0F ; 15
1477a: e8 9f mul r30, r24
1477c: f0 01 movw r30, r0
1477e: 11 24 eor r1, r1
14780: e9 56 subi r30, 0x69 ; 105
14782: f6 4f sbci r31, 0xF6 ; 246
14784: 80 81 ld r24, Z
14786: 86 60 ori r24, 0x06 ; 6
14788: 80 83 st Z, r24
1478a: 16 c0 rjmp .+44 ; 0x147b8 <__vector_26+0x552>
else
if(Motor[motor_read].MaxPWM == 249) Motor[motor_read].Version |= MOTOR_STATE_BL30;
1478c: e0 91 e1 04 lds r30, 0x04E1
14790: 2f e0 ldi r18, 0x0F ; 15
14792: e2 9f mul r30, r18
14794: f0 01 movw r30, r0
14796: 11 24 eor r1, r1
14798: e9 56 subi r30, 0x69 ; 105
1479a: f6 4f sbci r31, 0xF6 ; 246
1479c: 86 81 ldd r24, Z+6 ; 0x06
1479e: 89 3f cpi r24, 0xF9 ; 249
147a0: 59 f4 brne .+22 ; 0x147b8 <__vector_26+0x552>
147a2: e0 91 e1 04 lds r30, 0x04E1
147a6: 8f e0 ldi r24, 0x0F ; 15
147a8: e8 9f mul r30, r24
147aa: f0 01 movw r30, r0
147ac: 11 24 eor r1, r1
147ae: e9 56 subi r30, 0x69 ; 105
147b0: f6 4f sbci r31, 0xF6 ; 246
147b2: 80 81 ld r24, Z
147b4: 84 60 ori r24, 0x04 ; 4
147b6: 80 83 st Z, r24
}
}
if(FC_StatusFlags & FC_STATUS_FLY)
147b8: 80 91 cb 03 lds r24, 0x03CB
147bc: 81 ff sbrs r24, 1
147be: 19 c0 rjmp .+50 ; 0x147f2 <__vector_26+0x58c>
{
// Starting -> 40
// I2C-Setpoint is zero -> 250
// 255 -> Running and no Redundancy
// 254 -> Running and active Redundancy
if(Motor[motor_read].MaxPWM < 254)
147c0: e0 91 e1 04 lds r30, 0x04E1
147c4: 2f e0 ldi r18, 0x0F ; 15
147c6: e2 9f mul r30, r18
147c8: f0 01 movw r30, r0
147ca: 11 24 eor r1, r1
147cc: e9 56 subi r30, 0x69 ; 105
147ce: f6 4f sbci r31, 0xF6 ; 246
147d0: 86 81 ldd r24, Z+6 ; 0x06
147d2: 8e 3f cpi r24, 0xFE ; 254
147d4: 70 f4 brcc .+28 ; 0x147f2 <__vector_26+0x58c>
{
Motor[motor_read].NotReadyCnt++;
147d6: e0 91 e1 04 lds r30, 0x04E1
147da: 8f e0 ldi r24, 0x0F ; 15
147dc: e8 9f mul r30, r24
147de: f0 01 movw r30, r0
147e0: 11 24 eor r1, r1
147e2: e9 56 subi r30, 0x69 ; 105
147e4: f6 4f sbci r31, 0xF6 ; 246
147e6: 86 85 ldd r24, Z+14 ; 0x0e
147e8: 8f 5f subi r24, 0xFF ; 255
147ea: 86 87 std Z+14, r24 ; 0x0e
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_ERR_MOTOR;
147ec: 89 e0 ldi r24, 0x09 ; 9
147ee: 80 93 57 01 sts 0x0157, r24
#endif
}
}
if(++motor_read >= MAX_MOTORS)
147f2: 80 91 e1 04 lds r24, 0x04E1
147f6: 8f 5f subi r24, 0xFF ; 255
147f8: 80 93 e1 04 sts 0x04E1, r24
147fc: 8c 30 cpi r24, 0x0C ; 12
147fe: a8 f0 brcs .+42 ; 0x1482a <__vector_26+0x5c4>
{
motor_read = 0; // restart from beginning
14800: 10 92 e1 04 sts 0x04E1, r1
BLConfig_ReadMask = 0; // reset read configuration bitmask
14804: 10 92 db 04 sts 0x04DB, r1
14808: 10 92 da 04 sts 0x04DA, r1
if(++motor_read_temperature >= MAX_MOTORS)
1480c: 80 91 d4 04 lds r24, 0x04D4
14810: 8f 5f subi r24, 0xFF ; 255
14812: 8c 30 cpi r24, 0x0C ; 12
14814: 18 f4 brcc .+6 ; 0x1481c <__vector_26+0x5b6>
14816: 80 93 d4 04 sts 0x04D4, r24
1481a: 07 c0 rjmp .+14 ; 0x1482a <__vector_26+0x5c4>
{
motor_read_temperature = 0;
1481c: 10 92 d4 04 sts 0x04D4, r1
BLFlags &= ~BLFLAG_READ_VERSION;
14820: 80 91 de 04 lds r24, 0x04DE
14824: 8d 7f andi r24, 0xFD ; 253
14826: 80 93 de 04 sts 0x04DE, r24
}
}
I2C_Stop(TWI_STATE_MOTOR_TX);
1482a: 10 92 e3 04 sts 0x04E3, r1
1482e: 84 e9 ldi r24, 0x94 ; 148
14830: 80 93 bc 00 sts 0x00BC, r24
BLFlags |= BLFLAG_TX_COMPLETE;
14834: 80 91 de 04 lds r24, 0x04DE
14838: 81 60 ori r24, 0x01 ; 1
1483a: 80 93 de 04 sts 0x04DE, r24
I2C_TransferActive = 0;
1483e: 10 92 e0 04 sts 0x04E0, r1
return;
14842: 1a c0 rjmp .+52 ; 0x14878 <__vector_26+0x612>
}
twi_state = 6; // if there are some bytes left
14844: 86 e0 ldi r24, 0x06 ; 6
14846: 80 93 e3 04 sts 0x04E3, r24
break;
1484a: 16 c0 rjmp .+44 ; 0x14878 <__vector_26+0x612>
BLFlags |= BLFLAG_TX_COMPLETE;
}
break;
*/
default:
I2C_Stop(TWI_STATE_MOTOR_TX);
1484c: 10 92 e3 04 sts 0x04E3, r1
14850: 84 e9 ldi r24, 0x94 ; 148
14852: 80 93 bc 00 sts 0x00BC, r24
BLFlags |= BLFLAG_TX_COMPLETE;
14856: 80 91 de 04 lds r24, 0x04DE
1485a: 81 60 ori r24, 0x01 ; 1
1485c: 80 93 de 04 sts 0x04DE, r24
I2CTimeout = 10;
14860: 8a e0 ldi r24, 0x0A ; 10
14862: 90 e0 ldi r25, 0x00 ; 0
14864: 90 93 b1 02 sts 0x02B1, r25
14868: 80 93 b0 02 sts 0x02B0, r24
motor_write = 0;
1486c: 10 92 e2 04 sts 0x04E2, r1
motor_read = 0;
14870: 10 92 e1 04 sts 0x04E1, r1
I2C_TransferActive = 0;
14874: 10 92 e0 04 sts 0x04E0, r1
break;
}
}
14878: ff 91 pop r31
1487a: ef 91 pop r30
1487c: bf 91 pop r27
1487e: af 91 pop r26
14880: 9f 91 pop r25
14882: 8f 91 pop r24
14884: 4f 91 pop r20
14886: 3f 91 pop r19
14888: 2f 91 pop r18
1488a: 0f 90 pop r0
1488c: 0b be out 0x3b, r0 ; 59
1488e: 0f 90 pop r0
14890: 0f be out 0x3f, r0 ; 63
14892: 0f 90 pop r0
14894: 1f 90 pop r1
14896: 18 95 reti
00014898 <I2C_WriteBLConfig>:
uint8_t I2C_WriteBLConfig(uint8_t motor)
{
14898: ef 92 push r14
1489a: ff 92 push r15
1489c: 0f 93 push r16
1489e: 1f 93 push r17
148a0: cf 93 push r28
148a2: df 93 push r29
148a4: 18 2f mov r17, r24
uint8_t i, packets;
uint16_t timer;
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running!
148a6: 90 91 03 04 lds r25, 0x0403
148aa: 91 11 cpse r25, r1
148ac: 98 c0 rjmp .+304 ; 0x149de <I2C_WriteBLConfig+0x146>
148ae: 80 91 f5 04 lds r24, 0x04F5
148b2: 81 11 cpse r24, r1
148b4: 96 c0 rjmp .+300 ; 0x149e2 <I2C_WriteBLConfig+0x14a>
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
148b6: 1d 30 cpi r17, 0x0D ; 13
148b8: 08 f0 brcs .+2 ; 0x148bc <I2C_WriteBLConfig+0x24>
148ba: 95 c0 rjmp .+298 ; 0x149e6 <I2C_WriteBLConfig+0x14e>
if(motor)
148bc: 11 23 and r17, r17
148be: d9 f0 breq .+54 ; 0x148f6 <I2C_WriteBLConfig+0x5e>
{
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
148c0: 21 2f mov r18, r17
148c2: 30 e0 ldi r19, 0x00 ; 0
148c4: 21 50 subi r18, 0x01 ; 1
148c6: 31 09 sbc r19, r1
148c8: 8f e0 ldi r24, 0x0F ; 15
148ca: 82 9f mul r24, r18
148cc: f0 01 movw r30, r0
148ce: 83 9f mul r24, r19
148d0: f0 0d add r31, r0
148d2: 11 24 eor r1, r1
148d4: e9 56 subi r30, 0x69 ; 105
148d6: f6 4f sbci r31, 0xF6 ; 246
148d8: 83 81 ldd r24, Z+3 ; 0x03
148da: 88 23 and r24, r24
148dc: 0c f0 brlt .+2 ; 0x148e0 <I2C_WriteBLConfig+0x48>
148de: 85 c0 rjmp .+266 ; 0x149ea <I2C_WriteBLConfig+0x152>
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL!
148e0: 8f e0 ldi r24, 0x0F ; 15
148e2: 82 9f mul r24, r18
148e4: f0 01 movw r30, r0
148e6: 83 9f mul r24, r19
148e8: f0 0d add r31, r0
148ea: 11 24 eor r1, r1
148ec: e9 56 subi r30, 0x69 ; 105
148ee: f6 4f sbci r31, 0xF6 ; 246
148f0: 80 81 ld r24, Z
148f2: 80 ff sbrs r24, 0
148f4: 7c c0 rjmp .+248 ; 0x149ee <I2C_WriteBLConfig+0x156>
}
// check BL configuration to send
if((BLConfig.Revision & 0x0B) != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison
148f6: 80 91 8f 09 lds r24, 0x098F
148fa: 8b 70 andi r24, 0x0B ; 11
148fc: 82 30 cpi r24, 0x02 ; 2
148fe: 09 f0 breq .+2 ; 0x14902 <I2C_WriteBLConfig+0x6a>
14900: 78 c0 rjmp .+240 ; 0x149f2 <I2C_WriteBLConfig+0x15a>
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1);
14902: 67 e0 ldi r22, 0x07 ; 7
14904: 70 e0 ldi r23, 0x00 ; 0
14906: 8f e8 ldi r24, 0x8F ; 143
14908: 99 e0 ldi r25, 0x09 ; 9
1490a: 0e 94 3e 23 call 0x467c ; 0x467c <RAM_Checksum>
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum
1490e: 90 91 96 09 lds r25, 0x0996
14912: 98 13 cpse r25, r24
14914: 70 c0 rjmp .+224 ; 0x149f6 <I2C_WriteBLConfig+0x15e>
packets = Max_I2C_Packets;
14916: f0 90 b2 02 lds r15, 0x02B2
Max_I2C_Packets = 12;
1491a: 8c e0 ldi r24, 0x0C ; 12
1491c: 80 93 b2 02 sts 0x02B2, r24
I2CTimeout = 100;
14920: 24 e6 ldi r18, 0x64 ; 100
14922: 30 e0 ldi r19, 0x00 ; 0
14924: 30 93 b1 02 sts 0x02B1, r19
14928: 20 93 b0 02 sts 0x02B0, r18
timer = SetDelay(100);
1492c: 84 e6 ldi r24, 0x64 ; 100
1492e: 90 e0 ldi r25, 0x00 ; 0
14930: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
14934: ec 01 movw r28, r24
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
14936: 80 91 de 04 lds r24, 0x04DE
1493a: 80 fd sbrc r24, 0
1493c: 05 c0 rjmp .+10 ; 0x14948 <I2C_WriteBLConfig+0xb0>
1493e: ce 01 movw r24, r28
14940: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
14944: 88 23 and r24, r24
14946: b9 f3 breq .-18 ; 0x14936 <I2C_WriteBLConfig+0x9e>
// prepare the bitmask
if(!motor) BLConfig_WriteMask = 0x0FFF; // 0 means all -> all motors at once with the same configuration
14948: 11 11 cpse r17, r1
1494a: 07 c0 rjmp .+14 ; 0x1495a <I2C_WriteBLConfig+0xc2>
1494c: 8f ef ldi r24, 0xFF ; 255
1494e: 9f e0 ldi r25, 0x0F ; 15
14950: 90 93 dd 04 sts 0x04DD, r25
14954: 80 93 dc 04 sts 0x04DC, r24
14958: 0c c0 rjmp .+24 ; 0x14972 <I2C_WriteBLConfig+0xda>
else BLConfig_WriteMask = 0x0001<<(motor-1); //only one specific motor
1495a: 11 50 subi r17, 0x01 ; 1
1495c: 81 e0 ldi r24, 0x01 ; 1
1495e: 90 e0 ldi r25, 0x00 ; 0
14960: 02 c0 rjmp .+4 ; 0x14966 <I2C_WriteBLConfig+0xce>
14962: 88 0f add r24, r24
14964: 99 1f adc r25, r25
14966: 1a 95 dec r17
14968: e2 f7 brpl .-8 ; 0x14962 <I2C_WriteBLConfig+0xca>
1496a: 90 93 dd 04 sts 0x04DD, r25
1496e: 80 93 dc 04 sts 0x04DC, r24
motor_write = 0;
14972: 10 92 e2 04 sts 0x04E2, r1
motor_read = 0;
14976: 10 92 e1 04 sts 0x04E1, r1
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms)
timer = SetDelay(1000);
1497a: 88 ee ldi r24, 0xE8 ; 232
1497c: 93 e0 ldi r25, 0x03 ; 3
1497e: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
14982: ec 01 movw r28, r24
do
{
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission
14984: 0c eb ldi r16, 0xBC ; 188
14986: 10 e0 ldi r17, 0x00 ; 0
14988: 0f 2e mov r0, r31
1498a: f5 ea ldi r31, 0xA5 ; 165
1498c: ef 2e mov r14, r31
1498e: f0 2d mov r31, r0
14990: 10 92 e3 04 sts 0x04E3, r1
14994: 80 91 de 04 lds r24, 0x04DE
14998: 8e 7f andi r24, 0xFE ; 254
1499a: 80 93 de 04 sts 0x04DE, r24
1499e: f8 01 movw r30, r16
149a0: e0 82 st Z, r14
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
149a2: 80 91 de 04 lds r24, 0x04DE
149a6: 80 fd sbrc r24, 0
149a8: 05 c0 rjmp .+10 ; 0x149b4 <I2C_WriteBLConfig+0x11c>
149aa: ce 01 movw r24, r28
149ac: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
149b0: 88 23 and r24, r24
149b2: b9 f3 breq .-18 ; 0x149a2 <I2C_WriteBLConfig+0x10a>
} while(BLConfig_WriteMask && !CheckDelay(timer)); // repeat until the BL config has been sent
149b4: 80 91 dc 04 lds r24, 0x04DC
149b8: 90 91 dd 04 lds r25, 0x04DD
149bc: 89 2b or r24, r25
149be: 29 f0 breq .+10 ; 0x149ca <I2C_WriteBLConfig+0x132>
149c0: ce 01 movw r24, r28
149c2: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
149c6: 88 23 and r24, r24
149c8: 19 f3 breq .-58 ; 0x14990 <I2C_WriteBLConfig+0xf8>
Max_I2C_Packets = packets;
149ca: f0 92 b2 02 sts 0x02B2, r15
if(BLConfig_WriteMask) return(BLCONFIG_ERR_MOTOR_NOT_EXIST);
149ce: 80 91 dc 04 lds r24, 0x04DC
149d2: 90 91 dd 04 lds r25, 0x04DD
149d6: 89 2b or r24, r25
149d8: 81 f0 breq .+32 ; 0x149fa <I2C_WriteBLConfig+0x162>
149da: 82 e0 ldi r24, 0x02 ; 2
149dc: 0f c0 rjmp .+30 ; 0x149fc <I2C_WriteBLConfig+0x164>
uint8_t I2C_WriteBLConfig(uint8_t motor)
{
uint8_t i, packets;
uint16_t timer;
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running!
149de: 81 e0 ldi r24, 0x01 ; 1
149e0: 0d c0 rjmp .+26 ; 0x149fc <I2C_WriteBLConfig+0x164>
149e2: 81 e0 ldi r24, 0x01 ; 1
149e4: 0b c0 rjmp .+22 ; 0x149fc <I2C_WriteBLConfig+0x164>
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
149e6: 82 e0 ldi r24, 0x02 ; 2
149e8: 09 c0 rjmp .+18 ; 0x149fc <I2C_WriteBLConfig+0x164>
if(motor)
{
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
149ea: 82 e0 ldi r24, 0x02 ; 2
149ec: 07 c0 rjmp .+14 ; 0x149fc <I2C_WriteBLConfig+0x164>
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL!
149ee: 83 e0 ldi r24, 0x03 ; 3
149f0: 05 c0 rjmp .+10 ; 0x149fc <I2C_WriteBLConfig+0x164>
}
// check BL configuration to send
if((BLConfig.Revision & 0x0B) != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison
149f2: 84 e0 ldi r24, 0x04 ; 4
149f4: 03 c0 rjmp .+6 ; 0x149fc <I2C_WriteBLConfig+0x164>
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1);
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum
149f6: 85 e0 ldi r24, 0x05 ; 5
149f8: 01 c0 rjmp .+2 ; 0x149fc <I2C_WriteBLConfig+0x164>
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
} while(BLConfig_WriteMask && !CheckDelay(timer)); // repeat until the BL config has been sent
Max_I2C_Packets = packets;
if(BLConfig_WriteMask) return(BLCONFIG_ERR_MOTOR_NOT_EXIST);
return(BLCONFIG_SUCCESS);
149fa: 80 e0 ldi r24, 0x00 ; 0
}
149fc: df 91 pop r29
149fe: cf 91 pop r28
14a00: 1f 91 pop r17
14a02: 0f 91 pop r16
14a04: ff 90 pop r15
14a06: ef 90 pop r14
14a08: 08 95 ret
00014a0a <I2C_ReadBLConfig>:
uint8_t I2C_ReadBLConfig(uint8_t motor)
{
14a0a: ff 92 push r15
14a0c: 0f 93 push r16
14a0e: 1f 93 push r17
14a10: cf 93 push r28
14a12: df 93 push r29
uint8_t i;
uint16_t timer;
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running!
14a14: 90 91 03 04 lds r25, 0x0403
14a18: 91 11 cpse r25, r1
14a1a: 7b c0 rjmp .+246 ; 0x14b12 <I2C_ReadBLConfig+0x108>
14a1c: 90 91 f5 04 lds r25, 0x04F5
14a20: 91 11 cpse r25, r1
14a22: 79 c0 rjmp .+242 ; 0x14b16 <I2C_ReadBLConfig+0x10c>
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
14a24: 8d 30 cpi r24, 0x0D ; 13
14a26: 08 f0 brcs .+2 ; 0x14a2a <I2C_ReadBLConfig+0x20>
14a28: 78 c0 rjmp .+240 ; 0x14b1a <I2C_ReadBLConfig+0x110>
if(motor == 0) return (BLCONFIG_ERR_READ_NOT_POSSIBLE);
14a2a: 88 23 and r24, r24
14a2c: 09 f4 brne .+2 ; 0x14a30 <I2C_ReadBLConfig+0x26>
14a2e: 77 c0 rjmp .+238 ; 0x14b1e <I2C_ReadBLConfig+0x114>
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
14a30: 08 2f mov r16, r24
14a32: 10 e0 ldi r17, 0x00 ; 0
14a34: 01 50 subi r16, 0x01 ; 1
14a36: 11 09 sbc r17, r1
14a38: 8f e0 ldi r24, 0x0F ; 15
14a3a: 80 9f mul r24, r16
14a3c: f0 01 movw r30, r0
14a3e: 81 9f mul r24, r17
14a40: f0 0d add r31, r0
14a42: 11 24 eor r1, r1
14a44: e9 56 subi r30, 0x69 ; 105
14a46: f6 4f sbci r31, 0xF6 ; 246
14a48: 83 81 ldd r24, Z+3 ; 0x03
14a4a: 88 23 and r24, r24
14a4c: 0c f0 brlt .+2 ; 0x14a50 <I2C_ReadBLConfig+0x46>
14a4e: 69 c0 rjmp .+210 ; 0x14b22 <I2C_ReadBLConfig+0x118>
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL!
14a50: 8f e0 ldi r24, 0x0F ; 15
14a52: 80 9f mul r24, r16
14a54: f0 01 movw r30, r0
14a56: 81 9f mul r24, r17
14a58: f0 0d add r31, r0
14a5a: 11 24 eor r1, r1
14a5c: e9 56 subi r30, 0x69 ; 105
14a5e: f6 4f sbci r31, 0xF6 ; 246
14a60: 80 81 ld r24, Z
14a62: 80 ff sbrs r24, 0
14a64: 60 c0 rjmp .+192 ; 0x14b26 <I2C_ReadBLConfig+0x11c>
timer = SetDelay(1000);
14a66: 88 ee ldi r24, 0xE8 ; 232
14a68: 93 e0 ldi r25, 0x03 ; 3
14a6a: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
14a6e: ec 01 movw r28, r24
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
14a70: 80 91 de 04 lds r24, 0x04DE
14a74: 80 fd sbrc r24, 0
14a76: 05 c0 rjmp .+10 ; 0x14a82 <I2C_ReadBLConfig+0x78>
14a78: ce 01 movw r24, r28
14a7a: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
14a7e: 88 23 and r24, r24
14a80: b9 f3 breq .-18 ; 0x14a70 <I2C_ReadBLConfig+0x66>
// prepare the bitmask
BLConfig_ReadMask = 0x0001<<(motor-1);
14a82: 81 e0 ldi r24, 0x01 ; 1
14a84: 90 e0 ldi r25, 0x00 ; 0
14a86: 9c 01 movw r18, r24
14a88: 02 c0 rjmp .+4 ; 0x14a8e <I2C_ReadBLConfig+0x84>
14a8a: 22 0f add r18, r18
14a8c: 33 1f adc r19, r19
14a8e: 0a 95 dec r16
14a90: e2 f7 brpl .-8 ; 0x14a8a <I2C_ReadBLConfig+0x80>
14a92: 30 93 db 04 sts 0x04DB, r19
14a96: 20 93 da 04 sts 0x04DA, r18
motor_write = 0;
14a9a: 10 92 e2 04 sts 0x04E2, r1
motor_read = 0;
14a9e: 10 92 e1 04 sts 0x04E1, r1
BLConfig.Revision = 0; // bad revision
14aa2: 10 92 8f 09 sts 0x098F, r1
BLConfig.crc = 0; // bad checksum
14aa6: 10 92 96 09 sts 0x0996, r1
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms)
do
{
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission
14aaa: 0c eb ldi r16, 0xBC ; 188
14aac: 10 e0 ldi r17, 0x00 ; 0
14aae: 0f 2e mov r0, r31
14ab0: f5 ea ldi r31, 0xA5 ; 165
14ab2: ff 2e mov r15, r31
14ab4: f0 2d mov r31, r0
14ab6: 10 92 e3 04 sts 0x04E3, r1
14aba: 80 91 de 04 lds r24, 0x04DE
14abe: 8e 7f andi r24, 0xFE ; 254
14ac0: 80 93 de 04 sts 0x04DE, r24
14ac4: f8 01 movw r30, r16
14ac6: f0 82 st Z, r15
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
14ac8: 80 91 de 04 lds r24, 0x04DE
14acc: 80 fd sbrc r24, 0
14ace: 05 c0 rjmp .+10 ; 0x14ada <I2C_ReadBLConfig+0xd0>
14ad0: ce 01 movw r24, r28
14ad2: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
14ad6: 88 23 and r24, r24
14ad8: b9 f3 breq .-18 ; 0x14ac8 <I2C_ReadBLConfig+0xbe>
} while(BLConfig_ReadMask && !CheckDelay(timer)); // repeat until the BL config has been received from all motors
14ada: 80 91 da 04 lds r24, 0x04DA
14ade: 90 91 db 04 lds r25, 0x04DB
14ae2: 89 2b or r24, r25
14ae4: 29 f0 breq .+10 ; 0x14af0 <I2C_ReadBLConfig+0xe6>
14ae6: ce 01 movw r24, r28
14ae8: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
14aec: 88 23 and r24, r24
14aee: 19 f3 breq .-58 ; 0x14ab6 <I2C_ReadBLConfig+0xac>
// validate result
if((BLConfig.Revision & 0x0B) != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison
14af0: 80 91 8f 09 lds r24, 0x098F
14af4: 8b 70 andi r24, 0x0B ; 11
14af6: 82 30 cpi r24, 0x02 ; 2
14af8: c1 f4 brne .+48 ; 0x14b2a <I2C_ReadBLConfig+0x120>
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1);
14afa: 67 e0 ldi r22, 0x07 ; 7
14afc: 70 e0 ldi r23, 0x00 ; 0
14afe: 8f e8 ldi r24, 0x8F ; 143
14b00: 99 e0 ldi r25, 0x09 ; 9
14b02: 0e 94 3e 23 call 0x467c ; 0x467c <RAM_Checksum>
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum
14b06: 90 91 96 09 lds r25, 0x0996
14b0a: 98 17 cp r25, r24
14b0c: 81 f0 breq .+32 ; 0x14b2e <I2C_ReadBLConfig+0x124>
14b0e: 85 e0 ldi r24, 0x05 ; 5
14b10: 0f c0 rjmp .+30 ; 0x14b30 <I2C_ReadBLConfig+0x126>
uint8_t I2C_ReadBLConfig(uint8_t motor)
{
uint8_t i;
uint16_t timer;
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running!
14b12: 81 e0 ldi r24, 0x01 ; 1
14b14: 0d c0 rjmp .+26 ; 0x14b30 <I2C_ReadBLConfig+0x126>
14b16: 81 e0 ldi r24, 0x01 ; 1
14b18: 0b c0 rjmp .+22 ; 0x14b30 <I2C_ReadBLConfig+0x126>
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
14b1a: 82 e0 ldi r24, 0x02 ; 2
14b1c: 09 c0 rjmp .+18 ; 0x14b30 <I2C_ReadBLConfig+0x126>
if(motor == 0) return (BLCONFIG_ERR_READ_NOT_POSSIBLE);
14b1e: 86 e0 ldi r24, 0x06 ; 6
14b20: 07 c0 rjmp .+14 ; 0x14b30 <I2C_ReadBLConfig+0x126>
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
14b22: 82 e0 ldi r24, 0x02 ; 2
14b24: 05 c0 rjmp .+10 ; 0x14b30 <I2C_ReadBLConfig+0x126>
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL!
14b26: 83 e0 ldi r24, 0x03 ; 3
14b28: 03 c0 rjmp .+6 ; 0x14b30 <I2C_ReadBLConfig+0x126>
{
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
} while(BLConfig_ReadMask && !CheckDelay(timer)); // repeat until the BL config has been received from all motors
// validate result
if((BLConfig.Revision & 0x0B) != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison
14b2a: 84 e0 ldi r24, 0x04 ; 4
14b2c: 01 c0 rjmp .+2 ; 0x14b30 <I2C_ReadBLConfig+0x126>
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1);
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum
return(BLCONFIG_SUCCESS);
14b2e: 80 e0 ldi r24, 0x00 ; 0
}
14b30: df 91 pop r29
14b32: cf 91 pop r28
14b34: 1f 91 pop r17
14b36: 0f 91 pop r16
14b38: ff 90 pop r15
14b3a: 08 95 ret
00014b3c <__vector_22>:
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ISR(USART0_TX_vect)
{
14b3c: 1f 92 push r1
14b3e: 0f 92 push r0
14b40: 0f b6 in r0, 0x3f ; 63
14b42: 0f 92 push r0
14b44: 11 24 eor r1, r1
14b46: 0b b6 in r0, 0x3b ; 59
14b48: 0f 92 push r0
14b4a: 2f 93 push r18
14b4c: 8f 93 push r24
14b4e: 9f 93 push r25
14b50: ef 93 push r30
14b52: ff 93 push r31
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
14b54: 80 91 b7 02 lds r24, 0x02B7
14b58: 81 11 cpse r24, r1
14b5a: 1c c0 rjmp .+56 ; 0x14b94 <__vector_22+0x58>
{
ptr++; // die [0] wurde schon gesendet
14b5c: 80 91 ea 04 lds r24, 0x04EA
14b60: 90 91 eb 04 lds r25, 0x04EB
14b64: 01 96 adiw r24, 0x01 ; 1
14b66: 90 93 eb 04 sts 0x04EB, r25
14b6a: 80 93 ea 04 sts 0x04EA, r24
tmp_tx = TxdBuffer[ptr];
14b6e: fc 01 movw r30, r24
14b70: e6 59 subi r30, 0x96 ; 150
14b72: f4 4f sbci r31, 0xF4 ; 244
14b74: 20 81 ld r18, Z
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
14b76: 2d 30 cpi r18, 0x0D ; 13
14b78: 19 f0 breq .+6 ; 0x14b80 <__vector_22+0x44>
14b7a: 8c 3d cpi r24, 0xDC ; 220
14b7c: 91 05 cpc r25, r1
14b7e: 39 f4 brne .+14 ; 0x14b8e <__vector_22+0x52>
{
ptr = 0;
14b80: 10 92 eb 04 sts 0x04EB, r1
14b84: 10 92 ea 04 sts 0x04EA, r1
UebertragungAbgeschlossen = 1;
14b88: 81 e0 ldi r24, 0x01 ; 1
14b8a: 80 93 b7 02 sts 0x02B7, r24
}
UDR0 = tmp_tx;
14b8e: 20 93 c6 00 sts 0x00C6, r18
14b92: 04 c0 rjmp .+8 ; 0x14b9c <__vector_22+0x60>
}
else ptr = 0;
14b94: 10 92 eb 04 sts 0x04EB, r1
14b98: 10 92 ea 04 sts 0x04EA, r1
}
14b9c: ff 91 pop r31
14b9e: ef 91 pop r30
14ba0: 9f 91 pop r25
14ba2: 8f 91 pop r24
14ba4: 2f 91 pop r18
14ba6: 0f 90 pop r0
14ba8: 0b be out 0x3b, r0 ; 59
14baa: 0f 90 pop r0
14bac: 0f be out 0x3f, r0 ; 63
14bae: 0f 90 pop r0
14bb0: 1f 90 pop r1
14bb2: 18 95 reti
00014bb4 <__vector_20>:
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ISR(USART0_RX_vect)
{
14bb4: 1f 92 push r1
14bb6: 0f 92 push r0
14bb8: 0f b6 in r0, 0x3f ; 63
14bba: 0f 92 push r0
14bbc: 11 24 eor r1, r1
14bbe: 0b b6 in r0, 0x3b ; 59
14bc0: 0f 92 push r0
14bc2: 1f 93 push r17
14bc4: 2f 93 push r18
14bc6: 3f 93 push r19
14bc8: 4f 93 push r20
14bca: 5f 93 push r21
14bcc: 6f 93 push r22
14bce: 7f 93 push r23
14bd0: 8f 93 push r24
14bd2: 9f 93 push r25
14bd4: af 93 push r26
14bd6: bf 93 push r27
14bd8: cf 93 push r28
14bda: df 93 push r29
14bdc: ef 93 push r30
14bde: ff 93 push r31
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
if (ReceiverUpdateModeActive == 1) { UDR1 = UDR0; return; } // 1 = Update
14be0: 80 91 ec 04 lds r24, 0x04EC
14be4: 81 30 cpi r24, 0x01 ; 1
14be6: 29 f4 brne .+10 ; 0x14bf2 <__vector_20+0x3e>
14be8: 80 91 c6 00 lds r24, 0x00C6
14bec: 80 93 ce 00 sts 0x00CE, r24
14bf0: de c0 rjmp .+444 ; 0x14dae <__vector_20+0x1fa>
if (ReceiverUpdateModeActive == 2) { RxdBuffer[0] = UDR0; return; } // 2 = JetiBox-Simulation
14bf2: 80 91 ec 04 lds r24, 0x04EC
14bf6: 82 30 cpi r24, 0x02 ; 2
14bf8: 29 f4 brne .+10 ; 0x14c04 <__vector_20+0x50>
14bfa: 80 91 c6 00 lds r24, 0x00C6
14bfe: 80 93 8c 0a sts 0x0A8C, r24
14c02: d5 c0 rjmp .+426 ; 0x14dae <__vector_20+0x1fa>
SioTmp = UDR0;
14c04: 80 91 c6 00 lds r24, 0x00C6
14c08: 80 93 fc 04 sts 0x04FC, r24
if(buf_ptr >= MAX_SENDE_BUFF) UartState = 0;
14c0c: 10 91 e9 04 lds r17, 0x04E9
14c10: 1c 3d cpi r17, 0xDC ; 220
14c12: 10 f0 brcs .+4 ; 0x14c18 <__vector_20+0x64>
14c14: 10 92 e8 04 sts 0x04E8, r1
if(SioTmp == '\r' && UartState == 2)
14c18: 80 91 fc 04 lds r24, 0x04FC
14c1c: 8d 30 cpi r24, 0x0D ; 13
14c1e: 09 f0 breq .+2 ; 0x14c22 <__vector_20+0x6e>
14c20: 65 c0 rjmp .+202 ; 0x14cec <__vector_20+0x138>
14c22: 80 91 e8 04 lds r24, 0x04E8
14c26: 82 30 cpi r24, 0x02 ; 2
14c28: 09 f0 breq .+2 ; 0x14c2c <__vector_20+0x78>
14c2a: 60 c0 rjmp .+192 ; 0x14cec <__vector_20+0x138>
{
UartState = 0;
14c2c: 10 92 e8 04 sts 0x04E8, r1
crc -= RxdBuffer[buf_ptr-2];
14c30: 21 2f mov r18, r17
14c32: 30 e0 ldi r19, 0x00 ; 0
14c34: d9 01 movw r26, r18
14c36: a6 57 subi r26, 0x76 ; 118
14c38: b5 4f sbci r27, 0xF5 ; 245
14c3a: 7c 91 ld r23, X
crc -= RxdBuffer[buf_ptr-1];
14c3c: a9 01 movw r20, r18
14c3e: 41 50 subi r20, 0x01 ; 1
14c40: 51 09 sbc r21, r1
14c42: ea 01 movw r28, r20
14c44: c4 57 subi r28, 0x74 ; 116
14c46: d5 4f sbci r29, 0xF5 ; 245
14c48: 68 81 ld r22, Y
if(buf_ptr >= MAX_SENDE_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
14c4a: 80 91 e6 04 lds r24, 0x04E6
14c4e: 90 91 e7 04 lds r25, 0x04E7
14c52: 87 1b sub r24, r23
14c54: 91 09 sbc r25, r1
crc -= RxdBuffer[buf_ptr-1];
14c56: 86 1b sub r24, r22
14c58: 91 09 sbc r25, r1
crc %= 4096;
14c5a: 9f 70 andi r25, 0x0F ; 15
14c5c: 90 93 e7 04 sts 0x04E7, r25
14c60: 80 93 e6 04 sts 0x04E6, r24
crc1 = '=' + crc / 64;
14c64: bc 01 movw r22, r24
14c66: 00 24 eor r0, r0
14c68: 66 0f add r22, r22
14c6a: 77 1f adc r23, r23
14c6c: 00 1c adc r0, r0
14c6e: 66 0f add r22, r22
14c70: 77 1f adc r23, r23
14c72: 00 1c adc r0, r0
14c74: 67 2f mov r22, r23
14c76: 70 2d mov r23, r0
14c78: 63 5c subi r22, 0xC3 ; 195
14c7a: 60 93 e5 04 sts 0x04E5, r22
crc2 = '=' + crc % 64;
14c7e: 8f 73 andi r24, 0x3F ; 63
14c80: 83 5c subi r24, 0xC3 ; 195
14c82: 80 93 e4 04 sts 0x04E4, r24
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
14c86: 9c 91 ld r25, X
14c88: 69 13 cpse r22, r25
14c8a: 04 c0 rjmp .+8 ; 0x14c94 <__vector_20+0xe0>
14c8c: 98 81 ld r25, Y
14c8e: 89 17 cp r24, r25
14c90: 09 f4 brne .+2 ; 0x14c94 <__vector_20+0xe0>
14c92: 88 c0 rjmp .+272 ; 0x14da4 <__vector_20+0x1f0>
14c94: 80 91 fa 04 lds r24, 0x04FA
14c98: 8f 5f subi r24, 0xFF ; 255
14c9a: 80 93 fa 04 sts 0x04FA, r24
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
14c9e: 80 91 fb 04 lds r24, 0x04FB
14ca2: 85 c0 rjmp .+266 ; 0x14dae <__vector_20+0x1fa>
{
NeuerDatensatzEmpfangen = 1;
14ca4: 81 e0 ldi r24, 0x01 ; 1
14ca6: 80 93 fb 04 sts 0x04FB, r24
AnzahlEmpfangsBytes = buf_ptr + 1;
14caa: 1f 5f subi r17, 0xFF ; 255
14cac: 10 93 f9 04 sts 0x04F9, r17
RxdBuffer[buf_ptr] = '\r';
14cb0: f9 01 movw r30, r18
14cb2: e4 57 subi r30, 0x74 ; 116
14cb4: f5 4f sbci r31, 0xF5 ; 245
14cb6: 8d e0 ldi r24, 0x0D ; 13
14cb8: 80 83 st Z, r24
if(RxdBuffer[2] == 'R' && !MotorenEin)
14cba: 80 91 8e 0a lds r24, 0x0A8E
14cbe: 82 35 cpi r24, 0x52 ; 82
14cc0: 09 f0 breq .+2 ; 0x14cc4 <__vector_20+0x110>
14cc2: 75 c0 rjmp .+234 ; 0x14dae <__vector_20+0x1fa>
14cc4: 80 91 03 04 lds r24, 0x0403
14cc8: 81 11 cpse r24, r1
14cca: 71 c0 rjmp .+226 ; 0x14dae <__vector_20+0x1fa>
{
LcdClear();
14ccc: 0e 94 1d 87 call 0x10e3a ; 0x10e3a <LcdClear>
wdt_enable(WDTO_250MS); // Reset-Commando
14cd0: 2c e0 ldi r18, 0x0C ; 12
14cd2: 88 e1 ldi r24, 0x18 ; 24
14cd4: 90 e0 ldi r25, 0x00 ; 0
14cd6: 0f b6 in r0, 0x3f ; 63
14cd8: f8 94 cli
14cda: a8 95 wdr
14cdc: 80 93 60 00 sts 0x0060, r24
14ce0: 0f be out 0x3f, r0 ; 63
14ce2: 20 93 60 00 sts 0x0060, r18
ServoActive = 0;
14ce6: 10 92 cb 04 sts 0x04CB, r1
14cea: 61 c0 rjmp .+194 ; 0x14dae <__vector_20+0x1fa>
}
}
}
else
switch(UartState)
14cec: 80 91 e8 04 lds r24, 0x04E8
14cf0: 81 30 cpi r24, 0x01 ; 1
14cf2: f1 f0 breq .+60 ; 0x14d30 <__vector_20+0x17c>
14cf4: 18 f0 brcs .+6 ; 0x14cfc <__vector_20+0x148>
14cf6: 82 30 cpi r24, 0x02 ; 2
14cf8: b1 f1 breq .+108 ; 0x14d66 <__vector_20+0x1b2>
14cfa: 51 c0 rjmp .+162 ; 0x14d9e <__vector_20+0x1ea>
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
14cfc: 80 91 fc 04 lds r24, 0x04FC
14d00: 83 32 cpi r24, 0x23 ; 35
14d02: 39 f4 brne .+14 ; 0x14d12 <__vector_20+0x15e>
14d04: 80 91 fb 04 lds r24, 0x04FB
14d08: 81 11 cpse r24, r1
14d0a: 03 c0 rjmp .+6 ; 0x14d12 <__vector_20+0x15e>
14d0c: 81 e0 ldi r24, 0x01 ; 1
14d0e: 80 93 e8 04 sts 0x04E8, r24
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
14d12: 81 e0 ldi r24, 0x01 ; 1
14d14: 80 93 e9 04 sts 0x04E9, r24
14d18: 80 91 fc 04 lds r24, 0x04FC
14d1c: 80 93 8c 0a sts 0x0A8C, r24
crc = SioTmp;
14d20: 80 91 fc 04 lds r24, 0x04FC
14d24: 90 e0 ldi r25, 0x00 ; 0
14d26: 90 93 e7 04 sts 0x04E7, r25
14d2a: 80 93 e6 04 sts 0x04E6, r24
break;
14d2e: 3f c0 rjmp .+126 ; 0x14dae <__vector_20+0x1fa>
case 1: // Adresse auswerten
UartState++;
14d30: 82 e0 ldi r24, 0x02 ; 2
14d32: 80 93 e8 04 sts 0x04E8, r24
RxdBuffer[buf_ptr++] = SioTmp;
14d36: 81 e0 ldi r24, 0x01 ; 1
14d38: 81 0f add r24, r17
14d3a: 80 93 e9 04 sts 0x04E9, r24
14d3e: e1 2f mov r30, r17
14d40: f0 e0 ldi r31, 0x00 ; 0
14d42: 80 91 fc 04 lds r24, 0x04FC
14d46: e4 57 subi r30, 0x74 ; 116
14d48: f5 4f sbci r31, 0xF5 ; 245
14d4a: 80 83 st Z, r24
crc += SioTmp;
14d4c: 20 91 fc 04 lds r18, 0x04FC
14d50: 80 91 e6 04 lds r24, 0x04E6
14d54: 90 91 e7 04 lds r25, 0x04E7
14d58: 82 0f add r24, r18
14d5a: 91 1d adc r25, r1
14d5c: 90 93 e7 04 sts 0x04E7, r25
14d60: 80 93 e6 04 sts 0x04E6, r24
break;
14d64: 24 c0 rjmp .+72 ; 0x14dae <__vector_20+0x1fa>
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
14d66: e1 2f mov r30, r17
14d68: f0 e0 ldi r31, 0x00 ; 0
14d6a: 80 91 fc 04 lds r24, 0x04FC
14d6e: e4 57 subi r30, 0x74 ; 116
14d70: f5 4f sbci r31, 0xF5 ; 245
14d72: 80 83 st Z, r24
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
14d74: 1c 3d cpi r17, 0xDC ; 220
14d76: 20 f4 brcc .+8 ; 0x14d80 <__vector_20+0x1cc>
14d78: 1f 5f subi r17, 0xFF ; 255
14d7a: 10 93 e9 04 sts 0x04E9, r17
14d7e: 02 c0 rjmp .+4 ; 0x14d84 <__vector_20+0x1d0>
else UartState = 0;
14d80: 10 92 e8 04 sts 0x04E8, r1
//if(DebugOut.Analog[] < buf_ptr) DebugOut.Analog[] = buf_ptr;
crc += SioTmp;
14d84: 20 91 fc 04 lds r18, 0x04FC
14d88: 80 91 e6 04 lds r24, 0x04E6
14d8c: 90 91 e7 04 lds r25, 0x04E7
14d90: 82 0f add r24, r18
14d92: 91 1d adc r25, r1
14d94: 90 93 e7 04 sts 0x04E7, r25
14d98: 80 93 e6 04 sts 0x04E6, r24
break;
14d9c: 08 c0 rjmp .+16 ; 0x14dae <__vector_20+0x1fa>
default:
UartState = 0;
14d9e: 10 92 e8 04 sts 0x04E8, r1
break;
14da2: 05 c0 rjmp .+10 ; 0x14dae <__vector_20+0x1fa>
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
14da4: 80 91 fb 04 lds r24, 0x04FB
14da8: 88 23 and r24, r24
14daa: 09 f4 brne .+2 ; 0x14dae <__vector_20+0x1fa>
14dac: 7b cf rjmp .-266 ; 0x14ca4 <__vector_20+0xf0>
break;
default:
UartState = 0;
break;
}
}
14dae: ff 91 pop r31
14db0: ef 91 pop r30
14db2: df 91 pop r29
14db4: cf 91 pop r28
14db6: bf 91 pop r27
14db8: af 91 pop r26
14dba: 9f 91 pop r25
14dbc: 8f 91 pop r24
14dbe: 7f 91 pop r23
14dc0: 6f 91 pop r22
14dc2: 5f 91 pop r21
14dc4: 4f 91 pop r20
14dc6: 3f 91 pop r19
14dc8: 2f 91 pop r18
14dca: 1f 91 pop r17
14dcc: 0f 90 pop r0
14dce: 0b be out 0x3b, r0 ; 59
14dd0: 0f 90 pop r0
14dd2: 0f be out 0x3f, r0 ; 63
14dd4: 0f 90 pop r0
14dd6: 1f 90 pop r1
14dd8: 18 95 reti
00014dda <AddCRC>:
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
14dda: 00 97 sbiw r24, 0x00 ; 0
14ddc: 81 f0 breq .+32 ; 0x14dfe <AddCRC+0x24>
14dde: 20 e0 ldi r18, 0x00 ; 0
14de0: 30 e0 ldi r19, 0x00 ; 0
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
14de2: 40 e0 ldi r20, 0x00 ; 0
14de4: 50 e0 ldi r21, 0x00 ; 0
for(i = 0; i < wieviele;i++)
{
tmpCRC += TxdBuffer[i];
14de6: f9 01 movw r30, r18
14de8: e6 59 subi r30, 0x96 ; 150
14dea: f4 4f sbci r31, 0xF4 ; 244
14dec: 60 81 ld r22, Z
14dee: 46 0f add r20, r22
14df0: 51 1d adc r21, r1
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
14df2: 2f 5f subi r18, 0xFF ; 255
14df4: 3f 4f sbci r19, 0xFF ; 255
14df6: 28 17 cp r18, r24
14df8: 39 07 cpc r19, r25
14dfa: a9 f7 brne .-22 ; 0x14de6 <AddCRC+0xc>
14dfc: 02 c0 rjmp .+4 ; 0x14e02 <AddCRC+0x28>
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
14dfe: 40 e0 ldi r20, 0x00 ; 0
14e00: 50 e0 ldi r21, 0x00 ; 0
for(i = 0; i < wieviele;i++)
{
tmpCRC += TxdBuffer[i];
}
// if(i > MAX_SENDE_BUFF - 3) tmpCRC += 11;
tmpCRC %= 4096;
14e02: 5f 70 andi r21, 0x0F ; 15
TxdBuffer[i++] = '=' + tmpCRC / 64;
14e04: 9a 01 movw r18, r20
14e06: 00 24 eor r0, r0
14e08: 22 0f add r18, r18
14e0a: 33 1f adc r19, r19
14e0c: 00 1c adc r0, r0
14e0e: 22 0f add r18, r18
14e10: 33 1f adc r19, r19
14e12: 00 1c adc r0, r0
14e14: 23 2f mov r18, r19
14e16: 30 2d mov r19, r0
14e18: 23 5c subi r18, 0xC3 ; 195
14e1a: fc 01 movw r30, r24
14e1c: e6 59 subi r30, 0x96 ; 150
14e1e: f4 4f sbci r31, 0xF4 ; 244
14e20: 20 83 st Z, r18
TxdBuffer[i++] = '=' + tmpCRC % 64;
14e22: 4f 73 andi r20, 0x3F ; 63
14e24: 43 5c subi r20, 0xC3 ; 195
14e26: fc 01 movw r30, r24
14e28: e5 59 subi r30, 0x95 ; 149
14e2a: f4 4f sbci r31, 0xF4 ; 244
14e2c: 40 83 st Z, r20
TxdBuffer[i++] = '\r';
14e2e: fc 01 movw r30, r24
14e30: e4 59 subi r30, 0x94 ; 148
14e32: f4 4f sbci r31, 0xF4 ; 244
14e34: 2d e0 ldi r18, 0x0D ; 13
14e36: 20 83 st Z, r18
UebertragungAbgeschlossen = 0;
14e38: 10 92 b7 02 sts 0x02B7, r1
UDR0 = TxdBuffer[0];
14e3c: 80 91 6a 0b lds r24, 0x0B6A
14e40: 80 93 c6 00 sts 0x00C6, r24
14e44: 08 95 ret
00014e46 <SendOutData>:
}
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char address, unsigned char BufferAnzahl, ...) //unsigned char *snd, unsigned char len)
{
14e46: df 92 push r13
14e48: ef 92 push r14
14e4a: ff 92 push r15
14e4c: 0f 93 push r16
14e4e: 1f 93 push r17
14e50: cf 93 push r28
14e52: df 93 push r29
14e54: cd b7 in r28, 0x3d ; 61
14e56: de b7 in r29, 0x3e ; 62
14e58: 0c 85 ldd r16, Y+12 ; 0x0c
unsigned char ptr = 0;
unsigned char *snd = 0;
int len = 0;
TxdBuffer[pt++] = '#'; // Startzeichen
14e5a: 83 e2 ldi r24, 0x23 ; 35
14e5c: 80 93 6a 0b sts 0x0B6A, r24
TxdBuffer[pt++] = 'a' + address; // Adresse (a=0; b=1,...)
14e60: 8b 85 ldd r24, Y+11 ; 0x0b
14e62: 8f 59 subi r24, 0x9F ; 159
14e64: 80 93 6b 0b sts 0x0B6B, r24
TxdBuffer[pt++] = cmd; // Commando
14e68: 8a 85 ldd r24, Y+10 ; 0x0a
14e6a: 80 93 6c 0b sts 0x0B6C, r24
va_start(ap, BufferAnzahl);
if(BufferAnzahl)
14e6e: 00 23 and r16, r16
14e70: 09 f4 brne .+2 ; 0x14e74 <SendOutData+0x2e>
14e72: a1 c0 rjmp .+322 ; 0x14fb6 <SendOutData+0x170>
{
snd = va_arg(ap, unsigned char*);
14e74: 6d 85 ldd r22, Y+13 ; 0x0d
14e76: 7e 85 ldd r23, Y+14 ; 0x0e
len = va_arg(ap, int);
14e78: ad e0 ldi r26, 0x0D ; 13
14e7a: b0 e0 ldi r27, 0x00 ; 0
14e7c: ac 0f add r26, r28
14e7e: bd 1f adc r27, r29
14e80: 14 96 adiw r26, 0x04 ; 4
14e82: 2f 85 ldd r18, Y+15 ; 0x0f
14e84: 38 89 ldd r19, Y+16 ; 0x10
ptr = 0;
BufferAnzahl--;
14e86: 01 50 subi r16, 0x01 ; 1
}
while(len)
14e88: 21 15 cp r18, r1
14e8a: 31 05 cpc r19, r1
14e8c: 09 f4 brne .+2 ; 0x14e90 <SendOutData+0x4a>
14e8e: 96 c0 rjmp .+300 ; 0x14fbc <SendOutData+0x176>
14e90: d1 2c mov r13, r1
14e92: 83 e0 ldi r24, 0x03 ; 3
14e94: 90 e0 ldi r25, 0x00 ; 0
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else c = 0;
14e96: 10 e0 ldi r17, 0x00 ; 0
ptr = 0;
BufferAnzahl--;
}
while(len)
{
if(len)
14e98: 21 15 cp r18, r1
14e9a: 31 05 cpc r19, r1
14e9c: 09 f4 brne .+2 ; 0x14ea0 <SendOutData+0x5a>
14e9e: 92 c0 rjmp .+292 ; 0x14fc4 <SendOutData+0x17e>
{
a = snd[ptr++];
14ea0: ff 24 eor r15, r15
14ea2: f3 94 inc r15
14ea4: fd 0c add r15, r13
14ea6: fb 01 movw r30, r22
14ea8: ed 0d add r30, r13
14eaa: f1 1d adc r31, r1
14eac: 40 81 ld r20, Z
len--;
14eae: 21 50 subi r18, 0x01 ; 1
14eb0: 31 09 sbc r19, r1
if((!len) && BufferAnzahl)
14eb2: 21 15 cp r18, r1
14eb4: 31 05 cpc r19, r1
14eb6: 99 f4 brne .+38 ; 0x14ede <SendOutData+0x98>
14eb8: 00 23 and r16, r16
14eba: 09 f4 brne .+2 ; 0x14ebe <SendOutData+0x78>
14ebc: 85 c0 rjmp .+266 ; 0x14fc8 <SendOutData+0x182>
{
snd = va_arg(ap, unsigned char*);
14ebe: 6d 91 ld r22, X+
14ec0: 7c 91 ld r23, X
14ec2: 11 97 sbiw r26, 0x01 ; 1
len = va_arg(ap, int);
14ec4: fd 01 movw r30, r26
14ec6: 34 96 adiw r30, 0x04 ; 4
14ec8: 12 96 adiw r26, 0x02 ; 2
14eca: 2d 91 ld r18, X+
14ecc: 3c 91 ld r19, X
14ece: 13 97 sbiw r26, 0x03 ; 3
ptr = 0;
BufferAnzahl--;
14ed0: 01 50 subi r16, 0x01 ; 1
}
}
else a = 0;
if(len)
14ed2: 21 15 cp r18, r1
14ed4: 31 05 cpc r19, r1
14ed6: 09 f4 brne .+2 ; 0x14eda <SendOutData+0x94>
14ed8: 7a c0 rjmp .+244 ; 0x14fce <SendOutData+0x188>
a = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
14eda: df 01 movw r26, r30
ptr = 0;
14edc: f1 2e mov r15, r17
}
}
else a = 0;
if(len)
{
b = snd[ptr++];
14ede: 51 e0 ldi r21, 0x01 ; 1
14ee0: 5f 0d add r21, r15
14ee2: fb 01 movw r30, r22
14ee4: ef 0d add r30, r15
14ee6: f1 1d adc r31, r1
14ee8: e0 80 ld r14, Z
len--;
14eea: 21 50 subi r18, 0x01 ; 1
14eec: 31 09 sbc r19, r1
if((!len) && BufferAnzahl)
14eee: 21 15 cp r18, r1
14ef0: 31 05 cpc r19, r1
14ef2: 91 f4 brne .+36 ; 0x14f18 <SendOutData+0xd2>
14ef4: 00 23 and r16, r16
14ef6: 09 f4 brne .+2 ; 0x14efa <SendOutData+0xb4>
14ef8: 6e c0 rjmp .+220 ; 0x14fd6 <SendOutData+0x190>
{
snd = va_arg(ap, unsigned char*);
14efa: 6d 91 ld r22, X+
14efc: 7c 91 ld r23, X
14efe: 11 97 sbiw r26, 0x01 ; 1
len = va_arg(ap, int);
14f00: fd 01 movw r30, r26
14f02: 34 96 adiw r30, 0x04 ; 4
14f04: 12 96 adiw r26, 0x02 ; 2
14f06: 2d 91 ld r18, X+
14f08: 3c 91 ld r19, X
14f0a: 13 97 sbiw r26, 0x03 ; 3
ptr = 0;
BufferAnzahl--;
14f0c: 01 50 subi r16, 0x01 ; 1
}
}
else b = 0;
if(len)
14f0e: 21 15 cp r18, r1
14f10: 31 05 cpc r19, r1
14f12: d9 f0 breq .+54 ; 0x14f4a <SendOutData+0x104>
b = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
14f14: df 01 movw r26, r30
ptr = 0;
14f16: 51 2f mov r21, r17
}
}
else b = 0;
if(len)
{
c = snd[ptr++];
14f18: dd 24 eor r13, r13
14f1a: d3 94 inc r13
14f1c: d5 0e add r13, r21
14f1e: fb 01 movw r30, r22
14f20: e5 0f add r30, r21
14f22: f1 1d adc r31, r1
14f24: f0 80 ld r15, Z
len--;
14f26: 21 50 subi r18, 0x01 ; 1
14f28: 31 09 sbc r19, r1
if((!len) && BufferAnzahl)
14f2a: 21 15 cp r18, r1
14f2c: 31 05 cpc r19, r1
14f2e: 81 f4 brne .+32 ; 0x14f50 <SendOutData+0x10a>
14f30: 00 23 and r16, r16
14f32: 71 f0 breq .+28 ; 0x14f50 <SendOutData+0x10a>
{
snd = va_arg(ap, unsigned char*);
14f34: 6d 91 ld r22, X+
14f36: 7c 91 ld r23, X
14f38: 11 97 sbiw r26, 0x01 ; 1
len = va_arg(ap, int);
14f3a: 12 96 adiw r26, 0x02 ; 2
14f3c: 2d 91 ld r18, X+
14f3e: 3c 91 ld r19, X
14f40: 13 97 sbiw r26, 0x03 ; 3
ptr = 0;
BufferAnzahl--;
14f42: 01 50 subi r16, 0x01 ; 1
c = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
14f44: 14 96 adiw r26, 0x04 ; 4
ptr = 0;
14f46: d1 2e mov r13, r17
14f48: 03 c0 rjmp .+6 ; 0x14f50 <SendOutData+0x10a>
b = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
14f4a: df 01 movw r26, r30
ptr = 0;
14f4c: d1 2e mov r13, r17
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else c = 0;
14f4e: f1 2e mov r15, r17
TxdBuffer[pt++] = '=' + (a >> 2);
14f50: 54 2f mov r21, r20
14f52: 56 95 lsr r21
14f54: 56 95 lsr r21
14f56: 53 5c subi r21, 0xC3 ; 195
14f58: fc 01 movw r30, r24
14f5a: e6 59 subi r30, 0x96 ; 150
14f5c: f4 4f sbci r31, 0xF4 ; 244
14f5e: 50 83 st Z, r21
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
14f60: 43 70 andi r20, 0x03 ; 3
14f62: e0 e1 ldi r30, 0x10 ; 16
14f64: 4e 9f mul r20, r30
14f66: a0 01 movw r20, r0
14f68: 11 24 eor r1, r1
14f6a: 5e 2d mov r21, r14
14f6c: 52 95 swap r21
14f6e: 5f 70 andi r21, 0x0F ; 15
14f70: 45 2b or r20, r21
14f72: 43 5c subi r20, 0xC3 ; 195
14f74: fc 01 movw r30, r24
14f76: e5 59 subi r30, 0x95 ; 149
14f78: f4 4f sbci r31, 0xF4 ; 244
14f7a: 40 83 st Z, r20
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
14f7c: 4e 2d mov r20, r14
14f7e: 4f 70 andi r20, 0x0F ; 15
14f80: 44 0f add r20, r20
14f82: 44 0f add r20, r20
14f84: 5f 2d mov r21, r15
14f86: 52 95 swap r21
14f88: 56 95 lsr r21
14f8a: 56 95 lsr r21
14f8c: 53 70 andi r21, 0x03 ; 3
14f8e: 45 2b or r20, r21
14f90: 43 5c subi r20, 0xC3 ; 195
14f92: fc 01 movw r30, r24
14f94: e4 59 subi r30, 0x94 ; 148
14f96: f4 4f sbci r31, 0xF4 ; 244
14f98: 40 83 st Z, r20
TxdBuffer[pt++] = '=' + ( c & 0x3f);
14f9a: 4f 2d mov r20, r15
14f9c: 4f 73 andi r20, 0x3F ; 63
14f9e: 43 5c subi r20, 0xC3 ; 195
14fa0: fc 01 movw r30, r24
14fa2: 33 96 adiw r30, 0x03 ; 3
14fa4: e6 59 subi r30, 0x96 ; 150
14fa6: f4 4f sbci r31, 0xF4 ; 244
14fa8: 04 96 adiw r24, 0x04 ; 4
14faa: 40 83 st Z, r20
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
while(len)
14fac: 21 15 cp r18, r1
14fae: 31 05 cpc r19, r1
14fb0: 09 f0 breq .+2 ; 0x14fb4 <SendOutData+0x16e>
14fb2: 72 cf rjmp .-284 ; 0x14e98 <SendOutData+0x52>
14fb4: 05 c0 rjmp .+10 ; 0x14fc0 <SendOutData+0x17a>
14fb6: 83 e0 ldi r24, 0x03 ; 3
14fb8: 90 e0 ldi r25, 0x00 ; 0
14fba: 02 c0 rjmp .+4 ; 0x14fc0 <SendOutData+0x17a>
14fbc: 83 e0 ldi r24, 0x03 ; 3
14fbe: 90 e0 ldi r25, 0x00 ; 0
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
TxdBuffer[pt++] = '=' + ( c & 0x3f);
}
va_end(ap);
AddCRC(pt);
14fc0: 0c df rcall .-488 ; 0x14dda <AddCRC>
14fc2: 0c c0 rjmp .+24 ; 0x14fdc <SendOutData+0x196>
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else a = 0;
14fc4: 41 2f mov r20, r17
14fc6: 01 c0 rjmp .+2 ; 0x14fca <SendOutData+0x184>
}
while(len)
{
if(len)
{
a = snd[ptr++];
14fc8: df 2c mov r13, r15
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else b = 0;
14fca: e1 2e mov r14, r17
14fcc: 05 c0 rjmp .+10 ; 0x14fd8 <SendOutData+0x192>
a = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
14fce: df 01 movw r26, r30
ptr = 0;
14fd0: d1 2e mov r13, r17
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else b = 0;
14fd2: e1 2e mov r14, r17
14fd4: 01 c0 rjmp .+2 ; 0x14fd8 <SendOutData+0x192>
}
}
else a = 0;
if(len)
{
b = snd[ptr++];
14fd6: d5 2e mov r13, r21
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else c = 0;
14fd8: f1 2e mov r15, r17
14fda: ba cf rjmp .-140 ; 0x14f50 <SendOutData+0x10a>
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
TxdBuffer[pt++] = '=' + ( c & 0x3f);
}
va_end(ap);
AddCRC(pt);
}
14fdc: df 91 pop r29
14fde: cf 91 pop r28
14fe0: 1f 91 pop r17
14fe2: 0f 91 pop r16
14fe4: ff 90 pop r15
14fe6: ef 90 pop r14
14fe8: df 90 pop r13
14fea: 08 95 ret
00014fec <Decode64>:
{
unsigned char a,b,c,d;
unsigned char x,y,z;
unsigned char ptrIn = 3; // start at begin of data block
unsigned char ptrOut = 3;
unsigned char len = AnzahlEmpfangsBytes - 6; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab.
14fec: 70 91 f9 04 lds r23, 0x04F9
14ff0: 6a ef ldi r22, 0xFA ; 250
14ff2: 67 0f add r22, r23
while(len)
14ff4: 09 f4 brne .+2 ; 0x14ff8 <Decode64+0xc>
14ff6: 54 c0 rjmp .+168 ; 0x150a0 <Decode64+0xb4>
14ff8: ab ef ldi r26, 0xFB ; 251
14ffa: a7 0f add r26, r23
14ffc: 74 50 subi r23, 0x04 ; 4
void Decode64(void) // die daten werden im rx buffer dekodiert, das geht nur, weil aus 4 byte immer 3 gemacht werden.
{
unsigned char a,b,c,d;
unsigned char x,y,z;
unsigned char ptrIn = 3; // start at begin of data block
unsigned char ptrOut = 3;
14ffe: 43 e0 ldi r20, 0x03 ; 3
// --------------------------------------------------------------------------
void Decode64(void) // die daten werden im rx buffer dekodiert, das geht nur, weil aus 4 byte immer 3 gemacht werden.
{
unsigned char a,b,c,d;
unsigned char x,y,z;
unsigned char ptrIn = 3; // start at begin of data block
15000: 53 e0 ldi r21, 0x03 ; 3
unsigned char ptrOut = 3;
unsigned char len = AnzahlEmpfangsBytes - 6; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab.
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
15002: e5 2f mov r30, r21
15004: f0 e0 ldi r31, 0x00 ; 0
15006: e4 57 subi r30, 0x74 ; 116
15008: f5 4f sbci r31, 0xF5 ; 245
1500a: 30 81 ld r19, Z
1500c: e1 e0 ldi r30, 0x01 ; 1
1500e: e5 0f add r30, r21
b = RxdBuffer[ptrIn++] - '=';
15010: f0 e0 ldi r31, 0x00 ; 0
15012: e4 57 subi r30, 0x74 ; 116
15014: f5 4f sbci r31, 0xF5 ; 245
15016: 20 81 ld r18, Z
15018: 2d 53 subi r18, 0x3D ; 61
1501a: e2 e0 ldi r30, 0x02 ; 2
1501c: e5 0f add r30, r21
c = RxdBuffer[ptrIn++] - '=';
1501e: f0 e0 ldi r31, 0x00 ; 0
15020: e4 57 subi r30, 0x74 ; 116
15022: f5 4f sbci r31, 0xF5 ; 245
15024: 80 81 ld r24, Z
15026: 8d 53 subi r24, 0x3D ; 61
d = RxdBuffer[ptrIn++] - '=';
15028: e3 e0 ldi r30, 0x03 ; 3
1502a: e5 0f add r30, r21
1502c: f0 e0 ldi r31, 0x00 ; 0
1502e: 5c 5f subi r21, 0xFC ; 252
15030: e4 57 subi r30, 0x74 ; 116
15032: f5 4f sbci r31, 0xF5 ; 245
15034: e0 81 ld r30, Z
x = (a << 2) | (b >> 4);
15036: 92 2f mov r25, r18
15038: 92 95 swap r25
1503a: 9f 70 andi r25, 0x0F ; 15
unsigned char ptrOut = 3;
unsigned char len = AnzahlEmpfangsBytes - 6; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab.
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
1503c: 3d 53 subi r19, 0x3D ; 61
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
x = (a << 2) | (b >> 4);
1503e: 33 0f add r19, r19
15040: 33 0f add r19, r19
15042: b3 2f mov r27, r19
15044: b9 2b or r27, r25
y = ((b & 0x0f) << 4) | (c >> 2);
15046: 90 e1 ldi r25, 0x10 ; 16
15048: 29 9f mul r18, r25
1504a: 90 01 movw r18, r0
1504c: 11 24 eor r1, r1
1504e: 98 2f mov r25, r24
15050: 96 95 lsr r25
15052: 96 95 lsr r25
15054: 29 2b or r18, r25
z = ((c & 0x03) << 6) | d;
15056: 30 e4 ldi r19, 0x40 ; 64
15058: 83 9f mul r24, r19
1505a: c0 01 movw r24, r0
1505c: 11 24 eor r1, r1
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
1505e: 93 ec ldi r25, 0xC3 ; 195
15060: 9e 0f add r25, r30
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
15062: 89 2b or r24, r25
if(len--) RxdBuffer[ptrOut++] = x; else break;
15064: 66 23 and r22, r22
15066: 09 f1 breq .+66 ; 0x150aa <Decode64+0xbe>
15068: 31 e0 ldi r19, 0x01 ; 1
1506a: 34 0f add r19, r20
1506c: e4 2f mov r30, r20
1506e: f0 e0 ldi r31, 0x00 ; 0
15070: e4 57 subi r30, 0x74 ; 116
15072: f5 4f sbci r31, 0xF5 ; 245
15074: b0 83 st Z, r27
if(len--) RxdBuffer[ptrOut++] = y; else break;
15076: 47 17 cp r20, r23
15078: a9 f0 breq .+42 ; 0x150a4 <Decode64+0xb8>
1507a: 92 e0 ldi r25, 0x02 ; 2
1507c: 94 0f add r25, r20
1507e: e3 2f mov r30, r19
15080: f0 e0 ldi r31, 0x00 ; 0
15082: e4 57 subi r30, 0x74 ; 116
15084: f5 4f sbci r31, 0xF5 ; 245
15086: 20 83 st Z, r18
if(len--) RxdBuffer[ptrOut++] = z; else break;
15088: 63 50 subi r22, 0x03 ; 3
1508a: 4a 17 cp r20, r26
1508c: 69 f0 breq .+26 ; 0x150a8 <Decode64+0xbc>
1508e: 4d 5f subi r20, 0xFD ; 253
15090: e9 2f mov r30, r25
15092: f0 e0 ldi r31, 0x00 ; 0
15094: e4 57 subi r30, 0x74 ; 116
15096: f5 4f sbci r31, 0xF5 ; 245
15098: 80 83 st Z, r24
unsigned char x,y,z;
unsigned char ptrIn = 3; // start at begin of data block
unsigned char ptrOut = 3;
unsigned char len = AnzahlEmpfangsBytes - 6; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab.
while(len)
1509a: 61 11 cpse r22, r1
1509c: b2 cf rjmp .-156 ; 0x15002 <Decode64+0x16>
1509e: 05 c0 rjmp .+10 ; 0x150aa <Decode64+0xbe>
void Decode64(void) // die daten werden im rx buffer dekodiert, das geht nur, weil aus 4 byte immer 3 gemacht werden.
{
unsigned char a,b,c,d;
unsigned char x,y,z;
unsigned char ptrIn = 3; // start at begin of data block
unsigned char ptrOut = 3;
150a0: 43 e0 ldi r20, 0x03 ; 3
150a2: 03 c0 rjmp .+6 ; 0x150aa <Decode64+0xbe>
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
if(len--) RxdBuffer[ptrOut++] = x; else break;
150a4: 43 2f mov r20, r19
150a6: 01 c0 rjmp .+2 ; 0x150aa <Decode64+0xbe>
if(len--) RxdBuffer[ptrOut++] = y; else break;
150a8: 49 2f mov r20, r25
if(len--) RxdBuffer[ptrOut++] = z; else break;
}
pRxData = (unsigned char*)&RxdBuffer[3]; // decodierte Daten beginnen beim 4. Byte
150aa: 8f e8 ldi r24, 0x8F ; 143
150ac: 9a e0 ldi r25, 0x0A ; 10
150ae: 90 93 f8 04 sts 0x04F8, r25
150b2: 80 93 f7 04 sts 0x04F7, r24
RxDataLen = ptrOut - 3; // wie viele Bytes wurden dekodiert?
150b6: 43 50 subi r20, 0x03 ; 3
150b8: 40 93 f6 04 sts 0x04F6, r20
150bc: 08 95 ret
000150be <BearbeiteRxDaten>:
}
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
150be: cf 93 push r28
150c0: df 93 push r29
150c2: 00 d0 rcall .+0 ; 0x150c4 <BearbeiteRxDaten+0x6>
150c4: cd b7 in r28, 0x3d ; 61
150c6: de b7 in r29, 0x3e ; 62
if(!NeuerDatensatzEmpfangen) return;
150c8: 80 91 fb 04 lds r24, 0x04FB
150cc: 88 23 and r24, r24
150ce: 09 f4 brne .+2 ; 0x150d2 <BearbeiteRxDaten+0x14>
150d0: 49 c4 rjmp .+2194 ; 0x15964 <BearbeiteRxDaten+0x8a6>
unsigned char tempchar1, tempchar2;
Decode64(); // dekodiere datenblock im Empfangsbuffer
150d2: 8c df rcall .-232 ; 0x14fec <Decode64>
switch(RxdBuffer[1]-'a') // check for Slave Address
150d4: 80 91 8d 0a lds r24, 0x0A8D
150d8: 82 36 cpi r24, 0x62 ; 98
150da: 09 f0 breq .+2 ; 0x150de <BearbeiteRxDaten+0x20>
150dc: 04 c3 rjmp .+1544 ; 0x156e6 <BearbeiteRxDaten+0x628>
{
case FC_ADDRESS: // FC special commands
switch(RxdBuffer[2])
150de: 80 91 8e 0a lds r24, 0x0A8E
150e2: 90 e0 ldi r25, 0x00 ; 0
150e4: fc 01 movw r30, r24
150e6: eb 54 subi r30, 0x4B ; 75
150e8: f1 09 sbc r31, r1
150ea: ef 32 cpi r30, 0x2F ; 47
150ec: f1 05 cpc r31, r1
150ee: 08 f0 brcs .+2 ; 0x150f2 <BearbeiteRxDaten+0x34>
150f0: fa c2 rjmp .+1524 ; 0x156e6 <BearbeiteRxDaten+0x628>
150f2: e9 54 subi r30, 0x49 ; 73
150f4: ff 4f sbci r31, 0xFF ; 255
150f6: 0c 94 a7 b1 jmp 0x1634e ; 0x1634e <__tablejump2__>
{
case 'K':// Kompasswert
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue));
150fa: e0 91 f7 04 lds r30, 0x04F7
150fe: f0 91 f8 04 lds r31, 0x04F8
15102: 80 81 ld r24, Z
15104: 91 81 ldd r25, Z+1 ; 0x01
15106: 90 93 4f 01 sts 0x014F, r25
1510a: 80 93 4e 01 sts 0x014E, r24
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
break;
1510e: eb c2 rjmp .+1494 ; 0x156e6 <BearbeiteRxDaten+0x628>
case 't':// Motortest
if(AnzahlEmpfangsBytes > 20) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest));
15110: 80 91 f9 04 lds r24, 0x04F9
15114: 85 31 cpi r24, 0x15 ; 21
15116: 60 f0 brcs .+24 ; 0x15130 <BearbeiteRxDaten+0x72>
15118: e0 91 f7 04 lds r30, 0x04F7
1511c: f0 91 f8 04 lds r31, 0x04F8
15120: 80 e1 ldi r24, 0x10 ; 16
15122: a7 e6 ldi r26, 0x67 ; 103
15124: ba e0 ldi r27, 0x0A ; 10
15126: 01 90 ld r0, Z+
15128: 0d 92 st X+, r0
1512a: 8a 95 dec r24
1512c: e1 f7 brne .-8 ; 0x15126 <BearbeiteRxDaten+0x68>
1512e: 10 c0 rjmp .+32 ; 0x15150 <BearbeiteRxDaten+0x92>
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4);
15130: e0 91 f7 04 lds r30, 0x04F7
15134: f0 91 f8 04 lds r31, 0x04F8
15138: 80 81 ld r24, Z
1513a: 91 81 ldd r25, Z+1 ; 0x01
1513c: a2 81 ldd r26, Z+2 ; 0x02
1513e: b3 81 ldd r27, Z+3 ; 0x03
15140: 80 93 67 0a sts 0x0A67, r24
15144: 90 93 68 0a sts 0x0A68, r25
15148: a0 93 69 0a sts 0x0A69, r26
1514c: b0 93 6a 0a sts 0x0A6A, r27
PC_MotortestActive = 240;
15150: 80 ef ldi r24, 0xF0 ; 240
15152: 80 93 f5 04 sts 0x04F5, r24
//while(!UebertragungAbgeschlossen);
//SendOutData('T', MeineSlaveAdresse, 0);
PcZugriff = 255;
15156: 8f ef ldi r24, 0xFF ; 255
15158: 80 93 b5 02 sts 0x02B5, r24
break;
1515c: c4 c2 rjmp .+1416 ; 0x156e6 <BearbeiteRxDaten+0x628>
case 'n':// "Get Mixer
while(!UebertragungAbgeschlossen);
1515e: 80 91 b7 02 lds r24, 0x02B7
15162: 88 23 and r24, r24
15164: e1 f3 breq .-8 ; 0x1515e <BearbeiteRxDaten+0xa0>
SendOutData('N', FC_ADDRESS, 1, (unsigned char *) &Mixer, sizeof(Mixer) - 1);
15166: 1f 92 push r1
15168: 8d e4 ldi r24, 0x4D ; 77
1516a: 8f 93 push r24
1516c: 87 ec ldi r24, 0xC7 ; 199
1516e: 95 e0 ldi r25, 0x05 ; 5
15170: 9f 93 push r25
15172: 8f 93 push r24
15174: 81 e0 ldi r24, 0x01 ; 1
15176: 8f 93 push r24
15178: 8f 93 push r24
1517a: 8e e4 ldi r24, 0x4E ; 78
1517c: 8f 93 push r24
1517e: 63 de rcall .-826 ; 0x14e46 <SendOutData>
Debug("Mixer lesen");
15180: 83 e6 ldi r24, 0x63 ; 99
15182: 96 e1 ldi r25, 0x16 ; 22
15184: 9f 93 push r25
15186: 8f 93 push r24
15188: 88 e1 ldi r24, 0x18 ; 24
1518a: 93 e2 ldi r25, 0x23 ; 35
1518c: 9f 93 push r25
1518e: 8f 93 push r24
15190: e0 91 78 06 lds r30, 0x0678
15194: f0 91 79 06 lds r31, 0x0679
15198: 09 95 icall
1519a: 80 e0 ldi r24, 0x00 ; 0
1519c: 0e 94 2c 23 call 0x4658 ; 0x4658 <DebugSend>
break;
151a0: 0f b6 in r0, 0x3f ; 63
151a2: f8 94 cli
151a4: de bf out 0x3e, r29 ; 62
151a6: 0f be out 0x3f, r0 ; 63
151a8: cd bf out 0x3d, r28 ; 61
151aa: 9d c2 rjmp .+1338 ; 0x156e6 <BearbeiteRxDaten+0x628>
case 'm':// "Write Mixer
if(pRxData[0] == EEMIXER_REVISION)
151ac: e0 91 f7 04 lds r30, 0x04F7
151b0: f0 91 f8 04 lds r31, 0x04F8
151b4: 80 81 ld r24, Z
151b6: 81 30 cpi r24, 0x01 ; 1
151b8: 89 f4 brne .+34 ; 0x151dc <BearbeiteRxDaten+0x11e>
{
memcpy(&Mixer, (unsigned char *)pRxData, sizeof(Mixer) - 1);
151ba: 8d e4 ldi r24, 0x4D ; 77
151bc: a7 ec ldi r26, 0xC7 ; 199
151be: b5 e0 ldi r27, 0x05 ; 5
151c0: 01 90 ld r0, Z+
151c2: 0d 92 st X+, r0
151c4: 8a 95 dec r24
151c6: e1 f7 brne .-8 ; 0x151c0 <BearbeiteRxDaten+0x102>
MixerTable_WriteToEEProm();
151c8: 0e 94 ac 25 call 0x4b58 ; 0x4b58 <MixerTable_WriteToEEProm>
tempchar1 = 1;
151cc: 81 e0 ldi r24, 0x01 ; 1
151ce: 89 83 std Y+1, r24 ; 0x01
VersionInfo.HardwareError[1] &= ~FC_ERROR1_MIXER;
151d0: e3 e6 ldi r30, 0x63 ; 99
151d2: fa e0 ldi r31, 0x0A ; 10
151d4: 80 81 ld r24, Z
151d6: 8f 7e andi r24, 0xEF ; 239
151d8: 80 83 st Z, r24
151da: 01 c0 rjmp .+2 ; 0x151de <BearbeiteRxDaten+0x120>
}
else
{
tempchar1 = 0;
151dc: 19 82 std Y+1, r1 ; 0x01
}
while(!UebertragungAbgeschlossen);
151de: 80 91 b7 02 lds r24, 0x02B7
151e2: 88 23 and r24, r24
151e4: e1 f3 breq .-8 ; 0x151de <BearbeiteRxDaten+0x120>
SendOutData('M', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
151e6: 1f 92 push r1
151e8: 21 e0 ldi r18, 0x01 ; 1
151ea: 2f 93 push r18
151ec: ce 01 movw r24, r28
151ee: 01 96 adiw r24, 0x01 ; 1
151f0: 9f 93 push r25
151f2: 8f 93 push r24
151f4: 2f 93 push r18
151f6: 2f 93 push r18
151f8: 8d e4 ldi r24, 0x4D ; 77
151fa: 8f 93 push r24
151fc: 24 de rcall .-952 ; 0x14e46 <SendOutData>
break;
151fe: 0f b6 in r0, 0x3f ; 63
15200: f8 94 cli
15202: de bf out 0x3e, r29 ; 62
15204: 0f be out 0x3f, r0 ; 63
15206: cd bf out 0x3d, r28 ; 61
15208: 6e c2 rjmp .+1244 ; 0x156e6 <BearbeiteRxDaten+0x628>
case 'p': // get PPM Channels
GetPPMChannelAnforderung = 1;
1520a: 81 e0 ldi r24, 0x01 ; 1
1520c: 80 93 fe 04 sts 0x04FE, r24
PcZugriff = 255;
15210: 8f ef ldi r24, 0xFF ; 255
15212: 80 93 b5 02 sts 0x02B5, r24
break;
15216: 67 c2 rjmp .+1230 ; 0x156e6 <BearbeiteRxDaten+0x628>
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
if(!MotorenEin)
15218: 80 91 03 04 lds r24, 0x0403
1521c: 81 11 cpse r24, r1
1521e: 44 c0 rjmp .+136 ; 0x152a8 <BearbeiteRxDaten+0x1ea>
{
if((10 <= pRxData[0]) && (pRxData[0] < 20))
15220: e0 91 f7 04 lds r30, 0x04F7
15224: f0 91 f8 04 lds r31, 0x04F8
15228: 80 81 ld r24, Z
1522a: 96 ef ldi r25, 0xF6 ; 246
1522c: 98 0f add r25, r24
1522e: 9a 30 cpi r25, 0x0A ; 10
15230: 80 f4 brcc .+32 ; 0x15252 <BearbeiteRxDaten+0x194>
{
tempchar1 = pRxData[0] - 10;
if(tempchar1< 1) tempchar1 = 1; // limit to 1
15232: 91 11 cpse r25, r1
15234: 03 c0 rjmp .+6 ; 0x1523c <BearbeiteRxDaten+0x17e>
15236: 81 e0 ldi r24, 0x01 ; 1
15238: 89 83 std Y+1, r24 ; 0x01
1523a: 06 c0 rjmp .+12 ; 0x15248 <BearbeiteRxDaten+0x18a>
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
1523c: 96 30 cpi r25, 0x06 ; 6
1523e: 10 f4 brcc .+4 ; 0x15244 <BearbeiteRxDaten+0x186>
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
if(!MotorenEin)
{
if((10 <= pRxData[0]) && (pRxData[0] < 20))
{
tempchar1 = pRxData[0] - 10;
15240: 99 83 std Y+1, r25 ; 0x01
15242: 02 c0 rjmp .+4 ; 0x15248 <BearbeiteRxDaten+0x18a>
if(tempchar1< 1) tempchar1 = 1; // limit to 1
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
15244: 85 e0 ldi r24, 0x05 ; 5
15246: 89 83 std Y+1, r24 ; 0x01
SetDefaultParameter(tempchar1, 1);
15248: 61 e0 ldi r22, 0x01 ; 1
1524a: 89 81 ldd r24, Y+1 ; 0x01
1524c: 0e 94 78 26 call 0x4cf0 ; 0x4cf0 <SetDefaultParameter>
15250: 27 c0 rjmp .+78 ; 0x152a0 <BearbeiteRxDaten+0x1e2>
}
else if((20 <= pRxData[0]) && (pRxData[0] < 30))
15252: 9c ee ldi r25, 0xEC ; 236
15254: 98 0f add r25, r24
15256: 9a 30 cpi r25, 0x0A ; 10
15258: 80 f4 brcc .+32 ; 0x1527a <BearbeiteRxDaten+0x1bc>
{
tempchar1 = pRxData[0] - 20;
if(tempchar1< 1) tempchar1 = 1; // limit to 1
1525a: 91 11 cpse r25, r1
1525c: 03 c0 rjmp .+6 ; 0x15264 <BearbeiteRxDaten+0x1a6>
1525e: 81 e0 ldi r24, 0x01 ; 1
15260: 89 83 std Y+1, r24 ; 0x01
15262: 06 c0 rjmp .+12 ; 0x15270 <BearbeiteRxDaten+0x1b2>
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
15264: 96 30 cpi r25, 0x06 ; 6
15266: 10 f4 brcc .+4 ; 0x1526c <BearbeiteRxDaten+0x1ae>
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
SetDefaultParameter(tempchar1, 1);
}
else if((20 <= pRxData[0]) && (pRxData[0] < 30))
{
tempchar1 = pRxData[0] - 20;
15268: 99 83 std Y+1, r25 ; 0x01
1526a: 02 c0 rjmp .+4 ; 0x15270 <BearbeiteRxDaten+0x1b2>
if(tempchar1< 1) tempchar1 = 1; // limit to 1
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
1526c: 85 e0 ldi r24, 0x05 ; 5
1526e: 89 83 std Y+1, r24 ; 0x01
SetDefaultParameter(tempchar1, 0);
15270: 60 e0 ldi r22, 0x00 ; 0
15272: 89 81 ldd r24, Y+1 ; 0x01
15274: 0e 94 78 26 call 0x4cf0 ; 0x4cf0 <SetDefaultParameter>
15278: 13 c0 rjmp .+38 ; 0x152a0 <BearbeiteRxDaten+0x1e2>
}
else
{
tempchar1 = pRxData[0];
1527a: 89 83 std Y+1, r24 ; 0x01
if(tempchar1 == 0xFF)
1527c: 8f 3f cpi r24, 0xFF ; 255
1527e: 19 f4 brne .+6 ; 0x15286 <BearbeiteRxDaten+0x1c8>
{
tempchar1 = GetActiveParamSet();
15280: 0e 94 09 26 call 0x4c12 ; 0x4c12 <GetActiveParamSet>
15284: 89 83 std Y+1, r24 ; 0x01
}
if(tempchar1< 1) tempchar1 = 1; // limit to 1
15286: 89 81 ldd r24, Y+1 ; 0x01
15288: 81 11 cpse r24, r1
1528a: 03 c0 rjmp .+6 ; 0x15292 <BearbeiteRxDaten+0x1d4>
1528c: 81 e0 ldi r24, 0x01 ; 1
1528e: 89 83 std Y+1, r24 ; 0x01
15290: 04 c0 rjmp .+8 ; 0x1529a <BearbeiteRxDaten+0x1dc>
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
15292: 86 30 cpi r24, 0x06 ; 6
15294: 10 f0 brcs .+4 ; 0x1529a <BearbeiteRxDaten+0x1dc>
15296: 85 e0 ldi r24, 0x05 ; 5
15298: 89 83 std Y+1, r24 ; 0x01
// load requested parameter set
ParamSet_ReadFromEEProm(tempchar1);
1529a: 89 81 ldd r24, Y+1 ; 0x01
1529c: 0e 94 4e 25 call 0x4a9c ; 0x4a9c <ParamSet_ReadFromEEProm>
}
LipoDetection(0);
152a0: 80 e0 ldi r24, 0x00 ; 0
152a2: 0e 94 90 59 call 0xb320 ; 0xb320 <LipoDetection>
152a6: 03 c0 rjmp .+6 ; 0x152ae <BearbeiteRxDaten+0x1f0>
} else tempchar1 = GetActiveParamSet();
152a8: 0e 94 09 26 call 0x4c12 ; 0x4c12 <GetActiveParamSet>
152ac: 89 83 std Y+1, r24 ; 0x01
while(!UebertragungAbgeschlossen);
152ae: 80 91 b7 02 lds r24, 0x02B7
152b2: 88 23 and r24, r24
152b4: e1 f3 breq .-8 ; 0x152ae <BearbeiteRxDaten+0x1f0>
SendOutData('Q', FC_ADDRESS, 2, &tempchar1, sizeof(tempchar1), (unsigned char *) &EE_Parameter, sizeof(EE_Parameter) - 1);
152b6: 1f 92 push r1
152b8: 88 e8 ldi r24, 0x88 ; 136
152ba: 8f 93 push r24
152bc: 8e e3 ldi r24, 0x3E ; 62
152be: 95 e0 ldi r25, 0x05 ; 5
152c0: 9f 93 push r25
152c2: 8f 93 push r24
152c4: 1f 92 push r1
152c6: 21 e0 ldi r18, 0x01 ; 1
152c8: 2f 93 push r18
152ca: ce 01 movw r24, r28
152cc: 01 96 adiw r24, 0x01 ; 1
152ce: 9f 93 push r25
152d0: 8f 93 push r24
152d2: 82 e0 ldi r24, 0x02 ; 2
152d4: 8f 93 push r24
152d6: 2f 93 push r18
152d8: 81 e5 ldi r24, 0x51 ; 81
152da: 8f 93 push r24
152dc: b4 dd rcall .-1176 ; 0x14e46 <SendOutData>
Debug("Lese Setting %d", tempchar1);
152de: 89 81 ldd r24, Y+1 ; 0x01
152e0: 1f 92 push r1
152e2: 8f 93 push r24
152e4: 83 e5 ldi r24, 0x53 ; 83
152e6: 96 e1 ldi r25, 0x16 ; 22
152e8: 9f 93 push r25
152ea: 8f 93 push r24
152ec: 88 e1 ldi r24, 0x18 ; 24
152ee: 93 e2 ldi r25, 0x23 ; 35
152f0: 9f 93 push r25
152f2: 8f 93 push r24
152f4: e0 91 78 06 lds r30, 0x0678
152f8: f0 91 79 06 lds r31, 0x0679
152fc: 09 95 icall
152fe: 80 e0 ldi r24, 0x00 ; 0
15300: 0e 94 2c 23 call 0x4658 ; 0x4658 <DebugSend>
break;
15304: 0f b6 in r0, 0x3f ; 63
15306: f8 94 cli
15308: de bf out 0x3e, r29 ; 62
1530a: 0f be out 0x3f, r0 ; 63
1530c: cd bf out 0x3d, r28 ; 61
1530e: eb c1 rjmp .+982 ; 0x156e6 <BearbeiteRxDaten+0x628>
case 's': // Parametersatz speichern
if((1 <= pRxData[0]) && (pRxData[0] <= 5) && (pRxData[1] == EEPARAM_REVISION) && MotorenEin == 0) // check for setting to be in range
15310: 80 91 f7 04 lds r24, 0x04F7
15314: 90 91 f8 04 lds r25, 0x04F8
15318: fc 01 movw r30, r24
1531a: 20 81 ld r18, Z
1531c: 21 50 subi r18, 0x01 ; 1
1531e: 25 30 cpi r18, 0x05 ; 5
15320: 90 f5 brcc .+100 ; 0x15386 <BearbeiteRxDaten+0x2c8>
15322: 21 81 ldd r18, Z+1 ; 0x01
15324: 27 36 cpi r18, 0x67 ; 103
15326: 79 f5 brne .+94 ; 0x15386 <BearbeiteRxDaten+0x2c8>
15328: 20 91 03 04 lds r18, 0x0403
1532c: 21 11 cpse r18, r1
1532e: 2b c0 rjmp .+86 ; 0x15386 <BearbeiteRxDaten+0x2c8>
{
memcpy(&EE_Parameter, (uint8_t*)&pRxData[1], sizeof(EE_Parameter) - 1);
15330: 31 96 adiw r30, 0x01 ; 1
15332: 28 e8 ldi r18, 0x88 ; 136
15334: ae e3 ldi r26, 0x3E ; 62
15336: b5 e0 ldi r27, 0x05 ; 5
15338: 01 90 ld r0, Z+
1533a: 0d 92 st X+, r0
1533c: 2a 95 dec r18
1533e: e1 f7 brne .-8 ; 0x15338 <BearbeiteRxDaten+0x27a>
ParamSet_WriteToEEProm(pRxData[0]);
15340: fc 01 movw r30, r24
15342: 80 81 ld r24, Z
15344: 0e 94 26 26 call 0x4c4c ; 0x4c4c <ParamSet_WriteToEEProm>
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
15348: 20 91 7f 05 lds r18, 0x057F
1534c: 30 e0 ldi r19, 0x00 ; 0
1534e: a4 ec ldi r26, 0xC4 ; 196
15350: b9 e0 ldi r27, 0x09 ; 9
15352: 0e 94 b3 b1 call 0x16366 ; 0x16366 <__umulhisi3>
15356: 60 93 46 01 sts 0x0146, r22
1535a: 70 93 47 01 sts 0x0147, r23
1535e: 80 93 48 01 sts 0x0148, r24
15362: 90 93 49 01 sts 0x0149, r25
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
15366: 20 91 80 05 lds r18, 0x0580
1536a: 30 e0 ldi r19, 0x00 ; 0
1536c: fc d7 rcall .+4088 ; 0x16366 <__umulhisi3>
1536e: 60 93 42 01 sts 0x0142, r22
15372: 70 93 43 01 sts 0x0143, r23
15376: 80 93 44 01 sts 0x0144, r24
1537a: 90 93 45 01 sts 0x0145, r25
tempchar1 = GetActiveParamSet();
1537e: 0e 94 09 26 call 0x4c12 ; 0x4c12 <GetActiveParamSet>
15382: 89 83 std Y+1, r24 ; 0x01
15384: 01 c0 rjmp .+2 ; 0x15388 <BearbeiteRxDaten+0x2ca>
}
else
{
tempchar1 = 0; // mark in response an invlid setting
15386: 19 82 std Y+1, r1 ; 0x01
}
while(!UebertragungAbgeschlossen);
15388: 80 91 b7 02 lds r24, 0x02B7
1538c: 88 23 and r24, r24
1538e: e1 f3 breq .-8 ; 0x15388 <BearbeiteRxDaten+0x2ca>
SendOutData('S', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
15390: 1f 92 push r1
15392: 21 e0 ldi r18, 0x01 ; 1
15394: 2f 93 push r18
15396: ce 01 movw r24, r28
15398: 01 96 adiw r24, 0x01 ; 1
1539a: 9f 93 push r25
1539c: 8f 93 push r24
1539e: 2f 93 push r18
153a0: 2f 93 push r18
153a2: 83 e5 ldi r24, 0x53 ; 83
153a4: 8f 93 push r24
153a6: 4f dd rcall .-1378 ; 0x14e46 <SendOutData>
if(!MotorenEin)
153a8: 0f b6 in r0, 0x3f ; 63
153aa: f8 94 cli
153ac: de bf out 0x3e, r29 ; 62
153ae: 0f be out 0x3f, r0 ; 63
153b0: cd bf out 0x3d, r28 ; 61
153b2: 80 91 03 04 lds r24, 0x0403
153b6: 81 11 cpse r24, r1
153b8: 08 c0 rjmp .+16 ; 0x153ca <BearbeiteRxDaten+0x30c>
{
Piep(tempchar1,110);
153ba: 6e e6 ldi r22, 0x6E ; 110
153bc: 70 e0 ldi r23, 0x00 ; 0
153be: 89 81 ldd r24, Y+1 ; 0x01
153c0: 0e 94 ba 28 call 0x5174 ; 0x5174 <Piep>
LipoDetection(0);
153c4: 80 e0 ldi r24, 0x00 ; 0
153c6: 0e 94 90 59 call 0xb320 ; 0xb320 <LipoDetection>
}
LIBFC_ReceiverInit(EE_Parameter.Receiver);
153ca: 80 91 65 05 lds r24, 0x0565
153ce: 0e 94 68 18 call 0x30d0 ; 0x30d0 <LIBFC_ReceiverInit>
break;
153d2: 89 c1 rjmp .+786 ; 0x156e6 <BearbeiteRxDaten+0x628>
case 'f': // auf anderen Parametersatz umschalten
if(MotorenEin) break;
153d4: 80 91 03 04 lds r24, 0x0403
153d8: 81 11 cpse r24, r1
153da: 85 c1 rjmp .+778 ; 0x156e6 <BearbeiteRxDaten+0x628>
if((1 <= pRxData[0]) && (pRxData[0] <= 5)) ParamSet_ReadFromEEProm(pRxData[0]);
153dc: e0 91 f7 04 lds r30, 0x04F7
153e0: f0 91 f8 04 lds r31, 0x04F8
153e4: 80 81 ld r24, Z
153e6: 9f ef ldi r25, 0xFF ; 255
153e8: 98 0f add r25, r24
153ea: 95 30 cpi r25, 0x05 ; 5
153ec: 10 f4 brcc .+4 ; 0x153f2 <BearbeiteRxDaten+0x334>
153ee: 0e 94 4e 25 call 0x4a9c ; 0x4a9c <ParamSet_ReadFromEEProm>
tempchar1 = GetActiveParamSet();
153f2: 0e 94 09 26 call 0x4c12 ; 0x4c12 <GetActiveParamSet>
153f6: 89 83 std Y+1, r24 ; 0x01
while(!UebertragungAbgeschlossen);
153f8: 80 91 b7 02 lds r24, 0x02B7
153fc: 88 23 and r24, r24
153fe: e1 f3 breq .-8 ; 0x153f8 <BearbeiteRxDaten+0x33a>
SendOutData('F', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
15400: 1f 92 push r1
15402: 21 e0 ldi r18, 0x01 ; 1
15404: 2f 93 push r18
15406: ce 01 movw r24, r28
15408: 01 96 adiw r24, 0x01 ; 1
1540a: 9f 93 push r25
1540c: 8f 93 push r24
1540e: 2f 93 push r18
15410: 2f 93 push r18
15412: 86 e4 ldi r24, 0x46 ; 70
15414: 8f 93 push r24
15416: 17 dd rcall .-1490 ; 0x14e46 <SendOutData>
if(!MotorenEin)
15418: 0f b6 in r0, 0x3f ; 63
1541a: f8 94 cli
1541c: de bf out 0x3e, r29 ; 62
1541e: 0f be out 0x3f, r0 ; 63
15420: cd bf out 0x3d, r28 ; 61
15422: 80 91 03 04 lds r24, 0x0403
15426: 81 11 cpse r24, r1
15428: 08 c0 rjmp .+16 ; 0x1543a <BearbeiteRxDaten+0x37c>
{
Piep(tempchar1,110);
1542a: 6e e6 ldi r22, 0x6E ; 110
1542c: 70 e0 ldi r23, 0x00 ; 0
1542e: 89 81 ldd r24, Y+1 ; 0x01
15430: 0e 94 ba 28 call 0x5174 ; 0x5174 <Piep>
LipoDetection(0);
15434: 80 e0 ldi r24, 0x00 ; 0
15436: 0e 94 90 59 call 0xb320 ; 0xb320 <LipoDetection>
}
LIBFC_ReceiverInit(EE_Parameter.Receiver);
1543a: 80 91 65 05 lds r24, 0x0565
1543e: 0e 94 68 18 call 0x30d0 ; 0x30d0 <LIBFC_ReceiverInit>
break;
15442: 51 c1 rjmp .+674 ; 0x156e6 <BearbeiteRxDaten+0x628>
case 'y':// serial Potis
for(tempchar1 = 0; tempchar1 < 12; tempchar1++) PPM_in[SERIAL_POTI_START + tempchar1] = (signed char) pRxData[tempchar1];
15444: 19 82 std Y+1, r1 ; 0x01
15446: 40 91 f7 04 lds r20, 0x04F7
1544a: e4 2f mov r30, r20
1544c: f0 91 f8 04 lds r31, 0x04F8
15450: 81 e1 ldi r24, 0x11 ; 17
15452: 90 e0 ldi r25, 0x00 ; 0
15454: 21 91 ld r18, Z+
15456: 33 27 eor r19, r19
15458: 27 fd sbrc r18, 7
1545a: 30 95 com r19
1545c: dc 01 movw r26, r24
1545e: aa 0f add r26, r26
15460: bb 1f adc r27, r27
15462: af 5c subi r26, 0xCF ; 207
15464: b7 4f sbci r27, 0xF7 ; 247
15466: 11 96 adiw r26, 0x01 ; 1
15468: 3c 93 st X, r19
1546a: 2e 93 st -X, r18
1546c: 2e 2f mov r18, r30
1546e: 24 1b sub r18, r20
15470: 29 83 std Y+1, r18 ; 0x01
15472: 01 96 adiw r24, 0x01 ; 1
15474: 8d 31 cpi r24, 0x1D ; 29
15476: 91 05 cpc r25, r1
15478: 69 f7 brne .-38 ; 0x15454 <BearbeiteRxDaten+0x396>
1547a: 35 c1 rjmp .+618 ; 0x156e6 <BearbeiteRxDaten+0x628>
break;
case 'u': // request BL parameter
Debug("Reading BL %d", pRxData[0]);
1547c: e0 91 f7 04 lds r30, 0x04F7
15480: f0 91 f8 04 lds r31, 0x04F8
15484: 80 81 ld r24, Z
15486: 1f 92 push r1
15488: 8f 93 push r24
1548a: 85 e4 ldi r24, 0x45 ; 69
1548c: 96 e1 ldi r25, 0x16 ; 22
1548e: 9f 93 push r25
15490: 8f 93 push r24
15492: 88 e1 ldi r24, 0x18 ; 24
15494: 93 e2 ldi r25, 0x23 ; 35
15496: 9f 93 push r25
15498: 8f 93 push r24
1549a: e0 91 78 06 lds r30, 0x0678
1549e: f0 91 79 06 lds r31, 0x0679
154a2: 09 95 icall
154a4: 80 e0 ldi r24, 0x00 ; 0
154a6: 0e 94 2c 23 call 0x4658 ; 0x4658 <DebugSend>
// try to read BL configuration
tempchar2 = I2C_ReadBLConfig(pRxData[0]);
154aa: e0 91 f7 04 lds r30, 0x04F7
154ae: f0 91 f8 04 lds r31, 0x04F8
154b2: 80 81 ld r24, Z
154b4: aa da rcall .-2732 ; 0x14a0a <I2C_ReadBLConfig>
154b6: 8a 83 std Y+2, r24 ; 0x02
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1;
154b8: 0f 90 pop r0
154ba: 0f 90 pop r0
154bc: 0f 90 pop r0
154be: 0f 90 pop r0
154c0: 0f 90 pop r0
154c2: 0f 90 pop r0
154c4: 81 11 cpse r24, r1
154c6: 03 c0 rjmp .+6 ; 0x154ce <BearbeiteRxDaten+0x410>
154c8: 81 e0 ldi r24, 0x01 ; 1
154ca: 89 83 std Y+1, r24 ; 0x01
154cc: 01 c0 rjmp .+2 ; 0x154d0 <BearbeiteRxDaten+0x412>
else tempchar1 = 0;
154ce: 19 82 std Y+1, r1 ; 0x01
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent
154d0: 80 91 b7 02 lds r24, 0x02B7
154d4: 88 23 and r24, r24
154d6: e1 f3 breq .-8 ; 0x154d0 <BearbeiteRxDaten+0x412>
SendOutData('U', FC_ADDRESS, 4, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2), &pRxData[0], 1, &BLConfig, sizeof(BLConfig_t));
154d8: 1f 92 push r1
154da: 88 e0 ldi r24, 0x08 ; 8
154dc: 8f 93 push r24
154de: 8f e8 ldi r24, 0x8F ; 143
154e0: 99 e0 ldi r25, 0x09 ; 9
154e2: 9f 93 push r25
154e4: 8f 93 push r24
154e6: 1f 92 push r1
154e8: 21 e0 ldi r18, 0x01 ; 1
154ea: 2f 93 push r18
154ec: 80 91 f8 04 lds r24, 0x04F8
154f0: 8f 93 push r24
154f2: 80 91 f7 04 lds r24, 0x04F7
154f6: 8f 93 push r24
154f8: 1f 92 push r1
154fa: 2f 93 push r18
154fc: ce 01 movw r24, r28
154fe: 02 96 adiw r24, 0x02 ; 2
15500: 9f 93 push r25
15502: 8f 93 push r24
15504: 1f 92 push r1
15506: 2f 93 push r18
15508: 01 97 sbiw r24, 0x01 ; 1
1550a: 9f 93 push r25
1550c: 8f 93 push r24
1550e: 84 e0 ldi r24, 0x04 ; 4
15510: 8f 93 push r24
15512: 2f 93 push r18
15514: 85 e5 ldi r24, 0x55 ; 85
15516: 8f 93 push r24
15518: 96 dc rcall .-1748 ; 0x14e46 <SendOutData>
break;
1551a: 0f b6 in r0, 0x3f ; 63
1551c: f8 94 cli
1551e: de bf out 0x3e, r29 ; 62
15520: 0f be out 0x3f, r0 ; 63
15522: cd bf out 0x3d, r28 ; 61
15524: e0 c0 rjmp .+448 ; 0x156e6 <BearbeiteRxDaten+0x628>
case 'w': // write BL parameter
Debug("Writing BL %d", pRxData[0]);
15526: e0 91 f7 04 lds r30, 0x04F7
1552a: f0 91 f8 04 lds r31, 0x04F8
1552e: 80 81 ld r24, Z
15530: 1f 92 push r1
15532: 8f 93 push r24
15534: 87 e3 ldi r24, 0x37 ; 55
15536: 96 e1 ldi r25, 0x16 ; 22
15538: 9f 93 push r25
1553a: 8f 93 push r24
1553c: 88 e1 ldi r24, 0x18 ; 24
1553e: 93 e2 ldi r25, 0x23 ; 35
15540: 9f 93 push r25
15542: 8f 93 push r24
15544: e0 91 78 06 lds r30, 0x0678
15548: f0 91 79 06 lds r31, 0x0679
1554c: 09 95 icall
1554e: 80 e0 ldi r24, 0x00 ; 0
15550: 0e 94 2c 23 call 0x4658 ; 0x4658 <DebugSend>
if(RxDataLen >= 1+sizeof(BLConfig_t))
15554: 0f 90 pop r0
15556: 0f 90 pop r0
15558: 0f 90 pop r0
1555a: 0f 90 pop r0
1555c: 0f 90 pop r0
1555e: 0f 90 pop r0
15560: 80 91 f6 04 lds r24, 0x04F6
15564: 89 30 cpi r24, 0x09 ; 9
15566: 08 f4 brcc .+2 ; 0x1556a <BearbeiteRxDaten+0x4ac>
15568: be c0 rjmp .+380 ; 0x156e6 <BearbeiteRxDaten+0x628>
{
memcpy(&BLConfig, (uint8_t*)(&pRxData[1]), sizeof(BLConfig_t));
1556a: 80 91 f7 04 lds r24, 0x04F7
1556e: 90 91 f8 04 lds r25, 0x04F8
15572: 28 e0 ldi r18, 0x08 ; 8
15574: fc 01 movw r30, r24
15576: 31 96 adiw r30, 0x01 ; 1
15578: af e8 ldi r26, 0x8F ; 143
1557a: b9 e0 ldi r27, 0x09 ; 9
1557c: 01 90 ld r0, Z+
1557e: 0d 92 st X+, r0
15580: 2a 95 dec r18
15582: e1 f7 brne .-8 ; 0x1557c <BearbeiteRxDaten+0x4be>
tempchar2 = I2C_WriteBLConfig(pRxData[0]);
15584: fc 01 movw r30, r24
15586: 80 81 ld r24, Z
15588: 87 d9 rcall .-3314 ; 0x14898 <I2C_WriteBLConfig>
1558a: 8a 83 std Y+2, r24 ; 0x02
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1;
1558c: 81 11 cpse r24, r1
1558e: 03 c0 rjmp .+6 ; 0x15596 <BearbeiteRxDaten+0x4d8>
15590: 81 e0 ldi r24, 0x01 ; 1
15592: 89 83 std Y+1, r24 ; 0x01
15594: 01 c0 rjmp .+2 ; 0x15598 <BearbeiteRxDaten+0x4da>
else tempchar1 = 0; // indicate error
15596: 19 82 std Y+1, r1 ; 0x01
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent
15598: 80 91 b7 02 lds r24, 0x02B7
1559c: 88 23 and r24, r24
1559e: e1 f3 breq .-8 ; 0x15598 <BearbeiteRxDaten+0x4da>
SendOutData('W', FC_ADDRESS,2, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2));
155a0: 1f 92 push r1
155a2: 21 e0 ldi r18, 0x01 ; 1
155a4: 2f 93 push r18
155a6: ce 01 movw r24, r28
155a8: 02 96 adiw r24, 0x02 ; 2
155aa: 9f 93 push r25
155ac: 8f 93 push r24
155ae: 1f 92 push r1
155b0: 2f 93 push r18
155b2: 01 97 sbiw r24, 0x01 ; 1
155b4: 9f 93 push r25
155b6: 8f 93 push r24
155b8: 82 e0 ldi r24, 0x02 ; 2
155ba: 8f 93 push r24
155bc: 2f 93 push r18
155be: 87 e5 ldi r24, 0x57 ; 87
155c0: 8f 93 push r24
155c2: 41 dc rcall .-1918 ; 0x14e46 <SendOutData>
155c4: 0f b6 in r0, 0x3f ; 63
155c6: f8 94 cli
155c8: de bf out 0x3e, r29 ; 62
155ca: 0f be out 0x3f, r0 ; 63
155cc: cd bf out 0x3d, r28 ; 61
155ce: 8b c0 rjmp .+278 ; 0x156e6 <BearbeiteRxDaten+0x628>
}
break;
case 'j':
if(MotorenEin) break;
155d0: 80 91 03 04 lds r24, 0x0403
155d4: 81 11 cpse r24, r1
155d6: 87 c0 rjmp .+270 ; 0x156e6 <BearbeiteRxDaten+0x628>
tempchar1 = LIBFC_GetCPUType();
155d8: 0e 94 1f 18 call 0x303e ; 0x303e <LIBFC_GetCPUType>
155dc: 89 83 std Y+1, r24 ; 0x01
if((tempchar1 == CPU_ATMEGA644P) || (tempchar1 == CPU_ATMEGA1284P))
155de: 82 30 cpi r24, 0x02 ; 2
155e0: 19 f0 breq .+6 ; 0x155e8 <BearbeiteRxDaten+0x52a>
155e2: 84 30 cpi r24, 0x04 ; 4
155e4: 09 f0 breq .+2 ; 0x155e8 <BearbeiteRxDaten+0x52a>
155e6: 7f c0 rjmp .+254 ; 0x156e6 <BearbeiteRxDaten+0x628>
{
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 38400L) - 1);
cli();
155e8: f8 94 cli
// UART0 & UART1 disable RX and TX-Interrupt
UCSR0B &= ~((1 << RXCIE0)|(1 << TXCIE0));
155ea: a1 ec ldi r26, 0xC1 ; 193
155ec: b0 e0 ldi r27, 0x00 ; 0
155ee: 8c 91 ld r24, X
155f0: 8f 73 andi r24, 0x3F ; 63
155f2: 8c 93 st X, r24
UCSR1B &= ~((1 << RXCIE1)|(1 << TXCIE1));
155f4: e9 ec ldi r30, 0xC9 ; 201
155f6: f0 e0 ldi r31, 0x00 ; 0
155f8: 80 81 ld r24, Z
155fa: 8f 73 andi r24, 0x3F ; 63
155fc: 80 83 st Z, r24
// UART0 & UART1 disable receiver and transmitter
UCSR0B &= ~((1 << TXEN0) | (1 << RXEN0));
155fe: 8c 91 ld r24, X
15600: 87 7e andi r24, 0xE7 ; 231
15602: 8c 93 st X, r24
UCSR1B &= ~((1 << TXEN1) | (1 << RXEN1));
15604: 80 81 ld r24, Z
15606: 87 7e andi r24, 0xE7 ; 231
15608: 80 83 st Z, r24
// UART0 & UART1 flush receive buffer explicit
while ( UCSR1A & (1<<RXC1) ) UDR1;
1560a: 80 91 c8 00 lds r24, 0x00C8
1560e: 88 23 and r24, r24
15610: 44 f4 brge .+16 ; 0x15622 <BearbeiteRxDaten+0x564>
15612: ae ec ldi r26, 0xCE ; 206
15614: b0 e0 ldi r27, 0x00 ; 0
15616: e8 ec ldi r30, 0xC8 ; 200
15618: f0 e0 ldi r31, 0x00 ; 0
1561a: 8c 91 ld r24, X
1561c: 80 81 ld r24, Z
1561e: 88 23 and r24, r24
15620: e4 f3 brlt .-8 ; 0x1561a <BearbeiteRxDaten+0x55c>
while ( UCSR0A & (1<<RXC0) ) UDR0;
15622: 80 91 c0 00 lds r24, 0x00C0
15626: 88 23 and r24, r24
15628: 44 f4 brge .+16 ; 0x1563a <BearbeiteRxDaten+0x57c>
1562a: a6 ec ldi r26, 0xC6 ; 198
1562c: b0 e0 ldi r27, 0x00 ; 0
1562e: e0 ec ldi r30, 0xC0 ; 192
15630: f0 e0 ldi r31, 0x00 ; 0
15632: 8c 91 ld r24, X
15634: 80 81 ld r24, Z
15636: 88 23 and r24, r24
15638: e4 f3 brlt .-8 ; 0x15632 <BearbeiteRxDaten+0x574>
if(pRxData[0] == 1) ReceiverUpdateModeActive = 2;
1563a: e0 91 f7 04 lds r30, 0x04F7
1563e: f0 91 f8 04 lds r31, 0x04F8
15642: 80 81 ld r24, Z
15644: 81 30 cpi r24, 0x01 ; 1
15646: 21 f4 brne .+8 ; 0x15650 <BearbeiteRxDaten+0x592>
15648: 82 e0 ldi r24, 0x02 ; 2
1564a: 80 93 ec 04 sts 0x04EC, r24
1564e: 27 c0 rjmp .+78 ; 0x1569e <BearbeiteRxDaten+0x5e0>
else
{ // Jeti or HoTT update
//#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(pRxData[0] == 100) ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 19200L) - 1); // HoTT
15650: 84 36 cpi r24, 0x64 ; 100
15652: 11 f0 breq .+4 ; 0x15658 <BearbeiteRxDaten+0x59a>
case 'j':
if(MotorenEin) break;
tempchar1 = LIBFC_GetCPUType();
if((tempchar1 == CPU_ATMEGA644P) || (tempchar1 == CPU_ATMEGA1284P))
{
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 38400L) - 1);
15654: 80 e4 ldi r24, 0x40 ; 64
15656: 01 c0 rjmp .+2 ; 0x1565a <BearbeiteRxDaten+0x59c>
if(pRxData[0] == 1) ReceiverUpdateModeActive = 2;
else
{ // Jeti or HoTT update
//#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(pRxData[0] == 100) ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 19200L) - 1); // HoTT
15658: 81 e8 ldi r24, 0x81 ; 129
//#endif
ReceiverUpdateModeActive = 1;
1565a: 91 e0 ldi r25, 0x01 ; 1
1565c: 90 93 ec 04 sts 0x04EC, r25
// UART0 & UART1 set baudrate
UBRR1H = (uint8_t)(ubrr>>8);
15660: ad ec ldi r26, 0xCD ; 205
15662: b0 e0 ldi r27, 0x00 ; 0
15664: 1c 92 st X, r1
UBRR1L = (uint8_t)ubrr;
15666: ec ec ldi r30, 0xCC ; 204
15668: f0 e0 ldi r31, 0x00 ; 0
1566a: 80 83 st Z, r24
UBRR0H = UBRR1H;
1566c: 8c 91 ld r24, X
1566e: 80 93 c5 00 sts 0x00C5, r24
UBRR0L = UBRR1L;
15672: 80 81 ld r24, Z
15674: 80 93 c4 00 sts 0x00C4, r24
// UART1 no parity
UCSR1C &= ~(1 << UPM11);
15678: ea ec ldi r30, 0xCA ; 202
1567a: f0 e0 ldi r31, 0x00 ; 0
1567c: 80 81 ld r24, Z
1567e: 8f 7d andi r24, 0xDF ; 223
15680: 80 83 st Z, r24
UCSR1C &= ~(1 << UPM10);
15682: 80 81 ld r24, Z
15684: 8f 7e andi r24, 0xEF ; 239
15686: 80 83 st Z, r24
// UART1 8-bit
UCSR1B &= ~(1 << UCSZ12);
15688: a9 ec ldi r26, 0xC9 ; 201
1568a: b0 e0 ldi r27, 0x00 ; 0
1568c: 8c 91 ld r24, X
1568e: 8b 7f andi r24, 0xFB ; 251
15690: 8c 93 st X, r24
UCSR1C |= (1 << UCSZ11);
15692: 80 81 ld r24, Z
15694: 84 60 ori r24, 0x04 ; 4
15696: 80 83 st Z, r24
UCSR1C |= (1 << UCSZ10);
15698: 80 81 ld r24, Z
1569a: 82 60 ori r24, 0x02 ; 2
1569c: 80 83 st Z, r24
}
// UART0 & UART1 1 stop bit
UCSR1C &= ~(1 << USBS1);
1569e: ea ec ldi r30, 0xCA ; 202
156a0: f0 e0 ldi r31, 0x00 ; 0
156a2: 80 81 ld r24, Z
156a4: 87 7f andi r24, 0xF7 ; 247
156a6: 80 83 st Z, r24
UCSR0C &= ~(1 << USBS0);
156a8: e2 ec ldi r30, 0xC2 ; 194
156aa: f0 e0 ldi r31, 0x00 ; 0
156ac: 80 81 ld r24, Z
156ae: 87 7f andi r24, 0xF7 ; 247
156b0: 80 83 st Z, r24
// UART1 clear 9th bit
UCSR1B &= ~(1<<TXB81);
156b2: e9 ec ldi r30, 0xC9 ; 201
156b4: f0 e0 ldi r31, 0x00 ; 0
156b6: 80 81 ld r24, Z
156b8: 8e 7f andi r24, 0xFE ; 254
156ba: 80 83 st Z, r24
// enable receiver and transmitter for UART0 and UART1
UCSR0B |= (1 << TXEN0) | (1 << RXEN0);
156bc: a1 ec ldi r26, 0xC1 ; 193
156be: b0 e0 ldi r27, 0x00 ; 0
156c0: 8c 91 ld r24, X
156c2: 88 61 ori r24, 0x18 ; 24
156c4: 8c 93 st X, r24
UCSR1B |= (1 << TXEN1) | (1 << RXEN1);
156c6: 80 81 ld r24, Z
156c8: 88 61 ori r24, 0x18 ; 24
156ca: 80 83 st Z, r24
// enable RX-Interrupt for UART0 and UART1
UCSR0B |= (1 << RXCIE0);
156cc: 8c 91 ld r24, X
156ce: 80 68 ori r24, 0x80 ; 128
156d0: 8c 93 st X, r24
UCSR1B |= (1 << RXCIE1);
156d2: 80 81 ld r24, Z
156d4: 80 68 ori r24, 0x80 ; 128
156d6: 80 83 st Z, r24
// disable other Interrupts
TIMSK0 = 0;
156d8: 10 92 6e 00 sts 0x006E, r1
TIMSK1 = 0;
156dc: 10 92 6f 00 sts 0x006F, r1
TIMSK2 = 0;
156e0: 10 92 70 00 sts 0x0070, r1
sei();
156e4: 78 94 sei
} // case FC_ADDRESS:
default: // any Slave Address
switch(RxdBuffer[2])
156e6: 80 91 8e 0a lds r24, 0x0A8E
156ea: 90 e0 ldi r25, 0x00 ; 0
156ec: fc 01 movw r30, r24
156ee: eb 54 subi r30, 0x4B ; 75
156f0: f1 09 sbc r31, r1
156f2: ec 32 cpi r30, 0x2C ; 44
156f4: f1 05 cpc r31, r1
156f6: 08 f0 brcs .+2 ; 0x156fa <BearbeiteRxDaten+0x63c>
156f8: 2d c1 rjmp .+602 ; 0x15954 <BearbeiteRxDaten+0x896>
156fa: ea 51 subi r30, 0x1A ; 26
156fc: ff 4f sbci r31, 0xFF ; 255
156fe: 27 c6 rjmp .+3150 ; 0x1634e <__tablejump2__>
//DebugOut.Analog[18] = tempchar1;
break;
#endif
// 't' comand placed here only for compatibility to BL
case 't':// Motortest
if(AnzahlEmpfangsBytes >= sizeof(MotorTest)) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest));
15700: 80 91 f9 04 lds r24, 0x04F9
15704: 80 31 cpi r24, 0x10 ; 16
15706: 60 f0 brcs .+24 ; 0x15720 <BearbeiteRxDaten+0x662>
15708: e0 91 f7 04 lds r30, 0x04F7
1570c: f0 91 f8 04 lds r31, 0x04F8
15710: 80 e1 ldi r24, 0x10 ; 16
15712: a7 e6 ldi r26, 0x67 ; 103
15714: ba e0 ldi r27, 0x0A ; 10
15716: 01 90 ld r0, Z+
15718: 0d 92 st X+, r0
1571a: 8a 95 dec r24
1571c: e1 f7 brne .-8 ; 0x15716 <BearbeiteRxDaten+0x658>
1571e: 10 c0 rjmp .+32 ; 0x15740 <BearbeiteRxDaten+0x682>
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4);
15720: e0 91 f7 04 lds r30, 0x04F7
15724: f0 91 f8 04 lds r31, 0x04F8
15728: 80 81 ld r24, Z
1572a: 91 81 ldd r25, Z+1 ; 0x01
1572c: a2 81 ldd r26, Z+2 ; 0x02
1572e: b3 81 ldd r27, Z+3 ; 0x03
15730: 80 93 67 0a sts 0x0A67, r24
15734: 90 93 68 0a sts 0x0A68, r25
15738: a0 93 69 0a sts 0x0A69, r26
1573c: b0 93 6a 0a sts 0x0A6A, r27
while(!UebertragungAbgeschlossen);
15740: 80 91 b7 02 lds r24, 0x02B7
15744: 88 23 and r24, r24
15746: e1 f3 breq .-8 ; 0x15740 <BearbeiteRxDaten+0x682>
SendOutData('T', MeineSlaveAdresse, 0);
15748: 1f 92 push r1
1574a: 80 91 b4 02 lds r24, 0x02B4
1574e: 8f 93 push r24
15750: 84 e5 ldi r24, 0x54 ; 84
15752: 8f 93 push r24
15754: 78 db rcall .-2320 ; 0x14e46 <SendOutData>
PC_MotortestActive = 250;
15756: 8a ef ldi r24, 0xFA ; 250
15758: 80 93 f5 04 sts 0x04F5, r24
PcZugriff = 255;
1575c: 8f ef ldi r24, 0xFF ; 255
1575e: 80 93 b5 02 sts 0x02B5, r24
AboTimeOut = SetDelay(ABO_TIMEOUT);
15762: 80 ea ldi r24, 0xA0 ; 160
15764: 9f e0 ldi r25, 0x0F ; 15
15766: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
1576a: 90 93 ee 04 sts 0x04EE, r25
1576e: 80 93 ed 04 sts 0x04ED, r24
break;
15772: 0f 90 pop r0
15774: 0f 90 pop r0
15776: 0f 90 pop r0
15778: ed c0 rjmp .+474 ; 0x15954 <BearbeiteRxDaten+0x896>
// 'K' comand placed here only for compatibility to old MK3MAG software, that does not send the right Slave Address
case 'K':// Kompasswert
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue));
1577a: e0 91 f7 04 lds r30, 0x04F7
1577e: f0 91 f8 04 lds r31, 0x04F8
15782: 80 81 ld r24, Z
15784: 91 81 ldd r25, Z+1 ; 0x01
15786: 90 93 4f 01 sts 0x014F, r25
1578a: 80 93 4e 01 sts 0x014E, r24
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
break;
1578e: e2 c0 rjmp .+452 ; 0x15954 <BearbeiteRxDaten+0x896>
case 'a':// Texte der Analogwerte
DebugTextAnforderung = pRxData[0];
15790: e0 91 f7 04 lds r30, 0x04F7
15794: f0 91 f8 04 lds r31, 0x04F8
15798: 80 81 ld r24, Z
if (DebugTextAnforderung > 31) DebugTextAnforderung = 31;
1579a: 80 32 cpi r24, 0x20 ; 32
1579c: 18 f4 brcc .+6 ; 0x157a4 <BearbeiteRxDaten+0x6e6>
case 'K':// Kompasswert
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue));
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
break;
case 'a':// Texte der Analogwerte
DebugTextAnforderung = pRxData[0];
1579e: 80 93 b6 02 sts 0x02B6, r24
157a2: 03 c0 rjmp .+6 ; 0x157aa <BearbeiteRxDaten+0x6ec>
if (DebugTextAnforderung > 31) DebugTextAnforderung = 31;
157a4: 8f e1 ldi r24, 0x1F ; 31
157a6: 80 93 b6 02 sts 0x02B6, r24
PcZugriff = 255;
157aa: 8f ef ldi r24, 0xFF ; 255
157ac: 80 93 b5 02 sts 0x02B5, r24
break;
157b0: d1 c0 rjmp .+418 ; 0x15954 <BearbeiteRxDaten+0x896>
case 'b':
memcpy((unsigned char *)&ExternControl, (unsigned char *)pRxData, sizeof(ExternControl));
157b2: e0 91 f7 04 lds r30, 0x04F7
157b6: f0 91 f8 04 lds r31, 0x04F8
157ba: 8b e0 ldi r24, 0x0B ; 11
157bc: af e7 ldi r26, 0x7F ; 127
157be: ba e0 ldi r27, 0x0A ; 10
157c0: 01 90 ld r0, Z+
157c2: 0d 92 st X+, r0
157c4: 8a 95 dec r24
157c6: e1 f7 brne .-8 ; 0x157c0 <BearbeiteRxDaten+0x702>
ConfirmFrame = ExternControl.Frame;
157c8: 80 91 88 0a lds r24, 0x0A88
157cc: 80 93 88 0c sts 0x0C88, r24
PcZugriff = 255;
157d0: 8f ef ldi r24, 0xFF ; 255
157d2: 80 93 b5 02 sts 0x02B5, r24
break;
157d6: be c0 rjmp .+380 ; 0x15954 <BearbeiteRxDaten+0x896>
case 'c': // Poll the 3D-Data
if(!Intervall3D) { if(pRxData[0]) Timer3D = SetDelay(pRxData[0] * 10);}
157d8: 80 91 f1 04 lds r24, 0x04F1
157dc: 90 91 f2 04 lds r25, 0x04F2
157e0: 89 2b or r24, r25
157e2: c9 f4 brne .+50 ; 0x15816 <BearbeiteRxDaten+0x758>
157e4: e0 91 f7 04 lds r30, 0x04F7
157e8: f0 91 f8 04 lds r31, 0x04F8
157ec: 20 81 ld r18, Z
157ee: 22 23 and r18, r18
157f0: 91 f0 breq .+36 ; 0x15816 <BearbeiteRxDaten+0x758>
157f2: 30 e0 ldi r19, 0x00 ; 0
157f4: c9 01 movw r24, r18
157f6: 88 0f add r24, r24
157f8: 99 1f adc r25, r25
157fa: 22 0f add r18, r18
157fc: 33 1f adc r19, r19
157fe: 22 0f add r18, r18
15800: 33 1f adc r19, r19
15802: 22 0f add r18, r18
15804: 33 1f adc r19, r19
15806: 82 0f add r24, r18
15808: 93 1f adc r25, r19
1580a: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
1580e: 90 93 5a 0a sts 0x0A5A, r25
15812: 80 93 59 0a sts 0x0A59, r24
Intervall3D = pRxData[0] * 10;
15816: e0 91 f7 04 lds r30, 0x04F7
1581a: f0 91 f8 04 lds r31, 0x04F8
1581e: 80 81 ld r24, Z
15820: 90 e0 ldi r25, 0x00 ; 0
15822: 9c 01 movw r18, r24
15824: 22 0f add r18, r18
15826: 33 1f adc r19, r19
15828: 88 0f add r24, r24
1582a: 99 1f adc r25, r25
1582c: 88 0f add r24, r24
1582e: 99 1f adc r25, r25
15830: 88 0f add r24, r24
15832: 99 1f adc r25, r25
15834: 82 0f add r24, r18
15836: 93 1f adc r25, r19
15838: 90 93 f2 04 sts 0x04F2, r25
1583c: 80 93 f1 04 sts 0x04F1, r24
AboTimeOut = SetDelay(ABO_TIMEOUT);
15840: 80 ea ldi r24, 0xA0 ; 160
15842: 9f e0 ldi r25, 0x0F ; 15
15844: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
15848: 90 93 ee 04 sts 0x04EE, r25
1584c: 80 93 ed 04 sts 0x04ED, r24
break;
15850: 81 c0 rjmp .+258 ; 0x15954 <BearbeiteRxDaten+0x896>
case 'd': // Poll the debug data
PcZugriff = 255;
15852: 8f ef ldi r24, 0xFF ; 255
15854: 80 93 b5 02 sts 0x02B5, r24
DebugDataIntervall = (unsigned int)pRxData[0] * 10;
15858: e0 91 f7 04 lds r30, 0x04F7
1585c: f0 91 f8 04 lds r31, 0x04F8
15860: 20 81 ld r18, Z
15862: 30 e0 ldi r19, 0x00 ; 0
15864: c9 01 movw r24, r18
15866: 88 0f add r24, r24
15868: 99 1f adc r25, r25
1586a: 22 0f add r18, r18
1586c: 33 1f adc r19, r19
1586e: 22 0f add r18, r18
15870: 33 1f adc r19, r19
15872: 22 0f add r18, r18
15874: 33 1f adc r19, r19
15876: 82 0f add r24, r18
15878: 93 1f adc r25, r19
1587a: 90 93 f4 04 sts 0x04F4, r25
1587e: 80 93 f3 04 sts 0x04F3, r24
if(DebugDataIntervall > 0) DebugDataAnforderung = 1;
15882: 89 2b or r24, r25
15884: 19 f0 breq .+6 ; 0x1588c <BearbeiteRxDaten+0x7ce>
15886: 81 e0 ldi r24, 0x01 ; 1
15888: 80 93 00 05 sts 0x0500, r24
AboTimeOut = SetDelay(ABO_TIMEOUT);
1588c: 80 ea ldi r24, 0xA0 ; 160
1588e: 9f e0 ldi r25, 0x0F ; 15
15890: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
15894: 90 93 ee 04 sts 0x04EE, r25
15898: 80 93 ed 04 sts 0x04ED, r24
break;
1589c: 5b c0 rjmp .+182 ; 0x15954 <BearbeiteRxDaten+0x896>
case 'h':// x-1 Displayzeilen
PcZugriff = 255;
1589e: 8f ef ldi r24, 0xFF ; 255
158a0: 80 93 b5 02 sts 0x02B5, r24
if((pRxData[0] & 0x80) == 0x00) // old format
158a4: e0 91 f7 04 lds r30, 0x04F7
158a8: f0 91 f8 04 lds r31, 0x04F8
158ac: 80 81 ld r24, Z
158ae: 88 23 and r24, r24
158b0: 44 f0 brlt .+16 ; 0x158c2 <BearbeiteRxDaten+0x804>
{
DisplayLine = 2;
158b2: 82 e0 ldi r24, 0x02 ; 2
158b4: 80 93 fd 04 sts 0x04FD, r24
Display_Interval = 0;
158b8: 10 92 f0 04 sts 0x04F0, r1
158bc: 10 92 ef 04 sts 0x04EF, r1
158c0: 22 c0 rjmp .+68 ; 0x15906 <BearbeiteRxDaten+0x848>
}
else // new format
{
RemoteKeys |= ~pRxData[0];
158c2: 80 95 com r24
158c4: 90 91 a2 04 lds r25, 0x04A2
158c8: 89 2b or r24, r25
158ca: 80 93 a2 04 sts 0x04A2, r24
Display_Interval = (unsigned int)pRxData[1] * 10;
158ce: 81 81 ldd r24, Z+1 ; 0x01
158d0: 90 e0 ldi r25, 0x00 ; 0
158d2: 9c 01 movw r18, r24
158d4: 22 0f add r18, r18
158d6: 33 1f adc r19, r19
158d8: 88 0f add r24, r24
158da: 99 1f adc r25, r25
158dc: 88 0f add r24, r24
158de: 99 1f adc r25, r25
158e0: 88 0f add r24, r24
158e2: 99 1f adc r25, r25
158e4: 82 0f add r24, r18
158e6: 93 1f adc r25, r19
158e8: 90 93 f0 04 sts 0x04F0, r25
158ec: 80 93 ef 04 sts 0x04EF, r24
DisplayLine = 4;
158f0: 84 e0 ldi r24, 0x04 ; 4
158f2: 80 93 fd 04 sts 0x04FD, r24
AboTimeOut = SetDelay(ABO_TIMEOUT);
158f6: 80 ea ldi r24, 0xA0 ; 160
158f8: 9f e0 ldi r25, 0x0F ; 15
158fa: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
158fe: 90 93 ee 04 sts 0x04EE, r25
15902: 80 93 ed 04 sts 0x04ED, r24
}
DebugDisplayAnforderung = 1;
15906: 81 e0 ldi r24, 0x01 ; 1
15908: 80 93 01 05 sts 0x0501, r24
break;
1590c: 23 c0 rjmp .+70 ; 0x15954 <BearbeiteRxDaten+0x896>
case 'l':// x-1 Displayzeilen
PcZugriff = 255;
1590e: 8f ef ldi r24, 0xFF ; 255
15910: 80 93 b5 02 sts 0x02B5, r24
MenuePunkt = pRxData[0];
15914: e0 91 f7 04 lds r30, 0x04F7
15918: f0 91 f8 04 lds r31, 0x04F8
1591c: 80 81 ld r24, Z
1591e: 80 93 a3 04 sts 0x04A3, r24
DebugDisplayAnforderung1 = 1;
15922: 81 e0 ldi r24, 0x01 ; 1
15924: 80 93 02 05 sts 0x0502, r24
break;
15928: 15 c0 rjmp .+42 ; 0x15954 <BearbeiteRxDaten+0x896>
case 'v': // Version-Anforderung und Ausbaustufe
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(RxDataLen > 0 && pRxData[0] == 2) GetVersionAnforderung = 2;
1592a: 80 91 f6 04 lds r24, 0x04F6
1592e: 88 23 and r24, r24
15930: 51 f0 breq .+20 ; 0x15946 <BearbeiteRxDaten+0x888>
15932: e0 91 f7 04 lds r30, 0x04F7
15936: f0 91 f8 04 lds r31, 0x04F8
1593a: 80 81 ld r24, Z
1593c: 82 30 cpi r24, 0x02 ; 2
1593e: 19 f4 brne .+6 ; 0x15946 <BearbeiteRxDaten+0x888>
15940: 80 93 ff 04 sts 0x04FF, r24
15944: 07 c0 rjmp .+14 ; 0x15954 <BearbeiteRxDaten+0x896>
else
#endif
GetVersionAnforderung = 1;
15946: 81 e0 ldi r24, 0x01 ; 1
15948: 80 93 ff 04 sts 0x04FF, r24
1594c: 03 c0 rjmp .+6 ; 0x15954 <BearbeiteRxDaten+0x896>
break;
case 'g'://
GetExternalControl = 1;
1594e: 81 e0 ldi r24, 0x01 ; 1
15950: 80 93 03 05 sts 0x0503, r24
//unsupported command received
break;
}
break; // default:
}
NeuerDatensatzEmpfangen = 0;
15954: 10 92 fb 04 sts 0x04FB, r1
pRxData = 0;
15958: 10 92 f8 04 sts 0x04F8, r1
1595c: 10 92 f7 04 sts 0x04F7, r1
RxDataLen = 0;
15960: 10 92 f6 04 sts 0x04F6, r1
}
15964: 0f 90 pop r0
15966: 0f 90 pop r0
15968: df 91 pop r29
1596a: cf 91 pop r28
1596c: 08 95 ret
0001596e <uart_putchar>:
//Routine für die Serielle Ausgabe
void uart_putchar (char c)
//############################################################################
{
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(UCSR0A, UDRE0);
1596e: e0 ec ldi r30, 0xC0 ; 192
15970: f0 e0 ldi r31, 0x00 ; 0
15972: 90 81 ld r25, Z
15974: 95 ff sbrs r25, 5
15976: fd cf rjmp .-6 ; 0x15972 <uart_putchar+0x4>
//Ausgabe des Zeichens
UDR0 = c;
15978: 80 93 c6 00 sts 0x00C6, r24
1597c: 08 95 ret
0001597e <UART_Init>:
//############################################################################
{
unsigned int ubrr = (unsigned int) ((unsigned long) F_CPU/(8 * USART0_BAUD) - 1);
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
UCSR0B = (1 << TXEN0) | (1 << RXEN0);
1597e: e1 ec ldi r30, 0xC1 ; 193
15980: f0 e0 ldi r31, 0x00 ; 0
15982: 88 e1 ldi r24, 0x18 ; 24
15984: 80 83 st Z, r24
// UART Double Speed (U2X)
UCSR0A |= (1 << U2X0);
15986: a0 ec ldi r26, 0xC0 ; 192
15988: b0 e0 ldi r27, 0x00 ; 0
1598a: 8c 91 ld r24, X
1598c: 82 60 ori r24, 0x02 ; 2
1598e: 8c 93 st X, r24
// RX-Interrupt Freigabe
UCSR0B |= (1 << RXCIE0);
15990: 80 81 ld r24, Z
15992: 80 68 ori r24, 0x80 ; 128
15994: 80 83 st Z, r24
// TX-Interrupt Freigabe
UCSR0B |= (1 << TXCIE0);
15996: 80 81 ld r24, Z
15998: 80 64 ori r24, 0x40 ; 64
1599a: 80 83 st Z, r24
// USART0 Baud Rate Register
// set clock divider
UBRR0H = (uint8_t)(ubrr >> 8);
1599c: 10 92 c5 00 sts 0x00C5, r1
UBRR0L = (uint8_t)ubrr;
159a0: 8a e2 ldi r24, 0x2A ; 42
159a2: 80 93 c4 00 sts 0x00C4, r24
Debug_Timer = SetDelay(DebugDataIntervall);
159a6: 80 91 f3 04 lds r24, 0x04F3
159aa: 90 91 f4 04 lds r25, 0x04F4
159ae: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
159b2: 90 93 5c 0a sts 0x0A5C, r25
159b6: 80 93 5b 0a sts 0x0A5B, r24
Kompass_Timer = SetDelay(220);
159ba: 8c ed ldi r24, 0xDC ; 220
159bc: 90 e0 ldi r25, 0x00 ; 0
159be: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
159c2: 90 93 8b 0a sts 0x0A8B, r25
159c6: 80 93 8a 0a sts 0x0A8A, r24
VersionInfo.SWMajor = VERSION_MAJOR;
159ca: 82 e0 ldi r24, 0x02 ; 2
159cc: 80 93 5d 0a sts 0x0A5D, r24
VersionInfo.SWMinor = VERSION_MINOR;
159d0: 88 e0 ldi r24, 0x08 ; 8
159d2: 80 93 5e 0a sts 0x0A5E, r24
VersionInfo.SWPatch = VERSION_PATCH;
159d6: 10 92 61 0a sts 0x0A61, r1
VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR;
159da: 8b e0 ldi r24, 0x0B ; 11
159dc: 80 93 5f 0a sts 0x0A5F, r24
VersionInfo.reserved1 = 0;
159e0: 10 92 60 0a sts 0x0A60, r1
VersionInfo.BL_Firmware = 255;
159e4: 8f ef ldi r24, 0xFF ; 255
159e6: 80 93 65 0a sts 0x0A65, r24
VersionInfo.HWMajor = PlatinenVersion;
159ea: 80 91 54 01 lds r24, 0x0154
159ee: 80 93 64 0a sts 0x0A64, r24
pRxData = 0;
159f2: 10 92 f8 04 sts 0x04F8, r1
159f6: 10 92 f7 04 sts 0x04F7, r1
RxDataLen = 0;
159fa: 10 92 f6 04 sts 0x04F6, r1
159fe: 08 95 ret
00015a00 <DatenUebertragung>:
}
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
15a00: cf 92 push r12
15a02: df 92 push r13
15a04: ef 92 push r14
15a06: ff 92 push r15
15a08: 0f 93 push r16
15a0a: 1f 93 push r17
15a0c: cf 93 push r28
15a0e: df 93 push r29
15a10: cd b7 in r28, 0x3d ; 61
15a12: de b7 in r29, 0x3e ; 62
15a14: 60 97 sbiw r28, 0x10 ; 16
15a16: 0f b6 in r0, 0x3f ; 63
15a18: f8 94 cli
15a1a: de bf out 0x3e, r29 ; 62
15a1c: 0f be out 0x3f, r0 ; 63
15a1e: cd bf out 0x3d, r28 ; 61
if(!UebertragungAbgeschlossen) return;
15a20: 80 91 b7 02 lds r24, 0x02B7
15a24: 88 23 and r24, r24
15a26: 09 f4 brne .+2 ; 0x15a2a <DatenUebertragung+0x2a>
15a28: e2 c2 rjmp .+1476 ; 0x15fee <DatenUebertragung+0x5ee>
if(CheckDelay(AboTimeOut))
15a2a: 80 91 ed 04 lds r24, 0x04ED
15a2e: 90 91 ee 04 lds r25, 0x04EE
15a32: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
15a36: 88 23 and r24, r24
15a38: 61 f0 breq .+24 ; 0x15a52 <DatenUebertragung+0x52>
{
Display_Interval = 0;
15a3a: 10 92 f0 04 sts 0x04F0, r1
15a3e: 10 92 ef 04 sts 0x04EF, r1
DebugDataIntervall = 0;
15a42: 10 92 f4 04 sts 0x04F4, r1
15a46: 10 92 f3 04 sts 0x04F3, r1
Intervall3D = 0;
15a4a: 10 92 f2 04 sts 0x04F2, r1
15a4e: 10 92 f1 04 sts 0x04F1, r1
}
if(((Display_Interval>0 && CheckDelay(Display_Timer)) || DebugDisplayAnforderung) && UebertragungAbgeschlossen)
15a52: 80 91 ef 04 lds r24, 0x04EF
15a56: 90 91 f0 04 lds r25, 0x04F0
15a5a: 89 2b or r24, r25
15a5c: 41 f0 breq .+16 ; 0x15a6e <DatenUebertragung+0x6e>
15a5e: 80 91 68 0b lds r24, 0x0B68
15a62: 90 91 69 0b lds r25, 0x0B69
15a66: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
15a6a: 81 11 cpse r24, r1
15a6c: 05 c0 rjmp .+10 ; 0x15a78 <DatenUebertragung+0x78>
15a6e: 80 91 01 05 lds r24, 0x0501
15a72: 88 23 and r24, r24
15a74: 09 f4 brne .+2 ; 0x15a78 <DatenUebertragung+0x78>
15a76: 5c c0 rjmp .+184 ; 0x15b30 <DatenUebertragung+0x130>
15a78: 80 91 b7 02 lds r24, 0x02B7
15a7c: 88 23 and r24, r24
15a7e: 09 f4 brne .+2 ; 0x15a82 <DatenUebertragung+0x82>
15a80: 57 c0 rjmp .+174 ; 0x15b30 <DatenUebertragung+0x130>
{
if(DisplayLine > 3)// new format
15a82: 80 91 fd 04 lds r24, 0x04FD
15a86: 84 30 cpi r24, 0x04 ; 4
15a88: a8 f0 brcs .+42 ; 0x15ab4 <DatenUebertragung+0xb4>
{
Menu();
15a8a: 0e 94 27 87 call 0x10e4e ; 0x10e4e <Menu>
SendOutData('H', FC_ADDRESS, 1, (uint8_t *)DisplayBuff, 80);
15a8e: 1f 92 push r1
15a90: 80 e5 ldi r24, 0x50 ; 80
15a92: 8f 93 push r24
15a94: 80 ee ldi r24, 0xE0 ; 224
15a96: 97 e0 ldi r25, 0x07 ; 7
15a98: 9f 93 push r25
15a9a: 8f 93 push r24
15a9c: 81 e0 ldi r24, 0x01 ; 1
15a9e: 8f 93 push r24
15aa0: 8f 93 push r24
15aa2: 88 e4 ldi r24, 0x48 ; 72
15aa4: 8f 93 push r24
15aa6: cf d9 rcall .-3170 ; 0x14e46 <SendOutData>
15aa8: 0f b6 in r0, 0x3f ; 63
15aaa: f8 94 cli
15aac: de bf out 0x3e, r29 ; 62
15aae: 0f be out 0x3f, r0 ; 63
15ab0: cd bf out 0x3d, r28 ; 61
15ab2: 32 c0 rjmp .+100 ; 0x15b18 <DatenUebertragung+0x118>
}
else // old format
{
LCD_printfxy(0,0,"!!! INCOMPATIBLE !!!");
15ab4: 10 92 a4 04 sts 0x04A4, r1
15ab8: 82 e2 ldi r24, 0x22 ; 34
15aba: 96 e1 ldi r25, 0x16 ; 22
15abc: 9f 93 push r25
15abe: 8f 93 push r24
15ac0: 80 e1 ldi r24, 0x10 ; 16
15ac2: 97 e8 ldi r25, 0x87 ; 135
15ac4: 9f 93 push r25
15ac6: 8f 93 push r24
15ac8: e0 91 78 06 lds r30, 0x0678
15acc: f0 91 79 06 lds r31, 0x0679
15ad0: 09 95 icall
SendOutData('H', FC_ADDRESS, 2, &DisplayLine, sizeof(DisplayLine), (uint8_t *)DisplayBuff, 20);
15ad2: 1f 92 push r1
15ad4: 84 e1 ldi r24, 0x14 ; 20
15ad6: 8f 93 push r24
15ad8: 80 ee ldi r24, 0xE0 ; 224
15ada: 97 e0 ldi r25, 0x07 ; 7
15adc: 9f 93 push r25
15ade: 8f 93 push r24
15ae0: 1f 92 push r1
15ae2: 21 e0 ldi r18, 0x01 ; 1
15ae4: 2f 93 push r18
15ae6: 8d ef ldi r24, 0xFD ; 253
15ae8: 94 e0 ldi r25, 0x04 ; 4
15aea: 9f 93 push r25
15aec: 8f 93 push r24
15aee: 82 e0 ldi r24, 0x02 ; 2
15af0: 8f 93 push r24
15af2: 2f 93 push r18
15af4: 88 e4 ldi r24, 0x48 ; 72
15af6: 8f 93 push r24
15af8: a6 d9 rcall .-3252 ; 0x14e46 <SendOutData>
if(DisplayLine++ > 3) DisplayLine = 0;
15afa: 80 91 fd 04 lds r24, 0x04FD
15afe: 0f b6 in r0, 0x3f ; 63
15b00: f8 94 cli
15b02: de bf out 0x3e, r29 ; 62
15b04: 0f be out 0x3f, r0 ; 63
15b06: cd bf out 0x3d, r28 ; 61
15b08: 84 30 cpi r24, 0x04 ; 4
15b0a: 20 f4 brcc .+8 ; 0x15b14 <DatenUebertragung+0x114>
15b0c: 8f 5f subi r24, 0xFF ; 255
15b0e: 80 93 fd 04 sts 0x04FD, r24
15b12: 02 c0 rjmp .+4 ; 0x15b18 <DatenUebertragung+0x118>
15b14: 10 92 fd 04 sts 0x04FD, r1
}
Display_Timer = SetDelay(Display_Interval);
15b18: 80 91 ef 04 lds r24, 0x04EF
15b1c: 90 91 f0 04 lds r25, 0x04F0
15b20: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
15b24: 90 93 69 0b sts 0x0B69, r25
15b28: 80 93 68 0b sts 0x0B68, r24
DebugDisplayAnforderung = 0;
15b2c: 10 92 01 05 sts 0x0501, r1
}
if(DebugDisplayAnforderung1 && UebertragungAbgeschlossen)
15b30: 80 91 02 05 lds r24, 0x0502
15b34: 88 23 and r24, r24
15b36: 39 f1 breq .+78 ; 0x15b86 <DatenUebertragung+0x186>
15b38: 80 91 b7 02 lds r24, 0x02B7
15b3c: 88 23 and r24, r24
15b3e: 19 f1 breq .+70 ; 0x15b86 <DatenUebertragung+0x186>
{
Menu();
15b40: 0e 94 27 87 call 0x10e4e ; 0x10e4e <Menu>
SendOutData('L', FC_ADDRESS, 3, &MenuePunkt, sizeof(MenuePunkt), &MaxMenue, sizeof(MaxMenue), DisplayBuff, sizeof(DisplayBuff));
15b44: 1f 92 push r1
15b46: 80 e5 ldi r24, 0x50 ; 80
15b48: 8f 93 push r24
15b4a: 80 ee ldi r24, 0xE0 ; 224
15b4c: 97 e0 ldi r25, 0x07 ; 7
15b4e: 9f 93 push r25
15b50: 8f 93 push r24
15b52: 1f 92 push r1
15b54: 21 e0 ldi r18, 0x01 ; 1
15b56: 2f 93 push r18
15b58: 80 e9 ldi r24, 0x90 ; 144
15b5a: 92 e0 ldi r25, 0x02 ; 2
15b5c: 9f 93 push r25
15b5e: 8f 93 push r24
15b60: 1f 92 push r1
15b62: 2f 93 push r18
15b64: 83 ea ldi r24, 0xA3 ; 163
15b66: 94 e0 ldi r25, 0x04 ; 4
15b68: 9f 93 push r25
15b6a: 8f 93 push r24
15b6c: 83 e0 ldi r24, 0x03 ; 3
15b6e: 8f 93 push r24
15b70: 2f 93 push r18
15b72: 8c e4 ldi r24, 0x4C ; 76
15b74: 8f 93 push r24
15b76: 67 d9 rcall .-3378 ; 0x14e46 <SendOutData>
DebugDisplayAnforderung1 = 0;
15b78: 10 92 02 05 sts 0x0502, r1
15b7c: 0f b6 in r0, 0x3f ; 63
15b7e: f8 94 cli
15b80: de bf out 0x3e, r29 ; 62
15b82: 0f be out 0x3f, r0 ; 63
15b84: cd bf out 0x3d, r28 ; 61
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
15b86: 80 91 ff 04 lds r24, 0x04FF
15b8a: 88 23 and r24, r24
15b8c: 09 f4 brne .+2 ; 0x15b90 <DatenUebertragung+0x190>
15b8e: 5b c0 rjmp .+182 ; 0x15c46 <DatenUebertragung+0x246>
15b90: 90 91 b7 02 lds r25, 0x02B7
15b94: 99 23 and r25, r25
15b96: 09 f4 brne .+2 ; 0x15b9a <DatenUebertragung+0x19a>
15b98: 56 c0 rjmp .+172 ; 0x15c46 <DatenUebertragung+0x246>
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(GetVersionAnforderung == 2) // poll version of NC
15b9a: 82 30 cpi r24, 0x02 ; 2
15b9c: 61 f5 brne .+88 ; 0x15bf6 <DatenUebertragung+0x1f6>
{
struct str_VersionInfo nc;
nc.SWMajor = NC_Version.Major;
15b9e: 80 91 e1 08 lds r24, 0x08E1
15ba2: 89 83 std Y+1, r24 ; 0x01
nc.SWMinor = NC_Version.Minor;
15ba4: 80 91 e2 08 lds r24, 0x08E2
15ba8: 8a 83 std Y+2, r24 ; 0x02
nc.SWPatch = NC_Version.Patch;
15baa: 80 91 e3 08 lds r24, 0x08E3
15bae: 8d 83 std Y+5, r24 ; 0x05
nc.HWMajor = NC_Version.Hardware;
15bb0: 80 91 e5 08 lds r24, 0x08E5
15bb4: 88 87 std Y+8, r24 ; 0x08
nc.HardwareError[0] = 0xff;
15bb6: 8f ef ldi r24, 0xFF ; 255
15bb8: 8e 83 std Y+6, r24 ; 0x06
nc.HardwareError[1] = 0xff;
15bba: 8f 83 std Y+7, r24 ; 0x07
nc.ProtoMajor = VersionInfo.ProtoMajor;
15bbc: 80 91 5f 0a lds r24, 0x0A5F
15bc0: 8b 83 std Y+3, r24 ; 0x03
nc.BL_Firmware = VersionInfo.BL_Firmware;
15bc2: 80 91 65 0a lds r24, 0x0A65
15bc6: 89 87 std Y+9, r24 ; 0x09
nc.Flags = VersionInfo.Flags;
15bc8: 80 91 66 0a lds r24, 0x0A66
15bcc: 8a 87 std Y+10, r24 ; 0x0a
nc.reserved1 = 0;
15bce: 1c 82 std Y+4, r1 ; 0x04
SendOutData('V', FC_ADDRESS, 1, (unsigned char *) &nc, sizeof(nc));
15bd0: 1f 92 push r1
15bd2: 8a e0 ldi r24, 0x0A ; 10
15bd4: 8f 93 push r24
15bd6: ce 01 movw r24, r28
15bd8: 01 96 adiw r24, 0x01 ; 1
15bda: 9f 93 push r25
15bdc: 8f 93 push r24
15bde: 81 e0 ldi r24, 0x01 ; 1
15be0: 8f 93 push r24
15be2: 8f 93 push r24
15be4: 86 e5 ldi r24, 0x56 ; 86
15be6: 8f 93 push r24
15be8: 2e d9 rcall .-3492 ; 0x14e46 <SendOutData>
15bea: 0f b6 in r0, 0x3f ; 63
15bec: f8 94 cli
15bee: de bf out 0x3e, r29 ; 62
15bf0: 0f be out 0x3f, r0 ; 63
15bf2: cd bf out 0x3d, r28 ; 61
15bf4: 12 c0 rjmp .+36 ; 0x15c1a <DatenUebertragung+0x21a>
}
else
#endif
{
SendOutData('V', FC_ADDRESS, 1, (unsigned char *) &VersionInfo, sizeof(VersionInfo));
15bf6: 1f 92 push r1
15bf8: 8a e0 ldi r24, 0x0A ; 10
15bfa: 8f 93 push r24
15bfc: 8d e5 ldi r24, 0x5D ; 93
15bfe: 9a e0 ldi r25, 0x0A ; 10
15c00: 9f 93 push r25
15c02: 8f 93 push r24
15c04: 81 e0 ldi r24, 0x01 ; 1
15c06: 8f 93 push r24
15c08: 8f 93 push r24
15c0a: 86 e5 ldi r24, 0x56 ; 86
15c0c: 8f 93 push r24
15c0e: 1b d9 rcall .-3530 ; 0x14e46 <SendOutData>
15c10: 0f b6 in r0, 0x3f ; 63
15c12: f8 94 cli
15c14: de bf out 0x3e, r29 ; 62
15c16: 0f be out 0x3f, r0 ; 63
15c18: cd bf out 0x3d, r28 ; 61
}
GetVersionAnforderung = 0;
15c1a: 10 92 ff 04 sts 0x04FF, r1
Debug_OK("Version gesendet");
15c1e: 81 e1 ldi r24, 0x11 ; 17
15c20: 96 e1 ldi r25, 0x16 ; 22
15c22: 9f 93 push r25
15c24: 8f 93 push r24
15c26: 88 e1 ldi r24, 0x18 ; 24
15c28: 93 e2 ldi r25, 0x23 ; 35
15c2a: 9f 93 push r25
15c2c: 8f 93 push r24
15c2e: e0 91 78 06 lds r30, 0x0678
15c32: f0 91 79 06 lds r31, 0x0679
15c36: 09 95 icall
15c38: 88 e0 ldi r24, 0x08 ; 8
15c3a: 0e 94 2c 23 call 0x4658 ; 0x4658 <DebugSend>
15c3e: 0f 90 pop r0
15c40: 0f 90 pop r0
15c42: 0f 90 pop r0
15c44: 0f 90 pop r0
}
if(GetExternalControl && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
15c46: 80 91 03 05 lds r24, 0x0503
15c4a: 88 23 and r24, r24
15c4c: d1 f0 breq .+52 ; 0x15c82 <DatenUebertragung+0x282>
15c4e: 80 91 b7 02 lds r24, 0x02B7
15c52: 88 23 and r24, r24
15c54: b1 f0 breq .+44 ; 0x15c82 <DatenUebertragung+0x282>
{
SendOutData('G',MeineSlaveAdresse, 1, (unsigned char *) &ExternControl, sizeof(ExternControl));
15c56: 1f 92 push r1
15c58: 8b e0 ldi r24, 0x0B ; 11
15c5a: 8f 93 push r24
15c5c: 8f e7 ldi r24, 0x7F ; 127
15c5e: 9a e0 ldi r25, 0x0A ; 10
15c60: 9f 93 push r25
15c62: 8f 93 push r24
15c64: 81 e0 ldi r24, 0x01 ; 1
15c66: 8f 93 push r24
15c68: 80 91 b4 02 lds r24, 0x02B4
15c6c: 8f 93 push r24
15c6e: 87 e4 ldi r24, 0x47 ; 71
15c70: 8f 93 push r24
15c72: e9 d8 rcall .-3630 ; 0x14e46 <SendOutData>
GetExternalControl = 0;
15c74: 10 92 03 05 sts 0x0503, r1
15c78: 0f b6 in r0, 0x3f ; 63
15c7a: f8 94 cli
15c7c: de bf out 0x3e, r29 ; 62
15c7e: 0f be out 0x3f, r0 ; 63
15c80: cd bf out 0x3d, r28 ; 61
}
if(((DebugDataIntervall>0 && CheckDelay(Debug_Timer)) || DebugDataAnforderung) && UebertragungAbgeschlossen)
15c82: 80 91 f3 04 lds r24, 0x04F3
15c86: 90 91 f4 04 lds r25, 0x04F4
15c8a: 89 2b or r24, r25
15c8c: 41 f0 breq .+16 ; 0x15c9e <DatenUebertragung+0x29e>
15c8e: 80 91 5b 0a lds r24, 0x0A5B
15c92: 90 91 5c 0a lds r25, 0x0A5C
15c96: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
15c9a: 81 11 cpse r24, r1
15c9c: 04 c0 rjmp .+8 ; 0x15ca6 <DatenUebertragung+0x2a6>
15c9e: 80 91 00 05 lds r24, 0x0500
15ca2: 88 23 and r24, r24
15ca4: 31 f1 breq .+76 ; 0x15cf2 <DatenUebertragung+0x2f2>
15ca6: 80 91 b7 02 lds r24, 0x02B7
15caa: 88 23 and r24, r24
15cac: 11 f1 breq .+68 ; 0x15cf2 <DatenUebertragung+0x2f2>
{
CopyDebugValues();
15cae: 0e 94 c1 27 call 0x4f82 ; 0x4f82 <CopyDebugValues>
SendOutData('D', FC_ADDRESS, 1, (unsigned char *) &DebugOut,sizeof(DebugOut));
15cb2: 1f 92 push r1
15cb4: 82 e4 ldi r24, 0x42 ; 66
15cb6: 8f 93 push r24
15cb8: 86 e4 ldi r24, 0x46 ; 70
15cba: 9c e0 ldi r25, 0x0C ; 12
15cbc: 9f 93 push r25
15cbe: 8f 93 push r24
15cc0: 81 e0 ldi r24, 0x01 ; 1
15cc2: 8f 93 push r24
15cc4: 8f 93 push r24
15cc6: 84 e4 ldi r24, 0x44 ; 68
15cc8: 8f 93 push r24
15cca: bd d8 rcall .-3718 ; 0x14e46 <SendOutData>
DebugDataAnforderung = 0;
15ccc: 10 92 00 05 sts 0x0500, r1
if(DebugDataIntervall>0) Debug_Timer = SetDelay(DebugDataIntervall);
15cd0: 80 91 f3 04 lds r24, 0x04F3
15cd4: 90 91 f4 04 lds r25, 0x04F4
15cd8: 0f b6 in r0, 0x3f ; 63
15cda: f8 94 cli
15cdc: de bf out 0x3e, r29 ; 62
15cde: 0f be out 0x3f, r0 ; 63
15ce0: cd bf out 0x3d, r28 ; 61
15ce2: 00 97 sbiw r24, 0x00 ; 0
15ce4: 31 f0 breq .+12 ; 0x15cf2 <DatenUebertragung+0x2f2>
15ce6: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
15cea: 90 93 5c 0a sts 0x0A5C, r25
15cee: 80 93 5b 0a sts 0x0A5B, r24
}
if(Intervall3D > 0 && CheckDelay(Timer3D) && UebertragungAbgeschlossen)
15cf2: 80 91 f1 04 lds r24, 0x04F1
15cf6: 90 91 f2 04 lds r25, 0x04F2
15cfa: 89 2b or r24, r25
15cfc: 09 f4 brne .+2 ; 0x15d00 <DatenUebertragung+0x300>
15cfe: 9d c0 rjmp .+314 ; 0x15e3a <DatenUebertragung+0x43a>
15d00: 80 91 59 0a lds r24, 0x0A59
15d04: 90 91 5a 0a lds r25, 0x0A5A
15d08: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
15d0c: 88 23 and r24, r24
15d0e: 09 f4 brne .+2 ; 0x15d12 <DatenUebertragung+0x312>
15d10: 94 c0 rjmp .+296 ; 0x15e3a <DatenUebertragung+0x43a>
15d12: 80 91 b7 02 lds r24, 0x02B7
15d16: 88 23 and r24, r24
15d18: 09 f4 brne .+2 ; 0x15d1c <DatenUebertragung+0x31c>
15d1a: 8f c0 rjmp .+286 ; 0x15e3a <DatenUebertragung+0x43a>
{
Data3D.Winkel[0] = ToNaviCtrl.IntegralNick;//(int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
15d1c: 0b e4 ldi r16, 0x4B ; 75
15d1e: 1a e0 ldi r17, 0x0A ; 10
15d20: 80 91 ea 08 lds r24, 0x08EA
15d24: 90 91 eb 08 lds r25, 0x08EB
15d28: f8 01 movw r30, r16
15d2a: 91 83 std Z+1, r25 ; 0x01
15d2c: 80 83 st Z, r24
Data3D.Winkel[1] = ToNaviCtrl.IntegralRoll;//(int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
15d2e: 80 91 ec 08 lds r24, 0x08EC
15d32: 90 91 ed 08 lds r25, 0x08ED
15d36: 90 93 4e 0a sts 0x0A4E, r25
15d3a: 80 93 4d 0a sts 0x0A4D, r24
Data3D.Winkel[2] = (int) ((10 * ErsatzKompass) / GIER_GRAD_FAKTOR);
15d3e: 80 91 6e 06 lds r24, 0x066E
15d42: 90 91 6f 06 lds r25, 0x066F
15d46: a0 91 70 06 lds r26, 0x0670
15d4a: b0 91 71 06 lds r27, 0x0671
15d4e: 88 0f add r24, r24
15d50: 99 1f adc r25, r25
15d52: aa 1f adc r26, r26
15d54: bb 1f adc r27, r27
15d56: ac 01 movw r20, r24
15d58: bd 01 movw r22, r26
15d5a: 44 0f add r20, r20
15d5c: 55 1f adc r21, r21
15d5e: 66 1f adc r22, r22
15d60: 77 1f adc r23, r23
15d62: 44 0f add r20, r20
15d64: 55 1f adc r21, r21
15d66: 66 1f adc r22, r22
15d68: 77 1f adc r23, r23
15d6a: 6c 01 movw r12, r24
15d6c: 7d 01 movw r14, r26
15d6e: c4 0e add r12, r20
15d70: d5 1e adc r13, r21
15d72: e6 1e adc r14, r22
15d74: f7 1e adc r15, r23
15d76: c7 01 movw r24, r14
15d78: b6 01 movw r22, r12
15d7a: 20 91 21 01 lds r18, 0x0121
15d7e: 30 91 22 01 lds r19, 0x0122
15d82: 40 91 23 01 lds r20, 0x0123
15d86: 50 91 24 01 lds r21, 0x0124
15d8a: c5 d2 rcall .+1418 ; 0x16316 <__divmodsi4>
15d8c: 30 93 50 0a sts 0x0A50, r19
15d90: 20 93 4f 0a sts 0x0A4F, r18
Data3D.Centroid[0] = SummeNick >> 9;
15d94: 80 91 26 04 lds r24, 0x0426
15d98: 90 91 27 04 lds r25, 0x0427
15d9c: a0 91 28 04 lds r26, 0x0428
15da0: b0 91 29 04 lds r27, 0x0429
15da4: 07 2e mov r0, r23
15da6: 79 e0 ldi r23, 0x09 ; 9
15da8: b5 95 asr r27
15daa: a7 95 ror r26
15dac: 97 95 ror r25
15dae: 87 95 ror r24
15db0: 7a 95 dec r23
15db2: d1 f7 brne .-12 ; 0x15da8 <DatenUebertragung+0x3a8>
15db4: 70 2d mov r23, r0
15db6: 80 93 51 0a sts 0x0A51, r24
Data3D.Centroid[1] = SummeRoll >> 9;
15dba: 80 91 22 04 lds r24, 0x0422
15dbe: 90 91 23 04 lds r25, 0x0423
15dc2: a0 91 24 04 lds r26, 0x0424
15dc6: b0 91 25 04 lds r27, 0x0425
15dca: 07 2e mov r0, r23
15dcc: 79 e0 ldi r23, 0x09 ; 9
15dce: b5 95 asr r27
15dd0: a7 95 ror r26
15dd2: 97 95 ror r25
15dd4: 87 95 ror r24
15dd6: 7a 95 dec r23
15dd8: d1 f7 brne .-12 ; 0x15dce <DatenUebertragung+0x3ce>
15dda: 70 2d mov r23, r0
15ddc: 80 93 52 0a sts 0x0A52, r24
Data3D.Centroid[2] = Mess_Integral_Gier >> 9;
15de0: 80 91 2e 04 lds r24, 0x042E
15de4: 90 91 2f 04 lds r25, 0x042F
15de8: a0 91 30 04 lds r26, 0x0430
15dec: b0 91 31 04 lds r27, 0x0431
15df0: 07 2e mov r0, r23
15df2: 79 e0 ldi r23, 0x09 ; 9
15df4: b5 95 asr r27
15df6: a7 95 ror r26
15df8: 97 95 ror r25
15dfa: 87 95 ror r24
15dfc: 7a 95 dec r23
15dfe: d1 f7 brne .-12 ; 0x15df4 <DatenUebertragung+0x3f4>
15e00: 70 2d mov r23, r0
15e02: 80 93 53 0a sts 0x0A53, r24
SendOutData('C', FC_ADDRESS, 1, (unsigned char *) &Data3D,sizeof(Data3D));
15e06: 1f 92 push r1
15e08: 8e e0 ldi r24, 0x0E ; 14
15e0a: 8f 93 push r24
15e0c: 1f 93 push r17
15e0e: 0f 93 push r16
15e10: 81 e0 ldi r24, 0x01 ; 1
15e12: 8f 93 push r24
15e14: 8f 93 push r24
15e16: 83 e4 ldi r24, 0x43 ; 67
15e18: 8f 93 push r24
15e1a: 15 d8 rcall .-4054 ; 0x14e46 <SendOutData>
Timer3D = SetDelay(Intervall3D);
15e1c: 80 91 f1 04 lds r24, 0x04F1
15e20: 90 91 f2 04 lds r25, 0x04F2
15e24: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
15e28: 90 93 5a 0a sts 0x0A5A, r25
15e2c: 80 93 59 0a sts 0x0A59, r24
15e30: 0f b6 in r0, 0x3f ; 63
15e32: f8 94 cli
15e34: de bf out 0x3e, r29 ; 62
15e36: 0f be out 0x3f, r0 ; 63
15e38: cd bf out 0x3d, r28 ; 61
}
if(DebugTextAnforderung != 255) // Texte für die Analogdaten
15e3a: 60 91 b6 02 lds r22, 0x02B6
15e3e: 6f 3f cpi r22, 0xFF ; 255
15e40: 41 f1 breq .+80 ; 0x15e92 <DatenUebertragung+0x492>
{
unsigned char label[16]; // local sram buffer
memcpy_P(label, ANALOG_TEXT[DebugTextAnforderung], 16); // read lable from flash to sra
15e42: 30 e1 ldi r19, 0x10 ; 16
15e44: 63 9f mul r22, r19
15e46: b0 01 movw r22, r0
15e48: 11 24 eor r1, r1
15e4a: 61 59 subi r22, 0x91 ; 145
15e4c: 79 4e sbci r23, 0xE9 ; 233
15e4e: 40 e1 ldi r20, 0x10 ; 16
15e50: 50 e0 ldi r21, 0x00 ; 0
15e52: 8e 01 movw r16, r28
15e54: 0f 5f subi r16, 0xFF ; 255
15e56: 1f 4f sbci r17, 0xFF ; 255
15e58: c8 01 movw r24, r16
15e5a: e1 d2 rcall .+1474 ; 0x1641e <memcpy_P>
SendOutData('A', FC_ADDRESS, 2, (unsigned char *)&DebugTextAnforderung, sizeof(DebugTextAnforderung),label, 16);
15e5c: 1f 92 push r1
15e5e: 80 e1 ldi r24, 0x10 ; 16
15e60: 8f 93 push r24
15e62: 1f 93 push r17
15e64: 0f 93 push r16
15e66: 1f 92 push r1
15e68: 21 e0 ldi r18, 0x01 ; 1
15e6a: 2f 93 push r18
15e6c: 86 eb ldi r24, 0xB6 ; 182
15e6e: 92 e0 ldi r25, 0x02 ; 2
15e70: 9f 93 push r25
15e72: 8f 93 push r24
15e74: 82 e0 ldi r24, 0x02 ; 2
15e76: 8f 93 push r24
15e78: 2f 93 push r18
15e7a: 81 e4 ldi r24, 0x41 ; 65
15e7c: 8f 93 push r24
15e7e: 0e 94 23 a7 call 0x14e46 ; 0x14e46 <SendOutData>
DebugTextAnforderung = 255;
15e82: 8f ef ldi r24, 0xFF ; 255
15e84: 80 93 b6 02 sts 0x02B6, r24
15e88: 0f b6 in r0, 0x3f ; 63
15e8a: f8 94 cli
15e8c: de bf out 0x3e, r29 ; 62
15e8e: 0f be out 0x3f, r0 ; 63
15e90: cd bf out 0x3d, r28 ; 61
}
if(ConfirmFrame && UebertragungAbgeschlossen) // Datensatz bestätigen
15e92: 80 91 88 0c lds r24, 0x0C88
15e96: 88 23 and r24, r24
15e98: c1 f0 breq .+48 ; 0x15eca <DatenUebertragung+0x4ca>
15e9a: 80 91 b7 02 lds r24, 0x02B7
15e9e: 88 23 and r24, r24
15ea0: a1 f0 breq .+40 ; 0x15eca <DatenUebertragung+0x4ca>
{
SendOutData('B', FC_ADDRESS, 1, (uint8_t*)&ConfirmFrame, sizeof(ConfirmFrame));
15ea2: 1f 92 push r1
15ea4: 21 e0 ldi r18, 0x01 ; 1
15ea6: 2f 93 push r18
15ea8: 88 e8 ldi r24, 0x88 ; 136
15eaa: 9c e0 ldi r25, 0x0C ; 12
15eac: 9f 93 push r25
15eae: 8f 93 push r24
15eb0: 2f 93 push r18
15eb2: 2f 93 push r18
15eb4: 82 e4 ldi r24, 0x42 ; 66
15eb6: 8f 93 push r24
15eb8: 0e 94 23 a7 call 0x14e46 ; 0x14e46 <SendOutData>
ConfirmFrame = 0;
15ebc: 10 92 88 0c sts 0x0C88, r1
15ec0: 0f b6 in r0, 0x3f ; 63
15ec2: f8 94 cli
15ec4: de bf out 0x3e, r29 ; 62
15ec6: 0f be out 0x3f, r0 ; 63
15ec8: cd bf out 0x3d, r28 ; 61
}
if(GetPPMChannelAnforderung && UebertragungAbgeschlossen)
15eca: 80 91 fe 04 lds r24, 0x04FE
15ece: 88 23 and r24, r24
15ed0: c9 f0 breq .+50 ; 0x15f04 <DatenUebertragung+0x504>
15ed2: 80 91 b7 02 lds r24, 0x02B7
15ed6: 88 23 and r24, r24
15ed8: a9 f0 breq .+42 ; 0x15f04 <DatenUebertragung+0x504>
{
SendOutData('P', FC_ADDRESS, 1, (unsigned char *) &PPM_in, sizeof(PPM_in));
15eda: 1f 92 push r1
15edc: 86 e4 ldi r24, 0x46 ; 70
15ede: 8f 93 push r24
15ee0: 81 e3 ldi r24, 0x31 ; 49
15ee2: 98 e0 ldi r25, 0x08 ; 8
15ee4: 9f 93 push r25
15ee6: 8f 93 push r24
15ee8: 81 e0 ldi r24, 0x01 ; 1
15eea: 8f 93 push r24
15eec: 8f 93 push r24
15eee: 80 e5 ldi r24, 0x50 ; 80
15ef0: 8f 93 push r24
15ef2: 0e 94 23 a7 call 0x14e46 ; 0x14e46 <SendOutData>
GetPPMChannelAnforderung = 0;
15ef6: 10 92 fe 04 sts 0x04FE, r1
15efa: 0f b6 in r0, 0x3f ; 63
15efc: f8 94 cli
15efe: de bf out 0x3e, r29 ; 62
15f00: 0f be out 0x3f, r0 ; 63
15f02: cd bf out 0x3d, r28 ; 61
}
#ifndef REDUNDANT_FC_SLAVE
if((CheckDelay(Kompass_Timer)) && UebertragungAbgeschlossen)
15f04: 80 91 8a 0a lds r24, 0x0A8A
15f08: 90 91 8b 0a lds r25, 0x0A8B
15f0c: 0e 94 63 9c call 0x138c6 ; 0x138c6 <CheckDelay>
15f10: 88 23 and r24, r24
15f12: 09 f4 brne .+2 ; 0x15f16 <DatenUebertragung+0x516>
15f14: 4f c0 rjmp .+158 ; 0x15fb4 <DatenUebertragung+0x5b4>
15f16: 80 91 b7 02 lds r24, 0x02B7
15f1a: 88 23 and r24, r24
15f1c: 09 f4 brne .+2 ; 0x15f20 <DatenUebertragung+0x520>
15f1e: 4a c0 rjmp .+148 ; 0x15fb4 <DatenUebertragung+0x5b4>
{
if(!NaviDataOkay) // no external compass needed
15f20: 80 91 a4 02 lds r24, 0x02A4
15f24: 81 11 cpse r24, r1
15f26: 2a c0 rjmp .+84 ; 0x15f7c <DatenUebertragung+0x57c>
{
WinkelOut.Winkel[0] = ToNaviCtrl.IntegralNick;//(int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
15f28: e7 e7 ldi r30, 0x77 ; 119
15f2a: fa e0 ldi r31, 0x0A ; 10
15f2c: 80 91 ea 08 lds r24, 0x08EA
15f30: 90 91 eb 08 lds r25, 0x08EB
15f34: 91 83 std Z+1, r25 ; 0x01
15f36: 80 83 st Z, r24
WinkelOut.Winkel[1] = ToNaviCtrl.IntegralRoll;//(int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
15f38: 80 91 ec 08 lds r24, 0x08EC
15f3c: 90 91 ed 08 lds r25, 0x08ED
15f40: 90 93 7a 0a sts 0x0A7A, r25
15f44: 80 93 79 0a sts 0x0A79, r24
WinkelOut.UserParameter[0] = Parameter_UserParam1;
15f48: 80 91 e0 03 lds r24, 0x03E0
15f4c: 80 93 7b 0a sts 0x0A7B, r24
WinkelOut.UserParameter[1] = Parameter_UserParam2;
15f50: 80 91 df 03 lds r24, 0x03DF
15f54: 80 93 7c 0a sts 0x0A7C, r24
SendOutData('k', MK3MAG_ADDRESS, 1, (unsigned char *) &WinkelOut,sizeof(WinkelOut));
15f58: 1f 92 push r1
15f5a: 88 e0 ldi r24, 0x08 ; 8
15f5c: 8f 93 push r24
15f5e: ff 93 push r31
15f60: ef 93 push r30
15f62: 81 e0 ldi r24, 0x01 ; 1
15f64: 8f 93 push r24
15f66: 83 e0 ldi r24, 0x03 ; 3
15f68: 8f 93 push r24
15f6a: 8b e6 ldi r24, 0x6B ; 107
15f6c: 8f 93 push r24
15f6e: 0e 94 23 a7 call 0x14e46 ; 0x14e46 <SendOutData>
15f72: 0f b6 in r0, 0x3f ; 63
15f74: f8 94 cli
15f76: de bf out 0x3e, r29 ; 62
15f78: 0f be out 0x3f, r0 ; 63
15f7a: cd bf out 0x3d, r28 ; 61
}
if(WinkelOut.CalcState > 4) WinkelOut.CalcState = 6; // wird dann in SPI auf Null gesetzt
15f7c: 80 91 7d 0a lds r24, 0x0A7D
15f80: 85 30 cpi r24, 0x05 ; 5
15f82: 18 f0 brcs .+6 ; 0x15f8a <DatenUebertragung+0x58a>
15f84: 86 e0 ldi r24, 0x06 ; 6
15f86: 80 93 7d 0a sts 0x0A7D, r24
if(JustMK3MagConnected) Kompass_Timer = SetDelay(99);
15f8a: 80 91 ca 04 lds r24, 0x04CA
15f8e: 88 23 and r24, r24
15f90: 49 f0 breq .+18 ; 0x15fa4 <DatenUebertragung+0x5a4>
15f92: 83 e6 ldi r24, 0x63 ; 99
15f94: 90 e0 ldi r25, 0x00 ; 0
15f96: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
15f9a: 90 93 8b 0a sts 0x0A8B, r25
15f9e: 80 93 8a 0a sts 0x0A8A, r24
15fa2: 08 c0 rjmp .+16 ; 0x15fb4 <DatenUebertragung+0x5b4>
else Kompass_Timer = SetDelay(999);
15fa4: 87 ee ldi r24, 0xE7 ; 231
15fa6: 93 e0 ldi r25, 0x03 ; 3
15fa8: 0e 94 5a 9c call 0x138b4 ; 0x138b4 <SetDelay>
15fac: 90 93 8b 0a sts 0x0A8B, r25
15fb0: 80 93 8a 0a sts 0x0A8A, r24
SendOutData('!', FC_ADDRESS, 1, (unsigned char *) &SendRedundantMotor, RequiredMotors+1);
}
#endif
#ifdef DEBUG // only include functions if DEBUG is defined
if(SendDebugOutput && UebertragungAbgeschlossen)
15fb4: 80 91 76 03 lds r24, 0x0376
15fb8: 88 23 and r24, r24
15fba: c9 f0 breq .+50 ; 0x15fee <DatenUebertragung+0x5ee>
15fbc: 80 91 b7 02 lds r24, 0x02B7
15fc0: 88 23 and r24, r24
15fc2: a9 f0 breq .+42 ; 0x15fee <DatenUebertragung+0x5ee>
{
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug));
15fc4: 1f 92 push r1
15fc6: 81 e2 ldi r24, 0x21 ; 33
15fc8: 8f 93 push r24
15fca: 8c e1 ldi r24, 0x1C ; 28
15fcc: 95 e0 ldi r25, 0x05 ; 5
15fce: 9f 93 push r25
15fd0: 8f 93 push r24
15fd2: 81 e0 ldi r24, 0x01 ; 1
15fd4: 8f 93 push r24
15fd6: 8f 93 push r24
15fd8: 80 e3 ldi r24, 0x30 ; 48
15fda: 8f 93 push r24
15fdc: 0e 94 23 a7 call 0x14e46 ; 0x14e46 <SendOutData>
SendDebugOutput = 0;
15fe0: 10 92 76 03 sts 0x0376, r1
15fe4: 0f b6 in r0, 0x3f ; 63
15fe6: f8 94 cli
15fe8: de bf out 0x3e, r29 ; 62
15fea: 0f be out 0x3f, r0 ; 63
15fec: cd bf out 0x3d, r28 ; 61
}
#endif
}
15fee: 60 96 adiw r28, 0x10 ; 16
15ff0: 0f b6 in r0, 0x3f ; 63
15ff2: f8 94 cli
15ff4: de bf out 0x3e, r29 ; 62
15ff6: 0f be out 0x3f, r0 ; 63
15ff8: cd bf out 0x3d, r28 ; 61
15ffa: df 91 pop r29
15ffc: cf 91 pop r28
15ffe: 1f 91 pop r17
16000: 0f 91 pop r16
16002: ff 90 pop r15
16004: ef 90 pop r14
16006: df 90 pop r13
16008: cf 90 pop r12
1600a: 08 95 ret
0001600c <User_Receiver_Init>:
//############################################################################
// Initialize the UART here
//############################################################################
void User_Receiver_Init(void)
{
1600c: 08 95 ret
0001600e <User_RX_Parser>:
//############################################################################
// Is called by the uart RX interrupt
// UDR contains the received byte
//############################################################################
void User_RX_Parser(unsigned char udr)
{
1600e: 08 95 ret
00016010 <__subsf3>:
16010: 50 58 subi r21, 0x80 ; 128
00016012 <__addsf3>:
16012: bb 27 eor r27, r27
16014: aa 27 eor r26, r26
16016: 0e d0 rcall .+28 ; 0x16034 <__addsf3x>
16018: e0 c0 rjmp .+448 ; 0x161da <__fp_round>
1601a: d1 d0 rcall .+418 ; 0x161be <__fp_pscA>
1601c: 30 f0 brcs .+12 ; 0x1602a <__addsf3+0x18>
1601e: d6 d0 rcall .+428 ; 0x161cc <__fp_pscB>
16020: 20 f0 brcs .+8 ; 0x1602a <__addsf3+0x18>
16022: 31 f4 brne .+12 ; 0x16030 <__addsf3+0x1e>
16024: 9f 3f cpi r25, 0xFF ; 255
16026: 11 f4 brne .+4 ; 0x1602c <__addsf3+0x1a>
16028: 1e f4 brtc .+6 ; 0x16030 <__addsf3+0x1e>
1602a: c6 c0 rjmp .+396 ; 0x161b8 <__fp_nan>
1602c: 0e f4 brtc .+2 ; 0x16030 <__addsf3+0x1e>
1602e: e0 95 com r30
16030: e7 fb bst r30, 7
16032: bc c0 rjmp .+376 ; 0x161ac <__fp_inf>
00016034 <__addsf3x>:
16034: e9 2f mov r30, r25
16036: e2 d0 rcall .+452 ; 0x161fc <__fp_split3>
16038: 80 f3 brcs .-32 ; 0x1601a <__addsf3+0x8>
1603a: ba 17 cp r27, r26
1603c: 62 07 cpc r22, r18
1603e: 73 07 cpc r23, r19
16040: 84 07 cpc r24, r20
16042: 95 07 cpc r25, r21
16044: 18 f0 brcs .+6 ; 0x1604c <__addsf3x+0x18>
16046: 71 f4 brne .+28 ; 0x16064 <__addsf3x+0x30>
16048: 9e f5 brtc .+102 ; 0x160b0 <__addsf3x+0x7c>
1604a: fa c0 rjmp .+500 ; 0x16240 <__fp_zero>
1604c: 0e f4 brtc .+2 ; 0x16050 <__addsf3x+0x1c>
1604e: e0 95 com r30
16050: 0b 2e mov r0, r27
16052: ba 2f mov r27, r26
16054: a0 2d mov r26, r0
16056: 0b 01 movw r0, r22
16058: b9 01 movw r22, r18
1605a: 90 01 movw r18, r0
1605c: 0c 01 movw r0, r24
1605e: ca 01 movw r24, r20
16060: a0 01 movw r20, r0
16062: 11 24 eor r1, r1
16064: ff 27 eor r31, r31
16066: 59 1b sub r21, r25
16068: 99 f0 breq .+38 ; 0x16090 <__addsf3x+0x5c>
1606a: 59 3f cpi r21, 0xF9 ; 249
1606c: 50 f4 brcc .+20 ; 0x16082 <__addsf3x+0x4e>
1606e: 50 3e cpi r21, 0xE0 ; 224
16070: 68 f1 brcs .+90 ; 0x160cc <__addsf3x+0x98>
16072: 1a 16 cp r1, r26
16074: f0 40 sbci r31, 0x00 ; 0
16076: a2 2f mov r26, r18
16078: 23 2f mov r18, r19
1607a: 34 2f mov r19, r20
1607c: 44 27 eor r20, r20
1607e: 58 5f subi r21, 0xF8 ; 248
16080: f3 cf rjmp .-26 ; 0x16068 <__addsf3x+0x34>
16082: 46 95 lsr r20
16084: 37 95 ror r19
16086: 27 95 ror r18
16088: a7 95 ror r26
1608a: f0 40 sbci r31, 0x00 ; 0
1608c: 53 95 inc r21
1608e: c9 f7 brne .-14 ; 0x16082 <__addsf3x+0x4e>
16090: 7e f4 brtc .+30 ; 0x160b0 <__addsf3x+0x7c>
16092: 1f 16 cp r1, r31
16094: ba 0b sbc r27, r26
16096: 62 0b sbc r22, r18
16098: 73 0b sbc r23, r19
1609a: 84 0b sbc r24, r20
1609c: ba f0 brmi .+46 ; 0x160cc <__addsf3x+0x98>
1609e: 91 50 subi r25, 0x01 ; 1
160a0: a1 f0 breq .+40 ; 0x160ca <__addsf3x+0x96>
160a2: ff 0f add r31, r31
160a4: bb 1f adc r27, r27
160a6: 66 1f adc r22, r22
160a8: 77 1f adc r23, r23
160aa: 88 1f adc r24, r24
160ac: c2 f7 brpl .-16 ; 0x1609e <__addsf3x+0x6a>
160ae: 0e c0 rjmp .+28 ; 0x160cc <__addsf3x+0x98>
160b0: ba 0f add r27, r26
160b2: 62 1f adc r22, r18
160b4: 73 1f adc r23, r19
160b6: 84 1f adc r24, r20
160b8: 48 f4 brcc .+18 ; 0x160cc <__addsf3x+0x98>
160ba: 87 95 ror r24
160bc: 77 95 ror r23
160be: 67 95 ror r22
160c0: b7 95 ror r27
160c2: f7 95 ror r31
160c4: 9e 3f cpi r25, 0xFE ; 254
160c6: 08 f0 brcs .+2 ; 0x160ca <__addsf3x+0x96>
160c8: b3 cf rjmp .-154 ; 0x16030 <__addsf3+0x1e>
160ca: 93 95 inc r25
160cc: 88 0f add r24, r24
160ce: 08 f0 brcs .+2 ; 0x160d2 <__addsf3x+0x9e>
160d0: 99 27 eor r25, r25
160d2: ee 0f add r30, r30
160d4: 97 95 ror r25
160d6: 87 95 ror r24
160d8: 08 95 ret
000160da <__fixunssfsi>:
160da: 98 d0 rcall .+304 ; 0x1620c <__fp_splitA>
160dc: 88 f0 brcs .+34 ; 0x16100 <__fixunssfsi+0x26>
160de: 9f 57 subi r25, 0x7F ; 127
160e0: 90 f0 brcs .+36 ; 0x16106 <__fixunssfsi+0x2c>
160e2: b9 2f mov r27, r25
160e4: 99 27 eor r25, r25
160e6: b7 51 subi r27, 0x17 ; 23
160e8: a0 f0 brcs .+40 ; 0x16112 <__fixunssfsi+0x38>
160ea: d1 f0 breq .+52 ; 0x16120 <__fixunssfsi+0x46>
160ec: 66 0f add r22, r22
160ee: 77 1f adc r23, r23
160f0: 88 1f adc r24, r24
160f2: 99 1f adc r25, r25
160f4: 1a f0 brmi .+6 ; 0x160fc <__fixunssfsi+0x22>
160f6: ba 95 dec r27
160f8: c9 f7 brne .-14 ; 0x160ec <__fixunssfsi+0x12>
160fa: 12 c0 rjmp .+36 ; 0x16120 <__fixunssfsi+0x46>
160fc: b1 30 cpi r27, 0x01 ; 1
160fe: 81 f0 breq .+32 ; 0x16120 <__fixunssfsi+0x46>
16100: 9f d0 rcall .+318 ; 0x16240 <__fp_zero>
16102: b1 e0 ldi r27, 0x01 ; 1
16104: 08 95 ret
16106: 9c c0 rjmp .+312 ; 0x16240 <__fp_zero>
16108: 67 2f mov r22, r23
1610a: 78 2f mov r23, r24
1610c: 88 27 eor r24, r24
1610e: b8 5f subi r27, 0xF8 ; 248
16110: 39 f0 breq .+14 ; 0x16120 <__fixunssfsi+0x46>
16112: b9 3f cpi r27, 0xF9 ; 249
16114: cc f3 brlt .-14 ; 0x16108 <__fixunssfsi+0x2e>
16116: 86 95 lsr r24
16118: 77 95 ror r23
1611a: 67 95 ror r22
1611c: b3 95 inc r27
1611e: d9 f7 brne .-10 ; 0x16116 <__fixunssfsi+0x3c>
16120: 3e f4 brtc .+14 ; 0x16130 <__fixunssfsi+0x56>
16122: 90 95 com r25
16124: 80 95 com r24
16126: 70 95 com r23
16128: 61 95 neg r22
1612a: 7f 4f sbci r23, 0xFF ; 255
1612c: 8f 4f sbci r24, 0xFF ; 255
1612e: 9f 4f sbci r25, 0xFF ; 255
16130: 08 95 ret
00016132 <__floatunsisf>:
16132: e8 94 clt
16134: 09 c0 rjmp .+18 ; 0x16148 <__floatsisf+0x12>
00016136 <__floatsisf>:
16136: 97 fb bst r25, 7
16138: 3e f4 brtc .+14 ; 0x16148 <__floatsisf+0x12>
1613a: 90 95 com r25
1613c: 80 95 com r24
1613e: 70 95 com r23
16140: 61 95 neg r22
16142: 7f 4f sbci r23, 0xFF ; 255
16144: 8f 4f sbci r24, 0xFF ; 255
16146: 9f 4f sbci r25, 0xFF ; 255
16148: 99 23 and r25, r25
1614a: a9 f0 breq .+42 ; 0x16176 <__floatsisf+0x40>
1614c: f9 2f mov r31, r25
1614e: 96 e9 ldi r25, 0x96 ; 150
16150: bb 27 eor r27, r27
16152: 93 95 inc r25
16154: f6 95 lsr r31
16156: 87 95 ror r24
16158: 77 95 ror r23
1615a: 67 95 ror r22
1615c: b7 95 ror r27
1615e: f1 11 cpse r31, r1
16160: f8 cf rjmp .-16 ; 0x16152 <__floatsisf+0x1c>
16162: fa f4 brpl .+62 ; 0x161a2 <__floatsisf+0x6c>
16164: bb 0f add r27, r27
16166: 11 f4 brne .+4 ; 0x1616c <__floatsisf+0x36>
16168: 60 ff sbrs r22, 0
1616a: 1b c0 rjmp .+54 ; 0x161a2 <__floatsisf+0x6c>
1616c: 6f 5f subi r22, 0xFF ; 255
1616e: 7f 4f sbci r23, 0xFF ; 255
16170: 8f 4f sbci r24, 0xFF ; 255
16172: 9f 4f sbci r25, 0xFF ; 255
16174: 16 c0 rjmp .+44 ; 0x161a2 <__floatsisf+0x6c>
16176: 88 23 and r24, r24
16178: 11 f0 breq .+4 ; 0x1617e <__floatsisf+0x48>
1617a: 96 e9 ldi r25, 0x96 ; 150
1617c: 11 c0 rjmp .+34 ; 0x161a0 <__floatsisf+0x6a>
1617e: 77 23 and r23, r23
16180: 21 f0 breq .+8 ; 0x1618a <__floatsisf+0x54>
16182: 9e e8 ldi r25, 0x8E ; 142
16184: 87 2f mov r24, r23
16186: 76 2f mov r23, r22
16188: 05 c0 rjmp .+10 ; 0x16194 <__floatsisf+0x5e>
1618a: 66 23 and r22, r22
1618c: 71 f0 breq .+28 ; 0x161aa <__floatsisf+0x74>
1618e: 96 e8 ldi r25, 0x86 ; 134
16190: 86 2f mov r24, r22
16192: 70 e0 ldi r23, 0x00 ; 0
16194: 60 e0 ldi r22, 0x00 ; 0
16196: 2a f0 brmi .+10 ; 0x161a2 <__floatsisf+0x6c>
16198: 9a 95 dec r25
1619a: 66 0f add r22, r22
1619c: 77 1f adc r23, r23
1619e: 88 1f adc r24, r24
161a0: da f7 brpl .-10 ; 0x16198 <__floatsisf+0x62>
161a2: 88 0f add r24, r24
161a4: 96 95 lsr r25
161a6: 87 95 ror r24
161a8: 97 f9 bld r25, 7
161aa: 08 95 ret
000161ac <__fp_inf>:
161ac: 97 f9 bld r25, 7
161ae: 9f 67 ori r25, 0x7F ; 127
161b0: 80 e8 ldi r24, 0x80 ; 128
161b2: 70 e0 ldi r23, 0x00 ; 0
161b4: 60 e0 ldi r22, 0x00 ; 0
161b6: 08 95 ret
000161b8 <__fp_nan>:
161b8: 9f ef ldi r25, 0xFF ; 255
161ba: 80 ec ldi r24, 0xC0 ; 192
161bc: 08 95 ret
000161be <__fp_pscA>:
161be: 00 24 eor r0, r0
161c0: 0a 94 dec r0
161c2: 16 16 cp r1, r22
161c4: 17 06 cpc r1, r23
161c6: 18 06 cpc r1, r24
161c8: 09 06 cpc r0, r25
161ca: 08 95 ret
000161cc <__fp_pscB>:
161cc: 00 24 eor r0, r0
161ce: 0a 94 dec r0
161d0: 12 16 cp r1, r18
161d2: 13 06 cpc r1, r19
161d4: 14 06 cpc r1, r20
161d6: 05 06 cpc r0, r21
161d8: 08 95 ret
000161da <__fp_round>:
161da: 09 2e mov r0, r25
161dc: 03 94 inc r0
161de: 00 0c add r0, r0
161e0: 11 f4 brne .+4 ; 0x161e6 <__fp_round+0xc>
161e2: 88 23 and r24, r24
161e4: 52 f0 brmi .+20 ; 0x161fa <__fp_round+0x20>
161e6: bb 0f add r27, r27
161e8: 40 f4 brcc .+16 ; 0x161fa <__fp_round+0x20>
161ea: bf 2b or r27, r31
161ec: 11 f4 brne .+4 ; 0x161f2 <__fp_round+0x18>
161ee: 60 ff sbrs r22, 0
161f0: 04 c0 rjmp .+8 ; 0x161fa <__fp_round+0x20>
161f2: 6f 5f subi r22, 0xFF ; 255
161f4: 7f 4f sbci r23, 0xFF ; 255
161f6: 8f 4f sbci r24, 0xFF ; 255
161f8: 9f 4f sbci r25, 0xFF ; 255
161fa: 08 95 ret
000161fc <__fp_split3>:
161fc: 57 fd sbrc r21, 7
161fe: 90 58 subi r25, 0x80 ; 128
16200: 44 0f add r20, r20
16202: 55 1f adc r21, r21
16204: 59 f0 breq .+22 ; 0x1621c <__fp_splitA+0x10>
16206: 5f 3f cpi r21, 0xFF ; 255
16208: 71 f0 breq .+28 ; 0x16226 <__fp_splitA+0x1a>
1620a: 47 95 ror r20
0001620c <__fp_splitA>:
1620c: 88 0f add r24, r24
1620e: 97 fb bst r25, 7
16210: 99 1f adc r25, r25
16212: 61 f0 breq .+24 ; 0x1622c <__fp_splitA+0x20>
16214: 9f 3f cpi r25, 0xFF ; 255
16216: 79 f0 breq .+30 ; 0x16236 <__fp_splitA+0x2a>
16218: 87 95 ror r24
1621a: 08 95 ret
1621c: 12 16 cp r1, r18
1621e: 13 06 cpc r1, r19
16220: 14 06 cpc r1, r20
16222: 55 1f adc r21, r21
16224: f2 cf rjmp .-28 ; 0x1620a <__fp_split3+0xe>
16226: 46 95 lsr r20
16228: f1 df rcall .-30 ; 0x1620c <__fp_splitA>
1622a: 08 c0 rjmp .+16 ; 0x1623c <__fp_splitA+0x30>
1622c: 16 16 cp r1, r22
1622e: 17 06 cpc r1, r23
16230: 18 06 cpc r1, r24
16232: 99 1f adc r25, r25
16234: f1 cf rjmp .-30 ; 0x16218 <__fp_splitA+0xc>
16236: 86 95 lsr r24
16238: 71 05 cpc r23, r1
1623a: 61 05 cpc r22, r1
1623c: 08 94 sec
1623e: 08 95 ret
00016240 <__fp_zero>:
16240: e8 94 clt
00016242 <__fp_szero>:
16242: bb 27 eor r27, r27
16244: 66 27 eor r22, r22
16246: 77 27 eor r23, r23
16248: cb 01 movw r24, r22
1624a: 97 f9 bld r25, 7
1624c: 08 95 ret
0001624e <__mulsi3>:
1624e: db 01 movw r26, r22
16250: 8f 93 push r24
16252: 9f 93 push r25
16254: 9d d0 rcall .+314 ; 0x16390 <__muluhisi3>
16256: bf 91 pop r27
16258: af 91 pop r26
1625a: a2 9f mul r26, r18
1625c: 80 0d add r24, r0
1625e: 91 1d adc r25, r1
16260: a3 9f mul r26, r19
16262: 90 0d add r25, r0
16264: b2 9f mul r27, r18
16266: 90 0d add r25, r0
16268: 11 24 eor r1, r1
1626a: 08 95 ret
0001626c <__udivmodqi4>:
1626c: 99 1b sub r25, r25
1626e: 79 e0 ldi r23, 0x09 ; 9
16270: 04 c0 rjmp .+8 ; 0x1627a <__udivmodqi4_ep>
00016272 <__udivmodqi4_loop>:
16272: 99 1f adc r25, r25
16274: 96 17 cp r25, r22
16276: 08 f0 brcs .+2 ; 0x1627a <__udivmodqi4_ep>
16278: 96 1b sub r25, r22
0001627a <__udivmodqi4_ep>:
1627a: 88 1f adc r24, r24
1627c: 7a 95 dec r23
1627e: c9 f7 brne .-14 ; 0x16272 <__udivmodqi4_loop>
16280: 80 95 com r24
16282: 08 95 ret
00016284 <__udivmodhi4>:
16284: aa 1b sub r26, r26
16286: bb 1b sub r27, r27
16288: 51 e1 ldi r21, 0x11 ; 17
1628a: 07 c0 rjmp .+14 ; 0x1629a <__udivmodhi4_ep>
0001628c <__udivmodhi4_loop>:
1628c: aa 1f adc r26, r26
1628e: bb 1f adc r27, r27
16290: a6 17 cp r26, r22
16292: b7 07 cpc r27, r23
16294: 10 f0 brcs .+4 ; 0x1629a <__udivmodhi4_ep>
16296: a6 1b sub r26, r22
16298: b7 0b sbc r27, r23
0001629a <__udivmodhi4_ep>:
1629a: 88 1f adc r24, r24
1629c: 99 1f adc r25, r25
1629e: 5a 95 dec r21
162a0: a9 f7 brne .-22 ; 0x1628c <__udivmodhi4_loop>
162a2: 80 95 com r24
162a4: 90 95 com r25
162a6: bc 01 movw r22, r24
162a8: cd 01 movw r24, r26
162aa: 08 95 ret
000162ac <__divmodhi4>:
162ac: 97 fb bst r25, 7
162ae: 07 2e mov r0, r23
162b0: 16 f4 brtc .+4 ; 0x162b6 <__divmodhi4+0xa>
162b2: 00 94 com r0
162b4: 06 d0 rcall .+12 ; 0x162c2 <__divmodhi4_neg1>
162b6: 77 fd sbrc r23, 7
162b8: 08 d0 rcall .+16 ; 0x162ca <__divmodhi4_neg2>
162ba: e4 df rcall .-56 ; 0x16284 <__udivmodhi4>
162bc: 07 fc sbrc r0, 7
162be: 05 d0 rcall .+10 ; 0x162ca <__divmodhi4_neg2>
162c0: 3e f4 brtc .+14 ; 0x162d0 <__divmodhi4_exit>
000162c2 <__divmodhi4_neg1>:
162c2: 90 95 com r25
162c4: 81 95 neg r24
162c6: 9f 4f sbci r25, 0xFF ; 255
162c8: 08 95 ret
000162ca <__divmodhi4_neg2>:
162ca: 70 95 com r23
162cc: 61 95 neg r22
162ce: 7f 4f sbci r23, 0xFF ; 255
000162d0 <__divmodhi4_exit>:
162d0: 08 95 ret
000162d2 <__udivmodsi4>:
162d2: a1 e2 ldi r26, 0x21 ; 33
162d4: 1a 2e mov r1, r26
162d6: aa 1b sub r26, r26
162d8: bb 1b sub r27, r27
162da: fd 01 movw r30, r26
162dc: 0d c0 rjmp .+26 ; 0x162f8 <__udivmodsi4_ep>
000162de <__udivmodsi4_loop>:
162de: aa 1f adc r26, r26
162e0: bb 1f adc r27, r27
162e2: ee 1f adc r30, r30
162e4: ff 1f adc r31, r31
162e6: a2 17 cp r26, r18
162e8: b3 07 cpc r27, r19
162ea: e4 07 cpc r30, r20
162ec: f5 07 cpc r31, r21
162ee: 20 f0 brcs .+8 ; 0x162f8 <__udivmodsi4_ep>
162f0: a2 1b sub r26, r18
162f2: b3 0b sbc r27, r19
162f4: e4 0b sbc r30, r20
162f6: f5 0b sbc r31, r21
000162f8 <__udivmodsi4_ep>:
162f8: 66 1f adc r22, r22
162fa: 77 1f adc r23, r23
162fc: 88 1f adc r24, r24
162fe: 99 1f adc r25, r25
16300: 1a 94 dec r1
16302: 69 f7 brne .-38 ; 0x162de <__udivmodsi4_loop>
16304: 60 95 com r22
16306: 70 95 com r23
16308: 80 95 com r24
1630a: 90 95 com r25
1630c: 9b 01 movw r18, r22
1630e: ac 01 movw r20, r24
16310: bd 01 movw r22, r26
16312: cf 01 movw r24, r30
16314: 08 95 ret
00016316 <__divmodsi4>:
16316: 05 2e mov r0, r21
16318: 97 fb bst r25, 7
1631a: 16 f4 brtc .+4 ; 0x16320 <__divmodsi4+0xa>
1631c: 00 94 com r0
1631e: 0f d0 rcall .+30 ; 0x1633e <__negsi2>
16320: 57 fd sbrc r21, 7
16322: 05 d0 rcall .+10 ; 0x1632e <__divmodsi4_neg2>
16324: d6 df rcall .-84 ; 0x162d2 <__udivmodsi4>
16326: 07 fc sbrc r0, 7
16328: 02 d0 rcall .+4 ; 0x1632e <__divmodsi4_neg2>
1632a: 46 f4 brtc .+16 ; 0x1633c <__divmodsi4_exit>
1632c: 08 c0 rjmp .+16 ; 0x1633e <__negsi2>
0001632e <__divmodsi4_neg2>:
1632e: 50 95 com r21
16330: 40 95 com r20
16332: 30 95 com r19
16334: 21 95 neg r18
16336: 3f 4f sbci r19, 0xFF ; 255
16338: 4f 4f sbci r20, 0xFF ; 255
1633a: 5f 4f sbci r21, 0xFF ; 255
0001633c <__divmodsi4_exit>:
1633c: 08 95 ret
0001633e <__negsi2>:
1633e: 90 95 com r25
16340: 80 95 com r24
16342: 70 95 com r23
16344: 61 95 neg r22
16346: 7f 4f sbci r23, 0xFF ; 255
16348: 8f 4f sbci r24, 0xFF ; 255
1634a: 9f 4f sbci r25, 0xFF ; 255
1634c: 08 95 ret
0001634e <__tablejump2__>:
1634e: ee 0f add r30, r30
16350: ff 1f adc r31, r31
00016352 <__tablejump__>:
16352: 05 90 lpm r0, Z+
16354: f4 91 lpm r31, Z
16356: e0 2d mov r30, r0
16358: 09 94 ijmp
0001635a <__mulhisi3>:
1635a: 05 d0 rcall .+10 ; 0x16366 <__umulhisi3>
1635c: 33 23 and r19, r19
1635e: 12 f4 brpl .+4 ; 0x16364 <__mulhisi3+0xa>
16360: 8a 1b sub r24, r26
16362: 9b 0b sbc r25, r27
16364: 10 c0 rjmp .+32 ; 0x16386 <__usmulhisi3_tail>
00016366 <__umulhisi3>:
16366: a2 9f mul r26, r18
16368: b0 01 movw r22, r0
1636a: b3 9f mul r27, r19
1636c: c0 01 movw r24, r0
1636e: a3 9f mul r26, r19
16370: 70 0d add r23, r0
16372: 81 1d adc r24, r1
16374: 11 24 eor r1, r1
16376: 91 1d adc r25, r1
16378: b2 9f mul r27, r18
1637a: 70 0d add r23, r0
1637c: 81 1d adc r24, r1
1637e: 11 24 eor r1, r1
16380: 91 1d adc r25, r1
16382: 08 95 ret
00016384 <__usmulhisi3>:
16384: f0 df rcall .-32 ; 0x16366 <__umulhisi3>
00016386 <__usmulhisi3_tail>:
16386: b7 ff sbrs r27, 7
16388: 08 95 ret
1638a: 82 1b sub r24, r18
1638c: 93 0b sbc r25, r19
1638e: 08 95 ret
00016390 <__muluhisi3>:
16390: ea df rcall .-44 ; 0x16366 <__umulhisi3>
16392: a5 9f mul r26, r21
16394: 90 0d add r25, r0
16396: b4 9f mul r27, r20
16398: 90 0d add r25, r0
1639a: a4 9f mul r26, r20
1639c: 80 0d add r24, r0
1639e: 91 1d adc r25, r1
163a0: 11 24 eor r1, r1
163a2: 08 95 ret
000163a4 <__mulshisi3>:
163a4: b7 ff sbrs r27, 7
163a6: f4 cf rjmp .-24 ; 0x16390 <__muluhisi3>
000163a8 <__mulohisi3>:
163a8: f3 df rcall .-26 ; 0x16390 <__muluhisi3>
163aa: 82 1b sub r24, r18
163ac: 93 0b sbc r25, r19
163ae: 08 95 ret
000163b0 <__prologue_saves__>:
163b0: 2f 92 push r2
163b2: 3f 92 push r3
163b4: 4f 92 push r4
163b6: 5f 92 push r5
163b8: 6f 92 push r6
163ba: 7f 92 push r7
163bc: 8f 92 push r8
163be: 9f 92 push r9
163c0: af 92 push r10
163c2: bf 92 push r11
163c4: cf 92 push r12
163c6: df 92 push r13
163c8: ef 92 push r14
163ca: ff 92 push r15
163cc: 0f 93 push r16
163ce: 1f 93 push r17
163d0: cf 93 push r28
163d2: df 93 push r29
163d4: cd b7 in r28, 0x3d ; 61
163d6: de b7 in r29, 0x3e ; 62
163d8: ca 1b sub r28, r26
163da: db 0b sbc r29, r27
163dc: 0f b6 in r0, 0x3f ; 63
163de: f8 94 cli
163e0: de bf out 0x3e, r29 ; 62
163e2: 0f be out 0x3f, r0 ; 63
163e4: cd bf out 0x3d, r28 ; 61
163e6: 09 94 ijmp
000163e8 <__epilogue_restores__>:
163e8: 2a 88 ldd r2, Y+18 ; 0x12
163ea: 39 88 ldd r3, Y+17 ; 0x11
163ec: 48 88 ldd r4, Y+16 ; 0x10
163ee: 5f 84 ldd r5, Y+15 ; 0x0f
163f0: 6e 84 ldd r6, Y+14 ; 0x0e
163f2: 7d 84 ldd r7, Y+13 ; 0x0d
163f4: 8c 84 ldd r8, Y+12 ; 0x0c
163f6: 9b 84 ldd r9, Y+11 ; 0x0b
163f8: aa 84 ldd r10, Y+10 ; 0x0a
163fa: b9 84 ldd r11, Y+9 ; 0x09
163fc: c8 84 ldd r12, Y+8 ; 0x08
163fe: df 80 ldd r13, Y+7 ; 0x07
16400: ee 80 ldd r14, Y+6 ; 0x06
16402: fd 80 ldd r15, Y+5 ; 0x05
16404: 0c 81 ldd r16, Y+4 ; 0x04
16406: 1b 81 ldd r17, Y+3 ; 0x03
16408: aa 81 ldd r26, Y+2 ; 0x02
1640a: b9 81 ldd r27, Y+1 ; 0x01
1640c: ce 0f add r28, r30
1640e: d1 1d adc r29, r1
16410: 0f b6 in r0, 0x3f ; 63
16412: f8 94 cli
16414: de bf out 0x3e, r29 ; 62
16416: 0f be out 0x3f, r0 ; 63
16418: cd bf out 0x3d, r28 ; 61
1641a: ed 01 movw r28, r26
1641c: 08 95 ret
0001641e <memcpy_P>:
1641e: fb 01 movw r30, r22
16420: dc 01 movw r26, r24
16422: 02 c0 rjmp .+4 ; 0x16428 <memcpy_P+0xa>
16424: 05 90 lpm r0, Z+
16426: 0d 92 st X+, r0
16428: 41 50 subi r20, 0x01 ; 1
1642a: 50 40 sbci r21, 0x00 ; 0
1642c: d8 f7 brcc .-10 ; 0x16424 <memcpy_P+0x6>
1642e: 08 95 ret
00016430 <memchr>:
16430: fc 01 movw r30, r24
16432: 41 50 subi r20, 0x01 ; 1
16434: 50 40 sbci r21, 0x00 ; 0
16436: 30 f0 brcs .+12 ; 0x16444 <memchr+0x14>
16438: 01 90 ld r0, Z+
1643a: 06 16 cp r0, r22
1643c: d1 f7 brne .-12 ; 0x16432 <memchr+0x2>
1643e: 31 97 sbiw r30, 0x01 ; 1
16440: cf 01 movw r24, r30
16442: 08 95 ret
16444: 88 27 eor r24, r24
16446: 99 27 eor r25, r25
16448: 08 95 ret
0001644a <memcpy>:
1644a: fb 01 movw r30, r22
1644c: dc 01 movw r26, r24
1644e: 02 c0 rjmp .+4 ; 0x16454 <memcpy+0xa>
16450: 01 90 ld r0, Z+
16452: 0d 92 st X+, r0
16454: 41 50 subi r20, 0x01 ; 1
16456: 50 40 sbci r21, 0x00 ; 0
16458: d8 f7 brcc .-10 ; 0x16450 <memcpy+0x6>
1645a: 08 95 ret
0001645c <__eerd_block_m1284>:
1645c: dc 01 movw r26, r24
1645e: cb 01 movw r24, r22
00016460 <__eerd_blraw_m1284>:
16460: fc 01 movw r30, r24
16462: f9 99 sbic 0x1f, 1 ; 31
16464: fe cf rjmp .-4 ; 0x16462 <__eerd_blraw_m1284+0x2>
16466: 06 c0 rjmp .+12 ; 0x16474 <__eerd_blraw_m1284+0x14>
16468: f2 bd out 0x22, r31 ; 34
1646a: e1 bd out 0x21, r30 ; 33
1646c: f8 9a sbi 0x1f, 0 ; 31
1646e: 31 96 adiw r30, 0x01 ; 1
16470: 00 b4 in r0, 0x20 ; 32
16472: 0d 92 st X+, r0
16474: 41 50 subi r20, 0x01 ; 1
16476: 50 40 sbci r21, 0x00 ; 0
16478: b8 f7 brcc .-18 ; 0x16468 <__eerd_blraw_m1284+0x8>
1647a: 08 95 ret
0001647c <__eerd_byte_m1284>:
1647c: f9 99 sbic 0x1f, 1 ; 31
1647e: fe cf rjmp .-4 ; 0x1647c <__eerd_byte_m1284>
16480: 92 bd out 0x22, r25 ; 34
16482: 81 bd out 0x21, r24 ; 33
16484: f8 9a sbi 0x1f, 0 ; 31
16486: 99 27 eor r25, r25
16488: 80 b5 in r24, 0x20 ; 32
1648a: 08 95 ret
0001648c <__eerd_word_m1284>:
1648c: a8 e1 ldi r26, 0x18 ; 24
1648e: b0 e0 ldi r27, 0x00 ; 0
16490: 42 e0 ldi r20, 0x02 ; 2
16492: 50 e0 ldi r21, 0x00 ; 0
16494: e5 cf rjmp .-54 ; 0x16460 <__eerd_blraw_m1284>
00016496 <__eewr_block_m1284>:
16496: dc 01 movw r26, r24
16498: cb 01 movw r24, r22
1649a: 02 c0 rjmp .+4 ; 0x164a0 <__eewr_block_m1284+0xa>
1649c: 2d 91 ld r18, X+
1649e: 05 d0 rcall .+10 ; 0x164aa <__eewr_r18_m1284>
164a0: 41 50 subi r20, 0x01 ; 1
164a2: 50 40 sbci r21, 0x00 ; 0
164a4: d8 f7 brcc .-10 ; 0x1649c <__eewr_block_m1284+0x6>
164a6: 08 95 ret
000164a8 <__eewr_byte_m1284>:
164a8: 26 2f mov r18, r22
000164aa <__eewr_r18_m1284>:
164aa: f9 99 sbic 0x1f, 1 ; 31
164ac: fe cf rjmp .-4 ; 0x164aa <__eewr_r18_m1284>
164ae: 1f ba out 0x1f, r1 ; 31
164b0: 92 bd out 0x22, r25 ; 34
164b2: 81 bd out 0x21, r24 ; 33
164b4: 20 bd out 0x20, r18 ; 32
164b6: 0f b6 in r0, 0x3f ; 63
164b8: f8 94 cli
164ba: fa 9a sbi 0x1f, 2 ; 31
164bc: f9 9a sbi 0x1f, 1 ; 31
164be: 0f be out 0x3f, r0 ; 63
164c0: 01 96 adiw r24, 0x01 ; 1
164c2: 08 95 ret
000164c4 <__eewr_word_m1284>:
164c4: f1 df rcall .-30 ; 0x164a8 <__eewr_byte_m1284>
164c6: 27 2f mov r18, r23
164c8: f0 cf rjmp .-32 ; 0x164aa <__eewr_r18_m1284>
000164ca <_exit>:
164ca: f8 94 cli
000164cc <__stop_program>:
164cc: ff cf rjmp .-2 ; 0x164cc <__stop_program>