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

📄 spc3dps2.h

📁 pROFIBUS 从站源程序 SPC3 pROFIBUS 从站源程序 SPC3
💻 H
📖 第 1 页 / 共 3 页
字号:
	spc3.mode_reg0 = SWAP_W((MODE) | DP_MODE & (~EN_FDL_DDB)); /* 见PDF19,68 */
#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;/*0BH;MinTsdr time */
  #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__)
                                              /* dps2_buf_init()见 .Cp8 */
  #define DPS2_SET_IDENT_NUMBER_LOW(NR) spc3.r_ident_low = NR;/* 0x3a */
  #define DPS2_SET_IDENT_NUMBER_HIGH(NR) spc3.r_ident_high = NR;/*0x3b;带参数的宏定义*/
  #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;
 /* BAUDRATE_DETECT_B即04H;PDF22*/
  #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;
             /*01H ; DIAG_BUFFER_CHANGED_B 为0x10;PDF24 */
  #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;/* EOI_SPC3即02H;PDF19*/

  #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)/*01H;PDF24*/
  #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))))
                                         /* &spc3 取地址符 typedef unsigned int SPC3_PTR*/
  #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) ) /* diag_buffer_sm为0CH,PDF34 */
  #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) )  /* diag_buffer_sm为0CH,PDF34;把diag_len送相应buf */
  #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)) )      /* r_diag_buf_ptr为26H */
  #define DPS2_DIAG_UPDATE() dps2_diag_update()/* 见.Cp14*/
  #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) )  /* next_dout_buf_cmd为OBH */
#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)     /*见 typedef unsigned long SPC3_ADTYP*/
#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) )   /*用户向input buf写完后更新指针,决定数据用哪个BUFFER */
     /* new_din_buf_cmd为09H,The user makes a new DP Din buffer available in the N state;位定义见PDF37*/
#endif

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

  #define DPS2_GET_GC_COMMAND() spc3.r_gc_command /* 在3CH*/

/******************************* 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)  /* is_reg为04H;第6,7位; PDF22 */
  #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)/* 见.C */
  #define DPS2_GET_DP_STATE() ((spc3.is_reg.status[_IML] >> 4) & 0x03)      /* is_reg为04H; PDF22 */


/*+-------------------------------------------------------------------------+
  |             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 + -