led und off/on taster eingebaut

This commit is contained in:
Lucas Pleß 2012-10-03 00:23:08 +02:00
parent 0f8c5d627b
commit fd37a5a985
11 changed files with 1913 additions and 27 deletions

502
lcd_routines.lst Normal file
View File

@ -0,0 +1,502 @@
1 .file "lcd_routines.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __CCP__ = 0x34
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
15 .Ltext0:
17 lcd_enable:
18 .LFB6:
19 .LM1:
20 /* prologue: function */
21 /* frame size = 0 */
22 /* stack size = 0 */
23 .L__stack_usage = 0
24 .LM2:
25 0000 DD9A sbi 59-32,5
26 .LVL0:
27 .LBB22:
28 .LBB23:
29 .LM3:
30 0002 8AE6 ldi r24,lo8(106)
31 0004 8A95 1:dec r24
32 0006 01F4 brne 1b
33 0008 00C0 rjmp .
34 .LBE23:
35 .LBE22:
36 .LM4:
37 000a DD98 cbi 59-32,5
38 /* epilogue start */
39 .LM5:
40 000c 0895 ret
41 .LFE6:
44 lcd_out:
45 .LFB7:
46 .LM6:
47 .LVL1:
48 /* prologue: function */
49 /* frame size = 0 */
50 /* stack size = 0 */
51 .L__stack_usage = 0
52 .LM7:
53 000e 9BB3 in r25,59-32
54 0010 907F andi r25,lo8(-16)
55 0012 9BBB out 59-32,r25
56 .LM8:
57 0014 9BB3 in r25,59-32
58 0016 8295 swap r24
59 .LVL2:
60 0018 8F70 andi r24,lo8(15)
61 001a 892B or r24,r25
62 001c 8BBB out 59-32,r24
63 .LM9:
64 001e 0E94 0000 call lcd_enable
65 /* epilogue start */
66 .LM10:
67 0022 0895 ret
68 .LFE7:
70 .global lcd_data
72 lcd_data:
73 .LFB9:
74 .LM11:
75 .LVL3:
76 0024 1F93 push r17
77 /* prologue: function */
78 /* frame size = 0 */
79 /* stack size = 1 */
80 .L__stack_usage = 1
81 0026 182F mov r17,r24
82 .LM12:
83 0028 DC9A sbi 59-32,4
84 .LM13:
85 002a 0E94 0000 call lcd_out
86 .LVL4:
87 .LM14:
88 002e 812F mov r24,r17
89 0030 8295 swap r24
90 0032 807F andi r24,lo8(-16)
91 0034 0E94 0000 call lcd_out
92 .LVL5:
93 .LBB24:
94 .LBB25:
95 .LM15:
96 0038 85EF ldi r24,lo8(-11)
97 003a 8A95 1:dec r24
98 003c 01F4 brne 1b
99 003e 0000 nop
100 /* epilogue start */
101 .LBE25:
102 .LBE24:
103 .LM16:
104 0040 1F91 pop r17
105 .LVL6:
106 0042 0895 ret
107 .LFE9:
109 .global lcd_command
111 lcd_command:
112 .LFB10:
113 .LM17:
114 .LVL7:
115 0044 1F93 push r17
116 /* prologue: function */
117 /* frame size = 0 */
118 /* stack size = 1 */
119 .L__stack_usage = 1
120 0046 182F mov r17,r24
121 .LM18:
122 0048 DC98 cbi 59-32,4
123 .LM19:
124 004a 0E94 0000 call lcd_out
125 .LVL8:
126 .LM20:
127 004e 812F mov r24,r17
128 0050 8295 swap r24
129 0052 807F andi r24,lo8(-16)
130 0054 0E94 0000 call lcd_out
131 .LVL9:
132 .LBB26:
133 .LBB27:
134 .LM21:
135 0058 80EE ldi r24,lo8(-32)
136 005a 8A95 1:dec r24
137 005c 01F4 brne 1b
138 /* epilogue start */
139 .LBE27:
140 .LBE26:
141 .LM22:
142 005e 1F91 pop r17
143 .LVL10:
144 0060 0895 ret
145 .LFE10:
147 .global lcd_clear
149 lcd_clear:
150 .LFB11:
151 .LM23:
152 /* prologue: function */
153 /* frame size = 0 */
154 /* stack size = 0 */
155 .L__stack_usage = 0
156 .LM24:
157 0062 81E0 ldi r24,lo8(1)
158 0064 0E94 0000 call lcd_command
159 .LVL11:
160 .LBB28:
161 .LBB29:
162 .LM25:
163 0068 8FE3 ldi r24,lo8(7999)
164 006a 9FE1 ldi r25,hi8(7999)
165 006c 0197 1:sbiw r24,1
166 006e 01F4 brne 1b
167 0070 00C0 rjmp .
168 0072 0000 nop
169 /* epilogue start */
170 .LBE29:
171 .LBE28:
172 .LM26:
173 0074 0895 ret
174 .LFE11:
176 .global lcd_init
178 lcd_init:
179 .LFB8:
180 .LM27:
181 /* prologue: function */
182 /* frame size = 0 */
183 /* stack size = 0 */
184 .L__stack_usage = 0
185 .LVL12:
186 .LM28:
187 0076 8AB3 in r24,58-32
188 0078 8F63 ori r24,lo8(63)
189 007a 8ABB out 58-32,r24
190 .LM29:
191 007c 8BB3 in r24,59-32
192 007e 807C andi r24,lo8(-64)
193 0080 8BBB out 59-32,r24
194 .LVL13:
195 .LBB30:
196 .LBB31:
197 .LM30:
198 0082 8FE5 ldi r24,lo8(-5537)
199 0084 9AEE ldi r25,hi8(-5537)
200 0086 0197 1:sbiw r24,1
201 0088 01F4 brne 1b
202 008a 00C0 rjmp .
203 008c 0000 nop
204 .LBE31:
205 .LBE30:
206 .LM31:
207 008e 80E3 ldi r24,lo8(48)
208 0090 0E94 0000 call lcd_out
209 .LVL14:
210 .LBB32:
211 .LBB33:
212 .LM32:
213 0094 8FE1 ldi r24,lo8(19999)
214 0096 9EE4 ldi r25,hi8(19999)
215 0098 0197 1:sbiw r24,1
216 009a 01F4 brne 1b
217 009c 00C0 rjmp .
218 009e 0000 nop
219 .LBE33:
220 .LBE32:
221 .LM33:
222 00a0 0E94 0000 call lcd_enable
223 .LVL15:
224 .LBB34:
225 .LBB35:
226 .LM34:
227 00a4 8FE9 ldi r24,lo8(3999)
228 00a6 9FE0 ldi r25,hi8(3999)
229 00a8 0197 1:sbiw r24,1
230 00aa 01F4 brne 1b
231 00ac 00C0 rjmp .
232 00ae 0000 nop
233 .LBE35:
234 .LBE34:
235 .LM35:
236 00b0 0E94 0000 call lcd_enable
237 .LVL16:
238 .LBB36:
239 .LBB37:
240 .LM36:
241 00b4 8FE9 ldi r24,lo8(3999)
242 00b6 9FE0 ldi r25,hi8(3999)
243 00b8 0197 1:sbiw r24,1
244 00ba 01F4 brne 1b
245 00bc 00C0 rjmp .
246 00be 0000 nop
247 .LBE37:
248 .LBE36:
249 .LM37:
250 00c0 80E2 ldi r24,lo8(32)
251 00c2 0E94 0000 call lcd_out
252 .LVL17:
253 .LBB38:
254 .LBB39:
255 .LM38:
256 00c6 8FE1 ldi r24,lo8(19999)
257 00c8 9EE4 ldi r25,hi8(19999)
258 00ca 0197 1:sbiw r24,1
259 00cc 01F4 brne 1b
260 00ce 00C0 rjmp .
261 00d0 0000 nop
262 .LBE39:
263 .LBE38:
264 .LM39:
265 00d2 88E2 ldi r24,lo8(40)
266 00d4 0E94 0000 call lcd_command
267 .LM40:
268 00d8 8CE0 ldi r24,lo8(12)
269 00da 0E94 0000 call lcd_command
270 .LM41:
271 00de 86E0 ldi r24,lo8(6)
272 00e0 0E94 0000 call lcd_command
273 .LM42:
274 00e4 0E94 0000 call lcd_clear
275 /* epilogue start */
276 .LM43:
277 00e8 0895 ret
278 .LFE8:
280 .global lcd_home
282 lcd_home:
283 .LFB12:
284 .LM44:
285 /* prologue: function */
286 /* frame size = 0 */
287 /* stack size = 0 */
288 .L__stack_usage = 0
289 .LM45:
290 00ea 82E0 ldi r24,lo8(2)
291 00ec 0E94 0000 call lcd_command
292 .LVL18:
293 .LBB40:
294 .LBB41:
295 .LM46:
296 00f0 8FE3 ldi r24,lo8(7999)
297 00f2 9FE1 ldi r25,hi8(7999)
298 00f4 0197 1:sbiw r24,1
299 00f6 01F4 brne 1b
300 00f8 00C0 rjmp .
301 00fa 0000 nop
302 /* epilogue start */
303 .LBE41:
304 .LBE40:
305 .LM47:
306 00fc 0895 ret
307 .LFE12:
309 .global lcd_setcursor
311 lcd_setcursor:
312 .LFB13:
313 .LM48:
314 .LVL19:
315 /* prologue: function */
316 /* frame size = 0 */
317 /* stack size = 0 */
318 .L__stack_usage = 0
319 .LM49:
320 00fe 6230 cpi r22,lo8(2)
321 0100 01F0 breq .L11
322 0102 6330 cpi r22,lo8(3)
323 0104 00F4 brsh .L14
324 0106 6130 cpi r22,lo8(1)
325 0108 01F4 brne .L8
326 010a 00C0 rjmp .L16
327 .L14:
328 010c 6330 cpi r22,lo8(3)
329 010e 01F0 breq .L12
330 0110 6430 cpi r22,lo8(4)
331 0112 01F4 brne .L8
332 0114 00C0 rjmp .L17
333 .L16:
334 .LM50:
335 0116 8058 subi r24,lo8(-(-128))
336 .LVL20:
337 .LM51:
338 0118 00C0 rjmp .L15
339 .LVL21:
340 .L11:
341 .LM52:
342 011a 8054 subi r24,lo8(-(-64))
343 .LVL22:
344 .LM53:
345 011c 00C0 rjmp .L15
346 .LVL23:
347 .L12:
348 .LM54:
349 011e 8057 subi r24,lo8(-(-112))
350 .LVL24:
351 .LM55:
352 0120 00C0 rjmp .L15
353 .LVL25:
354 .L17:
355 .LM56:
356 0122 8053 subi r24,lo8(-(-48))
357 .LVL26:
358 .L15:
359 .LM57:
360 0124 0E94 0000 call lcd_command
361 .LVL27:
362 .L8:
363 0128 0895 ret
364 .LFE13:
366 .global lcd_string
368 lcd_string:
369 .LFB14:
370 .LM58:
371 .LVL28:
372 012a EF92 push r14
373 012c FF92 push r15
374 012e CF93 push r28
375 0130 DF93 push r29
376 /* prologue: function */
377 /* frame size = 0 */
378 /* stack size = 4 */
379 .L__stack_usage = 4
380 .LM59:
381 0132 E82E mov r14,r24
382 0134 E701 movw r28,r14
383 0136 7E01 movw r14,r28
384 0138 F92E mov r15,r25
385 013a E701 movw r28,r14
386 .LM60:
387 013c 00C0 rjmp .L19
388 .LVL29:
389 .L20:
390 .LM61:
391 013e 0E94 0000 call lcd_data
392 .L19:
393 .LM62:
394 0142 8991 ld r24,Y+
395 0144 8823 tst r24
396 0146 01F4 brne .L20
397 /* epilogue start */
398 .LM63:
399 0148 DF91 pop r29
400 014a CF91 pop r28
401 014c FF90 pop r15
402 014e EF90 pop r14
403 0150 0895 ret
404 .LFE14:
406 .global lcd_string_p
408 lcd_string_p:
409 .LFB15:
410 .LM64:
411 .LVL30:
412 0152 CF93 push r28
413 0154 DF93 push r29
414 /* prologue: function */
415 /* frame size = 0 */
416 /* stack size = 2 */
417 .L__stack_usage = 2
418 0156 EC01 movw r28,r24
419 .LM65:
420 0158 00C0 rjmp .L22
421 .LVL31:
422 .L23:
423 .LM66:
424 015a 0E94 0000 call lcd_data
425 .LVL32:
426 .L22:
427 .LM67:
428 015e FE01 movw r30,r28
429 .LVL33:
430 .LBB42:
431 .LM68:
432 0160 2196 adiw r28,1
433 .LVL34:
434 /* #APP */
435 ; 167 "lcd_routines.c" 1
436 0162 8491 lpm r24, Z
437
438 ; 0 "" 2
439 .LVL35:
440 /* #NOAPP */
441 .LBE42:
442 0164 8823 tst r24
443 0166 01F4 brne .L23
444 /* epilogue start */
445 .LM69:
446 0168 DF91 pop r29
447 016a CF91 pop r28
448 .LVL36:
449 016c 0895 ret
450 .LFE15:
452 .global lcd_generatechar
454 lcd_generatechar:
455 .LFB16:
456 .LM70:
457 .LVL37:
458 016e EF92 push r14
459 0170 FF92 push r15
460 0172 1F93 push r17
461 0174 DF93 push r29
462 0176 CF93 push r28
463 0178 00D0 rcall .
464 017a CDB7 in r28,__SP_L__
465 017c DEB7 in r29,__SP_H__
466 /* prologue: function */
467 /* frame size = 2 */
468 /* stack size = 7 */
469 .L__stack_usage = 7
470 .LM71:
471 017e 880F lsl r24
472 0180 880F lsl r24
473 0182 880F lsl r24
474 .LVL38:
475 0184 8064 ori r24,lo8(64)
476 0186 6983 std Y+1,r22
477 0188 7A83 std Y+2,r23
478 018a 0E94 0000 call lcd_command
479 .LVL39:
480 018e 6981 ldd r22,Y+1
481 0190 7A81 ldd r23,Y+2
482 0192 462F mov r20,r22
483 0194 572F mov r21,r23
484 0196 7A01 movw r14,r20
485 0198 18E0 ldi r17,lo8(8)
486 .LVL40:
487 .L25:
488 .LBB43:
489 .LM72:
490 019a F701 movw r30,r14
491 019c 8191 ld r24,Z+
492 019e 7F01 movw r14,r30
493 01a0 0E94 0000 call lcd_data
494 01a4 1150 subi r17,lo8(-(-1))
495 .LM73:
496 01a6 01F4 brne .L25
497 /* epilogue start */
498 .LBE43:
499 .LM74:
500 01a8 0F90 pop __tmp_reg__
501 01aa 0F90 pop __tmp_reg__
502 01ac CF91 pop r28
503 01ae DF91 pop r29
504 01b0 1F91 pop r17
505 01b2 FF90 pop r15
506 01b4 EF90 pop r14
507 01b6 0895 ret
508 .LFE16:
614 .Letext0:
DEFINED SYMBOLS
*ABS*:0000000000000000 lcd_routines.c
/tmp/cc7NhYw7.s:2 *ABS*:000000000000003f __SREG__
/tmp/cc7NhYw7.s:3 *ABS*:000000000000003e __SP_H__
/tmp/cc7NhYw7.s:4 *ABS*:000000000000003d __SP_L__
/tmp/cc7NhYw7.s:5 *ABS*:0000000000000034 __CCP__
/tmp/cc7NhYw7.s:6 *ABS*:0000000000000000 __tmp_reg__
/tmp/cc7NhYw7.s:7 *ABS*:0000000000000001 __zero_reg__
/tmp/cc7NhYw7.s:17 .text:0000000000000000 lcd_enable
/tmp/cc7NhYw7.s:44 .text:000000000000000e lcd_out
/tmp/cc7NhYw7.s:72 .text:0000000000000024 lcd_data
/tmp/cc7NhYw7.s:111 .text:0000000000000044 lcd_command
/tmp/cc7NhYw7.s:149 .text:0000000000000062 lcd_clear
/tmp/cc7NhYw7.s:178 .text:0000000000000076 lcd_init
/tmp/cc7NhYw7.s:282 .text:00000000000000ea lcd_home
/tmp/cc7NhYw7.s:311 .text:00000000000000fe lcd_setcursor
/tmp/cc7NhYw7.s:368 .text:000000000000012a lcd_string
/tmp/cc7NhYw7.s:408 .text:0000000000000152 lcd_string_p
/tmp/cc7NhYw7.s:454 .text:000000000000016e lcd_generatechar
NO UNDEFINED SYMBOLS

