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

📄 dscud.h

📁 美国钻石公司PC104串口通信模块EMM8和EMM4的Vxworks驱动
💻 H
📖 第 1 页 / 共 3 页
字号:
/////////// */

typedef struct
{
	DFLOAT output_freq;  /* Freq in Hz  */
	FLOAT duty_cycle;    /* % of freq you want as duty cycle. Range 0-100 */
	BYTE polarity;       /* polarity of output pulse. 0 for active low, 1 for active high */
	BYTE pwm_circuit;    /* pwm circuit. Range 0-3 */
	BOOL output_enab;    /* 0 for disable, 1 for enable output */

} DSCPWM;


/*/////////////////
//	DSCAACSTATUS //
//////////////// */

typedef struct 
{
	BOOL pic_present; /* TRUE if PIC device is present, FALSE otherwise */
	BOOL pic_busy;    /* TRUE if PIC device is busy with an operation, FALSE otherwise */
	BOOL aac_hold;    /* TRUE if AAC Hold-Off is enabled, FALSE otherwise */
	BOOL aac_error;   /* TRUE if the last AAC command has failed, FALSE otherwise */
	BOOL aac_active;  /* TRUE if the AAC routing is currently running, FALSE otherwise */

} DSCAACSTATUS;


/*////////////////
//	DSCWGCONFIG //
/////////////// */

typedef struct 
{
	DWORD depth;         /* WG depth (absolute, i.e. 64, 128, 256, 512, etc.) */
	DWORD ch_per_frame;  /* # of values to send from the buffer during a frame, check define WG_CH_PER_FRAME_X*/
	DWORD source;        /* WG trigger source, check define WG_SRC_XXX */

} DSCWGCONFIG;





/*/////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//////////////////// API Function Prototypes //////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////// */

/*////////////////////////////
// Error-Handling Functions //
/////////////////////////// */

BYTE DSCUDAPICALL dscGetLastError(ERRPARAMS* errparams);
DSCUDAPICALL char* dscGetErrorString(BYTE error_code);

/*////////////////////////////
// Initialization Functions //
/////////////////////////// */

BYTE DSCUDAPICALL dscInit(WORD version);
BYTE DSCUDAPICALL dscFree(void);
BYTE DSCUDAPICALL dscInitBoard(BYTE boardtype, DSCCB* dsccb, DSCB* board);
BYTE DSCUDAPICALL dscPCIInitBoard(BYTE boardtype, DSCCBP* dsccbp, DSCB* board);
BYTE DSCUDAPICALL dscFreeBoard(DSCB board);

/*/////////////////
// A/D Functions //
//////////////// */

BYTE DSCUDAPICALL dscADSetSettings(DSCB board, DSCADSETTINGS* settings);
BYTE DSCUDAPICALL dscADSetChannel(DSCB board, BYTE low_channel, BYTE high_channel);
BYTE DSCUDAPICALL dscADSample(DSCB board, DSCSAMPLE* sample);
BYTE DSCUDAPICALL dscADSampleInt(DSCB board, DSCAIOINT* dscaioint);
BYTE DSCUDAPICALL dscADSampleAvg(DSCB board, DFLOAT* average, int count);
BYTE DSCUDAPICALL dscADScan(DSCB board, DSCADSCAN* dscadscan, DSCSAMPLE* sample_values);
BYTE DSCUDAPICALL dscADScanInt(DSCB board, DSCAIOINT* dscaioint);
BYTE DSCUDAPICALL dscADScanAvg(DSCB board, DSCADSCAN* dscadscan, DFLOAT* average_values, int count);

/*/////////////////
// D/A Functions //
//////////////// */

