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

📄 spc3dps2.h

📁 profibus TO RS485 profibus TO RS485
💻 H
📖 第 1 页 / 共 2 页
字号:
  #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)\
	spc3.mode_reg0 = SWAP_W((MODE) | DP_MODE & (~EN_FDL_DDB));
#endif
  #define SPC3_SET_IND(INDS)  spc3.is_reg.mask = ~(INDS);
  #define SPC3_SET_STATION_ADDRESS(ADDRESS) spc3.r_ts_adr = ADDRESS;
  #define SPC3_SET_MINTSDR(MINTSDR) spc3.x1.w.mintsdr_val = MINTSDR;
  #define SPC3_START() spc3.x1.w.mode_reg1_s = START_SPC3;
  #define SPC3_GO_OFFLINE()  spc3.x1.w.mode_reg1_s = GO_OFFLINE_SPC3;
  #define SPC3_INIT(DPS2_IBUF_PTR)\
	  dps2_buf_init(&spc3.user, DPS2_IBUF_PTR, TRUE, _USE_SPEC_PRM_BUF__)
  #define DPS2_SET_IDENT_NUMBER_LOW(NR) spc3.r_ident_low = NR;
  #define DPS2_SET_IDENT_NUMBER_HIGH(NR) spc3.r_ident_high = NR;
  #define DPS2_SET_ADD_CHG_DISABLE() spc3.r_real_no_add_change = 0xff;
  #define DPS2_SET_ADD_CHG_ENABLE() spc3.r_real_no_add_change = 0x0;
  #define DPS2_USER_LEAVE_MASTER() spc3.x1.w.mode_reg1_s = USER_LEAVE_MASTER;


/***************** macros for Indications *******************/

  #define SPC3_GET_INDICATION()   spc3.int_reg.com.w
  #define SPC3_GET_IND_MAC_RESET() (spc3.int_reg.com.b[_IML] & MAC_RESET_EX_B)
  #define SPC3_GET_IND_BAUDRATE_DETECT() (spc3.int_reg.com.b[_IML] & BAUDRATE_DETECT_B)
  #define SPC3_GET_IND_USER_TIMER_CLOCK() (spc3.int_reg.com.b[_IML] & USER_TIMER_CLOCK_B)
  #define DPS2_GET_IND_GO_LEAVE_DATA_EX() (spc3.int_reg.com.b[_IML] & GO_LEAVE_DATA_EX_B)
  #define DPS2_GET_IND_WD_DP_MODE_TIMEOUT() (spc3.int_reg.com.b[_IML] & WD_DP_MODE_TIMEOUT_B)
  #define DPS2_GET_IND_NEW_GC_COMMAND() (spc3.int_reg.com.b[_IMH] & NEW_GC_COMMAND_B)
  #define DPS2_GET_IND_NEW_SSA_DATA() (spc3.int_reg.com.b[_IMH] & NEW_SSA_DATA_B)
  #define DPS2_GET_IND_NEW_CFG_DATA() (spc3.int_reg.com.b[_IMH] & NEW_CFG_DATA_B)
  #define DPS2_GET_IND_NEW_PRM_DATA() (spc3.int_reg.com.b[_IMH] & NEW_PRM_DATA_B)
  #define DPS2_GET_IND_DIAG_BUFFER_CHANGED() (spc3.int_reg.com.b[_IMH] & DIAG_BUFFER_CHANGED_B)
  #define DPS2_GET_IND_DX_OUT() (spc3.int_reg.com.b[_IMH] & DX_OUT_B)

  #define SPC3_IND_CONFIRM(CON)   spc3.int_reg.ack.w = (CON);
  #define SPC3_CON_IND_MAC_RESET() spc3.int_reg.ack.b[_IML] = (UBYTE)MAC_RESET_B;
  #define SPC3_CON_IND_BAUDRATE_DETECT() spc3.int_reg.ack.b[_IML] = (UBYTE)BAUDRATE_DETECT_B;
  #define SPC3_CON_IND_USER_TIMER_CLOCK() spc3.int_reg.ack.b[_IML] = (UBYTE)USER_TIMER_CLOCK_B;
  #define DPS2_CON_IND_GO_LEAVE_DATA_EX() spc3.int_reg.ack.b[_IML] = (UBYTE)GO_LEAVE_DATA_EX_B;
  #define DPS2_CON_IND_WD_DP_MODE_TIMEOUT() spc3.int_reg.ack.b[_IML] = (UBYTE)WD_DP_MODE_TIMEOUT_B;
  #define DPS2_CON_IND_NEW_GC_COMMAND() spc3.int_reg.ack.b[_IMH] = (UBYTE)NEW_GC_COMMAND_B;
  #define DPS2_CON_IND_NEW_SSA_DATA() spc3.int_reg.ack.b[_IMH] = (UBYTE)NEW_SSA_DATA_B;
  #define DPS2_CON_IND_DIAG_BUFFER_CHANGED() spc3.int_reg.ack.b[_IMH] = (UBYTE)DIAG_BUFFER_CHANGED_B;
  #define DPS2_CON_IND_DX_OUT() spc3.int_reg.ack.b[_IMH] = (UBYTE)DX_OUT_B;

  #define SPC3_SET_EOI()      spc3.x1.w.mode_reg1_s = EOI_SPC3;

  #define SPC3_POLL_INDICATION()  spc3.int_req.w
  #define SPC3_POLL_IND_MAC_RESET() (spc3.int_req.b[_IML] & MAC_RESET_B)
  #define SPC3_POLL_IND_BAUDRATE_DETECT() (spc3.int_req.b[_IML] & BAUDRATE_DETECT_B)
  #define SPC3_POLL_IND_USER_TIMER_CLOCK() (spc3.int_req.b[_IML] & USER_TIMER_CLOCK_B)
  #define DPS2_POLL_IND_GO_LEAVE_DATA_EX() (spc3.int_req.b[_IML] & GO_LEAVE_DATA_EX_B)
  #define DPS2_POLL_IND_WD_DP_MODE_TIMEOUT() (spc3.int_req.b[_IML] & WD_DP_MODE_TIMEOUT_B)
  #define DPS2_POLL_IND_NEW_GC_COMMAND() (spc3.int_req.b[_IMH] & NEW_GC_COMMAND_B)
  #define DPS2_POLL_IND_NEW_SSA_DATA() (spc3.int_req.b[_IMH] & NEW_SSA_DATA_B)
  #define DPS2_POLL_IND_NEW_CFG_DATA() (spc3.int_req.b[_IMH] & NEW_CFG_DATA_B)
  #define DPS2_POLL_IND_NEW_PRM_DATA() (spc3.int_req.b[_IMH] & NEW_PRM_DATA_B)
  #define DPS2_POLL_IND_DIAG_BUFFER_CHANGED() (spc3.int_req.b[_IMH] & DIAG_BUFFER_CHANGED_B)
  #define DPS2_POLL_IND_DX_OUT() (spc3.int_req.b[_IMH] & DX_OUT_B)


