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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
/******************************************************************************
*
* Copyright (C) 2005 Peter G. Vavaroutsos <pete AT vavaroutsos DOT com>
*
*
* Hardware register defines for Vital Systems MOTENC-100 board.
* The board includes an 8 channel quadrature decoder, 8 analog inputs,
* 8 analog outputs, 68 digital inputs, 32 digital outputs, programable
* timer interrupts, a watch dog timer, and a hardware E-STOP circuit.
*
* 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.
*
******************************************************************************/
#ifndef _MOTENC_H_
#define _MOTENC_H_
#include "hal.h"
// Vendor and device ID.
#define MOTENC_VENDOR_ID 0x10B5 // PLX.
#define MOTENC_DEVICE_ID 0x3001 // MOTENC-100.
#define MOTENC_SUB_SYS_VENDOR_ID 0x10B5 // PLX.
#define MOTENC_SUB_SYS_DEVICE_ID 0x9030 // 9030 SMARTarget I/O Accelerator.
#define MOTENC_PCI_MEM_LEN 512
#define MOTENC_NUM_ADC_CHANNELS 8
#define MOTENC_NUM_DAC_CHANNELS 8
#define MOTENC_FPGA_NUM_ENCODER_CHANNELS 4
#define MOTENC_FPGA_NUM_DIGITAL_INPUTS 36
#define MOTENC_FPGA_NUM_DIGITAL_OUTPUTS 16
#define MOTENC_NUM_FPGA 2
#define MOTENC_NUM_ENCODER_CHANNELS (MOTENC_NUM_FPGA * MOTENC_FPGA_NUM_ENCODER_CHANNELS)
#define MOTENC_NUM_DIGITAL_INPUTS (MOTENC_NUM_FPGA * MOTENC_FPGA_NUM_DIGITAL_INPUTS - 4)
#define MOTENC_NUM_DIGITAL_OUTPUTS (MOTENC_NUM_FPGA * MOTENC_FPGA_NUM_DIGITAL_OUTPUTS)
typedef struct {
hal_s32_t encoderCount[MOTENC_FPGA_NUM_ENCODER_CHANNELS];
hal_u32_t digitalIo;
hal_u32_t statusControl;
hal_u32_t reserved;
hal_u32_t boardVersion;
} volatile MotencFpgaRegMap;
// For use with digitalIo reg.
#define MOTENC_DIGITAL_OUT 0x0000FFFF
#define MOTENC_DIGITAL_OUT_SHFT 0
#define MOTENC_DIGITAL_IN 0xFFFF0000
#define MOTENC_DIGITAL_IN_SHFT 16
// For use with statusControl reg.
#define MOTENC_CONTROL_ENCODER_RESET 0x0000000F
#define MOTENC_CONTROL_ENCODER_RESET_SHFT 0
#define MOTENC_STATUS_DIGITAL_IN 0x0000FFFF
#define MOTENC_STATUS_DIGITAL_IN_SHFT 0
#define MOTENC_STATUS_BOARD_ID 0x00030000 // FPGA 0.
#define MOTENC_STATUS_BOARD_ID_SHFT 16
#define MOTENC_STATUS_ADC_DONE 0x00040000
#define MOTENC_STATUS_ESTOP 0x00080000
#define MOTENC_STATUS_DIGITAL_IN2 0x000F0000 // FPGA 1.
#define MOTENC_STATUS_DIGITAL_IN2_SHFT 16
#define MOTENC_STATUS_INDEX 0x00F00000
#define MOTENC_STATUS_INDEX_SHFT 20
#define MOTENC_STATUS_INDEX_LATCH 0x0F000000
#define MOTENC_STATUS_INDEX_LATCH_SHFT 24
typedef struct {
MotencFpgaRegMap fpga[MOTENC_NUM_FPGA];
hal_u32_t timerCompare;
hal_u32_t timerIrqDisable;
hal_u32_t timerIrqEnable;
hal_u32_t watchdogControl;
hal_u32_t watchdogReset;
hal_u32_t reserved1[3];
hal_u32_t dac[MOTENC_NUM_DAC_CHANNELS];
hal_u32_t adcDataCommand;
hal_u32_t reserved2[7];
hal_u32_t adcStartConversion;
} volatile MotencRegMap;
// For use with watchdogControl reg.
#define MOTENC_WATCHDOG_CTL_TIMEBASE 0x00000001
#define MOTENC_WATCHDOG_CTL_8MS 0x00000000
#define MOTENC_WATCHDOG_CTL_16MS 0x00000001
#define MOTENC_WATCHDOG_CTL_ENABLE 0x00000004
#define MOTENC_WATCHDOG_CTL_AUTO_RESET 0x00000010 // Reset by DAC writes.
// For use with watchdogReset reg.
#define MOTENC_WATCHDOG_RESET_VALUE 0x0000005A
// For use with dac reg.
#define MOTENC_DAC_COUNT_ZERO 0x00001000 // 0 volts.
#define MOTENC_DAC_VOLTS_MIN -10.0 // For converting volts to counts.
#define MOTENC_DAC_VOLTS_MAX 10.0
#define MOTENC_DAC_SCALE_MULTIPLY -8191.0 // Higher counts are lower voltage.
#define MOTENC_DAC_SCALE_DIVIDE (MOTENC_DAC_VOLTS_MAX - MOTENC_DAC_VOLTS_MIN)
// For use with adcDataCommand reg.
#define MOTENC_ADC_COMMAND_CHN_0 0
#define MOTENC_ADC_COMMAND_CHN_0_1 1
#define MOTENC_ADC_COMMAND_CHN_0_1_2 2
#define MOTENC_ADC_COMMAND_CHN_0_1_2_3 3
#define MOTENC_ADC_COMMAND_CHN_4 4
#define MOTENC_ADC_COMMAND_CHN_4_5 5
#define MOTENC_ADC_COMMAND_CHN_4_5_6 6
#define MOTENC_ADC_COMMAND_CHN_4_5_6_7 7
#define MOTENC_ADC_COMMAND_POWER_DOWN 8
#define MOTENC_ADC_SIGN_BIT 0x00002000
#define MOTENC_ADC_SIGN_EXTEND 0xFFFFC000
#define MOTENC_ADC_VOLTS_MIN -5.0 // For converting counts to volts.
#define MOTENC_ADC_VOLTS_MAX 5.0
#define MOTENC_ADC_SCALE_MULTIPLY (MOTENC_ADC_VOLTS_MAX - MOTENC_ADC_VOLTS_MIN)
#define MOTENC_ADC_SCALE_DIVIDE 16384.0
#endif
|