BYTE DSCUDAPICALL dscDASetPolarity(DSCB board, BYTE polarity);
BYTE DSCUDAPICALL dscDASetSettings( DSCB board, DSCDASETTINGS * dasettings);
BYTE DSCUDAPICALL dscDAConvert(DSCB board, BYTE channel, DSCDACODE output_code);
BYTE DSCUDAPICALL dscDAConvertScan(DSCB board, DSCDACS *dscdacs);
BYTE DSCUDAPICALL dscDAConvertScanInt(DSCB board, DSCAIOINT *dscaioint);

/*/////////////////
// DIO Functions //
//////////////// */

BYTE DSCUDAPICALL dscDIOSetConfig(DSCB board, BYTE* config_bytes);
BYTE DSCUDAPICALL dscDIOInputByte(DSCB board, BYTE port, BYTE* digital_value);
BYTE DSCUDAPICALL dscDIOInputWord(DSCB board, BYTE port, WORD* digital_value);
BYTE DSCUDAPICALL dscDIOOutputByte(DSCB board, BYTE port, BYTE digital_value);
BYTE DSCUDAPICALL dscDIOOutputWord(DSCB board, BYTE port, WORD digital_value);
BYTE DSCUDAPICALL dscDIOInputBit(DSCB board,BYTE port,BYTE bit,BYTE  *digital_value);
BYTE DSCUDAPICALL dscDIOOutputBit(DSCB board,BYTE port, BYTE bit,BYTE digital_value);
BYTE DSCUDAPICALL dscDIOSetBit(DSCB board,BYTE port,BYTE bit);
BYTE DSCUDAPICALL dscDIOClearBit(DSCB board,BYTE port,BYTE bit);
BYTE DSCUDAPICALL dscDIOInputInt(DSCB board,DSCDIOINT *dscdioint);
BYTE DSCUDAPICALL dscDIOOutputInt(DSCB board,DSCDIOINT *dscdioint);
BYTE DSCUDAPICALL dscDMM32DIOOutputByte(DSCB board, BYTE port, BYTE digital_value);
BYTE DSCUDAPICALL dscDMM32DIOInputByte(DSCB board, BYTE port, BYTE  *digital_value);


/*////////////////////
//	Opto Functions	//
/////////////////// */

BYTE DSCUDAPICALL dscOptoInputByte(DSCB board, BYTE port, BYTE * optoValue);
BYTE DSCUDAPICALL dscOptoInputBit(DSCB board, BYTE port, BYTE bit, BYTE * optoValue);
BYTE DSCUDAPICALL dscOptoGetPolarity(DSCB board, BYTE * polarity);


/*////////////////////
//	Opto Edge State	//
/////////////////// */

BYTE DSCUDAPICALL dscOptoGetState(DSCB board, DSCOPTOSTATE* state);
BYTE DSCUDAPICALL dscOptoSetState(DSCB board, DSCOPTOSTATE* state);

/*/////////////////////
// Counter Functions //
//////////////////// */

BYTE DSCUDAPICALL dscCounterSetRateSingle(DSCB board, float hertz, DWORD ctr); // for ctr, please use the counter set rate single defines on top
BYTE DSCUDAPICALL dscCounterSetRate(DSCB board, float hertz);
BYTE DSCUDAPICALL dscCounterDirectSet(DSCB board, BYTE code, DWORD data, BYTE ctr_number);
BYTE DSCUDAPICALL dscCounterRead(DSCB board, DSCCR* dsccr);

/*/////////////////////////
// Calibration Functions //
//////////////////////// */

BYTE DSCUDAPICALL dscSetCalMux(DSCB board, BOOL on);
BYTE DSCUDAPICALL dscADAutoCal(DSCB board, DSCADCALPARAMS* params);
BYTE DSCUDAPICALL dscDAAutoCal(DSCB board, DSCDACALPARAMS* params);
BYTE DSCUDAPICALL dscADCalVerify(DSCB board, DSCADCALPARAMS* params);
BYTE DSCUDAPICALL dscDACalVerify(DSCB board, DSCDACALPARAMS* params);
BYTE DSCUDAPICALL dscGetReferenceVoltages(DSCB board, DFLOAT* refs);
BYTE DSCUDAPICALL dscSetReferenceVoltages(DSCB board, DFLOAT* refs);
BYTE DSCUDAPICALL dscDAGetOffsets(DSCB board, DFLOAT* offsets, int count);
BYTE DSCUDAPICALL dscDASetOffsets(DSCB board, DFLOAT* offsets, int count);

