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

📄 sbsadtdef.h

📁 本程序为盛博ADT系列接口系列的实例程序
💻 H
字号:

#ifndef _SHENZHEN_SBS_SBSADTDEF_H_INCLUDE
#define _SHENZHEN_SBS_SBSADTDEF_H_INCLUDE

#define HIGH 1
#define LOW 0


#define SBSB SWORD
/*/////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//////////////////////// Constants ////////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////// */

/*///////////
// Version //
////////// */

#define SBS_VERSION  0x0300  /* 0xVVRR - Version & Revision */

/*///////////////
// Board Types //
// SBS标准命名 //
////////////// */
#define SBS_ADT_652  0
#define SBS_ADT_680  1
#define SBS_ADT_860  2

#define SBS_ADT_600  10
#define SBS_ADT_650  11
#define SBS_ADT_700  12
#define SBS_ADT_700A 13
#define SBS_ADT_800  14

/*//////////////////////
// A/D Mode Constants //
///////////////////// */
#define RANGE_5		0	//脉冲
#define RANGE_10	1

#define BIPOLAR		0	//双极性
#define UNIPOLAR	1

#define GAIN_1		0   	//增益
#define GAIN_2		1
#define GAIN_4		2
#define GAIN_8		3

/*/////////////
// 82C54芯片 modes //
//////////// */

#define MODE_82C54_0  0
#define MODE_82C54_1  1
#define MODE_82C54_2  2
#define MODE_82C54_3  3
#define MODE_82C54_4  4
#define MODE_82C54_5  5


/*/////////////////////////////
// Interrupt Operation Sources //
//////////////////////////// */

#define INT_SOURCE_AD     	0x00
#define INT_SOURCE_COUNTER0 	0x01
#define INT_SOURCE_EXTERNAL    	0x02
#define INT_SOURCE_COUNTER1 	0x03

/*///////////////
// Error Codes //
////////////// */

#define DE_NONE					0   /* no error  */
#define DE_HW_FAILURE				1   /* hardware failed */
#define DE_SW_FAILURE				2   /* software failed */
#define DE_HW_NOT_SUPPORTED			3   /* could not perform operation on this board  */
#define DE_SW_NOT_SUPPORTED			4   /* software does not yet support this operation */
#define DE_INVALID_PARM				5   /* a parameter to the function is invalid */
#define DE_ALTERNATE_IN_PROGRESS	  	6   /* alternate interrupt function in progress */
#define DE_NONE_IN_PROGRESS			7   /* no interrupt function in progress to pause/cancel/resume */
#define DE_BUFFER_ROLLOVER			8   /* pointer passed in + sizeof data to be written would roll over a segment */
#define DE_INVALID_ERROR_CODE       		9   /* we used an invalid error code somewhere */
#define DE_ALREADY_PAUSED			10  /* can't pause an operation--it's already paused */
#define DE_OVERFLOW				11  /* Am9513A counter function overflowed */
#define DE_INVALID_FUNC				12  /* Function number not recognized by board type */
#define DE_SBSADTH_INVALID			13  /* Header - Library version mismatch */
#define DE_INVALID_BOARD			14  /* Invalid board-type constant */
#define DE_BOARD_LIMIT_REACHED			15  /* Tried to initialize too many boards at once */
#define DE_BOARD_BUSY				16  /* Attempt to acquire the board timed out */
#define DE_INVALID_WINDRVR_HANDLE		17  /* Windriver initialization failed */
#define DE_INVALID_WINDRVR_VERSION		18  /* Windriver version conflict */
#define DE_BAD_WINDRVR_BOARD_INIT		19  /* Windriver could not initialize the board */
#define DE_OPERATION_TIMED_OUT			20  /* Operation timed out */
#define DE_INVALID_WINDRVR_KP			21	/* Windriver kernel plugin initialization failed */
#define DE_THREAD_FAILURE			22	/* Windriver failed to initialize thread */

/*/////////////////
// Error Strings //
//////////////// */

