diff --git a/targets/arduino/buffer.lst b/targets/arduino/buffer.lst deleted file mode 100755 index 1760a61b0..000000000 --- a/targets/arduino/buffer.lst +++ /dev/null @@ -1,390 +0,0 @@ - 1 .file "buffer.c" - 2 .arch atmega8 - 3 __SREG__ = 0x3f - 4 __SP_H__ = 0x3e - 5 __SP_L__ = 0x3d - 6 __tmp_reg__ = 0 - 7 __zero_reg__ = 1 - 8 .global __do_copy_data - 9 .global __do_clear_bss - 12 .text - 13 .Ltext0: - 44 .global bufferInit - 46 bufferInit: - 1:../avrlib/buffer.c **** /*! \file buffer.c \brief Multipurpose byte buffer structure and methods. */ - 2:../avrlib/buffer.c **** //***************************************************************************** - 3:../avrlib/buffer.c **** // - 4:../avrlib/buffer.c **** // File Name : 'buffer.c' - 5:../avrlib/buffer.c **** // Title : Multipurpose byte buffer structure and methods - 6:../avrlib/buffer.c **** // Author : Pascal Stang - Copyright (C) 2001-2002 - 7:../avrlib/buffer.c **** // Created : 9/23/2001 - 8:../avrlib/buffer.c **** // Revised : 9/23/2001 - 9:../avrlib/buffer.c **** // Version : 1.0 - 10:../avrlib/buffer.c **** // Target MCU : any - 11:../avrlib/buffer.c **** // Editor Tabs : 4 - 12:../avrlib/buffer.c **** // - 13:../avrlib/buffer.c **** // This code is distributed under the GNU Public License - 14:../avrlib/buffer.c **** // which can be found at http://www.gnu.org/licenses/gpl.txt - 15:../avrlib/buffer.c **** // - 16:../avrlib/buffer.c **** //***************************************************************************** - 17:../avrlib/buffer.c **** - 18:../avrlib/buffer.c **** #include "buffer.h" - 19:../avrlib/buffer.c **** - 20:../avrlib/buffer.c **** // global variables - 21:../avrlib/buffer.c **** - 22:../avrlib/buffer.c **** // initialization - 23:../avrlib/buffer.c **** - 24:../avrlib/buffer.c **** void bufferInit(cBuffer* buffer, unsigned char *start, unsigned short size) - 25:../avrlib/buffer.c **** { - 48 .LM1: - 49 /* prologue: frame size=0 */ - 50 /* prologue end (size=0) */ - 51 0000 FC01 movw r30,r24 - 26:../avrlib/buffer.c **** // set start pointer of the buffer - 27:../avrlib/buffer.c **** buffer->dataptr = start; - 53 .LM2: - 54 0002 6083 st Z,r22 - 55 0004 7183 std Z+1,r23 - 28:../avrlib/buffer.c **** buffer->size = size; - 57 .LM3: - 58 0006 4283 std Z+2,r20 - 59 0008 5383 std Z+3,r21 - 29:../avrlib/buffer.c **** // initialize index and length - 30:../avrlib/buffer.c **** buffer->dataindex = 0; - 61 .LM4: - 62 000a 1682 std Z+6,__zero_reg__ - 63 000c 1782 std Z+7,__zero_reg__ - 31:../avrlib/buffer.c **** buffer->datalength = 0; - 65 .LM5: - 66 000e 1482 std Z+4,__zero_reg__ - 67 0010 1582 std Z+5,__zero_reg__ - 68 /* epilogue: frame size=0 */ - 69 0012 0895 ret - 70 /* epilogue end (size=1) */ - 71 /* function bufferInit size 10 (9) */ - 73 .Lscope0: - 77 .global bufferGetFromFront - 79 bufferGetFromFront: - 32:../avrlib/buffer.c **** } - 33:../avrlib/buffer.c **** - 34:../avrlib/buffer.c **** // access routines - 35:../avrlib/buffer.c **** unsigned char bufferGetFromFront(cBuffer* buffer) - 36:../avrlib/buffer.c **** { - 81 .LM6: - 82 /* prologue: frame size=0 */ - 83 0014 CF93 push r28 - 84 0016 DF93 push r29 - 85 /* prologue end (size=2) */ - 86 0018 EC01 movw r28,r24 - 37:../avrlib/buffer.c **** unsigned char data = 0; - 88 .LM7: - 89 001a E0E0 ldi r30,lo8(0) - 38:../avrlib/buffer.c **** - 39:../avrlib/buffer.c **** // check to see if there's data in the buffer - 40:../avrlib/buffer.c **** if(buffer->datalength) - 91 .LM8: - 92 001c 2C81 ldd r18,Y+4 - 93 001e 3D81 ldd r19,Y+5 - 94 0020 2115 cp r18,__zero_reg__ - 95 0022 3105 cpc r19,__zero_reg__ - 96 0024 B1F0 breq .L3 - 41:../avrlib/buffer.c **** { - 42:../avrlib/buffer.c **** // get the first character from buffer - 43:../avrlib/buffer.c **** data = buffer->dataptr[buffer->dataindex]; - 98 .LM9: - 99 0026 E881 ld r30,Y - 100 0028 F981 ldd r31,Y+1 - 101 002a 8E81 ldd r24,Y+6 - 102 002c 9F81 ldd r25,Y+7 - 103 002e E80F add r30,r24 - 104 0030 F91F adc r31,r25 - 105 0032 E081 ld r30,Z - 44:../avrlib/buffer.c **** // move index down and decrement length - 45:../avrlib/buffer.c **** buffer->dataindex++; - 107 .LM10: - 108 0034 0196 adiw r24,1 - 109 0036 8E83 std Y+6,r24 - 110 0038 9F83 std Y+7,r25 - 46:../avrlib/buffer.c **** if(buffer->dataindex >= buffer->size) - 112 .LM11: - 113 003a 6A81 ldd r22,Y+2 - 114 003c 7B81 ldd r23,Y+3 - 115 003e 8617 cp r24,r22 - 116 0040 9707 cpc r25,r23 - 117 0042 18F0 brlo .L4 - 47:../avrlib/buffer.c **** { - 48:../avrlib/buffer.c **** buffer->dataindex %= buffer->size; - 119 .LM12: - 120 0044 00D0 rcall __udivmodhi4 - 121 0046 8E83 std Y+6,r24 - 122 0048 9F83 std Y+7,r25 - 123 .L4: - 49:../avrlib/buffer.c **** } - 50:../avrlib/buffer.c **** buffer->datalength--; - 125 .LM13: - 126 004a 2150 subi r18,lo8(-(-1)) - 127 004c 3040 sbci r19,hi8(-(-1)) - 128 004e 2C83 std Y+4,r18 - 129 0050 3D83 std Y+5,r19 - 130 .L3: - 51:../avrlib/buffer.c **** } - 52:../avrlib/buffer.c **** // return - 53:../avrlib/buffer.c **** return data; - 54:../avrlib/buffer.c **** } - 132 .LM14: - 133 0052 8E2F mov r24,r30 - 134 0054 9927 clr r25 - 135 /* epilogue: frame size=0 */ - 136 0056 DF91 pop r29 - 137 0058 CF91 pop r28 - 138 005a 0895 ret - 139 /* epilogue end (size=3) */ - 140 /* function bufferGetFromFront size 36 (31) */ - 145 .Lscope1: - 150 .global bufferDumpFromFront - 152 bufferDumpFromFront: - 55:../avrlib/buffer.c **** - 56:../avrlib/buffer.c **** void bufferDumpFromFront(cBuffer* buffer, unsigned short numbytes) - 57:../avrlib/buffer.c **** { - 154 .LM15: - 155 /* prologue: frame size=0 */ - 156 005c CF93 push r28 - 157 005e DF93 push r29 - 158 /* prologue end (size=2) */ - 159 0060 FC01 movw r30,r24 - 160 0062 EB01 movw r28,r22 - 58:../avrlib/buffer.c **** // dump numbytes from the front of the buffer - 59:../avrlib/buffer.c **** // are we dumping less than the entire buffer? - 60:../avrlib/buffer.c **** if(numbytes < buffer->datalength) - 162 .LM16: - 163 0064 2481 ldd r18,Z+4 - 164 0066 3581 ldd r19,Z+5 - 165 0068 6217 cp r22,r18 - 166 006a 7307 cpc r23,r19 - 167 006c 98F4 brsh .L6 - 61:../avrlib/buffer.c **** { - 62:../avrlib/buffer.c **** // move index down by numbytes and decrement length by numbytes - 63:../avrlib/buffer.c **** buffer->dataindex += numbytes; - 169 .LM17: - 170 006e 8681 ldd r24,Z+6 - 171 0070 9781 ldd r25,Z+7 - 172 0072 860F add r24,r22 - 173 0074 971F adc r25,r23 - 174 0076 8683 std Z+6,r24 - 175 0078 9783 std Z+7,r25 - 64:../avrlib/buffer.c **** if(buffer->dataindex >= buffer->size) - 177 .LM18: - 178 007a 6281 ldd r22,Z+2 - 179 007c 7381 ldd r23,Z+3 - 180 007e 8617 cp r24,r22 - 181 0080 9707 cpc r25,r23 - 182 0082 18F0 brlo .L7 - 65:../avrlib/buffer.c **** { - 66:../avrlib/buffer.c **** buffer->dataindex %= buffer->size; - 184 .LM19: - 185 0084 00D0 rcall __udivmodhi4 - 186 0086 8683 std Z+6,r24 - 187 0088 9783 std Z+7,r25 - 188 .L7: - 67:../avrlib/buffer.c **** } - 68:../avrlib/buffer.c **** buffer->datalength -= numbytes; - 190 .LM20: - 191 008a 2C1B sub r18,r28 - 192 008c 3D0B sbc r19,r29 - 193 008e 2483 std Z+4,r18 - 194 0090 3583 std Z+5,r19 - 195 0092 02C0 rjmp .L5 - 196 .L6: - 69:../avrlib/buffer.c **** } - 70:../avrlib/buffer.c **** else - 71:../avrlib/buffer.c **** { - 72:../avrlib/buffer.c **** // flush the whole buffer - 73:../avrlib/buffer.c **** buffer->datalength = 0; - 198 .LM21: - 199 0094 1482 std Z+4,__zero_reg__ - 200 0096 1582 std Z+5,__zero_reg__ - 201 .L5: - 202 /* epilogue: frame size=0 */ - 203 0098 DF91 pop r29 - 204 009a CF91 pop r28 - 205 009c 0895 ret - 206 /* epilogue end (size=3) */ - 207 /* function bufferDumpFromFront size 33 (28) */ - 209 .Lscope2: - 214 .global bufferGetAtIndex - 216 bufferGetAtIndex: - 74:../avrlib/buffer.c **** } - 75:../avrlib/buffer.c **** } - 76:../avrlib/buffer.c **** - 77:../avrlib/buffer.c **** unsigned char bufferGetAtIndex(cBuffer* buffer, unsigned short index) - 78:../avrlib/buffer.c **** { - 218 .LM22: - 219 /* prologue: frame size=0 */ - 220 /* prologue end (size=0) */ - 221 009e FC01 movw r30,r24 - 79:../avrlib/buffer.c **** // return character at index in buffer - 80:../avrlib/buffer.c **** return buffer->dataptr[(buffer->dataindex+index)%(buffer->size)]; - 223 .LM23: - 224 00a0 8681 ldd r24,Z+6 - 225 00a2 9781 ldd r25,Z+7 - 226 00a4 2281 ldd r18,Z+2 - 227 00a6 3381 ldd r19,Z+3 - 228 00a8 860F add r24,r22 - 229 00aa 971F adc r25,r23 - 230 00ac B901 movw r22,r18 - 231 00ae 00D0 rcall __udivmodhi4 - 232 00b0 0190 ld __tmp_reg__,Z+ - 233 00b2 F081 ld r31,Z - 234 00b4 E02D mov r30,__tmp_reg__ - 235 00b6 E80F add r30,r24 - 236 00b8 F91F adc r31,r25 - 237 00ba 8081 ld r24,Z - 81:../avrlib/buffer.c **** } - 239 .LM24: - 240 00bc 9927 clr r25 - 241 /* epilogue: frame size=0 */ - 242 00be 0895 ret - 243 /* epilogue end (size=1) */ - 244 /* function bufferGetAtIndex size 17 (16) */ - 246 .Lscope3: - 251 .global bufferAddToEnd - 253 bufferAddToEnd: - 82:../avrlib/buffer.c **** - 83:../avrlib/buffer.c **** unsigned char bufferAddToEnd(cBuffer* buffer, unsigned char data) - 84:../avrlib/buffer.c **** { - 255 .LM25: - 256 /* prologue: frame size=0 */ - 257 00c0 CF93 push r28 - 258 00c2 DF93 push r29 - 259 /* prologue end (size=2) */ - 260 00c4 EC01 movw r28,r24 - 261 00c6 462F mov r20,r22 - 85:../avrlib/buffer.c **** // make sure the buffer has room - 86:../avrlib/buffer.c **** if(buffer->datalength < buffer->size) - 263 .LM26: - 264 00c8 2C81 ldd r18,Y+4 - 265 00ca 3D81 ldd r19,Y+5 - 266 00cc 6A81 ldd r22,Y+2 - 267 00ce 7B81 ldd r23,Y+3 - 268 00d0 2617 cp r18,r22 - 269 00d2 3707 cpc r19,r23 - 270 00d4 90F4 brsh .L11 - 87:../avrlib/buffer.c **** { - 88:../avrlib/buffer.c **** // save data byte at end of buffer - 89:../avrlib/buffer.c **** buffer->dataptr[(buffer->dataindex + buffer->datalength) % buffer->size] = data; - 272 .LM27: - 273 00d6 8E81 ldd r24,Y+6 - 274 00d8 9F81 ldd r25,Y+7 - 275 00da 820F add r24,r18 - 276 00dc 931F adc r25,r19 - 277 00de 00D0 rcall __udivmodhi4 - 278 00e0 E881 ld r30,Y - 279 00e2 F981 ldd r31,Y+1 - 280 00e4 E80F add r30,r24 - 281 00e6 F91F adc r31,r25 - 282 00e8 4083 st Z,r20 - 90:../avrlib/buffer.c **** // increment the length - 91:../avrlib/buffer.c **** buffer->datalength++; - 284 .LM28: - 285 00ea 8C81 ldd r24,Y+4 - 286 00ec 9D81 ldd r25,Y+5 - 287 00ee 0196 adiw r24,1 - 288 00f0 8C83 std Y+4,r24 - 289 00f2 9D83 std Y+5,r25 - 92:../avrlib/buffer.c **** // return success - 93:../avrlib/buffer.c **** return -1; - 291 .LM29: - 292 00f4 8FEF ldi r24,lo8(255) - 293 00f6 90E0 ldi r25,hi8(255) - 294 00f8 02C0 rjmp .L10 - 295 .L11: - 94:../avrlib/buffer.c **** } - 95:../avrlib/buffer.c **** else return 0; - 297 .LM30: - 298 00fa 80E0 ldi r24,lo8(0) - 299 00fc 90E0 ldi r25,hi8(0) - 300 .L10: - 301 /* epilogue: frame size=0 */ - 302 00fe DF91 pop r29 - 303 0100 CF91 pop r28 - 304 0102 0895 ret - 305 /* epilogue end (size=3) */ - 306 /* function bufferAddToEnd size 34 (29) */ - 308 .Lscope4: - 312 .global bufferIsNotFull - 314 bufferIsNotFull: - 96:../avrlib/buffer.c **** } - 97:../avrlib/buffer.c **** - 98:../avrlib/buffer.c **** unsigned char bufferIsNotFull(cBuffer* buffer) - 99:../avrlib/buffer.c **** { - 316 .LM31: - 317 /* prologue: frame size=0 */ - 318 /* prologue end (size=0) */ - 319 0104 FC01 movw r30,r24 - 100:../avrlib/buffer.c **** // check to see if the buffer has room - 101:../avrlib/buffer.c **** // return true if there is room - 102:../avrlib/buffer.c **** return (buffer->datalength < buffer->size); - 321 .LM32: - 322 0106 40E0 ldi r20,lo8(0) - 323 0108 50E0 ldi r21,hi8(0) - 324 010a 2481 ldd r18,Z+4 - 325 010c 3581 ldd r19,Z+5 - 326 010e 8281 ldd r24,Z+2 - 327 0110 9381 ldd r25,Z+3 - 328 0112 2817 cp r18,r24 - 329 0114 3907 cpc r19,r25 - 330 0116 10F4 brsh .L14 - 332 .LM33: - 333 0118 41E0 ldi r20,lo8(1) - 334 011a 50E0 ldi r21,hi8(1) - 335 .L14: - 103:../avrlib/buffer.c **** } - 337 .LM34: - 338 011c CA01 movw r24,r20 - 339 /* epilogue: frame size=0 */ - 340 011e 0895 ret - 341 /* epilogue end (size=1) */ - 342 /* function bufferIsNotFull size 14 (13) */ - 344 .Lscope5: - 348 .global bufferFlush - 350 bufferFlush: - 104:../avrlib/buffer.c **** - 105:../avrlib/buffer.c **** void bufferFlush(cBuffer* buffer) - 106:../avrlib/buffer.c **** { - 352 .LM35: - 353 /* prologue: frame size=0 */ - 354 /* prologue end (size=0) */ - 107:../avrlib/buffer.c **** // flush contents of the buffer - 108:../avrlib/buffer.c **** buffer->datalength = 0; - 356 .LM36: - 357 0120 FC01 movw r30,r24 - 358 0122 1482 std Z+4,__zero_reg__ - 359 0124 1582 std Z+5,__zero_reg__ - 360 /* epilogue: frame size=0 */ - 361 0126 0895 ret - 362 /* epilogue end (size=1) */ - 363 /* function bufferFlush size 4 (3) */ - 365 .Lscope6: - 367 .text - 369 Letext: - 370 /* File "../avrlib/buffer.c": code 148 = 0x0094 ( 129), prologues 6, epilogues 13 */ -DEFINED SYMBOLS - *ABS*:00000000 buffer.c - *ABS*:0000003f __SREG__ - *ABS*:0000003e __SP_H__ - *ABS*:0000003d __SP_L__ - *ABS*:00000000 __tmp_reg__ - *ABS*:00000001 __zero_reg__ -/var/tmp//ccWNR2QI.s:46 .text:00000000 bufferInit -/var/tmp//ccWNR2QI.s:79 .text:00000014 bufferGetFromFront -/var/tmp//ccWNR2QI.s:152 .text:0000005c bufferDumpFromFront -/var/tmp//ccWNR2QI.s:216 .text:0000009e bufferGetAtIndex -/var/tmp//ccWNR2QI.s:253 .text:000000c0 bufferAddToEnd -/var/tmp//ccWNR2QI.s:314 .text:00000104 bufferIsNotFull -/var/tmp//ccWNR2QI.s:350 .text:00000120 bufferFlush -/var/tmp//ccWNR2QI.s:369 .text:00000128 Letext - -UNDEFINED SYMBOLS -__do_copy_data -__do_clear_bss -__udivmodhi4 diff --git a/targets/arduino/timer.lst b/targets/arduino/timer.lst deleted file mode 100755 index 4d8b76fd8..000000000 --- a/targets/arduino/timer.lst +++ /dev/null @@ -1,1709 +0,0 @@ - 1 .file "timer.c" - 2 .arch atmega8 - 3 __SREG__ = 0x3f - 4 __SP_H__ = 0x3e - 5 __SP_L__ = 0x3d - 6 __tmp_reg__ = 0 - 7 __zero_reg__ = 1 - 8 .global __do_copy_data - 9 .global __do_clear_bss - 12 .text - 13 .Ltext0: - 94 .global TimerRTCPrescaleFactor - 95 .section .progmem.data,"a",@progbits - 98 TimerRTCPrescaleFactor: - 99 0000 0000 .word 0 - 100 0002 0100 .word 1 - 101 0004 0800 .word 8 - 102 0006 2000 .word 32 - 103 0008 4000 .word 64 - 104 000a 8000 .word 128 - 105 000c 0001 .word 256 - 106 000e 0004 .word 1024 - 107 .global TimerPrescaleFactor - 110 TimerPrescaleFactor: - 111 0010 0000 .word 0 - 112 0012 0100 .word 1 - 113 0014 0800 .word 8 - 114 0016 4000 .word 64 - 115 0018 0001 .word 256 - 116 001a 0004 .word 1024 - 117 .text - 120 .global delay_us - 122 delay_us: - 1:../avrlib/timer.c **** /*! \file timer.c \brief System Timer function library. */ - 2:../avrlib/timer.c **** //***************************************************************************** - 3:../avrlib/timer.c **** // - 4:../avrlib/timer.c **** // File Name : 'timer.c' - 5:../avrlib/timer.c **** // Title : System Timer function library - 6:../avrlib/timer.c **** // Author : Pascal Stang - Copyright (C) 2000-2002 - 7:../avrlib/timer.c **** // Created : 11/22/2000 - 8:../avrlib/timer.c **** // Revised : 07/09/2003 - 9:../avrlib/timer.c **** // Version : 1.1 - 10:../avrlib/timer.c **** // Target MCU : Atmel AVR Series - 11:../avrlib/timer.c **** // Editor Tabs : 4 - 12:../avrlib/timer.c **** // - 13:../avrlib/timer.c **** // This code is distributed under the GNU Public License - 14:../avrlib/timer.c **** // which can be found at http://www.gnu.org/licenses/gpl.txt - 15:../avrlib/timer.c **** // - 16:../avrlib/timer.c **** //***************************************************************************** - 17:../avrlib/timer.c **** - 18:../avrlib/timer.c **** #ifndef WIN32 - 19:../avrlib/timer.c **** #include - 20:../avrlib/timer.c **** #include - 21:../avrlib/timer.c **** #include - 22:../avrlib/timer.c **** #include - 23:../avrlib/timer.c **** #include - 24:../avrlib/timer.c **** #endif - 25:../avrlib/timer.c **** - 26:../avrlib/timer.c **** #include "global.h" - 27:../avrlib/timer.c **** #include "timer.h" - 28:../avrlib/timer.c **** - 29:../avrlib/timer.c **** #include "rprintf.h" - 30:../avrlib/timer.c **** - 31:../avrlib/timer.c **** // Program ROM constants - 32:../avrlib/timer.c **** // the prescale division values stored in order of timer control register index - 33:../avrlib/timer.c **** // STOP, CLK, CLK/8, CLK/64, CLK/256, CLK/1024 - 34:../avrlib/timer.c **** unsigned short __attribute__ ((progmem)) TimerPrescaleFactor[] = {0,1,8,64,256,1024}; - 35:../avrlib/timer.c **** // the prescale division values stored in order of timer control register index - 36:../avrlib/timer.c **** // STOP, CLK, CLK/8, CLK/32, CLK/64, CLK/128, CLK/256, CLK/1024 - 37:../avrlib/timer.c **** unsigned short __attribute__ ((progmem)) TimerRTCPrescaleFactor[] = {0,1,8,32,64,128,256,1024}; - 38:../avrlib/timer.c **** - 39:../avrlib/timer.c **** // Global variables - 40:../avrlib/timer.c **** // time registers - 41:../avrlib/timer.c **** volatile unsigned long TimerPauseReg; - 42:../avrlib/timer.c **** volatile unsigned long Timer0Reg0; - 43:../avrlib/timer.c **** volatile unsigned long Timer2Reg0; - 44:../avrlib/timer.c **** - 45:../avrlib/timer.c **** typedef void (*voidFuncPtr)(void); - 46:../avrlib/timer.c **** volatile static voidFuncPtr TimerIntFunc[TIMER_NUM_INTERRUPTS]; - 47:../avrlib/timer.c **** - 48:../avrlib/timer.c **** // delay for a minimum of microseconds - 49:../avrlib/timer.c **** // the time resolution is dependent on the time the loop takes - 50:../avrlib/timer.c **** // e.g. with 4Mhz and 5 cycles per loop, the resolution is 1.25 us - 51:../avrlib/timer.c **** void delay_us(unsigned short time_us) - 52:../avrlib/timer.c **** { - 124 .LM1: - 125 /* prologue: frame size=0 */ - 126 /* prologue end (size=0) */ - 53:../avrlib/timer.c **** unsigned short delay_loops; - 54:../avrlib/timer.c **** register unsigned short i; - 55:../avrlib/timer.c **** - 56:../avrlib/timer.c **** delay_loops = (time_us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty) - 128 .LM2: - 129 0000 0396 adiw r24,3 - 130 0002 65E0 ldi r22,lo8(5) - 131 0004 70E0 ldi r23,hi8(5) - 132 0006 00D0 rcall __udivmodhi4 - 133 0008 CB01 movw r24,r22 - 134 000a AA27 clr r26 - 135 000c BB27 clr r27 - 136 000e 24E0 ldi r18,4 - 137 0010 880F 1: lsl r24 - 138 0012 991F rol r25 - 139 0014 AA1F rol r26 - 140 0016 BB1F rol r27 - 141 0018 2A95 dec r18 - 142 001a D1F7 brne 1b - 143 .L8: - 57:../avrlib/timer.c **** - 58:../avrlib/timer.c **** // one loop takes 5 cpu cycles - 59:../avrlib/timer.c **** for (i=0; i < delay_loops; i++) {}; - 145 .LM3: - 146 001c 0097 sbiw r24,0 - 147 001e 11F0 breq .L7 - 148 0020 0197 sbiw r24,1 - 149 0022 FCCF rjmp .L8 - 150 .L7: - 151 0024 0895 ret - 152 /* epilogue: frame size=0 */ - 153 /* epilogue: noreturn */ - 154 /* epilogue end (size=0) */ - 155 /* function delay_us size 19 (19) */ - 161 .Lscope0: - 165 .global timerDetach - 167 timerDetach: - 60:../avrlib/timer.c **** } - 61:../avrlib/timer.c **** /* - 62:../avrlib/timer.c **** void delay_ms(unsigned char time_ms) - 63:../avrlib/timer.c **** { - 64:../avrlib/timer.c **** unsigned short delay_count = F_CPU / 4000; - 65:../avrlib/timer.c **** - 66:../avrlib/timer.c **** unsigned short cnt; - 67:../avrlib/timer.c **** asm volatile ("\n" - 68:../avrlib/timer.c **** "L_dl1%=:\n\t" - 69:../avrlib/timer.c **** "mov %A0, %A2\n\t" - 70:../avrlib/timer.c **** "mov %B0, %B2\n" - 71:../avrlib/timer.c **** "L_dl2%=:\n\t" - 72:../avrlib/timer.c **** "sbiw %A0, 1\n\t" - 73:../avrlib/timer.c **** "brne L_dl2%=\n\t" - 74:../avrlib/timer.c **** "dec %1\n\t" "brne L_dl1%=\n\t":"=&w" (cnt) - 75:../avrlib/timer.c **** :"r"(time_ms), "r"((unsigned short) (delay_count)) - 76:../avrlib/timer.c **** ); - 77:../avrlib/timer.c **** } - 78:../avrlib/timer.c **** */ - 79:../avrlib/timer.c **** void timerInit(void) - 80:../avrlib/timer.c **** { - 81:../avrlib/timer.c **** u08 intNum; - 82:../avrlib/timer.c **** // detach all user functions from interrupts - 83:../avrlib/timer.c **** for(intNum=0; intNum number of milliseconds - 210:../avrlib/timer.c **** u08 timerThres; - 211:../avrlib/timer.c **** u32 ticRateHz; - 212:../avrlib/timer.c **** u32 pause; - 213:../avrlib/timer.c **** - 214:../avrlib/timer.c **** // capture current pause timer value - 215:../avrlib/timer.c **** timerThres = inb(TCNT0); - 216:../avrlib/timer.c **** // reset pause timer overflow count - 217:../avrlib/timer.c **** TimerPauseReg = 0; - 218:../avrlib/timer.c **** // calculate delay for [pause_ms] milliseconds - 219:../avrlib/timer.c **** // prescaler division = 1<<(pgm_read_byte(TimerPrescaleFactor+inb(TCCR0))) - 220:../avrlib/timer.c **** ticRateHz = F_CPU/timer0GetPrescaler(); - 221:../avrlib/timer.c **** // precision management - 222:../avrlib/timer.c **** // prevent overflow and precision underflow - 223:../avrlib/timer.c **** // -could add more conditions to improve accuracy - 224:../avrlib/timer.c **** if( ((ticRateHz < 429497) && (pause_ms <= 10000)) ) - 225:../avrlib/timer.c **** pause = (pause_ms*ticRateHz)/1000; - 226:../avrlib/timer.c **** else - 227:../avrlib/timer.c **** pause = pause_ms*(ticRateHz/1000); - 228:../avrlib/timer.c **** - 229:../avrlib/timer.c **** // loop until time expires - 230:../avrlib/timer.c **** while( ((TimerPauseReg<<8) | inb(TCNT0)) < (pause+timerThres) ) - 231:../avrlib/timer.c **** { - 232:../avrlib/timer.c **** if( TimerPauseReg < (pause>>8)); - 233:../avrlib/timer.c **** { - 234:../avrlib/timer.c **** // save power by idling the processor - 235:../avrlib/timer.c **** set_sleep_mode(SLEEP_MODE_IDLE); - 236:../avrlib/timer.c **** sleep_mode(); - 237:../avrlib/timer.c **** } - 238:../avrlib/timer.c **** } - 239:../avrlib/timer.c **** - 240:../avrlib/timer.c **** /* old inaccurate code, for reference - 241:../avrlib/timer.c **** - 242:../avrlib/timer.c **** // calculate delay for [pause_ms] milliseconds - 243:../avrlib/timer.c **** u16 prescaleDiv = 1<<(pgm_read_byte(TimerPrescaleFactor+inb(TCCR0))); - 244:../avrlib/timer.c **** u32 pause = (pause_ms*(F_CPU/(prescaleDiv*256)))/1000; - 245:../avrlib/timer.c **** - 246:../avrlib/timer.c **** TimerPauseReg = 0; - 247:../avrlib/timer.c **** while(TimerPauseReg < pause); - 248:../avrlib/timer.c **** - 249:../avrlib/timer.c **** */ - 250:../avrlib/timer.c **** } - 251:../avrlib/timer.c **** - 252:../avrlib/timer.c **** void timer0ClearOverflowCount(void) - 253:../avrlib/timer.c **** { - 222 .LM9: - 223 /* prologue: frame size=0 */ - 224 /* prologue end (size=0) */ - 254:../avrlib/timer.c **** // clear the timer overflow counter registers - 255:../avrlib/timer.c **** Timer0Reg0 = 0; // initialize time registers - 226 .LM10: - 227 0048 1092 0000 sts Timer0Reg0,__zero_reg__ - 228 004c 1092 0000 sts (Timer0Reg0)+1,__zero_reg__ - 229 0050 1092 0000 sts (Timer0Reg0)+2,__zero_reg__ - 230 0054 1092 0000 sts (Timer0Reg0)+3,__zero_reg__ - 231 /* epilogue: frame size=0 */ - 232 0058 0895 ret - 233 /* epilogue end (size=1) */ - 234 /* function timer0ClearOverflowCount size 9 (8) */ - 236 .Lscope3: - 239 .global timer0Init - 241 timer0Init: - 243 .LM11: - 244 /* prologue: frame size=0 */ - 245 /* prologue end (size=0) */ - 247 .LM12: - 248 005a 82E0 ldi r24,lo8(2) - 249 005c F0DF rcall timer0SetPrescaler - 251 .LM13: - 252 005e 12BE out 82-0x20,__zero_reg__ - 254 .LM14: - 255 0060 89B7 in r24,89-0x20 - 256 0062 8160 ori r24,lo8(1) - 257 0064 89BF out 89-0x20,r24 - 259 .LM15: - 260 0066 F0DF rcall timer0ClearOverflowCount - 261 /* epilogue: frame size=0 */ - 262 0068 0895 ret - 263 /* epilogue end (size=1) */ - 264 /* function timer0Init size 8 (7) */ - 266 .Lscope4: - 270 .global timer1SetPrescaler - 272 timer1SetPrescaler: - 274 .LM16: - 275 /* prologue: frame size=0 */ - 276 /* prologue end (size=0) */ - 278 .LM17: - 279 006a 9EB5 in r25,78-0x20 - 280 006c 987F andi r25,lo8(-8) - 281 006e 982B or r25,r24 - 282 0070 9EBD out 78-0x20,r25 - 283 /* epilogue: frame size=0 */ - 284 0072 0895 ret - 285 /* epilogue end (size=1) */ - 286 /* function timer1SetPrescaler size 5 (4) */ - 288 .Lscope5: - 291 .global timer1Init - 293 timer1Init: - 295 .LM18: - 296 /* prologue: frame size=0 */ - 297 /* prologue end (size=0) */ - 299 .LM19: - 300 0074 83E0 ldi r24,lo8(3) - 301 0076 F9DF rcall timer1SetPrescaler - 303 .LM20: - 304 0078 1DBC out 77-0x20,__zero_reg__ - 306 .LM21: - 307 007a 1CBC out 76-0x20,__zero_reg__ - 309 .LM22: - 310 007c 89B7 in r24,89-0x20 - 311 007e 8460 ori r24,lo8(4) - 312 0080 89BF out 89-0x20,r24 - 313 /* epilogue: frame size=0 */ - 314 0082 0895 ret - 315 /* epilogue end (size=1) */ - 316 /* function timer1Init size 8 (7) */ - 318 .Lscope6: - 322 .global timer2SetPrescaler - 324 timer2SetPrescaler: - 326 .LM23: - 327 /* prologue: frame size=0 */ - 328 /* prologue end (size=0) */ - 330 .LM24: - 331 0084 95B5 in r25,69-0x20 - 332 0086 987F andi r25,lo8(-8) - 333 0088 982B or r25,r24 - 334 008a 95BD out 69-0x20,r25 - 335 /* epilogue: frame size=0 */ - 336 008c 0895 ret - 337 /* epilogue end (size=1) */ - 338 /* function timer2SetPrescaler size 5 (4) */ - 340 .Lscope7: - 343 .global timer2ClearOverflowCount - 345 timer2ClearOverflowCount: - 256:../avrlib/timer.c **** } - 257:../avrlib/timer.c **** - 258:../avrlib/timer.c **** long timer0GetOverflowCount(void) - 259:../avrlib/timer.c **** { - 260:../avrlib/timer.c **** // return the current timer overflow count - 261:../avrlib/timer.c **** // (this is since the last timer0ClearOverflowCount() command was called) - 262:../avrlib/timer.c **** return Timer0Reg0; - 263:../avrlib/timer.c **** } - 264:../avrlib/timer.c **** - 265:../avrlib/timer.c **** #ifdef TCNT2 // support timer2 only if it exists - 266:../avrlib/timer.c **** void timer2ClearOverflowCount(void) - 267:../avrlib/timer.c **** { - 347 .LM25: - 348 /* prologue: frame size=0 */ - 349 /* prologue end (size=0) */ - 268:../avrlib/timer.c **** // clear the timer overflow counter registers - 269:../avrlib/timer.c **** Timer2Reg0 = 0; // initialize time registers - 351 .LM26: - 352 008e 1092 0000 sts Timer2Reg0,__zero_reg__ - 353 0092 1092 0000 sts (Timer2Reg0)+1,__zero_reg__ - 354 0096 1092 0000 sts (Timer2Reg0)+2,__zero_reg__ - 355 009a 1092 0000 sts (Timer2Reg0)+3,__zero_reg__ - 356 /* epilogue: frame size=0 */ - 357 009e 0895 ret - 358 /* epilogue end (size=1) */ - 359 /* function timer2ClearOverflowCount size 9 (8) */ - 361 .Lscope8: - 364 .global timer2Init - 366 timer2Init: - 368 .LM27: - 369 /* prologue: frame size=0 */ - 370 /* prologue end (size=0) */ - 372 .LM28: - 373 00a0 84E0 ldi r24,lo8(4) - 374 00a2 F0DF rcall timer2SetPrescaler - 376 .LM29: - 377 00a4 14BC out 68-0x20,__zero_reg__ - 379 .LM30: - 380 00a6 89B7 in r24,89-0x20 - 381 00a8 8064 ori r24,lo8(64) - 382 00aa 89BF out 89-0x20,r24 - 384 .LM31: - 385 00ac F0DF rcall timer2ClearOverflowCount - 386 /* epilogue: frame size=0 */ - 387 00ae 0895 ret - 388 /* epilogue end (size=1) */ - 389 /* function timer2Init size 8 (7) */ - 391 .Lscope9: - 394 .global timerInit - 396 timerInit: - 398 .LM32: - 399 /* prologue: frame size=0 */ - 400 00b0 CF93 push r28 - 401 /* prologue end (size=1) */ - 403 .LM33: - 404 00b2 C0E0 ldi r28,lo8(0) - 405 .L23: - 407 .LM34: - 408 00b4 8C2F mov r24,r28 - 409 00b6 B7DF rcall timerDetach - 411 .LM35: - 412 00b8 CF5F subi r28,lo8(-(1)) - 413 00ba C730 cpi r28,lo8(7) - 414 00bc D8F3 brlo .L23 - 416 .LM36: - 417 00be CDDF rcall timer0Init - 419 .LM37: - 420 00c0 D9DF rcall timer1Init - 422 .LM38: - 423 00c2 EEDF rcall timer2Init - 425 .LM39: - 426 /* #APP */ - 427 00c4 7894 sei - 428 /* #NOAPP */ - 429 /* epilogue: frame size=0 */ - 430 00c6 CF91 pop r28 - 431 00c8 0895 ret - 432 /* epilogue end (size=2) */ - 433 /* function timerInit size 14 (11) */ - 438 .Lscope10: - 441 .global timer0GetPrescaler - 443 timer0GetPrescaler: - 445 .LM40: - 446 /* prologue: frame size=0 */ - 447 /* prologue end (size=0) */ - 448 .LBB2: - 450 .LM41: - 451 00ca 83B7 in r24,83-0x20 - 452 00cc E82F mov r30,r24 - 453 00ce FF27 clr r31 - 454 00d0 E770 andi r30,lo8(7) - 455 00d2 F070 andi r31,hi8(7) - 456 00d4 EE0F add r30,r30 - 457 00d6 FF1F adc r31,r31 - 458 00d8 E050 subi r30,lo8(-(TimerPrescaleFactor)) - 459 00da F040 sbci r31,hi8(-(TimerPrescaleFactor)) - 460 .LBE2: - 462 .LM42: - 463 /* #APP */ - 464 00dc 8591 lpm r24, Z+ - 465 00de 9491 lpm r25, Z - 466 - 467 /* #NOAPP */ - 468 /* epilogue: frame size=0 */ - 469 00e0 0895 ret - 470 /* epilogue end (size=1) */ - 471 /* function timer0GetPrescaler size 16 (15) */ - 476 .Lscope11: - 479 .global timer1GetPrescaler - 481 timer1GetPrescaler: - 483 .LM43: - 484 /* prologue: frame size=0 */ - 485 /* prologue end (size=0) */ - 486 .LBB3: - 488 .LM44: - 489 00e2 8EB5 in r24,78-0x20 - 490 00e4 E82F mov r30,r24 - 491 00e6 FF27 clr r31 - 492 00e8 E770 andi r30,lo8(7) - 493 00ea F070 andi r31,hi8(7) - 494 00ec EE0F add r30,r30 - 495 00ee FF1F adc r31,r31 - 496 00f0 E050 subi r30,lo8(-(TimerPrescaleFactor)) - 497 00f2 F040 sbci r31,hi8(-(TimerPrescaleFactor)) - 498 .LBE3: - 500 .LM45: - 501 /* #APP */ - 502 00f4 8591 lpm r24, Z+ - 503 00f6 9491 lpm r25, Z - 504 - 505 /* #NOAPP */ - 506 /* epilogue: frame size=0 */ - 507 00f8 0895 ret - 508 /* epilogue end (size=1) */ - 509 /* function timer1GetPrescaler size 16 (15) */ - 514 .Lscope12: - 517 .global timer2GetPrescaler - 519 timer2GetPrescaler: - 521 .LM46: - 522 /* prologue: frame size=0 */ - 523 /* prologue end (size=0) */ - 524 .LBB4: - 526 .LM47: - 527 00fa 85B5 in r24,69-0x20 - 528 00fc E82F mov r30,r24 - 529 00fe FF27 clr r31 - 530 0100 E770 andi r30,lo8(7) - 531 0102 F070 andi r31,hi8(7) - 532 0104 EE0F add r30,r30 - 533 0106 FF1F adc r31,r31 - 534 0108 E050 subi r30,lo8(-(TimerRTCPrescaleFactor)) - 535 010a F040 sbci r31,hi8(-(TimerRTCPrescaleFactor)) - 536 .LBE4: - 538 .LM48: - 539 /* #APP */ - 540 010c 8591 lpm r24, Z+ - 541 010e 9491 lpm r25, Z - 542 - 543 /* #NOAPP */ - 544 /* epilogue: frame size=0 */ - 545 0110 0895 ret - 546 /* epilogue end (size=1) */ - 547 /* function timer2GetPrescaler size 16 (15) */ - 552 .Lscope13: - 557 .global timerAttach - 559 timerAttach: - 561 .LM49: - 562 /* prologue: frame size=0 */ - 563 /* prologue end (size=0) */ - 565 .LM50: - 566 0112 8730 cpi r24,lo8(7) - 567 0114 40F4 brsh .L29 - 569 .LM51: - 570 0116 E82F mov r30,r24 - 571 0118 FF27 clr r31 - 572 011a EE0F add r30,r30 - 573 011c FF1F adc r31,r31 - 574 011e E050 subi r30,lo8(-(TimerIntFunc)) - 575 0120 F040 sbci r31,hi8(-(TimerIntFunc)) - 576 0122 6083 st Z,r22 - 577 0124 7183 std Z+1,r23 - 578 .L29: - 579 0126 0895 ret - 580 /* epilogue: frame size=0 */ - 581 0128 0895 ret - 582 /* epilogue end (size=1) */ - 583 /* function timerAttach size 12 (11) */ - 585 .Lscope14: - 589 .global timerPause - 591 timerPause: - 593 .LM52: - 594 /* prologue: frame size=0 */ - 595 012a DF92 push r13 - 596 012c EF92 push r14 - 597 012e FF92 push r15 - 598 0130 0F93 push r16 - 599 0132 1F93 push r17 - 600 0134 CF93 push r28 - 601 0136 DF93 push r29 - 602 /* prologue end (size=7) */ - 603 0138 EC01 movw r28,r24 - 605 .LM53: - 606 013a D2B6 in r13,82-0x20 - 608 .LM54: - 609 013c 1092 0000 sts TimerPauseReg,__zero_reg__ - 610 0140 1092 0000 sts (TimerPauseReg)+1,__zero_reg__ - 611 0144 1092 0000 sts (TimerPauseReg)+2,__zero_reg__ - 612 0148 1092 0000 sts (TimerPauseReg)+3,__zero_reg__ - 614 .LM55: - 615 014c BEDF rcall timer0GetPrescaler - 616 014e 9C01 movw r18,r24 - 617 0150 4427 clr r20 - 618 0152 5527 clr r21 - 619 0154 60E0 ldi r22,lo8(16000000) - 620 0156 74E2 ldi r23,hi8(16000000) - 621 0158 84EF ldi r24,hlo8(16000000) - 622 015a 90E0 ldi r25,hhi8(16000000) - 623 015c 00D0 rcall __divmodsi4 - 625 .LM56: - 626 015e 293B cpi r18,lo8(429497) - 627 0160 8DE8 ldi r24,hi8(429497) - 628 0162 3807 cpc r19,r24 - 629 0164 86E0 ldi r24,hlo8(429497) - 630 0166 4807 cpc r20,r24 - 631 0168 80E0 ldi r24,hhi8(429497) - 632 016a 5807 cpc r21,r24 - 633 016c B0F4 brsh .L32 - 635 .LM57: - 636 016e 87E2 ldi r24,hi8(10001) - 637 0170 C131 cpi r28,lo8(10001) - 638 0172 D807 cpc r29,r24 - 639 0174 90F4 brsh .L32 - 641 .LM58: - 642 0176 CE01 movw r24,r28 - 643 0178 AA27 clr r26 - 644 017a BB27 clr r27 - 645 017c BC01 movw r22,r24 - 646 017e CD01 movw r24,r26 - 647 0180 00D0 rcall __mulsi3 - 648 0182 DC01 movw r26,r24 - 649 0184 CB01 movw r24,r22 - 650 0186 BC01 movw r22,r24 - 651 0188 CD01 movw r24,r26 - 652 018a 28EE ldi r18,lo8(1000) - 653 018c 33E0 ldi r19,hi8(1000) - 654 018e 40E0 ldi r20,hlo8(1000) - 655 0190 50E0 ldi r21,hhi8(1000) - 656 0192 00D0 rcall __udivmodsi4 - 657 0194 FA01 movw r30,r20 - 658 0196 E901 movw r28,r18 - 659 0198 0FC0 rjmp .L33 - 660 .L32: - 662 .LM59: - 663 019a 7E01 movw r14,r28 - 664 019c 0027 clr r16 - 665 019e 1127 clr r17 - 666 01a0 CA01 movw r24,r20 - 667 01a2 B901 movw r22,r18 - 668 01a4 28EE ldi r18,lo8(1000) - 669 01a6 33E0 ldi r19,hi8(1000) - 670 01a8 40E0 ldi r20,hlo8(1000) - 671 01aa 50E0 ldi r21,hhi8(1000) - 672 01ac 00D0 rcall __udivmodsi4 - 673 01ae C801 movw r24,r16 - 674 01b0 B701 movw r22,r14 - 675 01b2 00D0 rcall __mulsi3 - 676 01b4 FC01 movw r30,r24 - 677 01b6 EB01 movw r28,r22 - 678 .L33: - 680 .LM60: - 681 01b8 8091 0000 lds r24,TimerPauseReg - 682 01bc 9091 0000 lds r25,(TimerPauseReg)+1 - 683 01c0 A091 0000 lds r26,(TimerPauseReg)+2 - 684 01c4 B091 0000 lds r27,(TimerPauseReg)+3 - 685 01c8 2227 clr r18 - 686 01ca 382F mov r19,r24 - 687 01cc 492F mov r20,r25 - 688 01ce 5A2F mov r21,r26 - 689 01d0 82B7 in r24,82-0x20 - 690 01d2 9927 clr r25 - 691 01d4 AA27 clr r26 - 692 01d6 BB27 clr r27 - 693 01d8 282B or r18,r24 - 694 01da 392B or r19,r25 - 695 01dc 4A2B or r20,r26 - 696 01de 5B2B or r21,r27 - 697 01e0 CD0D add r28,r13 - 698 01e2 D11D adc r29,__zero_reg__ - 699 01e4 E11D adc r30,__zero_reg__ - 700 01e6 F11D adc r31,__zero_reg__ - 701 01e8 2C17 cp r18,r28 - 702 01ea 3D07 cpc r19,r29 - 703 01ec 4E07 cpc r20,r30 - 704 01ee 5F07 cpc r21,r31 - 705 01f0 58F5 brsh .L41 - 706 .L39: - 708 .LM61: - 709 01f2 8091 0000 lds r24,TimerPauseReg - 710 01f6 9091 0000 lds r25,(TimerPauseReg)+1 - 711 01fa A091 0000 lds r26,(TimerPauseReg)+2 - 712 01fe B091 0000 lds r27,(TimerPauseReg)+3 - 714 .LM62: - 715 0202 85B7 in r24,85-0x20 - 716 0204 8F78 andi r24,lo8(-113) - 717 0206 85BF out 85-0x20,r24 - 719 .LM63: - 720 0208 85B7 in r24,85-0x20 - 721 020a 8068 ori r24,lo8(-128) - 722 020c 85BF out 85-0x20,r24 - 723 /* #APP */ - 724 020e 8895 sleep - 725 - 726 /* #NOAPP */ - 727 0210 85B7 in r24,85-0x20 - 728 0212 8F77 andi r24,lo8(127) - 729 0214 85BF out 85-0x20,r24 - 730 0216 8091 0000 lds r24,TimerPauseReg - 731 021a 9091 0000 lds r25,(TimerPauseReg)+1 - 732 021e A091 0000 lds r26,(TimerPauseReg)+2 - 733 0222 B091 0000 lds r27,(TimerPauseReg)+3 - 734 0226 BA2F mov r27,r26 - 735 0228 A92F mov r26,r25 - 736 022a 982F mov r25,r24 - 737 022c 8827 clr r24 - 738 022e 22B7 in r18,82-0x20 - 739 0230 3327 clr r19 - 740 0232 4427 clr r20 - 741 0234 5527 clr r21 - 742 0236 822B or r24,r18 - 743 0238 932B or r25,r19 - 744 023a A42B or r26,r20 - 745 023c B52B or r27,r21 - 746 023e 8C17 cp r24,r28 - 747 0240 9D07 cpc r25,r29 - 748 0242 AE07 cpc r26,r30 - 749 0244 BF07 cpc r27,r31 - 750 0246 A8F2 brlo .L39 - 751 .L41: - 752 /* epilogue: frame size=0 */ - 753 0248 DF91 pop r29 - 754 024a CF91 pop r28 - 755 024c 1F91 pop r17 - 756 024e 0F91 pop r16 - 757 0250 FF90 pop r15 - 758 0252 EF90 pop r14 - 759 0254 DF90 pop r13 - 760 0256 0895 ret - 761 /* epilogue end (size=8) */ - 762 /* function timerPause size 154 (139) */ - 769 .Lscope15: - 772 .global timer0GetOverflowCount - 774 timer0GetOverflowCount: - 776 .LM64: - 777 /* prologue: frame size=0 */ - 778 /* prologue end (size=0) */ - 780 .LM65: - 781 0258 8091 0000 lds r24,Timer0Reg0 - 782 025c 9091 0000 lds r25,(Timer0Reg0)+1 - 783 0260 A091 0000 lds r26,(Timer0Reg0)+2 - 784 0264 B091 0000 lds r27,(Timer0Reg0)+3 - 786 .LM66: - 787 0268 BC01 movw r22,r24 - 788 026a CD01 movw r24,r26 - 789 /* epilogue: frame size=0 */ - 790 026c 0895 ret - 791 /* epilogue end (size=1) */ - 792 /* function timer0GetOverflowCount size 11 (10) */ - 794 .Lscope16: - 797 .global timer2GetOverflowCount - 799 timer2GetOverflowCount: - 270:../avrlib/timer.c **** } - 271:../avrlib/timer.c **** - 272:../avrlib/timer.c **** long timer2GetOverflowCount(void) - 273:../avrlib/timer.c **** { - 801 .LM67: - 802 /* prologue: frame size=0 */ - 803 /* prologue end (size=0) */ - 274:../avrlib/timer.c **** // return the current timer overflow count - 275:../avrlib/timer.c **** // (this is since the last timer2ClearOverflowCount() command was called) - 276:../avrlib/timer.c **** return Timer2Reg0; - 805 .LM68: - 806 026e 8091 0000 lds r24,Timer2Reg0 - 807 0272 9091 0000 lds r25,(Timer2Reg0)+1 - 808 0276 A091 0000 lds r26,(Timer2Reg0)+2 - 809 027a B091 0000 lds r27,(Timer2Reg0)+3 - 277:../avrlib/timer.c **** } - 811 .LM69: - 812 027e BC01 movw r22,r24 - 813 0280 CD01 movw r24,r26 - 814 /* epilogue: frame size=0 */ - 815 0282 0895 ret - 816 /* epilogue end (size=1) */ - 817 /* function timer2GetOverflowCount size 11 (10) */ - 819 .Lscope17: - 823 .global timer1PWMInit - 825 timer1PWMInit: - 278:../avrlib/timer.c **** #endif - 279:../avrlib/timer.c **** - 280:../avrlib/timer.c **** void timer1PWMInit(u08 bitRes) - 281:../avrlib/timer.c **** { - 827 .LM70: - 828 /* prologue: frame size=0 */ - 829 /* prologue end (size=0) */ - 282:../avrlib/timer.c **** // configures timer1 for use with PWM output - 283:../avrlib/timer.c **** // on OC1A and OC1B pins - 284:../avrlib/timer.c **** - 285:../avrlib/timer.c **** // enable timer1 as 8,9,10bit PWM - 286:../avrlib/timer.c **** if(bitRes == 9) - 831 .LM71: - 832 0284 8930 cpi r24,lo8(9) - 833 0286 31F4 brne .L45 - 287:../avrlib/timer.c **** { // 9bit mode - 288:../avrlib/timer.c **** sbi(TCCR1A,PWM11); - 835 .LM72: - 836 0288 8FB5 in r24,79-0x20 - 837 028a 8260 ori r24,lo8(2) - 838 028c 8FBD out 79-0x20,r24 - 289:../avrlib/timer.c **** cbi(TCCR1A,PWM10); - 840 .LM73: - 841 028e 8FB5 in r24,79-0x20 - 842 0290 8E7F andi r24,lo8(-2) - 843 0292 0AC0 rjmp .L50 - 844 .L45: - 290:../avrlib/timer.c **** } - 291:../avrlib/timer.c **** else if( bitRes == 10 ) - 846 .LM74: - 847 0294 8A30 cpi r24,lo8(10) - 848 0296 19F4 brne .L47 - 292:../avrlib/timer.c **** { // 10bit mode - 293:../avrlib/timer.c **** sbi(TCCR1A,PWM11); - 850 .LM75: - 851 0298 8FB5 in r24,79-0x20 - 852 029a 8260 ori r24,lo8(2) - 853 029c 02C0 rjmp .L49 - 854 .L47: - 294:../avrlib/timer.c **** sbi(TCCR1A,PWM10); - 295:../avrlib/timer.c **** } - 296:../avrlib/timer.c **** else - 297:../avrlib/timer.c **** { // default 8bit mode - 298:../avrlib/timer.c **** cbi(TCCR1A,PWM11); - 856 .LM76: - 857 029e 8FB5 in r24,79-0x20 - 858 02a0 8D7F andi r24,lo8(-3) - 859 .L49: - 860 02a2 8FBD out 79-0x20,r24 - 299:../avrlib/timer.c **** sbi(TCCR1A,PWM10); - 862 .LM77: - 863 02a4 8FB5 in r24,79-0x20 - 864 02a6 8160 ori r24,lo8(1) - 865 .L50: - 866 02a8 8FBD out 79-0x20,r24 - 300:../avrlib/timer.c **** } - 301:../avrlib/timer.c **** - 302:../avrlib/timer.c **** // clear output compare value A - 303:../avrlib/timer.c **** outb(OCR1AH, 0); - 868 .LM78: - 869 02aa 1BBC out 75-0x20,__zero_reg__ - 304:../avrlib/timer.c **** outb(OCR1AL, 0); - 871 .LM79: - 872 02ac 1ABC out 74-0x20,__zero_reg__ - 305:../avrlib/timer.c **** // clear output compare value B - 306:../avrlib/timer.c **** outb(OCR1BH, 0); - 874 .LM80: - 875 02ae 19BC out 73-0x20,__zero_reg__ - 307:../avrlib/timer.c **** outb(OCR1BL, 0); - 877 .LM81: - 878 02b0 18BC out 72-0x20,__zero_reg__ - 879 /* epilogue: frame size=0 */ - 880 02b2 0895 ret - 881 /* epilogue end (size=1) */ - 882 /* function timer1PWMInit size 24 (23) */ - 884 .Lscope18: - 888 .global timer1PWMInitICR - 890 timer1PWMInitICR: - 308:../avrlib/timer.c **** } - 309:../avrlib/timer.c **** - 310:../avrlib/timer.c **** #ifdef WGM10 - 311:../avrlib/timer.c **** // include support for arbitrary top-count PWM - 312:../avrlib/timer.c **** // on new AVR processors that support it - 313:../avrlib/timer.c **** void timer1PWMInitICR(u16 topcount) - 314:../avrlib/timer.c **** { - 892 .LM82: - 893 /* prologue: frame size=0 */ - 894 /* prologue end (size=0) */ - 895 02b4 9C01 movw r18,r24 - 315:../avrlib/timer.c **** // set PWM mode with ICR top-count - 316:../avrlib/timer.c **** cbi(TCCR1A,WGM10); - 897 .LM83: - 898 02b6 8FB5 in r24,79-0x20 - 899 02b8 8E7F andi r24,lo8(-2) - 900 02ba 8FBD out 79-0x20,r24 - 317:../avrlib/timer.c **** sbi(TCCR1A,WGM11); - 902 .LM84: - 903 02bc 8FB5 in r24,79-0x20 - 904 02be 8260 ori r24,lo8(2) - 905 02c0 8FBD out 79-0x20,r24 - 318:../avrlib/timer.c **** sbi(TCCR1B,WGM12); - 907 .LM85: - 908 02c2 8EB5 in r24,78-0x20 - 909 02c4 8860 ori r24,lo8(8) - 910 02c6 8EBD out 78-0x20,r24 - 319:../avrlib/timer.c **** sbi(TCCR1B,WGM13); - 912 .LM86: - 913 02c8 8EB5 in r24,78-0x20 - 914 02ca 8061 ori r24,lo8(16) - 915 02cc 8EBD out 78-0x20,r24 - 320:../avrlib/timer.c **** - 321:../avrlib/timer.c **** // set top count value - 322:../avrlib/timer.c **** ICR1 = topcount; - 917 .LM87: - 918 02ce 37BD out (70)+1-0x20,r19 - 919 02d0 26BD out 70-0x20,r18 - 323:../avrlib/timer.c **** - 324:../avrlib/timer.c **** // clear output compare value A - 325:../avrlib/timer.c **** OCR1A = 0; - 921 .LM88: - 922 02d2 1BBC out (74)+1-0x20,__zero_reg__ - 923 02d4 1ABC out 74-0x20,__zero_reg__ - 326:../avrlib/timer.c **** // clear output compare value B - 327:../avrlib/timer.c **** OCR1B = 0; - 925 .LM89: - 926 02d6 19BC out (72)+1-0x20,__zero_reg__ - 927 02d8 18BC out 72-0x20,__zero_reg__ - 928 /* epilogue: frame size=0 */ - 929 02da 0895 ret - 930 /* epilogue end (size=1) */ - 931 /* function timer1PWMInitICR size 20 (19) */ - 933 .Lscope19: - 936 .global timer1PWMAOff - 938 timer1PWMAOff: - 328:../avrlib/timer.c **** - 329:../avrlib/timer.c **** } - 330:../avrlib/timer.c **** #endif - 331:../avrlib/timer.c **** - 332:../avrlib/timer.c **** void timer1PWMOff(void) - 333:../avrlib/timer.c **** { - 334:../avrlib/timer.c **** // turn off timer1 PWM mode - 335:../avrlib/timer.c **** cbi(TCCR1A,PWM11); - 336:../avrlib/timer.c **** cbi(TCCR1A,PWM10); - 337:../avrlib/timer.c **** // set PWM1A/B (OutputCompare action) to none - 338:../avrlib/timer.c **** timer1PWMAOff(); - 339:../avrlib/timer.c **** timer1PWMBOff(); - 340:../avrlib/timer.c **** } - 341:../avrlib/timer.c **** - 342:../avrlib/timer.c **** void timer1PWMAOn(void) - 343:../avrlib/timer.c **** { - 344:../avrlib/timer.c **** // turn on channel A (OC1A) PWM output - 345:../avrlib/timer.c **** // set OC1A as non-inverted PWM - 346:../avrlib/timer.c **** sbi(TCCR1A,COM1A1); - 347:../avrlib/timer.c **** cbi(TCCR1A,COM1A0); - 348:../avrlib/timer.c **** } - 349:../avrlib/timer.c **** - 350:../avrlib/timer.c **** void timer1PWMBOn(void) - 351:../avrlib/timer.c **** { - 352:../avrlib/timer.c **** // turn on channel B (OC1B) PWM output - 353:../avrlib/timer.c **** // set OC1B as non-inverted PWM - 354:../avrlib/timer.c **** sbi(TCCR1A,COM1B1); - 355:../avrlib/timer.c **** cbi(TCCR1A,COM1B0); - 356:../avrlib/timer.c **** } - 357:../avrlib/timer.c **** - 358:../avrlib/timer.c **** void timer1PWMAOff(void) - 359:../avrlib/timer.c **** { - 940 .LM90: - 941 /* prologue: frame size=0 */ - 942 /* prologue end (size=0) */ - 360:../avrlib/timer.c **** // turn off channel A (OC1A) PWM output - 361:../avrlib/timer.c **** // set OC1A (OutputCompare action) to none - 362:../avrlib/timer.c **** cbi(TCCR1A,COM1A1); - 944 .LM91: - 945 02dc 8FB5 in r24,79-0x20 - 946 02de 8F77 andi r24,lo8(127) - 947 02e0 8FBD out 79-0x20,r24 - 363:../avrlib/timer.c **** cbi(TCCR1A,COM1A0); - 949 .LM92: - 950 02e2 8FB5 in r24,79-0x20 - 951 02e4 8F7B andi r24,lo8(-65) - 952 02e6 8FBD out 79-0x20,r24 - 953 /* epilogue: frame size=0 */ - 954 02e8 0895 ret - 955 /* epilogue end (size=1) */ - 956 /* function timer1PWMAOff size 7 (6) */ - 958 .Lscope20: - 961 .global timer1PWMBOff - 963 timer1PWMBOff: - 364:../avrlib/timer.c **** } - 365:../avrlib/timer.c **** - 366:../avrlib/timer.c **** void timer1PWMBOff(void) - 367:../avrlib/timer.c **** { - 965 .LM93: - 966 /* prologue: frame size=0 */ - 967 /* prologue end (size=0) */ - 368:../avrlib/timer.c **** // turn off channel B (OC1B) PWM output - 369:../avrlib/timer.c **** // set OC1B (OutputCompare action) to none - 370:../avrlib/timer.c **** cbi(TCCR1A,COM1B1); - 969 .LM94: - 970 02ea 8FB5 in r24,79-0x20 - 971 02ec 8F7D andi r24,lo8(-33) - 972 02ee 8FBD out 79-0x20,r24 - 371:../avrlib/timer.c **** cbi(TCCR1A,COM1B0); - 974 .LM95: - 975 02f0 8FB5 in r24,79-0x20 - 976 02f2 8F7E andi r24,lo8(-17) - 977 02f4 8FBD out 79-0x20,r24 - 978 /* epilogue: frame size=0 */ - 979 02f6 0895 ret - 980 /* epilogue end (size=1) */ - 981 /* function timer1PWMBOff size 7 (6) */ - 983 .Lscope21: - 986 .global timer1PWMOff - 988 timer1PWMOff: - 990 .LM96: - 991 /* prologue: frame size=0 */ - 992 /* prologue end (size=0) */ - 994 .LM97: - 995 02f8 8FB5 in r24,79-0x20 - 996 02fa 8D7F andi r24,lo8(-3) - 997 02fc 8FBD out 79-0x20,r24 - 999 .LM98: - 1000 02fe 8FB5 in r24,79-0x20 - 1001 0300 8E7F andi r24,lo8(-2) - 1002 0302 8FBD out 79-0x20,r24 - 1004 .LM99: - 1005 0304 EBDF rcall timer1PWMAOff - 1007 .LM100: - 1008 0306 F1DF rcall timer1PWMBOff - 1009 /* epilogue: frame size=0 */ - 1010 0308 0895 ret - 1011 /* epilogue end (size=1) */ - 1012 /* function timer1PWMOff size 9 (8) */ - 1014 .Lscope22: - 1017 .global timer1PWMAOn - 1019 timer1PWMAOn: - 1021 .LM101: - 1022 /* prologue: frame size=0 */ - 1023 /* prologue end (size=0) */ - 1025 .LM102: - 1026 030a 8FB5 in r24,79-0x20 - 1027 030c 8068 ori r24,lo8(-128) - 1028 030e 8FBD out 79-0x20,r24 - 1030 .LM103: - 1031 0310 8FB5 in r24,79-0x20 - 1032 0312 8F7B andi r24,lo8(-65) - 1033 0314 8FBD out 79-0x20,r24 - 1034 /* epilogue: frame size=0 */ - 1035 0316 0895 ret - 1036 /* epilogue end (size=1) */ - 1037 /* function timer1PWMAOn size 7 (6) */ - 1039 .Lscope23: - 1042 .global timer1PWMBOn - 1044 timer1PWMBOn: - 1046 .LM104: - 1047 /* prologue: frame size=0 */ - 1048 /* prologue end (size=0) */ - 1050 .LM105: - 1051 0318 8FB5 in r24,79-0x20 - 1052 031a 8062 ori r24,lo8(32) - 1053 031c 8FBD out 79-0x20,r24 - 1055 .LM106: - 1056 031e 8FB5 in r24,79-0x20 - 1057 0320 8F7E andi r24,lo8(-17) - 1058 0322 8FBD out 79-0x20,r24 - 1059 /* epilogue: frame size=0 */ - 1060 0324 0895 ret - 1061 /* epilogue end (size=1) */ - 1062 /* function timer1PWMBOn size 7 (6) */ - 1064 .Lscope24: - 1068 .global timer1PWMASet - 1070 timer1PWMASet: - 372:../avrlib/timer.c **** } - 373:../avrlib/timer.c **** - 374:../avrlib/timer.c **** void timer1PWMASet(u16 pwmDuty) - 375:../avrlib/timer.c **** { - 1072 .LM107: - 1073 /* prologue: frame size=0 */ - 1074 /* prologue end (size=0) */ - 376:../avrlib/timer.c **** // set PWM (output compare) duty for channel A - 377:../avrlib/timer.c **** // this PWM output is generated on OC1A pin - 378:../avrlib/timer.c **** // NOTE: pwmDuty should be in the range 0-255 for 8bit PWM - 379:../avrlib/timer.c **** // pwmDuty should be in the range 0-511 for 9bit PWM - 380:../avrlib/timer.c **** // pwmDuty should be in the range 0-1023 for 10bit PWM - 381:../avrlib/timer.c **** //outp( (pwmDuty>>8), OCR1AH); // set the high 8bits of OCR1A - 382:../avrlib/timer.c **** //outp( (pwmDuty&0x00FF), OCR1AL); // set the low 8bits of OCR1A - 383:../avrlib/timer.c **** OCR1A = pwmDuty; - 1076 .LM108: - 1077 0326 9BBD out (74)+1-0x20,r25 - 1078 0328 8ABD out 74-0x20,r24 - 1079 /* epilogue: frame size=0 */ - 1080 032a 0895 ret - 1081 /* epilogue end (size=1) */ - 1082 /* function timer1PWMASet size 3 (2) */ - 1084 .Lscope25: - 1088 .global timer1PWMBSet - 1090 timer1PWMBSet: - 384:../avrlib/timer.c **** } - 385:../avrlib/timer.c **** - 386:../avrlib/timer.c **** void timer1PWMBSet(u16 pwmDuty) - 387:../avrlib/timer.c **** { - 1092 .LM109: - 1093 /* prologue: frame size=0 */ - 1094 /* prologue end (size=0) */ - 388:../avrlib/timer.c **** // set PWM (output compare) duty for channel B - 389:../avrlib/timer.c **** // this PWM output is generated on OC1B pin - 390:../avrlib/timer.c **** // NOTE: pwmDuty should be in the range 0-255 for 8bit PWM - 391:../avrlib/timer.c **** // pwmDuty should be in the range 0-511 for 9bit PWM - 392:../avrlib/timer.c **** // pwmDuty should be in the range 0-1023 for 10bit PWM - 393:../avrlib/timer.c **** //outp( (pwmDuty>>8), OCR1BH); // set the high 8bits of OCR1B - 394:../avrlib/timer.c **** //outp( (pwmDuty&0x00FF), OCR1BL); // set the low 8bits of OCR1B - 395:../avrlib/timer.c **** OCR1B = pwmDuty; - 1096 .LM110: - 1097 032c 99BD out (72)+1-0x20,r25 - 1098 032e 88BD out 72-0x20,r24 - 1099 /* epilogue: frame size=0 */ - 1100 0330 0895 ret - 1101 /* epilogue end (size=1) */ - 1102 /* function timer1PWMBSet size 3 (2) */ - 1104 .Lscope26: - 1107 .global __vector_9 - 1109 __vector_9: - 396:../avrlib/timer.c **** } - 397:../avrlib/timer.c **** - 398:../avrlib/timer.c **** //! Interrupt handler for tcnt0 overflow interrupt - 399:../avrlib/timer.c **** TIMER_INTERRUPT_HANDLER(SIG_OVERFLOW0) - 400:../avrlib/timer.c **** { - 1111 .LM111: - 1112 /* prologue: frame size=0 */ - 1113 0332 1F92 push __zero_reg__ - 1114 0334 0F92 push __tmp_reg__ - 1115 0336 0FB6 in __tmp_reg__,__SREG__ - 1116 0338 0F92 push __tmp_reg__ - 1117 033a 1124 clr __zero_reg__ - 1118 033c 2F93 push r18 - 1119 033e 3F93 push r19 - 1120 0340 4F93 push r20 - 1121 0342 5F93 push r21 - 1122 0344 6F93 push r22 - 1123 0346 7F93 push r23 - 1124 0348 8F93 push r24 - 1125 034a 9F93 push r25 - 1126 034c AF93 push r26 - 1127 034e BF93 push r27 - 1128 0350 EF93 push r30 - 1129 0352 FF93 push r31 - 1130 /* prologue end (size=17) */ - 401:../avrlib/timer.c **** Timer0Reg0++; // increment low-order counter - 1132 .LM112: - 1133 0354 8091 0000 lds r24,Timer0Reg0 - 1134 0358 9091 0000 lds r25,(Timer0Reg0)+1 - 1135 035c A091 0000 lds r26,(Timer0Reg0)+2 - 1136 0360 B091 0000 lds r27,(Timer0Reg0)+3 - 1137 0364 0196 adiw r24,1 - 1138 0366 A11D adc r26,__zero_reg__ - 1139 0368 B11D adc r27,__zero_reg__ - 1140 036a 8093 0000 sts Timer0Reg0,r24 - 1141 036e 9093 0000 sts (Timer0Reg0)+1,r25 - 1142 0372 A093 0000 sts (Timer0Reg0)+2,r26 - 1143 0376 B093 0000 sts (Timer0Reg0)+3,r27 - 402:../avrlib/timer.c **** - 403:../avrlib/timer.c **** // increment pause counter - 404:../avrlib/timer.c **** TimerPauseReg++; - 1145 .LM113: - 1146 037a 8091 0000 lds r24,TimerPauseReg - 1147 037e 9091 0000 lds r25,(TimerPauseReg)+1 - 1148 0382 A091 0000 lds r26,(TimerPauseReg)+2 - 1149 0386 B091 0000 lds r27,(TimerPauseReg)+3 - 1150 038a 0196 adiw r24,1 - 1151 038c A11D adc r26,__zero_reg__ - 1152 038e B11D adc r27,__zero_reg__ - 1153 0390 8093 0000 sts TimerPauseReg,r24 - 1154 0394 9093 0000 sts (TimerPauseReg)+1,r25 - 1155 0398 A093 0000 sts (TimerPauseReg)+2,r26 - 1156 039c B093 0000 sts (TimerPauseReg)+3,r27 - 405:../avrlib/timer.c **** - 406:../avrlib/timer.c **** // if a user function is defined, execute it too - 407:../avrlib/timer.c **** if(TimerIntFunc[TIMER0OVERFLOW_INT]) - 1158 .LM114: - 1159 03a0 8091 0000 lds r24,TimerIntFunc - 1160 03a4 9091 0000 lds r25,(TimerIntFunc)+1 - 1161 03a8 892B or r24,r25 - 1162 03aa 29F0 breq .L59 - 408:../avrlib/timer.c **** TimerIntFunc[TIMER0OVERFLOW_INT](); - 1164 .LM115: - 1165 03ac E091 0000 lds r30,TimerIntFunc - 1166 03b0 F091 0000 lds r31,(TimerIntFunc)+1 - 1167 03b4 0995 icall - 1168 .L59: - 1169 /* epilogue: frame size=0 */ - 1170 03b6 FF91 pop r31 - 1171 03b8 EF91 pop r30 - 1172 03ba BF91 pop r27 - 1173 03bc AF91 pop r26 - 1174 03be 9F91 pop r25 - 1175 03c0 8F91 pop r24 - 1176 03c2 7F91 pop r23 - 1177 03c4 6F91 pop r22 - 1178 03c6 5F91 pop r21 - 1179 03c8 4F91 pop r20 - 1180 03ca 3F91 pop r19 - 1181 03cc 2F91 pop r18 - 1182 03ce 0F90 pop __tmp_reg__ - 1183 03d0 0FBE out __SREG__,__tmp_reg__ - 1184 03d2 0F90 pop __tmp_reg__ - 1185 03d4 1F90 pop __zero_reg__ - 1186 03d6 1895 reti - 1187 /* epilogue end (size=17) */ - 1188 /* function __vector_9 size 83 (49) */ - 1190 .Lscope27: - 1193 .global __vector_8 - 1195 __vector_8: - 409:../avrlib/timer.c **** } - 410:../avrlib/timer.c **** - 411:../avrlib/timer.c **** //! Interrupt handler for tcnt1 overflow interrupt - 412:../avrlib/timer.c **** TIMER_INTERRUPT_HANDLER(SIG_OVERFLOW1) - 413:../avrlib/timer.c **** { - 1197 .LM116: - 1198 /* prologue: frame size=0 */ - 1199 03d8 1F92 push __zero_reg__ - 1200 03da 0F92 push __tmp_reg__ - 1201 03dc 0FB6 in __tmp_reg__,__SREG__ - 1202 03de 0F92 push __tmp_reg__ - 1203 03e0 1124 clr __zero_reg__ - 1204 03e2 2F93 push r18 - 1205 03e4 3F93 push r19 - 1206 03e6 4F93 push r20 - 1207 03e8 5F93 push r21 - 1208 03ea 6F93 push r22 - 1209 03ec 7F93 push r23 - 1210 03ee 8F93 push r24 - 1211 03f0 9F93 push r25 - 1212 03f2 AF93 push r26 - 1213 03f4 BF93 push r27 - 1214 03f6 EF93 push r30 - 1215 03f8 FF93 push r31 - 1216 /* prologue end (size=17) */ - 414:../avrlib/timer.c **** // if a user function is defined, execute it - 415:../avrlib/timer.c **** if(TimerIntFunc[TIMER1OVERFLOW_INT]) - 1218 .LM117: - 1219 03fa 8091 0000 lds r24,TimerIntFunc+2 - 1220 03fe 9091 0000 lds r25,(TimerIntFunc+2)+1 - 1221 0402 892B or r24,r25 - 1222 0404 29F0 breq .L61 - 416:../avrlib/timer.c **** TimerIntFunc[TIMER1OVERFLOW_INT](); - 1224 .LM118: - 1225 0406 E091 0000 lds r30,TimerIntFunc+2 - 1226 040a F091 0000 lds r31,(TimerIntFunc+2)+1 - 1227 040e 0995 icall - 1228 .L61: - 1229 /* epilogue: frame size=0 */ - 1230 0410 FF91 pop r31 - 1231 0412 EF91 pop r30 - 1232 0414 BF91 pop r27 - 1233 0416 AF91 pop r26 - 1234 0418 9F91 pop r25 - 1235 041a 8F91 pop r24 - 1236 041c 7F91 pop r23 - 1237 041e 6F91 pop r22 - 1238 0420 5F91 pop r21 - 1239 0422 4F91 pop r20 - 1240 0424 3F91 pop r19 - 1241 0426 2F91 pop r18 - 1242 0428 0F90 pop __tmp_reg__ - 1243 042a 0FBE out __SREG__,__tmp_reg__ - 1244 042c 0F90 pop __tmp_reg__ - 1245 042e 1F90 pop __zero_reg__ - 1246 0430 1895 reti - 1247 /* epilogue end (size=17) */ - 1248 /* function __vector_8 size 45 (11) */ - 1250 .Lscope28: - 1253 .global __vector_4 - 1255 __vector_4: - 417:../avrlib/timer.c **** } - 418:../avrlib/timer.c **** - 419:../avrlib/timer.c **** #ifdef TCNT2 // support timer2 only if it exists - 420:../avrlib/timer.c **** //! Interrupt handler for tcnt2 overflow interrupt - 421:../avrlib/timer.c **** TIMER_INTERRUPT_HANDLER(SIG_OVERFLOW2) - 422:../avrlib/timer.c **** { - 1257 .LM119: - 1258 /* prologue: frame size=0 */ - 1259 0432 1F92 push __zero_reg__ - 1260 0434 0F92 push __tmp_reg__ - 1261 0436 0FB6 in __tmp_reg__,__SREG__ - 1262 0438 0F92 push __tmp_reg__ - 1263 043a 1124 clr __zero_reg__ - 1264 043c 2F93 push r18 - 1265 043e 3F93 push r19 - 1266 0440 4F93 push r20 - 1267 0442 5F93 push r21 - 1268 0444 6F93 push r22 - 1269 0446 7F93 push r23 - 1270 0448 8F93 push r24 - 1271 044a 9F93 push r25 - 1272 044c AF93 push r26 - 1273 044e BF93 push r27 - 1274 0450 EF93 push r30 - 1275 0452 FF93 push r31 - 1276 /* prologue end (size=17) */ - 423:../avrlib/timer.c **** Timer2Reg0++; // increment low-order counter - 1278 .LM120: - 1279 0454 8091 0000 lds r24,Timer2Reg0 - 1280 0458 9091 0000 lds r25,(Timer2Reg0)+1 - 1281 045c A091 0000 lds r26,(Timer2Reg0)+2 - 1282 0460 B091 0000 lds r27,(Timer2Reg0)+3 - 1283 0464 0196 adiw r24,1 - 1284 0466 A11D adc r26,__zero_reg__ - 1285 0468 B11D adc r27,__zero_reg__ - 1286 046a 8093 0000 sts Timer2Reg0,r24 - 1287 046e 9093 0000 sts (Timer2Reg0)+1,r25 - 1288 0472 A093 0000 sts (Timer2Reg0)+2,r26 - 1289 0476 B093 0000 sts (Timer2Reg0)+3,r27 - 424:../avrlib/timer.c **** - 425:../avrlib/timer.c **** // if a user function is defined, execute it - 426:../avrlib/timer.c **** if(TimerIntFunc[TIMER2OVERFLOW_INT]) - 1291 .LM121: - 1292 047a 8091 0000 lds r24,TimerIntFunc+10 - 1293 047e 9091 0000 lds r25,(TimerIntFunc+10)+1 - 1294 0482 892B or r24,r25 - 1295 0484 29F0 breq .L63 - 427:../avrlib/timer.c **** TimerIntFunc[TIMER2OVERFLOW_INT](); - 1297 .LM122: - 1298 0486 E091 0000 lds r30,TimerIntFunc+10 - 1299 048a F091 0000 lds r31,(TimerIntFunc+10)+1 - 1300 048e 0995 icall - 1301 .L63: - 1302 /* epilogue: frame size=0 */ - 1303 0490 FF91 pop r31 - 1304 0492 EF91 pop r30 - 1305 0494 BF91 pop r27 - 1306 0496 AF91 pop r26 - 1307 0498 9F91 pop r25 - 1308 049a 8F91 pop r24 - 1309 049c 7F91 pop r23 - 1310 049e 6F91 pop r22 - 1311 04a0 5F91 pop r21 - 1312 04a2 4F91 pop r20 - 1313 04a4 3F91 pop r19 - 1314 04a6 2F91 pop r18 - 1315 04a8 0F90 pop __tmp_reg__ - 1316 04aa 0FBE out __SREG__,__tmp_reg__ - 1317 04ac 0F90 pop __tmp_reg__ - 1318 04ae 1F90 pop __zero_reg__ - 1319 04b0 1895 reti - 1320 /* epilogue end (size=17) */ - 1321 /* function __vector_4 size 64 (30) */ - 1323 .Lscope29: - 1326 .global __vector_6 - 1328 __vector_6: - 428:../avrlib/timer.c **** } - 429:../avrlib/timer.c **** #endif - 430:../avrlib/timer.c **** - 431:../avrlib/timer.c **** #ifdef OCR0 - 432:../avrlib/timer.c **** // include support for Output Compare 0 for new AVR processors that support it - 433:../avrlib/timer.c **** //! Interrupt handler for OutputCompare0 match (OC0) interrupt - 434:../avrlib/timer.c **** TIMER_INTERRUPT_HANDLER(SIG_OUTPUT_COMPARE0) - 435:../avrlib/timer.c **** { - 436:../avrlib/timer.c **** // if a user function is defined, execute it - 437:../avrlib/timer.c **** if(TimerIntFunc[TIMER0OUTCOMPARE_INT]) - 438:../avrlib/timer.c **** TimerIntFunc[TIMER0OUTCOMPARE_INT](); - 439:../avrlib/timer.c **** } - 440:../avrlib/timer.c **** #endif - 441:../avrlib/timer.c **** - 442:../avrlib/timer.c **** //! Interrupt handler for CutputCompare1A match (OC1A) interrupt - 443:../avrlib/timer.c **** TIMER_INTERRUPT_HANDLER(SIG_OUTPUT_COMPARE1A) - 444:../avrlib/timer.c **** { - 1330 .LM123: - 1331 /* prologue: frame size=0 */ - 1332 04b2 1F92 push __zero_reg__ - 1333 04b4 0F92 push __tmp_reg__ - 1334 04b6 0FB6 in __tmp_reg__,__SREG__ - 1335 04b8 0F92 push __tmp_reg__ - 1336 04ba 1124 clr __zero_reg__ - 1337 04bc 2F93 push r18 - 1338 04be 3F93 push r19 - 1339 04c0 4F93 push r20 - 1340 04c2 5F93 push r21 - 1341 04c4 6F93 push r22 - 1342 04c6 7F93 push r23 - 1343 04c8 8F93 push r24 - 1344 04ca 9F93 push r25 - 1345 04cc AF93 push r26 - 1346 04ce BF93 push r27 - 1347 04d0 EF93 push r30 - 1348 04d2 FF93 push r31 - 1349 /* prologue end (size=17) */ - 445:../avrlib/timer.c **** // if a user function is defined, execute it - 446:../avrlib/timer.c **** if(TimerIntFunc[TIMER1OUTCOMPAREA_INT]) - 1351 .LM124: - 1352 04d4 8091 0000 lds r24,TimerIntFunc+4 - 1353 04d8 9091 0000 lds r25,(TimerIntFunc+4)+1 - 1354 04dc 892B or r24,r25 - 1355 04de 29F0 breq .L65 - 447:../avrlib/timer.c **** TimerIntFunc[TIMER1OUTCOMPAREA_INT](); - 1357 .LM125: - 1358 04e0 E091 0000 lds r30,TimerIntFunc+4 - 1359 04e4 F091 0000 lds r31,(TimerIntFunc+4)+1 - 1360 04e8 0995 icall - 1361 .L65: - 1362 /* epilogue: frame size=0 */ - 1363 04ea FF91 pop r31 - 1364 04ec EF91 pop r30 - 1365 04ee BF91 pop r27 - 1366 04f0 AF91 pop r26 - 1367 04f2 9F91 pop r25 - 1368 04f4 8F91 pop r24 - 1369 04f6 7F91 pop r23 - 1370 04f8 6F91 pop r22 - 1371 04fa 5F91 pop r21 - 1372 04fc 4F91 pop r20 - 1373 04fe 3F91 pop r19 - 1374 0500 2F91 pop r18 - 1375 0502 0F90 pop __tmp_reg__ - 1376 0504 0FBE out __SREG__,__tmp_reg__ - 1377 0506 0F90 pop __tmp_reg__ - 1378 0508 1F90 pop __zero_reg__ - 1379 050a 1895 reti - 1380 /* epilogue end (size=17) */ - 1381 /* function __vector_6 size 45 (11) */ - 1383 .Lscope30: - 1386 .global __vector_7 - 1388 __vector_7: - 448:../avrlib/timer.c **** } - 449:../avrlib/timer.c **** - 450:../avrlib/timer.c **** //! Interrupt handler for OutputCompare1B match (OC1B) interrupt - 451:../avrlib/timer.c **** TIMER_INTERRUPT_HANDLER(SIG_OUTPUT_COMPARE1B) - 452:../avrlib/timer.c **** { - 1390 .LM126: - 1391 /* prologue: frame size=0 */ - 1392 050c 1F92 push __zero_reg__ - 1393 050e 0F92 push __tmp_reg__ - 1394 0510 0FB6 in __tmp_reg__,__SREG__ - 1395 0512 0F92 push __tmp_reg__ - 1396 0514 1124 clr __zero_reg__ - 1397 0516 2F93 push r18 - 1398 0518 3F93 push r19 - 1399 051a 4F93 push r20 - 1400 051c 5F93 push r21 - 1401 051e 6F93 push r22 - 1402 0520 7F93 push r23 - 1403 0522 8F93 push r24 - 1404 0524 9F93 push r25 - 1405 0526 AF93 push r26 - 1406 0528 BF93 push r27 - 1407 052a EF93 push r30 - 1408 052c FF93 push r31 - 1409 /* prologue end (size=17) */ - 453:../avrlib/timer.c **** // if a user function is defined, execute it - 454:../avrlib/timer.c **** if(TimerIntFunc[TIMER1OUTCOMPAREB_INT]) - 1411 .LM127: - 1412 052e 8091 0000 lds r24,TimerIntFunc+6 - 1413 0532 9091 0000 lds r25,(TimerIntFunc+6)+1 - 1414 0536 892B or r24,r25 - 1415 0538 29F0 breq .L67 - 455:../avrlib/timer.c **** TimerIntFunc[TIMER1OUTCOMPAREB_INT](); - 1417 .LM128: - 1418 053a E091 0000 lds r30,TimerIntFunc+6 - 1419 053e F091 0000 lds r31,(TimerIntFunc+6)+1 - 1420 0542 0995 icall - 1421 .L67: - 1422 /* epilogue: frame size=0 */ - 1423 0544 FF91 pop r31 - 1424 0546 EF91 pop r30 - 1425 0548 BF91 pop r27 - 1426 054a AF91 pop r26 - 1427 054c 9F91 pop r25 - 1428 054e 8F91 pop r24 - 1429 0550 7F91 pop r23 - 1430 0552 6F91 pop r22 - 1431 0554 5F91 pop r21 - 1432 0556 4F91 pop r20 - 1433 0558 3F91 pop r19 - 1434 055a 2F91 pop r18 - 1435 055c 0F90 pop __tmp_reg__ - 1436 055e 0FBE out __SREG__,__tmp_reg__ - 1437 0560 0F90 pop __tmp_reg__ - 1438 0562 1F90 pop __zero_reg__ - 1439 0564 1895 reti - 1440 /* epilogue end (size=17) */ - 1441 /* function __vector_7 size 45 (11) */ - 1443 .Lscope31: - 1446 .global __vector_5 - 1448 __vector_5: - 456:../avrlib/timer.c **** } - 457:../avrlib/timer.c **** - 458:../avrlib/timer.c **** //! Interrupt handler for InputCapture1 (IC1) interrupt - 459:../avrlib/timer.c **** TIMER_INTERRUPT_HANDLER(SIG_INPUT_CAPTURE1) - 460:../avrlib/timer.c **** { - 1450 .LM129: - 1451 /* prologue: frame size=0 */ - 1452 0566 1F92 push __zero_reg__ - 1453 0568 0F92 push __tmp_reg__ - 1454 056a 0FB6 in __tmp_reg__,__SREG__ - 1455 056c 0F92 push __tmp_reg__ - 1456 056e 1124 clr __zero_reg__ - 1457 0570 2F93 push r18 - 1458 0572 3F93 push r19 - 1459 0574 4F93 push r20 - 1460 0576 5F93 push r21 - 1461 0578 6F93 push r22 - 1462 057a 7F93 push r23 - 1463 057c 8F93 push r24 - 1464 057e 9F93 push r25 - 1465 0580 AF93 push r26 - 1466 0582 BF93 push r27 - 1467 0584 EF93 push r30 - 1468 0586 FF93 push r31 - 1469 /* prologue end (size=17) */ - 461:../avrlib/timer.c **** // if a user function is defined, execute it - 462:../avrlib/timer.c **** if(TimerIntFunc[TIMER1INPUTCAPTURE_INT]) - 1471 .LM130: - 1472 0588 8091 0000 lds r24,TimerIntFunc+8 - 1473 058c 9091 0000 lds r25,(TimerIntFunc+8)+1 - 1474 0590 892B or r24,r25 - 1475 0592 29F0 breq .L69 - 463:../avrlib/timer.c **** TimerIntFunc[TIMER1INPUTCAPTURE_INT](); - 1477 .LM131: - 1478 0594 E091 0000 lds r30,TimerIntFunc+8 - 1479 0598 F091 0000 lds r31,(TimerIntFunc+8)+1 - 1480 059c 0995 icall - 1481 .L69: - 1482 /* epilogue: frame size=0 */ - 1483 059e FF91 pop r31 - 1484 05a0 EF91 pop r30 - 1485 05a2 BF91 pop r27 - 1486 05a4 AF91 pop r26 - 1487 05a6 9F91 pop r25 - 1488 05a8 8F91 pop r24 - 1489 05aa 7F91 pop r23 - 1490 05ac 6F91 pop r22 - 1491 05ae 5F91 pop r21 - 1492 05b0 4F91 pop r20 - 1493 05b2 3F91 pop r19 - 1494 05b4 2F91 pop r18 - 1495 05b6 0F90 pop __tmp_reg__ - 1496 05b8 0FBE out __SREG__,__tmp_reg__ - 1497 05ba 0F90 pop __tmp_reg__ - 1498 05bc 1F90 pop __zero_reg__ - 1499 05be 1895 reti - 1500 /* epilogue end (size=17) */ - 1501 /* function __vector_5 size 45 (11) */ - 1503 .Lscope32: - 1506 .global __vector_3 - 1508 __vector_3: - 464:../avrlib/timer.c **** } - 465:../avrlib/timer.c **** - 466:../avrlib/timer.c **** //! Interrupt handler for OutputCompare2 match (OC2) interrupt - 467:../avrlib/timer.c **** TIMER_INTERRUPT_HANDLER(SIG_OUTPUT_COMPARE2) - 468:../avrlib/timer.c **** { - 1510 .LM132: - 1511 /* prologue: frame size=0 */ - 1512 05c0 1F92 push __zero_reg__ - 1513 05c2 0F92 push __tmp_reg__ - 1514 05c4 0FB6 in __tmp_reg__,__SREG__ - 1515 05c6 0F92 push __tmp_reg__ - 1516 05c8 1124 clr __zero_reg__ - 1517 05ca 2F93 push r18 - 1518 05cc 3F93 push r19 - 1519 05ce 4F93 push r20 - 1520 05d0 5F93 push r21 - 1521 05d2 6F93 push r22 - 1522 05d4 7F93 push r23 - 1523 05d6 8F93 push r24 - 1524 05d8 9F93 push r25 - 1525 05da AF93 push r26 - 1526 05dc BF93 push r27 - 1527 05de EF93 push r30 - 1528 05e0 FF93 push r31 - 1529 /* prologue end (size=17) */ - 469:../avrlib/timer.c **** // if a user function is defined, execute it - 470:../avrlib/timer.c **** if(TimerIntFunc[TIMER2OUTCOMPARE_INT]) - 1531 .LM133: - 1532 05e2 8091 0000 lds r24,TimerIntFunc+12 - 1533 05e6 9091 0000 lds r25,(TimerIntFunc+12)+1 - 1534 05ea 892B or r24,r25 - 1535 05ec 29F0 breq .L71 - 471:../avrlib/timer.c **** TimerIntFunc[TIMER2OUTCOMPARE_INT](); - 1537 .LM134: - 1538 05ee E091 0000 lds r30,TimerIntFunc+12 - 1539 05f2 F091 0000 lds r31,(TimerIntFunc+12)+1 - 1540 05f6 0995 icall - 1541 .L71: - 1542 /* epilogue: frame size=0 */ - 1543 05f8 FF91 pop r31 - 1544 05fa EF91 pop r30 - 1545 05fc BF91 pop r27 - 1546 05fe AF91 pop r26 - 1547 0600 9F91 pop r25 - 1548 0602 8F91 pop r24 - 1549 0604 7F91 pop r23 - 1550 0606 6F91 pop r22 - 1551 0608 5F91 pop r21 - 1552 060a 4F91 pop r20 - 1553 060c 3F91 pop r19 - 1554 060e 2F91 pop r18 - 1555 0610 0F90 pop __tmp_reg__ - 1556 0612 0FBE out __SREG__,__tmp_reg__ - 1557 0614 0F90 pop __tmp_reg__ - 1558 0616 1F90 pop __zero_reg__ - 1559 0618 1895 reti - 1560 /* epilogue end (size=17) */ - 1561 /* function __vector_3 size 45 (11) */ - 1563 .Lscope33: - 1565 .comm TimerPauseReg,4,1 - 1566 .comm Timer0Reg0,4,1 - 1567 .comm Timer2Reg0,4,1 - 1568 .lcomm TimerIntFunc,14 - 1575 .text - 1577 Letext: - 1578 /* File "../avrlib/timer.c": code 797 = 0x031d ( 517), prologues 127, epilogues 153 */ -DEFINED SYMBOLS - *ABS*:00000000 timer.c - *ABS*:0000003f __SREG__ - *ABS*:0000003e __SP_H__ - *ABS*:0000003d __SP_L__ - *ABS*:00000000 __tmp_reg__ - *ABS*:00000001 __zero_reg__ -/var/tmp//cca6lG7e.s:98 .progmem.data:00000000 TimerRTCPrescaleFactor -/var/tmp//cca6lG7e.s:110 .progmem.data:00000010 TimerPrescaleFactor -/var/tmp//cca6lG7e.s:122 .text:00000000 delay_us -/var/tmp//cca6lG7e.s:167 .text:00000026 timerDetach - .bss:00000000 TimerIntFunc -/var/tmp//cca6lG7e.s:199 .text:0000003e timer0SetPrescaler -/var/tmp//cca6lG7e.s:220 .text:00000048 timer0ClearOverflowCount - *COM*:00000004 Timer0Reg0 -/var/tmp//cca6lG7e.s:241 .text:0000005a timer0Init -/var/tmp//cca6lG7e.s:272 .text:0000006a timer1SetPrescaler -/var/tmp//cca6lG7e.s:293 .text:00000074 timer1Init -/var/tmp//cca6lG7e.s:324 .text:00000084 timer2SetPrescaler -/var/tmp//cca6lG7e.s:345 .text:0000008e timer2ClearOverflowCount - *COM*:00000004 Timer2Reg0 -/var/tmp//cca6lG7e.s:366 .text:000000a0 timer2Init -/var/tmp//cca6lG7e.s:396 .text:000000b0 timerInit -/var/tmp//cca6lG7e.s:443 .text:000000ca timer0GetPrescaler -/var/tmp//cca6lG7e.s:481 .text:000000e2 timer1GetPrescaler -/var/tmp//cca6lG7e.s:519 .text:000000fa timer2GetPrescaler -/var/tmp//cca6lG7e.s:559 .text:00000112 timerAttach -/var/tmp//cca6lG7e.s:591 .text:0000012a timerPause - *COM*:00000004 TimerPauseReg -/var/tmp//cca6lG7e.s:774 .text:00000258 timer0GetOverflowCount -/var/tmp//cca6lG7e.s:799 .text:0000026e timer2GetOverflowCount -/var/tmp//cca6lG7e.s:825 .text:00000284 timer1PWMInit -/var/tmp//cca6lG7e.s:890 .text:000002b4 timer1PWMInitICR -/var/tmp//cca6lG7e.s:938 .text:000002dc timer1PWMAOff -/var/tmp//cca6lG7e.s:963 .text:000002ea timer1PWMBOff -/var/tmp//cca6lG7e.s:988 .text:000002f8 timer1PWMOff -/var/tmp//cca6lG7e.s:1019 .text:0000030a timer1PWMAOn -/var/tmp//cca6lG7e.s:1044 .text:00000318 timer1PWMBOn -/var/tmp//cca6lG7e.s:1070 .text:00000326 timer1PWMASet -/var/tmp//cca6lG7e.s:1090 .text:0000032c timer1PWMBSet -/var/tmp//cca6lG7e.s:1109 .text:00000332 __vector_9 -/var/tmp//cca6lG7e.s:1195 .text:000003d8 __vector_8 -/var/tmp//cca6lG7e.s:1255 .text:00000432 __vector_4 -/var/tmp//cca6lG7e.s:1328 .text:000004b2 __vector_6 -/var/tmp//cca6lG7e.s:1388 .text:0000050c __vector_7 -/var/tmp//cca6lG7e.s:1448 .text:00000566 __vector_5 -/var/tmp//cca6lG7e.s:1508 .text:000005c0 __vector_3 -/var/tmp//cca6lG7e.s:1577 .text:0000061a Letext - -UNDEFINED SYMBOLS -__do_copy_data -__do_clear_bss -__udivmodhi4 -__divmodsi4 -__mulsi3 -__udivmodsi4 diff --git a/targets/arduino/uart.lst b/targets/arduino/uart.lst deleted file mode 100755 index cde40dc78..000000000 --- a/targets/arduino/uart.lst +++ /dev/null @@ -1,789 +0,0 @@ - 1 .file "uart.c" - 2 .arch atmega8 - 3 __SREG__ = 0x3f - 4 __SP_H__ = 0x3e - 5 __SP_L__ = 0x3d - 6 __tmp_reg__ = 0 - 7 __zero_reg__ = 1 - 8 .global __do_copy_data - 9 .global __do_clear_bss - 12 .text - 13 .Ltext0: - 86 .global uartSetBaudRate - 88 uartSetBaudRate: - 1:../avrlib/uart.c **** /*! \file uart.c \brief UART driver with buffer support. */ - 2:../avrlib/uart.c **** // ***************************************************************************** - 3:../avrlib/uart.c **** // - 4:../avrlib/uart.c **** // File Name : 'uart.c' - 5:../avrlib/uart.c **** // Title : UART driver with buffer support - 6:../avrlib/uart.c **** // Author : Pascal Stang - Copyright (C) 2000-2002 - 7:../avrlib/uart.c **** // Created : 11/22/2000 - 8:../avrlib/uart.c **** // Revised : 06/09/2003 - 9:../avrlib/uart.c **** // Version : 1.3 - 10:../avrlib/uart.c **** // Target MCU : ATMEL AVR Series - 11:../avrlib/uart.c **** // Editor Tabs : 4 - 12:../avrlib/uart.c **** // - 13:../avrlib/uart.c **** // This code is distributed under the GNU Public License - 14:../avrlib/uart.c **** // which can be found at http://www.gnu.org/licenses/gpl.txt - 15:../avrlib/uart.c **** // - 16:../avrlib/uart.c **** // ***************************************************************************** - 17:../avrlib/uart.c **** - 18:../avrlib/uart.c **** #include - 19:../avrlib/uart.c **** #include - 20:../avrlib/uart.c **** #include - 21:../avrlib/uart.c **** - 22:../avrlib/uart.c **** #include "buffer.h" - 23:../avrlib/uart.c **** #include "uart.h" - 24:../avrlib/uart.c **** - 25:../avrlib/uart.c **** // UART global variables - 26:../avrlib/uart.c **** // flag variables - 27:../avrlib/uart.c **** volatile u08 uartReadyTx; ///< uartReadyTx flag - 28:../avrlib/uart.c **** volatile u08 uartBufferedTx; ///< uartBufferedTx flag - 29:../avrlib/uart.c **** // receive and transmit buffers - 30:../avrlib/uart.c **** cBuffer uartRxBuffer; ///< uart receive buffer - 31:../avrlib/uart.c **** cBuffer uartTxBuffer; ///< uart transmit buffer - 32:../avrlib/uart.c **** unsigned short uartRxOverflow; ///< receive overflow counter - 33:../avrlib/uart.c **** - 34:../avrlib/uart.c **** #ifndef UART_BUFFERS_EXTERNAL_RAM - 35:../avrlib/uart.c **** // using internal ram, - 36:../avrlib/uart.c **** // automatically allocate space in ram for each buffer - 37:../avrlib/uart.c **** static char uartRxData[UART_RX_BUFFER_SIZE]; - 38:../avrlib/uart.c **** static char uartTxData[UART_TX_BUFFER_SIZE]; - 39:../avrlib/uart.c **** #endif - 40:../avrlib/uart.c **** - 41:../avrlib/uart.c **** typedef void (*voidFuncPtru08)(unsigned char); - 42:../avrlib/uart.c **** volatile static voidFuncPtru08 UartRxFunc; - 43:../avrlib/uart.c **** - 44:../avrlib/uart.c **** //! enable and initialize the uart - 45:../avrlib/uart.c **** void uartInit(void) - 46:../avrlib/uart.c **** { - 47:../avrlib/uart.c **** // initialize the buffers - 48:../avrlib/uart.c **** uartInitBuffers(); - 49:../avrlib/uart.c **** // initialize user receive handler - 50:../avrlib/uart.c **** UartRxFunc = 0; - 51:../avrlib/uart.c **** - 52:../avrlib/uart.c **** // enable RxD/TxD and interrupts - 53:../avrlib/uart.c **** outb(UCR, BV(RXCIE)|BV(TXCIE)|BV(RXEN)|BV(TXEN)); - 54:../avrlib/uart.c **** - 55:../avrlib/uart.c **** // set default baud rate - 56:../avrlib/uart.c **** uartSetBaudRate(UART_DEFAULT_BAUD_RATE); - 57:../avrlib/uart.c **** // initialize states - 58:../avrlib/uart.c **** uartReadyTx = TRUE; - 59:../avrlib/uart.c **** uartBufferedTx = FALSE; - 60:../avrlib/uart.c **** // clear overflow count - 61:../avrlib/uart.c **** uartRxOverflow = 0; - 62:../avrlib/uart.c **** // enable interrupts - 63:../avrlib/uart.c **** sei(); - 64:../avrlib/uart.c **** } - 65:../avrlib/uart.c **** - 66:../avrlib/uart.c **** //! create and initialize the uart transmit and receive buffers - 67:../avrlib/uart.c **** void uartInitBuffers(void) - 68:../avrlib/uart.c **** { - 69:../avrlib/uart.c **** #ifndef UART_BUFFERS_EXTERNAL_RAM - 70:../avrlib/uart.c **** // initialize the UART receive buffer - 71:../avrlib/uart.c **** bufferInit(&uartRxBuffer, uartRxData, UART_RX_BUFFER_SIZE); - 72:../avrlib/uart.c **** // initialize the UART transmit buffer - 73:../avrlib/uart.c **** bufferInit(&uartTxBuffer, uartTxData, UART_TX_BUFFER_SIZE); - 74:../avrlib/uart.c **** #else - 75:../avrlib/uart.c **** // initialize the UART receive buffer - 76:../avrlib/uart.c **** bufferInit(&uartRxBuffer, (u08*) UART_RX_BUFFER_ADDR, UART_RX_BUFFER_SIZE); - 77:../avrlib/uart.c **** // initialize the UART transmit buffer - 78:../avrlib/uart.c **** bufferInit(&uartTxBuffer, (u08*) UART_TX_BUFFER_ADDR, UART_TX_BUFFER_SIZE); - 79:../avrlib/uart.c **** #endif - 80:../avrlib/uart.c **** } - 81:../avrlib/uart.c **** - 82:../avrlib/uart.c **** //! redirects received data to a user function - 83:../avrlib/uart.c **** void uartSetRxHandler(void (*rx_func)(unsigned char c)) - 84:../avrlib/uart.c **** { - 85:../avrlib/uart.c **** // set the receive interrupt to run the supplied user function - 86:../avrlib/uart.c **** UartRxFunc = rx_func; - 87:../avrlib/uart.c **** } - 88:../avrlib/uart.c **** - 89:../avrlib/uart.c **** //! set the uart baud rate - 90:../avrlib/uart.c **** void uartSetBaudRate(u32 baudrate) - 91:../avrlib/uart.c **** { - 90 .LM1: - 91 /* prologue: frame size=0 */ - 92 /* prologue end (size=0) */ - 93 0000 DC01 movw r26,r24 - 94 0002 CB01 movw r24,r22 - 92:../avrlib/uart.c **** // calculate division factor for requested baud rate, and set it - 93:../avrlib/uart.c **** u16 bauddiv = ((F_CPU+(baudrate*8L))/(baudrate*16L)-1); - 96 .LM2: - 97 0004 73E0 ldi r23,3 - 98 0006 880F 1: lsl r24 - 99 0008 991F rol r25 - 100 000a AA1F rol r26 - 101 000c BB1F rol r27 - 102 000e 7A95 dec r23 - 103 0010 D1F7 brne 1b - 104 0012 9C01 movw r18,r24 - 105 0014 AD01 movw r20,r26 - 106 0016 220F lsl r18 - 107 0018 331F rol r19 - 108 001a 441F rol r20 - 109 001c 551F rol r21 - 110 001e 8050 subi r24,lo8(-(16000000)) - 111 0020 9C4D sbci r25,hi8(-(16000000)) - 112 0022 AB40 sbci r26,hlo8(-(16000000)) - 113 0024 BF4F sbci r27,hhi8(-(16000000)) - 114 0026 BC01 movw r22,r24 - 115 0028 CD01 movw r24,r26 - 116 002a 00D0 rcall __udivmodsi4 - 117 002c DA01 movw r26,r20 - 118 002e C901 movw r24,r18 - 119 0030 0197 sbiw r24,1 - 94:../avrlib/uart.c **** outb(UBRRL, bauddiv); - 121 .LM3: - 122 0032 89B9 out 41-0x20,r24 - 95:../avrlib/uart.c **** #ifdef UBRRH - 96:../avrlib/uart.c **** outb(UBRRH, bauddiv>>8); - 124 .LM4: - 125 0034 892F mov r24,r25 - 126 0036 9927 clr r25 - 127 0038 80BD out 64-0x20,r24 - 128 /* epilogue: frame size=0 */ - 129 003a 0895 ret - 130 /* epilogue end (size=1) */ - 131 /* function uartSetBaudRate size 30 (29) */ - 136 .Lscope0: - 139 .global uartInitBuffers - 141 uartInitBuffers: - 143 .LM5: - 144 /* prologue: frame size=0 */ - 145 /* prologue end (size=0) */ - 147 .LM6: - 148 003c 40E4 ldi r20,lo8(64) - 149 003e 50E0 ldi r21,hi8(64) - 150 0040 60E0 ldi r22,lo8(uartRxData) - 151 0042 70E0 ldi r23,hi8(uartRxData) - 152 0044 80E0 ldi r24,lo8(uartRxBuffer) - 153 0046 90E0 ldi r25,hi8(uartRxBuffer) - 154 0048 00D0 rcall bufferInit - 156 .LM7: - 157 004a 40E4 ldi r20,lo8(64) - 158 004c 50E0 ldi r21,hi8(64) - 159 004e 60E0 ldi r22,lo8(uartTxData) - 160 0050 70E0 ldi r23,hi8(uartTxData) - 161 0052 80E0 ldi r24,lo8(uartTxBuffer) - 162 0054 90E0 ldi r25,hi8(uartTxBuffer) - 163 0056 00D0 rcall bufferInit - 164 /* epilogue: frame size=0 */ - 165 0058 0895 ret - 166 /* epilogue end (size=1) */ - 167 /* function uartInitBuffers size 15 (14) */ - 169 .Lscope1: - 172 .global uartInit - 174 uartInit: - 176 .LM8: - 177 /* prologue: frame size=0 */ - 178 /* prologue end (size=0) */ - 180 .LM9: - 181 005a F0DF rcall uartInitBuffers - 183 .LM10: - 184 005c 1092 0000 sts (UartRxFunc)+1,__zero_reg__ - 185 0060 1092 0000 sts UartRxFunc,__zero_reg__ - 187 .LM11: - 188 0064 88ED ldi r24,lo8(-40) - 189 0066 8AB9 out 42-0x20,r24 - 191 .LM12: - 192 0068 60E8 ldi r22,lo8(9600) - 193 006a 75E2 ldi r23,hi8(9600) - 194 006c 80E0 ldi r24,hlo8(9600) - 195 006e 90E0 ldi r25,hhi8(9600) - 196 0070 C7DF rcall uartSetBaudRate - 198 .LM13: - 199 0072 8FEF ldi r24,lo8(-1) - 200 0074 8093 0000 sts uartReadyTx,r24 - 202 .LM14: - 203 0078 1092 0000 sts uartBufferedTx,__zero_reg__ - 205 .LM15: - 206 007c 1092 0000 sts (uartRxOverflow)+1,__zero_reg__ - 207 0080 1092 0000 sts uartRxOverflow,__zero_reg__ - 209 .LM16: - 210 /* #APP */ - 211 0084 7894 sei - 212 /* #NOAPP */ - 213 /* epilogue: frame size=0 */ - 214 0086 0895 ret - 215 /* epilogue end (size=1) */ - 216 /* function uartInit size 24 (23) */ - 218 .Lscope2: - 222 .global uartSetRxHandler - 224 uartSetRxHandler: - 226 .LM17: - 227 /* prologue: frame size=0 */ - 228 /* prologue end (size=0) */ - 230 .LM18: - 231 0088 9093 0000 sts (UartRxFunc)+1,r25 - 232 008c 8093 0000 sts UartRxFunc,r24 - 233 /* epilogue: frame size=0 */ - 234 0090 0895 ret - 235 /* epilogue end (size=1) */ - 236 /* function uartSetRxHandler size 5 (4) */ - 238 .Lscope3: - 241 .global uartGetRxBuffer - 243 uartGetRxBuffer: - 97:../avrlib/uart.c **** #endif - 98:../avrlib/uart.c **** } - 99:../avrlib/uart.c **** - 100:../avrlib/uart.c **** //! returns the receive buffer structure - 101:../avrlib/uart.c **** cBuffer* uartGetRxBuffer(void) - 102:../avrlib/uart.c **** { - 245 .LM19: - 246 /* prologue: frame size=0 */ - 247 /* prologue end (size=0) */ - 103:../avrlib/uart.c **** // return rx buffer pointer - 104:../avrlib/uart.c **** return &uartRxBuffer; - 105:../avrlib/uart.c **** } - 249 .LM20: - 250 0092 80E0 ldi r24,lo8(uartRxBuffer) - 251 0094 90E0 ldi r25,hi8(uartRxBuffer) - 252 /* epilogue: frame size=0 */ - 253 0096 0895 ret - 254 /* epilogue end (size=1) */ - 255 /* function uartGetRxBuffer size 3 (2) */ - 257 .Lscope4: - 260 .global uartGetTxBuffer - 262 uartGetTxBuffer: - 106:../avrlib/uart.c **** - 107:../avrlib/uart.c **** //! returns the transmit buffer structure - 108:../avrlib/uart.c **** cBuffer* uartGetTxBuffer(void) - 109:../avrlib/uart.c **** { - 264 .LM21: - 265 /* prologue: frame size=0 */ - 266 /* prologue end (size=0) */ - 110:../avrlib/uart.c **** // return tx buffer pointer - 111:../avrlib/uart.c **** return &uartTxBuffer; - 112:../avrlib/uart.c **** } - 268 .LM22: - 269 0098 80E0 ldi r24,lo8(uartTxBuffer) - 270 009a 90E0 ldi r25,hi8(uartTxBuffer) - 271 /* epilogue: frame size=0 */ - 272 009c 0895 ret - 273 /* epilogue end (size=1) */ - 274 /* function uartGetTxBuffer size 3 (2) */ - 276 .Lscope5: - 280 .global uartSendByte - 282 uartSendByte: - 113:../avrlib/uart.c **** - 114:../avrlib/uart.c **** //! transmits a byte over the uart - 115:../avrlib/uart.c **** void uartSendByte(u08 txData) - 116:../avrlib/uart.c **** { - 284 .LM23: - 285 /* prologue: frame size=0 */ - 286 /* prologue end (size=0) */ - 287 009e 982F mov r25,r24 - 288 .L8: - 117:../avrlib/uart.c **** // wait for the transmitter to be ready - 118:../avrlib/uart.c **** while(!uartReadyTx); - 290 .LM24: - 291 00a0 8091 0000 lds r24,uartReadyTx - 292 00a4 8823 tst r24 - 293 00a6 E1F3 breq .L8 - 119:../avrlib/uart.c **** // send byte - 120:../avrlib/uart.c **** outb(UDR, txData); - 295 .LM25: - 296 00a8 9CB9 out 44-0x20,r25 - 121:../avrlib/uart.c **** // set ready state to FALSE - 122:../avrlib/uart.c **** uartReadyTx = FALSE; - 298 .LM26: - 299 00aa 1092 0000 sts uartReadyTx,__zero_reg__ - 300 /* epilogue: frame size=0 */ - 301 00ae 0895 ret - 302 /* epilogue end (size=1) */ - 303 /* function uartSendByte size 9 (8) */ - 305 .Lscope6: - 309 .global uartReceiveByte - 311 uartReceiveByte: - 123:../avrlib/uart.c **** } - 124:../avrlib/uart.c **** - 125:../avrlib/uart.c **** //! gets a single byte from the uart receive buffer (getchar-style) - 126:../avrlib/uart.c **** int uartGetByte(void) - 127:../avrlib/uart.c **** { - 128:../avrlib/uart.c **** u08 c; - 129:../avrlib/uart.c **** if(uartReceiveByte(&c)) - 130:../avrlib/uart.c **** return c; - 131:../avrlib/uart.c **** else - 132:../avrlib/uart.c **** return -1; - 133:../avrlib/uart.c **** } - 134:../avrlib/uart.c **** - 135:../avrlib/uart.c **** //! gets a byte (if available) from the uart receive buffer - 136:../avrlib/uart.c **** u08 uartReceiveByte(u08* rxData) - 137:../avrlib/uart.c **** { - 313 .LM27: - 314 /* prologue: frame size=0 */ - 315 00b0 CF93 push r28 - 316 00b2 DF93 push r29 - 317 /* prologue end (size=2) */ - 318 00b4 EC01 movw r28,r24 - 138:../avrlib/uart.c **** // make sure we have a receive buffer - 139:../avrlib/uart.c **** if(uartRxBuffer.size) - 320 .LM28: - 321 00b6 8091 0000 lds r24,uartRxBuffer+2 - 322 00ba 9091 0000 lds r25,(uartRxBuffer+2)+1 - 323 00be 0097 sbiw r24,0 - 324 00c0 61F0 breq .L11 - 140:../avrlib/uart.c **** { - 141:../avrlib/uart.c **** // make sure we have data - 142:../avrlib/uart.c **** if(uartRxBuffer.datalength) - 326 .LM29: - 327 00c2 8091 0000 lds r24,uartRxBuffer+4 - 328 00c6 9091 0000 lds r25,(uartRxBuffer+4)+1 - 329 00ca 0097 sbiw r24,0 - 330 00cc 31F0 breq .L11 - 143:../avrlib/uart.c **** { - 144:../avrlib/uart.c **** // get byte from beginning of buffer - 145:../avrlib/uart.c **** *rxData = bufferGetFromFront(&uartRxBuffer); - 332 .LM30: - 333 00ce 80E0 ldi r24,lo8(uartRxBuffer) - 334 00d0 90E0 ldi r25,hi8(uartRxBuffer) - 335 00d2 00D0 rcall bufferGetFromFront - 336 00d4 8883 st Y,r24 - 146:../avrlib/uart.c **** return TRUE; - 338 .LM31: - 339 00d6 8FEF ldi r24,lo8(255) - 340 00d8 90E0 ldi r25,hi8(255) - 341 .L11: - 342 /* epilogue: frame size=0 */ - 343 00da DF91 pop r29 - 344 00dc CF91 pop r28 - 345 00de 0895 ret - 346 /* epilogue end (size=3) */ - 347 /* function uartReceiveByte size 24 (19) */ - 349 .Lscope7: - 352 .global uartGetByte - 354 uartGetByte: - 356 .LM32: - 357 /* prologue: frame size=1 */ - 358 00e0 CF93 push r28 - 359 00e2 DF93 push r29 - 360 00e4 CDB7 in r28,__SP_L__ - 361 00e6 DEB7 in r29,__SP_H__ - 362 00e8 2197 sbiw r28,1 - 363 00ea 0FB6 in __tmp_reg__,__SREG__ - 364 00ec F894 cli - 365 00ee DEBF out __SP_H__,r29 - 366 00f0 0FBE out __SREG__,__tmp_reg__ - 367 00f2 CDBF out __SP_L__,r28 - 368 /* prologue end (size=10) */ - 370 .LM33: - 371 00f4 CE01 movw r24,r28 - 372 00f6 0196 adiw r24,1 - 373 00f8 DBDF rcall uartReceiveByte - 374 00fa 8823 tst r24 - 375 00fc 19F0 breq .L17 - 377 .LM34: - 378 00fe 8981 ldd r24,Y+1 - 379 0100 9927 clr r25 - 380 0102 02C0 rjmp .L16 - 381 .L17: - 383 .LM35: - 384 0104 8FEF ldi r24,lo8(-1) - 385 0106 9FEF ldi r25,hi8(-1) - 386 .L16: - 387 /* epilogue: frame size=1 */ - 388 0108 2196 adiw r28,1 - 389 010a 0FB6 in __tmp_reg__,__SREG__ - 390 010c F894 cli - 391 010e DEBF out __SP_H__,r29 - 392 0110 0FBE out __SREG__,__tmp_reg__ - 393 0112 CDBF out __SP_L__,r28 - 394 0114 DF91 pop r29 - 395 0116 CF91 pop r28 - 396 0118 0895 ret - 397 /* epilogue end (size=9) */ - 398 /* function uartGetByte size 29 (10) */ - 403 .Lscope8: - 406 .global uartFlushReceiveBuffer - 408 uartFlushReceiveBuffer: - 147:../avrlib/uart.c **** } - 148:../avrlib/uart.c **** else - 149:../avrlib/uart.c **** { - 150:../avrlib/uart.c **** // no data - 151:../avrlib/uart.c **** return FALSE; - 152:../avrlib/uart.c **** } - 153:../avrlib/uart.c **** } - 154:../avrlib/uart.c **** else - 155:../avrlib/uart.c **** { - 156:../avrlib/uart.c **** // no buffer - 157:../avrlib/uart.c **** return FALSE; - 158:../avrlib/uart.c **** } - 159:../avrlib/uart.c **** } - 160:../avrlib/uart.c **** - 161:../avrlib/uart.c **** //! flush all data out of the receive buffer - 162:../avrlib/uart.c **** void uartFlushReceiveBuffer(void) - 163:../avrlib/uart.c **** { - 410 .LM36: - 411 /* prologue: frame size=0 */ - 412 /* prologue end (size=0) */ - 164:../avrlib/uart.c **** // flush all data from receive buffer - 165:../avrlib/uart.c **** //bufferFlush(&uartRxBuffer); - 166:../avrlib/uart.c **** // same effect as above - 167:../avrlib/uart.c **** uartRxBuffer.datalength = 0; - 414 .LM37: - 415 011a 1092 0000 sts (uartRxBuffer+4)+1,__zero_reg__ - 416 011e 1092 0000 sts uartRxBuffer+4,__zero_reg__ - 417 /* epilogue: frame size=0 */ - 418 0122 0895 ret - 419 /* epilogue end (size=1) */ - 420 /* function uartFlushReceiveBuffer size 5 (4) */ - 422 .Lscope9: - 425 .global uartReceiveBufferIsEmpty - 427 uartReceiveBufferIsEmpty: - 168:../avrlib/uart.c **** } - 169:../avrlib/uart.c **** - 170:../avrlib/uart.c **** //! return true if uart receive buffer is empty - 171:../avrlib/uart.c **** u08 uartReceiveBufferIsEmpty(void) - 172:../avrlib/uart.c **** { - 429 .LM38: - 430 /* prologue: frame size=0 */ - 431 /* prologue end (size=0) */ - 173:../avrlib/uart.c **** if(uartRxBuffer.datalength == 0) - 433 .LM39: - 434 0124 8091 0000 lds r24,uartRxBuffer+4 - 435 0128 9091 0000 lds r25,(uartRxBuffer+4)+1 - 436 012c 892B or r24,r25 - 437 012e 19F4 brne .L21 - 174:../avrlib/uart.c **** { - 175:../avrlib/uart.c **** return TRUE; - 439 .LM40: - 440 0130 8FEF ldi r24,lo8(255) - 441 0132 90E0 ldi r25,hi8(255) - 442 0134 0895 ret - 443 .L21: - 176:../avrlib/uart.c **** } - 177:../avrlib/uart.c **** else - 178:../avrlib/uart.c **** { - 179:../avrlib/uart.c **** return FALSE; - 445 .LM41: - 446 0136 80E0 ldi r24,lo8(0) - 447 0138 90E0 ldi r25,hi8(0) - 180:../avrlib/uart.c **** } - 181:../avrlib/uart.c **** } - 449 .LM42: - 450 013a 0895 ret - 451 /* epilogue: frame size=0 */ - 452 013c 0895 ret - 453 /* epilogue end (size=1) */ - 454 /* function uartReceiveBufferIsEmpty size 13 (12) */ - 456 .Lscope10: - 460 .global uartAddToTxBuffer - 462 uartAddToTxBuffer: - 182:../avrlib/uart.c **** - 183:../avrlib/uart.c **** //! add byte to end of uart Tx buffer - 184:../avrlib/uart.c **** void uartAddToTxBuffer(u08 data) - 185:../avrlib/uart.c **** { - 464 .LM43: - 465 /* prologue: frame size=0 */ - 466 /* prologue end (size=0) */ - 186:../avrlib/uart.c **** // add data byte to the end of the tx buffer - 187:../avrlib/uart.c **** bufferAddToEnd(&uartTxBuffer, data); - 468 .LM44: - 469 013e 682F mov r22,r24 - 470 0140 80E0 ldi r24,lo8(uartTxBuffer) - 471 0142 90E0 ldi r25,hi8(uartTxBuffer) - 472 0144 00D0 rcall bufferAddToEnd - 473 /* epilogue: frame size=0 */ - 474 0146 0895 ret - 475 /* epilogue end (size=1) */ - 476 /* function uartAddToTxBuffer size 5 (4) */ - 478 .Lscope11: - 481 .global uartSendTxBuffer - 483 uartSendTxBuffer: - 188:../avrlib/uart.c **** } - 189:../avrlib/uart.c **** - 190:../avrlib/uart.c **** //! start transmission of the current uart Tx buffer contents - 191:../avrlib/uart.c **** void uartSendTxBuffer(void) - 192:../avrlib/uart.c **** { - 485 .LM45: - 486 /* prologue: frame size=0 */ - 487 /* prologue end (size=0) */ - 193:../avrlib/uart.c **** // turn on buffered transmit - 194:../avrlib/uart.c **** uartBufferedTx = TRUE; - 489 .LM46: - 490 0148 8FEF ldi r24,lo8(-1) - 491 014a 8093 0000 sts uartBufferedTx,r24 - 195:../avrlib/uart.c **** // send the first byte to get things going by interrupts - 196:../avrlib/uart.c **** uartSendByte(bufferGetFromFront(&uartTxBuffer)); - 493 .LM47: - 494 014e 80E0 ldi r24,lo8(uartTxBuffer) - 495 0150 90E0 ldi r25,hi8(uartTxBuffer) - 496 0152 00D0 rcall bufferGetFromFront - 497 0154 A4DF rcall uartSendByte - 498 /* epilogue: frame size=0 */ - 499 0156 0895 ret - 500 /* epilogue end (size=1) */ - 501 /* function uartSendTxBuffer size 8 (7) */ - 503 .Lscope12: - 506 .global __vector_13 - 508 __vector_13: - 197:../avrlib/uart.c **** } - 198:../avrlib/uart.c **** /* - 199:../avrlib/uart.c **** //! transmit nBytes from buffer out the uart - 200:../avrlib/uart.c **** u08 uartSendBuffer(char *buffer, u16 nBytes) - 201:../avrlib/uart.c **** { - 202:../avrlib/uart.c **** register u08 first; - 203:../avrlib/uart.c **** register u16 i; - 204:../avrlib/uart.c **** - 205:../avrlib/uart.c **** // check if there's space (and that we have any bytes to send at all) - 206:../avrlib/uart.c **** if((uartTxBuffer.datalength + nBytes < uartTxBuffer.size) && nBytes) - 207:../avrlib/uart.c **** { - 208:../avrlib/uart.c **** // grab first character - 209:../avrlib/uart.c **** first = *buffer++; - 210:../avrlib/uart.c **** // copy user buffer to uart transmit buffer - 211:../avrlib/uart.c **** for(i = 0; i < nBytes-1; i++) - 212:../avrlib/uart.c **** { - 213:../avrlib/uart.c **** // put data bytes at end of buffer - 214:../avrlib/uart.c **** bufferAddToEnd(&uartTxBuffer, *buffer++); - 215:../avrlib/uart.c **** } - 216:../avrlib/uart.c **** - 217:../avrlib/uart.c **** // send the first byte to get things going by interrupts - 218:../avrlib/uart.c **** uartBufferedTx = TRUE; - 219:../avrlib/uart.c **** uartSendByte(first); - 220:../avrlib/uart.c **** // return success - 221:../avrlib/uart.c **** return TRUE; - 222:../avrlib/uart.c **** } - 223:../avrlib/uart.c **** else - 224:../avrlib/uart.c **** { - 225:../avrlib/uart.c **** // return failure - 226:../avrlib/uart.c **** return FALSE; - 227:../avrlib/uart.c **** } - 228:../avrlib/uart.c **** } - 229:../avrlib/uart.c **** */ - 230:../avrlib/uart.c **** //! UART Transmit Complete Interrupt Handler - 231:../avrlib/uart.c **** UART_INTERRUPT_HANDLER(SIG_UART_TRANS) - 232:../avrlib/uart.c **** { - 510 .LM48: - 511 /* prologue: frame size=0 */ - 512 0158 1F92 push __zero_reg__ - 513 015a 0F92 push __tmp_reg__ - 514 015c 0FB6 in __tmp_reg__,__SREG__ - 515 015e 0F92 push __tmp_reg__ - 516 0160 1124 clr __zero_reg__ - 517 0162 2F93 push r18 - 518 0164 3F93 push r19 - 519 0166 4F93 push r20 - 520 0168 5F93 push r21 - 521 016a 6F93 push r22 - 522 016c 7F93 push r23 - 523 016e 8F93 push r24 - 524 0170 9F93 push r25 - 525 0172 AF93 push r26 - 526 0174 BF93 push r27 - 527 0176 EF93 push r30 - 528 0178 FF93 push r31 - 529 /* prologue end (size=17) */ - 233:../avrlib/uart.c **** // check if buffered tx is enabled - 234:../avrlib/uart.c **** if(uartBufferedTx) - 531 .LM49: - 532 017a 8091 0000 lds r24,uartBufferedTx - 533 017e 8823 tst r24 - 534 0180 69F0 breq .L26 - 235:../avrlib/uart.c **** { - 236:../avrlib/uart.c **** // check if there's data left in the buffer - 237:../avrlib/uart.c **** if(uartTxBuffer.datalength) - 536 .LM50: - 537 0182 8091 0000 lds r24,uartTxBuffer+4 - 538 0186 9091 0000 lds r25,(uartTxBuffer+4)+1 - 539 018a 892B or r24,r25 - 540 018c 29F0 breq .L27 - 238:../avrlib/uart.c **** { - 239:../avrlib/uart.c **** // send byte from top of buffer - 240:../avrlib/uart.c **** outb(UDR, bufferGetFromFront(&uartTxBuffer)); - 542 .LM51: - 543 018e 80E0 ldi r24,lo8(uartTxBuffer) - 544 0190 90E0 ldi r25,hi8(uartTxBuffer) - 545 0192 00D0 rcall bufferGetFromFront - 546 0194 8CB9 out 44-0x20,r24 - 547 0196 05C0 rjmp .L25 - 548 .L27: - 241:../avrlib/uart.c **** } - 242:../avrlib/uart.c **** else - 243:../avrlib/uart.c **** { - 244:../avrlib/uart.c **** // no data left - 245:../avrlib/uart.c **** uartBufferedTx = FALSE; - 550 .LM52: - 551 0198 1092 0000 sts uartBufferedTx,__zero_reg__ - 552 .L26: - 246:../avrlib/uart.c **** // return to ready state - 247:../avrlib/uart.c **** uartReadyTx = TRUE; - 248:../avrlib/uart.c **** } - 249:../avrlib/uart.c **** } - 250:../avrlib/uart.c **** else - 251:../avrlib/uart.c **** { - 252:../avrlib/uart.c **** // we're using single-byte tx mode - 253:../avrlib/uart.c **** // indicate transmit complete, back to ready - 254:../avrlib/uart.c **** uartReadyTx = TRUE; - 554 .LM53: - 555 019c 8FEF ldi r24,lo8(-1) - 556 019e 8093 0000 sts uartReadyTx,r24 - 557 .L25: - 558 /* epilogue: frame size=0 */ - 559 01a2 FF91 pop r31 - 560 01a4 EF91 pop r30 - 561 01a6 BF91 pop r27 - 562 01a8 AF91 pop r26 - 563 01aa 9F91 pop r25 - 564 01ac 8F91 pop r24 - 565 01ae 7F91 pop r23 - 566 01b0 6F91 pop r22 - 567 01b2 5F91 pop r21 - 568 01b4 4F91 pop r20 - 569 01b6 3F91 pop r19 - 570 01b8 2F91 pop r18 - 571 01ba 0F90 pop __tmp_reg__ - 572 01bc 0FBE out __SREG__,__tmp_reg__ - 573 01be 0F90 pop __tmp_reg__ - 574 01c0 1F90 pop __zero_reg__ - 575 01c2 1895 reti - 576 /* epilogue end (size=17) */ - 577 /* function __vector_13 size 54 (20) */ - 579 .Lscope13: - 582 .global __vector_11 - 584 __vector_11: - 255:../avrlib/uart.c **** } - 256:../avrlib/uart.c **** } - 257:../avrlib/uart.c **** - 258:../avrlib/uart.c **** //! UART Receive Complete Interrupt Handler - 259:../avrlib/uart.c **** UART_INTERRUPT_HANDLER(SIG_UART_RECV) - 260:../avrlib/uart.c **** { - 586 .LM54: - 587 /* prologue: frame size=0 */ - 588 01c4 1F92 push __zero_reg__ - 589 01c6 0F92 push __tmp_reg__ - 590 01c8 0FB6 in __tmp_reg__,__SREG__ - 591 01ca 0F92 push __tmp_reg__ - 592 01cc 1124 clr __zero_reg__ - 593 01ce 2F93 push r18 - 594 01d0 3F93 push r19 - 595 01d2 4F93 push r20 - 596 01d4 5F93 push r21 - 597 01d6 6F93 push r22 - 598 01d8 7F93 push r23 - 599 01da 8F93 push r24 - 600 01dc 9F93 push r25 - 601 01de AF93 push r26 - 602 01e0 BF93 push r27 - 603 01e2 EF93 push r30 - 604 01e4 FF93 push r31 - 605 /* prologue end (size=17) */ - 261:../avrlib/uart.c **** u08 c; - 262:../avrlib/uart.c **** - 263:../avrlib/uart.c **** // get received char - 264:../avrlib/uart.c **** c = inb(UDR); - 607 .LM55: - 608 01e6 6CB1 in r22,44-0x20 - 265:../avrlib/uart.c **** - 266:../avrlib/uart.c **** // if there's a user function to handle this receive event - 267:../avrlib/uart.c **** if(UartRxFunc) - 610 .LM56: - 611 01e8 8091 0000 lds r24,UartRxFunc - 612 01ec 9091 0000 lds r25,(UartRxFunc)+1 - 613 01f0 892B or r24,r25 - 614 01f2 39F0 breq .L31 - 268:../avrlib/uart.c **** { - 269:../avrlib/uart.c **** // call it and pass the received data - 270:../avrlib/uart.c **** UartRxFunc(c); - 616 .LM57: - 617 01f4 E091 0000 lds r30,UartRxFunc - 618 01f8 F091 0000 lds r31,(UartRxFunc)+1 - 619 01fc 862F mov r24,r22 - 620 01fe 0995 icall - 621 0200 0EC0 rjmp .L30 - 622 .L31: - 271:../avrlib/uart.c **** } - 272:../avrlib/uart.c **** else - 273:../avrlib/uart.c **** { - 274:../avrlib/uart.c **** // otherwise do default processing - 275:../avrlib/uart.c **** // put received char in buffer - 276:../avrlib/uart.c **** // check if there's space - 277:../avrlib/uart.c **** if( !bufferAddToEnd(&uartRxBuffer, c) ) - 624 .LM58: - 625 0202 80E0 ldi r24,lo8(uartRxBuffer) - 626 0204 90E0 ldi r25,hi8(uartRxBuffer) - 627 0206 00D0 rcall bufferAddToEnd - 628 0208 8823 tst r24 - 629 020a 49F4 brne .L30 - 278:../avrlib/uart.c **** { - 279:../avrlib/uart.c **** // no space in buffer - 280:../avrlib/uart.c **** // count overflow - 281:../avrlib/uart.c **** uartRxOverflow++; - 631 .LM59: - 632 020c 8091 0000 lds r24,uartRxOverflow - 633 0210 9091 0000 lds r25,(uartRxOverflow)+1 - 634 0214 0196 adiw r24,1 - 635 0216 9093 0000 sts (uartRxOverflow)+1,r25 - 636 021a 8093 0000 sts uartRxOverflow,r24 - 637 .L30: - 638 /* epilogue: frame size=0 */ - 639 021e FF91 pop r31 - 640 0220 EF91 pop r30 - 641 0222 BF91 pop r27 - 642 0224 AF91 pop r26 - 643 0226 9F91 pop r25 - 644 0228 8F91 pop r24 - 645 022a 7F91 pop r23 - 646 022c 6F91 pop r22 - 647 022e 5F91 pop r21 - 648 0230 4F91 pop r20 - 649 0232 3F91 pop r19 - 650 0234 2F91 pop r18 - 651 0236 0F90 pop __tmp_reg__ - 652 0238 0FBE out __SREG__,__tmp_reg__ - 653 023a 0F90 pop __tmp_reg__ - 654 023c 1F90 pop __zero_reg__ - 655 023e 1895 reti - 656 /* epilogue end (size=17) */ - 657 /* function __vector_11 size 62 (28) */ - 662 .Lscope14: - 664 .comm uartReadyTx,1,1 - 665 .comm uartBufferedTx,1,1 - 666 .comm uartRxBuffer,8,1 - 667 .comm uartTxBuffer,8,1 - 668 .comm uartRxOverflow,2,1 - 669 .lcomm uartRxData,64 - 670 .lcomm uartTxData,64 - 671 .lcomm UartRxFunc,2 - 680 .text - 682 Letext: - 683 /* File "../avrlib/uart.c": code 289 = 0x0121 ( 186), prologues 46, epilogues 57 */ -DEFINED SYMBOLS - *ABS*:00000000 uart.c - *ABS*:0000003f __SREG__ - *ABS*:0000003e __SP_H__ - *ABS*:0000003d __SP_L__ - *ABS*:00000000 __tmp_reg__ - *ABS*:00000001 __zero_reg__ -/var/tmp//cclgUhYv.s:88 .text:00000000 uartSetBaudRate -/var/tmp//cclgUhYv.s:141 .text:0000003c uartInitBuffers - .bss:00000000 uartRxData - *COM*:00000008 uartRxBuffer -/var/tmp//cclgUhYv.s:669 .bss:00000040 uartTxData - *COM*:00000008 uartTxBuffer -/var/tmp//cclgUhYv.s:174 .text:0000005a uartInit -/var/tmp//cclgUhYv.s:670 .bss:00000080 UartRxFunc - *COM*:00000001 uartReadyTx - *COM*:00000001 uartBufferedTx - *COM*:00000002 uartRxOverflow -/var/tmp//cclgUhYv.s:224 .text:00000088 uartSetRxHandler -/var/tmp//cclgUhYv.s:243 .text:00000092 uartGetRxBuffer -/var/tmp//cclgUhYv.s:262 .text:00000098 uartGetTxBuffer -/var/tmp//cclgUhYv.s:282 .text:0000009e uartSendByte -/var/tmp//cclgUhYv.s:311 .text:000000b0 uartReceiveByte -/var/tmp//cclgUhYv.s:354 .text:000000e0 uartGetByte -/var/tmp//cclgUhYv.s:408 .text:0000011a uartFlushReceiveBuffer -/var/tmp//cclgUhYv.s:427 .text:00000124 uartReceiveBufferIsEmpty -/var/tmp//cclgUhYv.s:462 .text:0000013e uartAddToTxBuffer -/var/tmp//cclgUhYv.s:483 .text:00000148 uartSendTxBuffer -/var/tmp//cclgUhYv.s:508 .text:00000158 __vector_13 -/var/tmp//cclgUhYv.s:584 .text:000001c4 __vector_11 -/var/tmp//cclgUhYv.s:682 .text:00000240 Letext - -UNDEFINED SYMBOLS -__do_copy_data -__do_clear_bss -__udivmodsi4 -bufferInit -bufferGetFromFront -bufferAddToEnd