AlcapDAQ  1
v1290.h
Go to the documentation of this file.
1 // ****************************************************************************
2 // * Filename: v1290.h
3 // * Description:
4 // * Created by: Nam Tran (nam at kuno-g.phys.sci.osaka-u.ac.jp)
5 // * Time tag: 2013-04-07 10:31:01
6 // ****************************************************************************
7 #ifndef V1290_7NX5IH0R
8 #define V1290_7NX5IH0R
9 
10 #include "mvmestd.h"
11 #include <stdint.h>
12 
13 #define V1290_AM MVME_AM_A32_ND
14 #define V1290_BUFF_DW MVME_DMODE_D32
15 #define V1290_REG_DW MVME_DMODE_D16
16 
17 typedef enum
18 {
22 
23 #define V1190_NUM_TDC_A 4
24 #define V1290_NUM_TDC_B 2
25 #define V1190_NUM_TDC_A 4
26 #define V1290_NUM_TDC_N 2
27 
28 #define V1290_OUT_BUFFER 0x0000
29 // Register map
30 #define V1290_CONTROL 0x1000
31 #define V1290_STATUS 0x1002
32 #define V1290_INT_LEVEL 0x100A
33 #define V1290_INT_VECTOR 0x100C
34 #define V1290_GEORESS 0x100E
35 #define V1290_MCST_CBLTRESS 0x1010
36 #define V1290_MCST_CBLT_CTRL 0x1012
37 #define V1290_MOD_RESET 0x1014
38 #define V1290_SW_CLEAR 0x1016
39 #define V1290_SW_EVENT_RESET 0x1018
40 #define V1290_SW_TRIGGER 0x101A
41 #define V1290_EVENT_COUNTER 0x101C
42 #define V1290_EVENT_STORED 0x1020
43 #define V1290_ALMOST_FULL_LVL 0x1022
44 #define V1290_BLT_EVENT_NUM 0x1024
45 #define V1290_FW_REV 0x1026
46 #define V1290_TESTREG 0x1028
47 #define V1290_OUT_PROG_CTRL 0x102C
48 #define V1290_MICRO 0x102E
49 #define V1290_MICRO_HND 0x1030
50 #define V1290_SEL_FLASH 0x1032
51 #define V1290_FLASH 0x1034
52 #define V1290_COMP_SRAM_PAGE 0x1036
53 #define V1290_EVENT_FIFO 0x1038
54 #define V1290_EVENT_FIFO_STORED 0x103C
55 #define V1290_EVENT_FIFO_STATUS 0x103E
56 #define V1290_DUMMY32 0x1200
57 #define V1290_DUMMY16 0x1204
58 #define V1290_ROM_OUI_2 0x4024
59 #define V1290_ROM_OUI_1 0x4028
60 #define V1290_ROM_OUI_0 0x402C
61 #define V1290_ROM_VERSION 0x4030
62 #define V1290_ROM_BOARD_ID_2 0x4034
63 #define V1290_ROM_BOARD_ID_1 0x4038
64 #define V1290_ROM_BOARD_ID_0 0x403C
65 #define V1290_ROM_REVISION_3 0x4040
66 #define V1290_ROM_REVISION_2 0x4044
67 #define V1290_ROM_REVISION_1 0x4048
68 #define V1290_ROM_REVISION_0 0x404C
69 #define V1290_ROM_SERIAL_1 0x4080
70 #define V1290_ROM_SERIAL_0 0x4084
71 
72 // Micro register opcodes: ACQUISITION MODE
73 #define V1290_MICRO_WR_OK 0x0001
74 #define V1290_MICRO_RD_OK 0x0002
75 #define V1290_TRG_MATCH_OPCODE 0x0000
76 #define V1290_CONT_STORE_OPCODE 0x0100
77 #define V1290_READ_ACQ_MOD_OPCODE 0x0200
78 #define V1290_SET_KEEP_TOKEN_OPCODE 0x0300
79 #define V1290_CLEAR_KEEP_TOKEN_OPCODE 0x0400
80 #define V1290_LOAD_DEF_CONFIG_OPCODE 0x0500
81 #define V1290_SAVE_USER_CONFIG_OPCODE 0x0600
82 #define V1290_LOAD_USER_CONFIG_OPCODE 0x0700
83 #define V1290_AUTOLOAD_USER_CONFIG_OPCODE 0x0800
84 #define V1290_AUTOLOAD_DEF_CONFIG_OPCODE 0x0900
85 // Micro register opcodes: TRIGGER
86 #define V1290_SET_WIN_WIDTH_OPCODE 0x1000
87 #define V1290_SET_WIN_OFFSET_OPCODE 0x1100
88 #define V1290_SET_SW_MARGIN_OPCODE 0x1200
89 #define V1290_SET_REJ_MARGIN_OPCODE 0x1300
90 #define V1290_EN_SUB_TRG_OPCODE 0x1400
91 #define V1290_DIS_SUB_TRG_OPCODE 0x1500
92 #define V1290_READ_TRG_CONF_OPCODE 0x1600
93 // Micro register opcodes: TDC EDGE DETECTION
94 #define V1290_SET_DETECTION_OPCODE 0x2200
95 #define V1290_READ_DETECTION_OPCODE 0x2300
96 #define V1290_SET_TR_LEAD_LSB_OPCODE 0x2400
97 #define V1290_SET_PAIR_RES_OPCODE 0x2500
98 #define V1290_READ_RES_OPCODE 0x2600
99 #define V1290_SET_DEAD_TIME_OPCODE 0x2800
100 #define V1290_READ_DEAD_TIME_OPCODE 0x2900
101 // Micro register opcodes: TDC READOUT
102 #define V1290_EN_HEAD_TRAILER_OPCODE 0x3000
103 #define V1290_DIS_HEAD_TRAILER_OPCODE 0x3100
104 #define V1290_READ_HEAD_TRAILER_OPCODE 0x3200
105 #define V1290_SET_EVENT_SIZE_OPCODE 0x3300
106 #define V1290_READ_EVENT_SIZE_OPCODE 0x3400
107 #define V1290_EN_ERROR_MARK_OPCODE 0x3500
108 #define V1290_DIS_ERROR_MARK_OPCODE 0x3600
109 #define V1290_EN_ERROR_BYPASS_OPCODE 0x3700
110 #define V1290_DIS_ERROR_BYPASS_OPCODE 0x3800
111 #define V1290_SET_ERROR_TYPES_OPCODE 0x3900
112 #define V1290_READ_ERROR_TYPES_OPCODE 0x3A00
113 #define V1290_SET_FIFO_SIZE_OPCODE 0x3B00
114 #define V1290_READ_FIFO_SIZE_OPCODE 0x3C00
115 // Micro register opcodes: CHANNEL ENABLE
116 #define V1290_EN_CHANNEL_OPCODE 0x4000
117 #define V1290_DIS_CHANNEL_OPCODE 0x4100
118 #define V1290_EN_ALL_CH_OPCODE 0x4200
119 #define V1290_DIS_ALL_CH_OPCODE 0x4300
120 #define V1290_WRITE_EN_PATTERN_OPCODE 0x4400
121 #define V1290_READ_EN_PATTERN_OPCODE 0x4500
122 #define V1290_WRITE_EN_PATTERN32_OPCODE 0x4600
123 #define V1290_READ_EN_PATTERN32_OPCODE 0x4700
124 // Micro register opcodes: ADJUST
125 #define V1290_SET_GLOB_OFFSET_OPCODE 0x5000
126 #define V1290_READ_GLOB_OFFSET_OPCODE 0x5100
127 #define V1290_SET_ADJUST_CH_OPCODE 0x5200
128 #define V1290_READ_ADJUST_CH_OPCODE 0x5300
129 #define V1290_SET_RC_ADJ_OPCODE 0x5400
130 #define V1290_READ_RC_ADJ_OPCODE 0x5500
131 #define V1290_SAVE_RC_ADJ_OPCODE 0x5600
132 // Micro register opcodes: MISCELLANEOUS
133 #define V1290_READ_TDC_ID_OPCODE 0x6000
134 #define V1290_READ_MICRO_REV_OPCODE 0x6100
135 #define V1290_RESET_DLL_PLL_OPCODE 0x6200
136 // Micro register opcodes: ADVANCED
137 #define V1290_WRITE_SETUP_REG_OPCODE 0x7000
138 #define V1290_READ_SETUP_REG_OPCODE 0x7100
139 #define V1290_UPDATE_SETUP_REG_OPCODE 0x7200
140 #define V1290_DEFAULT_SETUP_REG_OPCODE 0x7300
141 #define V1290_READ_ERROR_STATUS_OPCODE 0x7400
142 #define V1290_READ_DLL_LOCK_OPCODE 0x7500
143 #define V1290_READ_STATUS_STREAM_OPCODE 0x7600
144 #define V1290_UPDATE_SETUP_TDC_OPCODE 0x7700
145 // Micro register opcodes: DEBUG AND TEST
146 #define V1290_WRITE_EEPROM_OPCODE 0xC000
147 #define V1290_READ_EEPROM_OPCODE 0xC100
148 #define V1290_MICROCONTROLLER_FW_OPCODE 0xC200
149 #define V1290_WRITE_SPARE_OPCODE 0xC300
150 #define V1290_READ_SPARE_OPCODE 0xC400
151 #define V1290_EN_TEST_MODE_OPCODE 0xC500
152 #define V1290_DIS_TEST_MODE_OPCODE 0xC600
153 #define V1290_SET_TDC_TEST_OUTPUT_OPCODE 0xC700
154 #define V1290_SET_DLL_CLOCK_OPCODE 0xC800
155 #define V1290_READ_TDC_SETUP_SCAN_PATH_OPCODE 0xC800
156 
157 // Output buffer macros
158 #define V1290_DATA_TYPE_MASK 0xf8000000
159 #define V1290_DATA_MASK 0x1fffff
160 #define V1290_CH_MASK 0x03e00000
161 
162 #define V1290_GLOBAL_HEADER 0x40000000
163 #define V1290_GLOBAL_TRAILER 0x80000000
164 #define V1290_TDC_HEADER 0x08000000
165 #define V1290_TDC_MEASURE 0x00000000
166 #define V1290_TDC_ERROR 0x20000000
167 #define V1290_TDC_TRAILER 0x18000000
168 #define V1290_GLOBAL_TRIGGER_TIME 0x88000000
169 #define V1290_FILLER 0xc0000000
170 
171 #define V1290_GLB_HDR_MAX_EVENT_COUNT (0x003fffff+ 1)
172 #define V1290_GLB_HDR_EVENT_COUNT_MSK 0x07ffffe0
173 #define V1290_GLB_HDR_GEO_MSK 0x0000001f
174 #define V1290_GLB_TRG_TIME_TAG_MSK 0x07ffffff
175 #define V1290_GLB_TRL_STATUS_MSK 0x07000000
176 #define V1290_GLB_TRL_WCOUNT_MSK 0x001fffe0
177 #define V1290_GLB_TRL_GEO_MSK 0x0000001f
178 
179 #define V1290_TDC_HDR_TDC_MSK 0x03000000
180 #define V1290_TDC_HDR_EVENT_ID_MSK 0x00fff000
181 #define V1290_TDC_HDR_BUNCH_ID_MSK 0x00000fff
182 #define V1290_TDC_MSR_TRAILING_MSK 0x04000000
183 #define V1290_TDC_MSR_CHANNEL_MSK 0x03f80000
184 #define V1290_TDC_MSR_MEASURE_MSK 0x0007ffff
185 #define V1290_TDC_TRL_TDC_MSK 0x03000000
186 #define V1290_TDC_TRL_EVENT_ID_MSK 0x00fff000
187 #define V1290_TDC_TRL_WCOUNT_MSK 0x00000fff
188 #define V1290_TDC_ERR_TDC_MSK 0x03000000
189 #define V1290_TDC_ERR_ERR_FLAGS_MSK 0x00003fff
190 
191 #define V1290_IS_GLOBAL_HEADER(data) ((data& V1290_DATA_TYPE_MASK)== V1290_GLOBAL_HEADER)
192 #define V1290_IS_GLOBAL_TRAILER(data) ((data& V1290_DATA_TYPE_MASK)== V1290_GLOBAL_TRAILER)
193 #define V1290_IS_TDC_HEADER(data) ((data& V1290_DATA_TYPE_MASK)== V1290_TDC_HEADER)
194 #define V1290_IS_TDC_MEASURE(data) ((data& V1290_DATA_TYPE_MASK)== V1290_TDC_MEASURE)
195 #define V1290_IS_TDC_ERROR(data) ((data& V1290_DATA_TYPE_MASK)== V1290_TDC_ERROR)
196 #define V1290_IS_TDC_TRAILER(data) ((data& V1290_DATA_TYPE_MASK)== V1290_TDC_TRAILER)
197 #define V1290_IS_GLOBAL_TRIGGER_TIME(data) ((data& V1290_DATA_TYPE_MASK)== V1290_GLOBAL_TRIGGER_TIME)
198 #define V1290_IS_FILLER(data) ((data& V1290_DATA_TYPE_MASK)== V1290_FILLER)
199 #define V1290_GET_TDC_MSR_CHANNEL(data) ((uint32_t)((((uint32_t)data)& V1290_TDC_MSR_CHANNEL_MSK)>>21))
200 #define V1290_GET_TDC_MSR_MEASURE(data) ((uint32_t)(((uint32_t)data)& V1290_TDC_MSR_MEASURE_MSK))
201 
202 //Basic read/write
203 uint16_t v1290_Read16(MVME_INTERFACE *mvme, uint32_t base, int offset);
204 uint32_t v1290_Read32(MVME_INTERFACE *mvme, uint32_t base, int offset);
205 void v1290_Write16(MVME_INTERFACE *mvme, uint32_t base,
206  int offset, uint16_t value);
207 int v1290_EventRead(MVME_INTERFACE *mvme, uint32_t base,
208  uint32_t *pdest, int *nentry);
209 int v1290_DataRead(MVME_INTERFACE *mvme,
210  uint32_t base, uint32_t *pdest, int nentry);
211 
212 // Opcode related functions
213 int v1290_MicroWrite(MVME_INTERFACE *mvme, uint32_t base, uint16_t data);
214 void v1290_WriteMicro(MVME_INTERFACE *mvme, uint32_t base,
215  uint16_t opcode, uint16_t data);
216 int v1290_MicroRead(MVME_INTERFACE *mvme, const uint32_t base);
217 uint16_t v1290_ReadMicro(MVME_INTERFACE *mvme, const uint32_t base,
218  uint16_t opcode);
219 
220 // Acq mode settings
221 void v1290_TriggerMatchingSet(MVME_INTERFACE *mvme, uint32_t base);
222 void v1290_ContinuousSet(MVME_INTERFACE *mvme, uint32_t base);
223 int v1290_AcqModeRead(MVME_INTERFACE *mvme, uint32_t base);
224 // Trigger matching mode related settings
225 int v1290_TriggerConfRead(MVME_INTERFACE *mvme, uint32_t base, uint16_t *conf);
226 void v1290_SetWindowWidth(MVME_INTERFACE *mvme, uint32_t base, uint16_t width);
227 void v1290_SetWindowOffset(MVME_INTERFACE *mvme, uint32_t base, int16_t offset);
228 void v1290_SetExtraMargin(MVME_INTERFACE *mvme, uint32_t base, uint16_t margin);
229 void v1290_SetRejectMargin(MVME_INTERFACE *mvme, uint32_t base, uint16_t margin);
230 void v1290_EnableTriggerSubtraction(MVME_INTERFACE *mvme, uint32_t base, bool en);
231 // TDC edge and resolution settings
232 // only 2 lsb bits matter (see 5.4 @ manual)
233 // edge code: 00-pair mode, 01-only trailing, 10-only leading, 11-both edges
234 // resolution code (for edges): 00-800 ps, 01-200 ps, 10-100 ps, 11-25 ns
235 void v1290_SetEdgeDetection(MVME_INTERFACE *mvme, uint32_t base, uint16_t edge);
236 uint16_t v1290_ReadEdgeDetection(MVME_INTERFACE *mvme, uint32_t base);
237 void v1290_SetEdgeResolution(MVME_INTERFACE *mvme, uint32_t base, uint16_t res);
238 uint16_t v1290_ReadEdgeResolution(MVME_INTERFACE *mvme, uint32_t base);
239 void v1290_SetDeadtime(MVME_INTERFACE *mvme, uint32_t base, uint16_t deadtime);
240 uint16_t v1290_ReadDeadtime(MVME_INTERFACE *mvme, uint32_t base);
241 // TDC readout: headers, trailers, event composition, section 5.5 @ manual
242 void v1290_EnableHeader(MVME_INTERFACE *mvme, uint32_t base, bool en);
243 bool v1290_HeaderIsEnabled(MVME_INTERFACE *mvme, uint32_t base);
244 void v1290_SetMaxHits(MVME_INTERFACE *mvme, uint32_t base, uint16_t max);
245 uint16_t v1290_ReadMaxHits(MVME_INTERFACE *mvme, uint32_t base);
246 void v1290_EnableTDCErrorMark(MVME_INTERFACE *mvme, uint32_t base, bool en);
247 void v1290_EnableBypassTDC(MVME_INTERFACE *mvme, uint32_t base, bool en);
248 void v1290_SetFIFOSize(MVME_INTERFACE *mvme, uint32_t base, uint16_t size);
249 uint16_t v1290_ReadFIFOSize(MVME_INTERFACE *mvme, uint32_t base);
250 // Channel enable, section 5.6
251 void v1290_EnableChannel(MVME_INTERFACE *mvme, uint32_t base,uint16_t chn,bool en);
252 void v1290_EnableAllChannels(MVME_INTERFACE *mvme, uint32_t base);
253 void v1290_DisableAllChannels(MVME_INTERFACE *mvme, uint32_t base);
254 void v1290_WriteEnablePattern(MVME_INTERFACE *mvme,uint32_t base,uint16_t pattern);
255 uint16_t v1290_ReadEnablePattern(MVME_INTERFACE *mvme,uint32_t base);
256 
257 // Control/status registers
258 void v1290_ReadControlRegister(MVME_INTERFACE *mvme, uint32_t base);
259 void v1290_EnableBusError(MVME_INTERFACE *mvme, uint32_t base, bool en);
260 void v1290_EnableEmptyEvent(MVME_INTERFACE *mvme, uint32_t base, bool en);
261 void v1290_EnableEventFIFO(MVME_INTERFACE *mvme, uint32_t base, bool en);
262 
263 void v1290_ReadStatusRegister(MVME_INTERFACE *mvme, uint32_t base);
264 bool v1290_IsDataReady(MVME_INTERFACE *mvme, uint32_t base_addr);
265 bool v1290_IsAlmostFull(MVME_INTERFACE *mvme, uint32_t base_addr);
266 bool v1290_IsFull(MVME_INTERFACE *mvme, uint32_t base_addr);
267 
268 void v1290_ModuleReset(MVME_INTERFACE *mvme, uint32_t base);
269 void v1290_SoftClear(MVME_INTERFACE *mvme, uint32_t base);
270 void v1290_EventReset(MVME_INTERFACE *mvme, uint32_t base);
271 void v1290_SoftTrigger(MVME_INTERFACE *mvme, uint32_t base);
272 uint32_t v1290_ReadEventCounter(MVME_INTERFACE *mvme, uint32_t base);
273 uint16_t v1290_ReadEventStored(MVME_INTERFACE *mvme, uint32_t base);
274 void v1290_SetAlmostFullLevel(MVME_INTERFACE *mvme, uint32_t base,
275  uint16_t level);
276 uint16_t v1290_ReadAlmostFullLevel(MVME_INTERFACE *mvme, uint32_t base,
277  uint16_t level);
278 void v1290_FWRev(MVME_INTERFACE *mvme, uint32_t base);
279 
280 void v1290_ReadEventFIFO(MVME_INTERFACE *mvme, uint32_t base, uint16_t *dest);
281 uint16_t v1290_ReadEventFIFOStored(MVME_INTERFACE *mvme, uint32_t base);
282 uint16_t v1290_ReadEventFIFOStatus(MVME_INTERFACE *mvme, uint32_t base);
283 #endif /* end of include guard: V1290_7NX5IH0R */