Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
77 | f9daq | 1 | /* |
2 | ----------------------------------------------------------------------------- |
||
3 | |||
4 | --- CAEN SpA - Computing Systems Division --- |
||
5 | |||
6 | ----------------------------------------------------------------------------- |
||
7 | |||
8 | CAENVMEtypes.h |
||
9 | |||
10 | ----------------------------------------------------------------------------- |
||
11 | |||
12 | Author: Stefano Coluccini (s.coluccini@caen.it) |
||
13 | |||
14 | Created: March 2004 |
||
15 | |||
16 | ----------------------------------------------------------------------------- |
||
17 | */ |
||
18 | #ifndef __CAENVMETYPES_H |
||
19 | #define __CAENVMETYPES_H |
||
20 | |||
21 | #ifdef LINUX |
||
22 | #define CAEN_BYTE unsigned char |
||
23 | #define CAEN_BOOL int |
||
24 | #else |
||
25 | #ifdef _CVI_ |
||
26 | #define CAEN_BYTE unsigned char |
||
27 | #define CAEN_BOOL int |
||
28 | #else |
||
29 | |||
30 | #define CAEN_BYTE byte |
||
31 | #define CAEN_BOOL VARIANT_BOOL |
||
32 | |||
33 | #endif |
||
34 | #endif |
||
35 | |||
36 | |||
37 | /* |
||
38 | CAEN VME bridges. |
||
39 | */ |
||
40 | typedef enum CVBoardTypes { |
||
41 | cvV1718 = 0, /* CAEN V1718 USB-VME bridge */ |
||
42 | cvV2718 = 1, /* V2718 PCI-VME bridge with optical link */ |
||
43 | cvA2818 = 2, /* PCI board with optical link */ |
||
44 | cvA2719 = 3, /* Optical link piggy-back */ |
||
45 | cvA3818 = 4 /* PCIe board with up to 4 optical links */ |
||
46 | } CVBoardTypes; |
||
47 | |||
48 | /* |
||
49 | VME cycles data width. |
||
50 | Ver. 2.2 - Added byte-swapping data widths |
||
51 | */ |
||
52 | typedef enum CVDataWidth { |
||
53 | cvD8 = 0x01, /* 8 bit */ |
||
54 | cvD16 = 0x02, /* 16 bit */ |
||
55 | cvD32 = 0x04, /* 32 bit */ |
||
56 | cvD64 = 0x08, /* 64 bit */ |
||
57 | cvD16_swapped = 0x12, /* 16 bit swapped */ |
||
58 | cvD32_swapped = 0x14, /* 32 bit swapped */ |
||
59 | cvD64_swapped = 0x18 /* 64 bit swapped */ |
||
60 | } CVDataWidth; |
||
61 | |||
62 | /* |
||
63 | VME cycles address modifiers |
||
64 | */ |
||
65 | typedef enum CVAddressModifier { |
||
66 | cvA16_S = 0x2D, /* A16 supervisory access */ |
||
67 | cvA16_U = 0x29, /* A16 non-privileged */ |
||
68 | cvA16_LCK = 0x2C, /* A16 lock command */ |
||
69 | |||
70 | cvA24_S_BLT = 0x3F, /* A24 supervisory block transfer */ |
||
71 | cvA24_S_PGM = 0x3E, /* A24 supervisory program access */ |
||
72 | cvA24_S_DATA = 0x3D, /* A24 supervisory data access */ |
||
73 | cvA24_S_MBLT = 0x3C, /* A24 supervisory 64-bit block trnsfer */ |
||
74 | cvA24_U_BLT = 0x3B, /* A24 non-privileged block transfer */ |
||
75 | cvA24_U_PGM = 0x3A, /* A24 non-privileged program access */ |
||
76 | cvA24_U_DATA = 0x39, /* A24 non-privileged data access */ |
||
77 | cvA24_U_MBLT = 0x38, /* A24 non-privileged 64-bit block trnsfer */ |
||
78 | cvA24_LCK = 0x32, /* A24 lock command */ |
||
79 | |||
80 | cvA32_S_BLT = 0x0F, /* A32 supervisory block transfer */ |
||
81 | cvA32_S_PGM = 0x0E, /* A32 supervisory program access */ |
||
82 | cvA32_S_DATA = 0x0D, /* A32 supervisory data access */ |
||
83 | cvA32_S_MBLT = 0x0C, /* A32 supervisory 64-bit block trnsfer */ |
||
84 | cvA32_U_BLT = 0x0B, /* A32 non-privileged block transfer */ |
||
85 | cvA32_U_PGM = 0x0A, /* A32 non-privileged program access */ |
||
86 | cvA32_U_DATA = 0x09, /* A32 non-privileged data access */ |
||
87 | cvA32_U_MBLT = 0x08, /* A32 non-privileged 64-bit block trnsfer */ |
||
88 | cvA32_LCK = 0x05, /* A32 lock command */ |
||
89 | |||
90 | cvCR_CSR = 0x2F, /* CR/CSR space */ |
||
91 | |||
92 | /* |
||
93 | The following address modifiers are not yet implemented. |
||
94 | */ |
||
95 | |||
96 | cvA40_BLT = 0x37, /* A40 block transfer (MD32) */ |
||
97 | cvA40_LCK = 0x35, /* A40 lock command */ |
||
98 | cvA40 = 0x34, /* A40 access */ |
||
99 | |||
100 | cvA64 = 0x01, /* A64 single trnsfer access */ |
||
101 | cvA64_BLT = 0x03, /* A64 block transfer */ |
||
102 | cvA64_MBLT = 0x00, /* A64 64-bit block transfer */ |
||
103 | cvA64_LCK = 0x04, /* A64 lock command */ |
||
104 | |||
105 | cvA3U_2eVME = 0x21, /* 2eVME for 3U modules */ |
||
106 | cvA6U_2eVME = 0x20 /* 2eVME for 6U modules */ |
||
107 | } CVAddressModifier; |
||
108 | |||
109 | /* |
||
110 | Error codes returned by the exported functions. |
||
111 | */ |
||
112 | typedef enum CVErrorCodes { |
||
113 | cvSuccess = 0, /* Operation completed successfully */ |
||
114 | cvBusError = -1, /* VME bus error during the cycle */ |
||
115 | cvCommError = -2, /* Communication error */ |
||
116 | cvGenericError = -3, /* Unspecified error */ |
||
117 | cvInvalidParam = -4, /* Invalid parameter */ |
||
118 | cvTimeoutError = -5, /* Timeout error */ |
||
119 | } CVErrorCodes; |
||
120 | |||
121 | /* |
||
122 | Pulser selection. |
||
123 | */ |
||
124 | typedef enum CVPulserSelect { |
||
125 | cvPulserA = 0, /* Identifies the pulser 'A' */ |
||
126 | cvPulserB = 1 /* Identifies the pulser 'B' */ |
||
127 | } CVPulserSelect; |
||
128 | |||
129 | /* |
||
130 | Output selection. |
||
131 | */ |
||
132 | typedef enum CVOutputSelect { |
||
133 | cvOutput0 = 0, /* Identifies the output line 0 */ |
||
134 | cvOutput1 = 1, /* Identifies the output line 1 */ |
||
135 | cvOutput2 = 2, /* Identifies the output line 2 */ |
||
136 | cvOutput3 = 3, /* Identifies the output line 3 */ |
||
137 | cvOutput4 = 4 /* Identifies the output line 4 */ |
||
138 | } CVOutputSelect; |
||
139 | |||
140 | /* |
||
141 | Input selection. |
||
142 | */ |
||
143 | typedef enum CVInputSelect { |
||
144 | cvInput0 = 0, /* Identifies the input line 0 */ |
||
145 | cvInput1 = 1 /* Identifies the input line 1 */ |
||
146 | } CVInputSelect; |
||
147 | |||
148 | /* |
||
149 | Signal sources. |
||
150 | */ |
||
151 | typedef enum CVIOSources { |
||
152 | cvManualSW = 0, /* Manual (button) or software controlled */ |
||
153 | cvInputSrc0 = 1, /* Input line 0 */ |
||
154 | cvInputSrc1 = 2, /* Input line 1 */ |
||
155 | cvCoincidence = 3, /* Inputs coincidence */ |
||
156 | cvVMESignals = 4, /* Signals from VME bus */ |
||
157 | cvMiscSignals = 6 /* Various internal signals */ |
||
158 | } CVIOSources; |
||
159 | |||
160 | /* |
||
161 | Time base units to specify pulses period and width. |
||
162 | */ |
||
163 | typedef enum CVTimeUnits { |
||
164 | cvUnit25ns = 0, /* Time unit is 25 nanoseconds */ |
||
165 | cvUnit1600ns = 1, /* Time unit is 1.6 microseconds */ |
||
166 | cvUnit410us = 2, /* Time unit is 410 microseconds */ |
||
167 | cvUnit104ms = 3 /* Time unit is 104 milliseconds */ |
||
168 | } CVTimeUnits; |
||
169 | |||
170 | /* |
||
171 | Polarity for LED emitting. |
||
172 | */ |
||
173 | typedef enum CVLEDPolarity { |
||
174 | cvActiveHigh = 0, /* LED emits on signal high level */ |
||
175 | cvActiveLow = 1 /* LED emits on signal low level */ |
||
176 | } CVLEDPolarity; |
||
177 | |||
178 | /* |
||
179 | Input and Output signal polarity. |
||
180 | */ |
||
181 | typedef enum CVIOPolarity { |
||
182 | cvDirect = 0, /* Normal polarity */ |
||
183 | cvInverted = 1 /* Inverted polarity */ |
||
184 | } CVIOPolarity; |
||
185 | |||
186 | /* |
||
187 | Accessible registers. |
||
188 | */ |
||
189 | typedef enum CVRegisters { |
||
190 | cvStatusReg = 0x00, /* Status register */ |
||
191 | cvVMEControlReg = 0x01, /* VME Control register */ |
||
192 | cvFwRelReg = 0x02, /* Firmware Release register */ |
||
193 | cvFwDldReg = 0x03, /* Firmware Download register */ |
||
194 | cvFlenaReg = 0x04, /* Flash Enable */ |
||
195 | cvVMEIRQEnaReg = 0x06, /* VME IRQ Lines Enable */ |
||
196 | cvInputReg = 0x08, /* Input register */ |
||
197 | cvOutRegSet = 0x0A, /* Output register */ |
||
198 | cvInMuxRegSet = 0x0B, /* Input Multiplexer */ |
||
199 | cvOutMuxRegSet = 0x0C, /* Output Multiplexer */ |
||
200 | cvLedPolRegSet = 0x0D, /* Led Polarity */ |
||
201 | cvOutRegClear = 0x10, /* Output register */ |
||
202 | cvInMuxRegClear = 0x11, /* Input Multiplexer */ |
||
203 | cvOutMuxRegClear = 0x12, /* Output Multiplexer */ |
||
204 | cvLedPolRegClear = 0x13, /* Led Polarity */ |
||
205 | cvPulserA0 = 0x16, /* Period and width of Pulser A */ |
||
206 | cvPulserA1 = 0x17, /* Num pulses and range of Pulser A */ |
||
207 | cvPulserB0 = 0x19, /* Period and width of Pulser B */ |
||
208 | cvPulserB1 = 0x1A, /* Num pulses and range of Pulser B */ |
||
209 | cvScaler0 = 0x1C, /* Limit and Autores of Scaler A */ |
||
210 | cvScaler1 = 0x1D, /* Counter value of Scaler A */ |
||
211 | cvDispADL = 0x20, /* Display AD[15:0] */ |
||
212 | cvDispADH = 0x21, /* Display AD[31:16] */ |
||
213 | cvDispDTL = 0x22, /* Display DT[15:0] */ |
||
214 | cvDispDTH = 0x23, /* Display DT[31:16] */ |
||
215 | cvDispC1 = 0x24, /* Display Control left bar */ |
||
216 | cvDispC2 = 0x25, /* Display Control left bar */ |
||
217 | cvLMADL = 0x28, /* Loc. Mon. AD[15:0] */ |
||
218 | cvLMADH = 0x29, /* Loc. Mon. AD[31:16] */ |
||
219 | cvLMC = 0x2C /* Loc. Mon. Controls */ |
||
220 | } CVRegisters; |
||
221 | |||
222 | /* |
||
223 | Bits for status register decoding. |
||
224 | */ |
||
225 | typedef enum CVStatusRegisterBits { |
||
226 | cvSYSRES = 0x0001, /* VME is in system reset state */ |
||
227 | cvSYSCTRL = 0x0002, /* The bridge is the VME system controller */ |
||
228 | cvDTACK = 0x0010, /* Last access has generated a DTACK signal */ |
||
229 | cvBERR = 0x0020, /* Last access has generated a bus error */ |
||
230 | cvDIP0 = 0x0100, /* Dip Switch position 0 state */ |
||
231 | cvDIP1 = 0x0200, /* Dip Switch position 1 state */ |
||
232 | cvDIP2 = 0x0400, /* Dip Switch position 2 state */ |
||
233 | cvDIP3 = 0x0800, /* Dip Switch position 3 state */ |
||
234 | cvDIP4 = 0x1000, /* Dip Switch position 4 state */ |
||
235 | cvUSBTYPE = 0x8000 /* USB Speed: 0 = Full; 1 = High */ |
||
236 | } CVStatusRegisterBits; |
||
237 | |||
238 | /* |
||
239 | Bits for input register decoding. |
||
240 | */ |
||
241 | typedef enum CVInputRegisterBits { |
||
242 | cvIn0Bit = 0x0001, /* Input line 0 signal level. */ |
||
243 | cvIn1Bit = 0x0002, /* Input line 1 signal level. */ |
||
244 | cvCoincBit = 0x0004, /* Coincidence of input signal level. */ |
||
245 | cvPulsAOutBit = 0x0008, /* Pulser A output signal level. */ |
||
246 | cvPulsBOutBit = 0x0010, /* Pulser B output signal level. */ |
||
247 | cvScalEndCntBit = 0x0020, /* Scaler end counter signal level. */ |
||
248 | cvLocMonBit = 0x0040, /* Location monitor signal level. */ |
||
249 | } CVInputRegisterBits; |
||
250 | |||
251 | /* |
||
252 | Bits for input register decoding. |
||
253 | */ |
||
254 | typedef enum CVOutputRegisterBits { |
||
255 | cvPulsAStartBit = 0x0001, /* Pulser A start signal level. */ |
||
256 | cvPulsAResetBit = 0x0002, /* Pulser A reset signal level. */ |
||
257 | cvPulsBStartBit = 0x0004, /* Pulser B start signal level. */ |
||
258 | cvPulsBResetBit = 0x0008, /* Pulser B reset signal level. */ |
||
259 | cvScalGateBit = 0x0010, /* Scaler gate signal level. */ |
||
260 | cvScalResetBit = 0x0020, /* Scaler reset counter signal level. */ |
||
261 | cvOut0Bit = 0x0040, /* Output line 0 signal level. */ |
||
262 | cvOut1Bit = 0x0080, /* Output line 1 signal level. */ |
||
263 | cvOut2Bit = 0x0100, /* Output line 2 signal level. */ |
||
264 | cvOut3Bit = 0x0200, /* Output line 3 signal level. */ |
||
265 | cvOut4Bit = 0x0400, /* Output line 4 signal level. */ |
||
266 | } CVOutputRegisterBits; |
||
267 | |||
268 | /* |
||
269 | Types of VME Arbiter. |
||
270 | */ |
||
271 | typedef enum CVArbiterTypes { |
||
272 | cvPriorized = 0, /* Priority Arbiter */ |
||
273 | cvRoundRobin = 1 /* Round-Robin Arbiter */ |
||
274 | } CVArbiterTypes; |
||
275 | |||
276 | /* |
||
277 | Types of VME Bus Requester. |
||
278 | */ |
||
279 | typedef enum CVRequesterTypes { |
||
280 | cvFair = 0, /* Fair bus requester */ |
||
281 | cvDemand = 1 /* On demand bus requester */ |
||
282 | } CVRequesterTypes; |
||
283 | |||
284 | /* |
||
285 | Types of VME Bus release. |
||
286 | */ |
||
287 | typedef enum CVReleaseTypes { |
||
288 | cvRWD = 0, /* Release When Done */ |
||
289 | cvROR = 1 /* Release On Request */ |
||
290 | } CVReleaseTypes; |
||
291 | |||
292 | /* |
||
293 | VME bus request levels. |
||
294 | */ |
||
295 | typedef enum CVBusReqLevels { |
||
296 | cvBR0 = 0, /* Bus request level 0 */ |
||
297 | cvBR1 = 1, /* Bus request level 1 */ |
||
298 | cvBR2 = 2, /* Bus request level 2 */ |
||
299 | cvBR3 = 3 /* Bus request level 3 */ |
||
300 | } CVBusReqLevels; |
||
301 | |||
302 | /* |
||
303 | VME Interrupt levels. |
||
304 | */ |
||
305 | typedef enum CVIRQLevels { |
||
306 | cvIRQ1 = 0x01, /* Interrupt level 1 */ |
||
307 | cvIRQ2 = 0x02, /* Interrupt level 2 */ |
||
308 | cvIRQ3 = 0x04, /* Interrupt level 3 */ |
||
309 | cvIRQ4 = 0x08, /* Interrupt level 4 */ |
||
310 | cvIRQ5 = 0x10, /* Interrupt level 5 */ |
||
311 | cvIRQ6 = 0x20, /* Interrupt level 6 */ |
||
312 | cvIRQ7 = 0x40 /* Interrupt level 7 */ |
||
313 | } CVIRQLevels; |
||
314 | |||
315 | /* |
||
316 | VME bus timeouts. |
||
317 | */ |
||
318 | typedef enum CVVMETimeouts { |
||
319 | cvTimeout50us = 0, /* Timeout is 50 microseconds */ |
||
320 | cvTimeout400us = 1 /* Timeout is 400 microseconds */ |
||
321 | } CVVMETimeouts; |
||
322 | |||
323 | /* |
||
324 | Data type to store the front panel display last access data. |
||
325 | */ |
||
326 | typedef struct CVDisplay { |
||
327 | long cvAddress; /* VME Address */ |
||
328 | long cvData; /* VME Data */ |
||
329 | long cvAM; /* Address modifier */ |
||
330 | long cvIRQ; /* IRQ levels */ |
||
331 | CAEN_BOOL cvDS0; /* Data Strobe 0 signal */ |
||
332 | CAEN_BOOL cvDS1; /* Data Strobe 1 signal */ |
||
333 | CAEN_BOOL cvAS; /* Address Strobe signal */ |
||
334 | CAEN_BOOL cvIACK; /* Interrupt Acknowledge signal */ |
||
335 | CAEN_BOOL cvWRITE; /* Write signal */ |
||
336 | CAEN_BOOL cvLWORD; /* Long Word signal */ |
||
337 | CAEN_BOOL cvDTACK; /* Data Acknowledge signal */ |
||
338 | CAEN_BOOL cvBERR; /* Bus Error signal */ |
||
339 | CAEN_BOOL cvSYSRES; /* System Reset signal */ |
||
340 | CAEN_BOOL cvBR; /* Bus Request signal */ |
||
341 | CAEN_BOOL cvBG; /* Bus Grant signal */ |
||
342 | } CVDisplay; |
||
343 | |||
344 | #endif // __CAENVMETYPES_H |