APCI1710_INCCPT.h revision da91b2692e0939b307f9047192d2b9fe07793e7a
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, unsigned int 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 unsigned int ul_TimingInterval, 181 unsigned int *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 unsigned int ui_WriteValue); 211 212int i_APCI1710_Write32BitCounterValue(struct comedi_device *dev, 213 unsigned char b_ModulNbr, unsigned int 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 unsigned int *pul_LatchValue); 238 239int i_APCI1710_Read16BitCounterValue(struct comedi_device *dev, 240 unsigned char b_ModulNbr, unsigned char b_SelectedCounter, 241 unsigned int *pui_CounterValue); 242 243int i_APCI1710_Read32BitCounterValue(struct comedi_device *dev, 244 unsigned char b_ModulNbr, unsigned int *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 unsigned int *pul_ReadValue); 272