📄 kertimer.lst
字号:
1 .file "kertimer.c"
2 .arch atmega128
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
11 .text
12 .Ltext0:
223 timer0_setInterval:
1:kertimer.c **** //----------------------------------------------------//
2:kertimer.c **** //-------Institute Of Computing Technology-----------//
3:kertimer.c **** //------------Chinese Academic Science---------------//
4:kertimer.c **** //-----中国科学院计算技术研究所先进测试技术实验室-----//
5:kertimer.c **** //----------------------------------------------------//
6:kertimer.c ****
7:kertimer.c **** // **************************************************
8:kertimer.c **** // * @copyright:nbicc_lpp
9:kertimer.c **** // * @this is timer0 support
10:kertimer.c **** // * @author zhouqiang (zhouhongren@163.com)
11:kertimer.c **** // * liulingyi (lingyiliu@ict.ac.cn)
12:kertimer.c **** // * @data:2005.12.02
13:kertimer.c **** // * @version:0.0.1
14:kertimer.c **** // * @updata:$
15:kertimer.c **** // **************************************************
16:kertimer.c ****
17:kertimer.c ****
18:kertimer.c **** #include "kertimer.h"
19:kertimer.c ****
20:kertimer.c **** //----------------------------------------------------------------
21:kertimer.c **** //timer0 setup is added by zhouqiang in 2005.12.02
22:kertimer.c **** //----------------------------------------------------------------
23:kertimer.c **** /**
24:kertimer.c **** * set Timer/Counter0 to be asynchronous
25:kertimer.c **** * from the CPU clock with a second external
26:kertimer.c **** * clock(32,768kHz)driving it
27:kertimer.c **** **/
28:kertimer.c **** static void timer0_hardware_init(uint8_t interval, uint8_t scale){
29:kertimer.c **** { os_atomic_t _nesc_atomic = os_atomic_start();
30:kertimer.c **** {
31:kertimer.c **** scale &= 0x7;
32:kertimer.c **** scale |= 0x8;
33:kertimer.c ****
34:kertimer.c ****
35:kertimer.c **** TIMSK &= ((unsigned char)~(1 << (TOIE0)));
36:kertimer.c **** TIMSK &= ((unsigned char)~(1 << (OCIE0)));
37:kertimer.c **** //!< Disable TC0 interrupt
38:kertimer.c ****
39:kertimer.c **** ASSR |= (1 << (AS0));
40:kertimer.c **** TCCR0 = scale;
41:kertimer.c **** TCNT0 = 0;
42:kertimer.c **** OCR0 = interval;
43:kertimer.c **** TIMSK |= (1 << (OCIE0));
44:kertimer.c **** }
45:kertimer.c **** os_atomic_end(_nesc_atomic); }
46:kertimer.c ****
47:kertimer.c **** }
48:kertimer.c ****
49:kertimer.c **** static void timer0_setInterval(uint8_t val)
50:kertimer.c **** {
225 .LM1:
226 /* prologue: frame size=0 */
227 /* prologue end (size=0) */
228 0000 282F mov r18,r24
51:kertimer.c **** uint8_t interval;
52:kertimer.c **** if ((ASSR & (_BV(OCR0UB) | _BV(TCN0UB))) != 0) {
230 .LM2:
231 0002 80B7 in r24,80-0x20
232 0004 9927 clr r25
233 0006 8670 andi r24,lo8(6)
234 0008 9070 andi r25,hi8(6)
235 000a 892B or r24,r25
236 000c 61F4 brne .L1
53:kertimer.c **** return;
54:kertimer.c **** }
55:kertimer.c **** if(val > 250) {interval = 250;}
238 .LM3:
239 000e 2B3F cpi r18,lo8(-5)
240 0010 10F0 brlo .L3
241 0012 8AEF ldi r24,lo8(-6)
242 0014 06C0 rjmp .L4
243 .L3:
56:kertimer.c **** else if(val <= 2) {interval = 2;}
245 .LM4:
246 0016 2330 cpi r18,lo8(3)
247 0018 10F4 brsh .L5
248 001a 82E0 ldi r24,lo8(2)
249 001c 02C0 rjmp .L4
250 .L5:
57:kertimer.c **** else {interval = (uint8_t)val - 1;}
252 .LM5:
253 001e 822F mov r24,r18
254 0020 8150 subi r24,lo8(-(-1))
255 .L4:
58:kertimer.c **** TCNT0 = 0;
257 .LM6:
258 0022 12BE out 82-0x20,__zero_reg__
59:kertimer.c **** OCR0 = interval;
260 .LM7:
261 0024 81BF out 81-0x20,r24
262 .L1:
263 0026 0895 ret
264 /* epilogue: frame size=0 */
265 0028 0895 ret
266 /* epilogue end (size=1) */
267 /* function timer0_setInterval size 21 (20) */
271 .global timer0_getInterval
273 timer0_getInterval:
60:kertimer.c ****
61:kertimer.c **** }
62:kertimer.c ****
63:kertimer.c **** inline uint8_t timer0_getInterval() {return OCR0 + 1;}
275 .LM8:
276 /* prologue: frame size=0 */
277 /* prologue end (size=0) */
278 002a 81B7 in r24,81-0x20
279 002c 8F5F subi r24,lo8(-(1))
280 002e 9927 clr r25
281 /* epilogue: frame size=0 */
282 0030 0895 ret
283 /* epilogue end (size=1) */
284 /* function timer0_getInterval size 4 (3) */
287 .global timer0_hardware_get_counter
289 timer0_hardware_get_counter:
64:kertimer.c ****
65:kertimer.c **** inline uint8_t timer0_hardware_get_counter()
66:kertimer.c **** {
291 .LM9:
292 /* prologue: frame size=0 */
293 /* prologue end (size=0) */
67:kertimer.c **** return TCNT0;
295 .LM10:
296 0032 82B7 in r24,82-0x20
68:kertimer.c **** }
298 .LM11:
299 0034 9927 clr r25
300 /* epilogue: frame size=0 */
301 0036 0895 ret
302 /* epilogue end (size=1) */
303 /* function timer0_hardware_get_counter size 3 (2) */
306 .global kertimer_init
308 kertimer_init:
69:kertimer.c ****
70:kertimer.c **** //----------------------------------------------------------------
71:kertimer.c **** //kertimer setup is added by zhouqiang in 2005.12.02,timer0 is used
72:kertimer.c **** //----------------------------------------------------------------
73:kertimer.c ****
74:kertimer.c **** void kertimer_init(void)
75:kertimer.c **** {
310 .LM12:
311 /* prologue: frame size=0 */
312 0038 1F93 push r17
313 /* prologue end (size=1) */
76:kertimer.c **** mState=0;
315 .LM13:
316 003a 1092 0000 sts mState,__zero_reg__
317 003e 1092 0000 sts (mState)+1,__zero_reg__
318 0042 1092 0000 sts (mState)+2,__zero_reg__
319 0046 1092 0000 sts (mState)+3,__zero_reg__
77:kertimer.c **** setIntervalFlag = 0;
321 .LM14:
322 004a 1092 0000 sts setIntervalFlag,__zero_reg__
78:kertimer.c **** queue_head = queue_tail = -1;
324 .LM15:
325 004e 8FEF ldi r24,lo8(-1)
326 0050 8093 0000 sts queue_tail,r24
327 0054 8093 0000 sts queue_head,r24
79:kertimer.c **** queue_size = 0;
329 .LM16:
330 0058 1092 0000 sts queue_size,__zero_reg__
80:kertimer.c **** mScale = 0x05;//prescale time0 with 128
332 .LM17:
333 005c 85E0 ldi r24,lo8(5)
334 005e 8093 0000 sts mScale,r24
81:kertimer.c **** mInterval = maxTimerInterval;
336 .LM18:
337 0062 16EE ldi r17,lo8(-26)
338 0064 1093 0000 sts mInterval,r17
339 .LBB2:
340 .LBB3:
341 .LBB4:
343 .LM19:
344 0068 0E94 0000 call os_atomic_start
346 .LM20:
347 006c 97B7 in r25,87-0x20
348 006e 9E7F andi r25,lo8(-2)
349 0070 97BF out 87-0x20,r25
351 .LM21:
352 0072 97B7 in r25,87-0x20
353 0074 9D7F andi r25,lo8(-3)
354 0076 97BF out 87-0x20,r25
356 .LM22:
357 0078 90B7 in r25,80-0x20
358 007a 9860 ori r25,lo8(8)
359 007c 90BF out 80-0x20,r25
361 .LM23:
362 007e 9DE0 ldi r25,lo8(13)
363 0080 93BF out 83-0x20,r25
365 .LM24:
366 0082 12BE out 82-0x20,__zero_reg__
368 .LM25:
369 0084 11BF out 81-0x20,r17
371 .LM26:
372 0086 97B7 in r25,87-0x20
373 0088 9260 ori r25,lo8(2)
374 008a 97BF out 87-0x20,r25
376 .LM27:
377 008c 0E94 0000 call os_atomic_end
378 .LBE4:
379 .LBE3:
380 .LBE2:
381 /* epilogue: frame size=0 */
382 0090 1F91 pop r17
383 0092 0895 ret
384 /* epilogue end (size=2) */
385 /* function kertimer_init size 46 (43) */
395 .global kertimer_start
397 kertimer_start:
82:kertimer.c **** timer0_hardware_init(mInterval,mScale);
83:kertimer.c ****
84:kertimer.c **** }
85:kertimer.c ****
86:kertimer.c **** uint8_t kertimer_start (uint8_t id,uint8_t type, uint32_t interval,void (*fun)(void))
87:kertimer.c **** {
399 .LM28:
400 /* prologue: frame size=0 */
401 0094 AF92 push r10
402 0096 BF92 push r11
403 0098 CF92 push r12
404 009a DF92 push r13
405 009c EF92 push r14
406 009e FF92 push r15
407 00a0 0F93 push r16
408 00a2 1F93 push r17
409 00a4 CF93 push r28
410 /* prologue end (size=9) */
411 00a6 5901 movw r10,r18
412 00a8 6A01 movw r12,r20
413 00aa 9801 movw r18,r16
88:kertimer.c **** uint8_t diff;
89:kertimer.c **** if (id >= KER_TIMERS) return FAIL;
415 .LM29:
416 00ac 8330 cpi r24,lo8(3)
417 00ae 08F0 brlo .+2
418 00b0 58C0 rjmp .L11
90:kertimer.c **** if (type>1) return FAIL;
420 .LM30:
421 00b2 6230 cpi r22,lo8(2)
422 00b4 08F0 brlo .+2
423 00b6 55C0 rjmp .L11
91:kertimer.c **** mTimerList[id].ticks = interval ;
425 .LM31:
426 00b8 E82E mov r14,r24
427 00ba FF24 clr r15
428 00bc 8BE0 ldi r24,lo8(11)
429 00be 90E0 ldi r25,hi8(11)
430 00c0 E89E mul r14,r24
431 00c2 8001 movw r16,r0
432 00c4 E99E mul r14,r25
433 00c6 100D add r17,r0
434 00c8 F89E mul r15,r24
435 00ca 100D add r17,r0
436 00cc 1124 clr r1
437 00ce 0050 subi r16,lo8(-(mTimerList))
438 00d0 1040 sbci r17,hi8(-(mTimerList))
439 00d2 F801 movw r30,r16
440 00d4 A182 std Z+1,r10
441 00d6 B282 std Z+2,r11
442 00d8 C382 std Z+3,r12
443 00da D482 std Z+4,r13
92:kertimer.c **** mTimerList[id].type = type;
445 .LM32:
446 00dc 6083 st Z,r22
93:kertimer.c **** mTimerList[id].tp=fun;
448 .LM33:
449 00de 2187 std Z+9,r18
450 00e0 3287 std Z+10,r19
451 .LBB5:
94:kertimer.c ****
95:kertimer.c **** { os_atomic_t _nesc_atomic = os_atomic_start();
453 .LM34:
454 00e2 0E94 0000 call os_atomic_start
455 00e6 C82F mov r28,r24
456 .LBB6:
457 .LBB7:
459 .LM35:
460 00e8 82B7 in r24,82-0x20
461 .LBE7:
462 .LBE6:
96:kertimer.c **** {
97:kertimer.c **** diff = timer0_hardware_get_counter();
98:kertimer.c **** interval += diff;
464 .LM36:
465 00ea A80E add r10,r24
466 00ec B11C adc r11,__zero_reg__
467 00ee C11C adc r12,__zero_reg__
468 00f0 D11C adc r13,__zero_reg__
99:kertimer.c **** mTimerList[id].ticksLeft = interval;
470 .LM37:
471 00f2 F801 movw r30,r16
472 00f4 A582 std Z+5,r10
473 00f6 B682 std Z+6,r11
474 00f8 C782 std Z+7,r12
475 00fa D086 std Z+8,r13
100:kertimer.c **** mState|=(0x1L<<id);
477 .LM38:
478 00fc 21E0 ldi r18,lo8(1)
479 00fe 30E0 ldi r19,hi8(1)
480 0100 40E0 ldi r20,hlo8(1)
481 0102 50E0 ldi r21,hhi8(1)
482 0104 04C0 rjmp 2f
483 0106 220F 1: lsl r18
484 0108 331F rol r19
485 010a 441F rol r20
486 010c 551F rol r21
487 010e EA94 2: dec r14
488 0110 D2F7 brpl 1b
489 0112 8091 0000 lds r24,mState
490 0116 9091 0000 lds r25,(mState)+1
491 011a A091 0000 lds r26,(mState)+2
492 011e B091 0000 lds r27,(mState)+3
493 0122 822B or r24,r18
494 0124 932B or r25,r19
495 0126 A42B or r26,r20
496 0128 B52B or r27,r21
497 012a 8093 0000 sts mState,r24
498 012e 9093 0000 sts (mState)+1,r25
499 0132 A093 0000 sts (mState)+2,r26
500 0136 B093 0000 sts (mState)+3,r27
101:kertimer.c **** if (interval < mInterval)
502 .LM39:
503 013a 8091 0000 lds r24,mInterval
504 013e 9927 clr r25
505 0140 AA27 clr r26
506 0142 BB27 clr r27
507 0144 A816 cp r10,r24
508 0146 B906 cpc r11,r25
509 0148 CA06 cpc r12,r26
510 014a DB06 cpc r13,r27
511 014c 38F4 brsh .L15
102:kertimer.c **** {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -