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

📄 spc3源程序代码.txt

📁 PROFIBUS的的通讯芯片SPC3的控制源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#ifndef SPC3_H__   /* include only once */
#define SPC3_H__

#ifndef TRUE
  #define TRUE  1
#endif
#ifndef FALSE
  #define FALSE 0
#endif

#ifndef SPC3_INTEL_MODE
  #error !!! FEHLER !!! SPC3_INTEL_MODE wurde nicht deklariert !!!
#endif  /* Ende fuer SPC3_INTEL_MODE */


/*+-------------------------------------------------------------------------+
  |    C o m p i l e r - d e p e n d e n d     D e f i n i t i o n s        |
  +-------------------------------------------------------------------------+*/

/*------------------------ BSO Tasking C166-Compiler ------------------------*/
#ifdef  _C166
  #define _INTEL_COMP   /* iNTEL-mode */
  #define SPC3_DATA_ATTR
  #ifndef SPC3_NO_BASE_TYPES
#ifndef SPC3_BASE_TYPES_DEF__
  typedef unsigned char UBYTE;
  typedef unsigned int UWORD;
  typedef char BYTE;
  typedef int WORD;
  #define SPC3_BASE_TYPES_DEF__
#endif    /* end SPC3_BASE_TYPES_DEF__ */
  #endif    /* end SPC3_NO_BASE_TYPES */
  #ifdef  SPC3_FAR
#define SPC3_PTR_ATTR far
typedef unsigned long SPC3_ADTYP;
  #else
#ifdef SPC3_NEAR
  #define SPC3_PTR_ATTR near
  typedef unsigned int SPC3_ADTYP;
  typedef unsigned short SPC3_OFFS;
#else
  #error !!! ERROR !!! neither SPC3_FAR nor SPC3_NEAR defined !!!
#endif    /* end SPC3_NEAR */
  #endif    /* end SPC3_FAR */
/*--------------------- end  BSO Tasking C166-Compiler ----------------------*/
/*--------------------------- Keil 80C32-Compiler ---------------------------*/
#elif defined __C51__   /* Motorola-mode */
  #ifndef SPC3_NO_BASE_TYPES
#ifndef SPC3_BASE_TYPES_DEF__
  typedef unsigned char UBYTE;
  typedef unsigned int UWORD;
  typedef char BYTE;
  typedef int WORD;
  #define SPC3_BASE_TYPES_DEF__
#endif    /* end SPC3_BASE_TYPES_DEF__ */
  #endif    /* end SPC3_NO_BASE_TYPES */
  #define SPC3_PTR_ATTR xdata
  #ifdef SPC3_DATA_XDATA
#define SPC3_DATA_ATTR xdata
  #else
#ifdef SPC3_DATA_IDATA
  #define SPC3_DATA_ATTR idata
#else
  #define SPC3_DATA_ATTR
#endif
  #endif
  typedef unsigned int SPC3_ADTYP;
  typedef unsigned short SPC3_OFFS;
  typedef unsigned int SPC3_PTR;
/*------------------------ end Keil 80C32-Compiler -------------------------*/
#else /* no supported compiler found */
  #error  !!! ERROR !!! Unknown compiler !!!
#endif  /*-- end Compiler-dependent Declarations */

/*---------------------------- helpmakros ----------------------------------*/
/*-- byte-swapping --*/
#if SPC3_INTEL_MODE
  /*-- SPC3 with iNTEL-interface --*/
  #define _IML  0   /* Interface-Motorola, Low-Byte */
  #define _IMH  1   /* Interface-Motorola, High-Byte */
  #ifndef _INTEL_COMP
/*-- iNTEL-interface, but no iNTEL-Compiler */
#define _SWAP_WORDS   /* words must be swapped */
  #endif
#else
  /*-- SPC3 with Motorola-interface --*/
  #define _IML  1   /* Interface-Motorola, High-Byte */
  #define _IMH  0   /* Interface-Motorola, Low-Byte */
  #ifdef _INTEL_COMP