#define STR_DE_NONE						"NO ERRORS REPORTED"
#define STR_DE_HW_FAILURE				"HARDWARE FAILURE"
#define STR_DE_SW_FAILURE				"SOFTWARE FAILURE"
#define STR_DE_HW_NOT_SUPPORTED			"OPERATION NOT SUPPORTED BY HARDWARE"
#define STR_DE_SW_NOT_SUPPORTED			"OPERATION NOT SUPPORTED BY SOFTWARE"
#define STR_DE_INVALID_PARM				"INVALID PARAMETER"
#define STR_DE_ALTERNATE_IN_PROGRESS	"ALTERNATE INTERRUPT OPERATION IN PROGRESS"
#define STR_DE_NONE_IN_PROGRESS			"NO INTERRUPT OPERATION IN PROGRESS"
#define STR_DE_BUFFER_ROLLOVER			"POINTER + SIZE OF DATA OVERRUN BUFFER"
#define STR_DE_INVALID_ERROR_CODE       "INVALID ERROR CODE, PLEASE IGNORE"
#define STR_DE_ALREADY_PAUSED			"OPERATION ALREADY PAUSED"
#define STR_DE_OVERFLOW					"AM9513A COUNTER FUNCTION OVERFLOWED OR BUFFER OVERFLOW"
#define STR_DE_INVALID_FUNC				"INVALID FUNCTION FOR SELECTED BOARD"
#define STR_DE_SBSADTH_INVALID			"LIBRARY HEADER VERSION MISMATCH"
#define STR_DE_INVALID_BOARD			"INVALID BOARD TYPE SPECIFIED"
#define STR_DE_BOARD_LIMIT_REACHED		"MAXIMUM NUMBER OF BOARDS REACHED"
#define STR_DE_BOARD_BUSY				"ATTEMPT TO ACQUIRE BOARD TIMED OUT"
#define STR_DE_INVALID_WINDRVR_HANDLE	"INVALID WINDRIVER HANDLE RETURNED"
#define STR_DE_INVALID_WINDRVR_VERSION	"INVALID WINDRIVER VERSION"
#define STR_DE_BAD_WINDRVR_BOARD_INIT	"WINDRIVER BOARD INITIALIZATION FAILURE"
#define STR_DE_OPERATION_TIMED_OUT		"OPERATION TIMED OUT"
#define STR_DE_INVALID_WINDRVR_KP		"KERNEL PLUGIN INITIALIZATION FAILURE"
#define STR_DE_THREAD_FAILURE			"THREAD INITIALIZATION FAILURE"
#define STR_DE_MUTEX_FAIL				"MUTEX CREATION OR LOCKING OPERATION FAILED"


/*/////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//////////////////////// Structures ///////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////// */

/*/////////
// SBSCB //
//////// */
struct SBSADTB
{
	/*//////////////////////////////////////////////////////////
	// These members are filled automatically by sbsInitBoard //
	//    THE USER DOES NOT HAVE TO FILL THESE IN MANUALLY    //
	///////////////////////////////////////////////////////// */
	BYTE boardtype;     /* Contains the boardtype constant */
//	SBSB boardnum;      /* The handle to the board */
	
	/*///////////////////////////////////////////////////////////
	// The user must fill in everything below that pertains to //
	// board before the call to sbsInitBoard                   //
	////////////////////////////////////////////////////////// */	
	WORD base_address;  /* Base address of the board */

	/*////////////////////////////////////////////////////
	// Use int_level for boards with only one interrupt //
	/////////////////////////////////////////////////// */
	BYTE int_level;     /* Interrupt level of the board */	
	
	/*////////////////////////////////////////////////////
	// Use DMA for boards with only one DMA Channel //
	/////////////////////////////////////////////////// */
	BYTE DMA_level;     /* DMA level of the board */	
} ;

/*/////////////////
// SBSADSETTINGS //
//////////////// */

