/ src / hal / drivers / motenc.h
motenc.h
  1  /******************************************************************************
  2   *
  3   * Copyright (C) 2005 Peter G. Vavaroutsos <pete AT vavaroutsos DOT com>
  4   *
  5   *
  6   * Hardware register defines for Vital Systems MOTENC-100 board.
  7   * The board includes an 8 channel quadrature decoder, 8 analog inputs,
  8   * 8 analog outputs, 68 digital inputs, 32 digital outputs, programable
  9   * timer interrupts, a watch dog timer, and a hardware E-STOP circuit.
 10   *
 11   * This program is free software; you can redistribute it and/or
 12   * modify it under the terms of version 2 of the GNU General
 13   * Public License as published by the Free Software Foundation.
 14   * This library is distributed in the hope that it will be useful,
 15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
 16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 17   * GNU General Public License for more details.
 18   *
 19   * You should have received a copy of the GNU General Public
 20   * License along with this library; if not, write to the Free Software
 21   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 22   *
 23   * THE AUTHORS OF THIS LIBRARY ACCEPT ABSOLUTELY NO LIABILITY FOR
 24   * ANY HARM OR LOSS RESULTING FROM ITS USE.  IT IS _EXTREMELY_ UNWISE
 25   * TO RELY ON SOFTWARE ALONE FOR SAFETY.  Any machinery capable of
 26   * harming persons must have provisions for completely removing power
 27   * from all motors, etc, before persons enter any danger area.  All
 28   * machinery must be designed to comply with local and national safety
 29   * codes, and the authors of this software can not, and do not, take
 30   * any responsibility for such compliance.
 31   *
 32   * This code was written as part of the EMC HAL project.  For more
 33   * information, go to www.linuxcnc.org.
 34   *
 35   ******************************************************************************/
 36  
 37  #ifndef _MOTENC_H_
 38  #define _MOTENC_H_
 39  
 40  
 41  #include "hal.h"
 42  
 43  
 44  // Vendor and device ID.
 45  #define MOTENC_VENDOR_ID		0x10B5	// PLX.
 46  #define MOTENC_DEVICE_ID		0x3001	// MOTENC-100.
 47  #define MOTENC_SUB_SYS_VENDOR_ID	0x10B5	// PLX.
 48  #define MOTENC_SUB_SYS_DEVICE_ID	0x9030	// 9030 SMARTarget I/O Accelerator.
 49  
 50  #define MOTENC_PCI_MEM_LEN		512
 51  
 52  #define MOTENC_NUM_ADC_CHANNELS		8
 53  #define MOTENC_NUM_DAC_CHANNELS		8
 54  
 55  #define MOTENC_FPGA_NUM_ENCODER_CHANNELS 4
 56  #define MOTENC_FPGA_NUM_DIGITAL_INPUTS	36
 57  #define MOTENC_FPGA_NUM_DIGITAL_OUTPUTS	16
 58  
 59  #define MOTENC_NUM_FPGA		2
 60  #define MOTENC_NUM_ENCODER_CHANNELS	(MOTENC_NUM_FPGA * MOTENC_FPGA_NUM_ENCODER_CHANNELS)
 61  #define MOTENC_NUM_DIGITAL_INPUTS	(MOTENC_NUM_FPGA * MOTENC_FPGA_NUM_DIGITAL_INPUTS - 4)
 62  #define MOTENC_NUM_DIGITAL_OUTPUTS	(MOTENC_NUM_FPGA * MOTENC_FPGA_NUM_DIGITAL_OUTPUTS)
 63  
 64  
 65  
 66  typedef struct {
 67      hal_s32_t				encoderCount[MOTENC_FPGA_NUM_ENCODER_CHANNELS];
 68      hal_u32_t				digitalIo;
 69      hal_u32_t				statusControl;
 70      hal_u32_t				reserved;
 71      hal_u32_t				boardVersion;
 72  } volatile MotencFpgaRegMap;
 73  
 74  // For use with digitalIo reg.
 75  #define MOTENC_DIGITAL_OUT		0x0000FFFF
 76  #define MOTENC_DIGITAL_OUT_SHFT		0
 77  #define MOTENC_DIGITAL_IN		0xFFFF0000
 78  #define MOTENC_DIGITAL_IN_SHFT		16
 79  
 80  // For use with statusControl reg.
 81  #define MOTENC_CONTROL_ENCODER_RESET    0x0000000F
 82  #define MOTENC_CONTROL_ENCODER_RESET_SHFT 0
 83  
 84  #define MOTENC_STATUS_DIGITAL_IN	0x0000FFFF
 85  #define MOTENC_STATUS_DIGITAL_IN_SHFT	0
 86  #define MOTENC_STATUS_BOARD_ID		0x00030000	// FPGA 0.
 87  #define MOTENC_STATUS_BOARD_ID_SHFT	16
 88  #define MOTENC_STATUS_ADC_DONE		0x00040000
 89  #define MOTENC_STATUS_ESTOP		0x00080000
 90  #define MOTENC_STATUS_DIGITAL_IN2	0x000F0000	// FPGA 1.
 91  #define MOTENC_STATUS_DIGITAL_IN2_SHFT	16
 92  #define MOTENC_STATUS_INDEX		0x00F00000
 93  #define MOTENC_STATUS_INDEX_SHFT	20
 94  #define MOTENC_STATUS_INDEX_LATCH	0x0F000000
 95  #define MOTENC_STATUS_INDEX_LATCH_SHFT	24
 96  
 97  typedef struct {
 98      MotencFpgaRegMap			fpga[MOTENC_NUM_FPGA];
 99      hal_u32_t				timerCompare;
100      hal_u32_t				timerIrqDisable;
101      hal_u32_t				timerIrqEnable;
102      hal_u32_t				watchdogControl;
103      hal_u32_t				watchdogReset;
104      hal_u32_t				reserved1[3];
105      hal_u32_t				dac[MOTENC_NUM_DAC_CHANNELS];
106      hal_u32_t				adcDataCommand;
107      hal_u32_t				reserved2[7];
108      hal_u32_t				adcStartConversion;
109  } volatile MotencRegMap;
110  
111  // For use with watchdogControl reg.
112  #define MOTENC_WATCHDOG_CTL_TIMEBASE    0x00000001
113  #define MOTENC_WATCHDOG_CTL_8MS		0x00000000
114  #define MOTENC_WATCHDOG_CTL_16MS	0x00000001
115  #define MOTENC_WATCHDOG_CTL_ENABLE	0x00000004
116  #define MOTENC_WATCHDOG_CTL_AUTO_RESET	0x00000010	// Reset by DAC writes.
117  
118  // For use with watchdogReset reg.
119  #define MOTENC_WATCHDOG_RESET_VALUE	0x0000005A
120  
121  // For use with dac reg.
122  #define MOTENC_DAC_COUNT_ZERO		0x00001000	// 0 volts.
123  #define MOTENC_DAC_VOLTS_MIN		-10.0		// For converting volts to counts.
124  #define MOTENC_DAC_VOLTS_MAX		10.0
125  #define MOTENC_DAC_SCALE_MULTIPLY	-8191.0		// Higher counts are lower voltage.
126  #define MOTENC_DAC_SCALE_DIVIDE		(MOTENC_DAC_VOLTS_MAX - MOTENC_DAC_VOLTS_MIN)
127  
128  // For use with adcDataCommand reg.
129  #define MOTENC_ADC_COMMAND_CHN_0	0
130  #define MOTENC_ADC_COMMAND_CHN_0_1	1
131  #define MOTENC_ADC_COMMAND_CHN_0_1_2    2
132  #define MOTENC_ADC_COMMAND_CHN_0_1_2_3	3
133  #define MOTENC_ADC_COMMAND_CHN_4	4
134  #define MOTENC_ADC_COMMAND_CHN_4_5	5
135  #define MOTENC_ADC_COMMAND_CHN_4_5_6    6
136  #define MOTENC_ADC_COMMAND_CHN_4_5_6_7	7
137  #define MOTENC_ADC_COMMAND_POWER_DOWN	8
138  #define MOTENC_ADC_SIGN_BIT		0x00002000
139  #define MOTENC_ADC_SIGN_EXTEND		0xFFFFC000
140  #define MOTENC_ADC_VOLTS_MIN		-5.0		// For converting counts to volts.
141  #define MOTENC_ADC_VOLTS_MAX		5.0
142  #define MOTENC_ADC_SCALE_MULTIPLY	(MOTENC_ADC_VOLTS_MAX - MOTENC_ADC_VOLTS_MIN)
143  #define MOTENC_ADC_SCALE_DIVIDE		16384.0
144  
145  
146  #endif