/*-- Motorola-interface, but iNTEL-Compiler */
#define _SWAP_WORDS   /* words must be swapped */
  #endif
#endif

#ifdef  _SWAP_WORDS
  #define SWAP_W(WX)  (((WX)<<8) | (((WX)>>8)&0xff))
#else
  #define SWAP_W(WX)  (WX)
#endif

/*-- use of spec prm buf (for dps2_buf_init) --*/
#ifdef  DPS2_USE_SPEC_PRM_BUF
  #define _USE_SPEC_PRM_BUF__ TRUE
#else
  #define _USE_SPEC_PRM_BUF__ FALSE
#endif

/*-- NULL-pointer in SPC3-compatible memory-model --*/
#define SPC3_NIL    ((void SPC3_PTR_ATTR*)0)

/*+-------------------------------------------------------------------------+
  |           T y p e d e f s   a n d   S t r u c t u r e s                 |
  +-------------------------------------------------------------------------+*/

/*-- returncodes of SPC3_INIT() --*/
enum SPC3_INIT_RET {SPC3_INIT_OK, SPC3_INITF_LESS_MEM, SPC3_INITF_NOFF,
DPS2_INITF_DIN_DOUT_LEN, DPS2_INITF_DIAG_LEN,
DPS2_INITF_PRM_LEN, DPS2_INITF_CFG_LEN, DPS2_INITF_SSA_LEN,
FDL_INITF_IVP, FDL_INITF_SCNT };

/*-- struktur of the SPC3 --*/
typedef struct {
  /*-- start of the processor-registers --*/
  union {                       /* 0x00: Int.-Request-Register */
UWORD w;
UBYTE b[2];
} int_req;
  union {                       /* 0x02: */
union {                     /*  Int.-Register (read) */
  UWORD w;
  UBYTE b[2];
  } com;
union {                     /*  Int.-Acknowledge-Reg. (write) */
  UWORD w;
  UBYTE b[2];
  } ack;
} int_reg;
  union {                       /* 0x04: Interrupt-Mask- and Status-Reg. */
UWORD mask;                 /*  Interrupt-Mask-Register (write) */
UBYTE status[2];            /*  Status-Register (read) */
} is_reg;
  UWORD mode_reg0;              /* 0x06 */
  union {  /*-- union x1 is for R/W */
struct {  /*-- read-area */
  UBYTE din_buffer_sm;      /* 0x08 */
  UBYTE new_din_buf_cmd;    /* 0x09 */
  UBYTE dout_buffer_sm;     /* 0x0a */
  UBYTE next_dout_buf_cmd;  /* 0x0b */
  } r;
struct {  /*-- write-area */
  UBYTE mode_reg1_s;        /* 0x08 */
  UBYTE mode_reg1_r;        /* 0x09 */
  UBYTE wd_baud_ctrl_val;   /* 0x0a */
  UBYTE mintsdr_val;        /* 0x0b */
  } w;
} x1;
  UBYTE diag_buffer_sm;         /* 0x0c */
  UBYTE new_diag_buffer_cmd;    /* 0x0d */
  UBYTE user_prm_data_ok;       /* 0x0e */
  UBYTE user_prm_data_nok;      /* 0x0f */
  UBYTE user_cfg_data_ok;       /* 0x10 */
  UBYTE user_cfg_data_nok;      /* 0x11 */
  UBYTE user_ddb_prm_data_ok;   /* 0x12 */
  UBYTE user_ddb_prm_data_nok;  /* 0x13 */
  UBYTE ssa_buffer_free_cmd;    /* 0x14 */
  UBYTE reserved_15;            /* 0x15 */
  /*-- start of theorganizational parameters --*/
  UBYTE r_ts_adr;               /* 0x16 */
  UBYTE r_fdl_sap_list_ptr;     /* 0x17 */
  UWORD r_user_wd_value;        /* 0x18 */
  UBYTE r_len_dout_buf;         /* 0x1a */
  UBYTE r_dout_buf_ptr[3];      /* 0x1b */
  UBYTE r_len_din_buf;          /* 0x1e */
  UBYTE r_din_buf_ptr[3];       /* 0x1f */
  UBYTE r_len_ddbout_buf;       /* 0x22 */
  UBYTE r_ddbout_buf_ptr;       /* 0x23 */
  UBYTE r_len_diag_buf[2];      /* 0x24 */
  UBYTE r_diag_buf_ptr[2];      /* 0x26 */
  UBYTE r_len_cntrl_buf[2];     /* 0x28 */
  UBYTE r_aux_buf_sel;          /* 0x2a */
  UBYTE r_aux_buf_ptr[2];       /* 0x2b */
  UBYTE r_len_ssa_buf;          /* 0x2d */
  UBYTE r_ssa_buf_ptr;          /* 0x2e */
  UBYTE r_len_prm_buf;          /* 0x2f */
  UBYTE r_prm_buf_ptr;          /* 0x30 */
  UBYTE r_len_cfg_buf;          /* 0x31 */
  UBYTE r_cfg_buf_ptr;          /* 0x32 */
  UBYTE r_len_read_cfg_buf;     /* 0x33 */
  UBYTE r_read_cfg_buf_ptr;     /* 0x34 */
  UBYTE r_len_ddb_prm_buf;      /* 0x35 */
  UBYTE r_ddb_prm_buf_ptr;      /* 0x36 */
  UBYTE r_score_exp;            /* 0x37 */
  UBYTE r_score_error;          /* 0x38 */
  UBYTE r_real_no_add_change;   /* 0x39 */
  UBYTE r_ident_low;            /* 0x3a */
  UBYTE r_ident_high;           /* 0x3b */
  UBYTE r_gc_command;           /* 0x3c */
  UBYTE r_len_spec_prm_buf;     /* 0x3d */
  UBYTE reserved_3e_3f[2];      /* 0x3e - 0x3f */
  UBYTE user[1472];             /* 0x40: Speicherbereich fuer User */
} SPC3;