typedef struct
{
	BYTE low_channel;    /* INPUT: Low channel of the scan */
	BYTE high_channel;   /* INPUT: High channel of the scan */

	BYTE sedi;			  /* INPUT: 0 = 差分模式, 1 = 单端模式*/
	BYTE scnint;		  /* INPUT: 自动采样的时间间隔 0 = 9.3uS, 1 = 5.3uS, 2 = SCANEN=0*/
	BYTE gain;            /* INPUT: 0 = gain of 1, 1 = gain of 2, 2 = gain of 4, 3 = gain of 8 */
	BYTE range;           /* INPUT: 0 = 5V range, 1 = 10V range */
	BYTE polarity;        /* INPUT: 0 = bipolar, 1 = unipolar */
	BYTE ADTrig;	      /* A/D转换触发方式配置:*/
			      /*     置"0"时为软件触发*/
			      /*     置"1"时为硬件触发,具体为计数/定时器2(OUT2)触发*/
			      /*     置"2"时为硬件触发,具体为外部触发*/
	BYTE ADOutType;	      /* A/D转换结束的输出方式:*/
			      /*     0:直接读取*/
			      /*     1:FIFO*/
			      /*     2:DMA*/	
	BYTE load_cal;        /* INPUT: 0 = do not load calibration values, 1 = load */
} SBSADSETTINGS;

typedef struct 
{
	BYTE range;           /* INPUT: 0 = 5V range, 1 = 10V range */
	BYTE polarity;        /* INPUT: 0 = bipolar, 1 = unipolar */
} ADBRD_RG_PT;

/*/////////////
// ERRPARAMS //
//////////// */

typedef struct
{

	BYTE ErrCode;    /* OUTPUT: The numerical value of the last error */
	char *errstring; /* OUTPUT: A string description of the last error */

} ERRPARAMS;


/*/////////////////
// SBSDASETTINGS //
//////////////// */

typedef struct
{
	BYTE polarity;      /* INPUT: 0 = BIPOLAR, 1 = UNIPOLAR */
	BYTE range;		/* INPUT: Absolute value of maximum voltage */
	BYTE offset;      /* OUTPUT: Difference between target and measured vals. */
	BOOL AllToTogether;	/* DA通道一起输出*/
	BYTE load_cal;	    /* INPUT: 0 = FALSE, 1= TRUE. Loads calibration from eeprom */

} SBSDASETTINGS;

/*/////////
// SBSCLK //
//////// */

typedef struct
{
	BYTE ClkFrq;		/*定时器/计数器1的时钟频率, 0 = 10MHz, 1 = 1MHz*/
	BYTE ClkDevNo;	    /* 82C54的编号*/
	BYTE Clk1Mode;	    /* 时钟的类型*/
	BYTE Clk2Mode;	    /**/
	BYTE Clk3Mode;	    /**/
	WORD Clk1Divisor;   /*16位计数器/定时器的计数值*/
	WORD Clk2Divisor;   /**/
	WORD Clk3Divisor;   /**/
} SBSCLK;


/*/////////////
// SBSDDI/OINIT //
//////////// */

typedef struct
{
	BYTE DIODevNo;	      /* 82C55的编号*/
	BYTE DIOPort1RW;      /* 0:Read   1:Write*/
	BYTE DIOPort2RW;      /* 0:Read   1:Write*/
	BYTE DIOPort3RW;      /* 0:Read   1:Write*/	
} SBSDIOINT;


/*////////////
//	SBSPWM	//
/////////// */

typedef struct
{
	FLOAT 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 */

} SBSPWM;


