?? stm8_tsl_timebase.ls
字號:
1 ; C Compiler for STM8 (COSMIC Software)
2 ; Parser V4.9.2 - 29 Jun 2010
3 ; Generator V4.3.5 - 02 Jul 2010
49 bsct
50 0000 _TSL_Tick_Base:
51 0000 00 dc.b 0
52 0001 _TSL_Tick_10ms:
53 0001 00 dc.b 0
54 0002 _TSL_Tick_100ms:
55 0002 00 dc.b 0
56 0003 _TSL_TickCount_ECS_10ms:
57 0003 00 dc.b 0
58 0004 _TSL_Tick_User1:
59 0004 00 dc.b 0
60 0005 _TSL_Tick_User2:
61 0005 00 dc.b 0
96 ; 63 void TSL_Timer_Init(void)
96 ; 64 {
98 switch .text
99 0000 _TSL_Timer_Init:
103 ; 66 TSL_Tick_100ms = 0;
105 0000 3f02 clr _TSL_Tick_100ms
106 ; 67 TSL_Tick_10ms = 0;
108 0002 3f01 clr _TSL_Tick_10ms
109 ; 68 TSL_Tick_Base = 0;
111 0004 3f00 clr _TSL_Tick_Base
112 ; 69 TSL_TickCount_ECS_10ms = 0;
114 0006 3f03 clr _TSL_TickCount_ECS_10ms
115 ; 70 TSL_Tick_Flags.whole = 0;
117 0008 3f00 clr _TSL_Tick_Flags
118 ; 81 TIMTICK->SR1 = 0; // clear overflow flag
120 000a 725f5342 clr 21314
121 ; 83 if (CLK->CKDIVR == 0x00) // Max CPU freq = 16 MHz
123 000e 725d50c6 tnz 20678
124 0012 2606 jrne L53
125 ; 85 TIMTICK->PSCR = 6; // Prescaler to divide Fcpu by 64: 4 us clock.
127 0014 35065345 mov 21317,#6
129 0018 2004 jra L73
130 001a L53:
131 ; 89 TIMTICK->PSCR = 7; // Prescaler to divide Fcpu by 128: x.xx us clock.
133 001a 35075345 mov 21317,#7
134 001e L73:
135 ; 92 TIMTICK->ARR = 124; // 125 * 4 us = 500 us.
137 001e 357c5346 mov 21318,#124
138 ; 93 TIMTICK->IER = 0x01; // Enable interrupt
140 0022 35015341 mov 21313,#1
141 ; 94 TIMTICK->CR1 = 0x01; // Start timer
143 0026 35015340 mov 21312,#1
144 ; 96 }
147 002a 81 ret
173 ; 109 void TSL_Timer_Check_1sec_Tick(void)
173 ; 110 {
174 switch .text
175 002b _TSL_Timer_Check_1sec_Tick:
179 ; 111 if (TSL_Tick_100ms >= 10)
181 002b b602 ld a,_TSL_Tick_100ms
182 002d a10a cp a,#10
183 002f 250a jrult L15
184 ; 113 TSL_Tick_100ms -= 10;
186 0031 b602 ld a,_TSL_Tick_100ms
187 0033 a00a sub a,#10
188 0035 b702 ld _TSL_Tick_100ms,a
189 ; 114 TSL_Tick_Flags.b.DTO_1sec = 1; // Tick Flag for Max On Duration set every second.
191 0037 72100000 bset _TSL_Tick_Flags,#0
192 003b L15:
193 ; 116 }
196 003b 81 ret
223 ; 129 void TSL_Timer_Check_100ms_Tick(void)
223 ; 130 {
224 switch .text
225 003c _TSL_Timer_Check_100ms_Tick:
229 ; 131 if (TSL_Tick_10ms >= 10)
231 003c b601 ld a,_TSL_Tick_10ms
232 003e a10a cp a,#10
233 0040 250a jrult L36
234 ; 133 TSL_Tick_10ms -= 10;
236 0042 b601 ld a,_TSL_Tick_10ms
237 0044 a00a sub a,#10
238 0046 b701 ld _TSL_Tick_10ms,a
239 ; 134 TSL_Tick_100ms++;
241 0048 3c02 inc _TSL_Tick_100ms
242 ; 135 TSL_Timer_Check_1sec_Tick();
244 004a addf call _TSL_Timer_Check_1sec_Tick
246 004c L36:
247 ; 137 }
250 004c 81 ret
278 ; 150 void TSL_Timer_Check_10ms_Tick(void)
278 ; 151 {
279 switch .text
280 004d _TSL_Timer_Check_10ms_Tick:
284 ; 152 if (TSL_Tick_Base >= TICK_FACTOR_10MS)
286 004d b600 ld a,_TSL_Tick_Base
287 004f a114 cp a,#20
288 0051 250c jrult L57
289 ; 154 TSL_Tick_Base -= TICK_FACTOR_10MS;
291 0053 b600 ld a,_TSL_Tick_Base
292 0055 a014 sub a,#20
293 0057 b700 ld _TSL_Tick_Base,a
294 ; 155 TSL_Tick_10ms++;
296 0059 3c01 inc _TSL_Tick_10ms
297 ; 156 TSL_TickCount_ECS_10ms++; // Tick Flag for Drift increment every 10 ms.
299 005b 3c03 inc _TSL_TickCount_ECS_10ms
300 ; 157 TSL_Timer_Check_100ms_Tick();
302 005d addd call _TSL_Timer_Check_100ms_Tick
304 005f L57:
305 ; 159 }
308 005f 81 ret
336 ; 181 INTERRUPT_HANDLER(TSL_Timer_ISR, 23)
336 ; 182 #endif
336 ; 183 #endif
336 ; 184 {
338 switch .text
339 0060 f_TSL_Timer_ISR:
341 0060 3b0002 push c_x+2
342 0063 be00 ldw x,c_x
343 0065 89 pushw x
344 0066 3b0002 push c_y+2
345 0069 be00 ldw x,c_y
346 006b 89 pushw x
349 ; 186 TIMTICK->SR1 = 0; // clear overflow flag
351 006c 725f5342 clr 21314
352 ; 188 TSL_Tick_Base++;
354 0070 3c00 inc _TSL_Tick_Base
355 ; 189 TSL_Timer_Check_10ms_Tick();
357 0072 add9 call _TSL_Timer_Check_10ms_Tick
359 ; 191 if (TSL_Tick_Flags.b.User1_Start_100ms) /* Application request */
361 0074 b600 ld a,_TSL_Tick_Flags
362 0076 a502 bcp a,#2
363 0078 270c jreq L701
364 ; 193 TSL_Tick_Flags.b.User1_Start_100ms = 0;
366 007a 72130000 bres _TSL_Tick_Flags,#1
367 ; 194 TSL_Tick_Flags.b.User1_Flag_100ms = 0;
369 007e 72150000 bres _TSL_Tick_Flags,#2
370 ; 195 TSL_Tick_User1 = (TICK_FACTOR_10MS * 10);
372 0082 35c80004 mov _TSL_Tick_User1,#200
373 0086 L701:
374 ; 198 if (TSL_Tick_Flags.b.User2_Start_100ms) /* Application request */
376 0086 b600 ld a,_TSL_Tick_Flags
377 0088 a508 bcp a,#8
378 008a 270c jreq L111
379 ; 200 TSL_Tick_Flags.b.User2_Start_100ms = 0;
381 008c 72170000 bres _TSL_Tick_Flags,#3
382 ; 201 TSL_Tick_Flags.b.User2_Flag_100ms = 0;
384 0090 72190000 bres _TSL_Tick_Flags,#4
385 ; 202 TSL_Tick_User2 = (TICK_FACTOR_10MS * 10);
387 0094 35c80005 mov _TSL_Tick_User2,#200
388 0098 L111:
389 ; 205 if (TSL_Tick_User1 > 0)
391 0098 3d04 tnz _TSL_Tick_User1
392 009a 270a jreq L311
393 ; 207 TSL_Tick_User1--;
395 009c 3a04 dec _TSL_Tick_User1
396 ; 208 if (TSL_Tick_User1 == 0)
398 009e 3d04 tnz _TSL_Tick_User1
399 00a0 2604 jrne L311
400 ; 210 TSL_Tick_Flags.b.User1_Flag_100ms = 1; /* Give information to Application */
402 00a2 72140000 bset _TSL_Tick_Flags,#2
403 00a6 L311:
404 ; 214 if (TSL_Tick_User2 > 0)
406 00a6 3d05 tnz _TSL_Tick_User2
407 00a8 270a jreq L711
408 ; 216 TSL_Tick_User2--;
410 00aa 3a05 dec _TSL_Tick_User2
411 ; 217 if (TSL_Tick_User2 == 0)
413 00ac 3d05 tnz _TSL_Tick_User2
414 00ae 2604 jrne L711
415 ; 219 TSL_Tick_Flags.b.User2_Flag_100ms = 1; /* Give information to Application */
417 00b0 72180000 bset _TSL_Tick_Flags,#4
418 00b4 L711:
419 ; 225 }
422 00b4 85 popw x
423 00b5 bf00 ldw c_y,x
424 00b7 320002 pop c_y+2
425 00ba 85 popw x
426 00bb bf00 ldw c_x,x
427 00bd 320002 pop c_x+2
428 00c0 80 iret
465 ; 238 void TSL_Timer_Adjust(u16 Delay)
465 ; 239 {
467 switch .text
468 00c1 _TSL_Timer_Adjust:
470 00c1 89 pushw x
471 00000000 OFST: set 0
474 ; 241 disableInterrupts();
477 00c2 9b sim
479 00c3 L141:
480 ; 245 if (Delay > TICK_FACTOR_10MS) /* delay > 10ms */
482 00c3 1e01 ldw x,(OFST+1,sp)
483 00c5 a30015 cpw x,#21
484 00c8 2512 jrult L741
485 ; 247 TSL_Tick_Base += TICK_FACTOR_10MS;
487 00ca b600 ld a,_TSL_Tick_Base
488 00cc ab14 add a,#20
489 00ce b700 ld _TSL_Tick_Base,a
490 ; 248 Delay -= TICK_FACTOR_10MS;
492 00d0 1e01 ldw x,(OFST+1,sp)
493 00d2 1d0014 subw x,#20
494 00d5 1f01 ldw (OFST+1,sp),x
495 ; 249 TSL_Timer_Check_10ms_Tick();
497 00d7 cd004d call _TSL_Timer_Check_10ms_Tick
500 00da 200c jra L341
501 00dc L741:
502 ; 253 TSL_Tick_Base++;
504 00dc 3c00 inc _TSL_Tick_Base
505 ; 254 Delay--;
507 00de 1e01 ldw x,(OFST+1,sp)
508 00e0 1d0001 subw x,#1
509 00e3 1f01 ldw (OFST+1,sp),x
510 ; 255 TSL_Timer_Check_10ms_Tick();
512 00e5 cd004d call _TSL_Timer_Check_10ms_Tick
514 00e8 L341:
515 ; 258 while (Delay);
517 00e8 1e01 ldw x,(OFST+1,sp)
518 00ea 26d7 jrne L141
519 ; 260 enableInterrupts();
522 00ec 9a rim
524 ; 262 }
528 00ed 85 popw x
529 00ee 81 ret
720 xdef _TSL_Tick_User2
721 xdef _TSL_Tick_User1
722 xdef _TSL_Timer_Check_10ms_Tick
723 xdef _TSL_Timer_Check_100ms_Tick
724 xdef _TSL_Timer_Check_1sec_Tick
725 xdef _TSL_Timer_Adjust
726 xdef _TSL_Timer_Init
727 xdef f_TSL_Timer_ISR
728 switch .ubsct
729 0000 _TSL_Tick_Flags:
730 0000 00 ds.b 1
731 xdef _TSL_Tick_Flags
732 xdef _TSL_TickCount_ECS_10ms
733 xdef _TSL_Tick_100ms
734 xdef _TSL_Tick_10ms
735 xdef _TSL_Tick_Base
736 xref.b c_x
737 xref.b c_y
757 end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -