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

📄 mtc.ls

📁 该程序是ST7MC驱动三洋压缩机(交流)
💻 LS
📖 第 1 页 / 共 5 页
字号:
2529                     ; 355     u16 StatorFreq = MTC_GetStatorFreq();
2531  0185 ade4          	call	_MTC_GetStatorFreq
2533  0187 b7ff          	ld	_MTC_GetSlip$L-1,a
2534  0189 bffe          	ld	_MTC_GetSlip$L-2,x
2535                     ; 357  if (StatorFreq < RotorFreq )
2537  018b b0fd          	sub	a,_MTC_GetSlip$L-3
2538  018d 9f            	ld	a,x
2539  018e b2fc          	sbc	a,_MTC_GetSlip$L-4
2540  0190 2403          	jruge	L7721
2541                     ; 359      return (0);    /* No negative slip returned */
2543  0192 5f            	clr	x
2544  0193 4f            	clr	a
2547  0194 81            	ret	
2548  0195               L7721:
2549                     ; 363         return ( StatorFreq - RotorFreq );
2551  0195 b6ff          	ld	a,_MTC_GetSlip$L-1
2552  0197 b0fd          	sub	a,_MTC_GetSlip$L-3
2553  0199 88            	push	a
2554  019a 9f            	ld	a,x
2555  019b b2fc          	sbc	a,_MTC_GetSlip$L-4
2556  019d 97            	ld	x,a
2557  019e 84            	pop	a
2560  019f 81            	ret	
2597                     	switch	.const
2598  0108               L63:
2599  0108 00000132      	dc.l	306
2600                     ; 383 u16 MTC_GetRotorFreq ( void )
2600                     ; 384 {
2601                     	switch	.text
2603                     	xref.b	_MTC_GetRotorFreq$L
2604  01a0               _MTC_GetRotorFreq:
2607                     ; 387 	if ( MTCStatus & DO_ROLLING_AVRG )
2609  01a0 0f1005        	btjf	_MTCStatus,#7,L1231
2610                     ; 389 		FreqBuffer = GetAvrgTachoPeriod();
2612  01a3 cd0233        	call	_GetAvrgTachoPeriod
2616  01a6 2002          	jra	L3231
2617  01a8               L1231:
2618                     ; 393 		FreqBuffer = GetLastTachoPeriod();
2620  01a8 ad36          	call	_GetLastTachoPeriod
2623  01aa               L3231:
2624  01aa aefc          	ld	x,#_MTC_GetRotorFreq$L-4
2625  01ac cd0000        	call	c_rtol
2626                     ; 396 	if ( ( FreqBuffer <= (u32)SPEED_OVERFLOW ) /*Avoid u32 DIV Overflow*/
2626                     ; 397 	  || ( (MPRSR & 0x0F) >= MAX_RATIO ) ) /* Captured value not significant at start-up */
2628  01af cd0000        	call	c_ltor
2630  01b2 ae08          	ld	x,#high(L63)
2631  01b4 bf00          	ld	c_x,x
2632  01b6 ae08          	ld	x,#low(L63)
2633  01b8 cd0000        	call	c_xlcmp
2635  01bb 2508          	jrult	L7231
2637  01bd b657          	ld	a,_MPRSR
2638  01bf a40f          	and	a,#15
2639  01c1 a107          	cp	a,#7
2640  01c3 2503          	jrult	L5231
2641  01c5               L7231:
2642                     ; 399 			return (0);
2644  01c5 5f            	clr	x
2645  01c6 4f            	clr	a
2648  01c7 81            	ret	
2649  01c8               L5231:
2650                     ; 402 			return ( (u16) ( ROTOR_SPEED_FACTOR / FreqBuffer ) );
2652  01c8 3f03          	clr	c_lreg+3
2653  01ca a62d          	ld	a,#45
2654  01cc b702          	ld	c_lreg+2,a
2655  01ce a631          	ld	a,#49
2656  01d0 b701          	ld	c_lreg+1,a
2657  01d2 a601          	ld	a,#1
2658  01d4 b700          	ld	c_lreg,a
2659  01d6 aefc          	ld	x,#_MTC_GetRotorFreq$L-4
2660  01d8 cd0000        	call	c_ludv
2662  01db b603          	ld	a,c_lreg+3
2663  01dd be02          	ld	x,c_lreg+2
2666  01df 81            	ret	
2792                     ; 412 u32 GetLastTachoPeriod(void)
2792                     ; 413 {
2793                     	switch	.text
2795                     	xref.b	_GetLastTachoPeriod$L
2796  01e0               _GetLastTachoPeriod:
2799                     ; 419 	if (SpeedFIFO_Index != (PSpeedMeas_s)SensorPeriod)
2801  01e0 b601          	ld	a,_SpeedFIFO_Index+1
2802  01e2 a102          	cp	a,#low(_SensorPeriod)
2803  01e4 2604          	jrne	L24
2804  01e6 be00          	ld	x,_SpeedFIFO_Index
2805  01e8 a302          	cp	x,#high(_SensorPeriod)
2806  01ea               L24:
2807  01ea 2706          	jreq	L7141
2808                     ; 421 		LastSpeedFIFO_Index = SpeedFIFO_Index-1;
2810  01ec be00          	ld	x,_SpeedFIFO_Index
2811  01ee b601          	ld	a,_SpeedFIFO_Index+1
2813  01f0 2009          	jra	L44
2814  01f2               L7141:
2815                     ; 423 			LastSpeedFIFO_Index = SpeedFIFO_Index + SPEED_FIFO_SIZE - 1;
2817  01f2 be00          	ld	x,_SpeedFIFO_Index
2818  01f4 b601          	ld	a,_SpeedFIFO_Index+1
2819  01f6 ab0c          	add	a,#12
2820  01f8 2401          	jrnc	L44
2821  01fa 5c            	inc	x
2822  01fb               L44:
2823  01fb a003          	sub	a,#3
2824  01fd 88            	push	a
2825  01fe 9f            	ld	a,x
2826  01ff a200          	sbc	a,#0
2827  0201 97            	ld	x,a
2828  0202 84            	pop	a
2829  0203 b7fa          	ld	_GetLastTachoPeriod$L-6,a
2830  0205 bff9          	ld	_GetLastTachoPeriod$L-7,x
2831                     ; 426 	FreqBuffer = (u32)LastSpeedFIFO_Index->Capture.w_form;
2833  0207 bf00          	ld	c_x,x
2834  0209 97            	ld	x,a
2835  020a cd0000        	call	c_getwx
2837  020d cd0000        	call	c_uitol
2839  0210 aefb          	ld	x,#_GetLastTachoPeriod$L-5
2840  0212 cd0000        	call	c_rtol
2842                     ; 427 	LowNibble = LastSpeedFIFO_Index->Prsc_Reg;
2844  0215 ae02          	ld	x,#2
2845  0217 92d6f9        	ld	a,([_GetLastTachoPeriod$L-7.w],x)
2846                     ; 428 	LowNibble &= 0x0F;	// Get ST[3:0] 4-bit value out of MPRSR
2848  021a a40f          	and	a,#15
2849  021c b7ff          	ld	_GetLastTachoPeriod$L-1,a
2851  021e 200a          	jra	L5241
2852  0220               L3241:
2853                     ; 431 		FreqBuffer *= 2;
2855  0220 38fe          	sll	_GetLastTachoPeriod$L-2
2856  0222 39fd          	rlc	_GetLastTachoPeriod$L-3
2857  0224 39fc          	rlc	_GetLastTachoPeriod$L-4
2858  0226 39fb          	rlc	_GetLastTachoPeriod$L-5
2859                     ; 432 		LowNibble--;
2861  0228 3aff          	dec	_GetLastTachoPeriod$L-1
2862  022a               L5241:
2863                     ; 429 	while (LowNibble != 0)
2865  022a 3dff          	tnz	_GetLastTachoPeriod$L-1
2866  022c 26f2          	jrne	L3241
2867                     ; 435 	return (FreqBuffer);
2869  022e aefb          	ld	x,#_GetLastTachoPeriod$L-5
2873  0230 cc0000        	jp	c_ltor
2939                     ; 447 u32 GetAvrgTachoPeriod(void)
2939                     ; 448 {
2940                     	switch	.text
2942                     	xref.b	_GetAvrgTachoPeriod$L
2943  0233               _GetAvrgTachoPeriod:
2946                     ; 453 	AvrgBuffer = 0;
2948  0233 4f            	clr	a
2949  0234 b7f8          	ld	_GetAvrgTachoPeriod$L-8,a
2950  0236 b7f7          	ld	_GetAvrgTachoPeriod$L-9,a
2951  0238 b7f6          	ld	_GetAvrgTachoPeriod$L-10,a
2952  023a b7f5          	ld	_GetAvrgTachoPeriod$L-11,a
2953                     ; 454 	AvrgSpeedFIFO_Index = (PSpeedMeas_s)SensorPeriod;
2955  023c ae02          	ld	x,#high(_SensorPeriod)
2956  023e bffd          	ld	_GetAvrgTachoPeriod$L-3,x
2957  0240 a602          	ld	a,#low(_SensorPeriod)
2958  0242 b7fe          	ld	_GetAvrgTachoPeriod$L-2,a
2960  0244 204e          	jra	L05
2961  0246               L5641:
2962                     ; 458 		ClrBit(MIMR,MIMR_CIM);	// Disable capture interrupts during acquisition
2964  0246 b658          	ld	a,_MIMR
2965  0248 a4fe          	and	a,#254
2966  024a b758          	ld	_MIMR,a
2967                     ; 459 		FreqBuffer = (u32)AvrgSpeedFIFO_Index->Capture.w_form;
2969  024c b6fd          	ld	a,_GetAvrgTachoPeriod$L-3
2970  024e b700          	ld	c_x,a
2971  0250 befe          	ld	x,_GetAvrgTachoPeriod$L-2
2972  0252 cd0000        	call	c_getwx
2974  0255 cd0000        	call	c_uitol
2976  0258 aef9          	ld	x,#_GetAvrgTachoPeriod$L-7
2977  025a cd0000        	call	c_rtol
2979                     ; 460 		ST3_0 = AvrgSpeedFIFO_Index->Prsc_Reg;
2981  025d ae02          	ld	x,#2
2982  025f 92d6fd        	ld	a,([_GetAvrgTachoPeriod$L-3.w],x)
2983  0262 b7ff          	ld	_GetAvrgTachoPeriod$L-1,a
2984                     ; 461 		SetBit(MIMR,MIMR_CIM);	// Re-enable capture interrupts
2986  0264 b658          	ld	a,_MIMR
2987  0266 aa01          	or	a,#1
2988  0268 b758          	ld	_MIMR,a
2989                     ; 462 		ST3_0 &= 0x0F;		// Get ST[3:0] 4-bit value out of MPRSR
2991  026a b6ff          	ld	a,_GetAvrgTachoPeriod$L-1
2992  026c a40f          	and	a,#15
2993  026e b7ff          	ld	_GetAvrgTachoPeriod$L-1,a
2995  0270 200a          	jra	L7741
2996  0272               L5741:
2997                     ; 465 			FreqBuffer *= 2;
2999  0272 38fc          	sll	_GetAvrgTachoPeriod$L-4
3000  0274 39fb          	rlc	_GetAvrgTachoPeriod$L-5
3001  0276 39fa          	rlc	_GetAvrgTachoPeriod$L-6
3002  0278 39f9          	rlc	_GetAvrgTachoPeriod$L-7
3003                     ; 466 			ST3_0--;
3005  027a 3aff          	dec	_GetAvrgTachoPeriod$L-1
3006  027c               L7741:
3007                     ; 463 		while (ST3_0 != 0)
3009  027c 3dff          	tnz	_GetAvrgTachoPeriod$L-1
3010  027e 26f2          	jrne	L5741
3011                     ; 468 		AvrgBuffer += FreqBuffer;	// Sum the whole tacho period FIFO
3013  0280 aef9          	ld	x,#_GetAvrgTachoPeriod$L-7
3014  0282 cd0000        	call	c_ltor
3016  0285 aef5          	ld	x,#_GetAvrgTachoPeriod$L-11
3017  0287 cd0000        	call	c_lgadd
3019                     ; 469 		AvrgSpeedFIFO_Index++;
3021  028a b6fe          	ld	a,_GetAvrgTachoPeriod$L-2
3022  028c ab03          	add	a,#3
3023  028e b7fe          	ld	_GetAvrgTachoPeriod$L-2,a
3024  0290 2402          	jrnc	L05
3025  0292 3cfd          	inc	_GetAvrgTachoPeriod$L-3
3026  0294               L05:
3027                     ; 456 	while (	AvrgSpeedFIFO_Index < &SensorPeriod[SPEED_FIFO_SIZE] )
3029  0294 a60e          	ld	a,#_SensorPeriod+12
3030  0296 99            	scf	
3031  0297 b2fe          	sbc	a,_GetAvrgTachoPeriod$L-2
3032  0299 4f            	clr	a
3033  029a b2fd          	sbc	a,_GetAvrgTachoPeriod$L-3
3034  029c 24a8          	jruge	L5641
3035                     ; 472 	AvrgBuffer	+= (SPEED_FIFO_SIZE/2)-1; 	// Round to upper value
3037  029e a601          	ld	a,#1
3038  02a0 b703          	ld	c_lreg+3,a
3039  02a2 3f02          	clr	c_lreg+2
3040  02a4 3f01          	clr	c_lreg+1
3041  02a6 3f00          	clr	c_lreg
3042  02a8 aef5          	ld	x,#_GetAvrgTachoPeriod$L-11
3043  02aa cd0000        	call	c_lgadd
3045                     ; 473 	AvrgBuffer /= SPEED_FIFO_SIZE;			// Average value	
3047  02ad a602          	ld	a,#2
3048  02af cd0000        	call	c_lgursh
3050                     ; 475 	return (AvrgBuffer);
3055  02b2 cc0000        	jp	c_ltor
3081                     ; 487 void MTC_InitTachoMeasure( void )
3081                     ; 488 {
3082                     	switch	.text
3083  02b5               _MTC_InitTachoMeasure:
3086                     ; 489 	SpeedFIFO_Index = (PSpeedMeas_s)SensorPeriod;
3088  02b5 ae02          	ld	x,#high(_SensorPeriod)
3089  02b7 bf00          	ld	_SpeedFIFO_Index,x
3090  02b9 a602          	ld	a,#low(_SensorPeriod)
3092  02bb 2021          	jra	L7151
3093  02bd               L3151:
3094                     ; 492 		SpeedFIFO_Index->Capture.w_form = U16_MAX;
3096  02bd a6ff          	ld	a,#255
3097  02bf 5a            	dec	x
3098  02c0 90be00        	ld	y,_SpeedFIFO_Index
3099  02c3 90bf00        	ld	c_y,y
3100  02c6 90be01        	ld	y,_SpeedFIFO_Index+1
3101  02c9 cd0000        	call	c_putw
3103                     ; 493 		SpeedFIFO_Index->Prsc_Reg = 0x15;
3105  02cc ae02          	ld	x,#2
3106  02ce a615          	ld	a,#21
3107  02d0 92d700        	ld	([_SpeedFIFO_Index.w],x),a
3108                     ; 494 		SpeedFIFO_Index++;
3110  02d3 be00          	ld	x,_SpeedFIFO_Index
3111  02d5 b601          	ld	a,_SpeedFIFO_Index+1
3112  02d7 ab03          	add	a,#3
3113  02d9 2401          	jrnc	L45
3114  02db 5c            	inc	x
3115  02dc               L45:
3116  02dc bf00          	ld	_SpeedFIFO_Index,x
3117  02de               L7151:
3118  02de b701          	ld	_SpeedFIFO_Index+1,a
3119                     ; 490 	while (	SpeedFIFO_Index < &SensorPeriod[SPEED_FIFO_SIZE] )
3121  02e0 a60e          	ld	a,#_SensorPeriod+12
3122  02e2 5f            	clr	x
3123  02e3 99            	scf	
3124  02e4 b201          	sbc	a,_SpeedFIFO_Index+1
3125  02e6 4f            	clr	a
3126  02e7 b200          	sbc	a,_SpeedFIFO_Index
3127  02e9 24d2          	jruge	L3151
3128                     ; 496 	SpeedFIFO_Index = (PSpeedMeas_s)SensorPeriod;
3130  02eb ae02          	ld	x,#high(_SensorPeriod)
3131  02ed bf00          	ld	_SpeedFIFO_Index,x
3132  02ef a602          	ld	a,#low(_SensorPeriod)
3133  02f1 b701          	ld	_SpeedFIFO_Index+1,a
3134                     ; 497 	MTCStatus &= (u8)(~DO_ROLLING_AVRG);
3136  02f3 1f10          	bres	_MTCStatus,#7
3137                     ; 498 }
3140  02f5 81            	ret	
3164                     ; 508 void MTC_StartTachoFiltering( void )
3164                     ; 509 {
3165                     	switch	.text
3166  02f6               _MTC_StartTachoFiltering:
3169                     ; 511 	MTCStatus |= INIT_ROLLING_AVRG;		
3171  02f6 1c10          	bset	_MTCStatus,#6
3172                     ; 513 	MTCStatus |= DO_ROLLING_AVRG;			
3174  02f8 1e10          	bset	_MTCStatus,#7
3175                     ; 514 }
3178  02fa 81            	ret	
3214                     ; 533 BOOL MTC_ValidSpeedInfo( u16 MinRotorFreq )
3214                     ; 534 {
3215                     	switch	.text
3217                     	xref.b	_MTC_ValidSpeedInfo$L

⌨️ 快捷键说明

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