/************************************************************************/
/*        Device name: ADT652                                           */
/*		  Device NO:   0											 	*/
/************************************************************************/
/*#define START_CONVERSION     0
#define READ_AD_DATA_LSB     0
#define READ_AD_DATA_MSB     1
#define CHANNEL_RANGE        3
#define CHANNEL_NUMBER		 100
#define CONFIG_AD_CHK		 4
#define CONFIG_BYTE          4
#define STATUS_BUSY_INT      5
#define STATUS_BUSY_CHN      5
#define STATUS_BUSY_AD       8
#define ENABLE_IRQ           6
#define FIFO_RESET           7

#define WRITE_DA_DATA_LSB    1
#define WRITE_DA_DATA_MSB    2
#define WRITE_DA_MSB_OFFS    0
#define PARALLEL_ENABLE_DA   2

#define CLEAR_INT 	  5
#define FIFO_FLAG     7

#define PPI_0       8
#define PPI_1       9
#define PPI_2       10
#define PPI_CTRL    11

#define TIMER_0     12
#define TIMER_1     13
#define TIMER_2     14
#define TIMER_CTRL  15

BYTE START_CONVERSION   = 0;
BYTE READ_AD_DATA_LSB   = 0;
BYTE READ_AD_DATA_MSB   = 1;
BYTE CHANNEL_RANGE      = 3;
BYTE CHANNEL_NUMBER	= 100;
BYTE CONFIG_AD_CHK	= 4;
BYTE CONFIG_BYTE        = 4;
BYTE STATUS_BUSY_INT    = 5;
BYTE STATUS_BUSY_CHN    = 5;
BYTE STATUS_BUSY_AD     = 8;
BYTE ENABLE_IRQ         = 6;
BYTE FIFO_RESET         = 7;

BYTE WRITE_DA_DATA_LSB  =  1;
BYTE WRITE_DA_DATA_MSB  =  2;
BYTE WRITE_DA_MSB_OFFS  =  0;
BYTE PARALLEL_ENABLE_DA =  2;

BYTE CLEAR_INT 	 = 5;
BYTE FIFO_FLAG   = 7;

BYTE PPI_0       =8;
BYTE PPI_1       =9;
BYTE PPI_2       =10;
BYTE PPI_CTRL    =11;

BYTE TIMER_0     =12;
BYTE TIMER_1     =13;
BYTE TIMER_2     =14;
BYTE TIMER_CTRL  =15;
*/

#define IOCTL_PORTIO_OPENPORT \
	CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_PORTIO_READPORT \
	CTL_CODE(FILE_DEVICE_UNKNOWN, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_PORTIO_WRITEPORT \
	CTL_CODE(FILE_DEVICE_UNKNOWN, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_PORTIO_CLOSEPORT \
	CTL_CODE(FILE_DEVICE_UNKNOWN, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_SET_NOTIFICATION_EVENT(X) \
	CTL_CODE(FILE_DEVICE_UNKNOWN, 6+X*2, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_GET_INIT(X) \
	CTL_CODE(FILE_DEVICE_UNKNOWN, 7+X*2, METHOD_BUFFERED, FILE_ANY_ACCESS)

///////////////////////////////////////////////////////////
//{{Add for Mul Card  

#define IOCTL_NUMBER_INIT(X)  \
	CTL_CODE(FILE_DEVICE_UNKNOWN, X, METHOD_BUFFERED, FILE_ANY_ACCESS)


typedef struct _timestamp_t
{
	LARGE_INTEGER	ts_time;
	ULONG	 		ts_interrupt_count;

} TIMESTAMP, *PTIMESTAMP;

struct PORTOPENPARAMS
{
	ULONG open_Address;		// port address 
	ULONG open_PortSize;	// 1=byte 2=word 3=long
	ULONG open_PortCount;	// number of ports in block
};

struct PORTREADPARAMS
{
	ULONG rd_Handle;	
	ULONG rd_Index;
};

struct PORTWRITEPARAMS
{
	ULONG wr_Handle;	
	ULONG wr_Index;
	ULONG wr_Data;
};

struct PORTCLOSEPARAMS
{
	ULONG close_Handle;
};

/*////////////////////
// MAX Broad number //
/////////////////// */
#define MAX_BROAD_NUMBER        256
#endif  //_SHENZHEN_SBS_SBSADTDEF_H_INCLUDE

⌨️ 快捷键说明

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