2 datalog.elf: file format elf32-avr
\r
5 Idx Name Size VMA LMA File off Algn
\r
6 0 .data 00000052 00800100 000010f4 00001188 2**0
\r
7 CONTENTS, ALLOC, LOAD, DATA
\r
8 1 .text 000010f4 00000000 00000000 00000094 2**1
\r
9 CONTENTS, ALLOC, LOAD, READONLY, CODE
\r
10 2 .bss 00000051 00800152 00800152 000011da 2**0
\r
12 3 .debug_aranges 00000140 00000000 00000000 000011da 2**0
\r
13 CONTENTS, READONLY, DEBUGGING
\r
14 4 .debug_pubnames 00000367 00000000 00000000 0000131a 2**0
\r
15 CONTENTS, READONLY, DEBUGGING
\r
16 5 .debug_info 000012e8 00000000 00000000 00001681 2**0
\r
17 CONTENTS, READONLY, DEBUGGING
\r
18 6 .debug_abbrev 00000a2f 00000000 00000000 00002969 2**0
\r
19 CONTENTS, READONLY, DEBUGGING
\r
20 7 .debug_line 000011e0 00000000 00000000 00003398 2**0
\r
21 CONTENTS, READONLY, DEBUGGING
\r
22 8 .debug_frame 000002d0 00000000 00000000 00004578 2**2
\r
23 CONTENTS, READONLY, DEBUGGING
\r
24 9 .debug_str 0000046a 00000000 00000000 00004848 2**0
\r
25 CONTENTS, READONLY, DEBUGGING
\r
26 10 .debug_loc 0000080b 00000000 00000000 00004cb2 2**0
\r
27 CONTENTS, READONLY, DEBUGGING
\r
28 11 .debug_ranges 00000018 00000000 00000000 000054bd 2**0
\r
29 CONTENTS, READONLY, DEBUGGING
\r
31 Disassembly of section .text:
\r
33 00000000 <__vectors>:
\r
34 0: 0c 94 64 00 jmp 0xc8 ; 0xc8 <__ctors_end>
\r
35 4: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
36 8: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
37 c: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
38 10: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
39 14: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
40 18: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
41 1c: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
42 20: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
43 24: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
44 28: 0c 94 fc 03 jmp 0x7f8 ; 0x7f8 <__vector_10>
\r
45 2c: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
46 30: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
47 34: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
48 38: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
49 3c: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
50 40: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
51 44: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
52 48: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
53 4c: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
54 50: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
55 54: 0c 94 81 00 jmp 0x102 ; 0x102 <__bad_interrupt>
\r
56 58: 0c 94 5b 01 jmp 0x2b6 ; 0x2b6 <__vector_22>
\r
58 0000005c <LCD_character_table>:
\r
59 5c: 51 0a 80 2a 00 00 00 0a 00 ff 00 00 59 55 18 01 Q..*........YU..
\r
60 6c: 11 1e 11 1b 50 0b 41 1b 41 1f 11 01 51 1f 51 1b ....P.A.A...Q.Q.
\r
62 88: 00 00 51 0f 91 39 41 14 91 31 41 1e 41 0e 41 1d ..Q..9A..1A.A.A.
\r
64 a8: 51 0e 51 95 51 8e 21 90 81 20 50 15 48 44 50 c5 Q.Q.Q.!.. P.HDP.
\r
65 b8: 28 c0 28 20 09 50 00 00 00 00 00 00 00 00 00 00 (.( .P..........
\r
67 000000c8 <__ctors_end>:
\r
68 c8: 11 24 eor r1, r1
\r
69 ca: 1f be out 0x3f, r1 ; 63
\r
70 cc: cf ef ldi r28, 0xFF ; 255
\r
71 ce: d4 e0 ldi r29, 0x04 ; 4
\r
72 d0: de bf out 0x3e, r29 ; 62
\r
73 d2: cd bf out 0x3d, r28 ; 61
\r
75 000000d4 <__do_copy_data>:
\r
76 d4: 11 e0 ldi r17, 0x01 ; 1
\r
77 d6: a0 e0 ldi r26, 0x00 ; 0
\r
78 d8: b1 e0 ldi r27, 0x01 ; 1
\r
79 da: e4 ef ldi r30, 0xF4 ; 244
\r
80 dc: f0 e1 ldi r31, 0x10 ; 16
\r
81 de: 02 c0 rjmp .+4 ; 0xe4 <.do_copy_data_start>
\r
83 000000e0 <.do_copy_data_loop>:
\r
84 e0: 05 90 lpm r0, Z+
\r
87 000000e4 <.do_copy_data_start>:
\r
88 e4: a2 35 cpi r26, 0x52 ; 82
\r
89 e6: b1 07 cpc r27, r17
\r
90 e8: d9 f7 brne .-10 ; 0xe0 <.do_copy_data_loop>
\r
92 000000ea <__do_clear_bss>:
\r
93 ea: 11 e0 ldi r17, 0x01 ; 1
\r
94 ec: a2 e5 ldi r26, 0x52 ; 82
\r
95 ee: b1 e0 ldi r27, 0x01 ; 1
\r
96 f0: 01 c0 rjmp .+2 ; 0xf4 <.do_clear_bss_start>
\r
98 000000f2 <.do_clear_bss_loop>:
\r
101 000000f4 <.do_clear_bss_start>:
\r
102 f4: a3 3a cpi r26, 0xA3 ; 163
\r
103 f6: b1 07 cpc r27, r17
\r
104 f8: e1 f7 brne .-8 ; 0xf2 <.do_clear_bss_loop>
\r
105 fa: 0e 94 da 03 call 0x7b4 ; 0x7b4 <main>
\r
106 fe: 0c 94 78 08 jmp 0x10f0 ; 0x10f0 <_exit>
\r
108 00000102 <__bad_interrupt>:
\r
109 102: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
\r
111 00000106 <ADC_read>:
\r
113 * Purpose : Do a Analog to Digital Conversion
\r
115 *****************************************************************************/
\r
116 uint ADC_read(uint8 input)
\r
118 106: df 92 push r13
\r
119 108: ef 92 push r14
\r
120 10a: ff 92 push r15
\r
121 10c: 0f 93 push r16
\r
122 10e: 1f 93 push r17
\r
123 110: d8 2e mov r13, r24
\r
126 112: 80 93 7c 00 sts 0x007C, r24
\r
128 116: 41 e0 ldi r20, 0x01 ; 1
\r
129 118: 84 17 cp r24, r20
\r
130 11a: 51 f4 brne .+20 ; 0x130 <ADC_read+0x2a>
\r
132 ADMUX |= (1<<REFS0) | (1<<REFS1);
\r
133 11c: 80 91 7c 00 lds r24, 0x007C
\r
134 120: 80 6c ori r24, 0xC0 ; 192
\r
135 122: 80 93 7c 00 sts 0x007C, r24
\r
137 126: 2b 99 sbic 0x05, 3 ; 5
\r
138 128: fe cf rjmp .-4 ; 0x126 <ADC_read+0x20>
\r
140 12a: 2b 9b sbis 0x05, 3 ; 5
\r
141 12c: fe cf rjmp .-4 ; 0x12a <ADC_read+0x24>
\r
142 12e: 0a c0 rjmp .+20 ; 0x144 <ADC_read+0x3e>
\r
146 ADMUX |= (1<<REFS0);
\r
147 130: 80 91 7c 00 lds r24, 0x007C
\r
148 134: 80 64 ori r24, 0x40 ; 64
\r
149 136: 80 93 7c 00 sts 0x007C, r24
\r
150 ADMUX &= ~(1<<REFS1);
\r
151 13a: 80 91 7c 00 lds r24, 0x007C
\r
152 13e: 8f 77 andi r24, 0x7F ; 127
\r
153 140: 80 93 7c 00 sts 0x007C, r24
\r
159 ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);
\r
160 144: 83 e8 ldi r24, 0x83 ; 131
\r
161 146: 80 93 7a 00 sts 0x007A, r24
\r
163 //do a dummy readout first
\r
164 ADCSRA |= (1<<ADSC); // do single conversion
\r
165 14a: 80 91 7a 00 lds r24, 0x007A
\r
166 14e: 80 64 ori r24, 0x40 ; 64
\r
167 150: 80 93 7a 00 sts 0x007A, r24
\r
168 while(!(ADCSRA & 0x10)); // wait for conversion done, ADIF flag active
\r
169 154: 80 91 7a 00 lds r24, 0x007A
\r
170 158: 84 ff sbrs r24, 4
\r
171 15a: fc cf rjmp .-8 ; 0x154 <ADC_read+0x4e>
\r
173 for(i=0;i<setup.adc_averages;i++) // do several ADC conversions, for averaging
\r
174 15c: 20 91 87 01 lds r18, 0x0187
\r
175 160: 30 91 88 01 lds r19, 0x0188
\r
176 164: 60 e0 ldi r22, 0x00 ; 0
\r
177 166: ee 24 eor r14, r14
\r
178 168: ff 24 eor r15, r15
\r
179 16a: 87 01 movw r16, r14
\r
180 16c: 1a c0 rjmp .+52 ; 0x1a2 <ADC_read+0x9c>
\r
182 ADCSRA |= (1<<ADSC); // do single conversion
\r
183 16e: 80 91 7a 00 lds r24, 0x007A
\r
184 172: 80 64 ori r24, 0x40 ; 64
\r
185 174: 80 93 7a 00 sts 0x007A, r24
\r
186 while(!(ADCSRA & 0x10)); // wait for conversion done, ADIF flag active
\r
187 178: 80 91 7a 00 lds r24, 0x007A
\r
188 17c: 84 ff sbrs r24, 4
\r
189 17e: fc cf rjmp .-8 ; 0x178 <ADC_read+0x72>
\r
191 ADC_temp = ADCL; // read out ADCL register
\r
192 180: 90 91 78 00 lds r25, 0x0078
\r
193 ADC_temp += (ADCH << 8); // read out ADCH register
\r
194 184: 80 91 79 00 lds r24, 0x0079
\r
196 ADCr += ADC_temp; // accumulate result
\r
197 188: f8 2f mov r31, r24
\r
198 18a: e0 e0 ldi r30, 0x00 ; 0
\r
199 18c: af 01 movw r20, r30
\r
200 18e: 49 0f add r20, r25
\r
201 190: 51 1d adc r21, r1
\r
202 192: ca 01 movw r24, r20
\r
203 194: a0 e0 ldi r26, 0x00 ; 0
\r
204 196: b0 e0 ldi r27, 0x00 ; 0
\r
205 198: e8 0e add r14, r24
\r
206 19a: f9 1e adc r15, r25
\r
207 19c: 0a 1f adc r16, r26
\r
208 19e: 1b 1f adc r17, r27
\r
210 //do a dummy readout first
\r
211 ADCSRA |= (1<<ADSC); // do single conversion
\r
212 while(!(ADCSRA & 0x10)); // wait for conversion done, ADIF flag active
\r
214 for(i=0;i<setup.adc_averages;i++) // do several ADC conversions, for averaging
\r
215 1a0: 6f 5f subi r22, 0xFF ; 255
\r
216 1a2: 86 2f mov r24, r22
\r
217 1a4: 90 e0 ldi r25, 0x00 ; 0
\r
218 1a6: 82 17 cp r24, r18
\r
219 1a8: 93 07 cpc r25, r19
\r
220 1aa: 08 f3 brcs .-62 ; 0x16e <ADC_read+0x68>
\r
221 ADC_temp = ADCL; // read out ADCL register
\r
222 ADC_temp += (ADCH << 8); // read out ADCH register
\r
224 ADCr += ADC_temp; // accumulate result
\r
226 ADCr = ADCr / setup.adc_averages; // average the samples
\r
227 1ac: 40 e0 ldi r20, 0x00 ; 0
\r
228 1ae: 50 e0 ldi r21, 0x00 ; 0
\r
229 1b0: c8 01 movw r24, r16
\r
230 1b2: b7 01 movw r22, r14
\r
231 1b4: 0e 94 30 08 call 0x1060 ; 0x1060 <__udivmodsi4>
\r
232 1b8: 93 2f mov r25, r19
\r
236 ADCSRA &= ~(1<<ADEN); // disable the ADC
\r
237 1ba: 80 91 7a 00 lds r24, 0x007A
\r
238 1be: 8f 77 andi r24, 0x7F ; 127
\r
239 1c0: 80 93 7a 00 sts 0x007A, r24
\r
241 setup.adc_values[input] = ADCr;
\r
242 1c4: ed 2d mov r30, r13
\r
243 1c6: f0 e0 ldi r31, 0x00 ; 0
\r
244 1c8: ee 0f add r30, r30
\r
245 1ca: ff 1f adc r31, r31
\r
246 1cc: ed 56 subi r30, 0x6D ; 109
\r
247 1ce: fe 4f sbci r31, 0xFE ; 254
\r
248 1d0: 82 2f mov r24, r18
\r
249 1d2: 80 83 st Z, r24
\r
250 1d4: 31 83 std Z+1, r19 ; 0x01
\r
261 000001e2 <LCD_WriteDigit>:
\r
262 * Purpose : Stores LCD control data in the LCD_displayData buffer.
\r
263 * (The LCD_displayData is latched in the LCD_SOF interrupt.)
\r
265 *****************************************************************************/
\r
266 void LCD_WriteDigit(char c, char digit)
\r
268 1e2: cf 93 push r28
\r
269 1e4: df 93 push r29
\r
270 1e6: 98 2f mov r25, r24
\r
272 volatile char *ptr;
\r
276 if (digit > 5) // Skip if digit is illegal
\r
277 1e8: 66 30 cpi r22, 0x06 ; 6
\r
278 1ea: c8 f5 brcc .+114 ; 0x25e <LCD_WriteDigit+0x7c>
\r
281 //Lookup character table for segmet data
\r
282 if ((c >= '*') && (c <= 'z'))
\r
283 1ec: 8a 52 subi r24, 0x2A ; 42
\r
284 1ee: 81 35 cpi r24, 0x51 ; 81
\r
285 1f0: 18 f0 brcs .+6 ; 0x1f8 <LCD_WriteDigit+0x16>
\r
286 1f2: a0 e0 ldi r26, 0x00 ; 0
\r
287 1f4: b0 e0 ldi r27, 0x00 ; 0
\r
288 1f6: 0c c0 rjmp .+24 ; 0x210 <LCD_WriteDigit+0x2e>
\r
291 if (c >= 'a') // Convert to upper case
\r
292 1f8: 91 36 cpi r25, 0x61 ; 97
\r
293 1fa: 08 f0 brcs .+2 ; 0x1fe <LCD_WriteDigit+0x1c>
\r
294 c &= ~0x20; // if necessarry
\r
295 1fc: 9f 7d andi r25, 0xDF ; 223
\r
299 //mt seg = LCD_character_table[c];
\r
300 seg = (unsigned int) pgm_read_word(&LCD_character_table[(uint8_t)c]);
\r
301 1fe: 9a 52 subi r25, 0x2A ; 42
\r
302 200: e9 2f mov r30, r25
\r
303 202: f0 e0 ldi r31, 0x00 ; 0
\r
304 204: ee 0f add r30, r30
\r
305 206: ff 1f adc r31, r31
\r
306 208: e4 5a subi r30, 0xA4 ; 164
\r
307 20a: ff 4f sbci r31, 0xFF ; 255
\r
308 20c: a5 91 lpm r26, Z+
\r
309 20e: b4 91 lpm r27, Z+
\r
312 // Adjust mask according to LCD segment mapping
\r
314 210: 86 2f mov r24, r22
\r
315 212: 90 e0 ldi r25, 0x00 ; 0
\r
316 214: ec 01 movw r28, r24
\r
317 216: c1 70 andi r28, 0x01 ; 1
\r
318 218: d0 70 andi r29, 0x00 ; 0
\r
319 21a: 60 fd sbrc r22, 0
\r
320 21c: 02 c0 rjmp .+4 ; 0x222 <LCD_WriteDigit+0x40>
\r
321 21e: 90 ef ldi r25, 0xF0 ; 240
\r
322 220: 01 c0 rjmp .+2 ; 0x224 <LCD_WriteDigit+0x42>
\r
323 222: 9f e0 ldi r25, 0x0F ; 15
\r
324 mask = 0x0F; // Digit 1, 3, 5
\r
326 mask = 0xF0; // Digit 0, 2, 4
\r
328 ptr = LCD_Data + (digit >> 1); // digit = {0,0,1,1,2,2}
\r
330 226: 70 e0 ldi r23, 0x00 ; 0
\r
331 228: 69 5a subi r22, 0xA9 ; 169
\r
332 22a: 7e 4f sbci r23, 0xFE ; 254
\r
333 22c: 20 e0 ldi r18, 0x00 ; 0
\r
334 22e: 30 e0 ldi r19, 0x00 ; 0
\r
335 230: fb 01 movw r30, r22
\r
336 232: e2 0f add r30, r18
\r
337 234: f3 1f adc r31, r19
\r
339 for (i = 0; i < 4; i++)
\r
341 nibble = seg & 0x000F;
\r
342 236: 4a 2f mov r20, r26
\r
343 238: 4f 70 andi r20, 0x0F ; 15
\r
345 23a: 84 e0 ldi r24, 0x04 ; 4
\r
349 242: e1 f7 brne .-8 ; 0x23c <LCD_WriteDigit+0x5a>
\r
351 244: 20 97 sbiw r28, 0x00 ; 0
\r
352 246: 11 f0 breq .+4 ; 0x24c <LCD_WriteDigit+0x6a>
\r
354 248: 42 95 swap r20
\r
355 24a: 40 7f andi r20, 0xF0 ; 240
\r
356 *ptr = (*ptr & mask) | nibble;
\r
357 24c: 80 81 ld r24, Z
\r
358 24e: 89 23 and r24, r25
\r
359 250: 48 2b or r20, r24
\r
360 252: 40 83 st Z, r20
\r
361 254: 2b 5f subi r18, 0xFB ; 251
\r
362 256: 3f 4f sbci r19, 0xFF ; 255
\r
364 mask = 0xF0; // Digit 0, 2, 4
\r
366 ptr = LCD_Data + (digit >> 1); // digit = {0,0,1,1,2,2}
\r
368 for (i = 0; i < 4; i++)
\r
369 258: 24 31 cpi r18, 0x14 ; 20
\r
370 25a: 31 05 cpc r19, r1
\r
371 25c: 49 f7 brne .-46 ; 0x230 <LCD_WriteDigit+0x4e>
\r
374 *ptr = (*ptr & mask) | nibble;
\r
382 00000264 <LCD_AllSegments>:
\r
383 *****************************************************************************/
\r
384 void LCD_AllSegments(char show)
\r
389 264: 81 11 cpse r24, r1
\r
390 266: 8f ef ldi r24, 0xFF ; 255
\r
391 268: 20 e0 ldi r18, 0x00 ; 0
\r
392 26a: 30 e0 ldi r19, 0x00 ; 0
\r
393 26c: f9 01 movw r30, r18
\r
394 26e: e9 5a subi r30, 0xA9 ; 169
\r
395 270: fe 4f sbci r31, 0xFE ; 254
\r
398 // Set/clear all bits in all LCD registers
\r
399 for (i=0; i < LCD_REGISTER_COUNT; i++)
\r
400 *(LCD_Data + i) = show;
\r
401 272: 80 83 st Z, r24
\r
402 274: 2f 5f subi r18, 0xFF ; 255
\r
403 276: 3f 4f sbci r19, 0xFF ; 255
\r
408 // Set/clear all bits in all LCD registers
\r
409 for (i=0; i < LCD_REGISTER_COUNT; i++)
\r
410 278: 24 31 cpi r18, 0x14 ; 20
\r
411 27a: 31 05 cpc r19, r1
\r
412 27c: b9 f7 brne .-18 ; 0x26c <LCD_AllSegments+0x8>
\r
413 *(LCD_Data + i) = show;
\r
417 00000280 <LCD_Init>:
\r
418 * Set up the LCD (timing, contrast, etc.)
\r
420 *****************************************************************************/
\r
421 void LCD_Init(void)
\r
423 LCD_AllSegments(FALSE); // Clear segment buffer.
\r
424 280: 80 e0 ldi r24, 0x00 ; 0
\r
425 282: 0e 94 32 01 call 0x264 ; 0x264 <LCD_AllSegments>
\r
427 LCD_CONTRAST_LEVEL(LCD_INITIAL_CONTRAST); //Set the LCD contrast level
\r
428 286: a7 ee ldi r26, 0xE7 ; 231
\r
429 288: b0 e0 ldi r27, 0x00 ; 0
\r
430 28a: 8c 91 ld r24, X
\r
431 28c: 8f 60 ori r24, 0x0F ; 15
\r
432 28e: 8c 93 st X, r24
\r
434 // Select asynchronous clock source, enable all COM pins and enable all
\r
436 LCDCRB = (1<<LCDCS) | (3<<LCDMUX0) | (7<<LCDPM0);
\r
437 290: 87 eb ldi r24, 0xB7 ; 183
\r
438 292: 80 93 e5 00 sts 0x00E5, r24
\r
440 // Set LCD prescaler to give a framerate of 32,0 Hz
\r
441 LCDFRR = (0<<LCDPS0) | (7<<LCDCD0);
\r
442 296: 87 e0 ldi r24, 0x07 ; 7
\r
443 298: 80 93 e6 00 sts 0x00E6, r24
\r
445 LCDCRA = (1<<LCDEN) | (1<<LCDAB); // Enable LCD and set low power waveform
\r
446 29c: e4 ee ldi r30, 0xE4 ; 228
\r
447 29e: f0 e0 ldi r31, 0x00 ; 0
\r
448 2a0: 80 ec ldi r24, 0xC0 ; 192
\r
449 2a2: 80 83 st Z, r24
\r
451 //Enable LCD start of frame interrupt
\r
452 LCDCRA |= (1<<LCDIE);
\r
453 2a4: 80 81 ld r24, Z
\r
454 2a6: 88 60 ori r24, 0x08 ; 8
\r
455 2a8: 80 83 st Z, r24
\r
457 //updated 2006-10-10, setting LCD drive time to 1150us in FW rev 07,
\r
458 //instead of previous 300us in FW rev 06. Due to some variations on the LCD
\r
459 //glass provided to the AVR Butterfly production.
\r
460 LCDCCR |= (1<<LCDDC2) | (1<<LCDDC1) | (1<<LCDDC0);
\r
461 2aa: 8c 91 ld r24, X
\r
462 2ac: 80 6e ori r24, 0xE0 ; 224
\r
463 2ae: 8c 93 st X, r24
\r
465 gLCD_Update_Required = FALSE;
\r
466 2b0: 10 92 52 01 sts 0x0152, r1
\r
472 000002b6 <__vector_22>:
\r
473 * Purpose: Latch the LCD_displayData and Set LCD_status.updateComplete
\r
475 *****************************************************************************/
\r
481 2ba: 0f b6 in r0, 0x3f ; 63
\r
483 2be: 11 24 eor r1, r1
\r
484 2c0: ef 92 push r14
\r
485 2c2: ff 92 push r15
\r
486 2c4: 0f 93 push r16
\r
487 2c6: 1f 93 push r17
\r
488 2c8: 2f 93 push r18
\r
489 2ca: 3f 93 push r19
\r
490 2cc: 4f 93 push r20
\r
491 2ce: 5f 93 push r21
\r
492 2d0: 6f 93 push r22
\r
493 2d2: 7f 93 push r23
\r
494 2d4: 8f 93 push r24
\r
495 2d6: 9f 93 push r25
\r
496 2d8: af 93 push r26
\r
497 2da: bf 93 push r27
\r
498 2dc: cf 93 push r28
\r
499 2de: df 93 push r29
\r
500 2e0: ef 93 push r30
\r
501 2e2: ff 93 push r31
\r
507 LCD_timer--; // Decreased every LCD frame
\r
508 2e4: 00 91 00 01 lds r16, 0x0100
\r
509 2e8: 01 50 subi r16, 0x01 ; 1
\r
510 2ea: 00 93 00 01 sts 0x0100, r16
\r
513 2ee: 80 91 56 01 lds r24, 0x0156
\r
514 2f2: 88 23 and r24, r24
\r
515 2f4: 81 f0 breq .+32 ; 0x316 <__vector_22+0x60>
\r
517 // If we are in scroll mode, and the timer has expired,
\r
518 // we will update the LCD
\r
519 if (LCD_timer == 0)
\r
520 2f6: 00 23 and r16, r16
\r
521 2f8: 81 f4 brne .+32 ; 0x31a <__vector_22+0x64>
\r
523 if (gLCD_Start_Scroll_Timer == 0)
\r
524 2fa: 80 91 53 01 lds r24, 0x0153
\r
525 2fe: 88 23 and r24, r24
\r
526 300: 21 f4 brne .+8 ; 0x30a <__vector_22+0x54>
\r
528 gLCD_Update_Required = TRUE;
\r
529 302: 81 e0 ldi r24, 0x01 ; 1
\r
530 304: 80 93 52 01 sts 0x0152, r24
\r
531 308: 08 c0 rjmp .+16 ; 0x31a <__vector_22+0x64>
\r
534 gLCD_Start_Scroll_Timer--;
\r
535 30a: 80 91 53 01 lds r24, 0x0153
\r
536 30e: 81 50 subi r24, 0x01 ; 1
\r
537 310: 80 93 53 01 sts 0x0153, r24
\r
538 314: 02 c0 rjmp .+4 ; 0x31a <__vector_22+0x64>
\r
541 { // if not scrolling,
\r
542 // disble LCD start of frame interrupt
\r
543 // cbi(LCDCRA, LCDIE); //DEBUG
\r
545 316: 10 92 84 01 sts 0x0184, r1
\r
550 if (gLCD_Update_Required == TRUE)
\r
551 31a: 80 91 52 01 lds r24, 0x0152
\r
552 31e: 81 30 cpi r24, 0x01 ; 1
\r
553 320: 09 f0 breq .+2 ; 0x324 <__vector_22+0x6e>
\r
554 322: 52 c0 rjmp .+164 ; 0x3c8 <__vector_22+0x112>
\r
556 // Duty cycle of flashing characters
\r
557 if (gFlashTimer < (LCD_FLASH_SEED >> 1))
\r
558 324: e0 90 54 01 lds r14, 0x0154
\r
559 328: ff 24 eor r15, r15
\r
560 32a: 10 e0 ldi r17, 0x00 ; 0
\r
561 32c: c0 e0 ldi r28, 0x00 ; 0
\r
562 32e: d0 e0 ldi r29, 0x00 ; 0
\r
563 330: 6c 2f mov r22, r28
\r
566 // Repeat for the six LCD characters
\r
567 for (i = 0; i < 6; i++)
\r
569 if ((gScroll+i) >= 0 && (!EOL))
\r
570 332: 80 91 84 01 lds r24, 0x0184
\r
571 336: 99 27 eor r25, r25
\r
572 338: 87 fd sbrc r24, 7
\r
574 33c: 8c 0f add r24, r28
\r
575 33e: 9d 1f adc r25, r29
\r
576 340: 97 fd sbrc r25, 7
\r
577 342: 15 c0 rjmp .+42 ; 0x36e <__vector_22+0xb8>
\r
578 344: 11 23 and r17, r17
\r
579 346: 99 f4 brne .+38 ; 0x36e <__vector_22+0xb8>
\r
581 // We have some visible characters
\r
582 c = gTextBuffer[i + gScroll];
\r
583 348: e0 91 84 01 lds r30, 0x0184
\r
584 34c: ff 27 eor r31, r31
\r
585 34e: e7 fd sbrc r30, 7
\r
587 352: ec 0f add r30, r28
\r
588 354: fd 1f adc r31, r29
\r
589 356: e5 59 subi r30, 0x95 ; 149
\r
590 358: fe 4f sbci r31, 0xFE ; 254
\r
591 35a: 80 81 ld r24, Z
\r
592 c_flash = c & 0x80 ? 1 : 0;
\r
593 35c: f8 2e mov r15, r24
\r
594 35e: ff 1c adc r15, r15
\r
595 360: ff 24 eor r15, r15
\r
596 362: ff 1c adc r15, r15
\r
598 364: 8f 77 andi r24, 0x7F ; 127
\r
601 366: 21 f4 brne .+8 ; 0x370 <__vector_22+0xba>
\r
602 368: 1c 2f mov r17, r28
\r
603 36a: 1f 5f subi r17, 0xFF ; 255
\r
604 36c: 01 c0 rjmp .+2 ; 0x370 <__vector_22+0xba>
\r
605 36e: 80 e2 ldi r24, 0x20 ; 32
\r
609 // Check if this character is flashing
\r
611 if (c_flash && flash)
\r
612 370: ff 20 and r15, r15
\r
613 372: 21 f0 breq .+8 ; 0x37c <__vector_22+0xc6>
\r
614 374: 94 e0 ldi r25, 0x04 ; 4
\r
615 376: 9e 15 cp r25, r14
\r
616 378: 08 f4 brcc .+2 ; 0x37c <__vector_22+0xc6>
\r
617 LCD_WriteDigit(' ', i);
\r
618 37a: 80 e2 ldi r24, 0x20 ; 32
\r
620 LCD_WriteDigit(c, i);
\r
621 37c: 0e 94 f1 00 call 0x1e2 ; 0x1e2 <LCD_WriteDigit>
\r
622 380: 21 96 adiw r28, 0x01 ; 1
\r
627 // Repeat for the six LCD characters
\r
628 for (i = 0; i < 6; i++)
\r
629 382: c6 30 cpi r28, 0x06 ; 6
\r
630 384: d1 05 cpc r29, r1
\r
631 386: a1 f6 brne .-88 ; 0x330 <__vector_22+0x7a>
\r
632 388: ac ee ldi r26, 0xEC ; 236
\r
633 38a: b0 e0 ldi r27, 0x00 ; 0
\r
634 38c: fd 01 movw r30, r26
\r
635 38e: e5 59 subi r30, 0x95 ; 149
\r
636 390: ff 4f sbci r31, 0xFF ; 255
\r
637 LCD_WriteDigit(c, i);
\r
640 // Copy the segment buffer to the real segments
\r
641 for (i = 0; i < LCD_REGISTER_COUNT; i++)
\r
642 *(pLCDREG + i) = *(LCD_Data+i);
\r
643 392: 80 81 ld r24, Z
\r
644 394: 8d 93 st X+, r24
\r
646 LCD_WriteDigit(c, i);
\r
649 // Copy the segment buffer to the real segments
\r
650 for (i = 0; i < LCD_REGISTER_COUNT; i++)
\r
651 396: 81 e0 ldi r24, 0x01 ; 1
\r
652 398: a0 30 cpi r26, 0x00 ; 0
\r
653 39a: b8 07 cpc r27, r24
\r
654 39c: b9 f7 brne .-18 ; 0x38c <__vector_22+0xd6>
\r
655 *(pLCDREG + i) = *(LCD_Data+i);
\r
659 39e: 80 91 55 01 lds r24, 0x0155
\r
660 3a2: 88 23 and r24, r24
\r
661 3a4: 21 f0 breq .+8 ; 0x3ae <__vector_22+0xf8>
\r
662 *(pLCDREG + 8) = 0x01;
\r
663 3a6: 81 e0 ldi r24, 0x01 ; 1
\r
664 3a8: 80 93 f4 00 sts 0x00F4, r24
\r
665 3ac: 02 c0 rjmp .+4 ; 0x3b2 <__vector_22+0xfc>
\r
667 *(pLCDREG + 8) = 0x00;
\r
668 3ae: 10 92 f4 00 sts 0x00F4, r1
\r
670 // If the text scrolled off the display,
\r
671 // we have to start over again.
\r
673 3b2: 11 30 cpi r17, 0x01 ; 1
\r
674 3b4: 11 f4 brne .+4 ; 0x3ba <__vector_22+0x104>
\r
676 3b6: 8a ef ldi r24, 0xFA ; 250
\r
677 3b8: 03 c0 rjmp .+6 ; 0x3c0 <__vector_22+0x10a>
\r
680 3ba: 80 91 84 01 lds r24, 0x0184
\r
681 3be: 8f 5f subi r24, 0xFF ; 255
\r
682 3c0: 80 93 84 01 sts 0x0184, r24
\r
684 // No need to update anymore
\r
685 gLCD_Update_Required = FALSE;
\r
686 3c4: 10 92 52 01 sts 0x0152, r1
\r
690 // LCD_timer is used when scrolling text
\r
691 if (LCD_timer == 0)
\r
692 3c8: 00 23 and r16, r16
\r
693 3ca: 19 f4 brne .+6 ; 0x3d2 <__vector_22+0x11c>
\r
695 /* if ((gScroll <= 0) || EOL)
\r
696 LCD_timer = LCD_TIMER_SEED/2;
\r
698 LCD_timer = LCD_TIMER_SEED;
\r
699 3cc: 83 e0 ldi r24, 0x03 ; 3
\r
700 3ce: 80 93 00 01 sts 0x0100, r24
\r
703 // gFlashTimer is used when flashing characters
\r
704 if (gFlashTimer == LCD_FLASH_SEED)
\r
705 3d2: 80 91 54 01 lds r24, 0x0154
\r
706 3d6: 8a 30 cpi r24, 0x0A ; 10
\r
707 3d8: 19 f4 brne .+6 ; 0x3e0 <__vector_22+0x12a>
\r
709 3da: 10 92 54 01 sts 0x0154, r1
\r
710 3de: 05 c0 rjmp .+10 ; 0x3ea <__vector_22+0x134>
\r
713 3e0: 80 91 54 01 lds r24, 0x0154
\r
714 3e4: 8f 5f subi r24, 0xFF ; 255
\r
715 3e6: 80 93 54 01 sts 0x0154, r24
\r
737 410: 0f be out 0x3f, r0 ; 63
\r
742 00000418 <LCD_puts>:
\r
744 * Purpose : Writes a string to the LCD
\r
746 *****************************************************************************/
\r
747 void LCD_puts(char *pStr)
\r
749 418: bc 01 movw r22, r24
\r
750 uint8_t i; // char i;
\r
752 while (gLCD_Update_Required); // Wait for access to buffer
\r
753 41a: 80 91 52 01 lds r24, 0x0152
\r
754 41e: 88 23 and r24, r24
\r
755 420: e1 f7 brne .-8 ; 0x41a <LCD_puts+0x2>
\r
756 422: 20 e0 ldi r18, 0x00 ; 0
\r
757 424: 30 e0 ldi r19, 0x00 ; 0
\r
758 426: 06 c0 rjmp .+12 ; 0x434 <LCD_puts+0x1c>
\r
760 for (i = 0; pStr[i] && i < TEXTBUFFER_SIZE; i++)
\r
762 gTextBuffer[i] = pStr[i];
\r
763 428: f9 01 movw r30, r18
\r
764 42a: e5 59 subi r30, 0x95 ; 149
\r
765 42c: fe 4f sbci r31, 0xFE ; 254
\r
766 42e: 80 83 st Z, r24
\r
767 430: 2f 5f subi r18, 0xFF ; 255
\r
768 432: 3f 4f sbci r19, 0xFF ; 255
\r
769 434: 42 2f mov r20, r18
\r
771 uint8_t i; // char i;
\r
773 while (gLCD_Update_Required); // Wait for access to buffer
\r
775 for (i = 0; pStr[i] && i < TEXTBUFFER_SIZE; i++)
\r
776 436: fb 01 movw r30, r22
\r
777 438: e2 0f add r30, r18
\r
778 43a: f3 1f adc r31, r19
\r
779 43c: 80 81 ld r24, Z
\r
780 43e: 88 23 and r24, r24
\r
781 440: 19 f0 breq .+6 ; 0x448 <LCD_puts+0x30>
\r
782 442: 29 31 cpi r18, 0x19 ; 25
\r
783 444: 31 05 cpc r19, r1
\r
784 446: 81 f7 brne .-32 ; 0x428 <LCD_puts+0x10>
\r
786 gTextBuffer[i] = pStr[i];
\r
789 gTextBuffer[i] = '\0';
\r
790 448: e4 2f mov r30, r20
\r
791 44a: f0 e0 ldi r31, 0x00 ; 0
\r
792 44c: e5 59 subi r30, 0x95 ; 149
\r
793 44e: fe 4f sbci r31, 0xFE ; 254
\r
794 450: 10 82 st Z, r1
\r
797 452: 47 30 cpi r20, 0x07 ; 7
\r
798 454: 48 f0 brcs .+18 ; 0x468 <LCD_puts+0x50>
\r
800 gScrollMode = 1; // Scroll if text is longer than display size
\r
801 456: 81 e0 ldi r24, 0x01 ; 1
\r
802 458: 80 93 56 01 sts 0x0156, r24
\r
804 45c: 10 92 84 01 sts 0x0184, r1
\r
805 gLCD_Start_Scroll_Timer = 3; //Start-up delay before scrolling the text
\r
806 460: 83 e0 ldi r24, 0x03 ; 3
\r
807 462: 80 93 53 01 sts 0x0153, r24
\r
808 466: 04 c0 rjmp .+8 ; 0x470 <LCD_puts+0x58>
\r
813 468: 10 92 56 01 sts 0x0156, r1
\r
815 46c: 10 92 84 01 sts 0x0184, r1
\r
818 gLCD_Update_Required = 1;
\r
819 470: 81 e0 ldi r24, 0x01 ; 1
\r
820 472: 80 93 52 01 sts 0x0152, r24
\r
824 00000478 <LCD_Clear>:
\r
826 * Purpose : Clear the LCD
\r
828 *****************************************************************************/
\r
829 void LCD_Clear(void)
\r
831 478: 80 e0 ldi r24, 0x00 ; 0
\r
832 47a: 90 e0 ldi r25, 0x00 ; 0
\r
833 uint8_t i; // char i;
\r
835 for (i=0; i<TEXTBUFFER_SIZE; i++)
\r
836 gTextBuffer[i] = ' ';
\r
837 47c: 20 e2 ldi r18, 0x20 ; 32
\r
838 47e: fc 01 movw r30, r24
\r
839 480: e5 59 subi r30, 0x95 ; 149
\r
840 482: fe 4f sbci r31, 0xFE ; 254
\r
841 484: 20 83 st Z, r18
\r
842 486: 01 96 adiw r24, 0x01 ; 1
\r
843 *****************************************************************************/
\r
844 void LCD_Clear(void)
\r
846 uint8_t i; // char i;
\r
848 for (i=0; i<TEXTBUFFER_SIZE; i++)
\r
849 488: 89 31 cpi r24, 0x19 ; 25
\r
850 48a: 91 05 cpc r25, r1
\r
851 48c: c1 f7 brne .-16 ; 0x47e <LCD_Clear+0x6>
\r
852 gTextBuffer[i] = ' ';
\r
854 gTextBuffer[0] = '\0'; // mt 5/2007
\r
855 48e: 10 92 6b 01 sts 0x016B, r1
\r
859 00000494 <LCD_Colon>:
\r
860 * Purpose : Enable/disable colons on the LCD
\r
862 *****************************************************************************/
\r
863 void LCD_Colon(char show)
\r
866 494: 80 93 55 01 sts 0x0155, r24
\r
870 0000049a <LCD_UpdateRequired>:
\r
872 * Purpose : Tells the LCD that there is new data to be presented
\r
874 *****************************************************************************/
\r
875 void LCD_UpdateRequired(char update, char scrollmode)
\r
877 49a: 98 2f mov r25, r24
\r
879 while (gLCD_Update_Required);
\r
880 49c: 80 91 52 01 lds r24, 0x0152
\r
881 4a0: 88 23 and r24, r24
\r
882 4a2: e1 f7 brne .-8 ; 0x49c <LCD_UpdateRequired+0x2>
\r
884 gScrollMode = scrollmode;
\r
885 4a4: 60 93 56 01 sts 0x0156, r22
\r
887 4a8: 10 92 84 01 sts 0x0184, r1
\r
889 gLCD_Update_Required = update;
\r
890 4ac: 90 93 52 01 sts 0x0152, r25
\r
894 000004b2 <LCD_FlashReset>:
\r
895 * Purpose : This function resets the blinking cycle of a flashing digit
\r
897 *****************************************************************************/
\r
898 void LCD_FlashReset(void)
\r
901 4b2: 10 92 54 01 sts 0x0154, r1
\r
905 000004b8 <LCD_putc>:
\r
909 void LCD_putc(uint8_t digit, char character)
\r
911 if (digit < TEXTBUFFER_SIZE)
\r
912 4b8: 89 31 cpi r24, 0x19 ; 25
\r
913 4ba: 28 f4 brcc .+10 ; 0x4c6 <LCD_putc+0xe>
\r
914 gTextBuffer[digit] = character;
\r
915 4bc: e8 2f mov r30, r24
\r
916 4be: f0 e0 ldi r31, 0x00 ; 0
\r
917 4c0: e5 59 subi r30, 0x95 ; 149
\r
918 4c2: fe 4f sbci r31, 0xFE ; 254
\r
919 4c4: 60 83 st Z, r22
\r
922 000004c8 <LCD_ShowTime>:
\r
925 void LCD_ShowTime(uint32 tmr)
\r
931 4d0: af 92 push r10
\r
932 4d2: bf 92 push r11
\r
933 4d4: cf 92 push r12
\r
934 4d6: df 92 push r13
\r
935 4d8: ef 92 push r14
\r
936 4da: ff 92 push r15
\r
937 4dc: 0f 93 push r16
\r
938 4de: 1f 93 push r17
\r
939 4e0: df 93 push r29
\r
940 4e2: cf 93 push r28
\r
941 4e4: 00 d0 rcall .+0 ; 0x4e6 <LCD_ShowTime+0x1e>
\r
942 4e6: 00 d0 rcall .+0 ; 0x4e8 <LCD_ShowTime+0x20>
\r
943 4e8: 00 d0 rcall .+0 ; 0x4ea <LCD_ShowTime+0x22>
\r
944 4ea: cd b7 in r28, 0x3d ; 61
\r
945 4ec: de b7 in r29, 0x3e ; 62
\r
946 4ee: 5b 01 movw r10, r22
\r
947 4f0: 6c 01 movw r12, r24
\r
948 uint hours = tmr / 360000;
\r
949 4f2: 20 e4 ldi r18, 0x40 ; 64
\r
950 4f4: 3e e7 ldi r19, 0x7E ; 126
\r
951 4f6: 45 e0 ldi r20, 0x05 ; 5
\r
952 4f8: 50 e0 ldi r21, 0x00 ; 0
\r
953 4fa: 0e 94 30 08 call 0x1060 ; 0x1060 <__udivmodsi4>
\r
954 4fe: 39 01 movw r6, r18
\r
955 500: 4a 01 movw r8, r20
\r
956 tmr = tmr - hours*360000;
\r
957 502: b9 01 movw r22, r18
\r
958 504: 80 e0 ldi r24, 0x00 ; 0
\r
959 506: 90 e0 ldi r25, 0x00 ; 0
\r
960 508: 20 ec ldi r18, 0xC0 ; 192
\r
961 50a: 31 e8 ldi r19, 0x81 ; 129
\r
962 50c: 4a ef ldi r20, 0xFA ; 250
\r
963 50e: 5f ef ldi r21, 0xFF ; 255
\r
964 510: 0e 94 fd 07 call 0xffa ; 0xffa <__mulsi3>
\r
965 514: 7b 01 movw r14, r22
\r
966 516: 8c 01 movw r16, r24
\r
967 518: ea 0c add r14, r10
\r
968 51a: fb 1c adc r15, r11
\r
969 51c: 0c 1d adc r16, r12
\r
970 51e: 1d 1d adc r17, r13
\r
971 uint minutes = tmr / 6000;
\r
972 520: c8 01 movw r24, r16
\r
973 522: b7 01 movw r22, r14
\r
974 524: 20 e7 ldi r18, 0x70 ; 112
\r
975 526: 37 e1 ldi r19, 0x17 ; 23
\r
976 528: 40 e0 ldi r20, 0x00 ; 0
\r
977 52a: 50 e0 ldi r21, 0x00 ; 0
\r
978 52c: 0e 94 30 08 call 0x1060 ; 0x1060 <__udivmodsi4>
\r
979 530: 59 01 movw r10, r18
\r
980 532: 6a 01 movw r12, r20
\r
981 tmr = tmr - minutes*6000;
\r
982 uint seconds = tmr / 100;
\r
983 534: 80 e7 ldi r24, 0x70 ; 112
\r
984 536: 97 e1 ldi r25, 0x17 ; 23
\r
985 538: 9c 01 movw r18, r24
\r
986 53a: 2a 9d mul r18, r10
\r
987 53c: c0 01 movw r24, r0
\r
988 53e: 2b 9d mul r18, r11
\r
989 540: 90 0d add r25, r0
\r
990 542: 3a 9d mul r19, r10
\r
991 544: 90 0d add r25, r0
\r
992 546: 11 24 eor r1, r1
\r
993 548: a0 e0 ldi r26, 0x00 ; 0
\r
994 54a: b0 e0 ldi r27, 0x00 ; 0
\r
995 54c: e8 1a sub r14, r24
\r
996 54e: f9 0a sbc r15, r25
\r
997 550: 0a 0b sbc r16, r26
\r
998 552: 1b 0b sbc r17, r27
\r
999 554: c8 01 movw r24, r16
\r
1000 556: b7 01 movw r22, r14
\r
1001 558: 24 e6 ldi r18, 0x64 ; 100
\r
1002 55a: 30 e0 ldi r19, 0x00 ; 0
\r
1003 55c: 40 e0 ldi r20, 0x00 ; 0
\r
1004 55e: 50 e0 ldi r21, 0x00 ; 0
\r
1005 560: 0e 94 30 08 call 0x1060 ; 0x1060 <__udivmodsi4>
\r
1006 564: 89 01 movw r16, r18
\r
1007 566: 9a 01 movw r18, r20
\r
1008 tmr = tmr - seconds*100;
\r
1012 digits[0] = hours/10;
\r
1013 568: c3 01 movw r24, r6
\r
1014 56a: 6a e0 ldi r22, 0x0A ; 10
\r
1015 56c: 70 e0 ldi r23, 0x00 ; 0
\r
1016 56e: 0e 94 1c 08 call 0x1038 ; 0x1038 <__udivmodhi4>
\r
1017 572: 69 83 std Y+1, r22 ; 0x01
\r
1018 digits[1] = hours%10;
\r
1019 574: c3 01 movw r24, r6
\r
1020 576: 6a e0 ldi r22, 0x0A ; 10
\r
1021 578: 70 e0 ldi r23, 0x00 ; 0
\r
1022 57a: 0e 94 1c 08 call 0x1038 ; 0x1038 <__udivmodhi4>
\r
1023 57e: 8a 83 std Y+2, r24 ; 0x02
\r
1024 digits[2] = minutes/10;
\r
1025 580: c5 01 movw r24, r10
\r
1026 582: 6a e0 ldi r22, 0x0A ; 10
\r
1027 584: 70 e0 ldi r23, 0x00 ; 0
\r
1028 586: 0e 94 1c 08 call 0x1038 ; 0x1038 <__udivmodhi4>
\r
1029 58a: 6b 83 std Y+3, r22 ; 0x03
\r
1030 digits[3] = minutes%10;
\r
1031 58c: c5 01 movw r24, r10
\r
1032 58e: 6a e0 ldi r22, 0x0A ; 10
\r
1033 590: 70 e0 ldi r23, 0x00 ; 0
\r
1034 592: 0e 94 1c 08 call 0x1038 ; 0x1038 <__udivmodhi4>
\r
1035 596: 8c 83 std Y+4, r24 ; 0x04
\r
1036 digits[4] = seconds/10;
\r
1037 598: c8 01 movw r24, r16
\r
1038 59a: 6a e0 ldi r22, 0x0A ; 10
\r
1039 59c: 70 e0 ldi r23, 0x00 ; 0
\r
1040 59e: 0e 94 1c 08 call 0x1038 ; 0x1038 <__udivmodhi4>
\r
1041 5a2: 6d 83 std Y+5, r22 ; 0x05
\r
1042 digits[5] = seconds%10;
\r
1043 5a4: c8 01 movw r24, r16
\r
1044 5a6: 6a e0 ldi r22, 0x0A ; 10
\r
1045 5a8: 70 e0 ldi r23, 0x00 ; 0
\r
1046 5aa: 0e 94 1c 08 call 0x1038 ; 0x1038 <__udivmodhi4>
\r
1047 5ae: 8e 83 std Y+6, r24 ; 0x06
\r
1048 5b0: 20 e0 ldi r18, 0x00 ; 0
\r
1049 5b2: 30 e0 ldi r19, 0x00 ; 0
\r
1051 for (uint8 i = 0; i < 6; ++i)
\r
1053 LCD_putc(i, '0' + digits[i]);
\r
1054 5b4: ae 01 movw r20, r28
\r
1055 5b6: 4f 5f subi r20, 0xFF ; 255
\r
1056 5b8: 5f 4f sbci r21, 0xFF ; 255
\r
1057 5ba: fa 01 movw r30, r20
\r
1058 5bc: e2 0f add r30, r18
\r
1059 5be: f3 1f adc r31, r19
\r
1060 5c0: 80 81 ld r24, Z
\r
1061 5c2: 80 5d subi r24, 0xD0 ; 208
\r
1064 void LCD_putc(uint8_t digit, char character)
\r
1066 if (digit < TEXTBUFFER_SIZE)
\r
1067 gTextBuffer[digit] = character;
\r
1068 5c4: f9 01 movw r30, r18
\r
1069 5c6: e5 59 subi r30, 0x95 ; 149
\r
1070 5c8: fe 4f sbci r31, 0xFE ; 254
\r
1071 5ca: 80 83 st Z, r24
\r
1072 5cc: 2f 5f subi r18, 0xFF ; 255
\r
1073 5ce: 3f 4f sbci r19, 0xFF ; 255
\r
1074 digits[2] = minutes/10;
\r
1075 digits[3] = minutes%10;
\r
1076 digits[4] = seconds/10;
\r
1077 digits[5] = seconds%10;
\r
1079 for (uint8 i = 0; i < 6; ++i)
\r
1080 5d0: 26 30 cpi r18, 0x06 ; 6
\r
1081 5d2: 31 05 cpc r19, r1
\r
1082 5d4: 91 f7 brne .-28 ; 0x5ba <__stack+0xbb>
\r
1085 void LCD_putc(uint8_t digit, char character)
\r
1087 if (digit < TEXTBUFFER_SIZE)
\r
1088 gTextBuffer[digit] = character;
\r
1089 5d6: 10 92 71 01 sts 0x0171, r1
\r
1091 *****************************************************************************/
\r
1092 void LCD_UpdateRequired(char update, char scrollmode)
\r
1095 while (gLCD_Update_Required);
\r
1096 5da: 80 91 52 01 lds r24, 0x0152
\r
1097 5de: 88 23 and r24, r24
\r
1098 5e0: e1 f7 brne .-8 ; 0x5da <__stack+0xdb>
\r
1100 gScrollMode = scrollmode;
\r
1101 5e2: 10 92 56 01 sts 0x0156, r1
\r
1103 5e6: 10 92 84 01 sts 0x0184, r1
\r
1105 gLCD_Update_Required = update;
\r
1106 5ea: 81 e0 ldi r24, 0x01 ; 1
\r
1107 5ec: 80 93 52 01 sts 0x0152, r24
\r
1109 LCD_putc(6, '\0');
\r
1112 LCD_UpdateRequired(1, 0);
\r
1114 5f0: 26 96 adiw r28, 0x06 ; 6
\r
1115 5f2: 0f b6 in r0, 0x3f ; 63
\r
1117 5f6: de bf out 0x3e, r29 ; 62
\r
1118 5f8: 0f be out 0x3f, r0 ; 63
\r
1119 5fa: cd bf out 0x3d, r28 ; 61
\r
1120 5fc: cf 91 pop r28
\r
1121 5fe: df 91 pop r29
\r
1122 600: 1f 91 pop r17
\r
1123 602: 0f 91 pop r16
\r
1124 604: ff 90 pop r15
\r
1125 606: ef 90 pop r14
\r
1126 608: df 90 pop r13
\r
1127 60a: cf 90 pop r12
\r
1128 60c: bf 90 pop r11
\r
1129 60e: af 90 pop r10
\r
1136 0000061a <LCD_printf>:
\r
1139 #include <stdarg.h>
\r
1140 #include "printf.h"
\r
1141 int LCD_printf(const char * format, ...)
\r
1143 61a: ef 92 push r14
\r
1144 61c: ff 92 push r15
\r
1145 61e: 0f 93 push r16
\r
1146 620: 1f 93 push r17
\r
1147 622: df 93 push r29
\r
1148 624: cf 93 push r28
\r
1149 626: cd b7 in r28, 0x3d ; 61
\r
1150 628: de b7 in r29, 0x3e ; 62
\r
1151 62a: 69 97 sbiw r28, 0x19 ; 25
\r
1152 62c: 0f b6 in r0, 0x3f ; 63
\r
1154 630: de bf out 0x3e, r29 ; 62
\r
1155 632: 0f be out 0x3f, r0 ; 63
\r
1156 634: cd bf out 0x3d, r28 ; 61
\r
1157 636: fe 01 movw r30, r28
\r
1158 638: b2 96 adiw r30, 0x22 ; 34
\r
1159 63a: 61 91 ld r22, Z+
\r
1160 63c: 71 91 ld r23, Z+
\r
1161 char buffer[TEXTBUFFER_SIZE];
\r
1163 va_start(args, format);
\r
1164 int result = vsprintf(buffer, format, args);
\r
1165 63e: 8e 01 movw r16, r28
\r
1166 640: 0f 5f subi r16, 0xFF ; 255
\r
1167 642: 1f 4f sbci r17, 0xFF ; 255
\r
1168 644: c8 01 movw r24, r16
\r
1169 646: af 01 movw r20, r30
\r
1170 648: 0e 94 41 05 call 0xa82 ; 0xa82 <vsprintf>
\r
1171 64c: f8 2e mov r15, r24
\r
1172 64e: e9 2e mov r14, r25
\r
1174 650: c8 01 movw r24, r16
\r
1175 652: 0e 94 0c 02 call 0x418 ; 0x418 <LCD_puts>
\r
1178 656: 8f 2d mov r24, r15
\r
1179 658: 9e 2d mov r25, r14
\r
1180 65a: 69 96 adiw r28, 0x19 ; 25
\r
1181 65c: 0f b6 in r0, 0x3f ; 63
\r
1183 660: de bf out 0x3e, r29 ; 62
\r
1184 662: 0f be out 0x3f, r0 ; 63
\r
1185 664: cd bf out 0x3d, r28 ; 61
\r
1186 666: cf 91 pop r28
\r
1187 668: df 91 pop r29
\r
1188 66a: 1f 91 pop r17
\r
1189 66c: 0f 91 pop r16
\r
1190 66e: ff 90 pop r15
\r
1191 670: ef 90 pop r14
\r
1196 * Purpose : Delay-loop
\r
1198 *****************************************************************************/
\r
1199 void Delay(unsigned int millisec)
\r
1201 674: 06 c0 rjmp .+12 ; 0x682 <Delay+0xe>
\r
1202 // mt, int i did not work in the simulator: int i;
\r
1205 while (millisec--) {
\r
1206 676: 20 e0 ldi r18, 0x00 ; 0
\r
1207 for (i=0; i<125; i++) {
\r
1208 asm volatile ("nop"::);
\r
1211 // mt, int i did not work in the simulator: int i;
\r
1214 while (millisec--) {
\r
1215 for (i=0; i<125; i++) {
\r
1216 67a: 2f 5f subi r18, 0xFF ; 255
\r
1217 67c: 2d 37 cpi r18, 0x7D ; 125
\r
1218 67e: e1 f7 brne .-8 ; 0x678 <Delay+0x4>
\r
1219 680: 01 97 sbiw r24, 0x01 ; 1
\r
1220 void Delay(unsigned int millisec)
\r
1222 // mt, int i did not work in the simulator: int i;
\r
1225 while (millisec--) {
\r
1226 682: 00 97 sbiw r24, 0x00 ; 0
\r
1227 684: c1 f7 brne .-16 ; 0x676 <Delay+0x2>
\r
1228 for (i=0; i<125; i++) {
\r
1229 asm volatile ("nop"::);
\r
1235 00000688 <OSCCAL_calibration>:
\r
1237 unsigned char calibrate = FALSE;
\r
1239 unsigned char tempL;
\r
1241 CLKPR = (1<<CLKPCE); // set Clock Prescaler Change Enable
\r
1242 688: 80 e8 ldi r24, 0x80 ; 128
\r
1243 68a: 80 93 61 00 sts 0x0061, r24
\r
1244 // set prescaler = 8, Inter RC 8Mhz / 8 = 1Mhz
\r
1245 CLKPR = (1<<CLKPS1) | (1<<CLKPS0);
\r
1246 68e: 83 e0 ldi r24, 0x03 ; 3
\r
1247 690: 80 93 61 00 sts 0x0061, r24
\r
1249 TIMSK2 = 0; //disable OCIE2A and TOIE2
\r
1250 694: 10 92 70 00 sts 0x0070, r1
\r
1252 ASSR = (1<<AS2); //select asynchronous operation of timer2 (32,768kHz)
\r
1253 698: 88 e0 ldi r24, 0x08 ; 8
\r
1254 69a: 80 93 b6 00 sts 0x00B6, r24
\r
1256 OCR2A = 200; // set timer2 compare value
\r
1257 69e: 88 ec ldi r24, 0xC8 ; 200
\r
1258 6a0: 80 93 b3 00 sts 0x00B3, r24
\r
1260 TIMSK0 = 0; // delete any interrupt sources
\r
1261 6a4: 10 92 6e 00 sts 0x006E, r1
\r
1263 TCCR1B = (1<<CS10); // start timer1 with no prescaling
\r
1264 6a8: 81 e0 ldi r24, 0x01 ; 1
\r
1265 6aa: 80 93 81 00 sts 0x0081, r24
\r
1266 TCCR2A = (1<<CS20); // start timer2 with no prescaling
\r
1267 6ae: 80 93 b0 00 sts 0x00B0, r24
\r
1269 while((ASSR & 0x01) | (ASSR & 0x04)); //wait for TCN2UB and TCR2UB to be cleared
\r
1270 6b2: 20 91 b6 00 lds r18, 0x00B6
\r
1271 6b6: 80 91 b6 00 lds r24, 0x00B6
\r
1272 6ba: 90 e0 ldi r25, 0x00 ; 0
\r
1273 6bc: 84 70 andi r24, 0x04 ; 4
\r
1274 6be: 90 70 andi r25, 0x00 ; 0
\r
1275 6c0: 30 e0 ldi r19, 0x00 ; 0
\r
1276 6c2: 21 70 andi r18, 0x01 ; 1
\r
1277 6c4: 30 70 andi r19, 0x00 ; 0
\r
1278 6c6: 82 2b or r24, r18
\r
1279 6c8: 93 2b or r25, r19
\r
1280 6ca: 89 2b or r24, r25
\r
1281 6cc: 91 f7 brne .-28 ; 0x6b2 <OSCCAL_calibration+0x2a>
\r
1283 Delay(1000); // wait for external crystal to stabilise
\r
1284 6ce: 88 ee ldi r24, 0xE8 ; 232
\r
1285 6d0: 93 e0 ldi r25, 0x03 ; 3
\r
1286 6d2: 0e 94 3a 03 call 0x674 ; 0x674 <Delay>
\r
1290 cli(); // mt __disable_interrupt(); // disable global interrupt
\r
1292 TIFR1 = 0xFF; // delete TIFR1 flags
\r
1293 6d6: 4f ef ldi r20, 0xFF ; 255
\r
1297 OSCCAL--; // the internRC oscillator runs to fast, decrease the OSCCAL
\r
1299 else if (temp < 6120)
\r
1300 6d8: 51 e0 ldi r21, 0x01 ; 1
\r
1302 Delay(1000); // wait for external crystal to stabilise
\r
1306 cli(); // mt __disable_interrupt(); // disable global interrupt
\r
1309 TIFR1 = 0xFF; // delete TIFR1 flags
\r
1310 6dc: 46 bb out 0x16, r20 ; 22
\r
1311 TIFR2 = 0xFF; // delete TIFR2 flags
\r
1312 6de: 47 bb out 0x17, r20 ; 23
\r
1314 TCNT1H = 0; // clear timer1 counter
\r
1315 6e0: 10 92 85 00 sts 0x0085, r1
\r
1317 6e4: 10 92 84 00 sts 0x0084, r1
\r
1318 TCNT2 = 0; // clear timer2 counter
\r
1319 6e8: 10 92 b2 00 sts 0x00B2, r1
\r
1321 // shc/mt while ( !(TIFR2 && (1<<OCF2A)) ); // wait for timer2 compareflag
\r
1322 while ( !(TIFR2 & (1<<OCF2A)) ); // wait for timer2 compareflag
\r
1323 6ec: b9 9b sbis 0x17, 1 ; 23
\r
1324 6ee: fe cf rjmp .-4 ; 0x6ec <OSCCAL_calibration+0x64>
\r
1326 TCCR1B = 0; // stop timer1
\r
1327 6f0: 10 92 81 00 sts 0x0081, r1
\r
1329 sei(); // __enable_interrupt(); // enable global interrupt
\r
1332 // shc/mt if ( (TIFR1 && (1<<TOV1)) )
\r
1333 if ( (TIFR1 & (1<<TOV1)) )
\r
1334 6f6: b0 99 sbic 0x16, 0 ; 22
\r
1335 6f8: 17 c0 rjmp .+46 ; 0x728 <OSCCAL_calibration+0xa0>
\r
1337 temp = 0xFFFF; // if timer1 overflows, set the temp to 0xFFFF
\r
1340 { // read out the timer1 counter value
\r
1342 6fa: 90 91 84 00 lds r25, 0x0084
\r
1344 6fe: 80 91 85 00 lds r24, 0x0085
\r
1345 temp = (temp << 8);
\r
1346 702: 38 2f mov r19, r24
\r
1347 704: 20 e0 ldi r18, 0x00 ; 0
\r
1349 706: b9 01 movw r22, r18
\r
1350 708: 69 0f add r22, r25
\r
1351 70a: 71 1d adc r23, r1
\r
1352 70c: cb 01 movw r24, r22
\r
1356 70e: 78 e1 ldi r23, 0x18 ; 24
\r
1357 710: 8b 36 cpi r24, 0x6B ; 107
\r
1358 712: 97 07 cpc r25, r23
\r
1359 714: 24 f0 brlt .+8 ; 0x71e <OSCCAL_calibration+0x96>
\r
1361 OSCCAL--; // the internRC oscillator runs to fast, decrease the OSCCAL
\r
1362 716: 80 91 66 00 lds r24, 0x0066
\r
1363 71a: 81 50 subi r24, 0x01 ; 1
\r
1364 71c: 08 c0 rjmp .+16 ; 0x72e <OSCCAL_calibration+0xa6>
\r
1366 else if (temp < 6120)
\r
1367 71e: 88 5e subi r24, 0xE8 ; 232
\r
1368 720: 97 41 sbci r25, 0x17 ; 23
\r
1369 722: 14 f0 brlt .+4 ; 0x728 <OSCCAL_calibration+0xa0>
\r
1370 724: 81 e0 ldi r24, 0x01 ; 1
\r
1371 726: 06 c0 rjmp .+12 ; 0x734 <OSCCAL_calibration+0xac>
\r
1373 OSCCAL++; // the internRC oscillator runs to slow, increase the OSCCAL
\r
1374 728: 80 91 66 00 lds r24, 0x0066
\r
1375 72c: 8f 5f subi r24, 0xFF ; 255
\r
1376 72e: 80 93 66 00 sts 0x0066, r24
\r
1377 732: 80 e0 ldi r24, 0x00 ; 0
\r
1380 calibrate = TRUE; // the interRC is correct
\r
1382 TCCR1B = (1<<CS10); // start timer1
\r
1383 734: 50 93 81 00 sts 0x0081, r21
\r
1385 while((ASSR & 0x01) | (ASSR & 0x04)); //wait for TCN2UB and TCR2UB to be cleared
\r
1387 Delay(1000); // wait for external crystal to stabilise
\r
1390 738: 88 23 and r24, r24
\r
1391 73a: 79 f2 breq .-98 ; 0x6da <OSCCAL_calibration+0x52>
\r
1393 calibrate = TRUE; // the interRC is correct
\r
1395 TCCR1B = (1<<CS10); // start timer1
\r
1400 0000073e <Initialization>:
\r
1401 * Purpose : Initializate the different modules
\r
1403 *****************************************************************************/
\r
1404 void Initialization(void)
\r
1406 OSCCAL_calibration(); // calibrate the OSCCAL byte
\r
1407 73e: 0e 94 44 03 call 0x688 ; 0x688 <OSCCAL_calibration>
\r
1409 CLKPR = (1<<CLKPCE); // set Clock Prescaler Change Enable
\r
1410 742: e1 e6 ldi r30, 0x61 ; 97
\r
1411 744: f0 e0 ldi r31, 0x00 ; 0
\r
1412 746: 80 e8 ldi r24, 0x80 ; 128
\r
1413 748: 80 83 st Z, r24
\r
1415 // set prescaler = 8, Inter RC 8Mhz / 8 = 1Mhz
\r
1416 CLKPR = (1<<CLKPS1) | (1<<CLKPS0);
\r
1417 74a: 83 e0 ldi r24, 0x03 ; 3
\r
1418 74c: 80 83 st Z, r24
\r
1420 Timer0_Init(); // Used when playing music etc.
\r
1421 74e: 0e 94 f3 03 call 0x7e6 ; 0x7e6 <Timer0_Init>
\r
1423 USART_Init(UART_4800); // Baud rate = 4800bps
\r
1424 752: 8c e0 ldi r24, 0x0C ; 12
\r
1425 754: 90 e0 ldi r25, 0x00 ; 0
\r
1426 756: 0e 94 25 04 call 0x84a ; 0x84a <USART_Init>
\r
1428 LCD_Init(); // initialize the LCD
\r
1429 75a: 0e 94 40 01 call 0x280 ; 0x280 <LCD_Init>
\r
1432 //Disable JTAG to use ADC4-7
\r
1433 MCUCR |= ( 1 <<JTD );
\r
1434 75e: 85 b7 in r24, 0x35 ; 53
\r
1435 760: 80 68 ori r24, 0x80 ; 128
\r
1436 762: 85 bf out 0x35, r24 ; 53
\r
1437 MCUCR |= ( 1 <<JTD );
\r
1438 764: 85 b7 in r24, 0x35 ; 53
\r
1439 766: 80 68 ori r24, 0x80 ; 128
\r
1440 768: 85 bf out 0x35, r24 ; 53
\r
1446 setup.adc_averages = 8;
\r
1447 76a: 88 e0 ldi r24, 0x08 ; 8
\r
1448 76c: 90 e0 ldi r25, 0x00 ; 0
\r
1449 76e: 90 93 88 01 sts 0x0188, r25
\r
1450 772: 80 93 87 01 sts 0x0187, r24
\r
1451 setup.poll_delay = 100;
\r
1452 776: 84 e6 ldi r24, 0x64 ; 100
\r
1453 778: 90 e0 ldi r25, 0x00 ; 0
\r
1454 77a: 90 93 86 01 sts 0x0186, r25
\r
1455 77e: 80 93 85 01 sts 0x0185, r24
\r
1456 setup.poll_timeout = (uint32)(-1);
\r
1457 782: 8f ef ldi r24, 0xFF ; 255
\r
1458 784: 9f ef ldi r25, 0xFF ; 255
\r
1459 786: af ef ldi r26, 0xFF ; 255
\r
1460 788: bf ef ldi r27, 0xFF ; 255
\r
1461 78a: 80 93 89 01 sts 0x0189, r24
\r
1462 78e: 90 93 8a 01 sts 0x018A, r25
\r
1463 792: a0 93 8b 01 sts 0x018B, r26
\r
1464 796: b0 93 8c 01 sts 0x018C, r27
\r
1465 setup.elapsed_time = 0;
\r
1466 79a: 10 92 8d 01 sts 0x018D, r1
\r
1467 79e: 10 92 8e 01 sts 0x018E, r1
\r
1468 7a2: 10 92 8f 01 sts 0x018F, r1
\r
1469 7a6: 10 92 90 01 sts 0x0190, r1
\r
1470 setup.dac_value = 0;
\r
1471 7aa: 10 92 92 01 sts 0x0192, r1
\r
1472 7ae: 10 92 91 01 sts 0x0191, r1
\r
1481 // Program initalization
\r
1482 Initialization();
\r
1483 7b4: 0e 94 9f 03 call 0x73e ; 0x73e <Initialization>
\r
1484 sei(); // mt __enable_interrupt();
\r
1488 LCD_puts("hello");
\r
1489 7ba: 82 e0 ldi r24, 0x02 ; 2
\r
1490 7bc: 91 e0 ldi r25, 0x01 ; 1
\r
1491 7be: 0e 94 0c 02 call 0x418 ; 0x418 <LCD_puts>
\r
1493 USART_printf("\r\n# hello\r\n");
\r
1494 7c2: 00 d0 rcall .+0 ; 0x7c4 <main+0x10>
\r
1495 7c4: 88 e0 ldi r24, 0x08 ; 8
\r
1496 7c6: 91 e0 ldi r25, 0x01 ; 1
\r
1497 7c8: ed b7 in r30, 0x3d ; 61
\r
1498 7ca: fe b7 in r31, 0x3e ; 62
\r
1499 7cc: 92 83 std Z+2, r25 ; 0x02
\r
1500 7ce: 81 83 std Z+1, r24 ; 0x01
\r
1501 7d0: 0e 94 4c 04 call 0x898 ; 0x898 <USART_printf>
\r
1505 7d8: 88 ee ldi r24, 0xE8 ; 232
\r
1506 7da: 93 e0 ldi r25, 0x03 ; 3
\r
1507 7dc: 0e 94 3a 03 call 0x674 ; 0x674 <Delay>
\r
1514 7e0: 0e 94 ca 05 call 0xb94 ; 0xb94 <ParseCommand>
\r
1515 7e4: fd cf rjmp .-6 ; 0x7e0 <main+0x2c>
\r
1517 000007e6 <Timer0_Init>:
\r
1518 *****************************************************************************/
\r
1519 void Timer0_Init(void)
\r
1524 7e6: 23 9a sbi 0x04, 3 ; 4
\r
1526 // Initialize Timer0.
\r
1527 // Used to give the correct time-delays in the song
\r
1529 // Enable timer0 compare interrupt
\r
1530 TIMSK0 = (1<<OCIE0A);
\r
1531 7e8: 82 e0 ldi r24, 0x02 ; 2
\r
1532 7ea: 80 93 6e 00 sts 0x006E, r24
\r
1534 // Sets the compare value
\r
1536 7ee: 86 e2 ldi r24, 0x26 ; 38
\r
1537 7f0: 87 bd out 0x27, r24 ; 39
\r
1539 // Set Clear on Timer Compare (CTC) mode, CLK/256 prescaler
\r
1540 TCCR0A = (1<<WGM01)|(0<<WGM00)|(4<<CS00);
\r
1541 7f2: 8c e0 ldi r24, 0x0C ; 12
\r
1542 7f4: 84 bd out 0x24, r24 ; 36
\r
1546 000007f8 <__vector_10>:
\r
1548 // #pragma vector = TIMER0_COMP_vect
\r
1549 // __interrupt void TIMER0_COMP_interrupt(void)
\r
1550 // SIGNAL(SIG_OUTPUT_COMPARE0)
\r
1551 ISR(TIMER0_COMP_vect)
\r
1553 7f8: 1f 92 push r1
\r
1554 7fa: 0f 92 push r0
\r
1555 7fc: 0f b6 in r0, 0x3f ; 63
\r
1556 7fe: 0f 92 push r0
\r
1557 800: 11 24 eor r1, r1
\r
1558 802: 8f 93 push r24
\r
1559 804: 9f 93 push r25
\r
1560 806: af 93 push r26
\r
1561 808: bf 93 push r27
\r
1563 setup.elapsed_time += 1;
\r
1564 80a: 80 91 8d 01 lds r24, 0x018D
\r
1565 80e: 90 91 8e 01 lds r25, 0x018E
\r
1566 812: a0 91 8f 01 lds r26, 0x018F
\r
1567 816: b0 91 90 01 lds r27, 0x0190
\r
1568 81a: 01 96 adiw r24, 0x01 ; 1
\r
1569 81c: a1 1d adc r26, r1
\r
1570 81e: b1 1d adc r27, r1
\r
1571 820: 80 93 8d 01 sts 0x018D, r24
\r
1572 824: 90 93 8e 01 sts 0x018E, r25
\r
1573 828: a0 93 8f 01 sts 0x018F, r26
\r
1574 82c: b0 93 90 01 sts 0x0190, r27
\r
1575 PORTB ^= (1<<SCK);
\r
1576 830: 85 b1 in r24, 0x05 ; 5
\r
1577 832: 98 e0 ldi r25, 0x08 ; 8
\r
1578 834: 89 27 eor r24, r25
\r
1579 836: 85 b9 out 0x05, r24 ; 5
\r
1582 838: bf 91 pop r27
\r
1583 83a: af 91 pop r26
\r
1584 83c: 9f 91 pop r25
\r
1585 83e: 8f 91 pop r24
\r
1587 842: 0f be out 0x3f, r0 ; 63
\r
1592 0000084a <USART_Init>:
\r
1594 *****************************************************************************/
\r
1595 void USART_Init(unsigned int baudrate)
\r
1598 UBRRH = (unsigned char)(baudrate>>8);
\r
1599 84a: 90 93 c5 00 sts 0x00C5, r25
\r
1600 UBRRL = (unsigned char)baudrate;
\r
1601 84e: 80 93 c4 00 sts 0x00C4, r24
\r
1603 // Disable 2x speed
\r
1605 852: 10 92 c0 00 sts 0x00C0, r1
\r
1606 // cbiBF(PORTB, 6);
\r
1607 // cbiBF(PORTB, 7);
\r
1609 #ifdef WITH_TRANSMIT
\r
1610 // enabled receive and transmit
\r
1611 UCSRB = (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<UDRIE);
\r
1612 856: 88 e1 ldi r24, 0x18 ; 24
\r
1613 858: 80 93 c1 00 sts 0x00C1, r24
\r
1614 // send (only receive in vcard).
\r
1615 UCSRB = (1<<RXEN)|(0<<TXEN)|(0<<RXCIE)|(0<<UDRIE);
\r
1618 // Async. mode, 8N1
\r
1619 UCSRC = (0<<UMSEL)|(0<<UPM0)|(0<<USBS)|(3<<UCSZ0)|(0<<UCPOL);
\r
1620 85c: 86 e0 ldi r24, 0x06 ; 6
\r
1621 85e: 80 93 c2 00 sts 0x00C2, r24
\r
1625 00000864 <USART_Tx>:
\r
1626 * Purpose : Send one byte through the USART
\r
1628 *****************************************************************************/
\r
1630 void USART_Tx(char data)
\r
1632 864: 98 2f mov r25, r24
\r
1634 866: 2e 9a sbi 0x05, 6 ; 5
\r
1635 while (!(UCSRA & (1<<UDRE)));
\r
1636 868: 80 91 c0 00 lds r24, 0x00C0
\r
1637 86c: 85 ff sbrs r24, 5
\r
1638 86e: fc cf rjmp .-8 ; 0x868 <USART_Tx+0x4>
\r
1640 870: 90 93 c6 00 sts 0x00C6, r25
\r
1641 // cbiBF(PORTB, 6);
\r
1645 00000876 <USART_Rx>:
\r
1646 * Purpose : Receives one byte from the USART
\r
1648 *****************************************************************************/
\r
1649 char USART_Rx(void)
\r
1652 876: 2f 9a sbi 0x05, 7 ; 5
\r
1653 while (!(UCSRA & (1<<RXC)));
\r
1654 878: 80 91 c0 00 lds r24, 0x00C0
\r
1655 87c: 87 ff sbrs r24, 7
\r
1656 87e: fc cf rjmp .-8 ; 0x878 <USART_Rx+0x2>
\r
1657 // cbiBF(PORTB, 5);
\r
1659 880: 80 91 c6 00 lds r24, 0x00C6
\r
1663 00000886 <USART_Poll>:
\r
1664 char USART_Poll(void)
\r
1666 if (!(UCSRA & (1<<RXC)))
\r
1667 886: 80 91 c0 00 lds r24, 0x00C0
\r
1668 88a: 87 fd sbrc r24, 7
\r
1669 88c: 02 c0 rjmp .+4 ; 0x892 <USART_Poll+0xc>
\r
1670 88e: 80 e0 ldi r24, 0x00 ; 0
\r
1674 892: 80 91 c6 00 lds r24, 0x00C6
\r
1678 00000898 <USART_printf>:
\r
1680 int USART_printf(const char * format, ...)
\r
1682 898: 0f 93 push r16
\r
1683 89a: 1f 93 push r17
\r
1684 89c: df 93 push r29
\r
1685 89e: cf 93 push r28
\r
1686 8a0: cd b7 in r28, 0x3d ; 61
\r
1687 8a2: de b7 in r29, 0x3e ; 62
\r
1688 8a4: c0 55 subi r28, 0x50 ; 80
\r
1689 8a6: d0 40 sbci r29, 0x00 ; 0
\r
1690 8a8: 0f b6 in r0, 0x3f ; 63
\r
1692 8ac: de bf out 0x3e, r29 ; 62
\r
1693 8ae: 0f be out 0x3f, r0 ; 63
\r
1694 8b0: cd bf out 0x3d, r28 ; 61
\r
1695 8b2: fe 01 movw r30, r28
\r
1696 8b4: e9 5a subi r30, 0xA9 ; 169
\r
1697 8b6: ff 4f sbci r31, 0xFF ; 255
\r
1698 8b8: 61 91 ld r22, Z+
\r
1699 8ba: 71 91 ld r23, Z+
\r
1702 va_start(args, format);
\r
1703 int result = vsprintf(buffer, format, args);
\r
1704 8bc: 8e 01 movw r16, r28
\r
1705 8be: 0f 5f subi r16, 0xFF ; 255
\r
1706 8c0: 1f 4f sbci r17, 0xFF ; 255
\r
1707 8c2: c8 01 movw r24, r16
\r
1708 8c4: af 01 movw r20, r30
\r
1709 8c6: 0e 94 41 05 call 0xa82 ; 0xa82 <vsprintf>
\r
1710 8ca: 38 2f mov r19, r24
\r
1711 8cc: f8 01 movw r30, r16
\r
1712 8ce: 08 c0 rjmp .+16 ; 0x8e0 <USART_printf+0x48>
\r
1714 *****************************************************************************/
\r
1716 void USART_Tx(char data)
\r
1719 8d0: 2e 9a sbi 0x05, 6 ; 5
\r
1720 while (!(UCSRA & (1<<UDRE)));
\r
1721 8d2: 80 91 c0 00 lds r24, 0x00C0
\r
1722 8d6: 85 ff sbrs r24, 5
\r
1723 8d8: fc cf rjmp .-8 ; 0x8d2 <USART_printf+0x3a>
\r
1725 8da: 20 93 c6 00 sts 0x00C6, r18
\r
1727 va_start(args, format);
\r
1728 int result = vsprintf(buffer, format, args);
\r
1731 for (char * b = buffer; *b != '\0'; ++b)
\r
1732 8de: 31 96 adiw r30, 0x01 ; 1
\r
1733 8e0: 20 81 ld r18, Z
\r
1734 8e2: 22 23 and r18, r18
\r
1735 8e4: a9 f7 brne .-22 ; 0x8d0 <USART_printf+0x38>
\r
1739 8e6: 83 2f mov r24, r19
\r
1740 8e8: c0 5b subi r28, 0xB0 ; 176
\r
1741 8ea: df 4f sbci r29, 0xFF ; 255
\r
1742 8ec: 0f b6 in r0, 0x3f ; 63
\r
1744 8f0: de bf out 0x3e, r29 ; 62
\r
1745 8f2: 0f be out 0x3f, r0 ; 63
\r
1746 8f4: cd bf out 0x3d, r28 ; 61
\r
1747 8f6: cf 91 pop r28
\r
1748 8f8: df 91 pop r29
\r
1749 8fa: 1f 91 pop r17
\r
1750 8fc: 0f 91 pop r16
\r
1753 00000900 <luint2str>:
\r
1756 //#include <math.h> // Needed for modf
\r
1758 int luint2str(char * str, uint32 integer)
\r
1760 900: 8f 92 push r8
\r
1761 902: 9f 92 push r9
\r
1762 904: af 92 push r10
\r
1763 906: bf 92 push r11
\r
1764 908: cf 92 push r12
\r
1765 90a: df 92 push r13
\r
1766 90c: ef 92 push r14
\r
1767 90e: ff 92 push r15
\r
1768 910: 1f 93 push r17
\r
1769 912: cf 93 push r28
\r
1770 914: df 93 push r29
\r
1771 916: 4c 01 movw r8, r24
\r
1772 918: 6a 01 movw r12, r20
\r
1773 91a: 7b 01 movw r14, r22
\r
1777 91c: 41 15 cp r20, r1
\r
1778 91e: 51 05 cpc r21, r1
\r
1779 920: 61 05 cpc r22, r1
\r
1780 922: 71 05 cpc r23, r1
\r
1781 924: 19 f0 breq .+6 ; 0x92c <luint2str+0x2c>
\r
1782 926: 80 e0 ldi r24, 0x00 ; 0
\r
1783 928: 90 e0 ldi r25, 0x00 ; 0
\r
1784 92a: 20 c0 rjmp .+64 ; 0x96c <luint2str+0x6c>
\r
1787 92c: 80 e3 ldi r24, 0x30 ; 48
\r
1788 92e: f4 01 movw r30, r8
\r
1789 930: 80 83 st Z, r24
\r
1791 932: 11 82 std Z+1, r1 ; 0x01
\r
1792 934: 41 e0 ldi r20, 0x01 ; 1
\r
1793 936: 50 e0 ldi r21, 0x00 ; 0
\r
1794 938: 3d c0 rjmp .+122 ; 0x9b4 <luint2str+0xb4>
\r
1798 while (integer >= base)
\r
1800 remainder = integer % base;
\r
1801 93a: c7 01 movw r24, r14
\r
1802 93c: b6 01 movw r22, r12
\r
1803 93e: 2a e0 ldi r18, 0x0A ; 10
\r
1804 940: 30 e0 ldi r19, 0x00 ; 0
\r
1805 942: 40 e0 ldi r20, 0x00 ; 0
\r
1806 944: 50 e0 ldi r21, 0x00 ; 0
\r
1807 946: 0e 94 30 08 call 0x1060 ; 0x1060 <__udivmodsi4>
\r
1808 94a: 16 2f mov r17, r22
\r
1809 integer = integer / base;
\r
1810 94c: c7 01 movw r24, r14
\r
1811 94e: b6 01 movw r22, r12
\r
1812 950: 2a e0 ldi r18, 0x0A ; 10
\r
1813 952: 30 e0 ldi r19, 0x00 ; 0
\r
1814 954: 40 e0 ldi r20, 0x00 ; 0
\r
1815 956: 50 e0 ldi r21, 0x00 ; 0
\r
1816 958: 0e 94 30 08 call 0x1060 ; 0x1060 <__udivmodsi4>
\r
1817 95c: c9 01 movw r24, r18
\r
1818 95e: da 01 movw r26, r20
\r
1819 960: 6c 01 movw r12, r24
\r
1820 962: 7d 01 movw r14, r26
\r
1821 str[i] = (char)((uint)'0' + remainder);
\r
1822 964: 10 5d subi r17, 0xD0 ; 208
\r
1823 966: f5 01 movw r30, r10
\r
1824 968: 10 83 st Z, r17
\r
1826 96a: ce 01 movw r24, r28
\r
1827 96c: 54 01 movw r10, r8
\r
1828 96e: a8 0e add r10, r24
\r
1829 970: b9 1e adc r11, r25
\r
1830 972: ec 01 movw r28, r24
\r
1831 974: 21 96 adiw r28, 0x01 ; 1
\r
1837 while (integer >= base)
\r
1838 976: fa e0 ldi r31, 0x0A ; 10
\r
1839 978: cf 16 cp r12, r31
\r
1840 97a: d1 04 cpc r13, r1
\r
1841 97c: e1 04 cpc r14, r1
\r
1842 97e: f1 04 cpc r15, r1
\r
1843 980: e0 f6 brcc .-72 ; 0x93a <luint2str+0x3a>
\r
1849 str[i] = (char)((uint)'0' + integer);
\r
1850 982: 8c 2d mov r24, r12
\r
1851 984: 80 5d subi r24, 0xD0 ; 208
\r
1852 986: f5 01 movw r30, r10
\r
1853 988: 80 83 st Z, r24
\r
1855 98a: ae 01 movw r20, r28
\r
1858 //reverse the string
\r
1859 for (int j = 0; j < i/2; ++j)
\r
1860 98c: be 01 movw r22, r28
\r
1861 98e: 75 95 asr r23
\r
1862 990: 67 95 ror r22
\r
1863 992: d4 01 movw r26, r8
\r
1864 994: 20 e0 ldi r18, 0x00 ; 0
\r
1865 996: 30 e0 ldi r19, 0x00 ; 0
\r
1866 998: 07 c0 rjmp .+14 ; 0x9a8 <luint2str+0xa8>
\r
1869 99a: 9c 91 ld r25, X
\r
1870 str[j] = str[i - 1 - j];
\r
1871 99c: 80 81 ld r24, Z
\r
1872 99e: 8d 93 st X+, r24
\r
1873 str[i -1 - j] = t;
\r
1874 9a0: 90 83 st Z, r25
\r
1875 str[i] = (char)((uint)'0' + integer);
\r
1879 //reverse the string
\r
1880 for (int j = 0; j < i/2; ++j)
\r
1881 9a2: 2f 5f subi r18, 0xFF ; 255
\r
1882 9a4: 3f 4f sbci r19, 0xFF ; 255
\r
1883 9a6: 31 97 sbiw r30, 0x01 ; 1
\r
1884 9a8: 26 17 cp r18, r22
\r
1885 9aa: 37 07 cpc r19, r23
\r
1886 9ac: b4 f3 brlt .-20 ; 0x99a <luint2str+0x9a>
\r
1889 str[j] = str[i - 1 - j];
\r
1890 str[i -1 - j] = t;
\r
1893 9ae: c8 0d add r28, r8
\r
1894 9b0: d9 1d adc r29, r9
\r
1895 9b2: 18 82 st Y, r1
\r
1900 9b4: ca 01 movw r24, r20
\r
1901 9b6: df 91 pop r29
\r
1902 9b8: cf 91 pop r28
\r
1903 9ba: 1f 91 pop r17
\r
1904 9bc: ff 90 pop r15
\r
1905 9be: ef 90 pop r14
\r
1906 9c0: df 90 pop r13
\r
1907 9c2: cf 90 pop r12
\r
1908 9c4: bf 90 pop r11
\r
1909 9c6: af 90 pop r10
\r
1914 000009ce <uint2str>:
\r
1916 int uint2str(char * str, uint integer)
\r
1918 9ce: 0f 93 push r16
\r
1919 9d0: 1f 93 push r17
\r
1920 9d2: cf 93 push r28
\r
1921 9d4: df 93 push r29
\r
1922 9d6: 8c 01 movw r16, r24
\r
1923 9d8: 9b 01 movw r18, r22
\r
1927 9da: 61 15 cp r22, r1
\r
1928 9dc: 71 05 cpc r23, r1
\r
1929 9de: 19 f0 breq .+6 ; 0x9e6 <uint2str+0x18>
\r
1930 9e0: 80 e0 ldi r24, 0x00 ; 0
\r
1931 9e2: 90 e0 ldi r25, 0x00 ; 0
\r
1932 9e4: 16 c0 rjmp .+44 ; 0xa12 <uint2str+0x44>
\r
1935 9e6: 80 e3 ldi r24, 0x30 ; 48
\r
1936 9e8: f8 01 movw r30, r16
\r
1937 9ea: 80 83 st Z, r24
\r
1939 9ec: 11 82 std Z+1, r1 ; 0x01
\r
1940 9ee: 41 e0 ldi r20, 0x01 ; 1
\r
1941 9f0: 50 e0 ldi r21, 0x00 ; 0
\r
1942 9f2: 2f c0 rjmp .+94 ; 0xa52 <uint2str+0x84>
\r
1946 while (integer >= base)
\r
1948 remainder = integer % base;
\r
1949 9f4: c9 01 movw r24, r18
\r
1950 9f6: 6a e0 ldi r22, 0x0A ; 10
\r
1951 9f8: 70 e0 ldi r23, 0x00 ; 0
\r
1952 9fa: 0e 94 1c 08 call 0x1038 ; 0x1038 <__udivmodhi4>
\r
1953 9fe: 48 2f mov r20, r24
\r
1954 integer = integer / base;
\r
1955 a00: c9 01 movw r24, r18
\r
1956 a02: 6a e0 ldi r22, 0x0A ; 10
\r
1957 a04: 70 e0 ldi r23, 0x00 ; 0
\r
1958 a06: 0e 94 1c 08 call 0x1038 ; 0x1038 <__udivmodhi4>
\r
1959 a0a: 9b 01 movw r18, r22
\r
1960 str[i] = (char)((uint)'0' + remainder);
\r
1961 a0c: 40 5d subi r20, 0xD0 ; 208
\r
1962 a0e: 40 83 st Z, r20
\r
1964 a10: ce 01 movw r24, r28
\r
1965 a12: f8 01 movw r30, r16
\r
1966 a14: e8 0f add r30, r24
\r
1967 a16: f9 1f adc r31, r25
\r
1968 a18: ec 01 movw r28, r24
\r
1969 a1a: 21 96 adiw r28, 0x01 ; 1
\r
1975 while (integer >= base)
\r
1976 a1c: 2a 30 cpi r18, 0x0A ; 10
\r
1977 a1e: 31 05 cpc r19, r1
\r
1978 a20: 48 f7 brcc .-46 ; 0x9f4 <uint2str+0x26>
\r
1984 str[i] = (char)((uint)'0' + integer);
\r
1985 a22: 82 2f mov r24, r18
\r
1986 a24: 80 5d subi r24, 0xD0 ; 208
\r
1987 a26: 80 83 st Z, r24
\r
1989 a28: ae 01 movw r20, r28
\r
1992 //reverse the string
\r
1993 for (int j = 0; j < i/2; ++j)
\r
1994 a2a: be 01 movw r22, r28
\r
1995 a2c: 75 95 asr r23
\r
1996 a2e: 67 95 ror r22
\r
1997 a30: d8 01 movw r26, r16
\r
1998 a32: 20 e0 ldi r18, 0x00 ; 0
\r
1999 a34: 30 e0 ldi r19, 0x00 ; 0
\r
2000 a36: 07 c0 rjmp .+14 ; 0xa46 <uint2str+0x78>
\r
2003 a38: 9c 91 ld r25, X
\r
2004 str[j] = str[i - 1 - j];
\r
2005 a3a: 80 81 ld r24, Z
\r
2006 a3c: 8d 93 st X+, r24
\r
2007 str[i -1 - j] = t;
\r
2008 a3e: 90 83 st Z, r25
\r
2009 str[i] = (char)((uint)'0' + integer);
\r
2013 //reverse the string
\r
2014 for (int j = 0; j < i/2; ++j)
\r
2015 a40: 2f 5f subi r18, 0xFF ; 255
\r
2016 a42: 3f 4f sbci r19, 0xFF ; 255
\r
2017 a44: 31 97 sbiw r30, 0x01 ; 1
\r
2018 a46: 26 17 cp r18, r22
\r
2019 a48: 37 07 cpc r19, r23
\r
2020 a4a: b4 f3 brlt .-20 ; 0xa38 <uint2str+0x6a>
\r
2023 str[j] = str[i - 1 - j];
\r
2024 str[i -1 - j] = t;
\r
2027 a4c: c0 0f add r28, r16
\r
2028 a4e: d1 1f adc r29, r17
\r
2029 a50: 18 82 st Y, r1
\r
2034 a52: ca 01 movw r24, r20
\r
2035 a54: df 91 pop r29
\r
2036 a56: cf 91 pop r28
\r
2037 a58: 1f 91 pop r17
\r
2038 a5a: 0f 91 pop r16
\r
2041 00000a5e <str2str>:
\r
2046 int str2str(char * str1, char * str2)
\r
2048 a5e: 20 e0 ldi r18, 0x00 ; 0
\r
2049 a60: 30 e0 ldi r19, 0x00 ; 0
\r
2050 a62: 03 c0 rjmp .+6 ; 0xa6a <str2str+0xc>
\r
2052 for (i = 0; str2[i] != '\0'; ++i)
\r
2054 str1[i] = str2[i];
\r
2055 a64: ec 93 st X, r30
\r
2058 int str2str(char * str1, char * str2)
\r
2061 for (i = 0; str2[i] != '\0'; ++i)
\r
2062 a66: 2f 5f subi r18, 0xFF ; 255
\r
2063 a68: 3f 4f sbci r19, 0xFF ; 255
\r
2064 a6a: fb 01 movw r30, r22
\r
2065 a6c: e2 0f add r30, r18
\r
2066 a6e: f3 1f adc r31, r19
\r
2067 a70: e0 81 ld r30, Z
\r
2068 a72: dc 01 movw r26, r24
\r
2069 a74: a2 0f add r26, r18
\r
2070 a76: b3 1f adc r27, r19
\r
2071 a78: ee 23 and r30, r30
\r
2072 a7a: a1 f7 brne .-24 ; 0xa64 <str2str+0x6>
\r
2074 str1[i] = str2[i];
\r
2077 a7c: 1c 92 st X, r1
\r
2080 a7e: c9 01 movw r24, r18
\r
2083 00000a82 <vsprintf>:
\r
2087 for (f = 0; format[f] != '\0'; ++f)
\r
2089 if (format[f] == '%')
\r
2090 a82: af 92 push r10
\r
2091 a84: bf 92 push r11
\r
2092 a86: cf 92 push r12
\r
2093 a88: df 92 push r13
\r
2094 a8a: ef 92 push r14
\r
2095 a8c: ff 92 push r15
\r
2096 a8e: 0f 93 push r16
\r
2097 a90: 1f 93 push r17
\r
2098 a92: cf 93 push r28
\r
2099 a94: df 93 push r29
\r
2100 a96: 7c 01 movw r14, r24
\r
2101 a98: 5b 01 movw r10, r22
\r
2102 a9a: da 01 movw r26, r20
\r
2103 a9c: c0 e0 ldi r28, 0x00 ; 0
\r
2104 a9e: d0 e0 ldi r29, 0x00 ; 0
\r
2105 aa0: cc 24 eor r12, r12
\r
2106 aa2: dd 24 eor r13, r13
\r
2107 aa4: 4f c0 rjmp .+158 ; 0xb44 <vsprintf+0xc2>
\r
2108 aa6: 85 32 cpi r24, 0x25 ; 37
\r
2109 aa8: 09 f0 breq .+2 ; 0xaac <vsprintf+0x2a>
\r
2110 aaa: 44 c0 rjmp .+136 ; 0xb34 <vsprintf+0xb2>
\r
2112 switch (format[f+1])
\r
2113 aac: 81 81 ldd r24, Z+1 ; 0x01
\r
2114 aae: 89 36 cpi r24, 0x69 ; 105
\r
2115 ab0: 81 f0 breq .+32 ; 0xad2 <vsprintf+0x50>
\r
2116 ab2: 8a 36 cpi r24, 0x6A ; 106
\r
2117 ab4: 28 f4 brcc .+10 ; 0xac0 <vsprintf+0x3e>
\r
2118 ab6: 83 36 cpi r24, 0x63 ; 99
\r
2119 ab8: 91 f1 breq .+100 ; 0xb1e <vsprintf+0x9c>
\r
2120 aba: 84 36 cpi r24, 0x64 ; 100
\r
2121 abc: 39 f4 brne .+14 ; 0xacc <vsprintf+0x4a>
\r
2122 abe: 09 c0 rjmp .+18 ; 0xad2 <vsprintf+0x50>
\r
2123 ac0: 83 37 cpi r24, 0x73 ; 115
\r
2124 ac2: 11 f1 breq .+68 ; 0xb08 <vsprintf+0x86>
\r
2125 ac4: 85 37 cpi r24, 0x75 ; 117
\r
2126 ac6: 29 f0 breq .+10 ; 0xad2 <vsprintf+0x50>
\r
2127 ac8: 8c 36 cpi r24, 0x6C ; 108
\r
2128 aca: 71 f0 breq .+28 ; 0xae8 <vsprintf+0x66>
\r
2129 acc: cf ef ldi r28, 0xFF ; 255
\r
2130 ace: df ef ldi r29, 0xFF ; 255
\r
2131 ad0: 44 c0 rjmp .+136 ; 0xb5a <vsprintf+0xd8>
\r
2137 uint integer = va_arg(args, uint);
\r
2138 ad2: 8d 01 movw r16, r26
\r
2139 ad4: 0e 5f subi r16, 0xFE ; 254
\r
2140 ad6: 1f 4f sbci r17, 0xFF ; 255
\r
2141 s += uint2str(str+s, integer);
\r
2142 ad8: 6d 91 ld r22, X+
\r
2143 ada: 7c 91 ld r23, X
\r
2144 adc: c7 01 movw r24, r14
\r
2145 ade: 8c 0f add r24, r28
\r
2146 ae0: 9d 1f adc r25, r29
\r
2147 ae2: 0e 94 e7 04 call 0x9ce ; 0x9ce <uint2str>
\r
2148 ae6: 0c c0 rjmp .+24 ; 0xb00 <vsprintf+0x7e>
\r
2153 uint32 integer = va_arg(args, uint32);
\r
2154 ae8: 8d 01 movw r16, r26
\r
2155 aea: 0c 5f subi r16, 0xFC ; 252
\r
2156 aec: 1f 4f sbci r17, 0xFF ; 255
\r
2157 s += luint2str(str+s, integer);
\r
2158 aee: 4d 91 ld r20, X+
\r
2159 af0: 5d 91 ld r21, X+
\r
2160 af2: 6d 91 ld r22, X+
\r
2161 af4: 7c 91 ld r23, X
\r
2162 af6: c7 01 movw r24, r14
\r
2163 af8: 8c 0f add r24, r28
\r
2164 afa: 9d 1f adc r25, r29
\r
2165 afc: 0e 94 80 04 call 0x900 ; 0x900 <luint2str>
\r
2166 b00: c8 0f add r28, r24
\r
2167 b02: d9 1f adc r29, r25
\r
2168 b04: d8 01 movw r26, r16
\r
2169 b06: 12 c0 rjmp .+36 ; 0xb2c <vsprintf+0xaa>
\r
2174 char * str2 = va_arg(args, char*);
\r
2175 b08: 8d 01 movw r16, r26
\r
2176 b0a: 0e 5f subi r16, 0xFE ; 254
\r
2177 b0c: 1f 4f sbci r17, 0xFF ; 255
\r
2178 s += str2str(str+s, str2);
\r
2179 b0e: 6d 91 ld r22, X+
\r
2180 b10: 7c 91 ld r23, X
\r
2181 b12: c7 01 movw r24, r14
\r
2182 b14: 8c 0f add r24, r28
\r
2183 b16: 9d 1f adc r25, r29
\r
2184 b18: 0e 94 2f 05 call 0xa5e ; 0xa5e <str2str>
\r
2185 b1c: f1 cf rjmp .-30 ; 0xb00 <vsprintf+0x7e>
\r
2186 // float flt = va_arg(args, double);
\r
2187 // s += float2str(str+s, flt);
\r
2191 str[s] = (char)(va_arg(args, int));
\r
2192 b1e: f7 01 movw r30, r14
\r
2193 b20: ec 0f add r30, r28
\r
2194 b22: fd 1f adc r31, r29
\r
2195 b24: 8c 91 ld r24, X
\r
2196 b26: 80 83 st Z, r24
\r
2198 b28: 21 96 adiw r28, 0x01 ; 1
\r
2199 b2a: 12 96 adiw r26, 0x02 ; 2
\r
2207 b2e: c1 1c adc r12, r1
\r
2208 b30: d1 1c adc r13, r1
\r
2209 b32: 05 c0 rjmp .+10 ; 0xb3e <vsprintf+0xbc>
\r
2213 str[s] = format[f];
\r
2214 b34: f7 01 movw r30, r14
\r
2215 b36: ec 0f add r30, r28
\r
2216 b38: fd 1f adc r31, r29
\r
2217 b3a: 80 83 st Z, r24
\r
2219 b3c: 21 96 adiw r28, 0x01 ; 1
\r
2221 int vsprintf(char * str, const char * format, va_list args)
\r
2225 for (f = 0; format[f] != '\0'; ++f)
\r
2227 b40: c1 1c adc r12, r1
\r
2228 b42: d1 1c adc r13, r1
\r
2229 b44: f5 01 movw r30, r10
\r
2230 b46: ec 0d add r30, r12
\r
2231 b48: fd 1d adc r31, r13
\r
2232 b4a: 80 81 ld r24, Z
\r
2233 b4c: 88 23 and r24, r24
\r
2234 b4e: 09 f0 breq .+2 ; 0xb52 <vsprintf+0xd0>
\r
2235 b50: aa cf rjmp .-172 ; 0xaa6 <vsprintf+0x24>
\r
2237 str[s] = format[f];
\r
2242 b52: ec 0e add r14, r28
\r
2243 b54: fd 1e adc r15, r29
\r
2244 b56: f7 01 movw r30, r14
\r
2245 b58: 10 82 st Z, r1
\r
2248 b5a: ce 01 movw r24, r28
\r
2249 b5c: df 91 pop r29
\r
2250 b5e: cf 91 pop r28
\r
2251 b60: 1f 91 pop r17
\r
2252 b62: 0f 91 pop r16
\r
2253 b64: ff 90 pop r15
\r
2254 b66: ef 90 pop r14
\r
2255 b68: df 90 pop r13
\r
2256 b6a: cf 90 pop r12
\r
2257 b6c: bf 90 pop r11
\r
2258 b6e: af 90 pop r10
\r
2261 00000b72 <sprintf>:
\r
2263 int sprintf(char * str, const char * format, ...)
\r
2265 b72: df 93 push r29
\r
2266 b74: cf 93 push r28
\r
2267 b76: cd b7 in r28, 0x3d ; 61
\r
2268 b78: de b7 in r29, 0x3e ; 62
\r
2269 b7a: 9e 01 movw r18, r28
\r
2270 b7c: 27 5f subi r18, 0xF7 ; 247
\r
2271 b7e: 3f 4f sbci r19, 0xFF ; 255
\r
2274 va_start(args, format);
\r
2275 result = vsprintf(str, format, args);
\r
2276 b80: 8d 81 ldd r24, Y+5 ; 0x05
\r
2277 b82: 9e 81 ldd r25, Y+6 ; 0x06
\r
2278 b84: 6f 81 ldd r22, Y+7 ; 0x07
\r
2279 b86: 78 85 ldd r23, Y+8 ; 0x08
\r
2280 b88: a9 01 movw r20, r18
\r
2281 b8a: 0e 94 41 05 call 0xa82 ; 0xa82 <vsprintf>
\r
2285 b8e: cf 91 pop r28
\r
2286 b90: df 91 pop r29
\r
2289 00000b94 <ParseCommand>:
\r
2294 uint8 ParseCommand()
\r
2296 b94: af 92 push r10
\r
2297 b96: bf 92 push r11
\r
2298 b98: cf 92 push r12
\r
2299 b9a: df 92 push r13
\r
2300 b9c: ef 92 push r14
\r
2301 b9e: ff 92 push r15
\r
2302 ba0: 0f 93 push r16
\r
2303 ba2: 1f 93 push r17
\r
2304 ba4: df 93 push r29
\r
2305 ba6: cf 93 push r28
\r
2306 ba8: cd b7 in r28, 0x3d ; 61
\r
2307 baa: de b7 in r29, 0x3e ; 62
\r
2308 bac: 2a 97 sbiw r28, 0x0a ; 10
\r
2309 bae: 0f b6 in r0, 0x3f ; 63
\r
2311 bb2: de bf out 0x3e, r29 ; 62
\r
2312 bb4: 0f be out 0x3f, r0 ; 63
\r
2313 bb6: cd bf out 0x3d, r28 ; 61
\r
2317 bb8: 83 e2 ldi r24, 0x23 ; 35
\r
2318 bba: 0e 94 32 04 call 0x864 ; 0x864 <USART_Tx>
\r
2319 char c = USART_Rx();
\r
2320 bbe: 0e 94 3b 04 call 0x876 ; 0x876 <USART_Rx>
\r
2321 bc2: c8 2e mov r12, r24
\r
2322 LCD_puts("input");
\r
2323 bc4: 84 e1 ldi r24, 0x14 ; 20
\r
2324 bc6: 91 e0 ldi r25, 0x01 ; 1
\r
2325 bc8: 0e 94 0c 02 call 0x418 ; 0x418 <LCD_puts>
\r
2326 char arg[MAX_TOKEN_SIZE];
\r
2328 bcc: 8c 2d mov r24, r12
\r
2329 bce: 0e 94 32 04 call 0x864 ; 0x864 <USART_Tx>
\r
2330 bd2: dd 24 eor r13, r13
\r
2335 arg[i] = USART_Rx();
\r
2336 bd4: 5e 01 movw r10, r28
\r
2338 bd8: a1 1c adc r10, r1
\r
2339 bda: b1 1c adc r11, r1
\r
2340 bdc: ed 2c mov r14, r13
\r
2341 bde: ff 24 eor r15, r15
\r
2342 be0: 0e 94 3b 04 call 0x876 ; 0x876 <USART_Rx>
\r
2343 be4: 85 01 movw r16, r10
\r
2344 be6: 0e 0d add r16, r14
\r
2345 be8: 1f 1d adc r17, r15
\r
2346 bea: d8 01 movw r26, r16
\r
2347 bec: 8c 93 st X, r24
\r
2349 bee: 0e 94 32 04 call 0x864 ; 0x864 <USART_Tx>
\r
2351 bf2: f8 01 movw r30, r16
\r
2352 bf4: 00 81 ld r16, Z
\r
2353 bf6: 0d 30 cpi r16, 0x0D ; 13
\r
2354 bf8: 49 f0 breq .+18 ; 0xc0c <ParseCommand+0x78>
\r
2355 bfa: 0e 30 cpi r16, 0x0E ; 14
\r
2356 bfc: 18 f4 brcc .+6 ; 0xc04 <ParseCommand+0x70>
\r
2357 bfe: 0a 30 cpi r16, 0x0A ; 10
\r
2358 c00: 49 f4 brne .+18 ; 0xc14 <ParseCommand+0x80>
\r
2359 c02: 04 c0 rjmp .+8 ; 0xc0c <ParseCommand+0x78>
\r
2360 c04: 00 32 cpi r16, 0x20 ; 32
\r
2361 c06: 39 f0 breq .+14 ; 0xc16 <ParseCommand+0x82>
\r
2362 c08: 0b 33 cpi r16, 0x3B ; 59
\r
2363 c0a: 21 f4 brne .+8 ; 0xc14 <ParseCommand+0x80>
\r
2370 c0c: ea 0c add r14, r10
\r
2371 c0e: fb 1c adc r15, r11
\r
2372 c10: d7 01 movw r26, r14
\r
2373 c12: 1c 92 st X, r1
\r
2376 c14: d3 94 inc r13
\r
2381 while ((arg[i-1] != '\0') && (i < MAX_TOKEN_SIZE));
\r
2382 c16: ed 2c mov r14, r13
\r
2383 c18: ff 24 eor r15, r15
\r
2384 c1a: 87 01 movw r16, r14
\r
2385 c1c: 01 50 subi r16, 0x01 ; 1
\r
2386 c1e: 10 40 sbci r17, 0x00 ; 0
\r
2387 c20: f5 01 movw r30, r10
\r
2388 c22: e0 0f add r30, r16
\r
2389 c24: f1 1f adc r31, r17
\r
2390 c26: 80 81 ld r24, Z
\r
2391 c28: 88 23 and r24, r24
\r
2392 c2a: 19 f0 breq .+6 ; 0xc32 <ParseCommand+0x9e>
\r
2393 c2c: b9 e0 ldi r27, 0x09 ; 9
\r
2394 c2e: bd 15 cp r27, r13
\r
2395 c30: a8 f6 brcc .-86 ; 0xbdc <ParseCommand+0x48>
\r
2396 USART_printf("\r\n");
\r
2397 c32: 00 d0 rcall .+0 ; 0xc34 <ParseCommand+0xa0>
\r
2398 c34: 8a e1 ldi r24, 0x1A ; 26
\r
2399 c36: 91 e0 ldi r25, 0x01 ; 1
\r
2400 c38: ed b7 in r30, 0x3d ; 61
\r
2401 c3a: fe b7 in r31, 0x3e ; 62
\r
2402 c3c: 92 83 std Z+2, r25 ; 0x02
\r
2403 c3e: 81 83 std Z+1, r24 ; 0x01
\r
2404 c40: 0e 94 4c 04 call 0x898 ; 0x898 <USART_printf>
\r
2405 if (arg[i-1] != '\0')
\r
2406 c44: fe 01 movw r30, r28
\r
2407 c46: 31 96 adiw r30, 0x01 ; 1
\r
2408 c48: 0e 0f add r16, r30
\r
2409 c4a: 1f 1f adc r17, r31
\r
2412 c50: d8 01 movw r26, r16
\r
2413 c52: 8c 91 ld r24, X
\r
2414 c54: 88 23 and r24, r24
\r
2415 c56: 79 f0 breq .+30 ; 0xc76 <ParseCommand+0xe2>
\r
2418 c58: 8d e1 ldi r24, 0x1D ; 29
\r
2419 c5a: 91 e0 ldi r25, 0x01 ; 1
\r
2420 c5c: 0e 94 0c 02 call 0x418 ; 0x418 <LCD_puts>
\r
2421 USART_printf("?\r\n");
\r
2422 c60: 00 d0 rcall .+0 ; 0xc62 <ParseCommand+0xce>
\r
2423 c62: 8f e1 ldi r24, 0x1F ; 31
\r
2424 c64: 91 e0 ldi r25, 0x01 ; 1
\r
2425 c66: ed b7 in r30, 0x3d ; 61
\r
2426 c68: fe b7 in r31, 0x3e ; 62
\r
2427 c6a: 92 83 std Z+2, r25 ; 0x02
\r
2428 c6c: 81 83 std Z+1, r24 ; 0x01
\r
2429 c6e: 0e 94 4c 04 call 0x898 ; 0x898 <USART_printf>
\r
2430 c72: 8f ef ldi r24, 0xFF ; 255
\r
2431 c74: 2d c0 rjmp .+90 ; 0xcd0 <ParseCommand+0x13c>
\r
2436 c76: ee 0d add r30, r14
\r
2437 c78: ff 1d adc r31, r15
\r
2438 c7a: 10 82 st Z, r1
\r
2441 command funct = NULL;
\r
2444 c7c: f4 e6 ldi r31, 0x64 ; 100
\r
2445 c7e: cf 16 cp r12, r31
\r
2446 c80: 91 f0 breq .+36 ; 0xca6 <ParseCommand+0x112>
\r
2447 c82: fc 15 cp r31, r12
\r
2448 c84: 20 f0 brcs .+8 ; 0xc8e <ParseCommand+0xfa>
\r
2449 c86: 8d e0 ldi r24, 0x0D ; 13
\r
2450 c88: c8 16 cp r12, r24
\r
2451 c8a: a1 f4 brne .+40 ; 0xcb4 <ParseCommand+0x120>
\r
2452 c8c: 06 c0 rjmp .+12 ; 0xc9a <ParseCommand+0x106>
\r
2453 c8e: a0 e7 ldi r26, 0x70 ; 112
\r
2454 c90: ca 16 cp r12, r26
\r
2455 c92: 31 f0 breq .+12 ; 0xca0 <ParseCommand+0x10c>
\r
2456 c94: b2 e7 ldi r27, 0x72 ; 114
\r
2457 c96: cb 16 cp r12, r27
\r
2458 c98: 69 f4 brne .+26 ; 0xcb4 <ParseCommand+0x120>
\r
2459 c9a: ec ea ldi r30, 0xAC ; 172
\r
2460 c9c: f6 e0 ldi r31, 0x06 ; 6
\r
2461 c9e: 05 c0 rjmp .+10 ; 0xcaa <ParseCommand+0x116>
\r
2462 ca0: ee e1 ldi r30, 0x1E ; 30
\r
2463 ca2: f7 e0 ldi r31, 0x07 ; 7
\r
2464 ca4: 02 c0 rjmp .+4 ; 0xcaa <ParseCommand+0x116>
\r
2471 ca6: eb e7 ldi r30, 0x7B ; 123
\r
2472 ca8: f6 e0 ldi r31, 0x06 ; 6
\r
2478 if (funct == NULL || funct(arg) != 0)
\r
2479 caa: ce 01 movw r24, r28
\r
2480 cac: 01 96 adiw r24, 0x01 ; 1
\r
2482 cb0: 88 23 and r24, r24
\r
2483 cb2: 81 f0 breq .+32 ; 0xcd4 <ParseCommand+0x140>
\r
2486 cb4: 8d e1 ldi r24, 0x1D ; 29
\r
2487 cb6: 91 e0 ldi r25, 0x01 ; 1
\r
2488 cb8: 0e 94 0c 02 call 0x418 ; 0x418 <LCD_puts>
\r
2489 USART_printf("?\r\n");
\r
2490 cbc: 00 d0 rcall .+0 ; 0xcbe <ParseCommand+0x12a>
\r
2491 cbe: 8f e1 ldi r24, 0x1F ; 31
\r
2492 cc0: 91 e0 ldi r25, 0x01 ; 1
\r
2493 cc2: ed b7 in r30, 0x3d ; 61
\r
2494 cc4: fe b7 in r31, 0x3e ; 62
\r
2495 cc6: 92 83 std Z+2, r25 ; 0x02
\r
2496 cc8: 81 83 std Z+1, r24 ; 0x01
\r
2497 cca: 0e 94 4c 04 call 0x898 ; 0x898 <USART_printf>
\r
2498 cce: 8e ef ldi r24, 0xFE ; 254
\r
2505 cd4: 2a 96 adiw r28, 0x0a ; 10
\r
2506 cd6: 0f b6 in r0, 0x3f ; 63
\r
2508 cda: de bf out 0x3e, r29 ; 62
\r
2509 cdc: 0f be out 0x3f, r0 ; 63
\r
2510 cde: cd bf out 0x3d, r28 ; 61
\r
2511 ce0: cf 91 pop r28
\r
2512 ce2: df 91 pop r29
\r
2513 ce4: 1f 91 pop r17
\r
2514 ce6: 0f 91 pop r16
\r
2515 ce8: ff 90 pop r15
\r
2516 cea: ef 90 pop r14
\r
2517 cec: df 90 pop r13
\r
2518 cee: cf 90 pop r12
\r
2519 cf0: bf 90 pop r11
\r
2520 cf2: af 90 pop r10
\r
2528 uint8 dac(char * arg)
\r
2530 cf6: fc 01 movw r30, r24
\r
2531 if (arg[0] != '\0')
\r
2532 cf8: 80 81 ld r24, Z
\r
2533 cfa: 88 23 and r24, r24
\r
2534 cfc: 49 f0 breq .+18 ; 0xd10 <dac+0x1a>
\r
2536 setup.dac_value = atoi(arg);
\r
2537 cfe: cf 01 movw r24, r30
\r
2538 d00: 0e 94 52 08 call 0x10a4 ; 0x10a4 <atoi>
\r
2539 d04: 90 93 92 01 sts 0x0192, r25
\r
2540 d08: 80 93 91 01 sts 0x0191, r24
\r
2541 DAC_Set(setup.dac_value);
\r
2542 d0c: 0e 94 a8 07 call 0xf50 ; 0xf50 <DAC_Set>
\r
2544 USART_printf("# DAC %i\r\n", setup.dac_value);
\r
2545 d10: 00 d0 rcall .+0 ; 0xd12 <dac+0x1c>
\r
2546 d12: 00 d0 rcall .+0 ; 0xd14 <dac+0x1e>
\r
2547 d14: 83 e2 ldi r24, 0x23 ; 35
\r
2548 d16: 91 e0 ldi r25, 0x01 ; 1
\r
2549 d18: ed b7 in r30, 0x3d ; 61
\r
2550 d1a: fe b7 in r31, 0x3e ; 62
\r
2551 d1c: 92 83 std Z+2, r25 ; 0x02
\r
2552 d1e: 81 83 std Z+1, r24 ; 0x01
\r
2553 d20: 80 91 91 01 lds r24, 0x0191
\r
2554 d24: 90 91 92 01 lds r25, 0x0192
\r
2555 d28: 94 83 std Z+4, r25 ; 0x04
\r
2556 d2a: 83 83 std Z+3, r24 ; 0x03
\r
2557 d2c: 0e 94 4c 04 call 0x898 ; 0x898 <USART_printf>
\r
2558 LCD_printf("DAC %i", setup.dac_value);
\r
2559 d30: 8e e2 ldi r24, 0x2E ; 46
\r
2560 d32: 91 e0 ldi r25, 0x01 ; 1
\r
2561 d34: ed b7 in r30, 0x3d ; 61
\r
2562 d36: fe b7 in r31, 0x3e ; 62
\r
2563 d38: 92 83 std Z+2, r25 ; 0x02
\r
2564 d3a: 81 83 std Z+1, r24 ; 0x01
\r
2565 d3c: 80 91 91 01 lds r24, 0x0191
\r
2566 d40: 90 91 92 01 lds r25, 0x0192
\r
2567 d44: 94 83 std Z+4, r25 ; 0x04
\r
2568 d46: 83 83 std Z+3, r24 ; 0x03
\r
2569 d48: 0e 94 0d 03 call 0x61a ; 0x61a <LCD_printf>
\r
2576 d54: 80 e0 ldi r24, 0x00 ; 0
\r
2580 #include <string.h>
\r
2581 #include <stdlib.h>
\r
2584 uint8 read(char * arg)
\r
2586 d58: ef 92 push r14
\r
2587 d5a: ff 92 push r15
\r
2588 d5c: 0f 93 push r16
\r
2589 d5e: 1f 93 push r17
\r
2590 d60: cf 93 push r28
\r
2591 d62: df 93 push r29
\r
2592 d64: 8c 01 movw r16, r24
\r
2593 if (arg[0] == '\0')
\r
2594 d66: dc 01 movw r26, r24
\r
2595 d68: 8c 91 ld r24, X
\r
2596 d6a: 88 23 and r24, r24
\r
2597 d6c: 31 f0 breq .+12 ; 0xd7a <read+0x22>
\r
2598 d6e: e8 01 movw r28, r16
\r
2600 for (char * a = arg; *a != '\0'; ++a)
\r
2602 //uint8 channel = *a - '0';
\r
2603 //if (channel >= 0 && channel <= 7)
\r
2604 USART_printf("%i ", ADC_read(*a - '0'));
\r
2605 d70: 95 e3 ldi r25, 0x35 ; 53
\r
2606 d72: e9 2e mov r14, r25
\r
2607 d74: 91 e0 ldi r25, 0x01 ; 1
\r
2608 d76: f9 2e mov r15, r25
\r
2609 d78: 2e c0 rjmp .+92 ; 0xdd6 <read+0x7e>
\r
2610 #include <stdlib.h>
\r
2613 uint8 read(char * arg)
\r
2615 if (arg[0] == '\0')
\r
2616 d7a: 10 e0 ldi r17, 0x00 ; 0
\r
2618 for (uint8 i=0; i < 8; ++i)
\r
2620 USART_printf("%i ", ADC_read(i));
\r
2621 d7c: c5 e3 ldi r28, 0x35 ; 53
\r
2622 d7e: d1 e0 ldi r29, 0x01 ; 1
\r
2623 d80: 81 2f mov r24, r17
\r
2624 d82: 0e 94 83 00 call 0x106 ; 0x106 <ADC_read>
\r
2625 d86: 00 d0 rcall .+0 ; 0xd88 <read+0x30>
\r
2626 d88: 00 d0 rcall .+0 ; 0xd8a <read+0x32>
\r
2627 d8a: ed b7 in r30, 0x3d ; 61
\r
2628 d8c: fe b7 in r31, 0x3e ; 62
\r
2629 d8e: d2 83 std Z+2, r29 ; 0x02
\r
2630 d90: c1 83 std Z+1, r28 ; 0x01
\r
2631 d92: 94 83 std Z+4, r25 ; 0x04
\r
2632 d94: 83 83 std Z+3, r24 ; 0x03
\r
2633 d96: 0e 94 4c 04 call 0x898 ; 0x898 <USART_printf>
\r
2635 uint8 read(char * arg)
\r
2637 if (arg[0] == '\0')
\r
2639 for (uint8 i=0; i < 8; ++i)
\r
2640 d9a: 1f 5f subi r17, 0xFF ; 255
\r
2645 da4: 18 30 cpi r17, 0x08 ; 8
\r
2646 da6: 61 f7 brne .-40 ; 0xd80 <read+0x28>
\r
2647 da8: 34 c0 rjmp .+104 ; 0xe12 <read+0xba>
\r
2649 for (char * a = arg; *a != '\0'; ++a)
\r
2651 //uint8 channel = *a - '0';
\r
2652 //if (channel >= 0 && channel <= 7)
\r
2653 USART_printf("%i ", ADC_read(*a - '0'));
\r
2654 daa: 80 53 subi r24, 0x30 ; 48
\r
2655 dac: 0e 94 83 00 call 0x106 ; 0x106 <ADC_read>
\r
2656 db0: 00 d0 rcall .+0 ; 0xdb2 <read+0x5a>
\r
2657 db2: 00 d0 rcall .+0 ; 0xdb4 <read+0x5c>
\r
2658 db4: ad b7 in r26, 0x3d ; 61
\r
2659 db6: be b7 in r27, 0x3e ; 62
\r
2660 db8: 12 96 adiw r26, 0x02 ; 2
\r
2661 dba: fc 92 st X, r15
\r
2662 dbc: ee 92 st -X, r14
\r
2663 dbe: 11 97 sbiw r26, 0x01 ; 1
\r
2664 dc0: 14 96 adiw r26, 0x04 ; 4
\r
2665 dc2: 9c 93 st X, r25
\r
2666 dc4: 8e 93 st -X, r24
\r
2667 dc6: 13 97 sbiw r26, 0x03 ; 3
\r
2668 dc8: 0e 94 4c 04 call 0x898 ; 0x898 <USART_printf>
\r
2669 USART_printf("%i ", ADC_read(i));
\r
2674 for (char * a = arg; *a != '\0'; ++a)
\r
2675 dcc: 21 96 adiw r28, 0x01 ; 1
\r
2680 dd6: 88 81 ld r24, Y
\r
2681 dd8: 88 23 and r24, r24
\r
2682 dda: 39 f7 brne .-50 ; 0xdaa <read+0x52>
\r
2684 //uint8 channel = *a - '0';
\r
2685 //if (channel >= 0 && channel <= 7)
\r
2686 USART_printf("%i ", ADC_read(*a - '0'));
\r
2688 LCD_printf("%i", setup.adc_values[(int)(arg[0] - '0')]);
\r
2689 ddc: 00 d0 rcall .+0 ; 0xdde <read+0x86>
\r
2690 dde: 00 d0 rcall .+0 ; 0xde0 <read+0x88>
\r
2691 de0: 89 e3 ldi r24, 0x39 ; 57
\r
2692 de2: 91 e0 ldi r25, 0x01 ; 1
\r
2693 de4: ed b7 in r30, 0x3d ; 61
\r
2694 de6: fe b7 in r31, 0x3e ; 62
\r
2695 de8: 92 83 std Z+2, r25 ; 0x02
\r
2696 dea: 81 83 std Z+1, r24 ; 0x01
\r
2697 dec: d8 01 movw r26, r16
\r
2698 dee: ec 91 ld r30, X
\r
2699 df0: f0 e0 ldi r31, 0x00 ; 0
\r
2700 df2: ee 0f add r30, r30
\r
2701 df4: ff 1f adc r31, r31
\r
2702 df6: ed 5c subi r30, 0xCD ; 205
\r
2703 df8: fe 4f sbci r31, 0xFE ; 254
\r
2704 dfa: 80 81 ld r24, Z
\r
2705 dfc: 91 81 ldd r25, Z+1 ; 0x01
\r
2706 dfe: ed b7 in r30, 0x3d ; 61
\r
2707 e00: fe b7 in r31, 0x3e ; 62
\r
2708 e02: 94 83 std Z+4, r25 ; 0x04
\r
2709 e04: 83 83 std Z+3, r24 ; 0x03
\r
2710 e06: 0e 94 0d 03 call 0x61a ; 0x61a <LCD_printf>
\r
2716 USART_printf("\r\n");
\r
2717 e12: 00 d0 rcall .+0 ; 0xe14 <read+0xbc>
\r
2718 e14: 8c e3 ldi r24, 0x3C ; 60
\r
2719 e16: 91 e0 ldi r25, 0x01 ; 1
\r
2720 e18: ad b7 in r26, 0x3d ; 61
\r
2721 e1a: be b7 in r27, 0x3e ; 62
\r
2722 e1c: 12 96 adiw r26, 0x02 ; 2
\r
2723 e1e: 9c 93 st X, r25
\r
2724 e20: 8e 93 st -X, r24
\r
2725 e22: 11 97 sbiw r26, 0x01 ; 1
\r
2726 e24: 0e 94 4c 04 call 0x898 ; 0x898 <USART_printf>
\r
2732 e2c: 80 e0 ldi r24, 0x00 ; 0
\r
2733 e2e: df 91 pop r29
\r
2734 e30: cf 91 pop r28
\r
2735 e32: 1f 91 pop r17
\r
2736 e34: 0f 91 pop r16
\r
2737 e36: ff 90 pop r15
\r
2738 e38: ef 90 pop r14
\r
2743 uint8 poll(char * arg)
\r
2745 e3c: cf 92 push r12
\r
2746 e3e: df 92 push r13
\r
2747 e40: ef 92 push r14
\r
2748 e42: ff 92 push r15
\r
2749 e44: 0f 93 push r16
\r
2750 e46: 1f 93 push r17
\r
2751 e48: cf 93 push r28
\r
2752 e4a: df 93 push r29
\r
2753 e4c: ec 01 movw r28, r24
\r
2755 USART_printf("# poll\r\n");
\r
2756 e4e: 00 d0 rcall .+0 ; 0xe50 <poll+0x14>
\r
2757 e50: 8f e3 ldi r24, 0x3F ; 63
\r
2758 e52: 91 e0 ldi r25, 0x01 ; 1
\r
2759 e54: ed b7 in r30, 0x3d ; 61
\r
2760 e56: fe b7 in r31, 0x3e ; 62
\r
2761 e58: 92 83 std Z+2, r25 ; 0x02
\r
2762 e5a: 81 83 std Z+1, r24 ; 0x01
\r
2763 e5c: 0e 94 4c 04 call 0x898 ; 0x898 <USART_printf>
\r
2767 e64: 88 e4 ldi r24, 0x48 ; 72
\r
2768 e66: 91 e0 ldi r25, 0x01 ; 1
\r
2769 e68: 0e 94 0c 02 call 0x418 ; 0x418 <LCD_puts>
\r
2770 e6c: ee 24 eor r14, r14
\r
2771 e6e: ff 24 eor r15, r15
\r
2772 e70: 87 01 movw r16, r14
\r
2773 //USART_printf("#t ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7\r\n);
\r
2776 setup.elapsed_time = 0;
\r
2777 USART_printf("%l ", tmr);
\r
2778 e72: 2d e4 ldi r18, 0x4D ; 77
\r
2779 e74: c2 2e mov r12, r18
\r
2780 e76: 21 e0 ldi r18, 0x01 ; 1
\r
2781 e78: d2 2e mov r13, r18
\r
2782 USART_printf("# poll\r\n");
\r
2784 //USART_printf("#t ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7\r\n);
\r
2787 setup.elapsed_time = 0;
\r
2788 e7a: 10 92 8d 01 sts 0x018D, r1
\r
2789 e7e: 10 92 8e 01 sts 0x018E, r1
\r
2790 e82: 10 92 8f 01 sts 0x018F, r1
\r
2791 e86: 10 92 90 01 sts 0x0190, r1
\r
2792 USART_printf("%l ", tmr);
\r
2793 e8a: 00 d0 rcall .+0 ; 0xe8c <poll+0x50>
\r
2794 e8c: 00 d0 rcall .+0 ; 0xe8e <poll+0x52>
\r
2795 e8e: 00 d0 rcall .+0 ; 0xe90 <poll+0x54>
\r
2796 e90: ed b7 in r30, 0x3d ; 61
\r
2797 e92: fe b7 in r31, 0x3e ; 62
\r
2798 e94: d2 82 std Z+2, r13 ; 0x02
\r
2799 e96: c1 82 std Z+1, r12 ; 0x01
\r
2800 e98: e3 82 std Z+3, r14 ; 0x03
\r
2801 e9a: f4 82 std Z+4, r15 ; 0x04
\r
2802 e9c: 05 83 std Z+5, r16 ; 0x05
\r
2803 e9e: 16 83 std Z+6, r17 ; 0x06
\r
2804 ea0: 0e 94 4c 04 call 0x898 ; 0x898 <USART_printf>
\r
2806 ea4: 8d b7 in r24, 0x3d ; 61
\r
2807 ea6: 9e b7 in r25, 0x3e ; 62
\r
2808 ea8: 06 96 adiw r24, 0x06 ; 6
\r
2809 eaa: 0f b6 in r0, 0x3f ; 63
\r
2811 eae: 9e bf out 0x3e, r25 ; 62
\r
2812 eb0: 0f be out 0x3f, r0 ; 63
\r
2813 eb2: 8d bf out 0x3d, r24 ; 61
\r
2814 eb4: ce 01 movw r24, r28
\r
2815 eb6: 0e 94 ac 06 call 0xd58 ; 0xd58 <read>
\r
2816 if (arg[0] == '\0' || arg[1] == 't')
\r
2817 eba: 88 81 ld r24, Y
\r
2818 ebc: 88 23 and r24, r24
\r
2819 ebe: 19 f0 breq .+6 ; 0xec6 <poll+0x8a>
\r
2820 ec0: 89 81 ldd r24, Y+1 ; 0x01
\r
2821 ec2: 84 37 cpi r24, 0x74 ; 116
\r
2822 ec4: 61 f4 brne .+24 ; 0xede <poll+0xa2>
\r
2825 ec6: 81 e0 ldi r24, 0x01 ; 1
\r
2826 ec8: 0e 94 4a 02 call 0x494 ; 0x494 <LCD_Colon>
\r
2827 LCD_ShowTime(tmr);
\r
2828 ecc: c8 01 movw r24, r16
\r
2829 ece: b7 01 movw r22, r14
\r
2830 ed0: 0e 94 64 02 call 0x4c8 ; 0x4c8 <LCD_ShowTime>
\r
2831 ed4: 04 c0 rjmp .+8 ; 0xede <poll+0xa2>
\r
2835 while (setup.elapsed_time < setup.poll_delay)
\r
2837 if (USART_Poll() != '\0')
\r
2838 ed6: 0e 94 43 04 call 0x886 ; 0x886 <USART_Poll>
\r
2839 eda: 88 23 and r24, r24
\r
2840 edc: 29 f5 brne .+74 ; 0xf28 <poll+0xec>
\r
2842 // USART_printf("# tmr>delay\r\n");
\r
2846 while (setup.elapsed_time < setup.poll_delay)
\r
2847 ede: 20 91 8d 01 lds r18, 0x018D
\r
2848 ee2: 30 91 8e 01 lds r19, 0x018E
\r
2849 ee6: 40 91 8f 01 lds r20, 0x018F
\r
2850 eea: 50 91 90 01 lds r21, 0x0190
\r
2851 eee: 80 91 85 01 lds r24, 0x0185
\r
2852 ef2: 90 91 86 01 lds r25, 0x0186
\r
2853 ef6: a0 e0 ldi r26, 0x00 ; 0
\r
2854 ef8: b0 e0 ldi r27, 0x00 ; 0
\r
2855 efa: 28 17 cp r18, r24
\r
2856 efc: 39 07 cpc r19, r25
\r
2857 efe: 4a 07 cpc r20, r26
\r
2858 f00: 5b 07 cpc r21, r27
\r
2859 f02: 48 f3 brcs .-46 ; 0xed6 <poll+0x9a>
\r
2860 //USART_printf("# STOP %i\r\n", tmr+setup.elapsed_time);
\r
2865 tmr += setup.elapsed_time;
\r
2866 f04: e2 0e add r14, r18
\r
2867 f06: f3 1e adc r15, r19
\r
2868 f08: 04 1f adc r16, r20
\r
2869 f0a: 15 1f adc r17, r21
\r
2871 while (tmr < setup.poll_timeout);
\r
2872 f0c: 80 91 89 01 lds r24, 0x0189
\r
2873 f10: 90 91 8a 01 lds r25, 0x018A
\r
2874 f14: a0 91 8b 01 lds r26, 0x018B
\r
2875 f18: b0 91 8c 01 lds r27, 0x018C
\r
2876 f1c: e8 16 cp r14, r24
\r
2877 f1e: f9 06 cpc r15, r25
\r
2878 f20: 0a 07 cpc r16, r26
\r
2879 f22: 1b 07 cpc r17, r27
\r
2880 f24: 08 f4 brcc .+2 ; 0xf28 <poll+0xec>
\r
2881 f26: a9 cf rjmp .-174 ; 0xe7a <poll+0x3e>
\r
2882 //USART_printf("# done.\r\n");
\r
2884 f28: 80 e0 ldi r24, 0x00 ; 0
\r
2885 f2a: 0e 94 4a 02 call 0x494 ; 0x494 <LCD_Colon>
\r
2888 f2e: 80 e0 ldi r24, 0x00 ; 0
\r
2889 f30: df 91 pop r29
\r
2890 f32: cf 91 pop r28
\r
2891 f34: 1f 91 pop r17
\r
2892 f36: 0f 91 pop r16
\r
2893 f38: ff 90 pop r15
\r
2894 f3a: ef 90 pop r14
\r
2895 f3c: df 90 pop r13
\r
2896 f3e: cf 90 pop r12
\r
2899 00000f42 <DAC_Init>:
\r
2900 void DAC_Init(void)
\r
2902 //prevDDR = DAC_DDR;
\r
2903 //prevPORT = DAC_PORT;
\r
2905 DAC_DDR = 0xFF & ~(1<<PORTB6);
\r
2906 f42: 8f eb ldi r24, 0xBF ; 191
\r
2907 f44: 84 b9 out 0x04, r24 ; 4
\r
2908 DAC_PORT = 0xFF | (1<<PORTB6);
\r
2909 f46: 8f ef ldi r24, 0xFF ; 255
\r
2910 f48: 85 b9 out 0x05, r24 ; 5
\r
2912 DAC_PORT = (1<<CS) | (1<<LDAC) | (1<<SHDN) | (1<<PORTB6);
\r
2913 f4a: 86 e5 ldi r24, 0x56 ; 86
\r
2914 f4c: 85 b9 out 0x05, r24 ; 5
\r
2915 //runningDAC = TRUE;
\r
2919 00000f50 <DAC_Set>:
\r
2921 void DAC_Set(int output)
\r
2923 f50: ac 01 movw r20, r24
\r
2924 void DAC_Init(void)
\r
2926 //prevDDR = DAC_DDR;
\r
2927 //prevPORT = DAC_PORT;
\r
2929 DAC_DDR = 0xFF & ~(1<<PORTB6);
\r
2930 f52: 8f eb ldi r24, 0xBF ; 191
\r
2931 f54: 84 b9 out 0x04, r24 ; 4
\r
2932 DAC_PORT = 0xFF | (1<<PORTB6);
\r
2933 f56: 8f ef ldi r24, 0xFF ; 255
\r
2934 f58: 85 b9 out 0x05, r24 ; 5
\r
2936 DAC_PORT = (1<<CS) | (1<<LDAC) | (1<<SHDN) | (1<<PORTB6);
\r
2937 f5a: 86 e5 ldi r24, 0x56 ; 86
\r
2938 f5c: 85 b9 out 0x05, r24 ; 5
\r
2940 void DAC_Set(int output)
\r
2945 f5e: 2b 99 sbic 0x05, 3 ; 5
\r
2946 f60: fe cf rjmp .-4 ; 0xf5e <DAC_Set+0xe>
\r
2948 DAC_PORT |= (1<<CS) | (1<<LDAC);
\r
2949 f62: 85 b1 in r24, 0x05 ; 5
\r
2950 f64: 86 60 ori r24, 0x06 ; 6
\r
2951 f66: 85 b9 out 0x05, r24 ; 5
\r
2954 f68: 2b 9b sbis 0x05, 3 ; 5
\r
2955 f6a: fe cf rjmp .-4 ; 0xf68 <DAC_Set+0x18>
\r
2957 f6c: 2b 99 sbic 0x05, 3 ; 5
\r
2958 f6e: fe cf rjmp .-4 ; 0xf6c <DAC_Set+0x1c>
\r
2960 //Wait for clock off
\r
2963 DAC_PORT &= ~(1<<CS);
\r
2964 f70: 29 98 cbi 0x05, 1 ; 5
\r
2966 //Configuration bits:
\r
2969 DAC_PORT &= ~(1<<SDI); //Select DAC A
\r
2970 f72: 28 98 cbi 0x05, 0 ; 5
\r
2973 f74: 2b 9b sbis 0x05, 3 ; 5
\r
2974 f76: fe cf rjmp .-4 ; 0xf74 <DAC_Set+0x24>
\r
2976 f78: 2b 99 sbic 0x05, 3 ; 5
\r
2977 f7a: fe cf rjmp .-4 ; 0xf78 <DAC_Set+0x28>
\r
2980 DAC_PORT |= (1<<SDI); //Select buffered reference voltage
\r
2981 f7c: 28 9a sbi 0x05, 0 ; 5
\r
2984 f7e: 2b 9b sbis 0x05, 3 ; 5
\r
2985 f80: fe cf rjmp .-4 ; 0xf7e <DAC_Set+0x2e>
\r
2987 f82: 2b 99 sbic 0x05, 3 ; 5
\r
2988 f84: fe cf rjmp .-4 ; 0xf82 <DAC_Set+0x32>
\r
2991 if (output > 0xFFF)
\r
2992 f86: 80 e1 ldi r24, 0x10 ; 16
\r
2993 f88: 40 30 cpi r20, 0x00 ; 0
\r
2994 f8a: 58 07 cpc r21, r24
\r
2995 f8c: 24 f0 brlt .+8 ; 0xf96 <DAC_Set+0x46>
\r
2997 DAC_PORT &= ~(1<<SDI); //Select 2x gain
\r
2998 f8e: 28 98 cbi 0x05, 0 ; 5
\r
2999 output = output / 2;
\r
3000 f90: 55 95 asr r21
\r
3001 f92: 47 95 ror r20
\r
3002 f94: 01 c0 rjmp .+2 ; 0xf98 <DAC_Set+0x48>
\r
3005 DAC_PORT |= (1<<SDI); //Select 1x gain
\r
3006 f96: 28 9a sbi 0x05, 0 ; 5
\r
3009 f98: 2b 9b sbis 0x05, 3 ; 5
\r
3010 f9a: fe cf rjmp .-4 ; 0xf98 <DAC_Set+0x48>
\r
3012 f9c: 2b 99 sbic 0x05, 3 ; 5
\r
3013 f9e: fe cf rjmp .-4 ; 0xf9c <DAC_Set+0x4c>
\r
3016 DAC_PORT |= (1<<SDI); //DAC is turned on!
\r
3017 fa0: 28 9a sbi 0x05, 0 ; 5
\r
3020 fa2: 2b 9b sbis 0x05, 3 ; 5
\r
3021 fa4: fe cf rjmp .-4 ; 0xfa2 <DAC_Set+0x52>
\r
3023 fa6: 2b 99 sbic 0x05, 3 ; 5
\r
3024 fa8: fe cf rjmp .-4 ; 0xfa6 <DAC_Set+0x56>
\r
3025 faa: 2b e0 ldi r18, 0x0B ; 11
\r
3026 fac: 30 e0 ldi r19, 0x00 ; 0
\r
3028 //Now send the 12 data bits
\r
3029 for (int i=1; i <= 12; ++i)
\r
3031 if ((output & (1<<(12-i))) == 0x00)
\r
3032 fae: ca 01 movw r24, r20
\r
3033 fb0: 02 2e mov r0, r18
\r
3034 fb2: 02 c0 rjmp .+4 ; 0xfb8 <DAC_Set+0x68>
\r
3035 fb4: 95 95 asr r25
\r
3036 fb6: 87 95 ror r24
\r
3038 fba: e2 f7 brpl .-8 ; 0xfb4 <DAC_Set+0x64>
\r
3039 fbc: 80 fd sbrc r24, 0
\r
3040 fbe: 02 c0 rjmp .+4 ; 0xfc4 <DAC_Set+0x74>
\r
3041 DAC_PORT &= ~(1<<SDI);
\r
3042 fc0: 28 98 cbi 0x05, 0 ; 5
\r
3043 fc2: 01 c0 rjmp .+2 ; 0xfc6 <DAC_Set+0x76>
\r
3045 DAC_PORT |= (1<<SDI);
\r
3046 fc4: 28 9a sbi 0x05, 0 ; 5
\r
3050 fc6: 2b 9b sbis 0x05, 3 ; 5
\r
3051 fc8: fe cf rjmp .-4 ; 0xfc6 <DAC_Set+0x76>
\r
3053 fca: 2b 99 sbic 0x05, 3 ; 5
\r
3054 fcc: fe cf rjmp .-4 ; 0xfca <DAC_Set+0x7a>
\r
3055 fce: 21 50 subi r18, 0x01 ; 1
\r
3056 fd0: 30 40 sbci r19, 0x00 ; 0
\r
3061 //Now send the 12 data bits
\r
3062 for (int i=1; i <= 12; ++i)
\r
3063 fd2: 8f ef ldi r24, 0xFF ; 255
\r
3064 fd4: 2f 3f cpi r18, 0xFF ; 255
\r
3065 fd6: 38 07 cpc r19, r24
\r
3066 fd8: 51 f7 brne .-44 ; 0xfae <DAC_Set+0x5e>
\r
3072 DAC_PORT |= (1<<CS);
\r
3073 fda: 29 9a sbi 0x05, 1 ; 5
\r
3076 fdc: 2b 9b sbis 0x05, 3 ; 5
\r
3077 fde: fe cf rjmp .-4 ; 0xfdc <DAC_Set+0x8c>
\r
3079 fe0: 2b 99 sbic 0x05, 3 ; 5
\r
3080 fe2: fe cf rjmp .-4 ; 0xfe0 <DAC_Set+0x90>
\r
3083 DAC_PORT &= ~(1<<LDAC);
\r
3084 fe4: 2a 98 cbi 0x05, 2 ; 5
\r
3087 fe6: 2b 9b sbis 0x05, 3 ; 5
\r
3088 fe8: fe cf rjmp .-4 ; 0xfe6 <DAC_Set+0x96>
\r
3090 fea: 2b 99 sbic 0x05, 3 ; 5
\r
3091 fec: fe cf rjmp .-4 ; 0xfea <DAC_Set+0x9a>
\r
3093 DAC_PORT |= (1<<LDAC);
\r
3094 fee: 2a 9a sbi 0x05, 2 ; 5
\r
3097 ff0: 2b 9b sbis 0x05, 3 ; 5
\r
3098 ff2: fe cf rjmp .-4 ; 0xff0 <DAC_Set+0xa0>
\r
3100 ff4: 2b 99 sbic 0x05, 3 ; 5
\r
3101 ff6: fe cf rjmp .-4 ; 0xff4 <DAC_Set+0xa4>
\r
3105 00000ffa <__mulsi3>:
\r
3106 ffa: 62 9f mul r22, r18
\r
3107 ffc: d0 01 movw r26, r0
\r
3108 ffe: 73 9f mul r23, r19
\r
3109 1000: f0 01 movw r30, r0
\r
3110 1002: 82 9f mul r24, r18
\r
3111 1004: e0 0d add r30, r0
\r
3112 1006: f1 1d adc r31, r1
\r
3113 1008: 64 9f mul r22, r20
\r
3114 100a: e0 0d add r30, r0
\r
3115 100c: f1 1d adc r31, r1
\r
3116 100e: 92 9f mul r25, r18
\r
3117 1010: f0 0d add r31, r0
\r
3118 1012: 83 9f mul r24, r19
\r
3119 1014: f0 0d add r31, r0
\r
3120 1016: 74 9f mul r23, r20
\r
3121 1018: f0 0d add r31, r0
\r
3122 101a: 65 9f mul r22, r21
\r
3123 101c: f0 0d add r31, r0
\r
3124 101e: 99 27 eor r25, r25
\r
3125 1020: 72 9f mul r23, r18
\r
3126 1022: b0 0d add r27, r0
\r
3127 1024: e1 1d adc r30, r1
\r
3128 1026: f9 1f adc r31, r25
\r
3129 1028: 63 9f mul r22, r19
\r
3130 102a: b0 0d add r27, r0
\r
3131 102c: e1 1d adc r30, r1
\r
3132 102e: f9 1f adc r31, r25
\r
3133 1030: bd 01 movw r22, r26
\r
3134 1032: cf 01 movw r24, r30
\r
3135 1034: 11 24 eor r1, r1
\r
3138 00001038 <__udivmodhi4>:
\r
3139 1038: aa 1b sub r26, r26
\r
3140 103a: bb 1b sub r27, r27
\r
3141 103c: 51 e1 ldi r21, 0x11 ; 17
\r
3142 103e: 07 c0 rjmp .+14 ; 0x104e <__udivmodhi4_ep>
\r
3144 00001040 <__udivmodhi4_loop>:
\r
3145 1040: aa 1f adc r26, r26
\r
3146 1042: bb 1f adc r27, r27
\r
3147 1044: a6 17 cp r26, r22
\r
3148 1046: b7 07 cpc r27, r23
\r
3149 1048: 10 f0 brcs .+4 ; 0x104e <__udivmodhi4_ep>
\r
3150 104a: a6 1b sub r26, r22
\r
3151 104c: b7 0b sbc r27, r23
\r
3153 0000104e <__udivmodhi4_ep>:
\r
3154 104e: 88 1f adc r24, r24
\r
3155 1050: 99 1f adc r25, r25
\r
3156 1052: 5a 95 dec r21
\r
3157 1054: a9 f7 brne .-22 ; 0x1040 <__udivmodhi4_loop>
\r
3158 1056: 80 95 com r24
\r
3159 1058: 90 95 com r25
\r
3160 105a: bc 01 movw r22, r24
\r
3161 105c: cd 01 movw r24, r26
\r
3164 00001060 <__udivmodsi4>:
\r
3165 1060: a1 e2 ldi r26, 0x21 ; 33
\r
3166 1062: 1a 2e mov r1, r26
\r
3167 1064: aa 1b sub r26, r26
\r
3168 1066: bb 1b sub r27, r27
\r
3169 1068: fd 01 movw r30, r26
\r
3170 106a: 0d c0 rjmp .+26 ; 0x1086 <__udivmodsi4_ep>
\r
3172 0000106c <__udivmodsi4_loop>:
\r
3173 106c: aa 1f adc r26, r26
\r
3174 106e: bb 1f adc r27, r27
\r
3175 1070: ee 1f adc r30, r30
\r
3176 1072: ff 1f adc r31, r31
\r
3177 1074: a2 17 cp r26, r18
\r
3178 1076: b3 07 cpc r27, r19
\r
3179 1078: e4 07 cpc r30, r20
\r
3180 107a: f5 07 cpc r31, r21
\r
3181 107c: 20 f0 brcs .+8 ; 0x1086 <__udivmodsi4_ep>
\r
3182 107e: a2 1b sub r26, r18
\r
3183 1080: b3 0b sbc r27, r19
\r
3184 1082: e4 0b sbc r30, r20
\r
3185 1084: f5 0b sbc r31, r21
\r
3187 00001086 <__udivmodsi4_ep>:
\r
3188 1086: 66 1f adc r22, r22
\r
3189 1088: 77 1f adc r23, r23
\r
3190 108a: 88 1f adc r24, r24
\r
3191 108c: 99 1f adc r25, r25
\r
3192 108e: 1a 94 dec r1
\r
3193 1090: 69 f7 brne .-38 ; 0x106c <__udivmodsi4_loop>
\r
3194 1092: 60 95 com r22
\r
3195 1094: 70 95 com r23
\r
3196 1096: 80 95 com r24
\r
3197 1098: 90 95 com r25
\r
3198 109a: 9b 01 movw r18, r22
\r
3199 109c: ac 01 movw r20, r24
\r
3200 109e: bd 01 movw r22, r26
\r
3201 10a0: cf 01 movw r24, r30
\r
3205 10a4: fc 01 movw r30, r24
\r
3206 10a6: 88 27 eor r24, r24
\r
3207 10a8: 99 27 eor r25, r25
\r
3209 10ac: 21 91 ld r18, Z+
\r
3210 10ae: 20 32 cpi r18, 0x20 ; 32
\r
3211 10b0: e9 f3 breq .-6 ; 0x10ac <atoi+0x8>
\r
3212 10b2: 29 30 cpi r18, 0x09 ; 9
\r
3213 10b4: 10 f0 brcs .+4 ; 0x10ba <atoi+0x16>
\r
3214 10b6: 2e 30 cpi r18, 0x0E ; 14
\r
3215 10b8: c8 f3 brcs .-14 ; 0x10ac <atoi+0x8>
\r
3216 10ba: 2b 32 cpi r18, 0x2B ; 43
\r
3217 10bc: 41 f0 breq .+16 ; 0x10ce <atoi+0x2a>
\r
3218 10be: 2d 32 cpi r18, 0x2D ; 45
\r
3219 10c0: 39 f4 brne .+14 ; 0x10d0 <atoi+0x2c>
\r
3221 10c4: 04 c0 rjmp .+8 ; 0x10ce <atoi+0x2a>
\r
3222 10c6: 0e 94 70 08 call 0x10e0 ; 0x10e0 <__mulhi_const_10>
\r
3223 10ca: 82 0f add r24, r18
\r
3224 10cc: 91 1d adc r25, r1
\r
3225 10ce: 21 91 ld r18, Z+
\r
3226 10d0: 20 53 subi r18, 0x30 ; 48
\r
3227 10d2: 2a 30 cpi r18, 0x0A ; 10
\r
3228 10d4: c0 f3 brcs .-16 ; 0x10c6 <atoi+0x22>
\r
3229 10d6: 1e f4 brtc .+6 ; 0x10de <atoi+0x3a>
\r
3230 10d8: 90 95 com r25
\r
3231 10da: 81 95 neg r24
\r
3232 10dc: 9f 4f sbci r25, 0xFF ; 255
\r
3235 000010e0 <__mulhi_const_10>:
\r
3236 10e0: 7a e0 ldi r23, 0x0A ; 10
\r
3237 10e2: 97 9f mul r25, r23
\r
3238 10e4: 90 2d mov r25, r0
\r
3239 10e6: 87 9f mul r24, r23
\r
3240 10e8: 80 2d mov r24, r0
\r
3241 10ea: 91 0d add r25, r1
\r
3242 10ec: 11 24 eor r1, r1
\r
3248 000010f2 <__stop_program>:
\r
3249 10f2: ff cf rjmp .-2 ; 0x10f2 <__stop_program>
\r