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

📄 adc.lst

📁 该程序是ST7MC驱动三洋压缩机(交流)
💻 LST
📖 第 1 页 / 共 2 页
字号:
ANSI-C/cC++ Compiler for ST7 V-5.0.7, Aug 21 2001

    1:  /**************** (c) 2004  STMicroelectronics **********************
    2:       
    3:  PROJECT  : ST7MC demokit
    4:  COMPILER : ST7 METROWERKS C (HIWARE) / COSMIC
    5:  
    6:  MODULE  :  adc.c
    7:  VERSION :  1.2
    8:  
    9:  CREATION DATE :    08.2003
   10:  AUTHOR :      Florent COSTE	/  Microcontroller Application Lab  / ST Hong Kong
   11:  
   12:  -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
   13:  
   14:  DESCRIPTION :   ADC routines              
   15:  -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
   16:  
   17:  01.2004 (V. Onde) Rel 1.1: Add ADC_Init(), u8 GetHeatsinkTemp(), u8 GetBusVoltage()
   18:  03.2004 (V. Onde) Rel 1.2: Use HW registers and bit definitions of ST7FMC2N6.h
   19:  
   20:   ******************************************************************************
   21:   THE SOFTWARE INCLUDED IN THIS FILE IS FOR GUIDANCE ONLY. ST MICROELECTRONICS
   22:   SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES
   23:   WITH RESPECT TO ANY CLAIMS ARISING FROM USE OF THIS SOFTWARE.
   24:   ******************************************************************************
   25:  
   26:  ******************************************************************************/
   27:  
   28:  // Standard types definitions and ST7 specific macros
   29:  #include "lib.h"
   30:  // Public ADC peripheral function prototypes
   31:  #include "adc.h"
   32:  // ST7FMC peripherals Hardware Registers declaration
   33:  #include "ST7FMC2N6.h"
   34:  
   35:  /* Private Constants --------------------------------------------------------*/
   36:  
   37:  //	Heatsink Temperature monitoring
   38:  #define TEMP_SENSOR_CHANNEL		CONVERT_AIN0	/* Select here ADC channel for temperature sensor*/
   39:  
   40:  // Protection set-up for ST7MC starter kit RevC; cf schematics for part numbers and values
   41:  #define NTC_THRESHOLD		110       /* Maximum allowed temperature for heatsink: 110癈 on IGBT package */
   42:  #define NTC_HYSTERESIS		8         /* Temperature gap before re-enabling inverter */
   43:  
   44:  #define OVER_TEMPERATURE	((u8)0x01)	/* Private flag to store inverter state */
   45:  
   46:  //	Inverter Bus voltage monitoring
   47:  #define BUS_VOLTAGE_CHANNEL		CONVERT_AIN1	/* Select here ADC channel for bus voltage reading */
   48:  
   49:  // Protection set-up for ST7MC starter kit RevC; cf schematics for part numbers and values
   50:  /* Maximum allowed voltage for Bulk capacitors and/or power switches is around 275Vrms on AC input*/
   51:  #define HVBUS_THRESHOLD		1020      
   52:  #define HVBUS_HYSTERESIS	19        /* Voltage gap before re-enabling inverter */
   53:  
   54:  #define OVER_VOLTAGE		((u8)0x02)
   55:  
   56:  /* ADC peripheral bits and bitfields definitions missing in ST7FMC2N6.h -----*/
   57:  #define PRSC_MASK		((u8)0x00)		/* Define here selected prescaler ratio */
   58:  #define CS3_MSK			((u8)0x08)		/* ADC Channel selection Mask */
   59:  #define CS2_MSK			((u8)0x04)		/* ADC Channel selection Mask */
   60:  #define CS1_MSK			((u8)0x02)		/* ADC Channel selection Mask */
   61:  #define CS0_MSK			((u8)0x01)		/* ADC Channel selection Mask */
   62:  
   63:  #define CONVERT_AIN0	((u8)ADCCSR_ADON_OR	+ PRSC_MASK													)
   64:  #define CONVERT_AIN1	((u8)ADCCSR_ADON_OR + PRSC_MASK										+ CS0_MSK	)
   65:  #define CONVERT_AIN2	((u8)ADCCSR_ADON_OR + PRSC_MASK							+ CS1_MSK				)
   66:  #define CONVERT_AIN3	((u8)ADCCSR_ADON_OR	+ PRSC_MASK							+ CS1_MSK	+ CS0_MSK	)
   67:  #define CONVERT_AIN4	((u8)ADCCSR_ADON_OR	+ PRSC_MASK				+ CS2_MSK							)
   68:  #define CONVERT_AIN5	((u8)ADCCSR_ADON_OR	+ PRSC_MASK				+ CS2_MSK				+ CS0_MSK	)
   69:  #define CONVERT_AIN6	((u8)ADCCSR_ADON_OR	+ PRSC_MASK				+ CS2_MSK	+ CS1_MSK				)
   70:  #define CONVERT_AIN7	((u8)ADCCSR_ADON_OR	+ PRSC_MASK				+ CS2_MSK	+ CS1_MSK	+ CS0_MSK	)
   71:  #define CONVERT_AIN8	((u8)ADCCSR_ADON_OR	+ PRSC_MASK	+ CS3_MSK										)
   72:  #define CONVERT_AIN9	((u8)ADCCSR_ADON_OR	+ PRSC_MASK	+ CS3_MSK							+ CS0_MSK	)
   73:  #define CONVERT_AIN10	((u8)ADCCSR_ADON_OR	+ PRSC_MASK	+ CS3_MSK				+ CS1_MSK				)
   74:  #define CONVERT_AIN11	((u8)ADCCSR_ADON_OR	+ PRSC_MASK	+ CS3_MSK				+ CS1_MSK	+ CS0_MSK	)
   75:  #define CONVERT_AIN12	((u8)ADCCSR_ADON_OR	+ PRSC_MASK	+ CS3_MSK	+ CS2_MSK							)
   76:  #define CONVERT_AIN13	((u8)ADCCSR_ADON_OR	+ PRSC_MASK	+ CS3_MSK	+ CS2_MSK				+ CS0_MSK	)
   77:  #define CONVERT_AIN14	((u8)ADCCSR_ADON_OR	+ PRSC_MASK	+ CS3_MSK	+ CS2_MSK	+ CS1_MSK				)
   78:  #define CONVERT_AIN15	((u8)ADCCSR_ADON_OR	+ PRSC_MASK	+ CS3_MSK	+ CS2_MSK	+ CS1_MSK	+ CS0_MSK	)
   79:  
   80:  /* Private Functions prototypes -------------------------------------------- */
   81:  static u16 ADC_Get_10bits(u8);		// returns 10 bits result (full ADC resolution)
   82:  static u8 ADC_Get_8bits(u8);		// returns 8 bits result only           
   83:  
   84:  /* Private Variables ------------------------------------------------------- */
   85:  static u8 InverterStatus;		// Stores current inverter state
   86:  
   87:  /*-----------------------------------------------------------------------------
   88:  ROUTINE Name : ADC_Init
   89:  
   90:  Description:	Start-up and initialize the ADC. Clear flags related to inverter
   91:  				monitoring
   92:  Input/Output:	None
   93:  Comments: 		None
   94:  -----------------------------------------------------------------------------*/
   95:  void ADC_Init(void)
   96:  {

Function: ADC_Init
Source  : ..\..\source\adc.c
Options : -Cc -F7 -Lasm=%n.lst -Ml -N -Os -Ou -Of -Ol0 -OnPMNC -Or

   97:  	// Switch ON the ADC at max speed (4MHz with 8MHz CPU clock)
   98:  	// Heatsink temperature selected by default
   99:  	ADCCSR = TEMP_SENSOR_CHANNEL;
  0000 a610     LD    A,#16
  0002 b700     LD    ADCCSR,A
  100:  
  101:  	InverterStatus = 0;
  0004 4f       CLR   A
  0005 c70000   LD    InverterStatus,A
  102:  }
  0008 81       RET   
  103:  
  104:  
  105:  /*-----------------------------------------------------------------------------
  106:  ROUTINE Name : ADC_Get_10bits
  107:  
  108:  Description:	Return the full ADC resolution value (10 bits).
  109:  Input/Output:	u8/u16 (channel number/result of conversion)
  110:  Comments: 		None
  111:  -----------------------------------------------------------------------------*/
  112:  u16 ADC_Get_10bits(u8 Channel)		
  113:  {

Function: ADC_Get_10bits
Source  : ..\..\source\adc.c
Options : -Cc -F7 -Lasm=%n.lst -Ml -N -Os -Ou -Of -Ol0 -OnPMNC -Or

  114:  		u16 result = 0;
  0000 3f01     CLR   result:1
  0002 3f00     CLR   result
  115:  		u8 i;
  116:  
  117:  	ADCCSR = Channel;		// 4 Mhz sampling, ADC on
  0004 b700     LD    ADCCSR,A
  118:  
  119:  	while (!ValBit(ADCCSR,ADCCSR_EOC));	// wait till end of conversion
  0006 0f00fd   BTJF  ADCCSR,#7,*0 ;abs = 0006
  120:  	ADCDRH;                       // and ignore 1st result
  0009 b600     LD    A,ADCDRH
  121:  
  122:  	for (i=0;i<=7;i++)      // take 8 samples
  000b 3f00     CLR   i
  123:  	{
  124:  		while (!ValBit(ADCCSR,ADCCSR_EOC));	// wait till end of conversion
  000d 0f00fd   BTJF  ADCCSR,#7,*0 ;abs = 000d
  125:  		result += ADCDRL;
  0010 b600     LD    A,ADCDRL
  0012 bb01     ADD   A,result:1
  0014 b701     LD    result:1,A
  0016 4f       CLR   A
  0017 b900     ADC   A,result
  0019 b700     LD    result,A
  126:  		result += (u16)(ADCDRH << 2);	// clear EOC bit
  001b be00     LD    X,ADCDRH
  001d 9f       LD    A,X
  001e 5f       CLR   X
  001f 48       SLL   A
  0020 59       RLC   X
  0021 48       SLL   A
  0022 59       RLC   X
  0023 bb01     ADD   A,result:1
  0025 b701     LD    result:1,A
  0027 9f       LD    A,X
  0028 b900     ADC   A,result
  002a b700     LD    result,A
  002c 3c00     INC   i
  002e b600     LD    A,i
  0030 a107     CP    A,#7
  0032 23d9     JRULE *-37 ;abs = 000d
  127:  	}
  128:  
  129:  	result = result >> 3;	// div/8 -> smooth result
  0034 3400     SRL   result
  0036 3601     RRC   result:1
  0038 3400     SRL   result
  003a 3601     RRC   result:1
  003c 3400     SRL   result
  003e 3601     RRC   result:1
  130:  	return (result);
  0040 b601     LD    A,result:1
  0042 be00     LD    X,result
  131:  }
  0044 81       RET   
  132:   
  133:  
  134:  
  135:  /*-----------------------------------------------------------------------------
  136:  ROUTINE Name : ADC_Get_8bits
  137:  
  138:  Description:	Return 8 bits resolution ADC value only.
  139:  Input/Output:	u8/u8 (channel number/result of conversion)
  140:  Comments: 		None
  141:  -----------------------------------------------------------------------------*/
  142:  u8 ADC_Get_8bits(u8 Channel)	
  143:  {

Function: ADC_Get_8bits
Source  : ..\..\source\adc.c
Options : -Cc -F7 -Lasm=%n.lst -Ml -N -Os -Ou -Of -Ol0 -OnPMNC -Or

  144:  		u16 result = 0;
  0000 3f01     CLR   result:1
  0002 3f00     CLR   result
  145:  		u8 i;
  146:  
  147:  	ADCCSR = Channel;		// 4 Mhz sampling, ADC on
  0004 b700     LD    ADCCSR,A
  148:  
  149:  	while (!ValBit(ADCCSR,ADCCSR_EOC));	// wait till end of conversion
  0006 0f00fd   BTJF  ADCCSR,#7,*0 ;abs = 0006
  150:  	ADCDRH;                       // and ignore 1st result
  0009 b600     LD    A,ADCDRH
  151:  
  152:  	for (i=0;i<=7;i++)      // take 8 samples
  000b 3f00     CLR   i
  153:  	{
  154:  		while (!ValBit(ADCCSR,ADCCSR_EOC));	// wait till end of conversion
  000d 0f00fd   BTJF  ADCCSR,#7,*0 ;abs = 000d
  155:  		result += ADCDRH;	// clear EOC bit
  0010 b600     LD    A,ADCDRH
  0012 bb01     ADD   A,result:1
  0014 b701     LD    result:1,A
  0016 4f       CLR   A
  0017 b900     ADC   A,result
  0019 b700     LD    result,A
  001b 3c00     INC   i
  001d b600     LD    A,i
  001f a107     CP    A,#7
  0021 23ea     JRULE *-20 ;abs = 000d
  156:  	}
  157:  
  158:  	result = result >> 3;	// div/8 -> smooth result
  0023 3400     SRL   result
  0025 3601     RRC   result:1
  0027 3400     SRL   result
  0029 3601     RRC   result:1

⌨️ 快捷键说明

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