/*=============== DPS2-specific services for datahandling ================*/
/********************** configuration services *********************/

  #define DPS2_GET_CFG_LEN()      spc3.r_len_cfg_buf
  #define DPS2_GET_CFG_BUF_PTR()\
			  ( (void SPC3_PTR_ATTR*)((SPC3_PTR) &spc3 +\
			  (SPC3_OFFS)((((UWORD)spc3.r_cfg_buf_ptr)<<3))))
  #define DPS2_SET_CFG_DATA_OK()     dps2_cfg_data_ok()
  #define DPS2_SET_CFG_DATA_UPDATE() dps2_cfg_data_update()
  #define DPS2_SET_CFG_DATA_NOT_OK() dps2_cfg_data_not_ok()
  #define DPS2_SET_READ_CFG_LEN(LEN)  spc3.r_len_read_cfg_buf = LEN;
  #define DPS2_GET_READ_CFG_BUF_PTR()\
		  ( (void SPC3_PTR_ATTR*)((SPC3_OFFS)((((UWORD)spc3.r_read_cfg_buf_ptr)<<3))\
			+ (SPC3_PTR) &spc3) )

/********************** parametrization services **************************/

  #define DPS2_GET_PRM_LEN()  spc3.r_len_prm_buf
  #define DPS2_GET_PRM_BUF_PTR()\
			  ( (void SPC3_PTR_ATTR*) ((SPC3_OFFS)((((UWORD)spc3.r_prm_buf_ptr)<<3))\
				+ (SPC3_PTR) &spc3) )
  #define DPS2_SET_PRM_DATA_OK()      spc3.user_prm_data_ok
  #define DPS2_SET_PRM_DATA_NOT_OK()  spc3.user_prm_data_nok

