📄 spc3dps2.h
字号:
/*
/*****************************************************
// 程序名: spc3dps2.h //
// 软件名称及版本: 1.0 //
// 系统/模块名称: Profibus从站 //
// 编写工程师: Schmidt Xaver(SIMENS demo) //
// 编写及完成日期: 2001-12-29 //
// 最后修改日期与修改人:唐铭山 //
// 程序描述:该程序是根据183从站板的module程序修改 //
*******************************************************/
#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 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -