📄 spc3dps2.h
字号:
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 + -