Committer:
Sergunb
Date:
Mon Sep 04 12:04:13 2017 +0000
Revision:
0:8f0d870509fe
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sergunb 0:8f0d870509fe 1 /*
Sergunb 0:8f0d870509fe 2 cpu_map.h - CPU and pin mapping configuration file
Sergunb 0:8f0d870509fe 3 Part of Grbl
Sergunb 0:8f0d870509fe 4
Sergunb 0:8f0d870509fe 5 Copyright (c) 2012-2016 Sungeun K. Jeon for Gnea Research LLC
Sergunb 0:8f0d870509fe 6
Sergunb 0:8f0d870509fe 7 Grbl is free software: you can redistribute it and/or modify
Sergunb 0:8f0d870509fe 8 it under the terms of the GNU General Public License as published by
Sergunb 0:8f0d870509fe 9 the Free Software Foundation, either version 3 of the License, or
Sergunb 0:8f0d870509fe 10 (at your option) any later version.
Sergunb 0:8f0d870509fe 11
Sergunb 0:8f0d870509fe 12 Grbl is distributed in the hope that it will be useful,
Sergunb 0:8f0d870509fe 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
Sergunb 0:8f0d870509fe 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Sergunb 0:8f0d870509fe 15 GNU General Public License for more details.
Sergunb 0:8f0d870509fe 16
Sergunb 0:8f0d870509fe 17 You should have received a copy of the GNU General Public License
Sergunb 0:8f0d870509fe 18 along with Grbl. If not, see <http://www.gnu.org/licenses/>.
Sergunb 0:8f0d870509fe 19 */
Sergunb 0:8f0d870509fe 20
Sergunb 0:8f0d870509fe 21 /* The cpu_map.h files serve as a central pin mapping selection file for different
Sergunb 0:8f0d870509fe 22 processor types or alternative pin layouts. This version of Grbl officially supports
Sergunb 0:8f0d870509fe 23 only the Arduino Mega328p. */
Sergunb 0:8f0d870509fe 24
Sergunb 0:8f0d870509fe 25
Sergunb 0:8f0d870509fe 26 #ifndef cpu_map_h
Sergunb 0:8f0d870509fe 27 #define cpu_map_h
Sergunb 0:8f0d870509fe 28
Sergunb 0:8f0d870509fe 29
Sergunb 0:8f0d870509fe 30 #ifdef CPU_MAP_ATMEGA328P // (Arduino Uno) Officially supported by Grbl.
Sergunb 0:8f0d870509fe 31
Sergunb 0:8f0d870509fe 32 // Define serial port pins and interrupt vectors.
Sergunb 0:8f0d870509fe 33 #define SERIAL_RX USART_RX_vect
Sergunb 0:8f0d870509fe 34 #define SERIAL_UDRE USART_UDRE_vect
Sergunb 0:8f0d870509fe 35
Sergunb 0:8f0d870509fe 36 // Define step pulse output pins. NOTE: All step bit pins must be on the same port.
Sergunb 0:8f0d870509fe 37 #define STEP_DDR DDRD
Sergunb 0:8f0d870509fe 38 #define STEP_PORT PORTD
Sergunb 0:8f0d870509fe 39 #define X_STEP_BIT 2 // Uno Digital Pin 2
Sergunb 0:8f0d870509fe 40 #define Y_STEP_BIT 3 // Uno Digital Pin 3
Sergunb 0:8f0d870509fe 41 #define Z_STEP_BIT 4 // Uno Digital Pin 4
Sergunb 0:8f0d870509fe 42 #define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits
Sergunb 0:8f0d870509fe 43
Sergunb 0:8f0d870509fe 44 // Define step direction output pins. NOTE: All direction pins must be on the same port.
Sergunb 0:8f0d870509fe 45 #define DIRECTION_DDR DDRD
Sergunb 0:8f0d870509fe 46 #define DIRECTION_PORT PORTD
Sergunb 0:8f0d870509fe 47 #define X_DIRECTION_BIT 5 // Uno Digital Pin 5
Sergunb 0:8f0d870509fe 48 #define Y_DIRECTION_BIT 6 // Uno Digital Pin 6
Sergunb 0:8f0d870509fe 49 #define Z_DIRECTION_BIT 7 // Uno Digital Pin 7
Sergunb 0:8f0d870509fe 50 #define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
Sergunb 0:8f0d870509fe 51
Sergunb 0:8f0d870509fe 52 // Define stepper driver enable/disable output pin.
Sergunb 0:8f0d870509fe 53 #define STEPPERS_DISABLE_DDR DDRB
Sergunb 0:8f0d870509fe 54 #define STEPPERS_DISABLE_PORT PORTB
Sergunb 0:8f0d870509fe 55 #define STEPPERS_DISABLE_BIT 0 // Uno Digital Pin 8
Sergunb 0:8f0d870509fe 56 #define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT)
Sergunb 0:8f0d870509fe 57 #define SetStepperDisableBit() STEPPERS_DISABLE_PORT |= (1 << STEPPERS_DISABLE_BIT)
Sergunb 0:8f0d870509fe 58 #define ResetStepperDisableBit() STEPPERS_DISABLE_PORT &= ~(1<<STEPPERS_DISABLE_BIT)
Sergunb 0:8f0d870509fe 59 #define EnableStepperDisabeBit() STEPPERS_DISABLE_DDR |= 1<<STEPPERS_DISABLE_BIT
Sergunb 0:8f0d870509fe 60
Sergunb 0:8f0d870509fe 61 // Define homing/hard limit switch input pins and limit interrupt vectors.
Sergunb 0:8f0d870509fe 62 // NOTE: All limit bit pins must be on the same port, but not on a port with other input pins (CONTROL).
Sergunb 0:8f0d870509fe 63 #define LIMIT_DDR DDRB
Sergunb 0:8f0d870509fe 64 #define LIMIT_PIN PINB
Sergunb 0:8f0d870509fe 65 #define LIMIT_PORT PORTB
Sergunb 0:8f0d870509fe 66 #define X_LIMIT_BIT 1 // Uno Digital Pin 9
Sergunb 0:8f0d870509fe 67 #define Y_LIMIT_BIT 2 // Uno Digital Pin 10
Sergunb 0:8f0d870509fe 68 #ifdef VARIABLE_SPINDLE // Z Limit pin and spindle enabled swapped to access hardware PWM on Pin 11.
Sergunb 0:8f0d870509fe 69 #define Z_LIMIT_BIT 4 // Uno Digital Pin 12
Sergunb 0:8f0d870509fe 70 #else
Sergunb 0:8f0d870509fe 71 #define Z_LIMIT_BIT 3 // Uno Digital Pin 11
Sergunb 0:8f0d870509fe 72 #endif
Sergunb 0:8f0d870509fe 73 #define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
Sergunb 0:8f0d870509fe 74 #define LIMIT_INT PCIE0 // Pin change interrupt enable pin
Sergunb 0:8f0d870509fe 75 #define LIMIT_INT_vect PCINT0_vect
Sergunb 0:8f0d870509fe 76 #define LIMIT_PCMSK PCMSK0 // Pin change interrupt register
Sergunb 0:8f0d870509fe 77
Sergunb 0:8f0d870509fe 78 // Define spindle enable and spindle direction output pins.
Sergunb 0:8f0d870509fe 79 #define SPINDLE_ENABLE_DDR DDRB
Sergunb 0:8f0d870509fe 80 #define SPINDLE_ENABLE_PORT PORTB
Sergunb 0:8f0d870509fe 81 // Z Limit pin and spindle PWM/enable pin swapped to access hardware PWM on Pin 11.
Sergunb 0:8f0d870509fe 82 #ifdef VARIABLE_SPINDLE
Sergunb 0:8f0d870509fe 83 #ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN
Sergunb 0:8f0d870509fe 84 // If enabled, spindle direction pin now used as spindle enable, while PWM remains on D11.
Sergunb 0:8f0d870509fe 85 #define SPINDLE_ENABLE_BIT 5 // Uno Digital Pin 13 (NOTE: D13 can't be pulled-high input due to LED.)
Sergunb 0:8f0d870509fe 86 #else
Sergunb 0:8f0d870509fe 87 #define SPINDLE_ENABLE_BIT 3 // Uno Digital Pin 11
Sergunb 0:8f0d870509fe 88 #endif
Sergunb 0:8f0d870509fe 89 #else
Sergunb 0:8f0d870509fe 90 #define SPINDLE_ENABLE_BIT 4 // Uno Digital Pin 12
Sergunb 0:8f0d870509fe 91 #endif
Sergunb 0:8f0d870509fe 92 #ifndef USE_SPINDLE_DIR_AS_ENABLE_PIN
Sergunb 0:8f0d870509fe 93 #define SPINDLE_DIRECTION_DDR DDRB
Sergunb 0:8f0d870509fe 94 #define SPINDLE_DIRECTION_PORT PORTB
Sergunb 0:8f0d870509fe 95 #define SPINDLE_DIRECTION_BIT 5 // Uno Digital Pin 13 (NOTE: D13 can't be pulled-high input due to LED.)
Sergunb 0:8f0d870509fe 96 #endif
Sergunb 0:8f0d870509fe 97 #define SetSpindleEnablebit() SPINDLE_ENABLE_PORT |= (1<<SPINDLE_ENABLE_BIT); // Set pin to high
Sergunb 0:8f0d870509fe 98 #define ResetSpindleEnablebit() SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT); // Set pin to low
Sergunb 0:8f0d870509fe 99 #define SetSpindleDirectionBit() SPINDLE_DIRECTION_PORT |= (1<<SPINDLE_DIRECTION_BIT);
Sergunb 0:8f0d870509fe 100 #define ResetSpindleDirectionBit() SPINDLE_DIRECTION_PORT &= ~(1<<SPINDLE_DIRECTION_BIT);
Sergunb 0:8f0d870509fe 101
Sergunb 0:8f0d870509fe 102
Sergunb 0:8f0d870509fe 103 // Define flood and mist coolant enable output pins.
Sergunb 0:8f0d870509fe 104 #define COOLANT_FLOOD_DDR DDRC
Sergunb 0:8f0d870509fe 105 #define COOLANT_FLOOD_PORT PORTC
Sergunb 0:8f0d870509fe 106 #define COOLANT_FLOOD_BIT 3 // Uno Analog Pin 3
Sergunb 0:8f0d870509fe 107 #define COOLANT_MIST_DDR DDRC
Sergunb 0:8f0d870509fe 108 #define COOLANT_MIST_PORT PORTC
Sergunb 0:8f0d870509fe 109 #define COOLANT_MIST_BIT 4 // Uno Analog Pin 4
Sergunb 0:8f0d870509fe 110
Sergunb 0:8f0d870509fe 111 // Define user-control controls (cycle start, reset, feed hold) input pins.
Sergunb 0:8f0d870509fe 112 // NOTE: All CONTROLs pins must be on the same port and not on a port with other input pins (limits).
Sergunb 0:8f0d870509fe 113 #define CONTROL_DDR DDRC
Sergunb 0:8f0d870509fe 114 #define CONTROL_PIN PINC
Sergunb 0:8f0d870509fe 115 #define CONTROL_PORT PORTC
Sergunb 0:8f0d870509fe 116 #define CONTROL_RESET_BIT 0 // Uno Analog Pin 0
Sergunb 0:8f0d870509fe 117 #define CONTROL_FEED_HOLD_BIT 1 // Uno Analog Pin 1
Sergunb 0:8f0d870509fe 118 #define CONTROL_CYCLE_START_BIT 2 // Uno Analog Pin 2
Sergunb 0:8f0d870509fe 119 #define CONTROL_SAFETY_DOOR_BIT 1 // Uno Analog Pin 1 NOTE: Safety door is shared with feed hold. Enabled by config define.
Sergunb 0:8f0d870509fe 120 #define CONTROL_INT PCIE1 // Pin change interrupt enable pin
Sergunb 0:8f0d870509fe 121 #define CONTROL_INT_vect PCINT1_vect
Sergunb 0:8f0d870509fe 122 #define CONTROL_PCMSK PCMSK1 // Pin change interrupt register
Sergunb 0:8f0d870509fe 123 #define CONTROL_MASK ((1<<CONTROL_RESET_BIT)|(1<<CONTROL_FEED_HOLD_BIT)|(1<<CONTROL_CYCLE_START_BIT)|(1<<CONTROL_SAFETY_DOOR_BIT))
Sergunb 0:8f0d870509fe 124 #define CONTROL_INVERT_MASK CONTROL_MASK // May be re-defined to only invert certain control pins.
Sergunb 0:8f0d870509fe 125
Sergunb 0:8f0d870509fe 126 // Define probe switch input pin.
Sergunb 0:8f0d870509fe 127 #define PROBE_DDR DDRC
Sergunb 0:8f0d870509fe 128 #define PROBE_PIN PINC
Sergunb 0:8f0d870509fe 129 #define PROBE_PORT PORTC
Sergunb 0:8f0d870509fe 130 #define PROBE_BIT 5 // Uno Analog Pin 5
Sergunb 0:8f0d870509fe 131 #define PROBE_MASK (1<<PROBE_BIT)
Sergunb 0:8f0d870509fe 132
Sergunb 0:8f0d870509fe 133 // Variable spindle configuration below. Do not change unless you know what you are doing.
Sergunb 0:8f0d870509fe 134 // NOTE: Only used when variable spindle is enabled.
Sergunb 0:8f0d870509fe 135 #define SPINDLE_PWM_MAX_VALUE 255 // Don't change. 328p fast PWM mode fixes top value as 255.
Sergunb 0:8f0d870509fe 136 #ifndef SPINDLE_PWM_MIN_VALUE
Sergunb 0:8f0d870509fe 137 #define SPINDLE_PWM_MIN_VALUE 1 // Must be greater than zero.
Sergunb 0:8f0d870509fe 138 #endif
Sergunb 0:8f0d870509fe 139 #define SPINDLE_PWM_OFF_VALUE 0
Sergunb 0:8f0d870509fe 140 #define SPINDLE_PWM_RANGE (SPINDLE_PWM_MAX_VALUE-SPINDLE_PWM_MIN_VALUE)
Sergunb 0:8f0d870509fe 141 #define SPINDLE_TCCRA_REGISTER TCCR2A
Sergunb 0:8f0d870509fe 142 #define SPINDLE_TCCRB_REGISTER TCCR2B
Sergunb 0:8f0d870509fe 143 #define SPINDLE_OCR_REGISTER OCR2A
Sergunb 0:8f0d870509fe 144 #define SPINDLE_COMB_BIT COM2A1
Sergunb 0:8f0d870509fe 145
Sergunb 0:8f0d870509fe 146 // Prescaled, 8-bit Fast PWM mode.
Sergunb 0:8f0d870509fe 147 #define SPINDLE_TCCRA_INIT_MASK ((1<<WGM20) | (1<<WGM21)) // Configures fast PWM mode.
Sergunb 0:8f0d870509fe 148 // #define SPINDLE_TCCRB_INIT_MASK (1<<CS20) // Disable prescaler -> 62.5kHz
Sergunb 0:8f0d870509fe 149 // #define SPINDLE_TCCRB_INIT_MASK (1<<CS21) // 1/8 prescaler -> 7.8kHz (Used in v0.9)
Sergunb 0:8f0d870509fe 150 // #define SPINDLE_TCCRB_INIT_MASK ((1<<CS21) | (1<<CS20)) // 1/32 prescaler -> 1.96kHz
Sergunb 0:8f0d870509fe 151 #define SPINDLE_TCCRB_INIT_MASK (1<<CS22) // 1/64 prescaler -> 0.98kHz (J-tech laser)
Sergunb 0:8f0d870509fe 152
Sergunb 0:8f0d870509fe 153 // NOTE: On the 328p, these must be the same as the SPINDLE_ENABLE settings.
Sergunb 0:8f0d870509fe 154 #define SPINDLE_PWM_DDR DDRB
Sergunb 0:8f0d870509fe 155 #define SPINDLE_PWM_PORT PORTB
Sergunb 0:8f0d870509fe 156 #define SPINDLE_PWM_BIT 3 // Uno Digital Pin 11
Sergunb 0:8f0d870509fe 157
Sergunb 0:8f0d870509fe 158 #endif
Sergunb 0:8f0d870509fe 159
Sergunb 0:8f0d870509fe 160 // Define serial port pins and interrupt vectors.
Sergunb 0:8f0d870509fe 161 #ifdef CPU_MAP_WIN32
Sergunb 0:8f0d870509fe 162 // Define step pulse output pins. NOTE: All step bit pins must be on the same port.
Sergunb 0:8f0d870509fe 163 #define STEP_DDR DDRD
Sergunb 0:8f0d870509fe 164 #define STEP_PORT PORTD
Sergunb 0:8f0d870509fe 165 #define X_STEP_BIT 2
Sergunb 0:8f0d870509fe 166 #define Y_STEP_BIT 3
Sergunb 0:8f0d870509fe 167 #define Z_STEP_BIT 4
Sergunb 0:8f0d870509fe 168 #define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits
Sergunb 0:8f0d870509fe 169
Sergunb 0:8f0d870509fe 170 // Define step direction output pins. NOTE: All direction pins must be on the same port.
Sergunb 0:8f0d870509fe 171 #define DIRECTION_DDR DDRD
Sergunb 0:8f0d870509fe 172 #define DIRECTION_PORT PORTD
Sergunb 0:8f0d870509fe 173 #define X_DIRECTION_BIT 5
Sergunb 0:8f0d870509fe 174 #define Y_DIRECTION_BIT 6
Sergunb 0:8f0d870509fe 175 #define Z_DIRECTION_BIT 7
Sergunb 0:8f0d870509fe 176 #define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
Sergunb 0:8f0d870509fe 177
Sergunb 0:8f0d870509fe 178 // Define stepper driver enable/disable output pin.
Sergunb 0:8f0d870509fe 179 #define SetStepperDisableBit()
Sergunb 0:8f0d870509fe 180 #define ResetStepperDisableBit()
Sergunb 0:8f0d870509fe 181
Sergunb 0:8f0d870509fe 182
Sergunb 0:8f0d870509fe 183 // Define homing/hard limit switch input pins and limit interrupt vectors.
Sergunb 0:8f0d870509fe 184 // NOTE: All limit bit pins must be on the same port, but not on a port with other input pins (CONTROL).
Sergunb 0:8f0d870509fe 185 #define LIMIT_DDR DDRB
Sergunb 0:8f0d870509fe 186 #define LIMIT_PIN PINB
Sergunb 0:8f0d870509fe 187 #define LIMIT_PORT PORTB
Sergunb 0:8f0d870509fe 188 #define X_LIMIT_BIT 1
Sergunb 0:8f0d870509fe 189 #define Y_LIMIT_BIT 2
Sergunb 0:8f0d870509fe 190 #ifdef VARIABLE_SPINDLE // Z Limit pin and spindle enabled swapped to access hardware PWM on Pin 11.
Sergunb 0:8f0d870509fe 191 #define Z_LIMIT_BIT 4
Sergunb 0:8f0d870509fe 192 #else
Sergunb 0:8f0d870509fe 193 #define Z_LIMIT_BIT 3
Sergunb 0:8f0d870509fe 194 #endif
Sergunb 0:8f0d870509fe 195 #define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
Sergunb 0:8f0d870509fe 196 #define LIMIT_INT PCIE0 // Pin change interrupt enable pin
Sergunb 0:8f0d870509fe 197 #define LIMIT_INT_vect PCINT0_vect
Sergunb 0:8f0d870509fe 198 #define LIMIT_PCMSK PCMSK0 // Pin change interrupt register
Sergunb 0:8f0d870509fe 199
Sergunb 0:8f0d870509fe 200 // Define spindle enable and spindle direction output pins.
Sergunb 0:8f0d870509fe 201 #define SPINDLE_ENABLE_DDR DDRB
Sergunb 0:8f0d870509fe 202 #define SPINDLE_ENABLE_PORT PORTB
Sergunb 0:8f0d870509fe 203 // Z Limit pin and spindle PWM/enable pin swapped to access hardware PWM on Pin 11.
Sergunb 0:8f0d870509fe 204 #ifdef VARIABLE_SPINDLE
Sergunb 0:8f0d870509fe 205 #ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN
Sergunb 0:8f0d870509fe 206 // If enabled, spindle direction pin now used as spindle enable, while PWM remains on D11.
Sergunb 0:8f0d870509fe 207 #define SPINDLE_ENABLE_BIT 5 // Uno Digital Pin 13 (NOTE: D13 can't be pulled-high input due to LED.)
Sergunb 0:8f0d870509fe 208 #else
Sergunb 0:8f0d870509fe 209 #define SPINDLE_ENABLE_BIT 3 // Uno Digital Pin 11
Sergunb 0:8f0d870509fe 210 #endif
Sergunb 0:8f0d870509fe 211 #else
Sergunb 0:8f0d870509fe 212 #define SPINDLE_ENABLE_BIT 4 // Uno Digital Pin 12
Sergunb 0:8f0d870509fe 213 #endif
Sergunb 0:8f0d870509fe 214 #ifndef USE_SPINDLE_DIR_AS_ENABLE_PIN
Sergunb 0:8f0d870509fe 215 #define SPINDLE_DIRECTION_DDR DDRB
Sergunb 0:8f0d870509fe 216 #define SPINDLE_DIRECTION_PORT PORTB
Sergunb 0:8f0d870509fe 217 #define SPINDLE_DIRECTION_BIT 5 // Uno Digital Pin 13 (NOTE: D13 can't be pulled-high input due to LED.)
Sergunb 0:8f0d870509fe 218 #endif
Sergunb 0:8f0d870509fe 219
Sergunb 0:8f0d870509fe 220 // Define flood and mist coolant enable output pins.
Sergunb 0:8f0d870509fe 221 // NOTE: Uno analog pins 4 and 5 are reserved for an i2c interface, and may be installed at
Sergunb 0:8f0d870509fe 222 // a later date if flash and memory space allows.
Sergunb 0:8f0d870509fe 223 #define COOLANT_FLOOD_DDR DDRC
Sergunb 0:8f0d870509fe 224 #define COOLANT_FLOOD_PORT PORTC
Sergunb 0:8f0d870509fe 225 #define COOLANT_FLOOD_BIT 3 // Uno Analog Pin 3
Sergunb 0:8f0d870509fe 226 #ifdef ENABLE_M7 // Mist coolant disabled by default. See config.h to enable/disable.
Sergunb 0:8f0d870509fe 227 #define COOLANT_MIST_DDR DDRC
Sergunb 0:8f0d870509fe 228 #define COOLANT_MIST_PORT PORTC
Sergunb 0:8f0d870509fe 229 #define COOLANT_MIST_BIT 4 // Uno Analog Pin 4
Sergunb 0:8f0d870509fe 230 #endif
Sergunb 0:8f0d870509fe 231
Sergunb 0:8f0d870509fe 232 // Define user-control controls (cycle start, reset, feed hold) input pins.
Sergunb 0:8f0d870509fe 233 // NOTE: All CONTROLs pins must be on the same port and not on a port with other input pins (limits).
Sergunb 0:8f0d870509fe 234 #define CONTROL_DDR DDRC
Sergunb 0:8f0d870509fe 235 #define CONTROL_PIN PINC
Sergunb 0:8f0d870509fe 236 #define CONTROL_PORT PORTC
Sergunb 0:8f0d870509fe 237 #define CONTROL_RESET_BIT 0 // MEGA2560 Analog Pin 8
Sergunb 0:8f0d870509fe 238 #define CONTROL_FEED_HOLD_BIT 1 // MEGA2560 Analog Pin 9
Sergunb 0:8f0d870509fe 239 #define CONTROL_CYCLE_START_BIT 2 // MEGA2560 Analog Pin 10
Sergunb 0:8f0d870509fe 240 #define CONTROL_SAFETY_DOOR_BIT 3 // MEGA2560 Analog Pin 11
Sergunb 0:8f0d870509fe 241 #define CONTROL_INT PCIE2 // Pin change interrupt enable pin
Sergunb 0:8f0d870509fe 242 #define CONTROL_INT_vect PCINT2_vect
Sergunb 0:8f0d870509fe 243 #define CONTROL_PCMSK PCMSK2 // Pin change interrupt register
Sergunb 0:8f0d870509fe 244 #define CONTROL_MASK ((1<<CONTROL_RESET_BIT)|(1<<CONTROL_FEED_HOLD_BIT)|(1<<CONTROL_CYCLE_START_BIT)|(1<<CONTROL_SAFETY_DOOR_BIT))
Sergunb 0:8f0d870509fe 245
Sergunb 0:8f0d870509fe 246 // Define probe switch input pin.
Sergunb 0:8f0d870509fe 247 #define PROBE_DDR DDRC
Sergunb 0:8f0d870509fe 248 #define PROBE_PIN PINC
Sergunb 0:8f0d870509fe 249 #define PROBE_PORT PORTC
Sergunb 0:8f0d870509fe 250 #define PROBE_BIT 5 // Uno Analog Pin 5
Sergunb 0:8f0d870509fe 251 #define PROBE_MASK (1<<PROBE_BIT)
Sergunb 0:8f0d870509fe 252
Sergunb 0:8f0d870509fe 253 // Start of PWM & Stepper Enabled Spindle
Sergunb 0:8f0d870509fe 254 #ifdef VARIABLE_SPINDLE
Sergunb 0:8f0d870509fe 255 // Advanced Configuration Below You should not need to touch these variables
Sergunb 0:8f0d870509fe 256 #define PWM_MAX_VALUE 255.0
Sergunb 0:8f0d870509fe 257 #define TCCRA_REGISTER TCCR2A
Sergunb 0:8f0d870509fe 258 #define TCCRB_REGISTER TCCR2B
Sergunb 0:8f0d870509fe 259 #define OCR_REGISTER OCR2A
Sergunb 0:8f0d870509fe 260
Sergunb 0:8f0d870509fe 261 #define COMB_BIT COM2A1
Sergunb 0:8f0d870509fe 262 #define WAVE0_REGISTER WGM20
Sergunb 0:8f0d870509fe 263 #define WAVE1_REGISTER WGM21
Sergunb 0:8f0d870509fe 264 #define WAVE2_REGISTER WGM22
Sergunb 0:8f0d870509fe 265 #define WAVE3_REGISTER WGM23
Sergunb 0:8f0d870509fe 266
Sergunb 0:8f0d870509fe 267 // NOTE: On the 328p, these must be the same as the SPINDLE_ENABLE settings.
Sergunb 0:8f0d870509fe 268 #define SPINDLE_PWM_DDR DDRB
Sergunb 0:8f0d870509fe 269 #define SPINDLE_PWM_PORT PORTB
Sergunb 0:8f0d870509fe 270 #define SPINDLE_PWM_BIT 3 // Uno Digital Pin 11
Sergunb 0:8f0d870509fe 271 #endif // End of VARIABLE_SPINDLE
Sergunb 0:8f0d870509fe 272 #define SPINDLE_PWM_MAX_VALUE 255 // Don't change. 328p fast PWM mode fixes top value as 255.
Sergunb 0:8f0d870509fe 273 #ifndef SPINDLE_PWM_MIN_VALUE
Sergunb 0:8f0d870509fe 274 #define SPINDLE_PWM_MIN_VALUE 1 // Must be greater than zero.
Sergunb 0:8f0d870509fe 275 #endif
Sergunb 0:8f0d870509fe 276 #define SPINDLE_PWM_OFF_VALUE 0
Sergunb 0:8f0d870509fe 277 #define SPINDLE_PWM_RANGE (SPINDLE_PWM_MAX_VALUE-SPINDLE_PWM_MIN_VALUE)
Sergunb 0:8f0d870509fe 278
Sergunb 0:8f0d870509fe 279 #define SetSpindleEnablebit() // Set pin to high
Sergunb 0:8f0d870509fe 280 #define ResetSpindleEnablebit() // Set pin to low
Sergunb 0:8f0d870509fe 281 #define SetSpindleDirectionBit()
Sergunb 0:8f0d870509fe 282 #define ResetSpindleDirectionBit()
Sergunb 0:8f0d870509fe 283
Sergunb 0:8f0d870509fe 284 #endif
Sergunb 0:8f0d870509fe 285
Sergunb 0:8f0d870509fe 286 #ifdef CPU_MAP_STM32F103
Sergunb 0:8f0d870509fe 287
Sergunb 0:8f0d870509fe 288 // Define step pulse output pins. NOTE: All step bit pins must be on the same port.
Sergunb 0:8f0d870509fe 289 #define STEP_PORT GPIOA
Sergunb 0:8f0d870509fe 290 #define RCC_STEP_PORT RCC_APB2Periph_GPIOA
Sergunb 0:8f0d870509fe 291 #define X_STEP_BIT 0
Sergunb 0:8f0d870509fe 292 #define Y_STEP_BIT 1
Sergunb 0:8f0d870509fe 293 #define Z_STEP_BIT 2
Sergunb 0:8f0d870509fe 294 #define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits
Sergunb 0:8f0d870509fe 295
Sergunb 0:8f0d870509fe 296 // Define step direction output pins. NOTE: All direction pins must be on the same port.
Sergunb 0:8f0d870509fe 297 #define DIRECTION_PORT GPIOA
Sergunb 0:8f0d870509fe 298 #define RCC_DIRECTION_PORT RCC_APB2Periph_GPIOA
Sergunb 0:8f0d870509fe 299 #define X_DIRECTION_BIT 3
Sergunb 0:8f0d870509fe 300 #define Y_DIRECTION_BIT 4
Sergunb 0:8f0d870509fe 301 #define Z_DIRECTION_BIT 5
Sergunb 0:8f0d870509fe 302 #define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
Sergunb 0:8f0d870509fe 303
Sergunb 0:8f0d870509fe 304 // Define stepper driver enable/disable output pin.
Sergunb 0:8f0d870509fe 305 #define STEPPERS_DISABLE_PORT GPIOA
Sergunb 0:8f0d870509fe 306 #define RCC_STEPPERS_DISABLE_PORT RCC_APB2Periph_GPIOA
Sergunb 0:8f0d870509fe 307 #define STEPPERS_DISABLE_BIT 6
Sergunb 0:8f0d870509fe 308 #define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT)
Sergunb 0:8f0d870509fe 309 #define SetStepperDisableBit() GPIO_SetBits(STEPPERS_DISABLE_PORT,STEPPERS_DISABLE_MASK)
Sergunb 0:8f0d870509fe 310 #define ResetStepperDisableBit() GPIO_ResetBits(STEPPERS_DISABLE_PORT,STEPPERS_DISABLE_MASK)
Sergunb 0:8f0d870509fe 311
Sergunb 0:8f0d870509fe 312
Sergunb 0:8f0d870509fe 313 // Define homing/hard limit switch input pins and limit interrupt vectors.
Sergunb 0:8f0d870509fe 314 // NOTE: All limit bit pins must be on the same port
Sergunb 0:8f0d870509fe 315 #define LIMIT_PIN GPIOB
Sergunb 0:8f0d870509fe 316 #define LIMIT_PORT GPIOB
Sergunb 0:8f0d870509fe 317 #define RCC_LIMIT_PORT RCC_APB2Periph_GPIOB
Sergunb 0:8f0d870509fe 318 #define GPIO_LIMIT_PORT GPIO_PortSourceGPIOB
Sergunb 0:8f0d870509fe 319 #define X_LIMIT_BIT 10
Sergunb 0:8f0d870509fe 320 #define Y_LIMIT_BIT 11
Sergunb 0:8f0d870509fe 321 #define Z_LIMIT_BIT 12
Sergunb 0:8f0d870509fe 322
Sergunb 0:8f0d870509fe 323 #define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
Sergunb 0:8f0d870509fe 324
Sergunb 0:8f0d870509fe 325 // Define spindle enable and spindle direction output pins.
Sergunb 0:8f0d870509fe 326 #define SPINDLE_ENABLE_PORT GPIOB
Sergunb 0:8f0d870509fe 327 #define RCC_SPINDLE_ENABLE_PORT RCC_APB2Periph_GPIOB
Sergunb 0:8f0d870509fe 328 #define SPINDLE_ENABLE_BIT 13 //
Sergunb 0:8f0d870509fe 329 #ifndef USE_SPINDLE_DIR_AS_ENABLE_PIN
Sergunb 0:8f0d870509fe 330 #define SPINDLE_DIRECTION_DDR GPIOB
Sergunb 0:8f0d870509fe 331 #define SPINDLE_DIRECTION_PORT GPIOB
Sergunb 0:8f0d870509fe 332 #define SPINDLE_DIRECTION_BIT 14 //
Sergunb 0:8f0d870509fe 333 #endif
Sergunb 0:8f0d870509fe 334 #define SetSpindleEnablebit() GPIO_WriteBit(SPINDLE_ENABLE_PORT, 1 << SPINDLE_ENABLE_BIT, Bit_SET)
Sergunb 0:8f0d870509fe 335 #define ResetSpindleEnablebit() GPIO_WriteBit(SPINDLE_ENABLE_PORT, 1 << SPINDLE_ENABLE_BIT, Bit_RESET)
Sergunb 0:8f0d870509fe 336 #define SetSpindleDirectionBit() GPIO_WriteBit(SPINDLE_DIRECTION_PORT, 1 << SPINDLE_DIRECTION_BIT,Bit_SET)
Sergunb 0:8f0d870509fe 337 #define ResetSpindleDirectionBit() GPIO_WriteBit(SPINDLE_DIRECTION_PORT, 1 << SPINDLE_DIRECTION_BIT,Bit_RESET)
Sergunb 0:8f0d870509fe 338
Sergunb 0:8f0d870509fe 339
Sergunb 0:8f0d870509fe 340 // Define flood and mist coolant enable output pins.
Sergunb 0:8f0d870509fe 341 // a later date if flash and memory space allows.
Sergunb 0:8f0d870509fe 342 #define COOLANT_FLOOD_PORT GPIOB
Sergunb 0:8f0d870509fe 343 #define RCC_COOLANT_FLOOD_PORT RCC_APB2Periph_GPIOB
Sergunb 0:8f0d870509fe 344 #define COOLANT_FLOOD_BIT 3
Sergunb 0:8f0d870509fe 345 #define COOLANT_MIST_PORT GPIOB
Sergunb 0:8f0d870509fe 346 #define RCC_COOLANT_MIST_PORT RCC_APB2Periph_GPIOB
Sergunb 0:8f0d870509fe 347 #define COOLANT_MIST_BIT 4
Sergunb 0:8f0d870509fe 348
Sergunb 0:8f0d870509fe 349 // Define user-control controls (cycle start, reset, feed hold) input pins.
Sergunb 0:8f0d870509fe 350 // NOTE: All CONTROLs pins must be on the same port and not on a port with other input pins (limits).
Sergunb 0:8f0d870509fe 351 #define CONTROL_PIN_PORT GPIOB
Sergunb 0:8f0d870509fe 352 #define CONTROL_PORT GPIOB
Sergunb 0:8f0d870509fe 353 #define RCC_CONTROL_PORT RCC_APB2Periph_GPIOB
Sergunb 0:8f0d870509fe 354 #define GPIO_CONTROL_PORT GPIO_PortSourceGPIOB
Sergunb 0:8f0d870509fe 355 #define CONTROL_RESET_BIT 5
Sergunb 0:8f0d870509fe 356 #define CONTROL_FEED_HOLD_BIT 6
Sergunb 0:8f0d870509fe 357 #define CONTROL_CYCLE_START_BIT 7
Sergunb 0:8f0d870509fe 358 #define CONTROL_SAFETY_DOOR_BIT 8
Sergunb 0:8f0d870509fe 359 #define CONTROL_MASK ((1<<CONTROL_RESET_BIT)|(1<<CONTROL_FEED_HOLD_BIT)|(1<<CONTROL_CYCLE_START_BIT)|(1<<CONTROL_SAFETY_DOOR_BIT))
Sergunb 0:8f0d870509fe 360
Sergunb 0:8f0d870509fe 361 // Define probe switch input pin.
Sergunb 0:8f0d870509fe 362 #define PROBE_PORT GPIOA
Sergunb 0:8f0d870509fe 363 #define RCC_PROBE_PORT RCC_APB2Periph_GPIOA
Sergunb 0:8f0d870509fe 364 #define PROBE_BIT 15
Sergunb 0:8f0d870509fe 365 #define PROBE_MASK (1<<PROBE_BIT)
Sergunb 0:8f0d870509fe 366
Sergunb 0:8f0d870509fe 367 // Start of PWM & Stepper Enabled Spindle
Sergunb 0:8f0d870509fe 368 #ifdef VARIABLE_SPINDLE
Sergunb 0:8f0d870509fe 369
Sergunb 0:8f0d870509fe 370 // NOTE: On the 328p, these must be the same as the SPINDLE_ENABLE settings.
Sergunb 0:8f0d870509fe 371 #define SPINDLE_PWM_FREQUENCY 10000 // KHz
Sergunb 0:8f0d870509fe 372 #define SPINDLE_PWM_DDR GPIOA
Sergunb 0:8f0d870509fe 373 #define SPINDLE_PWM_PORT GPIOA
Sergunb 0:8f0d870509fe 374 #define RCC_SPINDLE_PWM_PORT RCC_APB2Periph_GPIOA
Sergunb 0:8f0d870509fe 375 #define SPINDLE_PWM_BIT 8
Sergunb 0:8f0d870509fe 376 #endif // End of VARIABLE_SPINDLE
Sergunb 0:8f0d870509fe 377 #define SPINDLE_PWM_MAX_VALUE (1000000 / SPINDLE_PWM_FREQUENCY)
Sergunb 0:8f0d870509fe 378 #ifndef SPINDLE_PWM_MIN_VALUE
Sergunb 0:8f0d870509fe 379 #define SPINDLE_PWM_MIN_VALUE 1 // Must be greater than zero.
Sergunb 0:8f0d870509fe 380 #endif
Sergunb 0:8f0d870509fe 381 #define SPINDLE_PWM_OFF_VALUE 0
Sergunb 0:8f0d870509fe 382 #define SPINDLE_PWM_RANGE (SPINDLE_PWM_MAX_VALUE-SPINDLE_PWM_MIN_VALUE)
Sergunb 0:8f0d870509fe 383
Sergunb 0:8f0d870509fe 384 // Port A Port B
Sergunb 0:8f0d870509fe 385 // 0 X_STEP_BIT
Sergunb 0:8f0d870509fe 386 // 1 Y_STEP_BIT
Sergunb 0:8f0d870509fe 387 // 2 Z_STEP_BIT
Sergunb 0:8f0d870509fe 388 // 3 X_DIRECTION_BIT COOLANT_FLOOD_BIT
Sergunb 0:8f0d870509fe 389 // 4 Y_DIRECTION_BIT COOLANT_MIST_BIT
Sergunb 0:8f0d870509fe 390 // 5 Z_DIRECTION_BIT CONTROL_RESET_BIT
Sergunb 0:8f0d870509fe 391 // 6 STEPPERS_DISABLE_BIT CONTROL_FEED_HOLD_BIT
Sergunb 0:8f0d870509fe 392 // 7 CONTROL_CYCLE_START_BIT
Sergunb 0:8f0d870509fe 393 // 8 SPINDLE_PWM_BIT CONTROL_SAFETY_DOOR_BIT
Sergunb 0:8f0d870509fe 394 // 9
Sergunb 0:8f0d870509fe 395 // 10 X_LIMIT_BIT
Sergunb 0:8f0d870509fe 396 // 11 Y_LIMIT_BIT
Sergunb 0:8f0d870509fe 397 // 12 Z_LIMIT_BIT
Sergunb 0:8f0d870509fe 398 // 13 14 SWD SPINDLE_ENABLE_BIT
Sergunb 0:8f0d870509fe 399 // 14 SPINDLE_DIRECTION_BIT
Sergunb 0:8f0d870509fe 400 // 15 PROBE_BIT
Sergunb 0:8f0d870509fe 401
Sergunb 0:8f0d870509fe 402 #endif
Sergunb 0:8f0d870509fe 403 /*
Sergunb 0:8f0d870509fe 404 #ifdef CPU_MAP_CUSTOM_PROC
Sergunb 0:8f0d870509fe 405 // For a custom pin map or different processor, copy and edit one of the available cpu
Sergunb 0:8f0d870509fe 406 // map files and modify it to your needs. Make sure the defined name is also changed in
Sergunb 0:8f0d870509fe 407 // the config.h file.
Sergunb 0:8f0d870509fe 408 #endif
Sergunb 0:8f0d870509fe 409 */
Sergunb 0:8f0d870509fe 410
Sergunb 0:8f0d870509fe 411 #endif