📄 adc.ls
字号:
1 ; C Compiler for ST7 (COSMIC Software)
2 ; Generator V4.4a - 17 Dec 2001
3 ; Optimizer V4.2g - 21 Dec 2001
1542 ; 95 void ADC_Init(void)
1542 ; 96 {
1543 switch .text
1544 0000 _ADC_Init:
1547 ; 99 ADCCSR = TEMP_SENSOR_CHANNEL;
1549 0000 a610 ld a,#16
1550 0002 b72e ld _ADCCSR,a
1551 ; 101 InverterStatus = 0;
1553 0004 4f clr a
1554 0005 c70000 ld L3501_InverterStatus,a
1555 ; 102 }
1558 0008 81 ret
1612 ; 112 u16 ADC_Get_10bits(u8 Channel)
1612 ; 113 {
1613 switch .text
1615 xref.b L7401_ADC_Get_10bits$L
1616 0009 L7401_ADC_Get_10bits:
1618 0009 b700 ld L7401_ADC_Get_10bits$L,a
1620 ; 114 u16 result = 0;
1622 000b 3ffe clr L7401_ADC_Get_10bits$L-2
1623 000d 3fff clr L7401_ADC_Get_10bits$L-1
1624 ; 117 ADCCSR = Channel; // 4 Mhz sampling, ADC on
1626 000f b72e ld _ADCCSR,a
1628 0011 L5211:
1629 ; 119 while (!ValBit(ADCCSR,ADCCSR_EOC)); // wait till end of conversion
1631 0011 0f2efd btjf _ADCCSR,#7,L5211
1632 ; 120 ADCDRH; // and ignore 1st result
1634 0014 b62f ld a,_ADCDRH
1635 ; 122 for (i=0;i<=7;i++) // take 8 samples
1637 0016 3ffd clr L7401_ADC_Get_10bits$L-3
1638 0018 L1411:
1639 ; 124 while (!ValBit(ADCCSR,ADCCSR_EOC)); // wait till end of conversion
1641 0018 0f2efd btjf _ADCCSR,#7,L1411
1642 ; 125 result += ADCDRL;
1644 001b b630 ld a,_ADCDRL
1645 001d bbff add a,L7401_ADC_Get_10bits$L-1
1646 001f b7ff ld L7401_ADC_Get_10bits$L-1,a
1647 0021 2402 jrnc L01
1648 0023 3cfe inc L7401_ADC_Get_10bits$L-2
1649 0025 L01:
1650 ; 126 result += (u16)(ADCDRH << 2); // clear EOC bit
1652 0025 b62f ld a,_ADCDRH
1653 0027 ae04 ld x,#4
1654 0029 42 mul x,a
1655 002a b7fc ld L7401_ADC_Get_10bits$L-4,a
1656 002c bffb ld L7401_ADC_Get_10bits$L-5,x
1657 002e b6ff ld a,L7401_ADC_Get_10bits$L-1
1658 0030 bbfc add a,L7401_ADC_Get_10bits$L-4
1659 0032 b7ff ld L7401_ADC_Get_10bits$L-1,a
1660 0034 b6fe ld a,L7401_ADC_Get_10bits$L-2
1661 0036 b9fb adc a,L7401_ADC_Get_10bits$L-5
1662 0038 b7fe ld L7401_ADC_Get_10bits$L-2,a
1663 ; 122 for (i=0;i<=7;i++) // take 8 samples
1665 003a 3cfd inc L7401_ADC_Get_10bits$L-3
1668 003c b6fd ld a,L7401_ADC_Get_10bits$L-3
1669 003e a108 cp a,#8
1670 0040 25d6 jrult L1411
1671 ; 129 result = result >> 3; // div/8 -> smooth result
1673 0042 34fe srl L7401_ADC_Get_10bits$L-2
1674 0044 36ff rrc L7401_ADC_Get_10bits$L-1
1675 0046 34fe srl L7401_ADC_Get_10bits$L-2
1676 0048 36ff rrc L7401_ADC_Get_10bits$L-1
1677 004a 34fe srl L7401_ADC_Get_10bits$L-2
1678 004c 36ff rrc L7401_ADC_Get_10bits$L-1
1679 ; 130 return (result);
1681 004e b6ff ld a,L7401_ADC_Get_10bits$L-1
1682 0050 befe ld x,L7401_ADC_Get_10bits$L-2
1685 0052 81 ret
1738 ; 142 u8 ADC_Get_8bits(u8 Channel)
1738 ; 143 {
1739 switch .text
1741 xref.b L1501_ADC_Get_8bits$L
1742 0053 L1501_ADC_Get_8bits:
1744 0053 b700 ld L1501_ADC_Get_8bits$L,a
1746 ; 144 u16 result = 0;
1748 0055 3ffd clr L1501_ADC_Get_8bits$L-3
1749 0057 3ffe clr L1501_ADC_Get_8bits$L-2
1750 ; 147 ADCCSR = Channel; // 4 Mhz sampling, ADC on
1752 0059 b72e ld _ADCCSR,a
1754 005b L7711:
1755 ; 149 while (!ValBit(ADCCSR,ADCCSR_EOC)); // wait till end of conversion
1757 005b 0f2efd btjf _ADCCSR,#7,L7711
1758 ; 150 ADCDRH; // and ignore 1st result
1760 005e b62f ld a,_ADCDRH
1761 ; 152 for (i=0;i<=7;i++) // take 8 samples
1763 0060 3fff clr L1501_ADC_Get_8bits$L-1
1764 0062 L3121:
1765 ; 154 while (!ValBit(ADCCSR,ADCCSR_EOC)); // wait till end of conversion
1767 0062 0f2efd btjf _ADCCSR,#7,L3121
1768 ; 155 result += ADCDRH; // clear EOC bit
1770 0065 b62f ld a,_ADCDRH
1771 0067 bbfe add a,L1501_ADC_Get_8bits$L-2
1772 0069 b7fe ld L1501_ADC_Get_8bits$L-2,a
1773 006b 2402 jrnc L41
1774 006d 3cfd inc L1501_ADC_Get_8bits$L-3
1775 006f L41:
1776 ; 152 for (i=0;i<=7;i++) // take 8 samples
1778 006f 3cff inc L1501_ADC_Get_8bits$L-1
1781 0071 b6ff ld a,L1501_ADC_Get_8bits$L-1
1782 0073 a108 cp a,#8
1783 0075 25eb jrult L3121
1784 ; 158 result = result >> 3; // div/8 -> smooth result
1786 0077 34fd srl L1501_ADC_Get_8bits$L-3
1787 0079 36fe rrc L1501_ADC_Get_8bits$L-2
1788 007b 34fd srl L1501_ADC_Get_8bits$L-3
1789 007d 36fe rrc L1501_ADC_Get_8bits$L-2
1790 007f 34fd srl L1501_ADC_Get_8bits$L-3
1791 0081 36fe rrc L1501_ADC_Get_8bits$L-2
1792 ; 159 return ((u8)result);
1794 0083 b6fe ld a,L1501_ADC_Get_8bits$L-2
1797 0085 81 ret
1820 ; 170 u8 ADC_GetRV1(void)
1820 ; 171 {
1821 switch .text
1822 0086 _ADC_GetRV1:
1825 ; 172 return(ADC_Get_8bits(CONVERT_AIN13));
1827 0086 a61d ld a,#29
1831 0088 20c9 jp L1501_ADC_Get_8bits
1854 ; 175 u8 ADC_GetRV2(void)
1854 ; 176 {
1855 switch .text
1856 008a _ADC_GetRV2:
1859 ; 177 return(ADC_Get_8bits(CONVERT_AIN11));
1861 008a a61b ld a,#27
1865 008c 20c5 jp L1501_ADC_Get_8bits
1888 ; 180 u8 ADC_GetRV3(void)
1888 ; 181 {
1889 switch .text
1890 008e _ADC_GetRV3:
1893 ; 182 return(ADC_Get_8bits(CONVERT_AIN7));
1895 008e a617 ld a,#23
1899 0090 20c1 jp L1501_ADC_Get_8bits
1934 ; 196 BOOL ADC_CheckOverTemp(void)
1934 ; 197 {
1935 switch .text
1937 xref.b _ADC_CheckOverTemp$L
1938 0092 _ADC_CheckOverTemp:
1941 ; 200 HeatsinkTemp = ADC_Get_10bits(TEMP_SENSOR_CHANNEL);
1943 0092 a610 ld a,#16
1944 0094 cd0009 call L7401_ADC_Get_10bits
1946 0097 b7ff ld _ADC_CheckOverTemp$L-1,a
1947 0099 bffe ld _ADC_CheckOverTemp$L-2,x
1948 ; 202 if (HeatsinkTemp >= NTC_THRESHOLD)
1950 009b a06e sub a,#110
1951 009d 9f ld a,x
1952 009e a200 sbc a,#0
1953 00a0 250b jrult L5621
1954 ; 204 InverterStatus |= OVER_TEMPERATURE;
1956 00a2 c60000 ld a,L3501_InverterStatus
1957 00a5 aa01 or a,#1
1958 00a7 c70000 ld L3501_InverterStatus,a
1959 ; 205 return(TRUE);
1961 00aa a601 ld a,#1
1964 00ac 81 ret
1965 00ad L5621:
1966 ; 209 if ( (HeatsinkTemp >= (NTC_THRESHOLD - NTC_HYSTERESIS))
1966 ; 210 && (InverterStatus & OVER_TEMPERATURE) )
1968 00ad b6ff ld a,_ADC_CheckOverTemp$L-1
1969 00af a066 sub a,#102
1970 00b1 b6fe ld a,_ADC_CheckOverTemp$L-2
1971 00b3 a200 sbc a,#0
1972 00b5 250a jrult L1721
1974 00b7 c60000 ld a,L3501_InverterStatus
1975 00ba a501 bcp a,#1
1976 00bc 2703 jreq L1721
1977 ; 212 return(TRUE); // Wait heatsink cooling before re-enabling inverter
1979 00be a601 ld a,#1
1982 00c0 81 ret
1983 00c1 L1721:
1984 ; 216 InverterStatus &= (u8)(~OVER_TEMPERATURE);
1986 00c1 c60000 ld a,L3501_InverterStatus
1987 00c4 a4fe and a,#254
1988 00c6 c70000 ld L3501_InverterStatus,a
1989 ; 217 return(FALSE); // Normal operation
1991 00c9 4f clr a
1994 00ca 81 ret
2030 ; 235 BOOL ADC_CheckOverVoltage(void)
2030 ; 236 {
2031 switch .text
2033 xref.b _ADC_CheckOverVoltage$L
2034 00cb _ADC_CheckOverVoltage:
2037 ; 240 BusVoltage = ADC_Get_10bits(BUS_VOLTAGE_CHANNEL);
2039 00cb a611 ld a,#17
2040 00cd cd0009 call L7401_ADC_Get_10bits
2042 00d0 b7ff ld _ADC_CheckOverVoltage$L-1,a
2043 00d2 bffe ld _ADC_CheckOverVoltage$L-2,x
2044 ; 242 if (BusVoltage >= HVBUS_THRESHOLD)
2046 00d4 a0fc sub a,#252
2047 00d6 9f ld a,x
2048 00d7 a203 sbc a,#3
2049 00d9 250b jrult L3131
2050 ; 244 InverterStatus |= OVER_VOLTAGE;
2052 00db c60000 ld a,L3501_InverterStatus
2053 00de aa02 or a,#2
2054 00e0 c70000 ld L3501_InverterStatus,a
2055 ; 245 return(TRUE);
2057 00e3 a601 ld a,#1
2060 00e5 81 ret
2061 00e6 L3131:
2062 ; 249 if ( (BusVoltage >= (HVBUS_THRESHOLD - HVBUS_HYSTERESIS))
2062 ; 250 && (InverterStatus & OVER_VOLTAGE) )
2064 00e6 b6ff ld a,_ADC_CheckOverVoltage$L-1
2065 00e8 a0e9 sub a,#233
2066 00ea b6fe ld a,_ADC_CheckOverVoltage$L-2
2067 00ec a203 sbc a,#3
2068 00ee 250a jrult L7131
2070 00f0 c60000 ld a,L3501_InverterStatus
2071 00f3 a502 bcp a,#2
2072 00f5 2703 jreq L7131
2073 ; 252 return(TRUE); // Wait Bus voltage decrease before re-enabling inverter
2075 00f7 a601 ld a,#1
2078 00f9 81 ret
2079 00fa L7131:
2080 ; 256 InverterStatus &= (u8)(~OVER_VOLTAGE);
2082 00fa c60000 ld a,L3501_InverterStatus
2083 00fd a4fd and a,#253
2084 00ff c70000 ld L3501_InverterStatus,a
2085 ; 257 return(FALSE); // Normal operation
2087 0102 4f clr a
2090 0103 81 ret
2113 ; 271 u8 ADC_GetBusVoltage(void)
2113 ; 272 {
2114 switch .text
2115 0104 _ADC_GetBusVoltage:
2118 ; 273 return(ADC_Get_8bits(BUS_VOLTAGE_CHANNEL));
2120 0104 a611 ld a,#17
2124 0106 cc0053 jp L1501_ADC_Get_8bits
2148 ; 286 u8 ADC_GetHeatsinkTemp(void)
2148 ; 287 {
2149 switch .text
2150 0109 _ADC_GetHeatsinkTemp:
2153 ; 288 return(ADC_Get_8bits(TEMP_SENSOR_CHANNEL));
2155 0109 a610 ld a,#16
2159 010b cc0053 jp L1501_ADC_Get_8bits
2182 switch .bss
2183 0000 L3501_InverterStatus:
2184 0000 00 ds.b 1
2185 xdef _ADC_GetBusVoltage
2186 xdef _ADC_CheckOverVoltage
2187 xdef _ADC_GetHeatsinkTemp
2188 xdef _ADC_CheckOverTemp
2189 xdef _ADC_GetRV3
2190 xdef _ADC_GetRV2
2191 xdef _ADC_GetRV1
2192 xdef _ADC_Init
2212 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -