📄 mtc.ls
字号:
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 + -