Go to most recent revision | Blame | Last modification | View Log | RSS feed
1 .file "twimaster.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .global I2CError
11 .global I2CError
12 .section .bss
15 I2CError:
16 0000 0000 .skip 2,0
17 .global MissingMotor
18 .global MissingMotor
21 MissingMotor:
22 0002 00 .skip 1,0
23 .global motorread
24 .global motorread
27 motorread:
28 0003 00 .skip 1,0
29 .global motor
30 .global motor
33 motor:
34 0004 00 .skip 1,0
35 .global twi_state
36 .global twi_state
39 twi_state:
40 0005 00 .skip 1,0
41 .text
42 .global i2c_init
44 i2c_init:
45 /* prologue: frame size=0 */
46 /* prologue end (size=0) */
47 0000 1092 B900 sts 185,__zero_reg__
48 0004 8AE2 ldi r24,lo8(42)
49 0006 8093 B800 sts 184,r24
50 /* epilogue: frame size=0 */
51 000a 0895 ret
52 /* epilogue end (size=1) */
53 /* function i2c_init size 6 (5) */
55 .global i2c_start
57 i2c_start:
58 /* prologue: frame size=0 */
59 /* prologue end (size=0) */
60 000c 85EA ldi r24,lo8(-91)
61 000e 8093 BC00 sts 188,r24
62 /* epilogue: frame size=0 */
63 0012 0895 ret
64 /* epilogue end (size=1) */
65 /* function i2c_start size 4 (3) */
67 .global i2c_stop
69 i2c_stop:
70 /* prologue: frame size=0 */
71 /* prologue end (size=0) */
72 0014 84E9 ldi r24,lo8(-108)
73 0016 8093 BC00 sts 188,r24
74 /* epilogue: frame size=0 */
75 001a 0895 ret
76 /* epilogue end (size=1) */
77 /* function i2c_stop size 4 (3) */
79 .global i2c_write_byte
81 i2c_write_byte:
82 /* prologue: frame size=0 */
83 /* prologue end (size=0) */
84 001c 1092 B900 sts 185,__zero_reg__
85 0020 8093 BB00 sts 187,r24
86 0024 85E8 ldi r24,lo8(-123)
87 0026 8093 BC00 sts 188,r24
88 /* epilogue: frame size=0 */
89 002a 0895 ret
90 /* epilogue end (size=1) */
91 /* function i2c_write_byte size 8 (7) */
93 .global i2c_reset
95 i2c_reset:
96 /* prologue: frame size=0 */
97 /* prologue end (size=0) */
98 002c 0E94 0000 call i2c_stop
99 0030 1092 0000 sts twi_state,__zero_reg__
100 0034 8091 BB00 lds r24,187
101 0038 1092 0000 sts motor,__zero_reg__
102 003c 80E8 ldi r24,lo8(-128)
103 003e 8093 BC00 sts 188,r24
104 0042 1092 BD00 sts 189,__zero_reg__
105 0046 1092 BA00 sts 186,__zero_reg__
106 004a 1092 BB00 sts 187,__zero_reg__
107 004e 1092 B900 sts 185,__zero_reg__
108 0052 1092 B800 sts 184,__zero_reg__
109 0056 0E94 0000 call i2c_init
110 005a 0E94 0000 call i2c_start
111 005e 80E0 ldi r24,lo8(0)
112 0060 0E94 0000 call i2c_write_byte
113 /* epilogue: frame size=0 */
114 0064 0895 ret
115 /* epilogue end (size=1) */
116 /* function i2c_reset size 29 (28) */
118 .global I2C_WriteByte
120 I2C_WriteByte:
121 /* prologue: frame size=0 */
122 /* prologue end (size=0) */
123 0066 8093 BB00 sts 187,r24
124 006a 85E8 ldi r24,lo8(-123)
125 006c 8093 BC00 sts 188,r24
126 /* epilogue: frame size=0 */
127 0070 0895 ret
128 /* epilogue end (size=1) */
129 /* function I2C_WriteByte size 6 (5) */
131 .global I2C_ReceiveByte
133 I2C_ReceiveByte:
134 /* prologue: frame size=0 */
135 /* prologue end (size=0) */
136 0072 85EC ldi r24,lo8(-59)
137 0074 8093 BC00 sts 188,r24
138 /* epilogue: frame size=0 */
139 0078 0895 ret
140 /* epilogue end (size=1) */
141 /* function I2C_ReceiveByte size 4 (3) */
143 .global I2C_ReceiveLastByte
145 I2C_ReceiveLastByte:
146 /* prologue: frame size=0 */
147 /* prologue end (size=0) */
148 007a 85E8 ldi r24,lo8(-123)
149 007c 8093 BC00 sts 188,r24
150 /* epilogue: frame size=0 */
151 0080 0895 ret
152 /* epilogue end (size=1) */
153 /* function I2C_ReceiveLastByte size 4 (3) */
155 .lcomm missing_motor.0,1
156 .global __vector_26
158 __vector_26:
159 /* prologue: frame size=0 */
160 0082 1F92 push __zero_reg__
161 0084 0F92 push __tmp_reg__
162 0086 0FB6 in __tmp_reg__,__SREG__
163 0088 0F92 push __tmp_reg__
164 008a 1124 clr __zero_reg__
165 008c 2F93 push r18
166 008e 3F93 push r19
167 0090 4F93 push r20
168 0092 5F93 push r21
169 0094 6F93 push r22
170 0096 7F93 push r23
171 0098 8F93 push r24
172 009a 9F93 push r25
173 009c AF93 push r26
174 009e BF93 push r27
175 00a0 EF93 push r30
176 00a2 FF93 push r31
177 /* prologue end (size=17) */
178 00a4 8091 0000 lds r24,twi_state
179 00a8 282F mov r18,r24
180 00aa 3327 clr r19
181 00ac 4427 clr r20
182 00ae 5527 clr r21
183 00b0 8F5F subi r24,lo8(-(1))
184 00b2 8093 0000 sts twi_state,r24
185 00b6 F901 movw r30,r18
186 00b8 2731 cpi r18,23
187 00ba 3105 cpc r19,__zero_reg__
188 00bc 00F4 brsh .L48
189 00be E050 subi r30,lo8(-(pm(.L49)))
190 00c0 F040 sbci r31,hi8(-(pm(.L49)))
191 00c2 0C94 0000 jmp __tablejump2__
192 .data
193 .section .progmem.gcc_sw_table, "a", @progbits
194 .p2align 1
195 .L49:
196 0000 0000 .word pm(.L11)
197 0002 0000 .word pm(.L21)
198 0004 0000 .word pm(.L22)
199 0006 0000 .word pm(.L26)
200 0008 0000 .word pm(.L30)
201 000a 0000 .word pm(.L31)
202 000c 0000 .word pm(.L48)
203 000e 0000 .word pm(.L48)
204 0010 0000 .word pm(.L43)
205 0012 0000 .word pm(.L34)
206 0014 0000 .word pm(.L35)
207 0016 0000 .word pm(.L46)
208 0018 0000 .word pm(.L42)
209 001a 0000 .word pm(.L43)
210 001c 0000 .word pm(.L39)
211 001e 0000 .word pm(.L40)
212 0020 0000 .word pm(.L46)
213 0022 0000 .word pm(.L42)
214 0024 0000 .word pm(.L43)
215 0026 0000 .word pm(.L44)
216 0028 0000 .word pm(.L45)
217 002a 0000 .word pm(.L46)
218 002c 0000 .word pm(.L47)
219 .text
220 .L31:
221 00c6 8091 0000 lds r24,motorread
222 00ca E82F mov r30,r24
223 00cc FF27 clr r31
224 00ce E050 subi r30,lo8(-(motor_rx2))
225 00d0 F040 sbci r31,hi8(-(motor_rx2))
226 00d2 9091 BB00 lds r25,187
227 00d6 9083 st Z,r25
228 00d8 8F5F subi r24,lo8(-(1))
229 00da 8230 cpi r24,lo8(2)
230 00dc 00F4 brsh .+2
231 00de 00C0 rjmp .L55
232 00e0 1092 0000 sts motorread,__zero_reg__
233 00e4 0E94 0000 call i2c_stop
234 .L48:
235 00e8 1092 0000 sts twi_state,__zero_reg__
236 00ec 00C0 rjmp .L10
237 .L46:
238 00ee 80E8 ldi r24,lo8(-128)
239 00f0 0E94 0000 call i2c_write_byte
240 00f4 00C0 rjmp .L10
241 .L43:
242 00f6 88E9 ldi r24,lo8(-104)
243 00f8 0E94 0000 call i2c_write_byte
244 00fc 00C0 rjmp .L10
245 .L42:
246 00fe 0E94 0000 call i2c_stop
247 0102 8AE0 ldi r24,lo8(10)
248 0104 90E0 ldi r25,hi8(10)
249 0106 9093 0000 sts (I2CTimeout)+1,r25
250 010a 8093 0000 sts I2CTimeout,r24
251 010e 0E94 0000 call i2c_start
252 0112 00C0 rjmp .L10
253 .L44:
254 0114 84E1 ldi r24,lo8(20)
255 0116 0E94 0000 call i2c_write_byte
256 011a 00C0 rjmp .L10
257 .L39:
258 011c 82E1 ldi r24,lo8(18)
259 011e 0E94 0000 call i2c_write_byte
260 0122 00C0 rjmp .L10
261 .L35:
262 0124 8091 0000 lds r24,AnalogOffsetNick
263 0128 0E94 0000 call i2c_write_byte
264 012c 00C0 rjmp .L10
265 .L34:
266 012e 80E1 ldi r24,lo8(16)
267 0130 0E94 0000 call i2c_write_byte
268 0134 00C0 rjmp .L10
269 .L40:
270 0136 8091 0000 lds r24,AnalogOffsetRoll
271 013a 0E94 0000 call i2c_write_byte
272 013e 00C0 rjmp .L10
273 .L45:
274 0140 8091 0000 lds r24,AnalogOffsetGier
275 0144 0E94 0000 call i2c_write_byte
276 0148 00C0 rjmp .L10
277 .L21:
278 014a 8091 0000 lds r24,motor
279 014e E82F mov r30,r24
280 0150 FF27 clr r31
281 0152 E050 subi r30,lo8(-(Motor))
282 0154 F040 sbci r31,hi8(-(Motor))
283 0156 8F5F subi r24,lo8(-(1))
284 0158 8093 0000 sts motor,r24
285 015c 8081 ld r24,Z
286 015e 0E94 0000 call i2c_write_byte
287 0162 00C0 rjmp .L10
288 .L11:
289 0164 9091 0000 lds r25,motor
290 0168 292F mov r18,r25
291 016a E92F mov r30,r25
292 016c FF27 clr r31
293 016e EE0F lsl r30
294 0170 FF1F rol r31
295 0172 EE0F lsl r30
296 0174 FF1F rol r31
297 0176 E050 subi r30,lo8(-(Mixer))
298 0178 F040 sbci r31,hi8(-(Mixer))
299 017a 8585 ldd r24,Z+13
300 017c 1816 cp __zero_reg__,r24
301 017e 04F0 brlt .+2
302 0180 00C0 rjmp .L59
303 .L13:
304 0182 9230 cpi r25,lo8(2)
305 0184 01F4 brne .+2
306 0186 00C0 rjmp .L60
307 0188 9923 tst r25
308 018a 01F4 brne .+2
309 018c 00C0 rjmp .L61
310 .L19:
311 018e 9130 cpi r25,lo8(1)
312 0190 01F0 breq .+2
313 0192 00C0 rjmp .L10
314 0194 86E5 ldi r24,lo8(86)
315 0196 0E94 0000 call i2c_write_byte
316 019a 00C0 rjmp .L10
317 .L30:
318 019c 8091 0000 lds r24,motorread
319 01a0 E82F mov r30,r24
320 01a2 FF27 clr r31
321 01a4 E050 subi r30,lo8(-(motor_rx))
322 01a6 F040 sbci r31,hi8(-(motor_rx))
323 01a8 8091 BB00 lds r24,187
324 01ac 8083 st Z,r24
325 01ae 0E94 0000 call I2C_ReceiveLastByte
326 01b2 00C0 rjmp .L10
327 .L26:
328 01b4 8091 B900 lds r24,185
329 01b8 8034 cpi r24,lo8(64)
330 01ba 01F4 brne .+2
331 01bc 00C0 rjmp .L27
332 01be 8091 0000 lds r24,motorread
333 01c2 E82F mov r30,r24
334 01c4 FF27 clr r31
335 01c6 E050 subi r30,lo8(-(MotorPresent))
336 01c8 F040 sbci r31,hi8(-(MotorPresent))
337 01ca 1082 st Z,__zero_reg__
338 01cc 8F5F subi r24,lo8(-(1))
339 01ce 8230 cpi r24,lo8(2)
340 01d0 00F0 brlo .L54
341 01d2 1092 0000 sts motorread,__zero_reg__
342 .L28:
343 01d6 0E94 0000 call i2c_stop
344 01da 1092 0000 sts twi_state,__zero_reg__
345 .L29:
346 01de 1092 0000 sts MissingMotor,__zero_reg__
347 01e2 1092 0000 sts missing_motor.0,__zero_reg__
348 01e6 00C0 rjmp .L10
349 .L22:
350 01e8 8091 B900 lds r24,185
351 01ec 8033 cpi r24,lo8(48)
352 01ee 01F4 brne .+2
353 01f0 00C0 rjmp .L62
354 .L23:
355 01f2 0E94 0000 call i2c_stop
356 01f6 8AE0 ldi r24,lo8(10)
357 01f8 90E0 ldi r25,hi8(10)
358 01fa 9093 0000 sts (I2CTimeout)+1,r25
359 01fe 8093 0000 sts I2CTimeout,r24
360 0202 1092 0000 sts twi_state,__zero_reg__
361 0206 0E94 0000 call i2c_start
362 020a 00C0 rjmp .L10
363 .L47:
364 020c 0E94 0000 call i2c_stop
365 0210 8AE0 ldi r24,lo8(10)
366 0212 90E0 ldi r25,hi8(10)
367 0214 9093 0000 sts (I2CTimeout)+1,r25
368 0218 8093 0000 sts I2CTimeout,r24
369 021c 00C0 rjmp .L48
370 .L55:
371 021e 8093 0000 sts motorread,r24
372 0222 0E94 0000 call i2c_stop
373 0226 00C0 rjmp .L48
374 .L54:
375 0228 8093 0000 sts motorread,r24
376 022c 00C0 rjmp .L28
377 .L59:
378 022e 9230 cpi r25,lo8(2)
379 0230 00F0 brlo .+2
380 0232 00C0 rjmp .L13
381 .L14:
382 0234 922F mov r25,r18
383 0236 9F5F subi r25,lo8(-(1))
384 0238 E92F mov r30,r25
385 023a FF27 clr r31
386 023c EE0F lsl r30
387 023e FF1F rol r31
388 0240 EE0F lsl r30
389 0242 FF1F rol r31
390 0244 E050 subi r30,lo8(-(Mixer))
391 0246 F040 sbci r31,hi8(-(Mixer))
392 0248 8585 ldd r24,Z+13
393 024a 1816 cp __zero_reg__,r24
394 024c 04F0 brlt .L51
395 024e 292F mov r18,r25
396 0250 9230 cpi r25,lo8(2)
397 0252 00F0 brlo .L14
398 .L51:
399 0254 9093 0000 sts motor,r25
400 0258 00C0 rjmp .L13
401 .L60:
402 025a 1092 0000 sts motor,__zero_reg__
403 025e 83E0 ldi r24,lo8(3)
404 0260 8093 0000 sts twi_state,r24
405 0264 8091 0000 lds r24,motorread
406 0268 8823 tst r24
407 026a 01F0 breq .L63
408 .L16:
409 026c 8130 cpi r24,lo8(1)
410 026e 01F4 brne .L10
411 0270 87E5 ldi r24,lo8(87)
412 0272 0E94 0000 call i2c_write_byte
413 0276 00C0 rjmp .L10
414 .L62:
415 0278 8091 0000 lds r24,missing_motor.0
416 027c 8823 tst r24
417 027e 01F4 brne .L52
418 0280 9091 0000 lds r25,motor
419 0284 9093 0000 sts missing_motor.0,r25
420 .L24:
421 0288 E92F mov r30,r25
422 028a FF27 clr r31
423 028c E050 subi r30,lo8(-(MotorError-1))
424 028e F040 sbci r31,hi8(-(MotorError-1))
425 0290 8081 ld r24,Z
426 0292 8F5F subi r24,lo8(-(1))
427 0294 01F4 brne .L53
428 0296 8FEF ldi r24,lo8(-1)
429 .L53:
430 0298 8083 st Z,r24
431 029a 00C0 rjmp .L23
432 .L61:
433 029c 82E5 ldi r24,lo8(82)
434 029e 0E94 0000 call i2c_write_byte
435 02a2 9091 0000 lds r25,motor
436 02a6 00C0 rjmp .L19
437 .L27:
438 02a8 8091 0000 lds r24,motorread
439 02ac E82F mov r30,r24
440 02ae FF27 clr r31
441 02b0 E050 subi r30,lo8(-(MotorPresent))
442 02b2 F040 sbci r31,hi8(-(MotorPresent))
443 02b4 8C5F subi r24,lo8(-(4))
444 02b6 8083 st Z,r24
445 02b8 0E94 0000 call I2C_ReceiveByte
446 02bc 00C0 rjmp .L29
447 .L52:
448 02be 9091 0000 lds r25,motor
449 02c2 00C0 rjmp .L24
450 .L63:
451 02c4 83E5 ldi r24,lo8(83)
452 02c6 0E94 0000 call i2c_write_byte
453 02ca 8091 0000 lds r24,motorread
454 02ce 00C0 rjmp .L16
455 .L10:
456 02d0 8091 BC00 lds r24,188
457 02d4 8068 ori r24,lo8(-128)
458 02d6 8093 BC00 sts 188,r24
459 /* epilogue: frame size=0 */
460 02da FF91 pop r31
461 02dc EF91 pop r30
462 02de BF91 pop r27
463 02e0 AF91 pop r26
464 02e2 9F91 pop r25
465 02e4 8F91 pop r24
466 02e6 7F91 pop r23
467 02e8 6F91 pop r22
468 02ea 5F91 pop r21
469 02ec 4F91 pop r20
470 02ee 3F91 pop r19
471 02f0 2F91 pop r18
472 02f2 0F90 pop __tmp_reg__
473 02f4 0FBE out __SREG__,__tmp_reg__
474 02f6 0F90 pop __tmp_reg__
475 02f8 1F90 pop __zero_reg__
476 02fa 1895 reti
477 /* epilogue end (size=17) */
478 /* function __vector_26 size 342 (308) */
480 .comm motor_rx,16,1
481 .comm MotorPresent,2,1
482 .comm MotorError,2,1
483 .comm Mixer,77,1
484 .comm motor_rx2,16,1
485 /* File "twimaster.c": code 407 = 0x0197 ( 365), prologues 17, epilogues 25 */
DEFINED SYMBOLS
*ABS*:00000000 twimaster.c
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:3 *ABS*:0000003f __SREG__
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:4 *ABS*:0000003e __SP_H__
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:5 *ABS*:0000003d __SP_L__
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:6 *ABS*:00000000 __tmp_reg__
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:7 *ABS*:00000001 __zero_reg__
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:15 .bss:00000000 I2CError
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:21 .bss:00000002 MissingMotor
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:27 .bss:00000003 motorread
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:33 .bss:00000004 motor
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:39 .bss:00000005 twi_state
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:44 .text:00000000 i2c_init
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:57 .text:0000000c i2c_start
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:69 .text:00000014 i2c_stop
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:81 .text:0000001c i2c_write_byte
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:95 .text:0000002c i2c_reset
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:120 .text:00000066 I2C_WriteByte
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:133 .text:00000072 I2C_ReceiveByte
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:145 .text:0000007a I2C_ReceiveLastByte
.bss:00000006 missing_motor.0
C:\Users\Bernd\AppData\Local\Temp/ccqYbtJB.s:158 .text:00000082 __vector_26
*COM*:00000010 motor_rx2
*COM*:0000004d Mixer
*COM*:00000010 motor_rx
*COM*:00000002 MotorPresent
*COM*:00000002 MotorError
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__tablejump2__
I2CTimeout
AnalogOffsetNick
AnalogOffsetRoll
AnalogOffsetGier
Motor