BIN
lcd_routines.o Normal file

Binary file not shown.

62
main.c
View File

@ -6,22 +6,27 @@
#include "lcd_routines.h"
#include "uart.h"
#define SAVE PD2
#define SIGNAL PD3
#define FREQ_DOWN PD4
#define FREQ_UP PD5
#define AMP_DOWN PD6
#define AMP_UP PD7
#define KEY_DDR DDRD
#define KEY_PORT PORTD
#define KEY_PIN PIND
#define SAVE PD2
#define SIGNAL PD3
#define FREQ_DOWN PD4
#define FREQ_UP PD5
#define AMP_DOWN PD6
#define AMP_UP PD7
#define KEY_DDR DDRD
#define KEY_PORT PORTD
#define KEY_PIN PIND
#define KEY_ON_DDR DDRB
#define KEY_ON_PORT PORTB
#define KEY_ON_PIN PINB
#define KEY_ON PB0
#define LED_PIN PA7
#define LED_PORT PORTA
#define LED_DDR DDRA
#define led_on() LED_PORT |= _BV(LED_PORT);
#define led_off() LED_PORT &= ~_BV(LED_PORT);
#define led_on() LED_PORT |= _BV(LED_PIN);
#define led_off() LED_PORT &= ~_BV(LED_PIN);
#define led_toggle() LED_PORT ^= _BV(LED_PIN)
#define UART_BAUD_RATE 9600
@ -31,15 +36,12 @@
#define REPEAT_START 50
#define REPEAT_NEXT 20
volatile uint8_t key_state; // debounced and inverted key state:
// bit = 1: key pressed
volatile uint8_t key_press; // key press detect
volatile uint8_t key_rpt; // key long press and repeat
volatile uint16_t key_state;
volatile uint16_t key_press;
/* prototypes */
void init_io();
uint8_t get_key_press(uint8_t key_mask);
uint16_t get_key_press(uint16_t key_mask);
int main(void) {
init_io();
@ -60,6 +62,10 @@ int main(void) {
lcd_clear();
} else if (c == '+') {
lcd_setcursor(0, 2);
} else if (c == '\'') {
led_off();
} else if (c == '#') {
led_on();
} else {
lcd_data(c);
}
@ -80,6 +86,9 @@ int main(void) {
if (get_key_press(_BV(AMP_DOWN))) {
uart_putc('a');
}
if (get_key_press(_BV(KEY_ON) << 8)) {
uart_putc('o');
}
if (get_key_press(_BV(SAVE))) {
uart_putc('v');
}
@ -91,7 +100,12 @@ int main(void) {
void init_io() {
KEY_DDR &= ~ALL_KEYS; // configure key port for input
KEY_PORT |= ALL_KEYS;
KEY_ON_DDR &= ~_BV(KEY_ON);
KEY_ON_PORT |= _BV(KEY_ON);
LED_DDR |= _BV(LED_PIN);
LED_PORT &= ~_BV(LED_PIN);
TCCR0 = (1 << CS02) | (1 << CS00); // divide by 1024
TCNT0 = (uint8_t) (int16_t) -(F_CPU / 1024 * 10e-3 + 0.5); // preload for 10ms
@ -99,27 +113,21 @@ void init_io() {
}
ISR( TIMER0_OVF_vect ) {
static uint8_t ct0, ct1, rpt;
uint8_t i;
static uint16_t ct0, ct1;
uint16_t i;
TCNT0 = (uint8_t) (int16_t) -(F_CPU / 1024 * 10e-3 + 0.5); // preload for 10ms
i = key_state ^ ~KEY_PIN; // key changed ?
i = key_state ^ ~(KEY_PIN | (KEY_ON_PIN << 8)); // key changed ?
ct0 = ~(ct0 & i); // reset or count ct0
ct1 = ct0 ^ (ct1 & i); // reset or count ct1
i &= ct0 & ct1; // count until roll over ?
key_state ^= i; // then toggle debounced state
key_press |= key_state & i; // 0->1: key press detect
if ((key_state & REPEAT_MASK) == 0) // check repeat function
rpt = REPEAT_START; // start delay
if (--rpt == 0) {
rpt = REPEAT_NEXT; // repeat delay
key_rpt |= key_state & REPEAT_MASK;
}
}
uint8_t get_key_press(uint8_t key_mask) {
uint16_t get_key_press(uint16_t key_mask) {
cli();
// read and clear atomic !
key_mask &= key_press; // read key(s)

1
main.eep Normal file
View File

@ -0,0 +1 @@
:00000001FF

BIN
main.elf Executable file

Binary file not shown.

96
main.hex Normal file
View File

@ -0,0 +1,96 @@
:100000000C942A000C943C000C943C000C943C0092
:100010000C943C000C943C000C943C000C943C0070
:100020000C943C000C9450000C943C000C940D0279
:100030000C9436020C943C000C943C000C943C0054
:100040000C943C000C943C000C943C000C943C0040
:100050000C943C0011241FBECFE5D4E0DEBFCDBF21
:1000600010E0A0E6B0E001C01D92AD3AB107E1F7A3
:100070000E94C2000C94F6020C94000081B38370BD
:1000800081BB82B38C6F82BBB898C09AD79ADF9835
:1000900085E083BF84E682BF89B7816089BF089508
:1000A0001F920F920FB60F9211242F933F934F93ED
:1000B0005F938F939F9384E682BF4091AB005091F2
:1000C000AC0080B396B3392F20E090E0822B932BC5
:1000D0008095909584279527209162003091630048
:1000E00028233923209530953093630020936200B4
:1000F00040916000509161004823592342275327C3
:1001000050936100409360008223932384239523BE
:100110002091AB003091AC00282739273093AC00F8
:100120002093AB002091A9003091AA004091AB0030
:100130005091AC0048235923422B532B5093AA00D3
:100140004093A9009F918F915F914F913F912F9183
:100150000F900FBE0F901F9018959C01F8948091FE
:10016000A9009091AA00282339238091A900909199
:10017000AA00822793279093AA008093A9007894DD
:10018000C90108950E943E000E946C0187E690E03C
:100190000E945B0280E060E00E94B00178940E94BF
:1001A000BD0218161906E4F40E946F028A32910506
:1001B00019F40E94620114C08B32910529F480E089
:1001C00062E00E94B0010CC08732910511F4DF9803
:1001D00007C08332910511F4DF9A02C00E944301E7
:1001E00080E190E00E94AD00009719F086E60E9441
:1001F0008A0280E290E00E94AD00009719F086E448
:100200000E948A0288E090E00E94AD00009719F0F9
:1002100083E70E948A0280E890E00E94AD00009788
:1002200019F081E40E948A0280E490E00E94AD000F
:10023000009719F081E60E948A0280E091E00E9416
:10024000AD00009719F08FE60E948A0284E090E0EA
:100250000E94AD00009709F4A2CF86E70E948A02AF
:100260009ECFDD9A8AE68A95F1F700C0DD98089561
:100270009BB3907F9BBB9BB382958F70892B8BBB6D
:100280000E94310108951F93182FDC9A0E943801B3
:10029000812F8295807F0E94380185EF8A95F1F742
:1002A00000001F9108951F93182FDC980E943801B9
:1002B000812F8295807F0E94380180EE8A95F1F728
:1002C0001F91089581E00E9453018FE39FE1019700
:1002D000F1F700C0000008958AB38F638ABB8BB327
:1002E000807C8BBB8FE59AEE0197F1F700C0000090
:1002F00080E30E9438018FE19EE40197F1F700C08E
:1003000000000E9431018FE99FE00197F1F700C0E2
:1003100000000E9431018FE99FE00197F1F700C0D2
:10032000000080E20E9438018FE19EE40197F1F71E
:1003300000C0000088E20E9453018CE00E9453013B
:1003400086E00E9453010E946201089582E00E94AB
:1003500053018FE39FE10197F1F700C0000008957A
:10036000623061F0633018F4613079F405C06330B5
:1003700039F0643051F406C0805805C0805403C081
:10038000805701C080530E9453010895EF92FF925D
:10039000CF93DF93E82EE7017E01F92EE70102C03B
:1003A0000E94430189918823D9F7DF91CF91FF9073
:1003B000EF900895CF93DF93EC0102C00E944301B8
:1003C000FE01219684918823C9F7DF91CF9108958A
:1003D000EF92FF921F93DF93CF9300D0CDB7DEB79C
:1003E000880F880F880F806469837A830E94530185
:1003F00069817A81462F572F7A0118E0F7018191A0
:100400007F010E9443011150C9F70F900F90CF91C7
:10041000DF911F91FF90EF9008951F920F920FB6FA
:100420000F9211242F938F939F93EF93FF938BB190
:100430009CB1E0916500EF5FEF7120916400E217DD
:1004400041F08871E0936500F0E0E857FF4F90833A
:1004500001C082E08093A800FF91EF919F918F915E
:100460002F910F900FBE0F901F9018951F920F9213
:100470000FB60F9211248F939F93EF93FF93909158
:10048000660080916700981761F0E0916700EF5F68
:10049000EF71E0936700F0E0E859FF4F80818CB97D
:1004A00001C05598FF91EF919F918F910F900FBED2
:1004B0000F901F901895109266001092670010928E
:1004C00065001092640097FF03C022E02BB99F776C
:1004D00090BD89B988E98AB986E880BD0895909170
:1004E000650080916400981789F0E0916400EF5FE7
:1004F000EF71E0936400F0E0E857FF4F8081909146
:10050000A800392F20E0280F311D02C020E031E083
:10051000C9010895909166009F5F9F7120916700C7
:100520009217E1F3E92FF0E0E859FF4F80839093B1
:100530006600559A0895EF92FF92CF93DF93E82ECD
:10054000E7017E01F92EE70102C00E948A0289912B
:100550008823D9F7DF91CF91FF90EF900895CF9343
:10056000DF93EC0102C00E948A02FE012196849171
:100570008823C9F7DF91CF9108958091650020917C
:10058000640090E04F96821B91096FE170E00E9439
:10059000CF0208958091640080936500089597FBD1
:1005A000092E07260AD077FD04D00CD006D00020F3
:1005B0001AF4709561957F4F0895F6F7909581959F
:1005C0009F4F0895AA1BBB1B51E107C0AA1FBB1F69
:1005D000A617B70710F0A61BB70B881F991F5A95CF
:1005E000A9F780959095BC01CD010895F894FFCFAF
:00000001FF

363
main.lst Normal file
View File

@ -0,0 +1,363 @@
1 .file "main.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __CCP__ = 0x34
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
15 .Ltext0:
16 .global init_io
18 init_io:
19 .LFB1:
20 .LM1:
21 /* prologue: function */
22 /* frame size = 0 */
23 /* stack size = 0 */
24 .L__stack_usage = 0
25 .LM2:
26 0000 81B3 in r24,49-32
27 0002 8370 andi r24,lo8(3)
28 0004 81BB out 49-32,r24
29 .LM3:
30 0006 82B3 in r24,50-32
31 0008 8C6F ori r24,lo8(-4)
32 000a 82BB out 50-32,r24
33 .LM4:
34 000c B898 cbi 55-32,0
35 .LM5:
36 000e C09A sbi 56-32,0
37 .LM6:
38 0010 D79A sbi 58-32,7
39 .LM7:
40 0012 DF98 cbi 59-32,7
41 .LM8:
42 0014 85E0 ldi r24,lo8(5)
43 0016 83BF out 83-32,r24
44 .LM9:
45 0018 84E6 ldi r24,lo8(100)
46 001a 82BF out 82-32,r24
47 .LM10:
48 001c 89B7 in r24,89-32
49 001e 8160 ori r24,lo8(1)
50 0020 89BF out 89-32,r24
51 /* epilogue start */
52 .LM11:
53 0022 0895 ret
54 .LFE1:
56 .global __vector_9
58 __vector_9:
59 .LFB2:
60 .LM12:
61 0024 1F92 push __zero_reg__
62 0026 0F92 push r0
63 0028 0FB6 in r0,__SREG__
64 002a 0F92 push r0
65 002c 1124 clr __zero_reg__
66 002e 2F93 push r18
67 0030 3F93 push r19
68 0032 4F93 push r20
69 0034 5F93 push r21
70 0036 8F93 push r24
71 0038 9F93 push r25
72 /* prologue: Signal */
73 /* frame size = 0 */
74 /* stack size = 9 */
75 .L__stack_usage = 9
76 .LM13:
77 003a 84E6 ldi r24,lo8(100)
78 003c 82BF out 82-32,r24
79 .LM14:
80 003e 4091 0000 lds r20,key_state
81 0042 5091 0000 lds r21,key_state+1
82 0046 80B3 in r24,48-32
83 0048 96B3 in r25,54-32
84 004a 392F mov r19,r25
85 004c 20E0 ldi r18,lo8(0)
86 004e 90E0 ldi r25,lo8(0)
87 0050 822B or r24,r18
88 0052 932B or r25,r19
89 0054 8095 com r24
90 0056 9095 com r25
91 0058 8427 eor r24,r20
92 005a 9527 eor r25,r21
93 .LVL0:
94 .LM15:
95 005c 2091 0000 lds r18,ct0.1588
96 0060 3091 0000 lds r19,ct0.1588+1
97 0064 2823 and r18,r24
98 0066 3923 and r19,r25
99 0068 2095 com r18
100 006a 3095 com r19
101 006c 3093 0000 sts ct0.1588+1,r19
102 0070 2093 0000 sts ct0.1588,r18
103 .LM16:
104 0074 4091 0000 lds r20,ct1.1589
105 0078 5091 0000 lds r21,ct1.1589+1
106 007c 4823 and r20,r24
107 007e 5923 and r21,r25
108 0080 4227 eor r20,r18
109 0082 5327 eor r21,r19
110 0084 5093 0000 sts ct1.1589+1,r21
111 0088 4093 0000 sts ct1.1589,r20
112 .LM17:
113 008c 8223 and r24,r18
114 008e 9323 and r25,r19
115 .LVL1:
116 0090 8423 and r24,r20
117 0092 9523 and r25,r21
118 .LVL2:
119 .LM18:
120 0094 2091 0000 lds r18,key_state
121 0098 3091 0000 lds r19,key_state+1
122 009c 2827 eor r18,r24
123 009e 3927 eor r19,r25
124 00a0 3093 0000 sts key_state+1,r19
125 00a4 2093 0000 sts key_state,r18
126 .LM19:
127 00a8 2091 0000 lds r18,key_press
128 00ac 3091 0000 lds r19,key_press+1
129 00b0 4091 0000 lds r20,key_state
130 00b4 5091 0000 lds r21,key_state+1
131 00b8 4823 and r20,r24
132 00ba 5923 and r21,r25
133 00bc 422B or r20,r18
134 00be 532B or r21,r19
135 00c0 5093 0000 sts key_press+1,r21
136 00c4 4093 0000 sts key_press,r20
137 /* epilogue start */
138 .LM20:
139 00c8 9F91 pop r25
140 00ca 8F91 pop r24
141 .LVL3:
142 00cc 5F91 pop r21
143 00ce 4F91 pop r20
144 00d0 3F91 pop r19
145 00d2 2F91 pop r18
146 00d4 0F90 pop r0
147 00d6 0FBE out __SREG__,r0
148 00d8 0F90 pop r0
149 00da 1F90 pop __zero_reg__
150 00dc 1895 reti
151 .LFE2:
153 .global get_key_press
155 get_key_press:
156 .LFB3:
157 .LM21:
158 .LVL4:
159 /* prologue: function */
160 /* frame size = 0 */
161 /* stack size = 0 */
162 .L__stack_usage = 0
163 00de 9C01 movw r18,r24
164 .LM22:
165 /* #APP */
166 ; 131 "main.c" 1
167 00e0 F894 cli
168 ; 0 "" 2
169 .LM23:
170 /* #NOAPP */
171 00e2 8091 0000 lds r24,key_press
172 00e6 9091 0000 lds r25,key_press+1
173 .LVL5:
174 00ea 2823 and r18,r24
175 00ec 3923 and r19,r25
176 .LVL6:
177 .LM24:
178 00ee 8091 0000 lds r24,key_press
179 00f2 9091 0000 lds r25,key_press+1
180 00f6 8227 eor r24,r18
181 00f8 9327 eor r25,r19
182 00fa 9093 0000 sts key_press+1,r25
183 00fe 8093 0000 sts key_press,r24
184 .LM25:
185 /* #APP */
186 ; 135 "main.c" 1
187 0102 7894 sei
188 ; 0 "" 2
189 .LM26:
190 /* #NOAPP */
191 0104 C901 movw r24,r18
192 /* epilogue start */
193 0106 0895 ret
194 .LFE3:
196 .global main
198 main:
199 .LFB0:
200 .LM27:
201 /* prologue: function */
202 /* frame size = 0 */
203 /* stack size = 0 */
204 .L__stack_usage = 0
205 .LM28:
206 0108 0E94 0000 call init_io
207 .LM29:
208 010c 0E94 0000 call lcd_init
209 .LM30:
210 0110 87E6 ldi r24,lo8(103)
211 0112 90E0 ldi r25,hi8(103)
212 0114 0E94 0000 call uart_init
213 .LM31:
214 0118 80E0 ldi r24,lo8(0)
215 011a 60E0 ldi r22,lo8(0)
216 011c 0E94 0000 call lcd_setcursor
217 .LM32:
218 /* #APP */
219 ; 55 "main.c" 1
220 0120 7894 sei
221 ; 0 "" 2
222 /* #NOAPP */
223 .L20:
224 .LM33:
225 0122 0E94 0000 call uart_available
226 0126 1816 cp __zero_reg__,r24
227 0128 1906 cpc __zero_reg__,r25
228 012a 04F4 brge .L5
229 .LM34:
230 012c 0E94 0000 call uart_getc
231 .LVL7:
232 .LM35:
233 0130 8A32 cpi r24,42
234 0132 9105 cpc r25,__zero_reg__
235 0134 01F4 brne .L6
236 .LM36:
237 0136 0E94 0000 call lcd_clear
238 .LVL8:
239 013a 00C0 rjmp .L5
240 .LVL9:
241 .L6:
242 .LM37:
243 013c 8B32 cpi r24,43
244 013e 9105 cpc r25,__zero_reg__
245 0140 01F4 brne .L7
246 .LM38:
247 0142 80E0 ldi r24,lo8(0)
248 .LVL10:
249 0144 62E0 ldi r22,lo8(2)
250 0146 0E94 0000 call lcd_setcursor
251 014a 00C0 rjmp .L5
252 .LVL11:
253 .L7:
254 .LM39:
255 014c 8732 cpi r24,39
256 014e 9105 cpc r25,__zero_reg__
257 0150 01F4 brne .L8
258 .LM40:
259 0152 DF98 cbi 59-32,7
260 0154 00C0 rjmp .L5
261 .L8:
262 .LM41:
263 0156 8332 cpi r24,35
264 0158 9105 cpc r25,__zero_reg__
265 015a 01F4 brne .L9
266 .LM42:
267 015c DF9A sbi 59-32,7
268 015e 00C0 rjmp .L5
269 .L9:
270 .LM43:
271 0160 0E94 0000 call lcd_data
272 .LVL12:
273 .L5:
274 .LM44:
275 0164 80E1 ldi r24,lo8(16)
276 0166 90E0 ldi r25,hi8(16)
277 0168 0E94 0000 call get_key_press
278 016c 0097 sbiw r24,0
279 016e 01F0 breq .L10
280 .LM45:
281 0170 86E6 ldi r24,lo8(102)
282 0172 0E94 0000 call uart_putc
283 .L10:
284 .LM46:
285 0176 80E2 ldi r24,lo8(32)
286 0178 90E0 ldi r25,hi8(32)
287 017a 0E94 0000 call get_key_press
288 017e 0097 sbiw r24,0
289 0180 01F0 breq .L11
290 .LM47:
291 0182 86E4 ldi r24,lo8(70)
292 0184 0E94 0000 call uart_putc
293 .L11:
294 .LM48:
295 0188 88E0 ldi r24,lo8(8)
296 018a 90E0 ldi r25,hi8(8)
297 018c 0E94 0000 call get_key_press
298 0190 0097 sbiw r24,0
299 0192 01F0 breq .L12
300 .LM49:
301 0194 83E7 ldi r24,lo8(115)
302 0196 0E94 0000 call uart_putc
303 .L12:
304 .LM50:
305 019a 80E8 ldi r24,lo8(128)
306 019c 90E0 ldi r25,hi8(128)
307 019e 0E94 0000 call get_key_press
308 01a2 0097 sbiw r24,0
309 01a4 01F0 breq .L13
310 .LM51:
311 01a6 81E4 ldi r24,lo8(65)
312 01a8 0E94 0000 call uart_putc
313 .L13:
314 .LM52:
315 01ac 80E4 ldi r24,lo8(64)
316 01ae 90E0 ldi r25,hi8(64)
317 01b0 0E94 0000 call get_key_press
318 01b4 0097 sbiw r24,0
319 01b6 01F0 breq .L14
320 .LM53:
321 01b8 81E6 ldi r24,lo8(97)
322 01ba 0E94 0000 call uart_putc
323 .L14:
324 .LM54:
325 01be 80E0 ldi r24,lo8(256)
326 01c0 91E0 ldi r25,hi8(256)
327 01c2 0E94 0000 call get_key_press
328 01c6 0097 sbiw r24,0
329 01c8 01F0 breq .L15
330 .LM55:
331 01ca 8FE6 ldi r24,lo8(111)
332 01cc 0E94 0000 call uart_putc
333 .L15:
334 .LM56:
335 01d0 84E0 ldi r24,lo8(4)
336 01d2 90E0 ldi r25,hi8(4)
337 01d4 0E94 0000 call get_key_press
338 01d8 0097 sbiw r24,0
339 01da 01F4 brne .+2
340 01dc 00C0 rjmp .L20
341 .LM57:
342 01de 86E7 ldi r24,lo8(118)
343 01e0 0E94 0000 call uart_putc
344 01e4 00C0 rjmp .L20
345 .LFE0:
347 .comm key_state,2,1
348 .comm key_press,2,1
349 .lcomm ct1.1589,2
350 .lcomm ct0.1588,2
399 .Letext0:
DEFINED SYMBOLS
*ABS*:0000000000000000 main.c
/tmp/cc8a5ehv.s:2 *ABS*:000000000000003f __SREG__
/tmp/cc8a5ehv.s:3 *ABS*:000000000000003e __SP_H__
/tmp/cc8a5ehv.s:4 *ABS*:000000000000003d __SP_L__
/tmp/cc8a5ehv.s:5 *ABS*:0000000000000034 __CCP__
/tmp/cc8a5ehv.s:6 *ABS*:0000000000000000 __tmp_reg__
/tmp/cc8a5ehv.s:7 *ABS*:0000000000000001 __zero_reg__
/tmp/cc8a5ehv.s:18 .text:0000000000000000 init_io
/tmp/cc8a5ehv.s:58 .text:0000000000000024 __vector_9
*COM*:0000000000000002 key_state
/tmp/cc8a5ehv.s:349 .bss:0000000000000002 ct0.1588
.bss:0000000000000000 ct1.1589
*COM*:0000000000000002 key_press
/tmp/cc8a5ehv.s:155 .text:00000000000000de get_key_press
/tmp/cc8a5ehv.s:198 .text:0000000000000108 main
UNDEFINED SYMBOLS
lcd_init
uart_init
lcd_setcursor
uart_available
uart_getc
lcd_clear
lcd_data
uart_putc
__do_clear_bss

511
main.map Normal file
View File

@ -0,0 +1,511 @@
Archive member included because of file (symbol)
/usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_divmodhi4.o)
uart.o (__divmodhi4)
/usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_exit.o)
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o (exit)
/usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_clear_bss.o)
main.o (__do_clear_bss)
/usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_udivmodhi4.o)
/usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_divmodhi4.o) (__udivmodhi4)
Allocating common symbols
Common symbol size file
key_press 0x2 main.o
key_state 0x2 main.o
Memory Configuration
Name Origin Length Attributes
text 0x0000000000000000 0x0000000000020000 xr
data 0x0000000000800060 0x000000000000ffa0 rw !x
eeprom 0x0000000000810000 0x0000000000010000 rw !x
fuse 0x0000000000820000 0x0000000000000400 rw !x
lock 0x0000000000830000 0x0000000000000400 rw !x
signature 0x0000000000840000 0x0000000000000400 rw !x
*default* 0x0000000000000000 0xffffffffffffffff
Linker script and memory map
LOAD /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
LOAD main.o
LOAD lcd_routines.o
LOAD uart.o
LOAD /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libm.a
LOAD /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a
LOAD /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a
LOAD /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a
.hash
*(.hash)
.dynsym
*(.dynsym)
.dynstr
*(.dynstr)
.gnu.version
*(.gnu.version)
.gnu.version_d
*(.gnu.version_d)
.gnu.version_r
*(.gnu.version_r)
.rel.init
*(.rel.init)
.rela.init
*(.rela.init)
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
.rel.fini
*(.rel.fini)
.rela.fini
*(.rela.fini)
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
.rel.ctors
*(.rel.ctors)
.rela.ctors
*(.rela.ctors)
.rel.dtors
*(.rel.dtors)
.rela.dtors
*(.rela.dtors)
.rel.got
*(.rel.got)
.rela.got
*(.rela.got)
.rel.bss
*(.rel.bss)
.rela.bss
*(.rela.bss)
.rel.plt
*(.rel.plt)
.rela.plt
*(.rela.plt)
.text 0x0000000000000000 0x5f0
*(.vectors)
.vectors 0x0000000000000000 0x54 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
0x0000000000000000 __vectors
0x0000000000000000 __vector_default
*(.vectors)
*(.progmem.gcc*)
*(.progmem*)
0x0000000000000054 . = ALIGN (0x2)
0x0000000000000054 __trampolines_start = .
*(.trampolines)
.trampolines 0x0000000000000054 0x0 linker stubs
*(.trampolines*)
0x0000000000000054 __trampolines_end = .
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
0x0000000000000054 __ctors_start = .
*(.ctors)
0x0000000000000054 __ctors_end = .
0x0000000000000054 __dtors_start = .
*(.dtors)
0x0000000000000054 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
.init0 0x0000000000000054 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
0x0000000000000054 __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
.init2 0x0000000000000054 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
*(.init2)
*(.init3)
*(.init3)
*(.init4)
.init4 0x0000000000000060 0x10 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_clear_bss.o)
0x0000000000000060 __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
*(.init6)
*(.init6)
*(.init7)
*(.init7)
*(.init8)
*(.init8)
*(.init9)
.init9 0x0000000000000070 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
*(.init9)
*(.text)
.text 0x0000000000000078 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
0x0000000000000078 __vector_1
0x0000000000000078 __bad_interrupt
0x0000000000000078 __vector_6
0x0000000000000078 __vector_3
0x0000000000000078 __vector_13
0x0000000000000078 __vector_17
0x0000000000000078 __vector_19
0x0000000000000078 __vector_7
0x0000000000000078 __vector_5
0x0000000000000078 __vector_4
0x0000000000000078 __vector_2
0x0000000000000078 __vector_15
0x0000000000000078 __vector_8
0x0000000000000078 __vector_14
0x0000000000000078 __vector_10
0x0000000000000078 __vector_16
0x0000000000000078 __vector_18
0x0000000000000078 __vector_20
.text 0x000000000000007c 0x1e6 main.o
0x000000000000007c init_io
0x00000000000000a0 __vector_9
0x000000000000015a get_key_press
0x0000000000000184 main
.text 0x0000000000000262 0x1b8 lcd_routines.o
0x0000000000000286 lcd_data
0x00000000000002a6 lcd_command
0x00000000000002c4 lcd_clear
0x00000000000002d8 lcd_init
0x000000000000034c lcd_home
0x0000000000000360 lcd_setcursor
0x000000000000038c lcd_string
0x00000000000003b4 lcd_string_p
0x00000000000003d0 lcd_generatechar
.text 0x000000000000041a 0x184 uart.o
0x000000000000041a __vector_11
0x000000000000046c __vector_12
0x00000000000004b6 uart_init
0x00000000000004de uart_getc
0x0000000000000514 uart_putc
0x0000000000000536 uart_puts
0x000000000000055e uart_puts_p
0x000000000000057a uart_available
0x0000000000000594 uart_flush
.text 0x000000000000059e 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_divmodhi4.o)
.text 0x000000000000059e 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_exit.o)
.text 0x000000000000059e 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_clear_bss.o)
.text 0x000000000000059e 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_udivmodhi4.o)
0x000000000000059e . = ALIGN (0x2)
*(.text.*)
.text.libgcc 0x000000000000059e 0x26 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_divmodhi4.o)
0x000000000000059e __divmodhi4
0x000000000000059e _div
.text.libgcc 0x00000000000005c4 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_exit.o)
.text.libgcc 0x00000000000005c4 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_clear_bss.o)
.text.libgcc 0x00000000000005c4 0x28 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_udivmodhi4.o)
0x00000000000005c4 __udivmodhi4
0x00000000000005ec . = ALIGN (0x2)
*(.fini9)
.fini9 0x00000000000005ec 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_exit.o)
0x00000000000005ec exit
0x00000000000005ec _exit
*(.fini9)
*(.fini8)
*(.fini8)
*(.fini7)
*(.fini7)
*(.fini6)
*(.fini6)
*(.fini5)
*(.fini5)
*(.fini4)
*(.fini4)
*(.fini3)
*(.fini3)
*(.fini2)
*(.fini2)
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x00000000000005ec 0x4 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_exit.o)
*(.fini0)
0x00000000000005f0 _etext = .
.data 0x0000000000800060 0x0 load address 0x00000000000005f0
0x0000000000800060 PROVIDE (__data_start, .)
*(.data)
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
.data 0x0000000000800060 0x0 main.o
.data 0x0000000000800060 0x0 lcd_routines.o
.data 0x0000000000800060 0x0 uart.o
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_divmodhi4.o)
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_exit.o)
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_clear_bss.o)
.data 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_udivmodhi4.o)
*(.data*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.d*)
0x0000000000800060 . = ALIGN (0x2)
0x0000000000800060 _edata = .
0x0000000000800060 PROVIDE (__data_end, .)
.bss 0x0000000000800060 0x4d
0x0000000000800060 PROVIDE (__bss_start, .)
*(.bss)
.bss 0x0000000000800060 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
.bss 0x0000000000800060 0x4 main.o
.bss 0x0000000000800064 0x0 lcd_routines.o
.bss 0x0000000000800064 0x45 uart.o
.bss 0x00000000008000a9 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_divmodhi4.o)
.bss 0x00000000008000a9 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_exit.o)
.bss 0x00000000008000a9 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_clear_bss.o)
.bss 0x00000000008000a9 0x0 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_udivmodhi4.o)
*(.bss*)
*(COMMON)
COMMON 0x00000000008000a9 0x4 main.o
0x00000000008000a9 key_press
0x00000000008000ab key_state
0x00000000008000ad PROVIDE (__bss_end, .)
0x00000000000005f0 __data_load_start = LOADADDR (.data)
0x00000000000005f0 __data_load_end = (__data_load_start + SIZEOF (.data))
.noinit 0x00000000008000ad 0x0
0x00000000008000ad PROVIDE (__noinit_start, .)
*(.noinit*)
0x00000000008000ad PROVIDE (__noinit_end, .)
0x00000000008000ad _end = .
0x00000000008000ad PROVIDE (__heap_start, .)
.eeprom 0x0000000000810000 0x0
*(.eeprom*)
0x0000000000810000 __eeprom_end = .
.fuse
*(.fuse)
*(.lfuse)
*(.hfuse)
*(.efuse)
.lock
*(.lock*)
.signature
*(.signature*)
.stab 0x0000000000000000 0x6cc
*(.stab)
.stab 0x0000000000000000 0x6cc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
.stabstr 0x0000000000000000 0x54
*(.stabstr)
.stabstr 0x0000000000000000 0x54 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
.stab.excl
*(.stab.excl)
.stab.exclstr
*(.stab.exclstr)
.stab.index
*(.stab.index)
.stab.indexstr
*(.stab.indexstr)
.comment
*(.comment)
.debug
*(.debug)
.line
*(.line)
.debug_srcinfo
*(.debug_srcinfo)
.debug_sfnames
*(.debug_sfnames)
.debug_aranges 0x0000000000000000 0x60
*(.debug_aranges)
.debug_aranges
0x0000000000000000 0x20 main.o
.debug_aranges
0x0000000000000020 0x20 lcd_routines.o
.debug_aranges
0x0000000000000040 0x20 uart.o
.debug_pubnames
0x0000000000000000 0x19e
*(.debug_pubnames)
.debug_pubnames
0x0000000000000000 0x64 main.o
.debug_pubnames
0x0000000000000064 0x9e lcd_routines.o
.debug_pubnames
0x0000000000000102 0x9c uart.o
.debug_info 0x0000000000000000 0xa3e
*(.debug_info)
.debug_info 0x0000000000000000 0x185 main.o
.debug_info 0x0000000000000185 0x5a5 lcd_routines.o
.debug_info 0x000000000000072a 0x314 uart.o
*(.gnu.linkonce.wi.*)
.debug_abbrev 0x0000000000000000 0x344
*(.debug_abbrev)
.debug_abbrev 0x0000000000000000 0xd0 main.o
.debug_abbrev 0x00000000000000d0 0x155 lcd_routines.o
.debug_abbrev 0x0000000000000225 0x11f uart.o
.debug_line 0x0000000000000000 0x82e
*(.debug_line)
.debug_line 0x0000000000000000 0x24b main.o
.debug_line 0x000000000000024b 0x360 lcd_routines.o
.debug_line 0x00000000000005ab 0x283 uart.o
.debug_frame 0x0000000000000000 0x1b0
*(.debug_frame)
.debug_frame 0x0000000000000000 0x50 main.o
.debug_frame 0x0000000000000050 0xc0 lcd_routines.o
.debug_frame 0x0000000000000110 0xa0 uart.o
.debug_str 0x0000000000000000 0x2b5
*(.debug_str)
.debug_str 0x0000000000000000 0xba main.o
0x100 (size before relaxing)
.debug_str 0x00000000000000ba 0x112 lcd_routines.o
0x1ca (size before relaxing)
.debug_str 0x00000000000001cc 0xe9 uart.o
0x1bd (size before relaxing)
.debug_loc 0x0000000000000000 0x49a
*(.debug_loc)
.debug_loc 0x0000000000000000 0x98 main.o
.debug_loc 0x0000000000000098 0x209 lcd_routines.o
.debug_loc 0x00000000000002a1 0x1f9 uart.o
.debug_macinfo
*(.debug_macinfo)
OUTPUT(main.elf elf32-avr)
LOAD linker stubs
.debug_pubtypes
0x0000000000000000 0x9a
.debug_pubtypes
0x0000000000000000 0x37 main.o
.debug_pubtypes
0x0000000000000037 0x38 lcd_routines.o
.debug_pubtypes
0x000000000000006f 0x2b uart.o
Cross Reference Table
Symbol File
__bad_interrupt /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__bss_end /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_clear_bss.o)
__bss_start /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_clear_bss.o)
__divmodhi4 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_divmodhi4.o)
uart.o
__do_clear_bss /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_clear_bss.o)
uart.o
main.o
__heap_end /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__init /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__stack /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__udivmodhi4 /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_udivmodhi4.o)
/usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_divmodhi4.o)
__vector_1 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_10 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_11 uart.o
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_12 uart.o
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_13 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_14 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_15 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_16 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_17 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_18 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_19 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_20 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_5 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_7 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_9 main.o
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vector_default /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
__vectors /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
_div /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_divmodhi4.o)
_exit /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_exit.o)
exit /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_exit.o)
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
get_key_press main.o
init_io main.o
key_press main.o
key_state main.o
lcd_clear lcd_routines.o
main.o
lcd_command lcd_routines.o
lcd_data lcd_routines.o
main.o
lcd_generatechar lcd_routines.o
lcd_home lcd_routines.o
lcd_init lcd_routines.o
main.o
lcd_setcursor lcd_routines.o
main.o
lcd_string lcd_routines.o
lcd_string_p lcd_routines.o
main main.o
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/crtm16.o
uart_available uart.o
main.o
uart_flush uart.o
uart_getc uart.o
main.o
uart_init uart.o
main.o
uart_putc uart.o
main.o
uart_puts uart.o
uart_puts_p uart.o

