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

📄 stm8_tsl_rc_timerdriver.ls

📁 STM8-触摸例程
💻 LS
字号:
   1                     ; C Compiler for STM8 (COSMIC Software)
   2                     ; Generator V4.2.8 - 03 Dec 2008
   3                     ; Optimizer V4.2.8 - 03 Dec 2008
  39                     	bsct
  40  0000               _TSL_Tick_Base:
  41  0000 00            	dc.b	0
  42  0001               _TSL_Tick_10ms:
  43  0001 00            	dc.b	0
  44  0002               _TSL_Tick_100ms:
  45  0002 00            	dc.b	0
  46  0003               _TSL_TickCount_ECS_10ms:
  47  0003 00            	dc.b	0
  48  0004               _TSL_Tick_User:
  49  0004 00            	dc.b	0
  84                     ; 58 void TSL_Timer_Init(void)
  84                     ; 59 {
  86                     	switch	.text
  87  0000               _TSL_Timer_Init:
  91                     ; 61   TSL_Tick_100ms = 0;
  93  0000 3f02          	clr	_TSL_Tick_100ms
  94                     ; 62   TSL_Tick_10ms = 0;
  96  0002 3f01          	clr	_TSL_Tick_10ms
  97                     ; 63   TSL_Tick_Base = 0;
  99  0004 3f00          	clr	_TSL_Tick_Base
 100                     ; 64   TSL_TickCount_ECS_10ms = 0;
 102  0006 3f03          	clr	_TSL_TickCount_ECS_10ms
 103                     ; 65   TSL_Tick_Flags.whole = 0;
 105  0008 3f00          	clr	_TSL_Tick_Flags
 106                     ; 67   TIM4->SR1 = 0;       // clear overflow flag
 108  000a 725f5342      	clr	21314
 109                     ; 69   if ( CLK->CKDIVR == 0x00 ) // Max CPU freq = 16 MHz
 111  000e 725d50c6      	tnz	20678
 112  0012 2606          	jrne	L53
 113                     ; 71     TIM4->PSCR = 6;     // Prescaler to divide Fcpu by 64: 4 us clock.
 115  0014 35065345      	mov	21317,#6
 117  0018 2004          	jra	L73
 118  001a               L53:
 119                     ; 75     TIM4->PSCR = 7;     // Prescaler to divide Fcpu by 128: x.xx us clock.
 121  001a 35075345      	mov	21317,#7
 122  001e               L73:
 123                     ; 78   TIM4->ARR = 124;      // 125 * 4 us = 500 us.
 125  001e 357c5346      	mov	21318,#124
 126                     ; 79   TIM4->IER = 0x01;     // Enable interrupt
 128  0022 35015341      	mov	21313,#1
 129                     ; 80   TIM4->CR1 = 0x01;     // Start timer
 131  0026 35015340      	mov	21312,#1
 132                     ; 82 }
 135  002a 81            	ret	
 161                     ; 95 void TSL_Timer_Check_1sec_Tick(void)
 161                     ; 96 {
 162                     	switch	.text
 163  002b               _TSL_Timer_Check_1sec_Tick:
 167                     ; 97   if ( TSL_Tick_100ms >= 10 )
 169  002b b602          	ld	a,_TSL_Tick_100ms
 170  002d a00a          	sub	a,#10
 171  002f 2506          	jrult	L15
 172                     ; 99     TSL_Tick_100ms -= 10;
 174  0031 b702          	ld	_TSL_Tick_100ms,a
 175                     ; 100     TSL_Tick_Flags.b.DTO_1sec = 1;  // Tick Flag for Max On Duration set every second.
 177  0033 72100000      	bset	_TSL_Tick_Flags,#0
 178  0037               L15:
 179                     ; 102 }
 182  0037 81            	ret	
 209                     ; 115 void TSL_Timer_Check_100ms_Tick(void)
 209                     ; 116 {
 210                     	switch	.text
 211  0038               _TSL_Timer_Check_100ms_Tick:
 215                     ; 117   if ( TSL_Tick_10ms >= 10 )
 217  0038 b601          	ld	a,_TSL_Tick_10ms
 218  003a a00a          	sub	a,#10
 219  003c 2506          	jrult	L36
 220                     ; 119     TSL_Tick_10ms -= 10;
 222  003e b701          	ld	_TSL_Tick_10ms,a
 223                     ; 120     TSL_Tick_100ms++;
 225  0040 3c02          	inc	_TSL_Tick_100ms
 226                     ; 121     TSL_Timer_Check_1sec_Tick();
 228  0042 ade7          	call	_TSL_Timer_Check_1sec_Tick
 230  0044               L36:
 231                     ; 123 }
 234  0044 81            	ret	
 262                     ; 136 void TSL_Timer_Check_10ms_Tick(void)
 262                     ; 137 {
 263                     	switch	.text
 264  0045               _TSL_Timer_Check_10ms_Tick:
 268                     ; 138   if ( TSL_Tick_Base >= TICK_FACTOR_10MS )
 270  0045 b600          	ld	a,_TSL_Tick_Base
 271  0047 a014          	sub	a,#20
 272  0049 2508          	jrult	L57
 273                     ; 140     TSL_Tick_Base -= TICK_FACTOR_10MS;
 275  004b b700          	ld	_TSL_Tick_Base,a
 276                     ; 141     TSL_Tick_10ms++;
 278  004d 3c01          	inc	_TSL_Tick_10ms
 279                     ; 142     TSL_TickCount_ECS_10ms++;   // Tick Flag for Drift increment every 10 ms.
 281  004f 3c03          	inc	_TSL_TickCount_ECS_10ms
 282                     ; 143     TSL_Timer_Check_100ms_Tick();
 284  0051 ade5          	call	_TSL_Timer_Check_100ms_Tick
 286  0053               L57:
 287                     ; 145 }
 290  0053 81            	ret	
 317                     ; 159 @interrupt void TSL_Timer_ISR(void)
 317                     ; 160 {
 318                     	switch	.text
 319  0054               _TSL_Timer_ISR:
 321  0054 3b0002        	push	c_x+2
 322  0057 be00          	ldw	x,c_x
 323  0059 89            	pushw	x
 324  005a 3b0002        	push	c_y+2
 325  005d be00          	ldw	x,c_y
 328                     ; 162   TIM4->SR1 = 0;      // clear overflow flag
 330  005f 725f5342      	clr	21314
 331  0063 89            	pushw	x
 332                     ; 164   TSL_Tick_Base++;
 334  0064 3c00          	inc	_TSL_Tick_Base
 335                     ; 165   TSL_Timer_Check_10ms_Tick();
 337  0066 addd          	call	_TSL_Timer_Check_10ms_Tick
 339                     ; 167   if (TSL_Tick_Flags.b.User_Start_100ms) /* Application request */
 341  0068 720300000c    	btjf	_TSL_Tick_Flags,#1,L701
 342                     ; 169     TSL_Tick_Flags.b.User_Start_100ms = 0;
 344  006d 72130000      	bres	_TSL_Tick_Flags,#1
 345                     ; 170     TSL_Tick_Flags.b.User_Flag_100ms = 0;
 347  0071 72150000      	bres	_TSL_Tick_Flags,#2
 348                     ; 171     TSL_Tick_User = (TICK_FACTOR_10MS * 10);
 350  0075 35c80004      	mov	_TSL_Tick_User,#200
 351  0079               L701:
 352                     ; 174   if (TSL_Tick_User > 0)
 354  0079 b604          	ld	a,_TSL_Tick_User
 355  007b 2708          	jreq	L111
 356                     ; 176     TSL_Tick_User--;
 358  007d 3a04          	dec	_TSL_Tick_User
 359                     ; 177     if (TSL_Tick_User == 0)
 361  007f 2604          	jrne	L111
 362                     ; 179       TSL_Tick_Flags.b.User_Flag_100ms = 1; /* Give information to Application */
 364  0081 72140000      	bset	_TSL_Tick_Flags,#2
 365  0085               L111:
 366                     ; 183 }
 369  0085 85            	popw	x
 370  0086 bf00          	ldw	c_y,x
 371  0088 320002        	pop	c_y+2
 372  008b 85            	popw	x
 373  008c bf00          	ldw	c_x,x
 374  008e 320002        	pop	c_x+2
 375  0091 80            	iret	
 413                     ; 196 void TSL_Timer_Adjust(u16 Delay)
 413                     ; 197 {
 414                     	switch	.text
 415  0092               _TSL_Timer_Adjust:
 417  0092 89            	pushw	x
 418       00000000      OFST:	set	0
 421                     ; 199   disableInterrupts();
 424  0093 9b            	sim	
 426  0094 1e01          	ldw	x,(OFST+1,sp)
 427  0096               L331:
 428                     ; 203     if (Delay > TICK_FACTOR_10MS) /* delay > 10ms */
 430  0096 a30015        	cpw	x,#21
 431  0099 250b          	jrult	L141
 432                     ; 205       TSL_Tick_Base += TICK_FACTOR_10MS;
 434  009b b600          	ld	a,_TSL_Tick_Base
 435  009d ab14          	add	a,#20
 436  009f b700          	ld	_TSL_Tick_Base,a
 437                     ; 206       Delay -= TICK_FACTOR_10MS;
 439  00a1 1d0014        	subw	x,#20
 440                     ; 207       TSL_Timer_Check_10ms_Tick();
 443  00a4 2003          	jra	L531
 444  00a6               L141:
 445                     ; 211       TSL_Tick_Base++;
 447  00a6 3c00          	inc	_TSL_Tick_Base
 448                     ; 212       Delay--;
 450  00a8 5a            	decw	x
 451                     ; 213       TSL_Timer_Check_10ms_Tick();
 454  00a9               L531:
 455  00a9 1f01          	ldw	(OFST+1,sp),x
 457  00ab ad98          	call	_TSL_Timer_Check_10ms_Tick
 458                     ; 216   while ( Delay );
 460  00ad 1e01          	ldw	x,(OFST+1,sp)
 461  00af 26e5          	jrne	L331
 462                     ; 218   enableInterrupts();
 465  00b1 9a            	rim	
 467                     ; 220 }
 471  00b2 85            	popw	x
 472  00b3 81            	ret	
 654                     	xdef	_TSL_Tick_User
 655                     	xdef	_TSL_Timer_Check_10ms_Tick
 656                     	xdef	_TSL_Timer_Check_100ms_Tick
 657                     	xdef	_TSL_Timer_Check_1sec_Tick
 658                     	xdef	_TSL_Timer_Adjust
 659                     	xdef	_TSL_Timer_ISR
 660                     	xdef	_TSL_Timer_Init
 661                     	switch	.ubsct
 662  0000               _TSL_Tick_Flags:
 663  0000 00            	ds.b	1
 664                     	xdef	_TSL_Tick_Flags
 665                     	xdef	_TSL_TickCount_ECS_10ms
 666                     	xdef	_TSL_Tick_100ms
 667                     	xdef	_TSL_Tick_10ms
 668                     	xdef	_TSL_Tick_Base
 669                     	xref.b	c_x
 670                     	xref.b	c_y
 690                     	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -