📄 stm8_tsl_rc_timerdriver.ls
字号:
1 ; C Compiler for STM8 (COSMIC Software)
2 ; Parser V4.8.32.1 - 30 Mar 2010
3 ; Generator V4.3.4 - 23 Mar 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_User:
59 0004 00 dc.b 0
94 ; 58 void TSL_Timer_Init(void)
94 ; 59 {
96 switch .text
97 0000 _TSL_Timer_Init:
101 ; 61 TSL_Tick_100ms = 0;
103 0000 3f02 clr _TSL_Tick_100ms
104 ; 62 TSL_Tick_10ms = 0;
106 0002 3f01 clr _TSL_Tick_10ms
107 ; 63 TSL_Tick_Base = 0;
109 0004 3f00 clr _TSL_Tick_Base
110 ; 64 TSL_TickCount_ECS_10ms = 0;
112 0006 3f03 clr _TSL_TickCount_ECS_10ms
113 ; 65 TSL_Tick_Flags.whole = 0;
115 0008 3f00 clr _TSL_Tick_Flags
116 ; 67 TIMTICK->SR1 = 0; // clear overflow flag
118 000a 725f5342 clr 21314
119 ; 69 if ( CLK->CKDIVR == 0x00 ) // Max CPU freq = 16 MHz
121 000e 725d50c6 tnz 20678
122 0012 2606 jrne L53
123 ; 71 TIMTICK->PSCR = 6; // Prescaler to divide Fcpu by 64: 4 us clock.
125 0014 35065345 mov 21317,#6
127 0018 2004 jra L73
128 001a L53:
129 ; 75 TIMTICK->PSCR = 7; // Prescaler to divide Fcpu by 128: x.xx us clock.
131 001a 35075345 mov 21317,#7
132 001e L73:
133 ; 78 TIMTICK->ARR = 124; // 125 * 4 us = 500 us.
135 001e 357c5346 mov 21318,#124
136 ; 79 TIMTICK->IER = 0x01; // Enable interrupt
138 0022 35015341 mov 21313,#1
139 ; 80 TIMTICK->CR1 = 0x01; // Start timer
141 0026 35015340 mov 21312,#1
142 ; 82 }
145 002a 81 ret
171 ; 95 void TSL_Timer_Check_1sec_Tick(void)
171 ; 96 {
172 switch .text
173 002b _TSL_Timer_Check_1sec_Tick:
177 ; 97 if ( TSL_Tick_100ms >= 10 )
179 002b b602 ld a,_TSL_Tick_100ms
180 002d a10a cp a,#10
181 002f 250a jrult L15
182 ; 99 TSL_Tick_100ms -= 10;
184 0031 b602 ld a,_TSL_Tick_100ms
185 0033 a00a sub a,#10
186 0035 b702 ld _TSL_Tick_100ms,a
187 ; 100 TSL_Tick_Flags.b.DTO_1sec = 1; // Tick Flag for Max On Duration set every second.
189 0037 72100000 bset _TSL_Tick_Flags,#0
190 003b L15:
191 ; 102 }
194 003b 81 ret
221 ; 115 void TSL_Timer_Check_100ms_Tick(void)
221 ; 116 {
222 switch .text
223 003c _TSL_Timer_Check_100ms_Tick:
227 ; 117 if ( TSL_Tick_10ms >= 10 )
229 003c b601 ld a,_TSL_Tick_10ms
230 003e a10a cp a,#10
231 0040 250a jrult L36
232 ; 119 TSL_Tick_10ms -= 10;
234 0042 b601 ld a,_TSL_Tick_10ms
235 0044 a00a sub a,#10
236 0046 b701 ld _TSL_Tick_10ms,a
237 ; 120 TSL_Tick_100ms++;
239 0048 3c02 inc _TSL_Tick_100ms
240 ; 121 TSL_Timer_Check_1sec_Tick();
242 004a addf call _TSL_Timer_Check_1sec_Tick
244 004c L36:
245 ; 123 }
248 004c 81 ret
276 ; 136 void TSL_Timer_Check_10ms_Tick(void)
276 ; 137 {
277 switch .text
278 004d _TSL_Timer_Check_10ms_Tick:
282 ; 138 if ( TSL_Tick_Base >= TICK_FACTOR_10MS )
284 004d b600 ld a,_TSL_Tick_Base
285 004f a114 cp a,#20
286 0051 250c jrult L57
287 ; 140 TSL_Tick_Base -= TICK_FACTOR_10MS;
289 0053 b600 ld a,_TSL_Tick_Base
290 0055 a014 sub a,#20
291 0057 b700 ld _TSL_Tick_Base,a
292 ; 141 TSL_Tick_10ms++;
294 0059 3c01 inc _TSL_Tick_10ms
295 ; 142 TSL_TickCount_ECS_10ms++; // Tick Flag for Drift increment every 10 ms.
297 005b 3c03 inc _TSL_TickCount_ECS_10ms
298 ; 143 TSL_Timer_Check_100ms_Tick();
300 005d addd call _TSL_Timer_Check_100ms_Tick
302 005f L57:
303 ; 145 }
306 005f 81 ret
333 ; 159 @interrupt void TSL_Timer_ISR(void)
333 ; 160 {
334 switch .text
335 0060 _TSL_Timer_ISR:
337 0060 3b0002 push c_x+2
338 0063 be00 ldw x,c_x
339 0065 89 pushw x
340 0066 3b0002 push c_y+2
341 0069 be00 ldw x,c_y
342 006b 89 pushw x
345 ; 162 TIMTICK->SR1 = 0; // clear overflow flag
347 006c 725f5342 clr 21314
348 ; 164 TSL_Tick_Base++;
350 0070 3c00 inc _TSL_Tick_Base
351 ; 165 TSL_Timer_Check_10ms_Tick();
353 0072 add9 call _TSL_Timer_Check_10ms_Tick
355 ; 167 if (TSL_Tick_Flags.b.User_Start_100ms) /* Application request */
357 0074 b600 ld a,_TSL_Tick_Flags
358 0076 a502 bcp a,#2
359 0078 270c jreq L701
360 ; 169 TSL_Tick_Flags.b.User_Start_100ms = 0;
362 007a 72130000 bres _TSL_Tick_Flags,#1
363 ; 170 TSL_Tick_Flags.b.User_Flag_100ms = 0;
365 007e 72150000 bres _TSL_Tick_Flags,#2
366 ; 171 TSL_Tick_User = (TICK_FACTOR_10MS * 10);
368 0082 35c80004 mov _TSL_Tick_User,#200
369 0086 L701:
370 ; 174 if (TSL_Tick_User > 0)
372 0086 3d04 tnz _TSL_Tick_User
373 0088 270a jreq L111
374 ; 176 TSL_Tick_User--;
376 008a 3a04 dec _TSL_Tick_User
377 ; 177 if (TSL_Tick_User == 0)
379 008c 3d04 tnz _TSL_Tick_User
380 008e 2604 jrne L111
381 ; 179 TSL_Tick_Flags.b.User_Flag_100ms = 1; /* Give information to Application */
383 0090 72140000 bset _TSL_Tick_Flags,#2
384 0094 L111:
385 ; 183 }
388 0094 85 popw x
389 0095 bf00 ldw c_y,x
390 0097 320002 pop c_y+2
391 009a 85 popw x
392 009b bf00 ldw c_x,x
393 009d 320002 pop c_x+2
394 00a0 80 iret
430 ; 196 void TSL_Timer_Adjust(u16 Delay)
430 ; 197 {
431 switch .text
432 00a1 _TSL_Timer_Adjust:
434 00a1 89 pushw x
435 00000000 OFST: set 0
438 ; 199 disableInterrupts();
441 00a2 9b sim
443 00a3 L131:
444 ; 203 if (Delay > TICK_FACTOR_10MS) /* delay > 10ms */
446 00a3 1e01 ldw x,(OFST+1,sp)
447 00a5 a30015 cpw x,#21
448 00a8 2511 jrult L731
449 ; 205 TSL_Tick_Base += TICK_FACTOR_10MS;
451 00aa b600 ld a,_TSL_Tick_Base
452 00ac ab14 add a,#20
453 00ae b700 ld _TSL_Tick_Base,a
454 ; 206 Delay -= TICK_FACTOR_10MS;
456 00b0 1e01 ldw x,(OFST+1,sp)
457 00b2 1d0014 subw x,#20
458 00b5 1f01 ldw (OFST+1,sp),x
459 ; 207 TSL_Timer_Check_10ms_Tick();
461 00b7 ad94 call _TSL_Timer_Check_10ms_Tick
464 00b9 200b jra L331
465 00bb L731:
466 ; 211 TSL_Tick_Base++;
468 00bb 3c00 inc _TSL_Tick_Base
469 ; 212 Delay--;
471 00bd 1e01 ldw x,(OFST+1,sp)
472 00bf 1d0001 subw x,#1
473 00c2 1f01 ldw (OFST+1,sp),x
474 ; 213 TSL_Timer_Check_10ms_Tick();
476 00c4 ad87 call _TSL_Timer_Check_10ms_Tick
478 00c6 L331:
479 ; 216 while ( Delay );
481 00c6 1e01 ldw x,(OFST+1,sp)
482 00c8 26d9 jrne L131
483 ; 218 enableInterrupts();
486 00ca 9a rim
488 ; 220 }
492 00cb 85 popw x
493 00cc 81 ret
675 xdef _TSL_Tick_User
676 xdef _TSL_Timer_Check_10ms_Tick
677 xdef _TSL_Timer_Check_100ms_Tick
678 xdef _TSL_Timer_Check_1sec_Tick
679 xdef _TSL_Timer_Adjust
680 xdef _TSL_Timer_ISR
681 xdef _TSL_Timer_Init
682 switch .ubsct
683 0000 _TSL_Tick_Flags:
684 0000 00 ds.b 1
685 xdef _TSL_Tick_Flags
686 xdef _TSL_TickCount_ECS_10ms
687 xdef _TSL_Tick_100ms
688 xdef _TSL_Tick_10ms
689 xdef _TSL_Tick_Base
690 xref.b c_x
691 xref.b c_y
711 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -