diff --git a/lcd_routines.lst b/lcd_routines.lst new file mode 100644 index 0000000..1b90623 --- /dev/null +++ b/lcd_routines.lst @@ -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 diff --git a/lcd_routines.o b/lcd_routines.o new file mode 100644 index 0000000..84c7d24 Binary files /dev/null and b/lcd_routines.o differ diff --git a/main.c b/main.c index 3faaf0e..a3472bb 100644 --- a/main.c +++ b/main.c @@ -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) diff --git a/main.eep b/main.eep new file mode 100644 index 0000000..1996e8f --- /dev/null +++ b/main.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/main.elf b/main.elf new file mode 100755 index 0000000..f5bf893 Binary files /dev/null and b/main.elf differ diff --git a/main.hex b/main.hex new file mode 100644 index 0000000..cdce73d --- /dev/null +++ b/main.hex @@ -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 diff --git a/main.lst b/main.lst new file mode 100644 index 0000000..07ddbdf --- /dev/null +++ b/main.lst @@ -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 diff --git a/main.map b/main.map new file mode 100644 index 0000000..1d96ef7 --- /dev/null +++ b/main.map @@ -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 diff --git a/main.o b/main.o new file mode 100644 index 0000000..3c0f1ad Binary files /dev/null and b/main.o differ diff --git a/uart.lst b/uart.lst new file mode 100644 index 0000000..602f5ab --- /dev/null +++ b/uart.lst @@ -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 + 216 00e8 392F mov r19,r25 + 217 00ea 20E0 ldi r18,lo8(0) + 218 00ec 280F add r18,r24 + 219 00ee 311D adc r19,__zero_reg__ + 220 00f0 00C0 rjmp .L10 + 221 .LVL18: + 222 .L11: + 223 .LM38: + 224 00f2 20E0 ldi r18,lo8(256) + 225 00f4 31E0 ldi r19,hi8(256) + 226 .L10: + 227 .LM39: + 228 00f6 C901 movw r24,r18 + 229 /* epilogue start */ + 230 00f8 0895 ret + 231 .LFE3: + 233 .global uart_putc + 235 uart_putc: + 236 .LFB4: + 237 .LM40: + 238 .LVL19: + 239 /* prologue: function */ + 240 /* frame size = 0 */ + 241 /* stack size = 0 */ + 242 .L__stack_usage = 0 + 243 .LM41: + 244 00fa 9091 0000 lds r25,UART_TxHead + 245 00fe 9F5F subi r25,lo8(-(1)) + 246 0100 9F71 andi r25,lo8(31) + 247 .LVL20: + 248 .L13: + 249 .LM42: + 250 0102 2091 0000 lds r18,UART_TxTail + 251 0106 9217 cp r25,r18 + 252 0108 01F0 breq .L13 + 253 .LM43: + 254 010a E92F mov r30,r25 + 255 010c F0E0 ldi r31,lo8(0) + 256 010e E050 subi r30,lo8(-(UART_TxBuf)) + 257 0110 F040 sbci r31,hi8(-(UART_TxBuf)) + 258 0112 8083 st Z,r24 + 259 .LM44: + 260 0114 9093 0000 sts UART_TxHead,r25 + 261 .LM45: + 262 0118 559A sbi 42-32,5 + 263 /* epilogue start */ + 264 .LM46: + 265 011a 0895 ret + 266 .LFE4: + 268 .global uart_puts + 270 uart_puts: + 271 .LFB5: + 272 .LM47: + 273 .LVL21: + 274 011c EF92 push r14 + 275 011e FF92 push r15 + 276 0120 CF93 push r28 + 277 0122 DF93 push r29 + 278 /* prologue: function */ + 279 /* frame size = 0 */ + 280 /* stack size = 4 */ + 281 .L__stack_usage = 4 + 282 .LM48: + 283 0124 E82E mov r14,r24 + 284 0126 E701 movw r28,r14 + 285 0128 7E01 movw r14,r28 + 286 012a F92E mov r15,r25 + 287 012c E701 movw r28,r14 + 288 .LM49: + 289 012e 00C0 rjmp .L16 + 290 .LVL22: + 291 .L17: + 292 .LM50: + 293 0130 0E94 0000 call uart_putc + 294 .L16: + 295 .LM51: + 296 0134 8991 ld r24,Y+ + 297 0136 8823 tst r24 + 298 0138 01F4 brne .L17 + 299 /* epilogue start */ + 300 .LM52: + 301 013a DF91 pop r29 + 302 013c CF91 pop r28 + 303 013e FF90 pop r15 + 304 0140 EF90 pop r14 + 305 0142 0895 ret + 306 .LFE5: + 308 .global uart_puts_p + 310 uart_puts_p: + 311 .LFB6: + 312 .LM53: + 313 .LVL23: + 314 0144 CF93 push r28 + 315 0146 DF93 push r29 + 316 /* prologue: function */ + 317 /* frame size = 0 */ + 318 /* stack size = 2 */ + 319 .L__stack_usage = 2 + 320 0148 EC01 movw r28,r24 + 321 .LM54: + 322 014a 00C0 rjmp .L19 + 323 .LVL24: + 324 .L20: + 325 .LM55: + 326 014c 0E94 0000 call uart_putc + 327 .LVL25: + 328 .L19: + 329 .LM56: + 330 0150 FE01 movw r30,r28 + 331 .LVL26: + 332 .LBB2: + 333 .LM57: + 334 0152 2196 adiw r28,1 + 335 .LVL27: + 336 /* #APP */ + 337 ; 538 "uart.c" 1 + 338 0154 8491 lpm r24, Z + 339 + 340 ; 0 "" 2 + 341 .LVL28: + 342 /* #NOAPP */ + 343 .LBE2: + 344 0156 8823 tst r24 + 345 0158 01F4 brne .L20 + 346 /* epilogue start */ + 347 .LM58: + 348 015a DF91 pop r29 + 349 015c CF91 pop r28 + 350 .LVL29: + 351 015e 0895 ret + 352 .LFE6: + 354 .global uart_available + 356 uart_available: + 357 .LFB7: + 358 .LM59: + 359 /* prologue: function */ + 360 /* frame size = 0 */ + 361 /* stack size = 0 */ + 362 .L__stack_usage = 0 + 363 .LM60: + 364 0160 8091 0000 lds r24,UART_RxHead + 365 0164 2091 0000 lds r18,UART_RxTail + 366 0168 90E0 ldi r25,lo8(0) + 367 016a 4F96 adiw r24,31 + 368 016c 821B sub r24,r18 + 369 016e 9109 sbc r25,__zero_reg__ + 370 0170 6FE1 ldi r22,lo8(31) + 371 0172 70E0 ldi r23,hi8(31) + 372 0174 0E94 0000 call __divmodhi4 + 373 /* epilogue start */ + 374 .LM61: + 375 0178 0895 ret + 376 .LFE7: + 378 .global uart_flush + 380 uart_flush: + 381 .LFB8: + 382 .LM62: + 383 /* prologue: function */ + 384 /* frame size = 0 */ + 385 /* stack size = 0 */ + 386 .L__stack_usage = 0 + 387 .LM63: + 388 017a 8091 0000 lds r24,UART_RxTail + 389 017e 8093 0000 sts UART_RxHead,r24 + 390 /* epilogue start */ + 391 .LM64: + 392 0182 0895 ret + 393 .LFE8: + 395 .lcomm UART_RxTail,1 + 396 .lcomm UART_RxHead,1 + 397 .lcomm UART_TxHead,1 + 398 .lcomm UART_TxTail,1 + 399 .lcomm UART_TxBuf,32 + 400 .lcomm UART_RxBuf,32 + 401 .lcomm UART_LastRxError,1 + 490 .Letext0: +DEFINED SYMBOLS + *ABS*:0000000000000000 uart.c + /tmp/ccUnbh69.s:2 *ABS*:000000000000003f __SREG__ + /tmp/ccUnbh69.s:3 *ABS*:000000000000003e __SP_H__ + /tmp/ccUnbh69.s:4 *ABS*:000000000000003d __SP_L__ + /tmp/ccUnbh69.s:5 *ABS*:0000000000000034 __CCP__ + /tmp/ccUnbh69.s:6 *ABS*:0000000000000000 __tmp_reg__ + /tmp/ccUnbh69.s:7 *ABS*:0000000000000001 __zero_reg__ + /tmp/ccUnbh69.s:18 .text:0000000000000000 __vector_11 + /tmp/ccUnbh69.s:395 .bss:0000000000000001 UART_RxHead + .bss:0000000000000000 UART_RxTail + /tmp/ccUnbh69.s:399 .bss:0000000000000024 UART_RxBuf + /tmp/ccUnbh69.s:400 .bss:0000000000000044 UART_LastRxError + /tmp/ccUnbh69.s:88 .text:0000000000000052 __vector_12 + /tmp/ccUnbh69.s:396 .bss:0000000000000002 UART_TxHead + /tmp/ccUnbh69.s:397 .bss:0000000000000003 UART_TxTail + /tmp/ccUnbh69.s:398 .bss:0000000000000004 UART_TxBuf + /tmp/ccUnbh69.s:144 .text:000000000000009c uart_init + /tmp/ccUnbh69.s:188 .text:00000000000000c4 uart_getc + /tmp/ccUnbh69.s:235 .text:00000000000000fa uart_putc + /tmp/ccUnbh69.s:270 .text:000000000000011c uart_puts + /tmp/ccUnbh69.s:310 .text:0000000000000144 uart_puts_p + /tmp/ccUnbh69.s:356 .text:0000000000000160 uart_available + /tmp/ccUnbh69.s:380 .text:000000000000017a uart_flush + +UNDEFINED SYMBOLS +__divmodhi4 +__do_clear_bss diff --git a/uart.o b/uart.o new file mode 100644 index 0000000..0160b9b Binary files /dev/null and b/uart.o differ