/*////////////////////
// Relay Functions	//
/////////////////// */

BYTE DSCUDAPICALL dscSetRelay(DSCB board, BYTE relay, BYTE value); // relays start from 0
																   // For ir104, please use dscIR104 functions
BYTE DSCUDAPICALL dscGetRelay(DSCB board, BYTE relay, BYTE* value); // relays start from 0
																	// For ir104, please use dscIR104 functions
BYTE DSCUDAPICALL dscSetRelayMulti(DSCB board, BYTE relayGroup, BYTE value); /*each relayGroup groups 8 relays together. 
																			 ex. relayGroup 0 refers to relays 0-7
																			 relayGroup 1 referes to relays 8-15, etc.
																		     for boards with relays that aren't multiples 
																			 of 8, such as IR104, relays 16-20 are part of
																			 relayGroup 2. The same applies to other boards.
																			 Parameter value is the value to set for each relay. 
																			 Bit0 of value is value set for relay 0, 
																			 bit1 of value is value set for relay 1, etc 
																															*/
BYTE DSCUDAPICALL dscGetRelayMulti(DSCB board, BYTE relayGroup, BYTE * value); /*each relayGroup groups 8 relays together. 
																			 ex. relayGroup 0 refers to relays 0-7
																			 relayGroup 1 referes to relays 8-15, etc.
																		     for boards with relays that aren't multiples 
																			 of 8, such as IR104, relays 16-20 are part of
																			 relayGroup 2. The same applies to other boards.
																			 Parameter value is the value to set for each relay. 
																			 Bit0 of value is value set for relay 0, 
																			 bit1 of value is value set for relay 1, etc */

/*//////////////////////
// WATCHDOG Functions //
///////////////////// */

BYTE DSCUDAPICALL dscWatchdogEnable(DSCB board, WORD timer16, BYTE timer8, SDWORD options);
BYTE DSCUDAPICALL dscWatchdogDisable(DSCB board);
BYTE DSCUDAPICALL dscWatchdogTrigger(DSCB board);


/*////////////////////////////////
//	PULSE WIDTH MOD Functions	//
/////////////////////////////// */

BYTE DSCUDAPICALL dscPWMLoad(DSCB board, BYTE pwm_circuit, BYTE counter, DWORD value);
BYTE DSCUDAPICALL dscPWMConfig(DSCB board, BYTE * config_byte);
BYTE DSCUDAPICALL dscPWMClear(DSCB board, BYTE pwm_circuit);
BYTE DSCUDAPICALL dscPWMFunction(DSCB board, DSCPWM * dscpwm);

/*//////////////////////
// Register Functions //
///////////////////// */

BYTE DSCUDAPICALL dscRegisterRead(DSCB board, WORD address, BYTE* data);
BYTE DSCUDAPICALL dscRegisterWrite(DSCB board, WORD address, BYTE data);
BYTE DSCUDAPICALL dscInp(DWORD address, BYTE* value);
BYTE DSCUDAPICALL dscInpw(DWORD address, WORD* value);
BYTE DSCUDAPICALL dscInpl(DWORD address, DWORD* value);
BYTE DSCUDAPICALL dscInpws(DWORD address, WORD* buffer, WORD n);
BYTE DSCUDAPICALL dscOutp(DWORD address, BYTE value);
BYTE DSCUDAPICALL dscOutpw(DWORD address, WORD value);
BYTE DSCUDAPICALL dscOutpl(DWORD address, DWORD value);
BYTE DSCUDAPICALL dscOutpws(DWORD address, WORD* buffer, WORD n);

