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

📄 spc3dps2.h

📁 pROFIBUS 从站源程序 SPC3 pROFIBUS 从站源程序 SPC3
💻 H
📖 第 1 页 / 共 3 页
字号:
  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;              /*SPC3的1.5K RAM*/

/*--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 */
  } SPC3_DATA_ATTR 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 - PDF22 */
  #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 */
  #define POLL_END_IND_B          0x40 /* reserved */
  #define REQ_PDU_IND_B           0x80 /* reserved */

  /*-- indications as words --*/
  #define MAC_RESET           (SWAP_W(((UWORD)MAC_RESET_B))) /*双字节调整(如有需要)*/
  #define GO_LEAVE_DATA_EX    (SWAP_W(((UWORD)GO_LEAVE_DATA_EX_B)))
  #define BAUDRATE_DETECT     (SWAP_W(((UWORD)BAUDRATE_DETECT_B)))
  #define WD_DP_MODE_TIMEOUT  (SWAP_W(((UWORD)WD_DP_MODE_TIMEOUT_B)))
  #define USER_TIMER_CLOCK    (SWAP_W(((UWORD)USER_TIMER_CLOCK_B)))
  #define DDB_SCORE_ERROR     (SWAP_W(((UWORD)DDB_SCORE_ERROR_B)))
  #define NEW_DDB_PRM_DATA    (SWAP_W(((UWORD)NEW_DDB_PRM_DATA_B)))
  #define DDB_OUT             (SWAP_W(((UWORD)DDB_OUT_B)))
  #define NEW_GC_COMMAND      (SWAP_W((((UWORD)NEW_GC_COMMAND_B) << 8)))
  #define NEW_SSA_DATA        (SWAP_W((((UWORD)NEW_SSA_DATA_B) << 8)))
  #define NEW_CFG_DATA        (SWAP_W((((UWORD)NEW_CFG_DATA_B) << 8)))
  #define NEW_PRM_DATA        (SWAP_W((((UWORD)NEW_PRM_DATA_B) << 8)))
  #define DIAG_BUFFER_CHANGED (SWAP_W((((UWORD)DIAG_BUFFER_CHANGED_B) << 8)))
  #define DX_OUT              (SWAP_W((((UWORD)DX_OUT_B) << 8)))
  #define POLL_END_IND        (SWAP_W((((UWORD)POLL_END_IND_B) << 8)))
  #define REQ_PDU_IND         (SWAP_W((((UWORD)REQ_PDU_IND_B) << 8)))

  /*-- indications as bit numbers --*/
  #define MAC_RESET_NR              0
  #define GO_LEAVE_DATA_EX_NR       1
  #define BAUDRATE_DETECT_NR        2
  #define WD_DP_MODE_TIMEOUT_NR     3
  #define USER_TIMER_CLOCK_NR       4
  #define DDB_SCORE_ERROR_NR        5
  #define NEW_DDB_PRM_DATA_NR       6
  #define DDB_OUT_NR                7
  #define NEW_GC_COMMAND_NR         8
  #define NEW_SSA_DATA_NR           9
  #define NEW_CFG_DATA_NR           10
  #define NEW_PRM_DATA_NR           11
  #define DIAG_BUFFER_CHANGED_NR    12
  #define DX_OUT_NR                 13
  #define POLL_END_IND_NR           14
  #define REQ_PDU_IND_NR            15

/*--------------  Returncodes of DPS2_SET_CFG_DATA.. ---------------*/
  #define DPS2_CFG_FINISHED     0x00
  #define DPS2_CFG_CONFLICT     0x01
  #define DPS2_CFG_NOT_ALLOWED  0x03

/*--------------- Returncodes of DPS2_SET_PRM_DATA.. ---------------*/
  #define DPS2_PRM_FINISHED     0x00
  #define DPS2_PRM_CONFLICT     0x01
  #define DPS2_PRM_NOT_ALLOWED  0x03

/*---------------------- states of the DP-Statemachine ----------------------*/
  #define DPS2_DP_STATE_WAIT_PRM  0x00
  #define DPS2_DP_STATE_WAIT_CFG  0x01
  #define DPS2_DP_STATE_DATA_EX   0x02
  #define DPS2_DP_STATE_ERROR     0x03

/*---------------------- states of the WD-Statemachine ----------------------*/
  #define SPC3_WD_STATE_BAUD_SEARCH   0x00
  #define SPC3_WD_STATE_BAUD_CONTROL  0x01
  #define SPC3_WD_STATE_DP_MODE       0x02
  #define SPC3_WD_STATE_ERROR         0x03

/*------------------------ Codes for Baud-Rate -----------------------*/
  #define BD_12M      0       /*  12    MBd */
  #define BD_6M       1       /*   6    MBd */
  #define BD_3M       2       /*   3    MBd */
  #define BD_1_5M     3       /*   1.5  MBd */
  #define BD_500k     4       /* 500    kBd */
  #define BD_187_5k   5       /* 187.5  kBd */
  #define BD_93_75k   6       /*  93.75 kBd */
  #define BD_45_45k   7       /*  45.45 kBd */
  #define BD_19_2k    8       /*  19.2  kBd */
  #define BD_9_6k     9       /*   9.6  kBd */

/*-------------------- States of outputdata-buffer ---------------------*/
  #define NEW_DOUT_BUF      0x04
  #define DOUT_BUF_CLEARED  0x08


/*+-------------------------------------------------------------------------+
  |                             M a c r o s                                 |
  +-------------------------------------------------------------------------+*/

/************ initializations and hardware-dependent settings **************/

#ifdef DPS2_USE_SPEC_PRM_BUF    /* with spec_prm_buf */
  #define SPC3_SET_HW_MODE(MODE)\
	spc3.mode_reg0 = SWAP_W((MODE) | DP_MODE | SPEC_PRM_BUF & (~EN_FDL_DDB));/~按位取反运算符/
#else                 /* without spec_prm_buf 按位与高于 或的优先级*/
  #define SPC3_SET_HW_MODE(MODE)\

⌨️ 快捷键说明

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