APCI1710_INCCPT.h revision 34c43922e62708d45e9660eee4b4f1fb7b4bf2c7
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 comedi_insn *insn, unsigned int * data); 137 138INT i_APCI1710_InsnBitsINCCPT(struct comedi_device *dev, struct comedi_subdevice * s, 139 comedi_insn *insn, unsigned int * data); 140 141INT i_APCI1710_InsnWriteINCCPT(struct comedi_device *dev, struct comedi_subdevice * s, 142 comedi_insn *insn, unsigned int * data); 143 144INT i_APCI1710_InsnReadINCCPT(struct comedi_device *dev, struct comedi_subdevice * s, 145 comedi_insn *insn, unsigned int * data); 146 147/*********** Supplementary Functions********/ 148 149/* INSN CONFIG */ 150INT i_APCI1710_InitCounter(struct comedi_device *dev, 151 BYTE b_ModulNbr, 152 BYTE b_CounterRange, 153 BYTE b_FirstCounterModus, 154 BYTE b_FirstCounterOption, 155 BYTE b_SecondCounterModus, 156 BYTE b_SecondCounterOption); 157 158INT i_APCI1710_CounterAutoTest(struct comedi_device *dev, PBYTE pb_TestStatus); 159 160INT i_APCI1710_InitIndex(struct comedi_device *dev, 161 BYTE b_ModulNbr, 162 BYTE b_ReferenceAction, 163 BYTE b_IndexOperation, BYTE b_AutoMode, 164 BYTE b_InterruptEnable); 165 166INT i_APCI1710_InitReference(struct comedi_device *dev, 167 BYTE b_ModulNbr, BYTE b_ReferenceLevel); 168 169INT i_APCI1710_InitExternalStrobe(struct comedi_device *dev, 170 BYTE b_ModulNbr, BYTE b_ExternalStrobe, 171 BYTE b_ExternalStrobeLevel); 172 173INT i_APCI1710_InitCompareLogic(struct comedi_device *dev, 174 BYTE b_ModulNbr, UINT ui_CompareValue); 175 176INT i_APCI1710_InitFrequencyMeasurement(struct comedi_device *dev, 177 BYTE b_ModulNbr, 178 BYTE b_PCIInputClock, 179 BYTE b_TimingUnity, 180 ULONG ul_TimingInterval, 181 PULONG pul_RealTimingInterval); 182 183/* INSN BITS */ 184INT i_APCI1710_ClearCounterValue(struct comedi_device *dev, BYTE b_ModulNbr); 185 186INT i_APCI1710_ClearAllCounterValue(struct comedi_device *dev); 187 188INT i_APCI1710_SetInputFilter(struct comedi_device *dev, 189 BYTE b_ModulNbr, BYTE b_PCIInputClock, 190 BYTE b_Filter); 191 192INT i_APCI1710_LatchCounter(struct comedi_device *dev, 193 BYTE b_ModulNbr, BYTE b_LatchReg); 194 195INT i_APCI1710_SetIndexAndReferenceSource(struct comedi_device *dev, 196 BYTE b_ModulNbr, 197 BYTE b_SourceSelection); 198 199INT i_APCI1710_SetDigitalChlOn(struct comedi_device *dev, BYTE b_ModulNbr); 200 201INT i_APCI1710_SetDigitalChlOff(struct comedi_device *dev, BYTE b_ModulNbr); 202 203/* INSN WRITE */ 204INT i_APCI1710_EnableLatchInterrupt(struct comedi_device *dev, BYTE b_ModulNbr); 205 206INT i_APCI1710_DisableLatchInterrupt(struct comedi_device *dev, BYTE b_ModulNbr); 207 208INT i_APCI1710_Write16BitCounterValue(struct comedi_device *dev, 209 BYTE b_ModulNbr, BYTE b_SelectedCounter, 210 UINT ui_WriteValue); 211 212INT i_APCI1710_Write32BitCounterValue(struct comedi_device *dev, 213 BYTE b_ModulNbr, ULONG ul_WriteValue); 214 215INT i_APCI1710_EnableIndex(struct comedi_device *dev, BYTE b_ModulNbr); 216 217INT i_APCI1710_DisableIndex(struct comedi_device *dev, BYTE b_ModulNbr); 218 219INT i_APCI1710_EnableCompareLogic(struct comedi_device *dev, BYTE b_ModulNbr); 220 221INT i_APCI1710_DisableCompareLogic(struct comedi_device *dev, BYTE b_ModulNbr); 222 223INT i_APCI1710_EnableFrequencyMeasurement(struct comedi_device *dev, 224 BYTE b_ModulNbr, 225 BYTE b_InterruptEnable); 226 227INT i_APCI1710_DisableFrequencyMeasurement(struct comedi_device *dev, 228 BYTE b_ModulNbr); 229 230/* INSN READ */ 231INT i_APCI1710_ReadLatchRegisterStatus(struct comedi_device *dev, 232 BYTE b_ModulNbr, BYTE b_LatchReg, 233 PBYTE pb_LatchStatus); 234 235INT i_APCI1710_ReadLatchRegisterValue(struct comedi_device *dev, 236 BYTE b_ModulNbr, BYTE b_LatchReg, 237 PULONG pul_LatchValue); 238 239INT i_APCI1710_Read16BitCounterValue(struct comedi_device *dev, 240 BYTE b_ModulNbr, BYTE b_SelectedCounter, 241 PUINT pui_CounterValue); 242 243INT i_APCI1710_Read32BitCounterValue(struct comedi_device *dev, 244 BYTE b_ModulNbr, PULONG pul_CounterValue); 245 246INT i_APCI1710_GetIndexStatus(struct comedi_device *dev, 247 BYTE b_ModulNbr, PBYTE pb_IndexStatus); 248 249INT i_APCI1710_GetReferenceStatus(struct comedi_device *dev, 250 BYTE b_ModulNbr, PBYTE pb_ReferenceStatus); 251 252INT i_APCI1710_GetUASStatus(struct comedi_device *dev, 253 BYTE b_ModulNbr, PBYTE pb_UASStatus); 254 255INT i_APCI1710_GetCBStatus(struct comedi_device *dev, 256 BYTE b_ModulNbr, PBYTE pb_CBStatus); 257 258INT i_APCI1710_Get16BitCBStatus(struct comedi_device *dev, 259 BYTE b_ModulNbr, PBYTE pb_CBStatusCounter0, 260 PBYTE pb_CBStatusCounter1); 261 262INT i_APCI1710_GetUDStatus(struct comedi_device *dev, 263 BYTE b_ModulNbr, PBYTE pb_UDStatus); 264 265INT i_APCI1710_GetInterruptUDLatchedStatus(struct comedi_device *dev, 266 BYTE b_ModulNbr, PBYTE pb_UDStatus); 267 268INT i_APCI1710_ReadFrequencyMeasurement(struct comedi_device *dev, 269 BYTE b_ModulNbr, 270 PBYTE pb_Status, PBYTE pb_UDStatus, 271 PULONG pul_ReadValue); 272