/*///////////////////
// Misc. Functions //
////////////////// */

BYTE DSCUDAPICALL dscSleep(DWORD ms);
BYTE DSCUDAPICALL dscGetTime(DWORD* ms);
BYTE DSCUDAPICALL dscGetEEPROM(DSCB board, DWORD address, BYTE* data);
BYTE DSCUDAPICALL dscSetEEPROM(DSCB board, DWORD address, BYTE data);
BYTE DSCUDAPICALL dscSetTrimDac(DSCB board, DWORD trimDac, BYTE value);
BYTE DSCUDAPICALL dscGetStatus(DSCB board, DSCS* status);
BYTE DSCUDAPICALL dscCancelOp(DSCB board);
BYTE DSCUDAPICALL dscCancelOpType(DSCB board, DWORD int_type);
BYTE DSCUDAPICALL dscPauseOp(DSCB board);
BYTE DSCUDAPICALL dscResumeOp(DSCB board);
BYTE DSCUDAPICALL dscSetUserInterruptFunction(DSCB board, DSCUSERINTFUNCTION * dscuserintfunc);
BYTE DSCUDAPICALL dscSetUserInterruptFunctionType(DSCB board, DSCUSERINTFUNCTION * dscuserintfunc, DWORD int_type);
BYTE DSCUDAPICALL dscUserInt(DSCB board, DSCUSERINT * dscuserint, DSCUserInterruptFunction function);
BYTE DSCUDAPICALL dscUserIntVB(DSCB board, DSCUSERINT * dscuserint);
BYTE DSCUDAPICALL dscClearUserInterruptFunction(DSCB board);
BYTE DSCUDAPICALL dscClearUserInterruptFunctionType(DSCB board, DWORD int_type);
BYTE DSCUDAPICALL dscGetBoardMacro(char* boardtype, BYTE* macro);
BYTE DSCUDAPICALL dscGetFPGARev(DSCB board, WORD* fpga);
BYTE DSCUDAPICALL dscSetSystemPriority(DWORD priority);

/*/////////////////////////////
// Unit Conversion Functions //
//////////////////////////// */
BYTE DSCUDAPICALL dscADCodeToVoltage(DSCB board, DSCADSETTINGS adsettings, DSCSAMPLE adcode, DFLOAT *voltage);
BYTE DSCUDAPICALL dscVoltageToADCode(DSCB board, DSCADSETTINGS adsettings, DFLOAT voltage, DSCSAMPLE *adcode);
BYTE DSCUDAPICALL dscDACodeToVoltage(DSCB board, DSCDASETTINGS dasettings, DSCDACODE dacode, DFLOAT *voltage);
BYTE DSCUDAPICALL dscVoltageToDACode(DSCB board, DSCDASETTINGS dasettings, DFLOAT voltage, DSCDACODE *dacode);

/*///////////////
//	IR104	   //
////////////// */

BYTE DSCUDAPICALL dscIR104ClearRelay(DSCB board,BYTE relay);	/*relay range 1-20*/
BYTE DSCUDAPICALL dscIR104SetRelay(DSCB board,BYTE relay);		/*relay range 1-20*/
BYTE DSCUDAPICALL dscIR104RelayInput(DSCB board, BYTE relay, BYTE* value);	/*relay range 1-20*/
BYTE DSCUDAPICALL dscIR104OptoInput(DSCB board,BYTE opto, BYTE* value);	/*opto range 1-20*/

/*////////////////////
// EMMDIO Functions //
/////////////////// */

BYTE DSCUDAPICALL dscEMMDIOGetState(DSCB board, DSCEMMDIO* state);
BYTE DSCUDAPICALL dscEMMDIOSetState(DSCB board, DSCEMMDIO* state);
BYTE DSCUDAPICALL dscEMMDIOResetInt(DSCB board, DSCEMMDIORESETINT* edge);

/*////////////////////
// DMM32X Functions //
/////////////////// */

