?? mtc.ls
字號:
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 + -