mirror of
1
0
Fork 0
avr_demo/button_debounce/timer.lst

568 lines
21 KiB
Plaintext

1 .file "timer.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
9 .text
10 .Ltext0:
11 .global timer_init
13 timer_init:
14 .LFB0:
15 .file 1 "timer.c"
1:timer.c **** /*
2:timer.c **** * Low resolution implementation of timer using a 8 bit clock with prescaler,
3:timer.c **** * etc. Clicks approximately every millisecond. Microseconds are not available,
4:timer.c **** * and any queries to the function will just return milliseconds * 1000.
5:timer.c **** * You can use this file when you don't need high resolution timing, and don't care
6:timer.c **** * about slight clock drift, inaccuracy, etc. For timing most human-related activities,
7:timer.c **** * though, it should be more than sufficient.
8:timer.c **** */
9:timer.c **** #include "timer.h"
10:timer.c ****
11:timer.c **** static volatile uint64_t _timer_millis;
12:timer.c ****
13:timer.c **** /*
14:timer.c **** * Initializes the timer, and resets the timer count to 0. Sets up the ISRs
15:timer.c **** * linked with timer0.
16:timer.c **** */
17:timer.c **** void timer_init(){
16 .loc 1 17 0
17 /* prologue: function */
18 /* frame size = 0 */
19 /* stack size = 0 */
20 .L__stack_usage = 0
18:timer.c **** //Set up the timer to run at F_CPU / 256, in normal mode (we reset TCNT0 in the ISR)
19:timer.c **** TCCR0A = 0x0;
21 .loc 1 19 0
22 0000 14BC out 68-0x20,__zero_reg__
20:timer.c **** TCCR0B |= _BV(CS02);
23 .loc 1 20 0
24 0002 85B5 in r24,69-0x20
25 0004 8460 ori r24,lo8(4)
26 0006 85BD out 69-0x20,r24
21:timer.c ****
22:timer.c **** //Set compare value to be F_CPU / 1000 -- fire interrupt every millisecond
23:timer.c **** OCR0A = F_CPU / 256 / 1000;
27 .loc 1 23 0
28 0008 8EE3 ldi r24,lo8(62)
29 000a 87BD out 71-0x20,r24
24:timer.c ****
25:timer.c **** //Enable compare interrupt
26:timer.c **** TIMSK0 = _BV(OCIE0A);
30 .loc 1 26 0
31 000c 82E0 ldi r24,lo8(2)
32 000e 8093 6E00 sts 110,r24
27:timer.c ****
28:timer.c **** //Reset count variables
29:timer.c **** _timer_millis = 0;
33 .loc 1 29 0
34 0012 1092 0000 sts _timer_millis,__zero_reg__
35 0016 1092 0000 sts _timer_millis+1,__zero_reg__
36 001a 1092 0000 sts _timer_millis+2,__zero_reg__
37 001e 1092 0000 sts _timer_millis+3,__zero_reg__
38 0022 1092 0000 sts _timer_millis+4,__zero_reg__
39 0026 1092 0000 sts _timer_millis+5,__zero_reg__
40 002a 1092 0000 sts _timer_millis+6,__zero_reg__
41 002e 1092 0000 sts _timer_millis+7,__zero_reg__
30:timer.c ****
31:timer.c **** //Enable interrupts if the NO_INTERRUPT_ENABLE define is not set. If it is, you need to call sei(
32:timer.c **** #ifndef NO_INTERRUPT_ENABLE
33:timer.c **** sei();
42 .loc 1 33 0
43 /* #APP */
44 ; 33 "timer.c" 1
45 0032 7894 sei
46 ; 0 "" 2
34:timer.c **** #endif
35:timer.c ****
36:timer.c **** DDRB = 0xFF;
47 .loc 1 36 0
48 /* #NOAPP */
49 0034 8FEF ldi r24,lo8(-1)
50 0036 84B9 out 36-0x20,r24
51 /* epilogue start */
37:timer.c **** }
52 .loc 1 37 0
53 0038 0895 ret
54 .LFE0:
56 .global timer_millis
58 timer_millis:
59 .LFB1:
38:timer.c ****
39:timer.c **** /*
40:timer.c **** * Returns the number of milliseconds which have elapsed since the
41:timer.c **** * last time timer_init() was called. Overflows after about 49 days.
42:timer.c **** */
43:timer.c **** uint64_t timer_millis(){
60 .loc 1 43 0
61 /* prologue: function */
62 /* frame size = 0 */
63 /* stack size = 0 */
64 .L__stack_usage = 0
44:timer.c **** return _timer_millis;
65 .loc 1 44 0
66 003a 2091 0000 lds r18,_timer_millis
67 003e 3091 0000 lds r19,_timer_millis+1
68 0042 4091 0000 lds r20,_timer_millis+2
69 0046 5091 0000 lds r21,_timer_millis+3
70 004a 6091 0000 lds r22,_timer_millis+4
71 004e 7091 0000 lds r23,_timer_millis+5
72 0052 8091 0000 lds r24,_timer_millis+6
73 0056 9091 0000 lds r25,_timer_millis+7
74 /* epilogue start */
45:timer.c **** }
75 .loc 1 45 0
76 005a 0895 ret
77 .LFE1:
79 .global timer_micros
81 timer_micros:
82 .LFB2:
46:timer.c ****
47:timer.c **** /*
48:timer.c **** * Returns the number of microseconds which have elapsed since the
49:timer.c **** * last time timer_init() was called. Overflows after about 71 minutes.
50:timer.c **** */
51:timer.c **** uint64_t timer_micros(){
83 .loc 1 51 0
84 005c 2F92 push r2
85 .LCFI0:
86 005e 3F92 push r3
87 .LCFI1:
88 0060 4F92 push r4
89 .LCFI2:
90 0062 5F92 push r5
91 .LCFI3:
92 0064 6F92 push r6
93 .LCFI4:
94 0066 7F92 push r7
95 .LCFI5:
96 0068 8F92 push r8
97 .LCFI6:
98 006a 9F92 push r9
99 .LCFI7:
100 006c AF92 push r10
101 .LCFI8:
102 006e BF92 push r11
103 .LCFI9:
104 0070 CF92 push r12
105 .LCFI10:
106 0072 DF92 push r13
107 .LCFI11:
108 0074 EF92 push r14
109 .LCFI12:
110 0076 FF92 push r15
111 .LCFI13:
112 0078 0F93 push r16
113 .LCFI14:
114 007a 1F93 push r17
115 .LCFI15:
116 007c CF93 push r28
117 .LCFI16:
118 007e DF93 push r29
119 .LCFI17:
120 0080 0F92 push __tmp_reg__
121 .LCFI18:
122 0082 CDB7 in r28,__SP_L__
123 0084 DEB7 in r29,__SP_H__
124 .LCFI19:
125 /* prologue: function */
126 /* frame size = 1 */
127 /* stack size = 19 */
128 .L__stack_usage = 19
52:timer.c **** return (_timer_millis * 1000);
129 .loc 1 52 0
130 0086 8090 0000 lds r8,_timer_millis
131 008a 7090 0000 lds r7,_timer_millis+1
132 008e 6090 0000 lds r6,_timer_millis+2
133 0092 5090 0000 lds r5,_timer_millis+3
134 0096 4090 0000 lds r4,_timer_millis+4
135 009a 3090 0000 lds r3,_timer_millis+5
136 009e 2090 0000 lds r2,_timer_millis+6
137 00a2 8091 0000 lds r24,_timer_millis+7
138 00a6 8983 std Y+1,r24
139 00a8 282D mov r18,r8
140 00aa 372D mov r19,r7
141 00ac 462D mov r20,r6
142 00ae 552D mov r21,r5
143 00b0 642D mov r22,r4
144 00b2 732D mov r23,r3
145 00b4 822D mov r24,r2
146 00b6 9981 ldd r25,Y+1
147 00b8 02E0 ldi r16,lo8(2)
148 00ba 0E94 0000 call __ashldi3
149 00be F22E mov r15,r18
150 00c0 132F mov r17,r19
151 00c2 E42E mov r14,r20
152 00c4 D52E mov r13,r21
153 00c6 C62E mov r12,r22
154 00c8 B72E mov r11,r23
155 00ca A82E mov r10,r24
156 00cc 992E mov r9,r25
157 00ce 05E0 ldi r16,lo8(5)
158 00d0 0E94 0000 call __ashldi3
159 00d4 B22F mov r27,r18
160 00d6 BF19 sub r27,r15
161 00d8 F1E0 ldi r31,lo8(1)
162 00da 2B17 cp r18,r27
163 00dc 00F0 brlo .L4
164 00de F0E0 ldi r31,lo8(0)
165 .L4:
166 00e0 232F mov r18,r19
167 00e2 211B sub r18,r17
168 00e4 E1E0 ldi r30,lo8(1)
169 00e6 3217 cp r19,r18
170 00e8 00F0 brlo .L5
171 00ea E0E0 ldi r30,lo8(0)
172 .L5:
173 00ec 022F mov r16,r18
174 00ee 0F1B sub r16,r31
175 00f0 31E0 ldi r19,lo8(1)
176 00f2 2017 cp r18,r16
177 00f4 00F0 brlo .L6
178 00f6 30E0 ldi r19,lo8(0)
179 .L6:
180 00f8 E32B or r30,r19
181 00fa 342F mov r19,r20
182 00fc 3E19 sub r19,r14
183 00fe 21E0 ldi r18,lo8(1)
184 0100 4317 cp r20,r19
185 0102 00F0 brlo .L7
186 0104 20E0 ldi r18,lo8(0)
187 .L7:
188 0106 F32E mov r15,r19
189 0108 FE1A sub r15,r30
190 010a 41E0 ldi r20,lo8(1)
191 010c 3F15 cp r19,r15
192 010e 00F0 brlo .L8
193 0110 40E0 ldi r20,lo8(0)
194 .L8:
195 0112 242B or r18,r20
196 0114 452F mov r20,r21
197 0116 4D19 sub r20,r13
198 0118 31E0 ldi r19,lo8(1)
199 011a 5417 cp r21,r20
200 011c 00F0 brlo .L9
201 011e 30E0 ldi r19,lo8(0)
202 .L9:
203 0120 142F mov r17,r20
204 0122 121B sub r17,r18
205 0124 21E0 ldi r18,lo8(1)
206 0126 4117 cp r20,r17
207 0128 00F0 brlo .L10
208 012a 20E0 ldi r18,lo8(0)
209 .L10:
210 012c 322B or r19,r18
211 012e 462F mov r20,r22
212 0130 4C19 sub r20,r12
213 0132 21E0 ldi r18,lo8(1)
214 0134 6417 cp r22,r20
215 0136 00F0 brlo .L11
216 0138 20E0 ldi r18,lo8(0)
217 .L11:
218 013a A42F mov r26,r20
219 013c A31B sub r26,r19
220 013e 31E0 ldi r19,lo8(1)
221 0140 4A17 cp r20,r26
222 0142 00F0 brlo .L12
223 0144 30E0 ldi r19,lo8(0)
224 .L12:
225 0146 232B or r18,r19
226 0148 472F mov r20,r23
227 014a 4B19 sub r20,r11
228 014c 31E0 ldi r19,lo8(1)
229 014e 7417 cp r23,r20
230 0150 00F0 brlo .L13
231 0152 30E0 ldi r19,lo8(0)
232 .L13:
233 0154 E42F mov r30,r20
234 0156 E21B sub r30,r18
235 0158 21E0 ldi r18,lo8(1)
236 015a 4E17 cp r20,r30
237 015c 00F0 brlo .L14
238 015e 20E0 ldi r18,lo8(0)
239 .L14:
240 0160 322B or r19,r18
241 0162 482F mov r20,r24
242 0164 4A19 sub r20,r10
243 0166 21E0 ldi r18,lo8(1)
244 0168 8417 cp r24,r20
245 016a 00F0 brlo .L15
246 016c 20E0 ldi r18,lo8(0)
247 .L15:
248 016e F42F mov r31,r20
249 0170 F31B sub r31,r19
250 0172 81E0 ldi r24,lo8(1)
251 0174 4F17 cp r20,r31
252 0176 00F0 brlo .L16
253 0178 80E0 ldi r24,lo8(0)
254 .L16:
255 017a 282B or r18,r24
256 017c 9919 sub r25,r9
257 017e 921B sub r25,r18
258 0180 2B2F mov r18,r27
259 0182 280D add r18,r8
260 0184 31E0 ldi r19,lo8(1)
261 0186 2B17 cp r18,r27
262 0188 00F0 brlo .L17
263 018a 30E0 ldi r19,lo8(0)
264 .L17:
265 018c 700E add r7,r16
266 018e 41E0 ldi r20,lo8(1)
267 0190 7016 cp r7,r16
268 0192 00F0 brlo .L18
269 0194 40E0 ldi r20,lo8(0)
270 .L18:
271 0196 370D add r19,r7
272 0198 81E0 ldi r24,lo8(1)
273 019a 3715 cp r19,r7
274 019c 00F0 brlo .L19
275 019e 80E0 ldi r24,lo8(0)
276 .L19:
277 01a0 482B or r20,r24
278 01a2 6F0C add r6,r15
279 01a4 51E0 ldi r21,lo8(1)
280 01a6 6F14 cp r6,r15
281 01a8 00F0 brlo .L20
282 01aa 50E0 ldi r21,lo8(0)
283 .L20:
284 01ac 460D add r20,r6
285 01ae 81E0 ldi r24,lo8(1)
286 01b0 4615 cp r20,r6
287 01b2 00F0 brlo .L21
288 01b4 80E0 ldi r24,lo8(0)
289 .L21:
290 01b6 582B or r21,r24
291 01b8 510E add r5,r17
292 01ba 61E0 ldi r22,lo8(1)
293 01bc 5116 cp r5,r17
294 01be 00F0 brlo .L22
295 01c0 60E0 ldi r22,lo8(0)
296 .L22:
297 01c2 550D add r21,r5
298 01c4 81E0 ldi r24,lo8(1)
299 01c6 5515 cp r21,r5
300 01c8 00F0 brlo .L23
301 01ca 80E0 ldi r24,lo8(0)
302 .L23:
303 01cc 682B or r22,r24
304 01ce 4A0E add r4,r26
305 01d0 71E0 ldi r23,lo8(1)
306 01d2 4A16 cp r4,r26
307 01d4 00F0 brlo .L24
308 01d6 70E0 ldi r23,lo8(0)
309 .L24:
310 01d8 640D add r22,r4
311 01da 81E0 ldi r24,lo8(1)
312 01dc 6415 cp r22,r4
313 01de 00F0 brlo .L25
314 01e0 80E0 ldi r24,lo8(0)
315 .L25:
316 01e2 782B or r23,r24
317 01e4 3E0E add r3,r30
318 01e6 81E0 ldi r24,lo8(1)
319 01e8 3E16 cp r3,r30
320 01ea 00F0 brlo .L26
321 01ec 80E0 ldi r24,lo8(0)
322 .L26:
323 01ee 730D add r23,r3
324 01f0 E1E0 ldi r30,lo8(1)
325 01f2 7315 cp r23,r3
326 01f4 00F0 brlo .L27
327 01f6 E0E0 ldi r30,lo8(0)
328 .L27:
329 01f8 8E2B or r24,r30
330 01fa 2F0E add r2,r31
331 01fc E1E0 ldi r30,lo8(1)
332 01fe 2F16 cp r2,r31
333 0200 00F0 brlo .L28
334 0202 E0E0 ldi r30,lo8(0)
335 .L28:
336 0204 820D add r24,r2
337 0206 F1E0 ldi r31,lo8(1)
338 0208 8215 cp r24,r2
339 020a 00F0 brlo .L29
340 020c F0E0 ldi r31,lo8(0)
341 .L29:
342 020e EF2B or r30,r31
343 0210 A981 ldd r26,Y+1
344 0212 9A0F add r25,r26
345 0214 9E0F add r25,r30
346 0216 03E0 ldi r16,lo8(3)
347 0218 0E94 0000 call __ashldi3
348 /* epilogue start */
53:timer.c **** }
349 .loc 1 53 0
350 021c 0F90 pop __tmp_reg__
351 021e DF91 pop r29
352 0220 CF91 pop r28
353 0222 1F91 pop r17
354 0224 0F91 pop r16
355 0226 FF90 pop r15
356 0228 EF90 pop r14
357 022a DF90 pop r13
358 022c CF90 pop r12
359 022e BF90 pop r11
360 0230 AF90 pop r10
361 0232 9F90 pop r9
362 0234 8F90 pop r8
363 0236 7F90 pop r7
364 0238 6F90 pop r6
365 023a 5F90 pop r5
366 023c 4F90 pop r4
367 023e 3F90 pop r3
368 0240 2F90 pop r2
369 0242 0895 ret
370 .LFE2:
372 .global __vector_14
374 __vector_14:
375 .LFB3:
54:timer.c ****
55:timer.c ****
56:timer.c **** /*
57:timer.c **** * The ISR for timer0 overflow. Increment the _timer_count here, and do the calculcations
58:timer.c **** * to increment _timer_millis as needed.
59:timer.c **** */
60:timer.c **** ISR(TIMER0_COMPA_vect){
376 .loc 1 60 0
377 0244 1F92 push r1
378 .LCFI20:
379 0246 0F92 push r0
380 .LCFI21:
381 0248 0FB6 in r0,__SREG__
382 024a 0F92 push r0
383 024c 1124 clr __zero_reg__
384 024e 2F93 push r18
385 .LCFI22:
386 0250 3F93 push r19
387 .LCFI23:
388 0252 4F93 push r20
389 .LCFI24:
390 0254 5F93 push r21
391 .LCFI25:
392 0256 6F93 push r22
393 .LCFI26:
394 0258 7F93 push r23
395 .LCFI27:
396 025a 8F93 push r24
397 .LCFI28:
398 025c 9F93 push r25
399 .LCFI29:
400 025e AF93 push r26
401 .LCFI30:
402 0260 EF93 push r30
403 .LCFI31:
404 0262 FF93 push r31
405 .LCFI32:
406 /* prologue: Signal */
407 /* frame size = 0 */
408 /* stack size = 14 */
409 .L__stack_usage = 14
61:timer.c **** TCNT0 = 0;
410 .loc 1 61 0
411 0264 16BC out 70-0x20,__zero_reg__
62:timer.c **** _timer_millis++;
412 .loc 1 62 0
413 0266 4091 0000 lds r20,_timer_millis
414 026a 3091 0000 lds r19,_timer_millis+1
415 026e 2091 0000 lds r18,_timer_millis+2
416 0272 9091 0000 lds r25,_timer_millis+3
417 0276 8091 0000 lds r24,_timer_millis+4
418 027a F091 0000 lds r31,_timer_millis+5
419 027e E091 0000 lds r30,_timer_millis+6
420 0282 A091 0000 lds r26,_timer_millis+7
421 0286 642F mov r22,r20
422 0288 6F5F subi r22,lo8(-(1))
423 028a 51E0 ldi r21,lo8(1)
424 028c 6417 cp r22,r20
425 028e 00F0 brlo .L31
426 0290 50E0 ldi r21,lo8(0)
427 .L31:
428 0292 530F add r21,r19
429 0294 41E0 ldi r20,lo8(1)
430 0296 5317 cp r21,r19
431 0298 00F0 brlo .L33
432 029a 40E0 ldi r20,lo8(0)
433 .L33:
434 029c 420F add r20,r18
435 029e 31E0 ldi r19,lo8(1)
436 02a0 4217 cp r20,r18
437 02a2 00F0 brlo .L35
438 02a4 30E0 ldi r19,lo8(0)
439 .L35:
440 02a6 390F add r19,r25
441 02a8 21E0 ldi r18,lo8(1)
442 02aa 3917 cp r19,r25
443 02ac 00F0 brlo .L37
444 02ae 20E0 ldi r18,lo8(0)
445 .L37:
446 02b0 280F add r18,r24
447 02b2 91E0 ldi r25,lo8(1)
448 02b4 2817 cp r18,r24
449 02b6 00F0 brlo .L39
450 02b8 90E0 ldi r25,lo8(0)
451 .L39:
452 02ba 9F0F add r25,r31
453 02bc 81E0 ldi r24,lo8(1)
454 02be 9F17 cp r25,r31
455 02c0 00F0 brlo .L41
456 02c2 80E0 ldi r24,lo8(0)
457 .L41:
458 02c4 8E0F add r24,r30
459 02c6 71E0 ldi r23,lo8(1)
460 02c8 8E17 cp r24,r30
461 02ca 00F0 brlo .L43
462 02cc 70E0 ldi r23,lo8(0)
463 .L43:
464 02ce 7A0F add r23,r26
465 02d0 6093 0000 sts _timer_millis,r22
466 02d4 5093 0000 sts _timer_millis+1,r21
467 02d8 4093 0000 sts _timer_millis+2,r20
468 02dc 3093 0000 sts _timer_millis+3,r19
469 02e0 2093 0000 sts _timer_millis+4,r18
470 02e4 9093 0000 sts _timer_millis+5,r25
471 02e8 8093 0000 sts _timer_millis+6,r24
472 02ec 7093 0000 sts _timer_millis+7,r23
473 /* epilogue start */
63:timer.c **** }
474 .loc 1 63 0
475 02f0 FF91 pop r31
476 02f2 EF91 pop r30
477 02f4 AF91 pop r26
478 02f6 9F91 pop r25
479 02f8 8F91 pop r24
480 02fa 7F91 pop r23
481 02fc 6F91 pop r22
482 02fe 5F91 pop r21
483 0300 4F91 pop r20
484 0302 3F91 pop r19
485 0304 2F91 pop r18
486 0306 0F90 pop r0
487 0308 0FBE out __SREG__,r0
488 030a 0F90 pop r0
489 030c 1F90 pop r1
490 030e 1895 reti
491 .LFE3:
493 .lcomm _timer_millis,8
738 .Letext0:
739 .file 2 "/usr/local/Cellar/avr-gcc/4.6.1/lib/gcc/avr/4.6.1/../../../../avr/include/stdint.h"
DEFINED SYMBOLS
*ABS*:0000000000000000 timer.c
/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:2 *ABS*:000000000000003f __SREG__
/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:3 *ABS*:000000000000003e __SP_H__
/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:4 *ABS*:000000000000003d __SP_L__
/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:5 *ABS*:0000000000000000 __tmp_reg__
/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:6 *ABS*:0000000000000001 __zero_reg__
/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:13 .text:0000000000000000 timer_init
.bss:0000000000000000 _timer_millis
/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:58 .text:000000000000003a timer_millis
/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:81 .text:000000000000005c timer_micros
/var/folders/6p/hvps1d6n58jfd6qghfhb96600000gn/T//ccElzoTR.s:374 .text:0000000000000244 __vector_14
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__ashldi3