/********************** diagnosis servives ***************************/

  #define DPS2_GET_DIAG_BUF_PTR()\
			( ((spc3.diag_buffer_sm & 0x03) == 0x01) ? \
			  (void SPC3_PTR_ATTR*)((SPC3_OFFS)(((UWORD)spc3.r_diag_buf_ptr[0])<<3) +(SPC3_PTR)&spc3)\
			  :(((spc3.diag_buffer_sm & 0x0c) == 0x04) ? \
			   (void SPC3_PTR_ATTR*)((SPC3_OFFS)(((UWORD)spc3.r_diag_buf_ptr[1])<<3) +(SPC3_PTR)&spc3)\
			   : SPC3_NIL) )
  #define DPS2_SET_DIAG_LEN(LEN)\
			( ((spc3.diag_buffer_sm & 0x03) == 0x01) ? \
			  (spc3.r_len_diag_buf[0] = LEN) \
			  : (((spc3.diag_buffer_sm & 0x0c) == 0x04) ? \
				(spc3.r_len_diag_buf[1] = LEN) \
				: 0xff) )
  #define DPS2_SET_DIAG_STATE(STATE)\
			( ((spc3.diag_buffer_sm & 0x03) == 0x01) ? \
			  (*((UBYTE SPC3_PTR_ATTR*)((SPC3_OFFS)(((UWORD)spc3.r_diag_buf_ptr[0])<<3) +(SPC3_PTR)&spc3)) = (UBYTE)STATE) \
			  :(((spc3.diag_buffer_sm & 0x0c) == 0x04) ? \
			   (*((UBYTE SPC3_PTR_ATTR*)((SPC3_OFFS)(((UWORD)spc3.r_diag_buf_ptr[1])<<3) +(SPC3_PTR)&spc3)) = (UBYTE)STATE) \
			   : ~((UBYTE)STATE)) )
  #define DPS2_DIAG_UPDATE() dps2_diag_update()
  #define DPS2_GET_DIAG_FLAG()  (spc3.is_reg.status[_IML] & DPS2_DIAG_FLAG)

/********************** Set-Slave-Address services ***********************/

  #define DPS2_GET_SSA_LEN()  spc3.r_len_ssa_buf
  #define DPS2_GET_SSA_BUF_PTR()\
		  ( (void SPC3_PTR_ATTR*) ((SPC3_OFFS)((((UWORD)spc3.r_ssa_buf_ptr)<<3))\
			+ (SPC3_PTR) &spc3) )
  #define DPS2_FREE_SSA_BUF() _dps2_x = spc3.ssa_buffer_free_cmd;

/************** IO services ***************/

  #define DPS2_SET_IO_DATA_LEN(LEN_PTR) dps2_set_io_data_len(LEN_PTR)

/************************ outputdata services *************************/

  #define DPS2_OUTPUT_UPDATE_STATE(STATE) dps2_output_update_state(STATE)
#ifdef _MSC_VER
INLINE SPC3_PTR DPS2_OUTPUT_UPDATE()
{
	UWORD	uwIndex;
	uwIndex=(spc3.x1.r.next_dout_buf_cmd & 0x03)-1;
	return  (void SPC3_PTR_ATTR*)
				((SPC3_OFFS)
				(((UWORD)(spc3.r_dout_buf_ptr[uwIndex]))<<3)
				+ (SPC3_PTR)&spc3);
}
#else
  #define DPS2_OUTPUT_UPDATE()\
			( (void SPC3_PTR_ATTR*) ((SPC3_OFFS)\
			  (((UWORD)(spc3.r_dout_buf_ptr[(spc3.x1.r.next_dout_buf_cmd & 0x03)-1]))<<3)\
			  + (SPC3_ADTYP)(SPC3_PTR)&spc3) )
#endif
/************************ inputdata services *************************/

