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