BIN
main.o Normal file

Binary file not shown.

405
uart.lst Normal file
View File

@ -0,0 +1,405 @@
1 .file "uart.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __CCP__ = 0x34
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
15 .Ltext0:
16 .global __vector_11
18 __vector_11:
19 .LFB0:
20 .LM1:
21 0000 1F92 push __zero_reg__
22 0002 0F92 push r0
23 0004 0FB6 in r0,__SREG__
24 0006 0F92 push r0
25 0008 1124 clr __zero_reg__
26 000a 2F93 push r18
27 000c 8F93 push r24
28 000e 9F93 push r25
29 0010 EF93 push r30
30 0012 FF93 push r31
31 /* prologue: Signal */
32 /* frame size = 0 */
33 /* stack size = 8 */
34 .L__stack_usage = 8
35 .LM2:
36 0014 8BB1 in r24,43-32
37 .LVL0:
38 .LM3:
39 0016 9CB1 in r25,44-32
40 .LVL1:
41 .LM4:
42 0018 E091 0000 lds r30,UART_RxHead
43 001c EF5F subi r30,lo8(-(1))
44 001e EF71 andi r30,lo8(31)
45 .LVL2:
46 .LM5:
47 0020 2091 0000 lds r18,UART_RxTail
48 0024 E217 cp r30,r18
49 0026 01F0 breq .L3
50 .LM6:
51 0028 8871 andi r24,lo8(24)
52 .LVL3:
53 .LM7:
54 002a E093 0000 sts UART_RxHead,r30
55 .LM8:
56 002e F0E0 ldi r31,lo8(0)
57 0030 E050 subi r30,lo8(-(UART_RxBuf))
58 0032 F040 sbci r31,hi8(-(UART_RxBuf))
59 .LVL4:
60 0034 9083 st Z,r25
61 0036 00C0 rjmp .L2
62 .LVL5:
63 .L3:
64 .LM9:
65 0038 82E0 ldi r24,lo8(2)
66 .LVL6:
67 .L2:
68 .LM10:
69 003a 8093 0000 sts UART_LastRxError,r24
70 /* epilogue start */
71 .LM11:
72 003e FF91 pop r31
73 0040 EF91 pop r30
74 0042 9F91 pop r25
75 .LVL7:
76 0044 8F91 pop r24
77 .LVL8:
78 0046 2F91 pop r18
79 0048 0F90 pop r0
80 004a 0FBE out __SREG__,r0
81 004c 0F90 pop r0
82 004e 1F90 pop __zero_reg__
83 0050 1895 reti
84 .LFE0:
86 .global __vector_12
88 __vector_12:
89 .LFB1:
90 .LM12:
91 0052 1F92 push __zero_reg__
92 0054 0F92 push r0
93 0056 0FB6 in r0,__SREG__
94 0058 0F92 push r0
95 005a 1124 clr __zero_reg__
96 005c 8F93 push r24
97 005e 9F93 push r25
98 0060 EF93 push r30
99 0062 FF93 push r31
100 /* prologue: Signal */
101 /* frame size = 0 */
102 /* stack size = 7 */
103 .L__stack_usage = 7
104 .LM13:
105 0064 9091 0000 lds r25,UART_TxHead
106 0068 8091 0000 lds r24,UART_TxTail
107 006c 9817 cp r25,r24
108 006e 01F0 breq .L5
109 .LM14:
110 0070 E091 0000 lds r30,UART_TxTail
111 0074 EF5F subi r30,lo8(-(1))
112 0076 EF71 andi r30,lo8(31)
113 .LVL9:
114 .LM15:
115 0078 E093 0000 sts UART_TxTail,r30
116 .LM16:
117 007c F0E0 ldi r31,lo8(0)
118 007e E050 subi r30,lo8(-(UART_TxBuf))
119 0080 F040 sbci r31,hi8(-(UART_TxBuf))
120 .LVL10:
121 0082 8081 ld r24,Z
122 0084 8CB9 out 44-32,r24
123 0086 00C0 rjmp .L4
124 .LVL11:
125 .L5:
126 .LM17:
127 0088 5598 cbi 42-32,5
128 .L4:
129 /* epilogue start */
130 .LM18:
131 008a FF91 pop r31
132 008c EF91 pop r30
133 008e 9F91 pop r25
134 0090 8F91 pop r24
135 0092 0F90 pop r0
136 0094 0FBE out __SREG__,r0
137 0096 0F90 pop r0
138 0098 1F90 pop __zero_reg__
139 009a 1895 reti
140 .LFE1:
142 .global uart_init
144 uart_init:
145 .LFB2:
146 .LM19:
147 .LVL12:
148 /* prologue: function */
149 /* frame size = 0 */
150 /* stack size = 0 */
151 .L__stack_usage = 0
152 .LM20:
153 009c 1092 0000 sts UART_TxHead,__zero_reg__
154 .LM21:
155 00a0 1092 0000 sts UART_TxTail,__zero_reg__
156 .LM22:
157 00a4 1092 0000 sts UART_RxHead,__zero_reg__
158 .LM23:
159 00a8 1092 0000 sts UART_RxTail,__zero_reg__
160 .LM24:
161 00ac 97FF sbrs r25,7
162 00ae 00C0 rjmp .L8
163 .LM25:
164 00b0 22E0 ldi r18,lo8(2)
165 00b2 2BB9 out 43-32,r18
166 .LM26:
167 00b4 9F77 andi r25,hi8(32767)
168 .LVL13:
169 .L8:
170 .LM27:
171 00b6 90BD out 64-32,r25
172 .LM28:
173 00b8 89B9 out 41-32,r24
174 .LM29:
175 00ba 88E9 ldi r24,lo8(-104)
176 .LVL14:
177 00bc 8AB9 out 42-32,r24
178 .LM30:
179 00be 86E8 ldi r24,lo8(-122)
180 00c0 80BD out 64-32,r24
181 /* epilogue start */
182 .LM31:
183 00c2 0895 ret
184 .LFE2:
186 .global uart_getc
188 uart_getc:
189 .LFB3:
190 .LM32:
191 /* prologue: function */
192 /* frame size = 0 */
193 /* stack size = 0 */
194 .L__stack_usage = 0
195 .LM33:
196 00c4 9091 0000 lds r25,UART_RxHead
197 00c8 8091 0000 lds r24,UART_RxTail
198 00cc 9817 cp r25,r24
199 00ce 01F0 breq .L11
200 .LM34:
201 00d0 E091 0000 lds r30,UART_RxTail
202 00d4 EF5F subi r30,lo8(-(1))
203 00d6 EF71 andi r30,lo8(31)
204 .LVL15:
205 .LM35:
206 00d8 E093 0000 sts UART_RxTail,r30
207 .LM36:
208 00dc F0E0 ldi r31,lo8(0)
209 00de E050 subi r30,lo8(-(UART_RxBuf))
210 00e0 F040 sbci r31,hi8(-(UART_RxBuf))
211 .LVL16:
212 00e2 8081 ld r24,Z
213 .LVL17:
214 .LM37:
215 00e4 9091 0000 lds r25,UART_LastRxError