Blame | Last modification | View Log | SVN | RSS feed
1 .file "timebase.c"2 .arch atmega83 __SREG__ = 0x3f4 __SP_H__ = 0x3e5 __SP_L__ = 0x3d6 __tmp_reg__ = 07 __zero_reg__ = 18 .global __do_copy_data9 .global __do_clear_bss11 .text12 .Ltext0:64 .global __vector_466 __vector_4:1:../avr-lib/drivers/timer/timebase.c **** /**2:../avr-lib/drivers/timer/timebase.c **** * Timebase software module. Utilizes timer0 to provide a 32bit timebase with3:../avr-lib/drivers/timer/timebase.c **** * millisecond-granularity to the application.4:../avr-lib/drivers/timer/timebase.c **** *5:../avr-lib/drivers/timer/timebase.c **** * @author Martin Thomas6:../avr-lib/drivers/timer/timebase.c **** * @author Jimmy Myhrman7:../avr-lib/drivers/timer/timebase.c **** *8:../avr-lib/drivers/timer/timebase.c **** * @date 2006-11-199:../avr-lib/drivers/timer/timebase.c **** */10:../avr-lib/drivers/timer/timebase.c ****11:../avr-lib/drivers/timer/timebase.c **** /*-----------------------------------------------------------------------------12:../avr-lib/drivers/timer/timebase.c **** * Includes13:../avr-lib/drivers/timer/timebase.c **** *---------------------------------------------------------------------------*/14:../avr-lib/drivers/timer/timebase.c **** #include <inttypes.h>15:../avr-lib/drivers/timer/timebase.c **** #include <avr/io.h>16:../avr-lib/drivers/timer/timebase.c **** #include <avr/interrupt.h>17:../avr-lib/drivers/timer/timebase.c ****18:../avr-lib/drivers/timer/timebase.c **** #include <config.h>19:../avr-lib/drivers/timer/timebase.c **** #include <drivers/timer/timebase.h>20:../avr-lib/drivers/timer/timebase.c ****21:../avr-lib/drivers/timer/timebase.c ****22:../avr-lib/drivers/timer/timebase.c **** /*-----------------------------------------------------------------------------23:../avr-lib/drivers/timer/timebase.c **** * Globals24:../avr-lib/drivers/timer/timebase.c **** *---------------------------------------------------------------------------*/25:../avr-lib/drivers/timer/timebase.c **** volatile uint32_t gMilliSecTick;26:../avr-lib/drivers/timer/timebase.c ****27:../avr-lib/drivers/timer/timebase.c ****28:../avr-lib/drivers/timer/timebase.c **** /*-----------------------------------------------------------------------------29:../avr-lib/drivers/timer/timebase.c **** * Interrupt Service Routines30:../avr-lib/drivers/timer/timebase.c **** *---------------------------------------------------------------------------*/31:../avr-lib/drivers/timer/timebase.c **** #if defined(TIMER2)32:../avr-lib/drivers/timer/timebase.c **** ISR(SIG_OVERFLOW2) {68 .LM0:69 /* prologue: frame size=0 */70 0000 1F92 push __zero_reg__71 0002 0F92 push __tmp_reg__72 0004 0FB6 in __tmp_reg__,__SREG__73 0006 0F92 push __tmp_reg__74 0008 1124 clr __zero_reg__75 000a 8F93 push r2476 000c 9F93 push r2577 000e AF93 push r2678 0010 BF93 push r2779 /* prologue end (size=9) */33:../avr-lib/drivers/timer/timebase.c **** TCNT2 = TIMEBASE_RELOAD;81 .LM1:82 0012 83E8 ldi r24,lo8(-125)83 0014 84BD out 68-0x20,r2434:../avr-lib/drivers/timer/timebase.c **** gMilliSecTick++;85 .LM2:86 0016 8091 0000 lds r24,gMilliSecTick87 001a 9091 0000 lds r25,(gMilliSecTick)+188 001e A091 0000 lds r26,(gMilliSecTick)+289 0022 B091 0000 lds r27,(gMilliSecTick)+390 0026 0196 adiw r24,191 0028 A11D adc r26,__zero_reg__92 002a B11D adc r27,__zero_reg__93 002c 8093 0000 sts gMilliSecTick,r2494 0030 9093 0000 sts (gMilliSecTick)+1,r2595 0034 A093 0000 sts (gMilliSecTick)+2,r2696 0038 B093 0000 sts (gMilliSecTick)+3,r2797 /* epilogue: frame size=0 */98 003c BF91 pop r2799 003e AF91 pop r26100 0040 9F91 pop r25101 0042 8F91 pop r24102 0044 0F90 pop __tmp_reg__103 0046 0FBE out __SREG__,__tmp_reg__104 0048 0F90 pop __tmp_reg__105 004a 1F90 pop __zero_reg__106 004c 1895 reti107 /* epilogue end (size=9) */108 /* function __vector_4 size 39 (21) */110 .Lscope0:112 .global Timebase_Init114 Timebase_Init:35:../avr-lib/drivers/timer/timebase.c **** }36:../avr-lib/drivers/timer/timebase.c **** #else37:../avr-lib/drivers/timer/timebase.c **** ISR(SIG_OVERFLOW0) {38:../avr-lib/drivers/timer/timebase.c **** TCNT0 = TIMEBASE_RELOAD;39:../avr-lib/drivers/timer/timebase.c **** gMilliSecTick++;40:../avr-lib/drivers/timer/timebase.c **** }41:../avr-lib/drivers/timer/timebase.c **** #endif42:../avr-lib/drivers/timer/timebase.c ****43:../avr-lib/drivers/timer/timebase.c ****44:../avr-lib/drivers/timer/timebase.c **** /*-----------------------------------------------------------------------------45:../avr-lib/drivers/timer/timebase.c **** * Public Functions46:../avr-lib/drivers/timer/timebase.c **** *---------------------------------------------------------------------------*/47:../avr-lib/drivers/timer/timebase.c ****48:../avr-lib/drivers/timer/timebase.c **** /**49:../avr-lib/drivers/timer/timebase.c **** * Initializes the timebase. The hardware timer interrupt source will be50:../avr-lib/drivers/timer/timebase.c **** * enabled, but global interrupts need to be enabled by the application.51:../avr-lib/drivers/timer/timebase.c **** */52:../avr-lib/drivers/timer/timebase.c **** void Timebase_Init() {116 .LM3:117 /* prologue: frame size=0 */118 /* prologue end (size=0) */53:../avr-lib/drivers/timer/timebase.c **** #if defined(TIMER2)54:../avr-lib/drivers/timer/timebase.c **** #if defined(__AVR_ATmega8__)55:../avr-lib/drivers/timer/timebase.c **** #if TIMEBASE_PRESCALE == 6456:../avr-lib/drivers/timer/timebase.c **** TCCR2 = (1<<CS22); // prescaler: 64120 .LM4:121 004e 84E0 ldi r24,lo8(4)122 0050 85BD out 69-0x20,r2457:../avr-lib/drivers/timer/timebase.c **** #elif TIMEBASE_PRESCALE == 25658:../avr-lib/drivers/timer/timebase.c **** TCCR2 = (1<<CS22) | (1<<CS21); // prescaler: 25659:../avr-lib/drivers/timer/timebase.c **** #endif60:../avr-lib/drivers/timer/timebase.c **** TCNT2 = TIMEBASE_RELOAD; // set initial reload-value124 .LM5:125 0052 83E8 ldi r24,lo8(-125)126 0054 84BD out 68-0x20,r2461:../avr-lib/drivers/timer/timebase.c **** TIFR |= (1<<TOV2); // clear overflow int.128 .LM6:129 0056 88B7 in r24,88-0x20130 0058 8064 ori r24,lo8(64)131 005a 88BF out 88-0x20,r2462:../avr-lib/drivers/timer/timebase.c **** TIMSK |= (1<<TOIE2); // enable overflow-interrupt133 .LM7:134 005c 89B7 in r24,89-0x20135 005e 8064 ori r24,lo8(64)136 0060 89BF out 89-0x20,r24137 /* epilogue: frame size=0 */138 0062 0895 ret139 /* epilogue end (size=1) */140 /* function Timebase_Init size 11 (10) */142 .Lscope1:144 .global Timebase_CurrentTime146 Timebase_CurrentTime:63:../avr-lib/drivers/timer/timebase.c **** #endif64:../avr-lib/drivers/timer/timebase.c ****65:../avr-lib/drivers/timer/timebase.c **** #if defined(__AVR_ATmega88__)66:../avr-lib/drivers/timer/timebase.c **** #if TIMEBASE_PRESCALE == 6467:../avr-lib/drivers/timer/timebase.c **** TCCR2B = (1<<CS22); // prescaler: 6468:../avr-lib/drivers/timer/timebase.c **** #elif TIMEBASE_PRESCALE == 25669:../avr-lib/drivers/timer/timebase.c **** TCCR2B = (1<<CS22)|(1<<CS21); // prescaler: 25670:../avr-lib/drivers/timer/timebase.c **** #endif71:../avr-lib/drivers/timer/timebase.c **** TCNT2 = TIMEBASE_RELOAD; // set initial reload-value72:../avr-lib/drivers/timer/timebase.c **** TIFR2 |= (1<<TOV2); // clear overflow int.73:../avr-lib/drivers/timer/timebase.c **** TIMSK2 |= (1<<TOIE2); // enable overflow-interrupt74:../avr-lib/drivers/timer/timebase.c **** #endif75:../avr-lib/drivers/timer/timebase.c **** #else /* Use timer0 */76:../avr-lib/drivers/timer/timebase.c **** #if defined(__AVR_ATmega8__)77:../avr-lib/drivers/timer/timebase.c **** #if TIMEBASE_PRESCALE == 6478:../avr-lib/drivers/timer/timebase.c **** TCCR0 = (1<<CS01) | (1<<CS00); // prescaler: 6479:../avr-lib/drivers/timer/timebase.c **** #elif TIMEBASE_PRESCALE == 25680:../avr-lib/drivers/timer/timebase.c **** TCCR0 = (1<<CS02); // prescaler: 25681:../avr-lib/drivers/timer/timebase.c **** #endif82:../avr-lib/drivers/timer/timebase.c **** TCNT0 = TIMEBASE_RELOAD; // set initial reload-value83:../avr-lib/drivers/timer/timebase.c **** TIFR |= (1<<TOV0); // clear overflow int.84:../avr-lib/drivers/timer/timebase.c **** TIMSK |= (1<<TOIE0); // enable overflow-interrupt85:../avr-lib/drivers/timer/timebase.c **** #endif86:../avr-lib/drivers/timer/timebase.c ****87:../avr-lib/drivers/timer/timebase.c **** #if defined(__AVR_ATmega88__)88:../avr-lib/drivers/timer/timebase.c **** #if TIMEBASE_PRESCALE == 6489:../avr-lib/drivers/timer/timebase.c **** TCCR0B = (1<<CS01) | (1<<CS00); // prescaler: 6490:../avr-lib/drivers/timer/timebase.c **** #elif TIMEBASE_PRESCALE == 25691:../avr-lib/drivers/timer/timebase.c **** TCCR0B = (1<<CS02); // prescaler: 25692:../avr-lib/drivers/timer/timebase.c **** #endif93:../avr-lib/drivers/timer/timebase.c **** TCNT0 = TIMEBASE_RELOAD; // set initial reload-value94:../avr-lib/drivers/timer/timebase.c **** TIFR0 |= (1<<TOV0); // clear overflow int.95:../avr-lib/drivers/timer/timebase.c **** TIMSK0 |= (1<<TOIE0); // enable overflow-interrupt96:../avr-lib/drivers/timer/timebase.c **** #endif97:../avr-lib/drivers/timer/timebase.c **** #endif98:../avr-lib/drivers/timer/timebase.c **** }99:../avr-lib/drivers/timer/timebase.c ****100:../avr-lib/drivers/timer/timebase.c ****101:../avr-lib/drivers/timer/timebase.c **** /**102:../avr-lib/drivers/timer/timebase.c **** * Reads the current time.103:../avr-lib/drivers/timer/timebase.c **** *104:../avr-lib/drivers/timer/timebase.c **** * @return105:../avr-lib/drivers/timer/timebase.c **** * The current time in milliseconds (32bit value).106:../avr-lib/drivers/timer/timebase.c **** */107:../avr-lib/drivers/timer/timebase.c **** uint32_t Timebase_CurrentTime(void) {148 .LM8:149 /* prologue: frame size=0 */150 /* prologue end (size=0) */108:../avr-lib/drivers/timer/timebase.c **** uint8_t sreg;109:../avr-lib/drivers/timer/timebase.c **** uint16_t res;110:../avr-lib/drivers/timer/timebase.c **** sreg=SREG;152 .LM9:153 0064 2FB7 in r18,95-0x20111:../avr-lib/drivers/timer/timebase.c **** cli();155 .LM10:156 /* #APP */157 0066 F894 cli112:../avr-lib/drivers/timer/timebase.c **** res = gMilliSecTick;159 .LM11:160 /* #NOAPP */161 0068 6091 0000 lds r22,gMilliSecTick162 006c 7091 0000 lds r23,(gMilliSecTick)+1163 0070 8091 0000 lds r24,(gMilliSecTick)+2164 0074 9091 0000 lds r25,(gMilliSecTick)+3113:../avr-lib/drivers/timer/timebase.c **** SREG=sreg;166 .LM12:167 0078 2FBF out 95-0x20,r18168 007a 8827 clr r24169 007c 9927 clr r25170 /* epilogue: frame size=0 */171 007e 0895 ret172 /* epilogue end (size=1) */173 /* function Timebase_CurrentTime size 15 (14) */178 .Lscope2:181 .global Timebase_PassedTimeMillis183 Timebase_PassedTimeMillis:114:../avr-lib/drivers/timer/timebase.c **** return res;115:../avr-lib/drivers/timer/timebase.c **** }116:../avr-lib/drivers/timer/timebase.c ****117:../avr-lib/drivers/timer/timebase.c ****118:../avr-lib/drivers/timer/timebase.c **** /**119:../avr-lib/drivers/timer/timebase.c **** * Checks how much time has passed since a given timestamp.120:../avr-lib/drivers/timer/timebase.c **** *121:../avr-lib/drivers/timer/timebase.c **** * @param t0122:../avr-lib/drivers/timer/timebase.c **** * The timestamp.123:../avr-lib/drivers/timer/timebase.c **** * @return124:../avr-lib/drivers/timer/timebase.c **** * Number of milliseconds that have passed since t0.125:../avr-lib/drivers/timer/timebase.c **** */126:../avr-lib/drivers/timer/timebase.c **** uint32_t Timebase_PassedTimeMillis(uint32_t t0) {185 .LM13:186 /* prologue: frame size=0 */187 /* prologue end (size=0) */127:../avr-lib/drivers/timer/timebase.c **** uint8_t sreg;128:../avr-lib/drivers/timer/timebase.c **** uint16_t res;129:../avr-lib/drivers/timer/timebase.c **** sreg=SREG;189 .LM14:190 0080 EFB7 in r30,95-0x20130:../avr-lib/drivers/timer/timebase.c **** cli();192 .LM15:193 /* #APP */194 0082 F894 cli131:../avr-lib/drivers/timer/timebase.c **** res = (uint16_t)(gMilliSecTick-t0);196 .LM16:197 /* #NOAPP */198 0084 2091 0000 lds r18,gMilliSecTick199 0088 3091 0000 lds r19,(gMilliSecTick)+1200 008c 4091 0000 lds r20,(gMilliSecTick)+2201 0090 5091 0000 lds r21,(gMilliSecTick)+3132:../avr-lib/drivers/timer/timebase.c **** SREG=sreg;203 .LM17:204 0094 EFBF out 95-0x20,r30205 0096 261B sub r18,r22206 0098 370B sbc r19,r23207 009a B901 movw r22,r18208 009c 8827 clr r24209 009e 9927 clr r25210 /* epilogue: frame size=0 */211 00a0 0895 ret212 /* epilogue end (size=1) */213 /* function Timebase_PassedTimeMillis size 18 (17) */218 .Lscope3:219 .comm gMilliSecTick,4,1222 .Letext0:223 /* File "../avr-lib/drivers/timer/timebase.c": code 83 = 0x0053 ( 62), prologues 9, epiloguesDEFINED SYMBOLS*ABS*:00000000 timebase.c/tmp/ccrzEiEW.s:3 *ABS*:0000003f __SREG__/tmp/ccrzEiEW.s:4 *ABS*:0000003e __SP_H__/tmp/ccrzEiEW.s:5 *ABS*:0000003d __SP_L__/tmp/ccrzEiEW.s:6 *ABS*:00000000 __tmp_reg__/tmp/ccrzEiEW.s:7 *ABS*:00000001 __zero_reg__/tmp/ccrzEiEW.s:66 .text:00000000 __vector_4*COM*:00000004 gMilliSecTick/tmp/ccrzEiEW.s:114 .text:0000004e Timebase_Init/tmp/ccrzEiEW.s:146 .text:00000064 Timebase_CurrentTime/tmp/ccrzEiEW.s:183 .text:00000080 Timebase_PassedTimeMillisUNDEFINED SYMBOLS__do_copy_data__do_clear_bss