BYTE DSCUDAPICALL dscEnhancedFeaturesEnable(DSCB board, BOOL enable);
BYTE DSCUDAPICALL dscPICOutp(DSCB board, DWORD address, BYTE value);
BYTE DSCUDAPICALL dscPICInp(DSCB board, DWORD address, BYTE* value);
BYTE DSCUDAPICALL dscPICProgEnable(DSCB board, BOOL enable);
BYTE DSCUDAPICALL dscPICProgSet(DSCB board, BOOL dout, BOOL dstate, BOOL cstate);
BYTE DSCUDAPICALL dscPICProgGet(DSCB board, BOOL *din);
BYTE DSCUDAPICALL dscAACCommand(DSCB board, DWORD cmd);
BYTE DSCUDAPICALL dscAACGetStatus(DSCB board, DSCAACSTATUS *status);
BYTE DSCUDAPICALL dscWGCommand(DSCB board, DWORD cmd);
BYTE DSCUDAPICALL dscWGConfigSet(DSCB board, DSCWGCONFIG *config);
BYTE DSCUDAPICALL dscWGBufferSet(DSCB board, DWORD address, DSCDACODE value, DWORD channel, BOOL simul);

/*/////////////////////
// QMM SECTION BELOW //
//////////////////// */

/* QMM counter group */
#define QMM_COUNTER_GROUP_1             1
#define QMM_COUNTER_GROUP_2             2

/* QMM fout/counter source */
#define QMM_SOURCE_E1_TC_NM1            0
#define QMM_SOURCE_SRC1                 1
#define QMM_SOURCE_SRC2                 2
#define QMM_SOURCE_SRC3                 3
#define QMM_SOURCE_SRC4                 4
#define QMM_SOURCE_SRC5                 5
#define QMM_SOURCE_GATE1                6
#define QMM_SOURCE_GATE2                7
#define QMM_SOURCE_GATE3                8
#define QMM_SOURCE_GATE4                9
#define QMM_SOURCE_GATE5                10
#define QMM_SOURCE_F1_4MHZ              11
#define QMM_SOURCE_F2_400KHZ            12
#define QMM_SOURCE_F3_40KHZ             13
#define QMM_SOURCE_F4_4KHZ              14
#define QMM_SOURCE_F5_400HZ             15

/* QMM time of day mode */
#define QMM_TOD_DISABLED                0
#define QMM_TOD_DIVIDE_BY_5             1
#define QMM_TOD_DIVIDE_BY_6             2
#define QMM_TOD_DIVIDE_BY_10            3

/* QMM gating control */
#define QMM_NO_GATING                   0
#define QMM_ACTIVE_HIGH_TC_NM1          1
#define QMM_ACTIVE_HIGH_LEVEL_GATE_NP1  2
#define QMM_ACTIVE_HIGH_LEVEL_GATE_NM1  3
#define QMM_ACTIVE_HIGH_LEVEL_GATE_N    4
#define QMM_ACTIVE_LOW_LEVEL_GATE_N     5
#define QMM_ACTIVE_HIGH_EDGE_GATE_N     6
#define QMM_ACTIVE_LOW_EDGE_GATE_N      7

/* QMM output control */
#define QMM_INACTIVE_OUTPUT_LOW         0
#define QMM_ACTIVE_HIGH_PULSE_ON_TC     1
#define QMM_TOGGLE_ON_TC                2
#define QMM_INACTIVE_OUTPUT_HIGH        4
#define QMM_ACTIVE_LOW_PULSE_ON_TC      5

/* QMM counter actions */
#define QMM_ACTION_NONE                 0
#define QMM_ACTION_ARM                  1
#define QMM_ACTION_LOAD                 2
#define QMM_ACTION_LOAD_AND_ARM         3
#define QMM_ACTION_DISARM_AND_SAVE      4
#define QMM_ACTION_SAVE                 5
#define QMM_ACTION_DISARM               6

