⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stm8_tsl_rc_timerdriver.ls

📁 STM8全部资料
💻 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 + -