#ifdef _MSC_VER
INLINE SPC3_PTR DPS2_GET_DIN_BUF_PTR(void)
{
	UWORD	uwIndex;
	uwIndex=(spc3.x1.r.din_buffer_sm >> 4) & 0x03;
	if(uwIndex)
	{
		return (void SPC3_PTR_ATTR*)
			((SPC3_OFFS)(((UWORD)(spc3.r_din_buf_ptr[uwIndex-1]))<<3)
			+ (SPC3_PTR)&spc3);
	}
	else
	{
		return SPC3_NIL;
	}
}
#else
  #define DPS2_GET_DIN_BUF_PTR()\
			( ((spc3.x1.r.din_buffer_sm >> 4) & 0x03) ?\
			  ((void SPC3_PTR_ATTR*)((SPC3_OFFS)\
			  (((UWORD)(spc3.r_din_buf_ptr[((spc3.x1.r.din_buffer_sm>>4) & 0x03)-1]))<<3)\
			  + (SPC3_ADTYP)(SPC3_PTR)&spc3))\
			  : SPC3_NIL)
#endif

#ifdef _MSC_VER
INLINE SPC3_PTR DPS2_INPUT_UPDATE(void)
{
	UWORD	uwIndex;
	uwIndex=(spc3.x1.r.new_din_buf_cmd & 0x03)-1;
	return (void SPC3_PTR_ATTR*)
			((SPC3_OFFS)(((UWORD)(spc3.r_din_buf_ptr[uwIndex]))<<3)
			  + (SPC3_PTR)&spc3);
}
#else
  #define DPS2_INPUT_UPDATE()\
			( (void SPC3_PTR_ATTR*) ((SPC3_OFFS)\
			  (((UWORD)(spc3.r_din_buf_ptr[(spc3.x1.r.new_din_buf_cmd & 0x03)-1]))<<3)\
			  + (SPC3_PTR)&spc3) )
#endif

/************************** Global-Control-command **************************/

  #define DPS2_GET_GC_COMMAND() spc3.r_gc_command

/******************************* User-Watchdog *******************************/

  #define DPS2_SET_USER_WD_VALUE(VALUE) spc3.r_user_wd_value = SWAP_W(VALUE);
  #define DPS2_RESET_USER_WD()  spc3.x1.w.mode_reg1_s = RES_USER_WD;

/***************************** general macros *****************************/

  #define SPC3_GET_WD_STATE() ((spc3.is_reg.status[_IML] >> 6) & 0x03)
  #define SPC3_GET_BAUD() (spc3.is_reg.status[_IMH] & 0x0f)
  #define SPC3_GET_OFF_PASS()  (spc3.is_reg.status[_IML] & SPC3_OFFLINE_PASS)
  #define SPC3_GET_ACCESS_VIOLATION()  (spc3.is_reg.status[_IML] & ACCESS_VIOLATION)
  #define SPC3_SET_BAUD_CNTRL(VAL) spc3.x1.w.wd_baud_ctrl_val = VAL;
  #define SPC3_GET_FREE_MEM(FREE_MEM) dps2_get_free_mem(FREE_MEM)
  #define DPS2_GET_DP_STATE() ((spc3.is_reg.status[_IML] >> 4) & 0x03)


/*+-------------------------------------------------------------------------+
  |             f u n c t i o n p r o t o t y p e s                         |
  +-------------------------------------------------------------------------+*/

/* functions of module dps2spc3.c */
  extern enum SPC3_INIT_RET dps2_buf_init(UBYTE SPC3_PTR_ATTR *b_ptr,\
			  DPS2_BUFINIT SPC3_DATA_ATTR *dps2_bptr, UBYTE fdl_init, UBYTE spec_prm);
  extern UBYTE SPC3_PTR_ATTR *dps2_get_free_mem(WORD SPC3_DATA_ATTR *buf_len);
  extern DPS2_IO_DATA_LEN SPC3_DATA_ATTR *dps2_calculate_inp_outp_len\
			  (UBYTE SPC3_PTR_ATTR *cfg_ptr, UWORD cfg_len);
  extern UBYTE dps2_set_io_data_len(DPS2_IO_DATA_LEN SPC3_DATA_ATTR *len_ptr);
  extern UBYTE dps2_cfg_data_ok(void);
  extern UBYTE dps2_cfg_data_update(void);
  extern UBYTE dps2_cfg_data_not_ok(void);
  extern void SPC3_PTR_ATTR *dps2_output_update_state(UBYTE SPC3_DATA_ATTR *state_ptr);
  extern void SPC3_PTR_ATTR *dps2_diag_update(void);

/*+-------------------------------------------------------------------------+
  |                 e x t e r n a l   v a r i a b l e s                     |
  +-------------------------------------------------------------------------+*/

/*-- dummybyte for DPS2 --*/
extern UBYTE _dps2_x;

#endif

⌨️ 快捷键说明

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