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

📄 main.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  : 3-phase AC induction motor drive Software Library
    4:  COMPILER : COSMIC / METROWERKS
    5:  
    6:  MODULE  :  main.c
    7:  VERSION :  1.0.0
    8:  
    9:  CREATION DATE : April 2004
   10:  
   11:  AUTHOR :	V. Onde / Microcontroller Division Applications
   12:  			Consumer & Micro Group
   13:  
   14:  -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
   15:  
   16:  DESCRIPTION :   Main Routine
   17:                
   18:  -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
   19:  
   20:  MODIFICATIONS :
   21:  
   22:   ******************************************************************************
   23:   THE SOFTWARE INCLUDED IN THIS FILE IS FOR GUIDANCE ONLY. ST MICROELECTRONICS
   24:   SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES
   25:   WITH RESPECT TO ANY CLAIMS ARISING FROM USE OF THIS SOFTWARE.
   26:  *******************************************************************************
   27:  
   28:  ******************************************************************************/
   29:  
   30:  // Standard types definitions and ST7 specific macros
   31:  #include "lib.h"
   32:  // General purpose peripheral function prototypes
   33:  #include "ports.h"
   34:  #include "adc.h"
   35:  #include "pwmart.h"
   36:  #include "sci.h"
   37:  // ST7 specifics related functions prototypes
   38:  #include "ST7_Misc.h"
   39:  // Motor control specific functions prototypes
   40:  #include "mtc.h"		/* Peripheral specifics */
   41:  #include "acmotor.h"	/* AC motor related */
   42:  #include "config.h"		/* AC motor library configuration keys */
   43:  #include "MainParam.h"	/* Motor control parameters used in functions called from main.c */
   44:  // ST7FMC peripherals Hardware Registers declaration
   45:  #define __DEFINE_REGISTERS_STVD7_INCLUDE__
   46:  #include "ST7FMC2N6.h"
   47:  
   48:  
   49:  ///////////////////////////////////////////////////////////////////////////////
   50:  
   51:  /* Private typedefs (for demo purposes only) */
   52:  typedef enum
   53:  {
   54:  IDLE, START, RUN, STOP, BRAKE, WAIT, FAULT
   55:  } SystStatus_t;
   56:  
   57:  /* Private variable (for demo purposes only) */
   58:  static SystStatus_t State;
   59:  
   60:  /* Private functions (for demo purposes only) */
   61:  static void DoMotorControl( void );
   62:  static SystStatus_t StartMotor( void );
   63:  static void	CheckPowerStage(void);
   64:  static void	SendSystemDataRS232(void);
   65:  
   66:  void main(void)
   67:  {

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

   68:  
   69:     ST7_IntPrioritySetUp();
  0000 cd0000   CALL  ST7_IntPrioritySetUp
   70:  	PORTS_Init();
  0003 cd0000   CALL  PORTS_Init
   71:  	ADC_Init();
  0006 cd0000   CALL  ADC_Init
   72:  	ART_Init();						// PWM ART provided general purpose time bases
  0009 cd0000   CALL  ART_Init
   73:  	ACM_Init();
  000c cd0000   CALL  ACM_Init
   74:  	#ifdef ENABLE_RS232
   75:  		//	Init SCI for hyperterminal: 19200bps/8 data bit/no parity/1 stop bit
   76:  		SCI_Init(SCI_DEFAULT_PARAM1,SCI_DEFAULT_PARAM2); 
   77:  		SCI_Select_Baudrate(SCI_PR_13 + SCI_TR_2 + SCI_RR_2);
   78:  		SCI_Mode(SCI_TX_ENABLE);
   79:  	#endif
   80:  
   81:  	ART_SetMainTimeBase(10);		// 100ms timebase for LED Toggle
  000f a60a     LD    A,#10
  0011 cd0000   CALL  ART_SetMainTimeBase
   82:  
   83:  	EnableInterrupts();
  0014 9a       RIM   
   84:  
   85:  	ART_Start();					// Time bases are now available
  0015 cd0000   CALL  ART_Start
   86:  	State = IDLE;
  0018 4f       CLR   A
  0019 c70001   LD    State:1,A
  001c c70000   LD    State,A
   87:      
   88:  	// Flash LEDs to indicate proper MCU start-up
   89:  	PORTS_GreenLedOn();
  001f cd0000   CALL  PORTS_GreenLedOn
   90:  	while (!ART_IsMainTimeElapsed());
  0022 cd0000   CALL  ART_IsMainTimeElapsed
  0025 4d       TNZ   A
  0026 27fa     JREQ  *-4 ;abs = 0022
   91:  	PORTS_RedLedOn();
  0028 cd0000   CALL  PORTS_RedLedOn
   92:  	while (!ART_IsMainTimeElapsed());
  002b cd0000   CALL  ART_IsMainTimeElapsed
  002e 4d       TNZ   A
  002f 27fa     JREQ  *-4 ;abs = 002b
   93:  	PORTS_GreenLedOn();
  0031 cd0000   CALL  PORTS_GreenLedOn
   94:  
   95:  	// Main Loop
   96:  	while(1)
   97:  	{
   98:  		switch ( State )
  0034 c60001   LD    A,State:1
  0037 ce0000   LD    X,State
  003a bf00     LD    _spill_1,X
  003c b700     LD    _spill_3,A
  003e 5d       TNZ   X
  003f 2678     JRNE  *122 ;abs = 00b9
  0041 a106     CP    A,#6
  0043 2474     JRUGE *118 ;abs = 00b9
  0045 4d       TNZ   A
  0046 2712     JREQ  *20 ;abs = 005a
  0048 4a       DEC   A
  0049 271f     JREQ  *33 ;abs = 006a
  004b 4a       DEC   A
  004c 2727     JREQ  *41 ;abs = 0075
  004e 4a       DEC   A
  004f 2733     JREQ  *53 ;abs = 0084
  0051 4a       DEC   A
  0052 2743     JREQ  *69 ;abs = 0097
  0054 4a       DEC   A
  0055 2759     JREQ  *91 ;abs = 00b0
  0057 4a       DEC   A
  0058 275f     JREQ  *97 ;abs = 00b9
   99:  		{
  100:  			case IDLE:	if ( PORTS_KeyScan() == TRUE )	// Start motor
  005a cd0000   CALL  PORTS_KeyScan
  005d 4a       DEC   A
  005e 2665     JRNE  *103 ;abs = 00c5
  101:  						{
  102:  							#ifdef CLOSED_LOOP
  103:  								ACM_InitSoftStart(START_FREQ);
  0060 5f       CLR   X
  0061 a696     LD    A,#150
  0063 cd0000   CALL  ACM_InitSoftStart
  104:  							#else	/* OPEN_LOOP: Read start-up frequency on trimmer */
  105:  								ACM_InitSoftStart_OL(100 + (ADC_GetRV1()*10));
  106:  							#endif
  107:  							State = START;
  0066 a601     LD    A,#1
  0068 2054     JRT   *86 ;abs = 00be
  108:  						}
  109:  						break;
  110:  
  111:  			case START:	State = StartMotor();
  006a cd0000   CALL  StartMotor
  006d c70001   LD    State:1,A
  0070 cf0000   LD    State,X
  112:  						break;
  0073 2050     JRT   *82 ;abs = 00c5
  113:  
  114:  			case RUN:	if ( PORTS_KeyScan() == TRUE )	// Stop motor
  0075 cd0000   CALL  PORTS_KeyScan
  0078 4a       DEC   A
  0079 2604     JRNE  *6 ;abs = 007f
  115:  						{
  116:  							State = STOP;
  007b a603     LD    A,#3
  117:  						}
  007d 203f     JRT   *65 ;abs = 00be
  118:  						else
  119:  						{
  120:  							DoMotorControl();
  007f cd0000   CALL  DoMotorControl
  0082 2041     JRT   *67 ;abs = 00c5
  121:  						}
  122:  						break;
  123:  
  124:  			case STOP:	{
  125:  								u16 BrakingTorque;
  126:  
  127:  							BrakingTorque = BRAKE_DUTY_CYCLE;
  0084 a640     LD    A,#64
  0086 b701     LD    BrakingTorque:1,A
  128:  							if (BrakingTorque == 0)
  129:  							{
  130:  								ART_SetTimeOutDuration(1000);
  131:  								MTC_DisableMCOutputs();			// PWM is disabled on MCO outputs
  132:  								State = WAIT;
  133:  							}
  134:  							else
  135:  							{
  136:  								MTC_StartBraking( BrakingTorque );
  0088 5f       CLR   X
  0089 cd0000   CALL  MTC_StartBraking
  137:  								ART_SetTimeOutDuration(BRAKE_DURATION);
  008c ae0b     LD    X,#11
  008e a6b8     LD    A,#184
  0090 cd0000   CALL  ART_SetTimeOutDuration
  138:  								State = BRAKE;
  0093 a604     LD    A,#4
  139:  							}
  140:  						}
  141:  						break;
  0095 2027     JRT   *41 ;abs = 00be
  142:  
  143:  			case BRAKE: if (!ART_IsTimeOutElapsed())
  0097 cd0000   CALL  ART_IsTimeOutElapsed
  009a 4d       TNZ   A
  009b 2605     JRNE  *7 ;abs = 00a2
  144:  						{
  145:  							MTC_Brake();
  009d cd0000   CALL  MTC_Brake
  146:  						}
  00a0 2023     JRT   *37 ;abs = 00c5
  147:  						else
  148:  						{
  149:  							MTC_StopBraking();
  00a2 cd0000   CALL  MTC_StopBraking
  150:  							ART_SetTimeOutDuration(1000);
  00a5 ae03     LD    X,#3
  00a7 a6e8     LD    A,#232
  00a9 cd0000   CALL  ART_SetTimeOutDuration
  151:  							State = WAIT;
  00ac a605     LD    A,#5
  00ae 200e     JRT   *16 ;abs = 00be
  152:  						}
  153:  						break;
  154:  
  155:  			case WAIT:	if (ART_IsTimeOutElapsed())
  00b0 cd0000   CALL  ART_IsTimeOutElapsed
  00b3 4d       TNZ   A
  00b4 270f     JREQ  *17 ;abs = 00c5
  156:  						{
  157:  							State = IDLE;
  00b6 4f       CLR   A
  00b7 2005     JRT   *7 ;abs = 00be
  158:  						}
  159:  						break;
  160:  
  161:  			case FAULT:	
  162:  			default:	MTC_DisableMCOutputs();			// PWM is disabled on MCO outputs
  00b9 cd0000   CALL  MTC_DisableMCOutputs
  163:  						State = FAULT;
  00bc a606     LD    A,#6
  00be c70001   LD    State:1,A
  00c1 4f       CLR   A
  00c2 c70000   LD    State,A
  164:  						break;
  165:  		}
  166:  
  167:  		// Verify that inverter is operating properly
  168:  		CheckPowerStage();
  00c5 cd0000   CALL  CheckPowerStage
  169:  
  170:  		// LED management
  171:  		if (ART_IsMainTimeElapsed())
  00c8 cd0000   CALL  ART_IsMainTimeElapsed
  00cb 4d       TNZ   A
  00cc 272d     JREQ  *47 ;abs = 00fb
  00ce ce0000   LD    X,State
  172:  		{
  173:          	switch ( State )
  00d1 c60001   LD    A,State:1
  00d4 bf00     LD    _spill_1,X
  00d6 b700     LD    _spill_3,A
  00d8 ca0000   OR    A,State
  00db 2711     JREQ  *19 ;abs = 00ee
  00dd b600     LD    A,_spill_1
  00df 2b17     JRMI  *25 ;abs = 00f8
  00e1 4d       TNZ   A
  00e2 2b0f     JRMI  *17 ;abs = 00f3
  00e4 2606     JRNE  *8 ;abs = 00ec
  00e6 be00     LD    X,_spill_3
  00e8 a305     CP    X,#5
  00ea 2307     JRULE *9 ;abs = 00f3
  00ec 200a     JRT   *12 ;abs = 00f8
  174:  			{
  175:  				case IDLE:	PORTS_GreenLedOn();
  00ee cd0000   CALL  PORTS_GreenLedOn
  176:  							break;
  00f1 2008     JRT   *10 ;abs = 00fb
  177:  				case START:
  178:  				case RUN:	
  179:  				case STOP:
  180:  				case BRAKE:
  181:  				case WAIT:  PORTS_RedLedOn();
  00f3 cd0000   CALL  PORTS_RedLedOn
  182:  							break;
  00f6 2003     JRT   *5 ;abs = 00fb
  183:  				case FAULT:	
  184:  				default:	PORTS_RedLedToggle();
  00f8 cd0000   CALL  PORTS_RedLedToggle
  00fb cc0034   JP    main:52
  185:  							break;
  186:  			}
  187:  		}
  188:  
  189:  		#ifdef ENABLE_RS232
  190:  			SendSystemDataRS232();
  191:  		#endif
  192:  
  193:  	}	// End of while(1)
  194:  } // main loop
  195:  
  196:  
  197:  /*-----------------------------------------------------------------------------
  198:  ROUTINE Name : CheckPowerStage
  199:  
  200:  Description : Verify that inverter power stage is running fine:
  201:  					heatsink temperature
  202:  					voltage bus value
  203:  					current limitation not triggerred
  204:  -----------------------------------------------------------------------------*/
  205:  void CheckPowerStage(void)
  206:  {

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

  207:  
  208:  	if (ADC_CheckOverVoltage() || ADC_CheckOverTemp() || MTC_CheckEmergencyStop())
  0000 cd0000   CALL  ADC_CheckOverVoltage
  0003 4d       TNZ   A
  0004 260c     JRNE  *14 ;abs = 0012
  0006 cd0000   CALL  ADC_CheckOverTemp
  0009 4d       TNZ   A
  000a 2606     JRNE  *8 ;abs = 0012
  000c cd0000   CALL  MTC_CheckEmergencyStop
  000f 4d       TNZ   A
  0010 2709     JREQ  *11 ;abs = 001b
  209:  	{
  210:  		State = FAULT;
  0012 a606     LD    A,#6
  0014 c70001   LD    State:1,A
  0017 4f       CLR   A
  0018 c70000   LD    State,A
  211:  	}
  212:  
  213:  }
  001b 81       RET   

⌨️ 快捷键说明

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