无刷直流电机的控制程序

源代码在线查看: compiler.h

软件大小: 42 K
上传用户: peterzhang1982
关键词: 无刷直流电机 控制 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*H**************************************************************************
				* $RCSfile: compiler.h,v $
				*----------------------------------------------------------------------------
				* Copyright (c) 2003 Atmel.
				*----------------------------------------------------------------------------
				* RELEASE:      $Name: demo-bldc-sensor-at90pwm3-4_2_0 $      
				* FILE_REV:     $Revision: 1.13.2.18 $     
				* FILE_CVSID:   $Id: compiler.h,v 1.13.2.18 2005/06/29 12:45:35 raubree Exp $       
				*----------------------------------------------------------------------------
				* PURPOSE:
				* This file redefines dedicated IAR AVR
				* keywords in order to ensure that any source file can be processed by
				* these compilers.
				*****************************************************************************/
				
				#ifndef _COMPILER_H_
				#define _COMPILER_H_
				
				/*_____ I N C L U D E S ____________________________________________________*/
				
				
				/*_____ D E C L A R A T I O N S ____________________________________________*/
				#define LITTLE_ENDIAN
				
				#ifndef ASM_INCLUDE // define ASM_INCLUDE in your a51 source code before include of .h file
				typedef float               Float16;
				
				typedef unsigned char       U8 ;
				typedef unsigned short      U16;
				typedef unsigned long       U32;
				typedef char                S8 ;
				typedef short               S16;
				typedef long                S32;
				#if (defined __C51__)
				typedef bit                 Bool;    // Shall be used with _MEM_TYPE_BIT_ to optimize the memory.
				#else
				typedef unsigned char       Bool;
				#endif
				
				typedef U8                  Status;
				typedef Bool                Status_bool;
				#define PASS 0
				#define FAIL 1
				
				
				
				#if (defined __C51__)
				#  define _MEM_TYPE_BIT_              bdata  // Used for bit accesses
				#  define _MEM_TYPE_FAST_              data
				#  define _MEM_TYPE_MEDFAST_          idata
				#  define _MEM_TYPE_MEDSLOW_          pdata
				#  define _MEM_TYPE_SLOW_             xdata
				#else
				#  define _MEM_TYPE_BIT_
				#  define _MEM_TYPE_FAST_
				#  define _MEM_TYPE_MEDFAST_
				#  define _MEM_TYPE_MEDSLOW_
				#  define _MEM_TYPE_SLOW_
				#endif
				
				typedef unsigned char       Uchar;
				
				
				typedef unsigned char       Uint8;
				typedef unsigned int        Uint16;
				typedef unsigned long int   Uint32;
				
				typedef char                Int8;
				typedef int                 Int16;
				typedef long int            Int32;
				
				typedef unsigned char       Byte;
				typedef unsigned int        Word;
				typedef unsigned long int   DWord;
				
				typedef union 
				{
				  Uint32 dw; // l changed in dw (double word) because l is used for signed long...
				  Uint16 w[2];
				  Uint8  b[4];
				} Union32;
				
				typedef union 
				{
				  Uint16 w;
				  Uint8  b[2];
				} Union16;
				
				#ifdef __IAR_SYSTEMS_ICC__        
				typedef char     bit;
				typedef int      p_uart_ptchar;
				typedef int      r_uart_ptchar;
				#endif
				#ifdef __CODEVISIONAVR__
				typedef char     bit;
				typedef int      p_uart_ptchar;
				typedef char     r_uart_ptchar;
				#endif
				#if !defined(__IAR_SYSTEMS_ICC__) && !defined(___ICC__)
				typedef char      p_uart_ptchar;
				typedef char      r_uart_ptchar;
				#endif
				
				#endif
				
				/**********************************************************************************/
				/* codevision COMPILER (__CODEVISIONAVR__)                                                 */
				/**********************************************************************************/
				#ifdef __ICC__        
				#define _ConstType_	lit
				#define _MemType_
				#define _GenericType_ __generic
				#define code lit
				#define xdata
				#define idata
				#define data
				#endif
				/**********************************************************************************/
				/* IAR COMPILER (__IAR_SYSTEMS_ICC__)                                             */
				/**********************************************************************************/
				#ifdef __IAR_SYSTEMS_ICC__        
				#include "inavr.h"
				#define _ConstType_	__flash
				#define _MemType_
				#define _GenericType_ __generic
				#define code __flash
				#define xdata
				#define idata
				#define data
				#define Enable_interrupt() __enable_interrupt()
				#define Disable_interrupt() __disable_interrupt()
				#endif
				
				
				/* General purpose defines */
				/*#define _ConstType_	__farflash
				#define _MemType_
				#define _GenericType_ __generic
				#define code __farflash
				#define xdata
				#define idata
				#define data*/
				
				
				
				
				/*_____ M A C R O S ________________________________________________________*/
				/* little-big endian management */
				#define INTEL_ALIGNMENT     LITTLE_ENDIAN 
				#define MOTOROLA_ALIGNMENT  BIG_ENDIAN
				
				// Union16/32 endian handlers
				#ifdef LITTLE_ENDIAN     // => 16bit: (LSB,MSB), 32bit: (LSW,MSW) or (LSB0,LSB1,LSB2,LSB3) or (MSB3,MSB2,MSB1,MSB0)
				#define MSB(union16)        ((union16).b[1])
				#define LSB(union16)        (*(union16).b)
				#define MSW(union32)        ((union32).w[1])
				#define LSW(union32)        (*(union32).w)
				#define MSB0(union32)       ((union32).b[3])
				#define MSB1(union32)       ((union32).b[2])
				#define MSB2(union32)       ((union32).b[1])
				#define MSB3(union32)       (*(union32).b)
				#define LSB0(union32)       (*(union32).b)
				#define LSB1(union32)       ((union32).b[1])
				#define LSB2(union32)       ((union32).b[2])
				#define LSB3(union32)       ((union32).b[3])
				#else // BIG_ENDIAN         => 16bit: (MSB,LSB), 32bit: (MSW,LSW) or (LSB3,LSB2,LSB1,LSB0) or (MSB0,MSB1,MSB2,MSB3)
				#define MSB(union16)        (*(union16).b)
				#define LSB(union16)        ((union16).b[1])
				#define MSW(union32)        (*(union32).w)
				#define LSW(union32)        ((union32).w[1])
				#define MSB0(union32)       (*(union32).b)
				#define MSB1(union32)       ((union32).b[1])
				#define MSB2(union32)       ((union32).b[2])
				#define MSB3(union32)       ((union32).b[3])
				#define LSB0(union32)       ((union32).b[3])
				#define LSB1(union32)       ((union32).b[2])
				#define LSB2(union32)       ((union32).b[1])
				#define LSB3(union32)       (*(union32).b)
				#endif
				
				// Endian converters
				#define LE16(b) (((Uint16)((b) & 0xFF) > 8))
				#define LE32(b) (((Uint32)((b) & 0xFF) 				             (((Uint32)(b) & 0xFF0000) >> 8) | (((Uint32)(b) & 0xFF000000) >> 24))
				
				// host to network conversion: used for Intel HEX format, TCP/IP, ...
				// Convert a 16-bit value from host-byte order to network-byte order
				// Standard Unix, POSIX 1003.1g (draft)
				
				#ifdef LITTLE_ENDIAN
				#define htons(a)    LE16(a)
				#define ntohs(a)    htons(a)
				#define htonl(a)    LE32(a)
				#define ntohl(a)    htonl(a)
				#else
				#define htons(a)    (a)
				#define ntohs(a)    (a)
				#define htonl(a)    (a)
				#define ntohl(a)    (a)
				#endif
				
				
				/* Constants */
				#define FALSE   0
				#define TRUE    1
				#define KO      0
				#define OK      1
				#define OFF     0
				#define ON      1
				#define NULL    0
				#ifndef ASM_INCLUDE // define ASM_INCLUDE in your a51 source code before include of .h file
				#define CLR     0
				#define SET     1
				#endif
				
				/* Bit and bytes manipulations */
				#define LOW(U16)                ((Uchar)U16)
				#define HIGH(U16)               ((Uchar)(U16>>8))
				#define TST_BIT_X(addrx,mask)   (*addrx & mask)
				#define SET_BIT_X(addrx,mask)   (*addrx = (*addrx | mask))
				#define CLR_BIT_X(addrx,mask)   (*addrx = (*addrx & ~mask))
				#define OUT_X(addrx,value)      (*addrx = value)
				#define IN_X(addrx)             (*addrx)
				
				/*M**************************************************************************
				* NAME: Long_call
				*----------------------------------------------------------------------------
				* PARAMS:
				* addr: address of the routine to call
				*----------------------------------------------------------------------------
				* PURPOSE: 
				* Call the routine at address addr: generate an Assembly LCALL addr opcode.
				*----------------------------------------------------------------------------
				* EXAMPLE:
				* Long_call(0); // Software reset (if no IT used before)
				*----------------------------------------------------------------------------
				* NOTE: 
				* May be used as a long jump opcode in some special cases
				*****************************************************************************/
				#define Long_call(addr)         ((*(void (_ConstType_*)(void))(addr))())
				
				/* {For Langdoc} */
				
				/***********************************************************
				 SET_SFR_BIT macro 
				  parameters 
				    sfr_reg : defined value in include file for sfr register 
				    bit_pos : defined value B_XX in include file for particular
				              bit of sfr register 
				    bit_val : CLR / SET 
				************************************************************/
				#define SET_SFR_BIT(sfr_reg, bit_pos, bit_val) { sfr_reg &= ~(1				
				/***********************************************************
				 bit_is_clear macro 
				  parameters 
				    PORT     : defined value in include file for sfr register 
				    POSITION : defined value in include file for particular
				              bit of sfr register 
				  example : if (bit_is_clear(PORTB,PORTB3)) ...
				************************************************************/
				#define bit_is_clear(PORT,POSITION) ((PORT & (1				
				/***********************************************************
				 bit_is_set macro 
				  parameters 
				    PORT     : defined value in include file for sfr register 
				    POSITION : defined value in include file for particular
				              bit of sfr register 
				  example : if (bit_is_set(PORTB,PORTB3)) ...
				************************************************************/
				#define bit_is_set(PORT,POSITION) ((PORT & (1				
				
				
				/******************************************************************************/
				/* IAR COMPILER                                                               */
				/******************************************************************************/
				        
				#define __IOMACRO_H
				
				#define TID_GUARD(proc) ((__TID__ & 0x7FF0) != ((90 				
				
				/*----------------------------------------------------------------------------*/
				#ifdef __IAR_SYSTEMS_ASM__
				/*----------------------------------------------------------------------------*/
				
				/* Byte sized SFRs */
				#define SFR_B_BITS(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H)\
					sfrb	_NAME = _ADDR
				#define SFR_B_BITS_EXT(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H)\
					sfrb	_NAME = _ADDR
				#define SFR_B2_BITS(_NAME1,_NAME2,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H)\
					ASMSFRB2 _NAME1, _NAME2, _ADDR
				
				ASMSFRB2 MACRO
					sfrb	\1 = \3
					sfrb	\2 = \3
					ENDM
				
				
				/* Word sized SFRs, needs to be expanded into an assembler macro first. */
				#define SFR_W_BITS(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, _I,_J,_K,_L,_M,_N,_O,_P)\
					ASMSFRW	_NAME, _ADDR
				
				#define SFR_W_BITS_EXT(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, _I,_J,_K,_L,_M,_N,_O,_P)\
					ASMSFRW	_NAME, _ADDR
				
				ASMSFRW	MACRO
					sfrw	\1  = \2
					sfrb	\1L = (\2+0)
					sfrb	\1H = (\2+1)
					ENDM
				
				#endif /* __IAR_SYSTEMS_ASM__ */
				
				/*----------------------------------------------------------------------------*/
				#ifdef __ICCAVR__
				/*----------------------------------------------------------------------------*/
				#define __BYTEBITS(_NAME,_A,_B,_C,_D,_E,_F,_G,_H) \
				unsigned char _NAME ## _ ## _A:1, \
				              _NAME ## _ ## _B:1, \
				              _NAME ## _ ## _C:1, \
				              _NAME ## _ ## _D:1, \
				              _NAME ## _ ## _E:1, \
				              _NAME ## _ ## _F:1, \
				              _NAME ## _ ## _G:1, \
				              _NAME ## _ ## _H:1;
				
				#define SFR_B_BITS(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H) \
				    __io union { \
				      unsigned char   _NAME;           /* The sfrb as 1 byte */ \
				      struct {                        /* The sfrb as 8 bits */ \
				        __BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H) \
				      };  \
				    } @ _ADDR;
				#define SFR_B2_BITS(_NAME1, _NAME2, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H) \
				    __io union { \
				      unsigned char   _NAME1;           /* The sfrb as 1 byte */ \
				      unsigned char   _NAME2;           /* The sfrb as 1 byte */ \
				      struct {                        /* The sfrb as 8 bits */ \
				        __BYTEBITS(_NAME1, _A,_B,_C,_D,_E,_F,_G,_H) \
				      };  \
				      struct {                        /* The sfrb as 8 bits */ \
				        __BYTEBITS(_NAME2, _A,_B,_C,_D,_E,_F,_G,_H) \
				      };  \
				    } @ _ADDR;
				#define SFR_B_BITS_EXT(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H) \
				    __tiny __no_init volatile union { \
				      unsigned char   _NAME;           /* The sfrb as 1 byte */ \
				      struct {                        /* The sfrb as 8 bits */ \
				        __BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H) \
				      };  \
				    } @ _ADDR;
				  
				#define SFR_W_BITS(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, _I,_J,_K,_L,_M,_N,_O,_P) \
				    __io union { \
				      unsigned short  _NAME;  /* The sfrw as 1 short */ \
				      struct {                /* The sfrw as 16 bits */ \
				        __BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H)   /* Bit names defined by user */  \
				        __BYTEBITS(_NAME, _I,_J,_K,_L,_M,_N,_O,_P)   /* Bit names defined by user */  \
				      };  \
				      struct { /* The sfrw as 2 bytes */ \
				        unsigned char _NAME ## L; \
				        unsigned char _NAME ## H; \
				      };  \
				      struct {                          /* The sfrw as 2 x 8 bits */ \
				        __BYTEBITS(_NAME ## L, Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7)  /* Bit names hard coded to 0-7 */ \
				        __BYTEBITS(_NAME ## H, Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7)  /* Bit names hard coded to 0-7 */ \
				      };  \
				    } @ _ADDR;
				
				#define SFR_W_BITS_EXT(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, _I,_J,_K,_L,_M,_N,_O,_P) \
				   __io union { \
				    unsigned short  _NAME;   \
				     struct {                /* The sfrw_ext as 16 bits */ \
				        __BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H)   /* Bit names defined by user */  \
				        __BYTEBITS(_NAME, _I,_J,_K,_L,_M,_N,_O,_P)   /* Bit names defined by user */  \
				      };  \
				      struct { /* The sfrw _ext as 2 bytes */ \
				        unsigned char _NAME ## L; \
				        unsigned char _NAME ## H; \
				      };  \
				      struct {                          /* The sfrw_ext as 2 x 8 bits */ \
				        __BYTEBITS(_NAME ## L, Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7)  /* Bit names hard coded to 0-7 */ \
				        __BYTEBITS(_NAME ## H, Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7)  /* Bit names hard coded to 0-7 */ \
				      };  \
				    } @ _ADDR;
				
				#endif 
				
				#define SFR_B(_NAME, _ADDR) SFR_B_BITS(_NAME, _ADDR, \
				                                    Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7)
				#define SFR_B2(_NAME1, _NAME2, _ADDR) SFR_B2_BITS(_NAME1, _NAME2, _ADDR, \
				                                    Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7)
				#define SFR_B_EXT(_NAME, _ADDR) SFR_B_BITS_EXT(_NAME, _ADDR, \
				                                    Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7)
				
				#define SFR_W(_NAME, _ADDR)  SFR_W_BITS(_NAME, _ADDR, \
				                                    Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7, \
				                                    Bit8,Bit9,Bit10,Bit11,Bit12,Bit13,Bit14,Bit15)
				
				#define SFR_W_EXT(_NAME, _ADDR)  SFR_W_BITS_EXT(_NAME, _ADDR, \
				                                    Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7, \
				                                    Bit8,Bit9,Bit10,Bit11,Bit12,Bit13,Bit14,Bit15)
				
				#endif /* _COMPILER_H_ */
				
							

相关资源