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

📄 stm8_tsl_timebase.ls

📁 STM8s
💻 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 + -