/*-- structure for DPS2-Buffer-Initialization --*/
typedef struct {
  UWORD din_dout_buf_len; /* total len of I/O data */
  UBYTE diag_buf_len;     /* len of diagnosticdatabuffer */
  UBYTE prm_buf_len;      /* len of parameterbuffer */
  UBYTE cfg_buf_len;      /* len of config-databuffer */
  UBYTE ssa_buf_len;      /* len of set-slave-address-buffer */
  } DPS2_BUFINIT;

/*============= DPS2-specific Typedefs and Structures =============*/

/*-- structure for I/O-len calculation --*/
typedef struct {
  UBYTE inp_data_len;
  UBYTE outp_data_len;
  } DPS2_IO_DATA_LEN;

/*-- structure for Diagstic-data-telegramms --*/
struct dps_diag_state_def
{
  UBYTE state_1;
  UBYTE state_2;
  UBYTE state_3;
  UBYTE master_add;
  UBYTE ident_number_high;
  UBYTE ident_number_low;
  UBYTE first_header_byte;
};

/*-- structure for parameter-telegramms --*/
struct dps_prm_state_def
{
  UBYTE state;
  UBYTE wd_fact_1;
  UBYTE wd_fact_2;
  UBYTE t_sdr_min;
  UBYTE ident_number_high;
  UBYTE ident_number_low;
  UBYTE group_ident;
  UBYTE first_user_prm_byte;
};

/*-- structure for Set-Slave-Address-telegramms --*/
struct dps_address_data
{
  UBYTE new_address;
  UBYTE ident_number_high;
  UBYTE ident_number_low;
  UBYTE no_add_chg;
  UBYTE first_rem_data_byte;
};


