1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#ifndef VTI_H
#define VTI_H
/** This is the driver for a Vigilant technologies ENCDAC board.
The board includes 4 channels of quadrature encoder input,
4 channels of analog output, 8 on board digital I/O, and up
to 128 digital I/O on the expanded I/O module, 3 timers
with interrupt.
A further 4 quadrature encoder inputs, 4 channels of DAC
output and 8 additional channels of digital I/O are
available through the Industry Pack interface. While some
of the hooks are in place, the IP interface is not
currently supported, nor is the ISA version of the board.
To Do: Add full support for the Industray pack
Add support for the ISA version of the board.
Add support for timers
**/
/** Copyright (C) 2006 Eric H. Johnson
<ejohnson AT AAAINC DOT com>
**/
/** This program is free software; you can redistribute it and/or
modify it under the terms of version 2 of the GNU General
Public License as published by the Free Software Foundation.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
THE AUTHORS OF THIS LIBRARY ACCEPT ABSOLUTELY NO LIABILITY FOR
ANY HARM OR LOSS RESULTING FROM ITS USE. IT IS _EXTREMELY_ UNWISE
TO RELY ON SOFTWARE ALONE FOR SAFETY. Any machinery capable of
harming persons must have provisions for completely removing power
from all motors, etc, before persons enter any danger area. All
machinery must be designed to comply with local and national safety
codes, and the authors of this software can not, and do not, take
any responsibility for such compliance.
This code was written as part of the EMC HAL project. For more
information, go to www.linuxcnc.org.
**/
/*
Vigilant Technologies' board decls
*/
#define VENDOR 0x10b5
#define DEVICE 0x9050
#define MAX_CHANS 4
#define MAX_IO_PORTS 17
#define PINS_PER_PORT 8
#define DAC_DISABLE 0x00a5
#define DAC_IND_MODE 0x005a
#define DAC_WATCHDOG_MODE 0x000f
#define DAC_ZERO_VOLTS 0x8000
#define EPSILON 1e-20
/* Structures used by the PCI card */
struct encoder {
u16 Counter[4];
u8 Status; // 0x08
u8 dummy; // dummy space
u16 Reset; // 0x0a
u8 reserved[3]; // dummy space 0x0c - 0x0f
u16 Interrupt; // 0x10
u16 DAC; // 0x12
u16 DIO; // 0x14
};
struct timer {
u8 reserved[0x2c];
u8 ctc0; // 8254 Counter 0
u8 ctc1; // 8254 Counter 1
u8 ctc2; // 8254 Counter 2
u8 control; // 8254 command register
};
struct dac {
u8 reserved1[0x13f]; // dummy space
u16 dac[4];
u16 dac_adj[4];
u16 mode;
u16 update;
u16 reset;
u8 dummy[0x2a]; // dummy space
u8 DIO[0x10]; // Digital IO channels
u16 config0; // Direction configs for channels 00-63
u16 config1; // Direction configs for channels 64-127
u16 status;
};
/* IndustryPack mappings - Need to check IF u8 or u16, also check boundary address*/
struct ip {
u8 ID[0x40]; // IndustryPack ID - The first (12*2) addresses used for ID info
// consult P20 of vip-4encdac.pdf for more info.
u16 IP_int; // Interrupt status
u8 reserved[0x3e]; // dummy space
u16 IO[0x30]; // IndustryPack IO - Only need the first 0x30 address.
// Again, consult manual - Might it be better to use another struct here ??
// and also for the ID stuff....
};
typedef union
{
signed long int Long;
signed short int Word[2];
} Longword;
#endif
|