/* QMM special counter actions */
#define QMM_SPECIAL_CLEAR_TOGGLE_OUTPUT 0
#define QMM_SPECIAL_SET_TOGGLE_OUTPUT   1
#define QMM_SPECIAL_STEP_COUNTER        2
#define QMM_SPECIAL_PROGRAM_ALARM       3

/* QMM frequency intervals */
#define QMM_INTERVAL_1MS_1KHZ           0
#define QMM_INTERVAL_10MS_100HZ         1
#define QMM_INTERVAL_100MS_10HZ         2
#define QMM_INTERVAL_1S_1HZ             3
#define QMM_INTERVAL_10S_01HZ           4

/* QMM master mode register */
typedef struct
{

	BYTE counter_group;
	BYTE fout_divider;
	BYTE fout_source;
	BYTE compare1_enable;
	BYTE compare2_enable;
	BYTE tod_mode;

} DSCQMM_MMR;

/* QMM counter mode register */
typedef struct
{

	BYTE counter;
	BYTE gating_control;
	BYTE active_source_edge;
	BYTE count_source;
	BYTE special_gate;
	BYTE reload_source;
	BYTE cycle;
	BYTE count_type;
	BYTE count_direction;
	BYTE output_control;

} DSCQMM_CMR;

/* QMM multiple counter control */
typedef struct
{

	BYTE group1_action;
	BYTE group1_counter_select;
	BYTE group2_action;
	BYTE group2_counter_select;
	
} DSCQMM_MCC;

/* QMM special counter functions */
typedef struct
{

	BYTE counter;
	BYTE action;
	WORD alarm_value;

} DSCQMM_SCF;



/* QMM pulse width modulation control */
typedef struct
{

	BYTE  init;
	BYTE  counter;
	FLOAT output_freq;
	FLOAT duty_cycle;
	
	DWORD input_freq;
	WORD  load_reg;
	WORD  hold_reg;	
	BYTE  hit_extreme;

} DSCQMM_PWM;



/* QMM Function Prototypes */

BYTE DSCUDAPICALL dscQMMReset(DSCB board);

BYTE DSCUDAPICALL dscQMMSetMMR(DSCB board, DSCQMM_MMR* dscqmmmmr);
BYTE DSCUDAPICALL dscQMMSetCMR(DSCB board, DSCQMM_CMR* dscqmmcmr);
BYTE DSCUDAPICALL dscQMMCounterControl(DSCB board, DSCQMM_MCC* dscqmmmcc, BYTE * status);
BYTE DSCUDAPICALL dscQMMSingleCounterControl(DSCB board, BYTE counter, BYTE action);

BYTE DSCUDAPICALL dscQMMSetLoadRegister(DSCB board, BYTE counter, WORD value);
BYTE DSCUDAPICALL dscQMMSetHoldRegister(DSCB board, BYTE counter, WORD value);
BYTE DSCUDAPICALL dscQMMReadHoldRegister(DSCB board, BYTE counter, WORD* value);

BYTE DSCUDAPICALL dscQMMSpecialCounterFunction(DSCB board, DSCQMM_SCF* dscqmmscf);
BYTE DSCUDAPICALL dscQMMMeasureFrequency(DSCB board, BYTE interval, BYTE source, FLOAT* freq);
BYTE DSCUDAPICALL dscQMMMeasurePeriod(DSCB board, BYTE frequency, FLOAT* period);

BYTE DSCUDAPICALL dscQMMPulseWidthModulation(DSCB board, DSCQMM_PWM* dscqmmpwm);

/* END QMM SECTION */


#ifdef __cplusplus
} /* Closes the extern "C" */
#endif

/* MS Visual C++ only - end 1-byte structure alignment */
#ifndef MSVC_1_52
#ifdef _MSC_VER
#pragma pack(pop, dscud_packing)
#endif
#endif


#endif /* #ifndef _DSCUD_H */

⌨️ 快捷键说明

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