/*+-------------------------------------------------------------------------+
  |                           L i t e r a l s                               |
  +-------------------------------------------------------------------------+*/

/*--------------------- Mode-Register 0 ----------------------*/
  #define DIS_START_CONTROL   ((UWORD)0x0001)
  #define DIS_STOP_CONTROL    ((UWORD)0x0002)
  #define EN_FDL_DDB          ((UWORD)0x0004)
  #define ENABLE_DEF_MINTSDR  ((UWORD)0x0008)
  #define INT_POL_LOW         ((UWORD)0x0000)
  #define INT_POL_HIGH        ((UWORD)0x0010)
  #define EARLY_RDY           ((UWORD)0x0020)
  #define SYNC_SUPPORTED      ((UWORD)0x0040)
  #define FREEZE_SUPPORTED    ((UWORD)0x0080)
  #define DP_MODE             ((UWORD)0x0100)
  #define EOI_TIMEBASE_1u     ((UWORD)0x0000)
  #define EOI_TIMEBASE_1m     ((UWORD)0x0200)
  #define USER_TIMEBASE_1m    ((UWORD)0x0000)
  #define USER_TIMEBASE_10m   ((UWORD)0x0400)
  #define SPEC_PRM_BUF        ((UWORD)0x1000)
  #define SPEC_CLEAR          ((UWORD)0x2000)

/*--------------------- Mode-Register 1 ----------------------*/
  #define START_SPC3          0x01
  #define EOI_SPC3            0x02
  #define GO_OFFLINE_SPC3     0x04
  #define USER_LEAVE_MASTER   0x08
  #define EN_CHG_CFG_BUFFER   0x10
  #define RES_USER_WD         0x20

/*-------------------- Status-Register 0 ---------------------*/
  #define SPC3_OFFLINE_PASS   0x01
  #define FDL_IND_ST          0x02
  #define DPS2_DIAG_FLAG      0x04
  #define ACCESS_VIOLATION    0x08

/*------------------ diagnostic-control -------------------*/
  #define DPS2_EXT_DIAG       0x01
  #define DPS2_STAT_DIAG      0x02
  #define DPS2_EXT_DIAG_OVF   0x04

/*----------------- Global-Control-command ------------------*/
  #define DPS2_CLEAR_DATA     0x02
  #define DPS2_UNFREEZE       0x04
  #define DPS2_FREEZE         0x08
  #define DPS2_UNSYNC         0x10
  #define DPS2_SYNC           0x20

/*----------------- indications (IR-Register) -----------------*/
  /*-- indications as bytes --*/
  #define MAC_RESET_B             0x01 /* Offline; DPS2 */
  #define GO_LEAVE_DATA_EX_B      0x02 /* Leave DataExcahnge; DPS2 */
  #define BAUDRATE_DETECT_B       0x04 /* Baudrate found; DPS2 */
  #define WD_DP_MODE_TIMEOUT_B    0x08 /* DP-Watchdog expired; DPS2 */
  #define USER_TIMER_CLOCK_B      0x10 /* Timer-Interval; DPS2 */
  #define DDB_SCORE_ERROR_B       0x20 /* reserved */
  #define NEW_DDB_PRM_DATA_B      0x40 /* reserved */
  #define DDB_OUT_B               0x80 /* reserved */
  #define NEW_GC_COMMAND_B        0x01 /* Global Control; DPS2 */
  #define NEW_SSA_DATA_B          0x02 /* Set Slave Address; DPS2 */
  #define NEW_CFG_DATA_B          0x04 /* Config Data; DPS2 */
  #define NEW_PRM_DATA_B          0x08 /* Param. Data; DPS2 */
  #define DIAG_BUFFER_CHANGED_B   0x10 /* Diagnostic-Buffer changed; DPS2 */
  #define DX_OUT_B                0x20 /* new output-data; DPS2 */

⌨️ 快捷键说明

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