APCI1710_INCCPT.h revision 1783fbfe023b7c2b912fbb020e01ff46985aa0ab
1/*
2 * Copyright (C) 2004,2005  ADDI-DATA GmbH for the source code of this module.
3 *
4 *	ADDI-DATA GmbH
5 *	Dieselstrasse 3
6 *	D-77833 Ottersweier
7 *	Tel: +19(0)7223/9493-0
8 *	Fax: +49(0)7223/9493-92
9 *	http://www.addi-data-com
10 *	info@addi-data.com
11 *
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the Free
14 * Software Foundation; either version 2 of the License, or (at your option)
15 * any later version.
16 */
17
18#define APCI1710_16BIT_COUNTER			0x10
19#define APCI1710_32BIT_COUNTER			0x0
20#define APCI1710_QUADRUPLE_MODE			0x0
21#define APCI1710_DOUBLE_MODE			0x3
22#define APCI1710_SIMPLE_MODE			0xF
23#define APCI1710_DIRECT_MODE			0x80
24#define APCI1710_HYSTERESIS_ON			0x60
25#define APCI1710_HYSTERESIS_OFF			0x0
26#define APCI1710_INCREMENT			0x60
27#define APCI1710_DECREMENT			0x0
28#define APCI1710_LATCH_COUNTER			0x1
29#define APCI1710_CLEAR_COUNTER			0x0
30#define APCI1710_LOW				0x0
31#define APCI1710_HIGH				0x1
32
33/*********************/
34/* Version 0600-0229 */
35/*********************/
36#define APCI1710_HIGH_EDGE_CLEAR_COUNTER		0x0
37#define APCI1710_HIGH_EDGE_LATCH_COUNTER		0x1
38#define APCI1710_LOW_EDGE_CLEAR_COUNTER			0x2
39#define APCI1710_LOW_EDGE_LATCH_COUNTER			0x3
40#define APCI1710_HIGH_EDGE_LATCH_AND_CLEAR_COUNTER	0x4
41#define APCI1710_LOW_EDGE_LATCH_AND_CLEAR_COUNTER	0x5
42#define APCI1710_SOURCE_0				0x0
43#define APCI1710_SOURCE_1				0x1
44
45#define APCI1710_30MHZ				30
46#define APCI1710_33MHZ				33
47#define APCI1710_40MHZ				40
48
49#define APCI1710_ENABLE_LATCH_INT    		0x80
50#define APCI1710_DISABLE_LATCH_INT   		(~APCI1710_ENABLE_LATCH_INT)
51
52#define APCI1710_INDEX_LATCH_COUNTER		0x10
53#define APCI1710_INDEX_AUTO_MODE		0x8
54#define APCI1710_ENABLE_INDEX			0x4
55#define APCI1710_DISABLE_INDEX			(~APCI1710_ENABLE_INDEX)
56#define APCI1710_ENABLE_LATCH_AND_CLEAR		0x8
57#define APCI1710_DISABLE_LATCH_AND_CLEAR	(~APCI1710_ENABLE_LATCH_AND_CLEAR)
58#define APCI1710_SET_LOW_INDEX_LEVEL		0x4
59#define APCI1710_SET_HIGH_INDEX_LEVEL		(~APCI1710_SET_LOW_INDEX_LEVEL)
60#define APCI1710_INVERT_INDEX_RFERENCE		0x2
61#define APCI1710_DEFAULT_INDEX_RFERENCE         (~APCI1710_INVERT_INDEX_RFERENCE)
62
63#define APCI1710_ENABLE_INDEX_INT		0x1
64#define APCI1710_DISABLE_INDEX_INT		(~APCI1710_ENABLE_INDEX_INT)
65
66#define APCI1710_ENABLE_FREQUENCY		0x4
67#define APCI1710_DISABLE_FREQUENCY		(~APCI1710_ENABLE_FREQUENCY)
68
69#define APCI1710_ENABLE_FREQUENCY_INT		0x8
70#define APCI1710_DISABLE_FREQUENCY_INT		(~APCI1710_ENABLE_FREQUENCY_INT)
71
72#define APCI1710_ENABLE_40MHZ_FREQUENCY		0x40
73#define APCI1710_DISABLE_40MHZ_FREQUENCY	(~APCI1710_ENABLE_40MHZ_FREQUENCY)
74
75#define APCI1710_ENABLE_40MHZ_FILTER		0x80
76#define APCI1710_DISABLE_40MHZ_FILTER		(~APCI1710_ENABLE_40MHZ_FILTER)
77
78#define APCI1710_ENABLE_COMPARE_INT		0x2
79#define APCI1710_DISABLE_COMPARE_INT		(~APCI1710_ENABLE_COMPARE_INT)
80
81#define APCI1710_ENABLE_INDEX_ACTION		0x20
82#define APCI1710_DISABLE_INDEX_ACTION		(~APCI1710_ENABLE_INDEX_ACTION)
83#define APCI1710_REFERENCE_HIGH			0x40
84#define APCI1710_REFERENCE_LOW			(~APCI1710_REFERENCE_HIGH)
85
86#define APCI1710_TOR_GATE_LOW			0x40
87#define APCI1710_TOR_GATE_HIGH			(~APCI1710_TOR_GATE_LOW)
88
89/* INSN CONFIG */
90#define	APCI1710_INCCPT_INITCOUNTER				100
91#define APCI1710_INCCPT_COUNTERAUTOTEST				101
92#define APCI1710_INCCPT_INITINDEX				102
93#define APCI1710_INCCPT_INITREFERENCE				103
94#define APCI1710_INCCPT_INITEXTERNALSTROBE			104
95#define APCI1710_INCCPT_INITCOMPARELOGIC			105
96#define APCI1710_INCCPT_INITFREQUENCYMEASUREMENT		106
97
98/* INSN READ */
99#define APCI1710_INCCPT_READLATCHREGISTERSTATUS			200
100#define APCI1710_INCCPT_READLATCHREGISTERVALUE			201
101#define APCI1710_INCCPT_READ16BITCOUNTERVALUE			202
102#define APCI1710_INCCPT_READ32BITCOUNTERVALUE			203
103#define APCI1710_INCCPT_GETINDEXSTATUS				204
104#define APCI1710_INCCPT_GETREFERENCESTATUS			205
105#define APCI1710_INCCPT_GETUASSTATUS				206
106#define APCI1710_INCCPT_GETCBSTATUS				207
107#define APCI1710_INCCPT_GET16BITCBSTATUS			208
108#define APCI1710_INCCPT_GETUDSTATUS				209
109#define APCI1710_INCCPT_GETINTERRUPTUDLATCHEDSTATUS		210
110#define APCI1710_INCCPT_READFREQUENCYMEASUREMENT		211
111#define APCI1710_INCCPT_READINTERRUPT				212
112
113/* INSN BITS */
114#define APCI1710_INCCPT_CLEARCOUNTERVALUE			300
115#define APCI1710_INCCPT_CLEARALLCOUNTERVALUE			301
116#define APCI1710_INCCPT_SETINPUTFILTER				302
117#define APCI1710_INCCPT_LATCHCOUNTER				303
118#define APCI1710_INCCPT_SETINDEXANDREFERENCESOURCE		304
119#define APCI1710_INCCPT_SETDIGITALCHLON				305
120#define APCI1710_INCCPT_SETDIGITALCHLOFF			306
121
122/* INSN WRITE */
123#define APCI1710_INCCPT_ENABLELATCHINTERRUPT			400
124#define APCI1710_INCCPT_DISABLELATCHINTERRUPT			401
125#define APCI1710_INCCPT_WRITE16BITCOUNTERVALUE			402
126#define APCI1710_INCCPT_WRITE32BITCOUNTERVALUE			403
127#define APCI1710_INCCPT_ENABLEINDEX				404
128#define APCI1710_INCCPT_DISABLEINDEX				405
129#define APCI1710_INCCPT_ENABLECOMPARELOGIC			406
130#define APCI1710_INCCPT_DISABLECOMPARELOGIC			407
131#define APCI1710_INCCPT_ENABLEFREQUENCYMEASUREMENT		408
132#define APCI1710_INCCPT_DISABLEFREQUENCYMEASUREMENT		409
133
134/************ Main Functions *************/
135INT i_APCI1710_InsnConfigINCCPT(struct comedi_device *dev, struct comedi_subdevice *s,
136				struct comedi_insn *insn, unsigned int * data);
137
138INT i_APCI1710_InsnBitsINCCPT(struct comedi_device *dev, struct comedi_subdevice * s,
139			      struct comedi_insn *insn, unsigned int * data);
140
141INT i_APCI1710_InsnWriteINCCPT(struct comedi_device *dev, struct comedi_subdevice * s,
142			       struct comedi_insn *insn, unsigned int * data);
143
144INT i_APCI1710_InsnReadINCCPT(struct comedi_device *dev, struct comedi_subdevice * s,
145			      struct comedi_insn *insn, unsigned int * data);
146
147/*********** Supplementary Functions********/
148
149/* INSN CONFIG */
150INT i_APCI1710_InitCounter(struct comedi_device *dev,
151			   unsigned char b_ModulNbr,
152			   unsigned char b_CounterRange,
153			   unsigned char b_FirstCounterModus,
154			   unsigned char b_FirstCounterOption,
155			   unsigned char b_SecondCounterModus,
156			   unsigned char b_SecondCounterOption);
157
158INT i_APCI1710_CounterAutoTest(struct comedi_device *dev, unsigned char * pb_TestStatus);
159
160INT i_APCI1710_InitIndex(struct comedi_device *dev,
161			 unsigned char b_ModulNbr,
162			 unsigned char b_ReferenceAction,
163			 unsigned char b_IndexOperation, unsigned char b_AutoMode,
164			 unsigned char b_InterruptEnable);
165
166INT i_APCI1710_InitReference(struct comedi_device *dev,
167			     unsigned char b_ModulNbr, unsigned char b_ReferenceLevel);
168
169INT i_APCI1710_InitExternalStrobe(struct comedi_device *dev,
170				  unsigned char b_ModulNbr, unsigned char b_ExternalStrobe,
171				  unsigned char b_ExternalStrobeLevel);
172
173INT i_APCI1710_InitCompareLogic(struct comedi_device *dev,
174				unsigned char b_ModulNbr, UINT ui_CompareValue);
175
176INT i_APCI1710_InitFrequencyMeasurement(struct comedi_device *dev,
177					unsigned char b_ModulNbr,
178					unsigned char b_PCIInputClock,
179					unsigned char b_TimingUnity,
180					ULONG ul_TimingInterval,
181					PULONG pul_RealTimingInterval);
182
183/* INSN BITS */
184INT i_APCI1710_ClearCounterValue(struct comedi_device *dev, unsigned char b_ModulNbr);
185
186INT i_APCI1710_ClearAllCounterValue(struct comedi_device *dev);
187
188INT i_APCI1710_SetInputFilter(struct comedi_device *dev,
189			      unsigned char b_ModulNbr, unsigned char b_PCIInputClock,
190			      unsigned char b_Filter);
191
192INT i_APCI1710_LatchCounter(struct comedi_device *dev,
193			    unsigned char b_ModulNbr, unsigned char b_LatchReg);
194
195INT i_APCI1710_SetIndexAndReferenceSource(struct comedi_device *dev,
196					  unsigned char b_ModulNbr,
197					  unsigned char b_SourceSelection);
198
199INT i_APCI1710_SetDigitalChlOn(struct comedi_device *dev, unsigned char b_ModulNbr);
200
201INT i_APCI1710_SetDigitalChlOff(struct comedi_device *dev, unsigned char b_ModulNbr);
202
203/* INSN WRITE */
204INT i_APCI1710_EnableLatchInterrupt(struct comedi_device *dev, unsigned char b_ModulNbr);
205
206INT i_APCI1710_DisableLatchInterrupt(struct comedi_device *dev, unsigned char b_ModulNbr);
207
208INT i_APCI1710_Write16BitCounterValue(struct comedi_device *dev,
209				      unsigned char b_ModulNbr, unsigned char b_SelectedCounter,
210				      UINT ui_WriteValue);
211
212INT i_APCI1710_Write32BitCounterValue(struct comedi_device *dev,
213				      unsigned char b_ModulNbr, ULONG ul_WriteValue);
214
215INT i_APCI1710_EnableIndex(struct comedi_device *dev, unsigned char b_ModulNbr);
216
217INT i_APCI1710_DisableIndex(struct comedi_device *dev, unsigned char b_ModulNbr);
218
219INT i_APCI1710_EnableCompareLogic(struct comedi_device *dev, unsigned char b_ModulNbr);
220
221INT i_APCI1710_DisableCompareLogic(struct comedi_device *dev, unsigned char b_ModulNbr);
222
223INT i_APCI1710_EnableFrequencyMeasurement(struct comedi_device *dev,
224					  unsigned char b_ModulNbr,
225					  unsigned char b_InterruptEnable);
226
227INT i_APCI1710_DisableFrequencyMeasurement(struct comedi_device *dev,
228					   unsigned char b_ModulNbr);
229
230/* INSN READ */
231INT i_APCI1710_ReadLatchRegisterStatus(struct comedi_device *dev,
232				       unsigned char b_ModulNbr, unsigned char b_LatchReg,
233				       unsigned char * pb_LatchStatus);
234
235INT i_APCI1710_ReadLatchRegisterValue(struct comedi_device *dev,
236				      unsigned char b_ModulNbr, unsigned char b_LatchReg,
237				      PULONG pul_LatchValue);
238
239INT i_APCI1710_Read16BitCounterValue(struct comedi_device *dev,
240				     unsigned char b_ModulNbr, unsigned char b_SelectedCounter,
241				     PUINT pui_CounterValue);
242
243INT i_APCI1710_Read32BitCounterValue(struct comedi_device *dev,
244				     unsigned char b_ModulNbr, PULONG pul_CounterValue);
245
246INT i_APCI1710_GetIndexStatus(struct comedi_device *dev,
247			      unsigned char b_ModulNbr, unsigned char * pb_IndexStatus);
248
249INT i_APCI1710_GetReferenceStatus(struct comedi_device *dev,
250				  unsigned char b_ModulNbr, unsigned char * pb_ReferenceStatus);
251
252INT i_APCI1710_GetUASStatus(struct comedi_device *dev,
253			    unsigned char b_ModulNbr, unsigned char * pb_UASStatus);
254
255INT i_APCI1710_GetCBStatus(struct comedi_device *dev,
256			   unsigned char b_ModulNbr, unsigned char * pb_CBStatus);
257
258INT i_APCI1710_Get16BitCBStatus(struct comedi_device *dev,
259				unsigned char b_ModulNbr, unsigned char * pb_CBStatusCounter0,
260				unsigned char * pb_CBStatusCounter1);
261
262INT i_APCI1710_GetUDStatus(struct comedi_device *dev,
263			   unsigned char b_ModulNbr, unsigned char * pb_UDStatus);
264
265INT i_APCI1710_GetInterruptUDLatchedStatus(struct comedi_device *dev,
266					   unsigned char b_ModulNbr, unsigned char * pb_UDStatus);
267
268INT i_APCI1710_ReadFrequencyMeasurement(struct comedi_device *dev,
269					unsigned char b_ModulNbr,
270					unsigned char * pb_Status, unsigned char * pb_UDStatus,
271					PULONG pul_ReadValue);
272