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

📄 mtc.ls

📁 该程序是ST7MC驱动BLDC120
💻 LS
📖 第 1 页 / 共 5 页
字号:
1768                     ; 695 }
1771  0026 80            	iret	
1833                     ; 710 void MTC_C_D_IT(void)  
1833                     ; 711 {
1834                     .text:	section	.text,new
1835  0000               _MTC_C_D_IT:
1837  0000 9089          	push	y
1838       00000102      OFST:	set	258
1839  0002 b601          	ld	a,c_y+1
1840  0004 88            	push	a
1841  0005 b600          	ld	a,c_y
1842  0007 88            	push	a
1843  0008 88            	push	a
1844  0009 88            	push	a
1847                     ; 712 	if(MISR & CI_MSK)
1849  000a 005903cc0208  	btjf	_MISR,#0,L105
1850                     ; 714 		MISR = ((u8)~(CI_MSK));
1852  0010 a6fe          	ld	a,#254
1853  0012 b759          	ld	_MISR,a
1854                     ; 715 		RPICounter = 0;		//reset flag on ratio increment for soft demagnetisation
1856  0014 3f08          	clr	L322_RPICounter
1857                     ; 717 		MPHST = PHASE_CONFIG[StepIndex];  // Preload active phase on next C event
1859  0016 be02          	ld	x,L532_StepIndex
1860  0018 d60003        	ld	a,(_PHASE_CONFIG,x)
1861  001b b75d          	ld	_MPHST,a
1862                     ; 719         if (!ValBit(Flag_MTC,SWITCH_TO_VOLTAGE_PWMON))   // detect Z during PWM OFF
1864  001d c60008        	ld	a,_Flag_MTC
1865  0020 a501          	bcp	a,#1
1866  0022 2605          	jrne	L305
1867                     ; 720 			MCRB = ZC_DEMAG_PWM[StepIndex];   // Active and preload bit of MCRB 
1869  0024 d60009        	ld	a,(_ZC_DEMAG_PWM,x)
1871  0027 2003          	jra	L505
1872  0029               L305:
1873                     ; 721 		else MCRB = ZC_DEMAG_PWM_PWMON[StepIndex];   // detect Z during PWM ON
1875  0029 d6000f        	ld	a,(_ZC_DEMAG_PWM_PWMON,x)
1876  002c               L505:
1877  002c b75b          	ld	_MCRB,a
1878                     ; 737         if (MotorStatus == AUTO_SWITCH)
1880  002e b609          	ld	a,_MotorStatus
1881  0030 a101          	cp	a,#1
1882  0032 2703cc0108    	jrne	L705
1883                     ; 739 			if (!ValBit(Flag_MTC,SWITCH_TO_VOLTAGE_PWMON))
1885  0037 c60008        	ld	a,_Flag_MTC
1886  003a a501          	bcp	a,#1
1887  003c 2665          	jrne	L115
1888                     ; 741 				if ((u16)(DEMAG_TIME_C[(MPRSR & 0x0f)]+ MCOMP) > U8_MAX)
1890  003e b657          	ld	a,_MPRSR
1891  0040 a40f          	and	a,#15
1892  0042 97            	ld	x,a
1893  0043 d60015        	ld	a,(_DEMAG_TIME_C,x)
1894  0046 5f            	clr	x
1895  0047 bb54          	add	a,_MCOMP
1896  0049 2401          	jrnc	L43
1897  004b 5c            	inc	x
1898  004c               L43:
1899  004c a000          	sub	a,#0
1900  004e 9f            	ld	a,x
1901  004f a201          	sbc	a,#1
1902  0051 2544          	jrult	L315
1903                     ; 743 					RPICounter ++;
1905  0053 3c08          	inc	L322_RPICounter
1906                     ; 744 					SoftDemagTime = (u16)((DEMAG_TIME_C[(MPRSR & 0x0f)] + MCOMP - 0xFF)/2+ 0x80);
1908  0055 b657          	ld	a,_MPRSR
1909  0057 a40f          	and	a,#15
1910  0059 97            	ld	x,a
1911  005a d60015        	ld	a,(_DEMAG_TIME_C,x)
1912  005d 5f            	clr	x
1913  005e bb54          	add	a,_MCOMP
1914  0060 2401          	jrnc	L63
1915  0062 5c            	inc	x
1916  0063               L63:
1917  0063 a0ff          	sub	a,#255
1918  0065 88            	push	a
1919  0066 9f            	ld	a,x
1920  0067 a200          	sbc	a,#0
1921  0069 97            	ld	x,a
1922  006a 3f00          	clr	c_y
1923  006c 90ae02        	ld	y,#2
1924  006f 84            	pop	a
1925  0070 cd0000        	call	c_idiv
1927  0073 ab80          	add	a,#128
1928  0075 2415          	jrnc	L24
1930  0077 2012          	jp	LC003
1931  0079               L515:
1932                     ; 747 			   			RPICounter ++;
1934  0079 3c08          	inc	L322_RPICounter
1935                     ; 748 		    			SoftDemagTime = (((u16)(SoftDemagTime - 0xFF)/2)+ 0x80);
1937  007b b607          	ld	a,L522_SoftDemagTime+1
1938  007d a0ff          	sub	a,#255
1939  007f 88            	push	a
1940  0080 9f            	ld	a,x
1941  0081 a200          	sbc	a,#0
1942  0083 97            	ld	x,a
1943  0084 54            	srl	x
1944  0085 84            	pop	a
1945  0086 46            	rrc	a
1946  0087 ab80          	add	a,#128
1947  0089 2401          	jrnc	L24
1948  008b               LC003:
1949  008b 5c            	inc	x
1950  008c               L24:
1951  008c b707          	ld	L522_SoftDemagTime+1,a
1952  008e bf06          	ld	L522_SoftDemagTime,x
1953                     ; 745 					while ((u16)(SoftDemagTime ) > U8_MAX)
1955  0090 9f            	ld	a,x
1956  0091 a101          	cp	a,#1
1957  0093 24e4          	jruge	L515
1959  0095 207b          	jra	L545
1960  0097               L315:
1961                     ; 751 				else MDREG = (u8)(DEMAG_TIME_C[(MPRSR & 0x0f)]+ MCOMP);    
1963  0097 b657          	ld	a,_MPRSR
1964  0099 a40f          	and	a,#15
1965  009b 97            	ld	x,a
1966  009c d60015        	ld	a,(_DEMAG_TIME_C,x)
1967  009f bb54          	add	a,_MCOMP
1968  00a1 206d          	jp	LC001
1969  00a3               L115:
1970                     ; 755 				if ((u16)(DEMAG_TIME_V[(MPRSR & 0x0f)]+ MCOMP) > U8_MAX)
1972  00a3 b657          	ld	a,_MPRSR
1973  00a5 a40f          	and	a,#15
1974  00a7 97            	ld	x,a
1975  00a8 d60025        	ld	a,(_DEMAG_TIME_V,x)
1976  00ab 5f            	clr	x
1977  00ac bb54          	add	a,_MCOMP
1978  00ae 2401          	jrnc	L44
1979  00b0 5c            	inc	x
1980  00b1               L44:
1981  00b1 a000          	sub	a,#0
1982  00b3 9f            	ld	a,x
1983  00b4 a201          	sbc	a,#1
1984  00b6 2544          	jrult	L135
1985                     ; 757 					RPICounter ++;
1987  00b8 3c08          	inc	L322_RPICounter
1988                     ; 758 					SoftDemagTime = (u16)((DEMAG_TIME_V[(MPRSR & 0x0f)] + MCOMP - 0xFF)/2+ 0x80);
1990  00ba b657          	ld	a,_MPRSR
1991  00bc a40f          	and	a,#15
1992  00be 97            	ld	x,a
1993  00bf d60025        	ld	a,(_DEMAG_TIME_V,x)
1994  00c2 5f            	clr	x
1995  00c3 bb54          	add	a,_MCOMP
1996  00c5 2401          	jrnc	L64
1997  00c7 5c            	inc	x
1998  00c8               L64:
1999  00c8 a0ff          	sub	a,#255
2000  00ca 88            	push	a
2001  00cb 9f            	ld	a,x
2002  00cc a200          	sbc	a,#0
2003  00ce 97            	ld	x,a
2004  00cf 3f00          	clr	c_y
2005  00d1 90ae02        	ld	y,#2
2006  00d4 84            	pop	a
2007  00d5 cd0000        	call	c_idiv
2009  00d8 ab80          	add	a,#128
2010  00da 2415          	jrnc	L25
2012  00dc 2012          	jp	LC004
2013  00de               L335:
2014                     ; 761 			   			RPICounter ++;
2016  00de 3c08          	inc	L322_RPICounter
2017                     ; 762 		    			SoftDemagTime = (((u16)(SoftDemagTime - 0xFF)/2)+ 0x80);
2019  00e0 b607          	ld	a,L522_SoftDemagTime+1
2020  00e2 a0ff          	sub	a,#255
2021  00e4 88            	push	a
2022  00e5 9f            	ld	a,x
2023  00e6 a200          	sbc	a,#0
2024  00e8 97            	ld	x,a
2025  00e9 54            	srl	x
2026  00ea 84            	pop	a
2027  00eb 46            	rrc	a
2028  00ec ab80          	add	a,#128
2029  00ee 2401          	jrnc	L25
2030  00f0               LC004:
2031  00f0 5c            	inc	x
2032  00f1               L25:
2033  00f1 b707          	ld	L522_SoftDemagTime+1,a
2034  00f3 bf06          	ld	L522_SoftDemagTime,x
2035                     ; 759 					while ((u16)(SoftDemagTime ) > U8_MAX)
2037  00f5 9f            	ld	a,x
2038  00f6 a101          	cp	a,#1
2039  00f8 24e4          	jruge	L335
2041  00fa 2016          	jra	L545
2042  00fc               L135:
2043                     ; 765 				else MDREG = (u8)(DEMAG_TIME_V[(MPRSR & 0x0f)]+ MCOMP);
2045  00fc b657          	ld	a,_MPRSR
2046  00fe a40f          	and	a,#15
2047  0100 97            	ld	x,a
2048  0101 d60025        	ld	a,(_DEMAG_TIME_V,x)
2049  0104 bb54          	add	a,_MCOMP
2050  0106 2008          	jp	LC001
2051  0108               L705:
2052                     ; 768 		else MDREG = DEMAG_TIME_C[(MPRSR & 0x0f)];    // in starting stage--->so should be in current mode!
2054  0108 b657          	ld	a,_MPRSR
2055  010a a40f          	and	a,#15
2056  010c 97            	ld	x,a
2057  010d d60015        	ld	a,(_DEMAG_TIME_C,x)
2058  0110               LC001:
2059  0110 b755          	ld	_MDREG,a
2060  0112               L545:
2061                     ; 772 	SET_MTC_PAGE(1);
2063  0112 1e5f          	bset	_MCFR,#7
2064                     ; 774 	if (!ValBit(Flag_MTC,SWITCH_TO_VOLTAGE_PWMON))   // detect Z during PWM OFF
2066  0114 c60008        	ld	a,_Flag_MTC
2067  0117 a501          	bcp	a,#1
2068  0119 260d          	jrne	L745
2069                     ; 776 		if (ValBit(ZC_DEMAG_PWM[StepIndex],1)) SetBit(MPOL,REO);  // read the BEMF on odd channel
2071  011b be02          	ld	x,L532_StepIndex
2072  011d d60009        	ld	a,(_ZC_DEMAG_PWM,x)
2073  0120 a502          	bcp	a,#2
2074  0122 2711          	jreq	L755
2077  0124 1c51          	bset	_MPOL,#6
2079  0126 200f          	jra	L555
2080                     ; 777 		else ClrBit(MPOL,REO);    // read the BEMF on even channel
2081  0128               L745:
2082                     ; 781 		if (ValBit(ZC_DEMAG_PWM_PWMON[StepIndex],1)) SetBit(MPOL,REO);  // read the BEMF on odd channel
2084  0128 be02          	ld	x,L532_StepIndex
2085  012a d6000f        	ld	a,(_ZC_DEMAG_PWM_PWMON,x)
2086  012d a502          	bcp	a,#2
2087  012f 2704          	jreq	L755
2090  0131 1c51          	bset	_MPOL,#6
2092  0133 2002          	jra	L555
2093  0135               L755:
2094                     ; 782 		else ClrBit(MPOL,REO);    // read the BEMF on even channel
2097  0135 1d51          	bres	_MPOL,#6
2098  0137               L555:
2099                     ; 784 	SET_MTC_PAGE(0);
2101  0137 1f5f          	bres	_MCFR,#7
2102                     ; 786 		StepIndex++;
2104  0139 3c02          	inc	L532_StepIndex
2105                     ; 787 		if (StepIndex > 5)	StepIndex = 0;
2107  013b b602          	ld	a,L532_StepIndex
2108  013d a106          	cp	a,#6
2109  013f 2502          	jrult	L365
2112  0141 3f02          	clr	L532_StepIndex
2113  0143               L365:
2114                     ; 792    	if (MotorStatus & FIRST_AUTO_SWITCH)// ____________________________________
2116  0143 030937        	btjf	_MotorStatus,#1,L565
2117                     ; 796 		        MotorStatus &= ((u8)(~FIRST_AUTO_SWITCH));
2119  0146 1309          	bres	_MotorStatus,#1
2120                     ; 797 			MotorStatus |= AUTO_SWITCH;
2122  0148 1009          	bset	_MotorStatus,#0
2123                     ; 799 			MWGHT = AUTO_DELAY;	// Set delay for number of cycle set by AUTO_DELAY_STEP
2125  014a a680          	ld	a,#128
2126  014c b756          	ld	_MWGHT,a
2127                     ; 801 			delay_counter = 0;	// Initialise the counter to manage delay
2129  014e 3f01          	clr	L732_delay_counter
2130                     ; 803             for (i=0;i<=STEP_Z_BUFFER_SIZE-1;i++)
2132  0150 96            	ld	x,s
2133  0151 4f            	clr	a
2134  0152 d70102        	ld	(OFST+0,x),a
2135  0155               L765:
2136                     ; 805                 Step_Z[i].Ratio = RAMP[RampIndex].Ratio;    // init buffer for first time computation of the motor frequency
2138  0155 be03          	ld	x,L332_RampIndex
2139  0157 58            	sll	x
2140  0158 d60035        	ld	a,(_RAMP,x)
2141  015b 96            	ld	x,s
2142  015c de0102        	ld	x,(OFST+0,x)
2143  015f 58            	sll	x
2144  0160 d70000        	ld	(_Step_Z,x),a
2145                     ; 806                 Step_Z[i].StepTime = RAMP[RampIndex].StepTime; // -> avoid wrong PI output & stalled motor status in closed loop operation
2147  0163 be03          	ld	x,L332_RampIndex
2148  0165 58            	sll	x
2149  0166 d60036        	ld	a,(_RAMP+1,x)
2150  0169 96            	ld	x,s
2151  016a de0102        	ld	x,(OFST+0,x)
2152  016d 58            	sll	x
2153  016e d70001        	ld	(_Step_Z+1,x),a
2154                     ; 803             for (i=0;i<=STEP_Z_BUFFER_SIZE-1;i++)
2156  0171 96            	ld	x,s
2157  0172 d60102        	ld	a,(OFST+0,x)
2158  0175 4c            	inc	a
2159  0176 d70102        	ld	(OFST+0,x),a
2162  0179 a106          	cp	a,#6
2163  017b 25d8          	jrult	L765
2164  017d               L565:
2165                     ; 813 	if (MotorStatus & AUTO_SWITCH)  // Autoswitched mode
2167  017d 010925        	btjf	_MotorStatus,#0,L575
2168                     ; 841         if ( delay_counter <= MAX_DELAY_COUNTER)
2170  0180 b601          	ld	a,L732_delay_counter
2171  0182 a10d          	cp	a,#13
2172  0184 240e          	jruge	L775
2173                     ; 843 		    delay_counter ++;
2175  0186 3c01          	inc	L732_delay_counter
2176                     ; 844 		    if (delay_counter == AUTO_DELAY_STEP)
2178  0188 b601          	ld	a,L732_delay_counter
2179  018a a106          	cp	a,#6
2180  018c 267a          	jrne	L105
2181                     ; 845 		    MWGHT = MEDIUM_DELAY;	// Set delay for number of cycle from AUTO_DELAY_STEP
2183  018e a66e          	ld	a,#110
2184  0190 b756          	ld	_MWGHT,a
2185  0192 2074          	jra	L105
2186  0194               L775:
2187                     ; 850 			if	(MCRB & CPB_MSK)    MWGHT = Rising_bemf;
2189  0194 0d5b07        	btjf	_MCRB,#6,L506

⌨️ 快捷键说明

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