Compare commits
21 Commits
52087db5c1
...
7a96b06a6f
Author | SHA1 | Date | |
---|---|---|---|
7a96b06a6f | |||
a6865b9233 | |||
281a576ff7 | |||
09c3ddad95 | |||
6af009537b | |||
fed8104ce5 | |||
993d4e3527 | |||
ee75f64085 | |||
ad91ef8e1b | |||
0a1ec65583 | |||
69e35e913d | |||
f629552fb1 | |||
c51f7e094c | |||
3f65d4bfb6 | |||
bf05e1f393 | |||
fc5045d361 | |||
f1e03c2e1c | |||
53997c0f44 | |||
56ff450de2 | |||
841b8abbed | |||
cac4d1f941 |
4
.github/workflows/bump-date.yml
vendored
4
.github/workflows/bump-date.yml
vendored
@ -7,7 +7,7 @@ name: Bump Distribution Date
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 */6 * * *'
|
- cron: '0 0 * * *'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
bump_date:
|
bump_date:
|
||||||
@ -26,7 +26,6 @@ jobs:
|
|||||||
- name: Bump Distribution Date
|
- name: Bump Distribution Date
|
||||||
run: |
|
run: |
|
||||||
# Inline Bump Script
|
# Inline Bump Script
|
||||||
if [[ ! "$( git log -1 --pretty=%B )" =~ ^\[cron\] ]]; then
|
|
||||||
DIST=$( date +"%Y-%m-%d" )
|
DIST=$( date +"%Y-%m-%d" )
|
||||||
eval "sed -E -i 's/(#define +STRING_DISTRIBUTION_DATE) .*$/\1 \"$DIST\"/g' Marlin/src/inc/Version.h" && \
|
eval "sed -E -i 's/(#define +STRING_DISTRIBUTION_DATE) .*$/\1 \"$DIST\"/g' Marlin/src/inc/Version.h" && \
|
||||||
eval "sed -E -i 's/(#define +STRING_DISTRIBUTION_DATE) .*$/\1 \"$DIST\"/g' Marlin/Version.h" && \
|
eval "sed -E -i 's/(#define +STRING_DISTRIBUTION_DATE) .*$/\1 \"$DIST\"/g' Marlin/Version.h" && \
|
||||||
@ -35,4 +34,3 @@ jobs:
|
|||||||
git add . && \
|
git add . && \
|
||||||
git commit -m "[cron] Bump distribution date ($DIST)" && \
|
git commit -m "[cron] Bump distribution date ($DIST)" && \
|
||||||
git push
|
git push
|
||||||
fi
|
|
||||||
|
3
.github/workflows/check-pr.yml
vendored
3
.github/workflows/check-pr.yml
vendored
@ -6,8 +6,7 @@
|
|||||||
name: PR Bad Target
|
name: PR Bad Target
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request_target:
|
pull_request:
|
||||||
types: [opened]
|
|
||||||
branches:
|
branches:
|
||||||
- 1.0.x
|
- 1.0.x
|
||||||
- 1.1.x
|
- 1.1.x
|
||||||
|
1
.github/workflows/test-builds.yml
vendored
1
.github/workflows/test-builds.yml
vendored
@ -97,7 +97,6 @@ jobs:
|
|||||||
- REMRAM_V1
|
- REMRAM_V1
|
||||||
- BTT_SKR_SE_BX
|
- BTT_SKR_SE_BX
|
||||||
- chitu_f103
|
- chitu_f103
|
||||||
- Index_Mobo_Rev03
|
|
||||||
|
|
||||||
# Put lengthy tests last
|
# Put lengthy tests last
|
||||||
|
|
||||||
|
20
.gitignore
vendored
20
.gitignore
vendored
@ -22,16 +22,12 @@
|
|||||||
# Generated files
|
# Generated files
|
||||||
_Version.h
|
_Version.h
|
||||||
bdf2u8g
|
bdf2u8g
|
||||||
marlin_config.json
|
|
||||||
mczip.h
|
|
||||||
*.gen
|
|
||||||
*.sublime-workspace
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# OS
|
# OS
|
||||||
#
|
#
|
||||||
applet/
|
applet/
|
||||||
.DS_Store
|
*.DS_Store
|
||||||
|
|
||||||
#
|
#
|
||||||
# Misc
|
# Misc
|
||||||
@ -41,6 +37,7 @@ applet/
|
|||||||
*.rej
|
*.rej
|
||||||
*.bak
|
*.bak
|
||||||
*.idea
|
*.idea
|
||||||
|
*.s
|
||||||
*.i
|
*.i
|
||||||
*.ii
|
*.ii
|
||||||
*.swp
|
*.swp
|
||||||
@ -140,19 +137,20 @@ __vm/
|
|||||||
vc-fileutils.settings
|
vc-fileutils.settings
|
||||||
|
|
||||||
# Visual Studio Code
|
# Visual Studio Code
|
||||||
.vscode/*
|
.vscode
|
||||||
!.vscode/extensions.json
|
.vscode/.browse.c_cpp.db*
|
||||||
|
.vscode/c_cpp_properties.json
|
||||||
|
.vscode/launch.json
|
||||||
|
.vscode/*.db
|
||||||
|
|
||||||
#Simulation
|
#Simulation
|
||||||
imgui.ini
|
imgui.ini
|
||||||
eeprom.dat
|
eeprom.dat
|
||||||
spi_flash.bin
|
|
||||||
|
|
||||||
#cmake
|
#cmake
|
||||||
CMakeLists.txt
|
CMakeLists.txt
|
||||||
src/CMakeLists.txt
|
src/CMakeLists.txt
|
||||||
CMakeListsPrivate.txt
|
CMakeListsPrivate.txt
|
||||||
build/
|
|
||||||
|
|
||||||
# CLion
|
# CLion
|
||||||
cmake-build-*
|
cmake-build-*
|
||||||
@ -169,3 +167,7 @@ __pycache__
|
|||||||
|
|
||||||
# IOLogger logs
|
# IOLogger logs
|
||||||
*_log.csv
|
*_log.csv
|
||||||
|
|
||||||
|
# Simulation / Native
|
||||||
|
eeprom.dat
|
||||||
|
imgui.ini
|
||||||
|
8
.vscode/extensions.json
vendored
8
.vscode/extensions.json
vendored
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
|
||||||
// for the documentation about the extensions.json format
|
|
||||||
"recommendations": [
|
|
||||||
"marlinfirmware.auto-build",
|
|
||||||
"platformio.platformio-ide"
|
|
||||||
]
|
|
||||||
}
|
|
@ -35,7 +35,7 @@
|
|||||||
*
|
*
|
||||||
* Advanced settings can be found in Configuration_adv.h
|
* Advanced settings can be found in Configuration_adv.h
|
||||||
*/
|
*/
|
||||||
#define CONFIGURATION_H_VERSION 02000903
|
#define CONFIGURATION_H_VERSION 02000901
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//============================= Getting Started =============================
|
//============================= Getting Started =============================
|
||||||
@ -94,11 +94,6 @@
|
|||||||
|
|
||||||
// @section machine
|
// @section machine
|
||||||
|
|
||||||
// Choose the name from boards.h that matches your setup
|
|
||||||
#ifndef MOTHERBOARD
|
|
||||||
#define MOTHERBOARD BOARD_RAMPS_14_EFB
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Select the serial port on the board to use for communication with the host.
|
* Select the serial port on the board to use for communication with the host.
|
||||||
* This allows the connection of wireless adapters (for instance) to non-default port pins.
|
* This allows the connection of wireless adapters (for instance) to non-default port pins.
|
||||||
@ -265,6 +260,7 @@
|
|||||||
|
|
||||||
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
|
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
|
||||||
#define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
|
#define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
|
||||||
|
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
|
||||||
|
|
||||||
#if ENABLED(PARKING_EXTRUDER)
|
#if ENABLED(PARKING_EXTRUDER)
|
||||||
|
|
||||||
@ -346,7 +342,6 @@
|
|||||||
#define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
|
#define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
|
||||||
//#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
|
//#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
|
||||||
//#define GRADIENT_MIX // Support for gradient mixing with M166 and LCD
|
//#define GRADIENT_MIX // Support for gradient mixing with M166 and LCD
|
||||||
//#define MIXING_PRESETS // Assign 8 default V-tool presets for 2 or 3 MIXING_STEPPERS
|
|
||||||
#if ENABLED(GRADIENT_MIX)
|
#if ENABLED(GRADIENT_MIX)
|
||||||
//#define GRADIENT_VTOOL // Add M166 T to use a V-tool index as a Gradient alias
|
//#define GRADIENT_VTOOL // Add M166 T to use a V-tool index as a Gradient alias
|
||||||
#endif
|
#endif
|
||||||
@ -371,9 +366,6 @@
|
|||||||
//#define PSU_NAME "Power Supply"
|
//#define PSU_NAME "Power Supply"
|
||||||
|
|
||||||
#if ENABLED(PSU_CONTROL)
|
#if ENABLED(PSU_CONTROL)
|
||||||
//#define MKS_PWC // Using the MKS PWC add-on
|
|
||||||
//#define PS_OFF_CONFIRM // Confirm dialog when power off
|
|
||||||
//#define PS_OFF_SOUND // Beep 1s when power off
|
|
||||||
#define PSU_ACTIVE_STATE LOW // Set 'LOW' for ATX, 'HIGH' for X-Box
|
#define PSU_ACTIVE_STATE LOW // Set 'LOW' for ATX, 'HIGH' for X-Box
|
||||||
|
|
||||||
//#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80
|
//#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80
|
||||||
@ -457,7 +449,6 @@
|
|||||||
* 67 : 500kΩ SliceEngineering 450°C Thermistor
|
* 67 : 500kΩ SliceEngineering 450°C Thermistor
|
||||||
* 70 : 100kΩ bq Hephestos 2
|
* 70 : 100kΩ bq Hephestos 2
|
||||||
* 75 : 100kΩ Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32
|
* 75 : 100kΩ Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32
|
||||||
* 2000 : 100kΩ Ultimachine Rambo TDK NTCG104LH104KT1 NTC100K motherboard Thermistor
|
|
||||||
*
|
*
|
||||||
* Analog Thermistors - 1kΩ pullup - Atypical, and requires changing out the 4.7kΩ pullup for 1kΩ.
|
* Analog Thermistors - 1kΩ pullup - Atypical, and requires changing out the 4.7kΩ pullup for 1kΩ.
|
||||||
* ------- (but gives greater accuracy and more stable PID)
|
* ------- (but gives greater accuracy and more stable PID)
|
||||||
@ -481,7 +472,7 @@
|
|||||||
* NOTE: ADC pins are not 5V tolerant. Not recommended because it's possible to damage the CPU by going over 500°C.
|
* NOTE: ADC pins are not 5V tolerant. Not recommended because it's possible to damage the CPU by going over 500°C.
|
||||||
* 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
|
* 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
|
||||||
*
|
*
|
||||||
* Custom/Dummy/Other Thermal Sensors
|
* Custom/Dummy/Other Thermos
|
||||||
* ------
|
* ------
|
||||||
* 0 : not used
|
* 0 : not used
|
||||||
* 1000 : Custom - Specify parameters in Configuration_adv.h
|
* 1000 : Custom - Specify parameters in Configuration_adv.h
|
||||||
@ -503,7 +494,6 @@
|
|||||||
#define TEMP_SENSOR_PROBE 0
|
#define TEMP_SENSOR_PROBE 0
|
||||||
#define TEMP_SENSOR_CHAMBER 0
|
#define TEMP_SENSOR_CHAMBER 0
|
||||||
#define TEMP_SENSOR_COOLER 0
|
#define TEMP_SENSOR_COOLER 0
|
||||||
#define TEMP_SENSOR_BOARD 0
|
|
||||||
#define TEMP_SENSOR_REDUNDANT 0
|
#define TEMP_SENSOR_REDUNDANT 0
|
||||||
|
|
||||||
// Dummy thermistor constant temperature readings, for use with 998 and 999
|
// Dummy thermistor constant temperature readings, for use with 998 and 999
|
||||||
@ -536,11 +526,17 @@
|
|||||||
* the print will be aborted. Whichever sensor is selected will have its normal functions disabled; i.e. selecting
|
* the print will be aborted. Whichever sensor is selected will have its normal functions disabled; i.e. selecting
|
||||||
* the Bed sensor (-1) will disable bed heating/monitoring.
|
* the Bed sensor (-1) will disable bed heating/monitoring.
|
||||||
*
|
*
|
||||||
* For selecting source/target use: COOLER, PROBE, BOARD, CHAMBER, BED, E0, E1, E2, E3, E4, E5, E6, E7
|
* Use the following to select temp sensors:
|
||||||
|
* -5 : Cooler
|
||||||
|
* -4 : Probe
|
||||||
|
* -3 : not used
|
||||||
|
* -2 : Chamber
|
||||||
|
* -1 : Bed
|
||||||
|
* 0-7 : E0 through E7
|
||||||
*/
|
*/
|
||||||
#if TEMP_SENSOR_REDUNDANT
|
#if TEMP_SENSOR_REDUNDANT
|
||||||
#define TEMP_SENSOR_REDUNDANT_SOURCE E1 // The sensor that will provide the redundant reading.
|
#define TEMP_SENSOR_REDUNDANT_SOURCE 1 // The sensor that will provide the redundant reading.
|
||||||
#define TEMP_SENSOR_REDUNDANT_TARGET E0 // The sensor that we are providing a redundant reading for.
|
#define TEMP_SENSOR_REDUNDANT_TARGET 0 // The sensor that we are providing a redundant reading for.
|
||||||
#define TEMP_SENSOR_REDUNDANT_MAX_DIFF 10 // (°C) Temperature difference that will trigger a print abort.
|
#define TEMP_SENSOR_REDUNDANT_MAX_DIFF 10 // (°C) Temperature difference that will trigger a print abort.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -599,8 +595,8 @@
|
|||||||
// Set/get with gcode: M301 E[extruder number, 0-2]
|
// Set/get with gcode: M301 E[extruder number, 0-2]
|
||||||
|
|
||||||
#if ENABLED(PID_PARAMS_PER_HOTEND)
|
#if ENABLED(PID_PARAMS_PER_HOTEND)
|
||||||
// Specify up to one value per hotend here, according to your setup.
|
// Specify between 1 and HOTENDS values per array.
|
||||||
// If there are fewer values, the last one applies to the remaining hotends.
|
// If fewer than EXTRUDER values are provided, the last element will be repeated.
|
||||||
#define DEFAULT_Kp_LIST { 22.20, 22.20 }
|
#define DEFAULT_Kp_LIST { 22.20, 22.20 }
|
||||||
#define DEFAULT_Ki_LIST { 1.08, 1.08 }
|
#define DEFAULT_Ki_LIST { 1.08, 1.08 }
|
||||||
#define DEFAULT_Kd_LIST { 114.00, 114.00 }
|
#define DEFAULT_Kd_LIST { 114.00, 114.00 }
|
||||||
@ -761,17 +757,6 @@
|
|||||||
//#define COREZX
|
//#define COREZX
|
||||||
//#define COREZY
|
//#define COREZY
|
||||||
//#define MARKFORGED_XY // MarkForged. See https://reprap.org/forum/read.php?152,504042
|
//#define MARKFORGED_XY // MarkForged. See https://reprap.org/forum/read.php?152,504042
|
||||||
//#define MARKFORGED_YX
|
|
||||||
|
|
||||||
// Enable for a belt style printer with endless "Z" motion
|
|
||||||
//#define BELTPRINTER
|
|
||||||
|
|
||||||
// Enable for Polargraph Kinematics
|
|
||||||
//#define POLARGRAPH
|
|
||||||
#if ENABLED(POLARGRAPH)
|
|
||||||
#define POLARGRAPH_MAX_BELT_LEN 1035.0
|
|
||||||
#define POLAR_SEGMENTS_PER_SECOND 5
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//============================== Endstop Settings ===========================
|
//============================== Endstop Settings ===========================
|
||||||
@ -799,18 +784,18 @@
|
|||||||
#define ENDSTOPPULLUPS
|
#define ENDSTOPPULLUPS
|
||||||
#if DISABLED(ENDSTOPPULLUPS)
|
#if DISABLED(ENDSTOPPULLUPS)
|
||||||
// Disable ENDSTOPPULLUPS to set pullups individually
|
// Disable ENDSTOPPULLUPS to set pullups individually
|
||||||
//#define ENDSTOPPULLUP_XMIN
|
|
||||||
//#define ENDSTOPPULLUP_YMIN
|
|
||||||
//#define ENDSTOPPULLUP_ZMIN
|
|
||||||
//#define ENDSTOPPULLUP_IMIN
|
|
||||||
//#define ENDSTOPPULLUP_JMIN
|
|
||||||
//#define ENDSTOPPULLUP_KMIN
|
|
||||||
//#define ENDSTOPPULLUP_XMAX
|
//#define ENDSTOPPULLUP_XMAX
|
||||||
//#define ENDSTOPPULLUP_YMAX
|
//#define ENDSTOPPULLUP_YMAX
|
||||||
//#define ENDSTOPPULLUP_ZMAX
|
//#define ENDSTOPPULLUP_ZMAX
|
||||||
//#define ENDSTOPPULLUP_IMAX
|
//#define ENDSTOPPULLUP_IMAX
|
||||||
//#define ENDSTOPPULLUP_JMAX
|
//#define ENDSTOPPULLUP_JMAX
|
||||||
//#define ENDSTOPPULLUP_KMAX
|
//#define ENDSTOPPULLUP_KMAX
|
||||||
|
//#define ENDSTOPPULLUP_XMIN
|
||||||
|
//#define ENDSTOPPULLUP_YMIN
|
||||||
|
//#define ENDSTOPPULLUP_ZMIN
|
||||||
|
//#define ENDSTOPPULLUP_IMIN
|
||||||
|
//#define ENDSTOPPULLUP_JMIN
|
||||||
|
//#define ENDSTOPPULLUP_KMIN
|
||||||
//#define ENDSTOPPULLUP_ZMIN_PROBE
|
//#define ENDSTOPPULLUP_ZMIN_PROBE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -818,18 +803,18 @@
|
|||||||
//#define ENDSTOPPULLDOWNS
|
//#define ENDSTOPPULLDOWNS
|
||||||
#if DISABLED(ENDSTOPPULLDOWNS)
|
#if DISABLED(ENDSTOPPULLDOWNS)
|
||||||
// Disable ENDSTOPPULLDOWNS to set pulldowns individually
|
// Disable ENDSTOPPULLDOWNS to set pulldowns individually
|
||||||
//#define ENDSTOPPULLDOWN_XMIN
|
|
||||||
//#define ENDSTOPPULLDOWN_YMIN
|
|
||||||
//#define ENDSTOPPULLDOWN_ZMIN
|
|
||||||
//#define ENDSTOPPULLDOWN_IMIN
|
|
||||||
//#define ENDSTOPPULLDOWN_JMIN
|
|
||||||
//#define ENDSTOPPULLDOWN_KMIN
|
|
||||||
//#define ENDSTOPPULLDOWN_XMAX
|
//#define ENDSTOPPULLDOWN_XMAX
|
||||||
//#define ENDSTOPPULLDOWN_YMAX
|
//#define ENDSTOPPULLDOWN_YMAX
|
||||||
//#define ENDSTOPPULLDOWN_ZMAX
|
//#define ENDSTOPPULLDOWN_ZMAX
|
||||||
//#define ENDSTOPPULLDOWN_IMAX
|
//#define ENDSTOPPULLDOWN_IMAX
|
||||||
//#define ENDSTOPPULLDOWN_JMAX
|
//#define ENDSTOPPULLDOWN_JMAX
|
||||||
//#define ENDSTOPPULLDOWN_KMAX
|
//#define ENDSTOPPULLDOWN_KMAX
|
||||||
|
//#define ENDSTOPPULLDOWN_XMIN
|
||||||
|
//#define ENDSTOPPULLDOWN_YMIN
|
||||||
|
//#define ENDSTOPPULLDOWN_ZMIN
|
||||||
|
//#define ENDSTOPPULLDOWN_IMIN
|
||||||
|
//#define ENDSTOPPULLDOWN_JMIN
|
||||||
|
//#define ENDSTOPPULLDOWN_KMIN
|
||||||
//#define ENDSTOPPULLDOWN_ZMIN_PROBE
|
//#define ENDSTOPPULLDOWN_ZMIN_PROBE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -932,7 +917,7 @@
|
|||||||
* Override with M92
|
* Override with M92
|
||||||
* X, Y, Z [, I [, J [, K]]], E0 [, E1[, E2...]]
|
* X, Y, Z [, I [, J [, K]]], E0 [, E1[, E2...]]
|
||||||
*/
|
*/
|
||||||
#define DEFAULT_AXIS_STEPS_PER_UNIT { 79, 79, 400, 415 }
|
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 500 }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Max Feed Rate (mm/s)
|
* Default Max Feed Rate (mm/s)
|
||||||
@ -1126,7 +1111,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Duet Smart Effector (for delta printers) - https://bit.ly/2ul5U7J
|
// Duet Smart Effector (for delta printers) - https://bit.ly/2ul5U7J
|
||||||
// When the pin is defined you can use M672 to set/reset the probe sensitivity.
|
// When the pin is defined you can use M672 to set/reset the probe sensivity.
|
||||||
//#define DUET_SMART_EFFECTOR
|
//#define DUET_SMART_EFFECTOR
|
||||||
#if ENABLED(DUET_SMART_EFFECTOR)
|
#if ENABLED(DUET_SMART_EFFECTOR)
|
||||||
#define SMART_EFFECTOR_MOD_PIN -1 // Connect a GPIO pin to the Smart Effector MOD pin
|
#define SMART_EFFECTOR_MOD_PIN -1 // Connect a GPIO pin to the Smart Effector MOD pin
|
||||||
@ -1184,7 +1169,7 @@
|
|||||||
* | [-] |
|
* | [-] |
|
||||||
* O-- FRONT --+
|
* O-- FRONT --+
|
||||||
*/
|
*/
|
||||||
#define NOZZLE_TO_PROBE_OFFSET { -20, 14, -1.475 }
|
#define NOZZLE_TO_PROBE_OFFSET { -20, 13, -1.49 }
|
||||||
|
|
||||||
// Most probes should stay away from the edges of the bed, but
|
// Most probes should stay away from the edges of the bed, but
|
||||||
// with NOZZLE_AS_PROBE this can be negative for a wider probing area.
|
// with NOZZLE_AS_PROBE this can be negative for a wider probing area.
|
||||||
@ -1226,15 +1211,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* Probe Enable / Disable
|
|
||||||
* The probe only provides a triggered signal when enabled.
|
|
||||||
*/
|
|
||||||
//#define PROBE_ENABLE_DISABLE
|
|
||||||
#if ENABLED(PROBE_ENABLE_DISABLE)
|
|
||||||
//#define PROBE_ENABLE_PIN -1 // Override the default pin here
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Multiple Probing
|
* Multiple Probing
|
||||||
*
|
*
|
||||||
@ -1388,7 +1364,7 @@
|
|||||||
|
|
||||||
// Travel limits (mm) after homing, corresponding to endstop positions.
|
// Travel limits (mm) after homing, corresponding to endstop positions.
|
||||||
#define X_MIN_POS -7
|
#define X_MIN_POS -7
|
||||||
#define Y_MIN_POS -17
|
#define Y_MIN_POS -2
|
||||||
#define Z_MIN_POS 0
|
#define Z_MIN_POS 0
|
||||||
#define X_MAX_POS X_BED_SIZE
|
#define X_MAX_POS X_BED_SIZE
|
||||||
#define Y_MAX_POS Y_BED_SIZE
|
#define Y_MAX_POS Y_BED_SIZE
|
||||||
@ -1647,13 +1623,13 @@
|
|||||||
//========================= Unified Bed Leveling ============================
|
//========================= Unified Bed Leveling ============================
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
#define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh
|
//#define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh
|
||||||
|
|
||||||
#define MESH_INSET 1 // Set Mesh bounds as an inset region of the bed
|
#define MESH_INSET 1 // Set Mesh bounds as an inset region of the bed
|
||||||
#define GRID_MAX_POINTS_X 15 // Don't use more than 15 points per axis, implementation limited.
|
#define GRID_MAX_POINTS_X 10 // Don't use more than 15 points per axis, implementation limited.
|
||||||
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
|
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
|
||||||
|
|
||||||
#define UBL_HILBERT_CURVE // Use Hilbert distribution for less travel when probing multiple points
|
//#define UBL_HILBERT_CURVE // Use Hilbert distribution for less travel when probing multiple points
|
||||||
|
|
||||||
#define UBL_MESH_EDIT_MOVES_Z // Sophisticated users prefer no movement of nozzle
|
#define UBL_MESH_EDIT_MOVES_Z // Sophisticated users prefer no movement of nozzle
|
||||||
#define UBL_SAVE_ACTIVE_ON_M500 // Save the currently active mesh in the current slot on M500
|
#define UBL_SAVE_ACTIVE_ON_M500 // Save the currently active mesh in the current slot on M500
|
||||||
@ -1842,7 +1818,6 @@
|
|||||||
#define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load
|
#define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load
|
||||||
#if ENABLED(EEPROM_SETTINGS)
|
#if ENABLED(EEPROM_SETTINGS)
|
||||||
//#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.
|
//#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.
|
||||||
//#define EEPROM_INIT_NOW // Init EEPROM on first boot after a new build.
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -2066,10 +2041,10 @@
|
|||||||
*
|
*
|
||||||
* Select the language to display on the LCD. These languages are available:
|
* Select the language to display on the LCD. These languages are available:
|
||||||
*
|
*
|
||||||
* en, an, bg, ca, cz, da, de, el, el_CY, es, eu, fi, fr, gl, hr, hu, it,
|
* en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, hu, it,
|
||||||
* jp_kana, ko_KR, nl, pl, pt, pt_br, ro, ru, sk, sv, tr, uk, vi, zh_CN, zh_TW
|
* jp_kana, ko_KR, nl, pl, pt, pt_br, ro, ru, sk, sv, tr, uk, vi, zh_CN, zh_TW
|
||||||
*
|
*
|
||||||
* :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek (Greece)', 'el_CY':'Greek (Cyprus)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'hu':'Hungarian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ro':'Romanian', 'ru':'Russian', 'sk':'Slovak', 'sv':'Swedish', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)' }
|
* :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'hu':'Hungarian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ro':'Romanian', 'ru':'Russian', 'sk':'Slovak', 'sv':'Swedish', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)' }
|
||||||
*/
|
*/
|
||||||
#define LCD_LANGUAGE en
|
#define LCD_LANGUAGE en
|
||||||
|
|
||||||
@ -2181,7 +2156,6 @@
|
|||||||
// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
|
// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
|
||||||
//
|
//
|
||||||
//#define INDIVIDUAL_AXIS_HOMING_MENU
|
//#define INDIVIDUAL_AXIS_HOMING_MENU
|
||||||
//#define INDIVIDUAL_AXIS_HOMING_SUBMENU
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// SPEAKER/BUZZER
|
// SPEAKER/BUZZER
|
||||||
@ -2391,11 +2365,6 @@
|
|||||||
//#define VIKI2
|
//#define VIKI2
|
||||||
//#define miniVIKI
|
//#define miniVIKI
|
||||||
|
|
||||||
//
|
|
||||||
// Alfawise Ex8 printer LCD marked as WYH L12864 COG
|
|
||||||
//
|
|
||||||
//#define WYH_L12864
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// MakerLab Mini Panel with graphic
|
// MakerLab Mini Panel with graphic
|
||||||
// controller and SD support - https://reprap.org/wiki/Mini_panel
|
// controller and SD support - https://reprap.org/wiki/Mini_panel
|
||||||
@ -2465,11 +2434,6 @@
|
|||||||
//#define FYSETC_MINI_12864_2_1 // Type A/B. NeoPixel RGB Backlight
|
//#define FYSETC_MINI_12864_2_1 // Type A/B. NeoPixel RGB Backlight
|
||||||
//#define FYSETC_GENERIC_12864_1_1 // Larger display with basic ON/OFF backlight.
|
//#define FYSETC_GENERIC_12864_1_1 // Larger display with basic ON/OFF backlight.
|
||||||
|
|
||||||
//
|
|
||||||
// BigTreeTech Mini 12864 V1.0 is an alias for FYSETC_MINI_12864_2_1. Type A/B. NeoPixel RGB Backlight.
|
|
||||||
//
|
|
||||||
//#define BTT_MINI_12864_V1
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Factory display for Creality CR-10
|
// Factory display for Creality CR-10
|
||||||
// https://www.aliexpress.com/item/32833148327.html
|
// https://www.aliexpress.com/item/32833148327.html
|
||||||
@ -2573,39 +2537,12 @@
|
|||||||
// DGUS Touch Display with DWIN OS. (Choose one.)
|
// DGUS Touch Display with DWIN OS. (Choose one.)
|
||||||
// ORIGIN : https://www.aliexpress.com/item/32993409517.html
|
// ORIGIN : https://www.aliexpress.com/item/32993409517.html
|
||||||
// FYSETC : https://www.aliexpress.com/item/32961471929.html
|
// FYSETC : https://www.aliexpress.com/item/32961471929.html
|
||||||
// MKS : https://www.aliexpress.com/item/1005002008179262.html
|
|
||||||
//
|
|
||||||
// Flash display with DGUS Displays for Marlin:
|
|
||||||
// - Format the SD card to FAT32 with an allocation size of 4kb.
|
|
||||||
// - Download files as specified for your type of display.
|
|
||||||
// - Plug the microSD card into the back of the display.
|
|
||||||
// - Boot the display and wait for the update to complete.
|
|
||||||
//
|
|
||||||
// ORIGIN (Marlin DWIN_SET)
|
|
||||||
// - Download https://github.com/coldtobi/Marlin_DGUS_Resources
|
|
||||||
// - Copy the downloaded DWIN_SET folder to the SD card.
|
|
||||||
//
|
|
||||||
// FYSETC (Supplier default)
|
|
||||||
// - Download https://github.com/FYSETC/FYSTLCD-2.0
|
|
||||||
// - Copy the downloaded SCREEN folder to the SD card.
|
|
||||||
//
|
|
||||||
// HIPRECY (Supplier default)
|
|
||||||
// - Download https://github.com/HiPrecy/Touch-Lcd-LEO
|
|
||||||
// - Copy the downloaded DWIN_SET folder to the SD card.
|
|
||||||
//
|
|
||||||
// MKS (MKS-H43) (Supplier default)
|
|
||||||
// - Download https://github.com/makerbase-mks/MKS-H43
|
|
||||||
// - Copy the downloaded DWIN_SET folder to the SD card.
|
|
||||||
//
|
|
||||||
// RELOADED (T5UID1)
|
|
||||||
// - Download https://github.com/Desuuuu/DGUS-reloaded/releases
|
|
||||||
// - Copy the downloaded DWIN_SET folder to the SD card.
|
|
||||||
//
|
//
|
||||||
//#define DGUS_LCD_UI_ORIGIN
|
//#define DGUS_LCD_UI_ORIGIN
|
||||||
//#define DGUS_LCD_UI_FYSETC
|
//#define DGUS_LCD_UI_FYSETC
|
||||||
//#define DGUS_LCD_UI_HIPRECY
|
//#define DGUS_LCD_UI_HIPRECY
|
||||||
|
|
||||||
//#define DGUS_LCD_UI_MKS
|
//#define DGUS_LCD_UI_MKS
|
||||||
//#define DGUS_LCD_UI_RELOADED
|
|
||||||
#if ENABLED(DGUS_LCD_UI_MKS)
|
#if ENABLED(DGUS_LCD_UI_MKS)
|
||||||
#define USE_MKS_GREEN_UI
|
#define USE_MKS_GREEN_UI
|
||||||
#endif
|
#endif
|
||||||
@ -2662,32 +2599,32 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//
|
//
|
||||||
// 480x320, 3.5", SPI Display with Rotary Encoder from MKS
|
// 480x320, 3.5", SPI Display From MKS
|
||||||
// Usually paired with MKS Robin Nano V2 & V3
|
// Normally used in MKS Robin Nano V2
|
||||||
//
|
//
|
||||||
//#define MKS_TS35_V2_0
|
//#define MKS_TS35_V2_0
|
||||||
|
|
||||||
//
|
//
|
||||||
// 320x240, 2.4", FSMC Display From MKS
|
// 320x240, 2.4", FSMC Display From MKS
|
||||||
// Usually paired with MKS Robin Nano V1.2
|
// Normally used in MKS Robin Nano V1.2
|
||||||
//
|
//
|
||||||
//#define MKS_ROBIN_TFT24
|
//#define MKS_ROBIN_TFT24
|
||||||
|
|
||||||
//
|
//
|
||||||
// 320x240, 2.8", FSMC Display From MKS
|
// 320x240, 2.8", FSMC Display From MKS
|
||||||
// Usually paired with MKS Robin Nano V1.2
|
// Normally used in MKS Robin Nano V1.2
|
||||||
//
|
//
|
||||||
//#define MKS_ROBIN_TFT28
|
//#define MKS_ROBIN_TFT28
|
||||||
|
|
||||||
//
|
//
|
||||||
// 320x240, 3.2", FSMC Display From MKS
|
// 320x240, 3.2", FSMC Display From MKS
|
||||||
// Usually paired with MKS Robin Nano V1.2
|
// Normally used in MKS Robin Nano V1.2
|
||||||
//
|
//
|
||||||
//#define MKS_ROBIN_TFT32
|
//#define MKS_ROBIN_TFT32
|
||||||
|
|
||||||
//
|
//
|
||||||
// 480x320, 3.5", FSMC Display From MKS
|
// 480x320, 3.5", FSMC Display From MKS
|
||||||
// Usually paired with MKS Robin Nano V1.2
|
// Normally used in MKS Robin Nano V1.2
|
||||||
//
|
//
|
||||||
//#define MKS_ROBIN_TFT35
|
//#define MKS_ROBIN_TFT35
|
||||||
|
|
||||||
@ -2698,7 +2635,7 @@
|
|||||||
|
|
||||||
//
|
//
|
||||||
// 320x240, 3.2", FSMC Display From MKS
|
// 320x240, 3.2", FSMC Display From MKS
|
||||||
// Usually paired with MKS Robin
|
// Normally used in MKS Robin
|
||||||
//
|
//
|
||||||
//#define MKS_ROBIN_TFT_V1_1R
|
//#define MKS_ROBIN_TFT_V1_1R
|
||||||
|
|
||||||
@ -2728,15 +2665,10 @@
|
|||||||
//#define ANET_ET5_TFT35
|
//#define ANET_ET5_TFT35
|
||||||
|
|
||||||
//
|
//
|
||||||
// 1024x600, 7", RGB Stock Display with Rotary Encoder from BIQU-BX
|
// 1024x600, 7", RGB Stock Display from BIQU-BX
|
||||||
//
|
//
|
||||||
//#define BIQU_BX_TFT70
|
//#define BIQU_BX_TFT70
|
||||||
|
|
||||||
//
|
|
||||||
// 480x320, 3.5", SPI Stock Display with Rotary Encoder from BIQU B1 SE Series
|
|
||||||
//
|
|
||||||
//#define BTT_TFT35_SPI_V1_0
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Generic TFT with detailed options
|
// Generic TFT with detailed options
|
||||||
//
|
//
|
||||||
@ -2753,7 +2685,6 @@
|
|||||||
//#define TFT_RES_320x240
|
//#define TFT_RES_320x240
|
||||||
//#define TFT_RES_480x272
|
//#define TFT_RES_480x272
|
||||||
//#define TFT_RES_480x320
|
//#define TFT_RES_480x320
|
||||||
//#define TFT_RES_1024x600
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2791,11 +2722,7 @@
|
|||||||
//
|
//
|
||||||
// Ender-3 v2 OEM display. A DWIN display with Rotary Encoder.
|
// Ender-3 v2 OEM display. A DWIN display with Rotary Encoder.
|
||||||
//
|
//
|
||||||
//#define DWIN_CREALITY_LCD // Creality UI
|
//#define DWIN_CREALITY_LCD
|
||||||
//#define DWIN_CREALITY_LCD_ENHANCED // Enhanced UI
|
|
||||||
//#define DWIN_CREALITY_LCD_JYERSUI // Jyers UI by Jacob Myers
|
|
||||||
//#define DWIN_MARLINUI_PORTRAIT // MarlinUI (portrait orientation)
|
|
||||||
//#define DWIN_MARLINUI_LANDSCAPE // MarlinUI (landscape orientation)
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Touch Screen Settings
|
// Touch Screen Settings
|
||||||
@ -2805,8 +2732,6 @@
|
|||||||
#define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens
|
#define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens
|
||||||
#define BUTTON_DELAY_MENU 250 // (ms) Button repeat delay for menus
|
#define BUTTON_DELAY_MENU 250 // (ms) Button repeat delay for menus
|
||||||
|
|
||||||
//#define TOUCH_IDLE_SLEEP 300 // (secs) Turn off the TFT backlight if set (5mn)
|
|
||||||
|
|
||||||
#define TOUCH_SCREEN_CALIBRATION
|
#define TOUCH_SCREEN_CALIBRATION
|
||||||
|
|
||||||
//#define TOUCH_CALIBRATION_X 12316
|
//#define TOUCH_CALIBRATION_X 12316
|
||||||
@ -2831,11 +2756,6 @@
|
|||||||
//#define REPRAPWORLD_KEYPAD
|
//#define REPRAPWORLD_KEYPAD
|
||||||
//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 // (mm) Distance to move per key-press
|
//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 // (mm) Distance to move per key-press
|
||||||
|
|
||||||
//
|
|
||||||
// EasyThreeD ET-4000+ with button input and status LED
|
|
||||||
//
|
|
||||||
//#define EASYTHREED_UI
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//=============================== Extra Features ==============================
|
//=============================== Extra Features ==============================
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -2846,6 +2766,9 @@
|
|||||||
// :[1,2,3,4,5,6,7,8]
|
// :[1,2,3,4,5,6,7,8]
|
||||||
//#define NUM_M106_FANS 1
|
//#define NUM_M106_FANS 1
|
||||||
|
|
||||||
|
// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
|
||||||
|
//#define FAST_PWM_FAN
|
||||||
|
|
||||||
// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
|
// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
|
||||||
// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
|
// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
|
||||||
// is too low, you should also increment SOFT_PWM_SCALE.
|
// is too low, you should also increment SOFT_PWM_SCALE.
|
||||||
@ -2963,7 +2886,7 @@
|
|||||||
* Set this manually if there are extra servos needing manual control.
|
* Set this manually if there are extra servos needing manual control.
|
||||||
* Set to 0 to turn off servo support.
|
* Set to 0 to turn off servo support.
|
||||||
*/
|
*/
|
||||||
//#define NUM_SERVOS 3 // Note: Servo index starts with 0 for M280-M282 commands
|
//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
|
||||||
|
|
||||||
// (ms) Delay before the next move will start, to give the servo time to reach its target angle.
|
// (ms) Delay before the next move will start, to give the servo time to reach its target angle.
|
||||||
// 300ms is a good value but you can try less delay.
|
// 300ms is a good value but you can try less delay.
|
||||||
@ -2975,6 +2898,3 @@
|
|||||||
|
|
||||||
// Edit servo angles with M281 and save to EEPROM with M500
|
// Edit servo angles with M281 and save to EEPROM with M500
|
||||||
//#define EDITABLE_SERVO_ANGLES
|
//#define EDITABLE_SERVO_ANGLES
|
||||||
|
|
||||||
// Disable servo with M282 to reduce power consumption, noise, and heat when not in use
|
|
||||||
//#define SERVO_DETACH_GCODE
|
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
*
|
*
|
||||||
* Basic settings can be found in Configuration.h
|
* Basic settings can be found in Configuration.h
|
||||||
*/
|
*/
|
||||||
#define CONFIGURATION_ADV_H_VERSION 02000903
|
#define CONFIGURATION_ADV_H_VERSION 02000901
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//============================= Thermal Settings ============================
|
//============================= Thermal Settings ============================
|
||||||
@ -125,12 +125,6 @@
|
|||||||
#define PROBE_BETA 3950 // Beta value
|
#define PROBE_BETA 3950 // Beta value
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if TEMP_SENSOR_BOARD == 1000
|
|
||||||
#define BOARD_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
|
|
||||||
#define BOARD_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
|
|
||||||
#define BOARD_BETA 3950 // Beta value
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if TEMP_SENSOR_REDUNDANT == 1000
|
#if TEMP_SENSOR_REDUNDANT == 1000
|
||||||
#define REDUNDANT_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
|
#define REDUNDANT_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
|
||||||
#define REDUNDANT_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
|
#define REDUNDANT_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
|
||||||
@ -142,20 +136,11 @@
|
|||||||
* FORCE_HW_SPI: Ignore SCK/MOSI/MISO pins and just use the CS pin & default SPI bus.
|
* FORCE_HW_SPI: Ignore SCK/MOSI/MISO pins and just use the CS pin & default SPI bus.
|
||||||
* MAX31865_WIRES: Set the number of wires for the probe connected to a MAX31865 board, 2-4. Default: 2
|
* MAX31865_WIRES: Set the number of wires for the probe connected to a MAX31865 board, 2-4. Default: 2
|
||||||
* MAX31865_50HZ: Enable 50Hz filter instead of the default 60Hz.
|
* MAX31865_50HZ: Enable 50Hz filter instead of the default 60Hz.
|
||||||
* MAX31865_USE_READ_ERROR_DETECTION: Detects random read errors from value spikes (a 20°C difference in less than 1sec)
|
|
||||||
* MAX31865_USE_AUTO_MODE: Faster and more frequent reads than 1-shot, but bias voltage always on, slightly affecting RTD temperature.
|
|
||||||
* MAX31865_MIN_SAMPLING_TIME_MSEC: in 1-shot mode, the minimum time between subsequent reads. This reduces the effect of bias voltage by leaving the sensor unpowered for longer intervals.
|
|
||||||
* MAX31865_WIRE_OHMS: In 2-wire configurations, manually set the wire resistance for more accurate readings
|
|
||||||
*/
|
*/
|
||||||
//#define TEMP_SENSOR_FORCE_HW_SPI
|
//#define TEMP_SENSOR_FORCE_HW_SPI
|
||||||
//#define MAX31865_SENSOR_WIRES_0 2
|
//#define MAX31865_SENSOR_WIRES_0 2
|
||||||
//#define MAX31865_SENSOR_WIRES_1 2
|
//#define MAX31865_SENSOR_WIRES_1 2
|
||||||
//#define MAX31865_50HZ_FILTER
|
//#define MAX31865_50HZ_FILTER
|
||||||
//#define MAX31865_USE_READ_ERROR_DETECTION
|
|
||||||
//#define MAX31865_USE_AUTO_MODE
|
|
||||||
//#define MAX31865_MIN_SAMPLING_TIME_MSEC 100
|
|
||||||
//#define MAX31865_WIRE_OHMS_0 0.0f
|
|
||||||
//#define MAX31865_WIRE_OHMS_1 0.0f
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hephestos 2 24V heated bed upgrade kit.
|
* Hephestos 2 24V heated bed upgrade kit.
|
||||||
@ -195,7 +180,6 @@
|
|||||||
|
|
||||||
//#define CHAMBER_FAN // Enable a fan on the chamber
|
//#define CHAMBER_FAN // Enable a fan on the chamber
|
||||||
#if ENABLED(CHAMBER_FAN)
|
#if ENABLED(CHAMBER_FAN)
|
||||||
//#define CHAMBER_FAN_INDEX 2 // Index of a fan to repurpose as the chamber fan. (Default: first unused fan)
|
|
||||||
#define CHAMBER_FAN_MODE 2 // Fan control mode: 0=Static; 1=Linear increase when temp is higher than target; 2=V-shaped curve; 3=similar to 1 but fan is always on.
|
#define CHAMBER_FAN_MODE 2 // Fan control mode: 0=Static; 1=Linear increase when temp is higher than target; 2=V-shaped curve; 3=similar to 1 but fan is always on.
|
||||||
#if CHAMBER_FAN_MODE == 0
|
#if CHAMBER_FAN_MODE == 0
|
||||||
#define CHAMBER_FAN_BASE 255 // Chamber fan PWM (0-255)
|
#define CHAMBER_FAN_BASE 255 // Chamber fan PWM (0-255)
|
||||||
@ -240,18 +224,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
|
||||||
// Motherboard Sensor options
|
|
||||||
//
|
|
||||||
#if TEMP_SENSOR_BOARD
|
|
||||||
#define THERMAL_PROTECTION_BOARD // Halt the printer if the board sensor leaves the temp range below.
|
|
||||||
#define BOARD_MINTEMP 8 // (°C)
|
|
||||||
#define BOARD_MAXTEMP 70 // (°C)
|
|
||||||
#ifndef TEMP_BOARD_PIN
|
|
||||||
//#define TEMP_BOARD_PIN -1 // Board temp sensor pin, if not set in pins file.
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Laser Coolant Flow Meter
|
// Laser Coolant Flow Meter
|
||||||
//
|
//
|
||||||
@ -424,7 +396,7 @@
|
|||||||
*/
|
*/
|
||||||
#define AUTOTEMP
|
#define AUTOTEMP
|
||||||
#if ENABLED(AUTOTEMP)
|
#if ENABLED(AUTOTEMP)
|
||||||
#define AUTOTEMP_OLDWEIGHT 0.98 // Factor used to weight previous readings (0.0 < value < 1.0)
|
#define AUTOTEMP_OLDWEIGHT 0.98
|
||||||
// Turn on AUTOTEMP on M104/M109 by default using proportions set here
|
// Turn on AUTOTEMP on M104/M109 by default using proportions set here
|
||||||
//#define AUTOTEMP_PROPORTIONAL
|
//#define AUTOTEMP_PROPORTIONAL
|
||||||
#if ENABLED(AUTOTEMP_PROPORTIONAL)
|
#if ENABLED(AUTOTEMP_PROPORTIONAL)
|
||||||
@ -515,10 +487,6 @@
|
|||||||
#define CONTROLLERFAN_SPEED_ACTIVE 255 // (0-255) Active speed, used when any motor is enabled
|
#define CONTROLLERFAN_SPEED_ACTIVE 255 // (0-255) Active speed, used when any motor is enabled
|
||||||
#define CONTROLLERFAN_SPEED_IDLE 0 // (0-255) Idle speed, used when motors are disabled
|
#define CONTROLLERFAN_SPEED_IDLE 0 // (0-255) Idle speed, used when motors are disabled
|
||||||
#define CONTROLLERFAN_IDLE_TIME 60 // (seconds) Extra time to keep the fan running after disabling motors
|
#define CONTROLLERFAN_IDLE_TIME 60 // (seconds) Extra time to keep the fan running after disabling motors
|
||||||
|
|
||||||
// Use TEMP_SENSOR_BOARD as a trigger for enabling the controller fan
|
|
||||||
//#define CONTROLLER_FAN_MIN_BOARD_TEMP 40 // (°C) Turn on the fan if the board reaches this temperature
|
|
||||||
|
|
||||||
//#define CONTROLLER_FAN_EDITABLE // Enable M710 configurable settings
|
//#define CONTROLLER_FAN_EDITABLE // Enable M710 configurable settings
|
||||||
#if ENABLED(CONTROLLER_FAN_EDITABLE)
|
#if ENABLED(CONTROLLER_FAN_EDITABLE)
|
||||||
#define CONTROLLER_FAN_MENU // Enable the Controller Fan submenu
|
#define CONTROLLER_FAN_MENU // Enable the Controller Fan submenu
|
||||||
@ -549,21 +517,18 @@
|
|||||||
//#define FAN_MAX_PWM 128
|
//#define FAN_MAX_PWM 128
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fan Fast PWM
|
* FAST PWM FAN Settings
|
||||||
*
|
*
|
||||||
* Combinations of PWM Modes, prescale values and TOP resolutions are used internally
|
* Use to change the FAST FAN PWM frequency (if enabled in Configuration.h)
|
||||||
* to produce a frequency as close as possible to the desired frequency.
|
* Combinations of PWM Modes, prescale values and TOP resolutions are used internally to produce a
|
||||||
|
* frequency as close as possible to the desired frequency.
|
||||||
*
|
*
|
||||||
* FAST_PWM_FAN_FREQUENCY
|
* FAST_PWM_FAN_FREQUENCY [undefined by default]
|
||||||
* Set this to your desired frequency.
|
* Set this to your desired frequency.
|
||||||
* For AVR, if left undefined this defaults to F = F_CPU/(2*255*1)
|
* If left undefined this defaults to F = F_CPU/(2*255*1)
|
||||||
* i.e., F = 31.4kHz on 16MHz microcontrollers or F = 39.2kHz on 20MHz microcontrollers.
|
* i.e., F = 31.4kHz on 16MHz microcontrollers or F = 39.2kHz on 20MHz microcontrollers.
|
||||||
* For non AVR, if left undefined this defaults to F = 1Khz.
|
* These defaults are the same as with the old FAST_PWM_FAN implementation - no migration is required
|
||||||
* This F value is only to protect the hardware from an absence of configuration
|
|
||||||
* and not to complete it when users are not aware that the frequency must be specifically set to support the target board.
|
|
||||||
*
|
|
||||||
* NOTE: Setting very low frequencies (< 10 Hz) may result in unexpected timer behavior.
|
* NOTE: Setting very low frequencies (< 10 Hz) may result in unexpected timer behavior.
|
||||||
* Setting very high frequencies can damage your hardware.
|
|
||||||
*
|
*
|
||||||
* USE_OCR2A_AS_TOP [undefined by default]
|
* USE_OCR2A_AS_TOP [undefined by default]
|
||||||
* Boards that use TIMER2 for PWM have limitations resulting in only a few possible frequencies on TIMER2:
|
* Boards that use TIMER2 for PWM have limitations resulting in only a few possible frequencies on TIMER2:
|
||||||
@ -573,17 +538,9 @@
|
|||||||
* PWM on pin OC2A. Only use this option if you don't need PWM on 0C2A. (Check your schematic.)
|
* PWM on pin OC2A. Only use this option if you don't need PWM on 0C2A. (Check your schematic.)
|
||||||
* USE_OCR2A_AS_TOP sacrifices duty cycle control resolution to achieve this broader range of frequencies.
|
* USE_OCR2A_AS_TOP sacrifices duty cycle control resolution to achieve this broader range of frequencies.
|
||||||
*/
|
*/
|
||||||
//#define FAST_PWM_FAN // Increase the fan PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
|
|
||||||
#if ENABLED(FAST_PWM_FAN)
|
#if ENABLED(FAST_PWM_FAN)
|
||||||
//#define FAST_PWM_FAN_FREQUENCY 31400 // Define here to override the defaults below
|
//#define FAST_PWM_FAN_FREQUENCY 31400
|
||||||
//#define USE_OCR2A_AS_TOP
|
//#define USE_OCR2A_AS_TOP
|
||||||
#ifndef FAST_PWM_FAN_FREQUENCY
|
|
||||||
#ifdef __AVR__
|
|
||||||
#define FAST_PWM_FAN_FREQUENCY ((F_CPU) / (2 * 255 * 1))
|
|
||||||
#else
|
|
||||||
#define FAST_PWM_FAN_FREQUENCY 1000U
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -624,40 +581,6 @@
|
|||||||
#define COOLER_AUTO_FAN_TEMPERATURE 18
|
#define COOLER_AUTO_FAN_TEMPERATURE 18
|
||||||
#define COOLER_AUTO_FAN_SPEED 255
|
#define COOLER_AUTO_FAN_SPEED 255
|
||||||
|
|
||||||
/**
|
|
||||||
* Hotend Cooling Fans tachometers
|
|
||||||
*
|
|
||||||
* Define one or more tachometer pins to enable fan speed
|
|
||||||
* monitoring, and reporting of fan speeds with M123.
|
|
||||||
*
|
|
||||||
* NOTE: Only works with fans up to 7000 RPM.
|
|
||||||
*/
|
|
||||||
//#define FOURWIRES_FANS // Needed with AUTO_FAN when 4-wire PWM fans are installed
|
|
||||||
//#define E0_FAN_TACHO_PIN -1
|
|
||||||
//#define E0_FAN_TACHO_PULLUP
|
|
||||||
//#define E0_FAN_TACHO_PULLDOWN
|
|
||||||
//#define E1_FAN_TACHO_PIN -1
|
|
||||||
//#define E1_FAN_TACHO_PULLUP
|
|
||||||
//#define E1_FAN_TACHO_PULLDOWN
|
|
||||||
//#define E2_FAN_TACHO_PIN -1
|
|
||||||
//#define E2_FAN_TACHO_PULLUP
|
|
||||||
//#define E2_FAN_TACHO_PULLDOWN
|
|
||||||
//#define E3_FAN_TACHO_PIN -1
|
|
||||||
//#define E3_FAN_TACHO_PULLUP
|
|
||||||
//#define E3_FAN_TACHO_PULLDOWN
|
|
||||||
//#define E4_FAN_TACHO_PIN -1
|
|
||||||
//#define E4_FAN_TACHO_PULLUP
|
|
||||||
//#define E4_FAN_TACHO_PULLDOWN
|
|
||||||
//#define E5_FAN_TACHO_PIN -1
|
|
||||||
//#define E5_FAN_TACHO_PULLUP
|
|
||||||
//#define E5_FAN_TACHO_PULLDOWN
|
|
||||||
//#define E6_FAN_TACHO_PIN -1
|
|
||||||
//#define E6_FAN_TACHO_PULLUP
|
|
||||||
//#define E6_FAN_TACHO_PULLDOWN
|
|
||||||
//#define E7_FAN_TACHO_PIN -1
|
|
||||||
//#define E7_FAN_TACHO_PULLUP
|
|
||||||
//#define E7_FAN_TACHO_PULLDOWN
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Part-Cooling Fan Multiplexer
|
* Part-Cooling Fan Multiplexer
|
||||||
*
|
*
|
||||||
@ -908,14 +831,12 @@
|
|||||||
//#define BLTOUCH_FORCE_MODE_SET
|
//#define BLTOUCH_FORCE_MODE_SET
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable "HIGH SPEED" option for probing.
|
* Use "HIGH SPEED" mode for probing.
|
||||||
* Danger: Disable if your probe sometimes fails. Only suitable for stable well-adjusted systems.
|
* Danger: Disable if your probe sometimes fails. Only suitable for stable well-adjusted systems.
|
||||||
* This feature was designed for Deltabots with very fast Z moves; however, higher speed Cartesians
|
* This feature was designed for Deltabots with very fast Z moves; however, higher speed Cartesians
|
||||||
* might be able to use it. If the machine can't raise Z fast enough the BLTouch may go into ALARM.
|
* might be able to use it. If the machine can't raise Z fast enough the BLTouch may go into ALARM.
|
||||||
*
|
|
||||||
* Set the default state here, change with 'M401 S' or UI, use M500 to save, M502 to reset.
|
|
||||||
*/
|
*/
|
||||||
//#define BLTOUCH_HS_MODE true
|
//#define BLTOUCH_HS_MODE
|
||||||
|
|
||||||
// Safety: Enable voltage mode settings in the LCD menu.
|
// Safety: Enable voltage mode settings in the LCD menu.
|
||||||
//#define BLTOUCH_LCD_VOLTAGE_MENU
|
//#define BLTOUCH_LCD_VOLTAGE_MENU
|
||||||
@ -1253,7 +1174,7 @@
|
|||||||
|
|
||||||
// @section lcd
|
// @section lcd
|
||||||
|
|
||||||
#if ANY(HAS_LCD_MENU, EXTENSIBLE_UI, HAS_DWIN_E3V2)
|
#if EITHER(IS_ULTIPANEL, EXTENSIBLE_UI)
|
||||||
#define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 2*60 } // (mm/min) Feedrates for manual moves along X, Y, Z, E from panel
|
#define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 2*60 } // (mm/min) Feedrates for manual moves along X, Y, Z, E from panel
|
||||||
#define FINE_MANUAL_MOVE 0.025 // (mm) Smallest manual move (< 0.1mm) applying to Z on most machines
|
#define FINE_MANUAL_MOVE 0.025 // (mm) Smallest manual move (< 0.1mm) applying to Z on most machines
|
||||||
#if IS_ULTIPANEL
|
#if IS_ULTIPANEL
|
||||||
@ -1292,22 +1213,6 @@
|
|||||||
// Set a convenient position to do the calibration (probing point and nozzle/bed-distance)
|
// Set a convenient position to do the calibration (probing point and nozzle/bed-distance)
|
||||||
//#define PROBE_OFFSET_WIZARD_XY_POS { X_CENTER, Y_CENTER }
|
//#define PROBE_OFFSET_WIZARD_XY_POS { X_CENTER, Y_CENTER }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
|
|
||||||
// Add a calibration procedure in the Probe Offsets menu
|
|
||||||
// to compensate for twist in the X-axis.
|
|
||||||
//#define X_AXIS_TWIST_COMPENSATION
|
|
||||||
#if ENABLED(X_AXIS_TWIST_COMPENSATION)
|
|
||||||
/**
|
|
||||||
* Enable to init the Probe Z-Offset when starting the Wizard.
|
|
||||||
* Use a height slightly above the estimated nozzle-to-probe Z offset.
|
|
||||||
* For example, with an offset of -5, consider a starting height of -4.
|
|
||||||
*/
|
|
||||||
#define XATC_START_Z 0.0
|
|
||||||
#define XATC_MAX_POINTS 3 // Number of points to probe in the wizard
|
|
||||||
#define XATC_Y_POSITION Y_CENTER // (mm) Y position to probe
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Include a page of printer information in the LCD Main Menu
|
// Include a page of printer information in the LCD Main Menu
|
||||||
@ -1319,6 +1224,9 @@
|
|||||||
// BACK menu items keep the highlight at the top
|
// BACK menu items keep the highlight at the top
|
||||||
//#define TURBO_BACK_MENU_ITEM
|
//#define TURBO_BACK_MENU_ITEM
|
||||||
|
|
||||||
|
// Add a mute option to the LCD menu
|
||||||
|
//#define SOUND_MENU_ITEM
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LED Control Menu
|
* LED Control Menu
|
||||||
* Add LED Control to the LCD menu
|
* Add LED Control to the LCD menu
|
||||||
@ -1350,11 +1258,7 @@
|
|||||||
|
|
||||||
#endif // HAS_LCD_MENU
|
#endif // HAS_LCD_MENU
|
||||||
|
|
||||||
#if ANY(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI)
|
#if HAS_DISPLAY
|
||||||
//#define SOUND_MENU_ITEM // Add a mute option to the LCD menu
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if EITHER(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED)
|
|
||||||
// The timeout (in ms) to return to the status screen from sub-menus
|
// The timeout (in ms) to return to the status screen from sub-menus
|
||||||
//#define LCD_TIMEOUT_TO_STATUS 15000
|
//#define LCD_TIMEOUT_TO_STATUS 15000
|
||||||
|
|
||||||
@ -1378,15 +1282,12 @@
|
|||||||
//#define LCD_SHOW_E_TOTAL
|
//#define LCD_SHOW_E_TOTAL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// LCD Print Progress options
|
#if EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY) && ANY(HAS_MARLINUI_U8GLIB, HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL, EXTENSIBLE_UI)
|
||||||
#if EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
|
|
||||||
#if CAN_SHOW_REMAINING_TIME
|
|
||||||
//#define SHOW_REMAINING_TIME // Display estimated time to completion
|
//#define SHOW_REMAINING_TIME // Display estimated time to completion
|
||||||
#if ENABLED(SHOW_REMAINING_TIME)
|
#if ENABLED(SHOW_REMAINING_TIME)
|
||||||
//#define USE_M73_REMAINING_TIME // Use remaining time from M73 command instead of estimation
|
//#define USE_M73_REMAINING_TIME // Use remaining time from M73 command instead of estimation
|
||||||
//#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
|
//#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#if EITHER(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI)
|
#if EITHER(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI)
|
||||||
//#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
|
//#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
|
||||||
@ -1606,14 +1507,6 @@
|
|||||||
#define SD_FIRMWARE_UPDATE_INACTIVE_VALUE 0xFF
|
#define SD_FIRMWARE_UPDATE_INACTIVE_VALUE 0xFF
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* Enable this option if you have more than ~3K of unused flash space.
|
|
||||||
* Marlin will embed all settings in the firmware binary as compressed data.
|
|
||||||
* Use 'M503 C' to write the settings out to the SD Card as 'mc.zip'.
|
|
||||||
* See docs/ConfigEmbedding.md for details on how to use 'mc-apply.py'.
|
|
||||||
*/
|
|
||||||
//#define CONFIGURATION_EMBEDDING
|
|
||||||
|
|
||||||
// Add an optimized binary file transfer mode, initiated with 'M28 B1'
|
// Add an optimized binary file transfer mode, initiated with 'M28 B1'
|
||||||
//#define BINARY_FILE_TRANSFER
|
//#define BINARY_FILE_TRANSFER
|
||||||
|
|
||||||
@ -1661,10 +1554,16 @@
|
|||||||
* printing performance versus fast display updates.
|
* printing performance versus fast display updates.
|
||||||
*/
|
*/
|
||||||
#if HAS_MARLINUI_U8GLIB
|
#if HAS_MARLINUI_U8GLIB
|
||||||
|
// Show SD percentage next to the progress bar
|
||||||
|
//#define DOGM_SD_PERCENT
|
||||||
|
|
||||||
// Save many cycles by drawing a hollow frame or no frame on the Info Screen
|
// Save many cycles by drawing a hollow frame or no frame on the Info Screen
|
||||||
//#define XYZ_NO_FRAME
|
//#define XYZ_NO_FRAME
|
||||||
#define XYZ_HOLLOW_FRAME
|
#define XYZ_HOLLOW_FRAME
|
||||||
|
|
||||||
|
// Enable to save many cycles by drawing a hollow frame on Menu Screens
|
||||||
|
#define MENU_HOLLOW_FRAME
|
||||||
|
|
||||||
// A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
|
// A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
|
||||||
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
||||||
//#define USE_BIG_EDIT_FONT
|
//#define USE_BIG_EDIT_FONT
|
||||||
@ -1673,6 +1572,9 @@
|
|||||||
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
||||||
//#define USE_SMALL_INFOFONT
|
//#define USE_SMALL_INFOFONT
|
||||||
|
|
||||||
|
// Swap the CW/CCW indicators in the graphics overlay
|
||||||
|
//#define OVERLAY_GFX_REVERSE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ST7920-based LCDs can emulate a 16 x 4 character display using
|
* ST7920-based LCDs can emulate a 16 x 4 character display using
|
||||||
* the ST7920 character-generator for very fast screen updates.
|
* the ST7920 character-generator for very fast screen updates.
|
||||||
@ -1685,7 +1587,7 @@
|
|||||||
* Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
|
* Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
|
||||||
* This will prevent position updates from being displayed.
|
* This will prevent position updates from being displayed.
|
||||||
*/
|
*/
|
||||||
#if IS_U8GLIB_ST7920
|
#if ENABLED(U8GLIB_ST7920)
|
||||||
// Enable this option and reduce the value to optimize screen updates.
|
// Enable this option and reduce the value to optimize screen updates.
|
||||||
// The normal delay is 10µs. Use the lowest value that still gives a reliable display.
|
// The normal delay is 10µs. Use the lowest value that still gives a reliable display.
|
||||||
//#define DOGM_SPI_DELAY_US 5
|
//#define DOGM_SPI_DELAY_US 5
|
||||||
@ -1714,7 +1616,7 @@
|
|||||||
//#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
|
//#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
|
||||||
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
|
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
|
||||||
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
|
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
|
||||||
//#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of PROGMEM.
|
//#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of PROGMEM.
|
||||||
|
|
||||||
// Frivolous Game Options
|
// Frivolous Game Options
|
||||||
//#define MARLIN_BRICKOUT
|
//#define MARLIN_BRICKOUT
|
||||||
@ -1724,17 +1626,6 @@
|
|||||||
|
|
||||||
#endif // HAS_MARLINUI_U8GLIB
|
#endif // HAS_MARLINUI_U8GLIB
|
||||||
|
|
||||||
#if HAS_MARLINUI_U8GLIB || IS_DWIN_MARLINUI
|
|
||||||
// Show SD percentage next to the progress bar
|
|
||||||
//#define SHOW_SD_PERCENT
|
|
||||||
|
|
||||||
// Enable to save many cycles by drawing a hollow frame on Menu Screens
|
|
||||||
#define MENU_HOLLOW_FRAME
|
|
||||||
|
|
||||||
// Swap the CW/CCW indicators in the graphics overlay
|
|
||||||
//#define OVERLAY_GFX_REVERSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Additional options for DGUS / DWIN displays
|
// Additional options for DGUS / DWIN displays
|
||||||
//
|
//
|
||||||
@ -1800,7 +1691,7 @@
|
|||||||
//
|
//
|
||||||
// Specify additional languages for the UI. Default specified by LCD_LANGUAGE.
|
// Specify additional languages for the UI. Default specified by LCD_LANGUAGE.
|
||||||
//
|
//
|
||||||
#if ANY(DOGLCD, TFT_COLOR_UI, TOUCH_UI_FTDI_EVE, IS_DWIN_MARLINUI)
|
#if ANY(DOGLCD, TFT_COLOR_UI, TOUCH_UI_FTDI_EVE)
|
||||||
//#define LCD_LANGUAGE_2 fr
|
//#define LCD_LANGUAGE_2 fr
|
||||||
//#define LCD_LANGUAGE_3 de
|
//#define LCD_LANGUAGE_3 de
|
||||||
//#define LCD_LANGUAGE_4 es
|
//#define LCD_LANGUAGE_4 es
|
||||||
@ -1819,7 +1710,7 @@
|
|||||||
//#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272)
|
//#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272)
|
||||||
//#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272)
|
//#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272)
|
||||||
//#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480)
|
//#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480)
|
||||||
//#define LCD_LULZBOT_CLCD_UI // LulzBot Color LCD UI
|
//#define LCD_ALEPHOBJECTS_CLCD_UI // Aleph Objects Color LCD UI
|
||||||
//#define LCD_FYSETC_TFT81050 // FYSETC with 5" (800x480)
|
//#define LCD_FYSETC_TFT81050 // FYSETC with 5" (800x480)
|
||||||
//#define LCD_EVE3_50G // Matrix Orbital 5.0", 800x480, BT815
|
//#define LCD_EVE3_50G // Matrix Orbital 5.0", 800x480, BT815
|
||||||
//#define LCD_EVE2_50G // Matrix Orbital 5.0", 800x480, FT813
|
//#define LCD_EVE2_50G // Matrix Orbital 5.0", 800x480, FT813
|
||||||
@ -1830,8 +1721,8 @@
|
|||||||
//#define TOUCH_UI_800x480
|
//#define TOUCH_UI_800x480
|
||||||
|
|
||||||
// Mappings for boards with a standard RepRapDiscount Display connector
|
// Mappings for boards with a standard RepRapDiscount Display connector
|
||||||
//#define AO_EXP1_PINMAP // LulzBot CLCD UI EXP1 mapping
|
//#define AO_EXP1_PINMAP // AlephObjects CLCD UI EXP1 mapping
|
||||||
//#define AO_EXP2_PINMAP // LulzBot CLCD UI EXP2 mapping
|
//#define AO_EXP2_PINMAP // AlephObjects CLCD UI EXP2 mapping
|
||||||
//#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping
|
//#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping
|
||||||
//#define S6_TFT_PINMAP // FYSETC S6 pin mapping
|
//#define S6_TFT_PINMAP // FYSETC S6 pin mapping
|
||||||
//#define F6_TFT_PINMAP // FYSETC F6 pin mapping
|
//#define F6_TFT_PINMAP // FYSETC F6 pin mapping
|
||||||
@ -1942,7 +1833,7 @@
|
|||||||
*
|
*
|
||||||
* Warning: Does not respect endstops!
|
* Warning: Does not respect endstops!
|
||||||
*/
|
*/
|
||||||
#define BABYSTEPPING
|
//#define BABYSTEPPING
|
||||||
#if ENABLED(BABYSTEPPING)
|
#if ENABLED(BABYSTEPPING)
|
||||||
//#define INTEGRATED_BABYSTEPPING // EXPERIMENTAL integration of babystepping into the Stepper ISR
|
//#define INTEGRATED_BABYSTEPPING // EXPERIMENTAL integration of babystepping into the Stepper ISR
|
||||||
//#define BABYSTEP_WITHOUT_HOMING
|
//#define BABYSTEP_WITHOUT_HOMING
|
||||||
@ -1963,7 +1854,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
|
//#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
|
||||||
|
|
||||||
//#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
|
//#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
|
||||||
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
||||||
@ -1995,7 +1886,6 @@
|
|||||||
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
//#define EXPERIMENTAL_SCURVE // Enable this option to permit S-Curve Acceleration
|
//#define EXPERIMENTAL_SCURVE // Enable this option to permit S-Curve Acceleration
|
||||||
//#define ALLOW_LOW_EJERK // Allow a DEFAULT_EJERK value of <10. Recommended for direct drive hotends.
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
@ -2071,69 +1961,59 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Thermal Probe Compensation
|
* Thermal Probe Compensation
|
||||||
*
|
* Probe measurements are adjusted to compensate for temperature distortion.
|
||||||
* Adjust probe measurements to compensate for distortion associated with the temperature
|
* Use G76 to calibrate this feature. Use M871 to set values manually.
|
||||||
* of the probe, bed, and/or hotend.
|
* For a more detailed explanation of the process see G76_M871.cpp.
|
||||||
* Use G76 to automatically calibrate this feature for probe and bed temperatures.
|
|
||||||
* (Extruder temperature/offset values must be calibrated manually.)
|
|
||||||
* Use M871 to set temperature/offset values manually.
|
|
||||||
* For more details see https://marlinfw.org/docs/features/probe_temp_compensation.html
|
|
||||||
*/
|
*/
|
||||||
//#define PTC_PROBE // Compensate based on probe temperature
|
#if HAS_BED_PROBE && TEMP_SENSOR_PROBE && TEMP_SENSOR_BED
|
||||||
//#define PTC_BED // Compensate based on bed temperature
|
// Enable thermal first layer compensation using bed and probe temperatures
|
||||||
//#define PTC_HOTEND // Compensate based on hotend temperature
|
#define PROBE_TEMP_COMPENSATION
|
||||||
|
|
||||||
#if ANY(PTC_PROBE, PTC_BED, PTC_HOTEND)
|
// Add additional compensation depending on hotend temperature
|
||||||
/**
|
// Note: this values cannot be calibrated and have to be set manually
|
||||||
* If the probe is outside the defined range, use linear extrapolation with the closest
|
#if ENABLED(PROBE_TEMP_COMPENSATION)
|
||||||
* point and the point with index PTC_LINEAR_EXTRAPOLATION. e.g., If set to 4 it will use the
|
|
||||||
* linear extrapolation between data[0] and data[4] for values below PTC_PROBE_START.
|
|
||||||
*/
|
|
||||||
//#define PTC_LINEAR_EXTRAPOLATION 4
|
|
||||||
|
|
||||||
#if ENABLED(PTC_PROBE)
|
|
||||||
// Probe temperature calibration generates a table of values starting at PTC_PROBE_START
|
|
||||||
// (e.g., 30), in steps of PTC_PROBE_RES (e.g., 5) with PTC_PROBE_COUNT (e.g., 10) samples.
|
|
||||||
#define PTC_PROBE_START 30 // (°C)
|
|
||||||
#define PTC_PROBE_RES 5 // (°C)
|
|
||||||
#define PTC_PROBE_COUNT 10
|
|
||||||
#define PTC_PROBE_ZOFFS { 0 } // (µm) Z adjustments per sample
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if ENABLED(PTC_BED)
|
|
||||||
// Bed temperature calibration builds a similar table.
|
|
||||||
#define PTC_BED_START 60 // (°C)
|
|
||||||
#define PTC_BED_RES 5 // (°C)
|
|
||||||
#define PTC_BED_COUNT 10
|
|
||||||
#define PTC_BED_ZOFFS { 0 } // (µm) Z adjustments per sample
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if ENABLED(PTC_HOTEND)
|
|
||||||
// Note: There is no automatic calibration for the hotend. Use M871.
|
|
||||||
#define PTC_HOTEND_START 180 // (°C)
|
|
||||||
#define PTC_HOTEND_RES 5 // (°C)
|
|
||||||
#define PTC_HOTEND_COUNT 20
|
|
||||||
#define PTC_HOTEND_ZOFFS { 0 } // (µm) Z adjustments per sample
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// G76 options
|
|
||||||
#if BOTH(PTC_PROBE, PTC_BED)
|
|
||||||
// Park position to wait for probe cooldown
|
// Park position to wait for probe cooldown
|
||||||
#define PTC_PARK_POS { 0, 0, 100 }
|
#define PTC_PARK_POS { 0, 0, 100 }
|
||||||
|
|
||||||
// Probe position to probe and wait for probe to reach target temperature
|
// Probe position to probe and wait for probe to reach target temperature
|
||||||
//#define PTC_PROBE_POS { 12.0f, 7.3f } // Example: MK52 magnetic heatbed
|
|
||||||
#define PTC_PROBE_POS { 90, 100 }
|
#define PTC_PROBE_POS { 90, 100 }
|
||||||
|
|
||||||
// The temperature the probe should be at while taking measurements during
|
// Enable additional compensation using hotend temperature
|
||||||
// bed temperature calibration.
|
// Note: this values cannot be calibrated automatically but have to be set manually
|
||||||
#define PTC_PROBE_TEMP 30 // (°C)
|
//#define USE_TEMP_EXT_COMPENSATION
|
||||||
|
|
||||||
|
// Probe temperature calibration generates a table of values starting at PTC_SAMPLE_START
|
||||||
|
// (e.g., 30), in steps of PTC_SAMPLE_RES (e.g., 5) with PTC_SAMPLE_COUNT (e.g., 10) samples.
|
||||||
|
|
||||||
|
//#define PTC_SAMPLE_START 30 // (°C)
|
||||||
|
//#define PTC_SAMPLE_RES 5 // (°C)
|
||||||
|
//#define PTC_SAMPLE_COUNT 10
|
||||||
|
|
||||||
|
// Bed temperature calibration builds a similar table.
|
||||||
|
|
||||||
|
//#define BTC_SAMPLE_START 60 // (°C)
|
||||||
|
//#define BTC_SAMPLE_RES 5 // (°C)
|
||||||
|
//#define BTC_SAMPLE_COUNT 10
|
||||||
|
|
||||||
|
// The temperature the probe should be at while taking measurements during bed temperature
|
||||||
|
// calibration.
|
||||||
|
//#define BTC_PROBE_TEMP 30 // (°C)
|
||||||
|
|
||||||
// Height above Z=0.0 to raise the nozzle. Lowering this can help the probe to heat faster.
|
// Height above Z=0.0 to raise the nozzle. Lowering this can help the probe to heat faster.
|
||||||
// Note: The Z=0.0 offset is determined by the probe Z offset (e.g., as set with M851 Z).
|
// Note: the Z=0.0 offset is determined by the probe offset which can be set using M851.
|
||||||
#define PTC_PROBE_HEATING_OFFSET 0.5
|
//#define PTC_PROBE_HEATING_OFFSET 0.5
|
||||||
|
|
||||||
|
// Height to raise the Z-probe between heating and taking the next measurement. Some probes
|
||||||
|
// may fail to untrigger if they have been triggered for a long time, which can be solved by
|
||||||
|
// increasing the height the probe is raised to.
|
||||||
|
//#define PTC_PROBE_RAISE 15
|
||||||
|
|
||||||
|
// If the probe is outside of the defined range, use linear extrapolation using the closest
|
||||||
|
// point and the PTC_LINEAR_EXTRAPOLATION'th next point. E.g. if set to 4 it will use data[0]
|
||||||
|
// and data[4] to perform linear extrapolation for values below PTC_SAMPLE_START.
|
||||||
|
//#define PTC_LINEAR_EXTRAPOLATION 4
|
||||||
#endif
|
#endif
|
||||||
#endif // PTC_PROBE || PTC_BED || PTC_HOTEND
|
#endif
|
||||||
|
|
||||||
// @section extras
|
// @section extras
|
||||||
|
|
||||||
@ -2145,23 +2025,20 @@
|
|||||||
//
|
//
|
||||||
// G2/G3 Arc Support
|
// G2/G3 Arc Support
|
||||||
//
|
//
|
||||||
#define ARC_SUPPORT // Requires ~3226 bytes
|
#define ARC_SUPPORT // Disable this feature to save ~3226 bytes
|
||||||
#if ENABLED(ARC_SUPPORT)
|
#if ENABLED(ARC_SUPPORT)
|
||||||
#define MIN_ARC_SEGMENT_MM 0.1 // (mm) Minimum length of each arc segment
|
#define MM_PER_ARC_SEGMENT 1 // (mm) Length (or minimum length) of each arc segment
|
||||||
#define MAX_ARC_SEGMENT_MM 1.0 // (mm) Maximum length of each arc segment
|
//#define ARC_SEGMENTS_PER_R 1 // Max segment length, MM_PER = Min
|
||||||
#define MIN_CIRCLE_SEGMENTS 72 // Minimum number of segments in a complete circle
|
#define MIN_ARC_SEGMENTS 24 // Minimum number of segments in a complete circle
|
||||||
//#define ARC_SEGMENTS_PER_SEC 50 // Use the feedrate to choose the segment length
|
//#define ARC_SEGMENTS_PER_SEC 50 // Use feedrate to choose segment length (with MM_PER_ARC_SEGMENT as the minimum)
|
||||||
#define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections
|
#define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections
|
||||||
//#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles
|
//#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles
|
||||||
|
//#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes
|
||||||
//#define SF_ARC_FIX // Enable only if using SkeinForge with "Arc Point" fillet procedure
|
//#define SF_ARC_FIX // Enable only if using SkeinForge with "Arc Point" fillet procedure
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// G5 Bézier Curve Support with XYZE destination and IJPQ offsets
|
// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
|
||||||
//#define BEZIER_CURVE_SUPPORT // Requires ~2666 bytes
|
//#define BEZIER_CURVE_SUPPORT
|
||||||
|
|
||||||
#if EITHER(ARC_SUPPORT, BEZIER_CURVE_SUPPORT)
|
|
||||||
//#define CNC_WORKSPACE_PLANES // Allow G2/G3/G5 to operate in XY, ZX, or YZ planes
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Direct Stepping
|
* Direct Stepping
|
||||||
@ -2406,7 +2283,6 @@
|
|||||||
*/
|
*/
|
||||||
//#define EVENT_GCODE_TOOLCHANGE_T0 "G28 A\nG1 A0" // Extra G-code to run while executing tool-change command T0
|
//#define EVENT_GCODE_TOOLCHANGE_T0 "G28 A\nG1 A0" // Extra G-code to run while executing tool-change command T0
|
||||||
//#define EVENT_GCODE_TOOLCHANGE_T1 "G1 A10" // Extra G-code to run while executing tool-change command T1
|
//#define EVENT_GCODE_TOOLCHANGE_T1 "G1 A10" // Extra G-code to run while executing tool-change command T1
|
||||||
//#define EVENT_GCODE_TOOLCHANGE_ALWAYS_RUN // Always execute above G-code sequences. Use with caution!
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tool Sensors detect when tools have been picked up or dropped.
|
* Tool Sensors detect when tools have been picked up or dropped.
|
||||||
@ -2429,7 +2305,7 @@
|
|||||||
// Longer prime to clean out a SINGLENOZZLE
|
// Longer prime to clean out a SINGLENOZZLE
|
||||||
#define TOOLCHANGE_FS_EXTRA_PRIME 0 // (mm) Extra priming length
|
#define TOOLCHANGE_FS_EXTRA_PRIME 0 // (mm) Extra priming length
|
||||||
#define TOOLCHANGE_FS_PRIME_SPEED (4.6*60) // (mm/min) Extra priming feedrate
|
#define TOOLCHANGE_FS_PRIME_SPEED (4.6*60) // (mm/min) Extra priming feedrate
|
||||||
#define TOOLCHANGE_FS_WIPE_RETRACT 0 // (mm) Retract before cooling for less stringing, better wipe, etc.
|
#define TOOLCHANGE_FS_WIPE_RETRACT 0 // (mm/min) Retract before cooling for less stringing, better wipe, etc.
|
||||||
|
|
||||||
// Cool after prime to reduce stringing
|
// Cool after prime to reduce stringing
|
||||||
#define TOOLCHANGE_FS_FAN -1 // Fan index or -1 to skip
|
#define TOOLCHANGE_FS_FAN -1 // Fan index or -1 to skip
|
||||||
@ -2489,7 +2365,7 @@
|
|||||||
// This short retract is done immediately, before parking the nozzle.
|
// This short retract is done immediately, before parking the nozzle.
|
||||||
#define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast.
|
#define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast.
|
||||||
#define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
|
#define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
|
||||||
#define FILAMENT_CHANGE_UNLOAD_LENGTH 95 // (mm) The length of filament for a complete unload.
|
#define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // (mm) The length of filament for a complete unload.
|
||||||
// For Bowden, the full length of the tube and nozzle.
|
// For Bowden, the full length of the tube and nozzle.
|
||||||
// For direct drive, the full length of the nozzle.
|
// For direct drive, the full length of the nozzle.
|
||||||
// Set to 0 for manual unloading.
|
// Set to 0 for manual unloading.
|
||||||
@ -2519,8 +2395,6 @@
|
|||||||
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
|
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
|
||||||
#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
|
#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
|
||||||
#define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
|
#define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
|
||||||
//#define FILAMENT_CHANGE_RESUME_ON_INSERT // Automatically continue / load filament when runout sensor is triggered again.
|
|
||||||
//#define PAUSE_REHEAT_FAST_RESUME // Reduce number of waits by not prompting again post-timeout before continuing.
|
|
||||||
|
|
||||||
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
|
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
|
||||||
//#define HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change
|
//#define HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change
|
||||||
@ -2690,7 +2564,6 @@
|
|||||||
#define X_RSENSE 0.11
|
#define X_RSENSE 0.11
|
||||||
#define X_CHAIN_POS -1 // -1..0: Not chained. 1: MCU MOSI connected. 2: Next in chain, ...
|
#define X_CHAIN_POS -1 // -1..0: Not chained. 1: MCU MOSI connected. 2: Next in chain, ...
|
||||||
//#define X_INTERPOLATE true // Enable to override 'INTERPOLATE' for the X axis
|
//#define X_INTERPOLATE true // Enable to override 'INTERPOLATE' for the X axis
|
||||||
//#define X_HOLD_MULTIPLIER 0.5 // Enable to override 'HOLD_MULTIPLIER' for the X axis
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(X2)
|
#if AXIS_IS_TMC(X2)
|
||||||
@ -2700,7 +2573,6 @@
|
|||||||
#define X2_RSENSE 0.11
|
#define X2_RSENSE 0.11
|
||||||
#define X2_CHAIN_POS -1
|
#define X2_CHAIN_POS -1
|
||||||
//#define X2_INTERPOLATE true
|
//#define X2_INTERPOLATE true
|
||||||
//#define X2_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(Y)
|
#if AXIS_IS_TMC(Y)
|
||||||
@ -2710,7 +2582,6 @@
|
|||||||
#define Y_RSENSE 0.11
|
#define Y_RSENSE 0.11
|
||||||
#define Y_CHAIN_POS -1
|
#define Y_CHAIN_POS -1
|
||||||
//#define Y_INTERPOLATE true
|
//#define Y_INTERPOLATE true
|
||||||
//#define Y_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(Y2)
|
#if AXIS_IS_TMC(Y2)
|
||||||
@ -2720,7 +2591,6 @@
|
|||||||
#define Y2_RSENSE 0.11
|
#define Y2_RSENSE 0.11
|
||||||
#define Y2_CHAIN_POS -1
|
#define Y2_CHAIN_POS -1
|
||||||
//#define Y2_INTERPOLATE true
|
//#define Y2_INTERPOLATE true
|
||||||
//#define Y2_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(Z)
|
#if AXIS_IS_TMC(Z)
|
||||||
@ -2730,7 +2600,6 @@
|
|||||||
#define Z_RSENSE 0.11
|
#define Z_RSENSE 0.11
|
||||||
#define Z_CHAIN_POS -1
|
#define Z_CHAIN_POS -1
|
||||||
//#define Z_INTERPOLATE true
|
//#define Z_INTERPOLATE true
|
||||||
//#define Z_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(Z2)
|
#if AXIS_IS_TMC(Z2)
|
||||||
@ -2740,7 +2609,6 @@
|
|||||||
#define Z2_RSENSE 0.11
|
#define Z2_RSENSE 0.11
|
||||||
#define Z2_CHAIN_POS -1
|
#define Z2_CHAIN_POS -1
|
||||||
//#define Z2_INTERPOLATE true
|
//#define Z2_INTERPOLATE true
|
||||||
//#define Z2_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(Z3)
|
#if AXIS_IS_TMC(Z3)
|
||||||
@ -2750,7 +2618,6 @@
|
|||||||
#define Z3_RSENSE 0.11
|
#define Z3_RSENSE 0.11
|
||||||
#define Z3_CHAIN_POS -1
|
#define Z3_CHAIN_POS -1
|
||||||
//#define Z3_INTERPOLATE true
|
//#define Z3_INTERPOLATE true
|
||||||
//#define Z3_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(Z4)
|
#if AXIS_IS_TMC(Z4)
|
||||||
@ -2760,7 +2627,6 @@
|
|||||||
#define Z4_RSENSE 0.11
|
#define Z4_RSENSE 0.11
|
||||||
#define Z4_CHAIN_POS -1
|
#define Z4_CHAIN_POS -1
|
||||||
//#define Z4_INTERPOLATE true
|
//#define Z4_INTERPOLATE true
|
||||||
//#define Z4_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(I)
|
#if AXIS_IS_TMC(I)
|
||||||
@ -2770,7 +2636,6 @@
|
|||||||
#define I_RSENSE 0.11
|
#define I_RSENSE 0.11
|
||||||
#define I_CHAIN_POS -1
|
#define I_CHAIN_POS -1
|
||||||
//#define I_INTERPOLATE true
|
//#define I_INTERPOLATE true
|
||||||
//#define I_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(J)
|
#if AXIS_IS_TMC(J)
|
||||||
@ -2780,7 +2645,6 @@
|
|||||||
#define J_RSENSE 0.11
|
#define J_RSENSE 0.11
|
||||||
#define J_CHAIN_POS -1
|
#define J_CHAIN_POS -1
|
||||||
//#define J_INTERPOLATE true
|
//#define J_INTERPOLATE true
|
||||||
//#define J_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(K)
|
#if AXIS_IS_TMC(K)
|
||||||
@ -2790,7 +2654,6 @@
|
|||||||
#define K_RSENSE 0.11
|
#define K_RSENSE 0.11
|
||||||
#define K_CHAIN_POS -1
|
#define K_CHAIN_POS -1
|
||||||
//#define K_INTERPOLATE true
|
//#define K_INTERPOLATE true
|
||||||
//#define K_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(E0)
|
#if AXIS_IS_TMC(E0)
|
||||||
@ -2799,7 +2662,6 @@
|
|||||||
#define E0_RSENSE 0.11
|
#define E0_RSENSE 0.11
|
||||||
#define E0_CHAIN_POS -1
|
#define E0_CHAIN_POS -1
|
||||||
//#define E0_INTERPOLATE true
|
//#define E0_INTERPOLATE true
|
||||||
//#define E0_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(E1)
|
#if AXIS_IS_TMC(E1)
|
||||||
@ -2808,7 +2670,6 @@
|
|||||||
#define E1_RSENSE 0.11
|
#define E1_RSENSE 0.11
|
||||||
#define E1_CHAIN_POS -1
|
#define E1_CHAIN_POS -1
|
||||||
//#define E1_INTERPOLATE true
|
//#define E1_INTERPOLATE true
|
||||||
//#define E1_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(E2)
|
#if AXIS_IS_TMC(E2)
|
||||||
@ -2817,7 +2678,6 @@
|
|||||||
#define E2_RSENSE 0.11
|
#define E2_RSENSE 0.11
|
||||||
#define E2_CHAIN_POS -1
|
#define E2_CHAIN_POS -1
|
||||||
//#define E2_INTERPOLATE true
|
//#define E2_INTERPOLATE true
|
||||||
//#define E2_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(E3)
|
#if AXIS_IS_TMC(E3)
|
||||||
@ -2826,7 +2686,6 @@
|
|||||||
#define E3_RSENSE 0.11
|
#define E3_RSENSE 0.11
|
||||||
#define E3_CHAIN_POS -1
|
#define E3_CHAIN_POS -1
|
||||||
//#define E3_INTERPOLATE true
|
//#define E3_INTERPOLATE true
|
||||||
//#define E3_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(E4)
|
#if AXIS_IS_TMC(E4)
|
||||||
@ -2835,7 +2694,6 @@
|
|||||||
#define E4_RSENSE 0.11
|
#define E4_RSENSE 0.11
|
||||||
#define E4_CHAIN_POS -1
|
#define E4_CHAIN_POS -1
|
||||||
//#define E4_INTERPOLATE true
|
//#define E4_INTERPOLATE true
|
||||||
//#define E4_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(E5)
|
#if AXIS_IS_TMC(E5)
|
||||||
@ -2844,7 +2702,6 @@
|
|||||||
#define E5_RSENSE 0.11
|
#define E5_RSENSE 0.11
|
||||||
#define E5_CHAIN_POS -1
|
#define E5_CHAIN_POS -1
|
||||||
//#define E5_INTERPOLATE true
|
//#define E5_INTERPOLATE true
|
||||||
//#define E5_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(E6)
|
#if AXIS_IS_TMC(E6)
|
||||||
@ -2853,7 +2710,6 @@
|
|||||||
#define E6_RSENSE 0.11
|
#define E6_RSENSE 0.11
|
||||||
#define E6_CHAIN_POS -1
|
#define E6_CHAIN_POS -1
|
||||||
//#define E6_INTERPOLATE true
|
//#define E6_INTERPOLATE true
|
||||||
//#define E6_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(E7)
|
#if AXIS_IS_TMC(E7)
|
||||||
@ -2862,7 +2718,6 @@
|
|||||||
#define E7_RSENSE 0.11
|
#define E7_RSENSE 0.11
|
||||||
#define E7_CHAIN_POS -1
|
#define E7_CHAIN_POS -1
|
||||||
//#define E7_INTERPOLATE true
|
//#define E7_INTERPOLATE true
|
||||||
//#define E7_HOLD_MULTIPLIER 0.5
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2975,9 +2830,6 @@
|
|||||||
//#define CHOPPER_TIMING_Z2 CHOPPER_TIMING_Z
|
//#define CHOPPER_TIMING_Z2 CHOPPER_TIMING_Z
|
||||||
//#define CHOPPER_TIMING_Z3 CHOPPER_TIMING_Z
|
//#define CHOPPER_TIMING_Z3 CHOPPER_TIMING_Z
|
||||||
//#define CHOPPER_TIMING_Z4 CHOPPER_TIMING_Z
|
//#define CHOPPER_TIMING_Z4 CHOPPER_TIMING_Z
|
||||||
//#define CHOPPER_TIMING_I CHOPPER_TIMING
|
|
||||||
//#define CHOPPER_TIMING_J CHOPPER_TIMING
|
|
||||||
//#define CHOPPER_TIMING_K CHOPPER_TIMING
|
|
||||||
//#define CHOPPER_TIMING_E CHOPPER_TIMING // For Extruders (override below)
|
//#define CHOPPER_TIMING_E CHOPPER_TIMING // For Extruders (override below)
|
||||||
//#define CHOPPER_TIMING_E1 CHOPPER_TIMING_E
|
//#define CHOPPER_TIMING_E1 CHOPPER_TIMING_E
|
||||||
//#define CHOPPER_TIMING_E2 CHOPPER_TIMING_E
|
//#define CHOPPER_TIMING_E2 CHOPPER_TIMING_E
|
||||||
@ -3441,13 +3293,11 @@
|
|||||||
//#define SPINDLE_FEATURE
|
//#define SPINDLE_FEATURE
|
||||||
//#define LASER_FEATURE
|
//#define LASER_FEATURE
|
||||||
#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)
|
#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)
|
||||||
#define SPINDLE_LASER_ACTIVE_STATE LOW // Set to "HIGH" if SPINDLE_LASER_ENA_PIN is active HIGH
|
#define SPINDLE_LASER_ACTIVE_STATE LOW // Set to "HIGH" if the on/off function is active HIGH
|
||||||
|
#define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power
|
||||||
#define SPINDLE_LASER_USE_PWM // Enable if your controller supports setting the speed/power
|
|
||||||
#if ENABLED(SPINDLE_LASER_USE_PWM)
|
|
||||||
#define SPINDLE_LASER_PWM_INVERT false // Set to "true" if the speed/power goes up when you want it to go slower
|
#define SPINDLE_LASER_PWM_INVERT false // Set to "true" if the speed/power goes up when you want it to go slower
|
||||||
|
|
||||||
#define SPINDLE_LASER_FREQUENCY 2500 // (Hz) Spindle/laser frequency (only on supported HALs: AVR and LPC)
|
#define SPINDLE_LASER_FREQUENCY 2500 // (Hz) Spindle/laser frequency (only on supported HALs: AVR and LPC)
|
||||||
#endif
|
|
||||||
|
|
||||||
//#define AIR_EVACUATION // Cutter Vacuum / Laser Blower motor control with G-codes M10-M11
|
//#define AIR_EVACUATION // Cutter Vacuum / Laser Blower motor control with G-codes M10-M11
|
||||||
#if ENABLED(AIR_EVACUATION)
|
#if ENABLED(AIR_EVACUATION)
|
||||||
@ -3503,21 +3353,17 @@
|
|||||||
* Speed/Power = (PWMDC / 255 * 100 - SPEED_POWER_INTERCEPT) / SPEED_POWER_SLOPE
|
* Speed/Power = (PWMDC / 255 * 100 - SPEED_POWER_INTERCEPT) / SPEED_POWER_SLOPE
|
||||||
* PWMDC = (spdpwr - SPEED_POWER_MIN) / (SPEED_POWER_MAX - SPEED_POWER_MIN) / SPEED_POWER_SLOPE
|
* PWMDC = (spdpwr - SPEED_POWER_MIN) / (SPEED_POWER_MAX - SPEED_POWER_MIN) / SPEED_POWER_SLOPE
|
||||||
*/
|
*/
|
||||||
#if ENABLED(SPINDLE_LASER_USE_PWM)
|
|
||||||
#define SPEED_POWER_INTERCEPT 0 // (%) 0-100 i.e., Minimum power percentage
|
#define SPEED_POWER_INTERCEPT 0 // (%) 0-100 i.e., Minimum power percentage
|
||||||
#define SPEED_POWER_MIN 5000 // (RPM)
|
#define SPEED_POWER_MIN 5000 // (RPM)
|
||||||
#define SPEED_POWER_MAX 30000 // (RPM) SuperPID router controller 0 - 30,000 RPM
|
#define SPEED_POWER_MAX 30000 // (RPM) SuperPID router controller 0 - 30,000 RPM
|
||||||
#define SPEED_POWER_STARTUP 25000 // (RPM) M3/M4 speed/power default (with no arguments)
|
#define SPEED_POWER_STARTUP 25000 // (RPM) M3/M4 speed/power default (with no arguments)
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#if ENABLED(SPINDLE_LASER_USE_PWM)
|
|
||||||
#define SPEED_POWER_INTERCEPT 0 // (%) 0-100 i.e., Minimum power percentage
|
#define SPEED_POWER_INTERCEPT 0 // (%) 0-100 i.e., Minimum power percentage
|
||||||
#define SPEED_POWER_MIN 0 // (%) 0-100
|
#define SPEED_POWER_MIN 0 // (%) 0-100
|
||||||
#define SPEED_POWER_MAX 100 // (%) 0-100
|
#define SPEED_POWER_MAX 100 // (%) 0-100
|
||||||
#define SPEED_POWER_STARTUP 80 // (%) M3/M4 speed/power default (with no arguments)
|
#define SPEED_POWER_STARTUP 80 // (%) M3/M4 speed/power default (with no arguments)
|
||||||
#endif
|
|
||||||
|
|
||||||
// Define the minimum and maximum test pulse time values for a laser test fire function
|
// Define the minimum and maximum test pulse time values for a laser test fire function
|
||||||
#define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
|
#define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
|
||||||
@ -3710,12 +3556,6 @@
|
|||||||
*/
|
*/
|
||||||
//#define CNC_COORDINATE_SYSTEMS
|
//#define CNC_COORDINATE_SYSTEMS
|
||||||
|
|
||||||
/**
|
|
||||||
* Auto-report fan speed with M123 S<seconds>
|
|
||||||
* Requires fans with tachometer pins
|
|
||||||
*/
|
|
||||||
//#define AUTO_REPORT_FANS
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Auto-report temperatures with M155 S<seconds>
|
* Auto-report temperatures with M155 S<seconds>
|
||||||
*/
|
*/
|
||||||
@ -3957,10 +3797,8 @@
|
|||||||
*/
|
*/
|
||||||
#define HOST_ACTION_COMMANDS
|
#define HOST_ACTION_COMMANDS
|
||||||
#if ENABLED(HOST_ACTION_COMMANDS)
|
#if ENABLED(HOST_ACTION_COMMANDS)
|
||||||
//#define HOST_PAUSE_M76
|
|
||||||
#define HOST_PROMPT_SUPPORT
|
#define HOST_PROMPT_SUPPORT
|
||||||
//#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start
|
//#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start
|
||||||
//#define HOST_SHUTDOWN_MENU_ITEM // Add a menu item that tells the host to shut down
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -4048,7 +3886,7 @@
|
|||||||
*/
|
*/
|
||||||
#define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks.
|
#define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks.
|
||||||
|
|
||||||
// Use a rolling average to identify persistent errors that indicate skips, as opposed to vibration and noise.
|
// Use a rolling average to identify persistant errors that indicate skips, as opposed to vibration and noise.
|
||||||
#define I2CPE_ERR_ROLLING_AVERAGE
|
#define I2CPE_ERR_ROLLING_AVERAGE
|
||||||
|
|
||||||
#endif // I2C_POSITION_ENCODERS
|
#endif // I2C_POSITION_ENCODERS
|
||||||
@ -4314,14 +4152,6 @@
|
|||||||
// Enable Marlin dev mode which adds some special commands
|
// Enable Marlin dev mode which adds some special commands
|
||||||
//#define MARLIN_DEV_MODE
|
//#define MARLIN_DEV_MODE
|
||||||
|
|
||||||
#if ENABLED(MARLIN_DEV_MODE)
|
|
||||||
/**
|
|
||||||
* D576 - Buffer Monitoring
|
|
||||||
* To help diagnose print quality issues stemming from empty command buffers.
|
|
||||||
*/
|
|
||||||
//#define BUFFER_MONITORING
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Postmortem Debugging captures misbehavior and outputs the CPU status and backtrace to serial.
|
* Postmortem Debugging captures misbehavior and outputs the CPU status and backtrace to serial.
|
||||||
* When running in the debugger it will break for debugging. This is useful to help understand
|
* When running in the debugger it will break for debugging. This is useful to help understand
|
||||||
@ -4334,6 +4164,3 @@
|
|||||||
*/
|
*/
|
||||||
//#define SOFT_RESET_VIA_SERIAL // 'KILL' and '^X' commands will soft-reset the controller
|
//#define SOFT_RESET_VIA_SERIAL // 'KILL' and '^X' commands will soft-reset the controller
|
||||||
//#define SOFT_RESET_ON_KILL // Use a digital button to soft-reset the controller after KILL
|
//#define SOFT_RESET_ON_KILL // Use a digital button to soft-reset the controller after KILL
|
||||||
|
|
||||||
// Report uncleaned reset reason from register r2 instead of MCUSR. Supported by Optiboot on AVR.
|
|
||||||
//#define OPTIBOOT_RESET_REASON
|
|
||||||
|
175
Marlin/Makefile
175
Marlin/Makefile
@ -110,7 +110,7 @@ LIQUID_TWI2 ?= 0
|
|||||||
WIRE ?= 0
|
WIRE ?= 0
|
||||||
|
|
||||||
# This defines if Tone is needed (i.e SPEAKER is defined in Configuration.h)
|
# This defines if Tone is needed (i.e SPEAKER is defined in Configuration.h)
|
||||||
# Disabling this (and SPEAKER) saves approximately 350 bytes of memory.
|
# Disabling this (and SPEAKER) saves approximatively 350 bytes of memory.
|
||||||
TONE ?= 1
|
TONE ?= 1
|
||||||
|
|
||||||
# This defines if U8GLIB is needed (may require RELOC_WORKAROUND)
|
# This defines if U8GLIB is needed (may require RELOC_WORKAROUND)
|
||||||
@ -191,134 +191,6 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1034)
|
|||||||
# RAMPS Derivatives - ATmega1280, ATmega2560
|
# RAMPS Derivatives - ATmega1280, ATmega2560
|
||||||
#
|
#
|
||||||
|
|
||||||
# 3Drag Controller
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1100)
|
|
||||||
# Velleman K8200 Controller (derived from 3Drag Controller)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1101)
|
|
||||||
# Velleman K8400 Controller (derived from 3Drag Controller)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1102)
|
|
||||||
# Velleman K8600 Controller (Vertex Nano)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1103)
|
|
||||||
# Velleman K8800 Controller (Vertex Delta)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1104)
|
|
||||||
# 2PrintBeta BAM&DICE with STK drivers
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1105)
|
|
||||||
# 2PrintBeta BAM&DICE Due with STK drivers
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1106)
|
|
||||||
# MKS BASE v1.0
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1107)
|
|
||||||
# MKS BASE v1.4 with Allegro A4982 stepper drivers
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1108)
|
|
||||||
# MKS BASE v1.5 with Allegro A4982 stepper drivers
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1109)
|
|
||||||
# MKS BASE v1.6 with Allegro A4982 stepper drivers
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1110)
|
|
||||||
# MKS BASE 1.0 with Heroic HR4982 stepper drivers
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1111)
|
|
||||||
# MKS GEN v1.3 or 1.4
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1112)
|
|
||||||
# MKS GEN L
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1113)
|
|
||||||
# BigTreeTech or BIQU KFB2.0
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1114)
|
|
||||||
# zrib V2.0 (Chinese RAMPS replica)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1115)
|
|
||||||
# zrib V5.2 (Chinese RAMPS replica)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1116)
|
|
||||||
# Felix 2.0+ Electronics Board (RAMPS like)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1117)
|
|
||||||
# Invent-A-Part RigidBoard
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1118)
|
|
||||||
# Invent-A-Part RigidBoard V2
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1119)
|
|
||||||
# Sainsmart 2-in-1 board
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1120)
|
|
||||||
# Ultimaker
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1121)
|
|
||||||
# Ultimaker (Older electronics. Pre 1.5.4. This is rare)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1122)
|
|
||||||
MCU ?= atmega1280
|
|
||||||
PROG_MCU ?= m1280
|
|
||||||
# Azteeg X3
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1123)
|
|
||||||
# Azteeg X3 Pro
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1124)
|
|
||||||
# Ultimainboard 2.x (Uses TEMP_SENSOR 20)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1125)
|
|
||||||
# Rumba
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1126)
|
|
||||||
# Raise3D N series Rumba derivative
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1127)
|
|
||||||
# Rapide Lite 200 (v1, low-cost RUMBA clone with drv)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1128)
|
|
||||||
# Formbot T-Rex 2 Plus
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1129)
|
|
||||||
# Formbot T-Rex 3
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1130)
|
|
||||||
# Formbot Raptor
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1131)
|
|
||||||
# Formbot Raptor 2
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1132)
|
|
||||||
# bq ZUM Mega 3D
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1133)
|
|
||||||
# MakeBoard Mini v2.1.2 by MicroMake
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1134)
|
|
||||||
# TriGorilla Anycubic version 1.3-based on RAMPS EFB
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1135)
|
|
||||||
# ... Ver 1.4
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1136)
|
|
||||||
# ... Rev 1.1 (new servo pin order)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1137)
|
|
||||||
# Creality: Ender-4, CR-8
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1138)
|
|
||||||
# Creality: CR10S, CR20, CR-X
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1139)
|
|
||||||
# Dagoma F5
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1140)
|
|
||||||
# FYSETC F6 1.3
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1141)
|
|
||||||
# FYSETC F6 1.4
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1142)
|
|
||||||
# Wanhao Duplicator i3 Plus
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1143)
|
|
||||||
# VORON Design
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1144)
|
|
||||||
# Tronxy TRONXY-V3-1.0
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1145)
|
|
||||||
# Z-Bolt X Series
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1146)
|
|
||||||
# TT OSCAR
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1147)
|
|
||||||
# Overlord/Overlord Pro
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1148)
|
|
||||||
# ADIMLab Gantry v1
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1149)
|
|
||||||
# ADIMLab Gantry v2
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1150)
|
|
||||||
# BIQU Tango V1
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1151)
|
|
||||||
# MKS GEN L V2
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1152)
|
|
||||||
# MKS GEN L V2.1
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1153)
|
|
||||||
# Copymaster 3D
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1154)
|
|
||||||
# Ortur 4
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1155)
|
|
||||||
# Tenlog D3 Hero IDEX printer
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1156)
|
|
||||||
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Fan, Bed)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1157)
|
|
||||||
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Hotend2, Bed)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1158)
|
|
||||||
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend, Fan0, Fan1, Bed)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1159)
|
|
||||||
# Longer LK1 PRO / Alfawise U20 Pro (PRO version)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1160)
|
|
||||||
# Longer LKx PRO / Alfawise Uxx Pro (PRO version)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1161)
|
|
||||||
|
|
||||||
|
|
||||||
# 3Drag Controller
|
# 3Drag Controller
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1100)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1100)
|
||||||
# Velleman K8200 Controller (derived from 3Drag Controller)
|
# Velleman K8200 Controller (derived from 3Drag Controller)
|
||||||
@ -486,38 +358,20 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1311)
|
|||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1312)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1312)
|
||||||
# Mega controller
|
# Mega controller
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1313)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1313)
|
||||||
# Geeetech GT2560 Rev A
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1314)
|
|
||||||
# Geeetech GT2560 Rev A+ (with auto level probe)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1315)
|
|
||||||
# Geeetech GT2560 Rev B
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1316)
|
|
||||||
# Geeetech GT2560 Rev B for A10(M/T/D)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1317)
|
|
||||||
# Geeetech GT2560 Rev B for A10(M/T/D)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1318)
|
|
||||||
# Geeetech GT2560 Rev B for Mecreator2
|
# Geeetech GT2560 Rev B for Mecreator2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1319)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1314)
|
||||||
# Geeetech GT2560 Rev B for A20(M/T/D)
|
# Geeetech GT2560 Rev. A
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1320)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1315)
|
||||||
|
# Geeetech GT2560 Rev. A+ (with auto level probe)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1316)
|
||||||
|
# Geeetech GT2560 Rev B for A10(M/D)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1317)
|
||||||
|
# Geeetech GT2560 Rev B for A20(M/D)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1318)
|
||||||
# Einstart retrofit
|
# Einstart retrofit
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1321)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1319)
|
||||||
# Wanhao 0ne+ i3 Mini
|
# Wanhao 0ne+ i3 Mini
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1322)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1320)
|
||||||
# Leapfrog Xeed 2015
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1323)
|
|
||||||
# PICA Shield (original version)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1324)
|
|
||||||
# PICA Shield (rev C or later)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1325)
|
|
||||||
# Intamsys 4.0 (Funmat HT)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1326)
|
|
||||||
# Malyan M180 Mainboard Version 2 (no display function, direct gcode only)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1327)
|
|
||||||
# Geeetech GT2560 Rev B for A20(M/T/D)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1328)
|
|
||||||
# Mega controller & Protoneer CNC Shield V3.00
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1329)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# ATmega1281, ATmega2561
|
# ATmega1281, ATmega2561
|
||||||
@ -591,11 +445,6 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1510)
|
|||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
PROG_MCU ?= m1284p
|
PROG_MCU ?= m1284p
|
||||||
# ZoneStar ZMIB V2
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1511)
|
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
|
||||||
MCU ?= atmega1284p
|
|
||||||
PROG_MCU ?= m1284p
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Other ATmega644P, ATmega644, ATmega1284P
|
# Other ATmega644P, ATmega644, ATmega1284P
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin release version identifier
|
* Marlin release version identifier
|
||||||
*/
|
*/
|
||||||
//#define SHORT_BUILD_VERSION "2.0.9.3"
|
//#define SHORT_BUILD_VERSION "2.0.9.1"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verbose version identifier which should contain a reference to the location
|
* Verbose version identifier which should contain a reference to the location
|
||||||
@ -41,7 +41,7 @@
|
|||||||
* here we define this default string as the date where the latest release
|
* here we define this default string as the date where the latest release
|
||||||
* version was tagged.
|
* version was tagged.
|
||||||
*/
|
*/
|
||||||
//#define STRING_DISTRIBUTION_DATE "2021-12-25"
|
//#define STRING_DISTRIBUTION_DATE "2021-06-27"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
||||||
|
@ -35,31 +35,12 @@
|
|||||||
// Public Variables
|
// Public Variables
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
// Don't initialize/override variable (which would happen in .init4)
|
//uint8_t MCUSR;
|
||||||
uint8_t reset_reason __attribute__((section(".noinit")));
|
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
// Public functions
|
// Public functions
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
__attribute__((naked)) // Don't output function pro- and epilogue
|
|
||||||
__attribute__((used)) // Output the function, even if "not used"
|
|
||||||
__attribute__((section(".init3"))) // Put in an early user definable section
|
|
||||||
void HAL_save_reset_reason() {
|
|
||||||
#if ENABLED(OPTIBOOT_RESET_REASON)
|
|
||||||
__asm__ __volatile__(
|
|
||||||
A("STS %0, r2")
|
|
||||||
: "=m"(reset_reason)
|
|
||||||
);
|
|
||||||
#else
|
|
||||||
reset_reason = MCUSR;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Clear within 16ms since WDRF bit enables a 16ms watchdog timer -> Boot loop
|
|
||||||
MCUSR = 0;
|
|
||||||
wdt_disable();
|
|
||||||
}
|
|
||||||
|
|
||||||
void HAL_init() {
|
void HAL_init() {
|
||||||
// Init Servo Pins
|
// Init Servo Pins
|
||||||
#define INIT_SERVO(N) OUT_WRITE(SERVO##N##_PIN, LOW)
|
#define INIT_SERVO(N) OUT_WRITE(SERVO##N##_PIN, LOW)
|
||||||
|
@ -39,19 +39,6 @@
|
|||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
|
||||||
//
|
|
||||||
// Default graphical display delays
|
|
||||||
//
|
|
||||||
#if F_CPU >= 20000000
|
|
||||||
#define CPU_ST7920_DELAY_1 150
|
|
||||||
#define CPU_ST7920_DELAY_2 0
|
|
||||||
#define CPU_ST7920_DELAY_3 150
|
|
||||||
#elif F_CPU == 16000000
|
|
||||||
#define CPU_ST7920_DELAY_1 125
|
|
||||||
#define CPU_ST7920_DELAY_2 0
|
|
||||||
#define CPU_ST7920_DELAY_3 188
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef pgm_read_ptr
|
#ifndef pgm_read_ptr
|
||||||
// Compatibility for avr-libc 1.8.0-4.1 included with Ubuntu for
|
// Compatibility for avr-libc 1.8.0-4.1 included with Ubuntu for
|
||||||
// Windows Subsystem for Linux on Windows 10 as of 10/18/2019
|
// Windows Subsystem for Linux on Windows 10 as of 10/18/2019
|
||||||
@ -91,7 +78,7 @@ typedef int8_t pin_t;
|
|||||||
// Public Variables
|
// Public Variables
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
extern uint8_t reset_reason;
|
//extern uint8_t MCUSR;
|
||||||
|
|
||||||
// Serial ports
|
// Serial ports
|
||||||
#ifdef USBCON
|
#ifdef USBCON
|
||||||
@ -152,19 +139,21 @@ void HAL_init();
|
|||||||
|
|
||||||
//void _delay_ms(const int delay);
|
//void _delay_ms(const int delay);
|
||||||
|
|
||||||
inline void HAL_clear_reset_source() { }
|
inline void HAL_clear_reset_source() { MCUSR = 0; }
|
||||||
inline uint8_t HAL_get_reset_source() { return reset_reason; }
|
inline uint8_t HAL_get_reset_source() { return MCUSR; }
|
||||||
|
|
||||||
void HAL_reboot();
|
void HAL_reboot();
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#if GCC_VERSION <= 50000
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wunused-function"
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern "C" int freeMemory();
|
extern "C" int freeMemory();
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
// ADC
|
// ADC
|
||||||
#ifdef DIDR2
|
#ifdef DIDR2
|
||||||
@ -221,7 +210,7 @@ void set_pwm_frequency(const pin_t pin, int f_desired);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* set_pwm_duty
|
* set_pwm_duty
|
||||||
* Set the PWM duty cycle of the provided pin to the provided value
|
* Sets the PWM duty cycle of the provided pin to the provided value
|
||||||
* Optionally allows inverting the duty cycle [default = false]
|
* Optionally allows inverting the duty cycle [default = false]
|
||||||
* Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255]
|
* Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255]
|
||||||
*/
|
*/
|
||||||
|
@ -34,9 +34,7 @@
|
|||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
void spiBegin() {
|
void spiBegin() {
|
||||||
#if PIN_EXISTS(SD_SS)
|
|
||||||
OUT_WRITE(SD_SS_PIN, HIGH);
|
OUT_WRITE(SD_SS_PIN, HIGH);
|
||||||
#endif
|
|
||||||
SET_OUTPUT(SD_SCK_PIN);
|
SET_OUTPUT(SD_SCK_PIN);
|
||||||
SET_INPUT(SD_MISO_PIN);
|
SET_INPUT(SD_MISO_PIN);
|
||||||
SET_OUTPUT(SD_MOSI_PIN);
|
SET_OUTPUT(SD_MOSI_PIN);
|
||||||
@ -76,8 +74,7 @@ void spiBegin() {
|
|||||||
#elif defined(PRR0)
|
#elif defined(PRR0)
|
||||||
PRR0
|
PRR0
|
||||||
#endif
|
#endif
|
||||||
, PRSPI
|
, PRSPI);
|
||||||
);
|
|
||||||
|
|
||||||
SPCR = _BV(SPE) | _BV(MSTR) | (spiRate >> 1);
|
SPCR = _BV(SPE) | _BV(MSTR) | (spiRate >> 1);
|
||||||
SPSR = spiRate & 1 || spiRate == 6 ? 0 : _BV(SPI2X);
|
SPSR = spiRate & 1 || spiRate == 6 ? 0 : _BV(SPI2X);
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
||||||
*
|
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program 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 program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <SPI.h>
|
|
||||||
|
|
||||||
using MarlinSPI = SPIClass;
|
|
@ -217,7 +217,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum { HasEmergencyParser = Cfg::EMERGENCYPARSER };
|
enum { HasEmergencyParser = Cfg::EMERGENCYPARSER };
|
||||||
static bool emergency_parser_enabled() { return Cfg::EMERGENCYPARSER; }
|
static inline bool emergency_parser_enabled() { return Cfg::EMERGENCYPARSER; }
|
||||||
|
|
||||||
FORCE_INLINE static uint8_t dropped() { return Cfg::DROPPED_RX ? rx_dropped_bytes : 0; }
|
FORCE_INLINE static uint8_t dropped() { return Cfg::DROPPED_RX ? rx_dropped_bytes : 0; }
|
||||||
FORCE_INLINE static uint8_t buffer_overruns() { return Cfg::RX_OVERRUNS ? rx_buffer_overruns : 0; }
|
FORCE_INLINE static uint8_t buffer_overruns() { return Cfg::RX_OVERRUNS ? rx_buffer_overruns : 0; }
|
||||||
|
@ -22,10 +22,11 @@
|
|||||||
#ifdef __AVR__
|
#ifdef __AVR__
|
||||||
|
|
||||||
#include "../../inc/MarlinConfigPre.h"
|
#include "../../inc/MarlinConfigPre.h"
|
||||||
#include "HAL.h"
|
|
||||||
|
|
||||||
#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM
|
#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM
|
||||||
|
|
||||||
|
#include "HAL.h"
|
||||||
|
|
||||||
struct Timer {
|
struct Timer {
|
||||||
volatile uint8_t* TCCRnQ[3]; // max 3 TCCR registers per timer
|
volatile uint8_t* TCCRnQ[3]; // max 3 TCCR registers per timer
|
||||||
volatile uint16_t* OCRnQ[3]; // max 3 OCR registers per timer
|
volatile uint16_t* OCRnQ[3]; // max 3 OCR registers per timer
|
||||||
@ -54,8 +55,8 @@ Timer get_pwm_timer(const pin_t pin) {
|
|||||||
case TIMER1A: case TIMER1B:
|
case TIMER1A: case TIMER1B:
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
#if HAS_TCCR2 || defined(TCCR2A)
|
#if defined(TCCR2) || defined(TCCR2A)
|
||||||
#if HAS_TCCR2
|
#ifdef TCCR2
|
||||||
case TIMER2: {
|
case TIMER2: {
|
||||||
Timer timer = {
|
Timer timer = {
|
||||||
/*TCCRnQ*/ { &TCCR2, nullptr, nullptr },
|
/*TCCRnQ*/ { &TCCR2, nullptr, nullptr },
|
||||||
@ -152,7 +153,7 @@ Timer get_pwm_timer(const pin_t pin) {
|
|||||||
|
|
||||||
void set_pwm_frequency(const pin_t pin, int f_desired) {
|
void set_pwm_frequency(const pin_t pin, int f_desired) {
|
||||||
Timer timer = get_pwm_timer(pin);
|
Timer timer = get_pwm_timer(pin);
|
||||||
if (timer.n == 0) return; // Don't proceed if protected timer or not recognized
|
if (timer.n == 0) return; // Don't proceed if protected timer or not recognised
|
||||||
uint16_t size;
|
uint16_t size;
|
||||||
if (timer.n == 2) size = 255; else size = 65535;
|
if (timer.n == 2) size = 255; else size = 65535;
|
||||||
|
|
||||||
@ -200,10 +201,16 @@ void set_pwm_frequency(const pin_t pin, int f_desired) {
|
|||||||
res = res_temp_fast;
|
res = res_temp_fast;
|
||||||
j = i;
|
j = i;
|
||||||
// Set the Wave Generation Mode to FAST PWM
|
// Set the Wave Generation Mode to FAST PWM
|
||||||
if (timer.n == 2)
|
if (timer.n == 2) {
|
||||||
wgm = TERN(USE_OCR2A_AS_TOP, WGM2_FAST_PWM_OCR2A, WGM2_FAST_PWM);
|
wgm = (
|
||||||
else
|
#if ENABLED(USE_OCR2A_AS_TOP)
|
||||||
wgm = WGM_FAST_PWM_ICRn;
|
WGM2_FAST_PWM_OCR2A
|
||||||
|
#else
|
||||||
|
WGM2_FAST_PWM
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else wgm = WGM_FAST_PWM_ICRn;
|
||||||
}
|
}
|
||||||
// If PHASE CORRECT values are closes to desired f
|
// If PHASE CORRECT values are closes to desired f
|
||||||
else if (f_phase_diff < f_diff) {
|
else if (f_phase_diff < f_diff) {
|
||||||
@ -211,10 +218,16 @@ void set_pwm_frequency(const pin_t pin, int f_desired) {
|
|||||||
res = res_temp_phase_correct;
|
res = res_temp_phase_correct;
|
||||||
j = i;
|
j = i;
|
||||||
// Set the Wave Generation Mode to PWM PHASE CORRECT
|
// Set the Wave Generation Mode to PWM PHASE CORRECT
|
||||||
if (timer.n == 2)
|
if (timer.n == 2) {
|
||||||
wgm = TERN(USE_OCR2A_AS_TOP, WGM2_PWM_PC_OCR2A, WGM2_FAST_PWM);
|
wgm = (
|
||||||
else
|
#if ENABLED(USE_OCR2A_AS_TOP)
|
||||||
wgm = WGM_PWM_PC_ICRn;
|
WGM2_PWM_PC_OCR2A
|
||||||
|
#else
|
||||||
|
WGM2_PWM_PC
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else wgm = WGM_PWM_PC_ICRn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -222,17 +235,15 @@ void set_pwm_frequency(const pin_t pin, int f_desired) {
|
|||||||
_SET_CSn(timer.TCCRnQ, j);
|
_SET_CSn(timer.TCCRnQ, j);
|
||||||
|
|
||||||
if (timer.n == 2) {
|
if (timer.n == 2) {
|
||||||
TERN_(USE_OCR2A_AS_TOP, _SET_OCRnQ(timer.OCRnQ, 0, res)); // Set OCR2A value (TOP) = res
|
#if ENABLED(USE_OCR2A_AS_TOP)
|
||||||
|
_SET_OCRnQ(timer.OCRnQ, 0, res); // Set OCR2A value (TOP) = res
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_SET_ICRn(timer.ICRn, res); // Set ICRn value (TOP) = res
|
_SET_ICRn(timer.ICRn, res); // Set ICRn value (TOP) = res
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // NEEDS_HARDWARE_PWM
|
|
||||||
|
|
||||||
void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) {
|
void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) {
|
||||||
#if NEEDS_HARDWARE_PWM
|
|
||||||
|
|
||||||
// If v is 0 or v_size (max), digitalWrite to LOW or HIGH.
|
// If v is 0 or v_size (max), digitalWrite to LOW or HIGH.
|
||||||
// Note that digitalWrite also disables pwm output for us (sets COM bit to 0)
|
// Note that digitalWrite also disables pwm output for us (sets COM bit to 0)
|
||||||
if (v == 0)
|
if (v == 0)
|
||||||
@ -241,20 +252,31 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255
|
|||||||
digitalWrite(pin, !invert);
|
digitalWrite(pin, !invert);
|
||||||
else {
|
else {
|
||||||
Timer timer = get_pwm_timer(pin);
|
Timer timer = get_pwm_timer(pin);
|
||||||
if (timer.n == 0) return; // Don't proceed if protected timer or not recognized
|
if (timer.n == 0) return; // Don't proceed if protected timer or not recognised
|
||||||
// Set compare output mode to CLEAR -> SET or SET -> CLEAR (if inverted)
|
// Set compare output mode to CLEAR -> SET or SET -> CLEAR (if inverted)
|
||||||
_SET_COMnQ(timer.TCCRnQ, timer.q TERN_(HAS_TCCR2, + (timer.q == 2)), COM_CLEAR_SET + invert); // COM20 is on bit 4 of TCCR2, so +1 for q==2
|
_SET_COMnQ(timer.TCCRnQ, (timer.q
|
||||||
const uint16_t top = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, *timer.OCRnQ[0], 255) : *timer.ICRn;
|
#ifdef TCCR2
|
||||||
_SET_OCRnQ(timer.OCRnQ, timer.q, uint16_t(uint32_t(v) * top / v_size)); // Scale 8/16-bit v to top value
|
+ (timer.q == 2) // COM20 is on bit 4 of TCCR2, thus requires q + 1 in the macro
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
analogWrite(pin, v);
|
|
||||||
UNUSED(v_size);
|
|
||||||
UNUSED(invert);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
), COM_CLEAR_SET + invert
|
||||||
|
);
|
||||||
|
|
||||||
|
uint16_t top;
|
||||||
|
if (timer.n == 2) { // if TIMER2
|
||||||
|
top = (
|
||||||
|
#if ENABLED(USE_OCR2A_AS_TOP)
|
||||||
|
*timer.OCRnQ[0] // top = OCR2A
|
||||||
|
#else
|
||||||
|
255 // top = 0xFF (max)
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
top = *timer.ICRn; // top = ICRn
|
||||||
|
|
||||||
|
_SET_OCRnQ(timer.OCRnQ, timer.q, v * float(top) / float(v_size)); // Scale 8/16-bit v to top value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // NEEDS_HARDWARE_PWM
|
||||||
#endif // __AVR__
|
#endif // __AVR__
|
||||||
|
@ -267,11 +267,11 @@ uint16_t set_pwm_frequency_hz(const_float_t hz, const float dca, const float dcb
|
|||||||
SET_WGM(5, FAST_PWM_ICRn); // Fast PWM with ICR5 as TOP
|
SET_WGM(5, FAST_PWM_ICRn); // Fast PWM with ICR5 as TOP
|
||||||
|
|
||||||
//SERIAL_ECHOLNPGM("Timer 5 Settings:");
|
//SERIAL_ECHOLNPGM("Timer 5 Settings:");
|
||||||
//SERIAL_ECHOLNPGM(" Prescaler=", prescaler);
|
//SERIAL_ECHOLNPAIR(" Prescaler=", prescaler);
|
||||||
//SERIAL_ECHOLNPGM(" TOP=", ICR5);
|
//SERIAL_ECHOLNPAIR(" TOP=", ICR5);
|
||||||
//SERIAL_ECHOLNPGM(" OCR5A=", OCR5A);
|
//SERIAL_ECHOLNPAIR(" OCR5A=", OCR5A);
|
||||||
//SERIAL_ECHOLNPGM(" OCR5B=", OCR5B);
|
//SERIAL_ECHOLNPAIR(" OCR5B=", OCR5B);
|
||||||
//SERIAL_ECHOLNPGM(" OCR5C=", OCR5C);
|
//SERIAL_ECHOLNPAIR(" OCR5C=", OCR5C);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Restore the default for Timer 5
|
// Restore the default for Timer 5
|
||||||
|
@ -211,32 +211,32 @@ enum ClockSource2 : char {
|
|||||||
|
|
||||||
// Set Clock Select bits
|
// Set Clock Select bits
|
||||||
// Ex: SET_CS3(PRESCALER_64);
|
// Ex: SET_CS3(PRESCALER_64);
|
||||||
#ifdef TCCR2
|
|
||||||
#define HAS_TCCR2 1
|
|
||||||
#endif
|
|
||||||
#define _SET_CS(T,V) (TCCR##T##B = (TCCR##T##B & ~(0x7 << CS##T##0)) | ((int(V) & 0x7) << CS##T##0))
|
#define _SET_CS(T,V) (TCCR##T##B = (TCCR##T##B & ~(0x7 << CS##T##0)) | ((int(V) & 0x7) << CS##T##0))
|
||||||
#define _SET_CS0(V) _SET_CS(0,V)
|
#define _SET_CS0(V) _SET_CS(0,V)
|
||||||
#define _SET_CS1(V) _SET_CS(1,V)
|
#define _SET_CS1(V) _SET_CS(1,V)
|
||||||
|
#ifdef TCCR2
|
||||||
|
#define _SET_CS2(V) (TCCR2 = (TCCR2 & ~(0x7 << CS20)) | (int(V) << CS20))
|
||||||
|
#else
|
||||||
|
#define _SET_CS2(V) _SET_CS(2,V)
|
||||||
|
#endif
|
||||||
#define _SET_CS3(V) _SET_CS(3,V)
|
#define _SET_CS3(V) _SET_CS(3,V)
|
||||||
#define _SET_CS4(V) _SET_CS(4,V)
|
#define _SET_CS4(V) _SET_CS(4,V)
|
||||||
#define _SET_CS5(V) _SET_CS(5,V)
|
#define _SET_CS5(V) _SET_CS(5,V)
|
||||||
#define SET_CS0(V) _SET_CS0(CS_##V)
|
#define SET_CS0(V) _SET_CS0(CS_##V)
|
||||||
#define SET_CS1(V) _SET_CS1(CS_##V)
|
#define SET_CS1(V) _SET_CS1(CS_##V)
|
||||||
|
#ifdef TCCR2
|
||||||
#if HAS_TCCR2
|
|
||||||
#define _SET_CS2(V) (TCCR2 = (TCCR2 & ~(0x7 << CS20)) | (int(V) << CS20))
|
|
||||||
#define SET_CS2(V) _SET_CS2(CS2_##V)
|
#define SET_CS2(V) _SET_CS2(CS2_##V)
|
||||||
#else
|
#else
|
||||||
#define _SET_CS2(V) _SET_CS(2,V)
|
|
||||||
#define SET_CS2(V) _SET_CS2(CS_##V)
|
#define SET_CS2(V) _SET_CS2(CS_##V)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SET_CS3(V) _SET_CS3(CS_##V)
|
#define SET_CS3(V) _SET_CS3(CS_##V)
|
||||||
#define SET_CS4(V) _SET_CS4(CS_##V)
|
#define SET_CS4(V) _SET_CS4(CS_##V)
|
||||||
#define SET_CS5(V) _SET_CS5(CS_##V)
|
#define SET_CS5(V) _SET_CS5(CS_##V)
|
||||||
#define SET_CS(T,V) SET_CS##T(V)
|
#define SET_CS(T,V) SET_CS##T(V)
|
||||||
// Runtime (see set_pwm_frequency)
|
// Runtime (see set_pwm_frequency)
|
||||||
#define _SET_CSn(TCCRnQ, V) (*(TCCRnQ)[1] = (*(TCCRnQ[1]) & ~(0x7 << 0)) | ((int(V) & 0x7) << 0))
|
#define _SET_CSn(TCCRnQ, V) do{ \
|
||||||
|
(*(TCCRnQ)[1] = (*(TCCRnQ[1]) & ~(0x7 << 0)) | ((int(V) & 0x7) << 0)); \
|
||||||
|
}while(0)
|
||||||
|
|
||||||
// Set Compare Mode bits
|
// Set Compare Mode bits
|
||||||
// Ex: SET_COMS(4,CLEAR_SET,CLEAR_SET,CLEAR_SET);
|
// Ex: SET_COMS(4,CLEAR_SET,CLEAR_SET,CLEAR_SET);
|
||||||
@ -247,15 +247,21 @@ enum ClockSource2 : char {
|
|||||||
#define SET_COMC(T,V) SET_COM(T,C,V)
|
#define SET_COMC(T,V) SET_COM(T,C,V)
|
||||||
#define SET_COMS(T,V1,V2,V3) do{ SET_COMA(T,V1); SET_COMB(T,V2); SET_COMC(T,V3); }while(0)
|
#define SET_COMS(T,V1,V2,V3) do{ SET_COMA(T,V1); SET_COMB(T,V2); SET_COMC(T,V3); }while(0)
|
||||||
// Runtime (see set_pwm_duty)
|
// Runtime (see set_pwm_duty)
|
||||||
#define _SET_COMnQ(TCCRnQ, Q, V) (*(TCCRnQ)[0] = (*(TCCRnQ)[0] & ~(0x3 << (6-2*(Q)))) | (int(V) << (6-2*(Q))))
|
#define _SET_COMnQ(TCCRnQ, Q, V) do{ \
|
||||||
|
(*(TCCRnQ)[0] = (*(TCCRnQ)[0] & ~(0x3 << (6-2*(Q)))) | (int(V) << (6-2*(Q)))); \
|
||||||
|
}while(0)
|
||||||
|
|
||||||
// Set OCRnQ register
|
// Set OCRnQ register
|
||||||
// Runtime (see set_pwm_duty):
|
// Runtime (see set_pwm_duty):
|
||||||
#define _SET_OCRnQ(OCRnQ, Q, V) (*(OCRnQ)[Q] = int(V) & 0xFFFF)
|
#define _SET_OCRnQ(OCRnQ, Q, V) do{ \
|
||||||
|
(*(OCRnQ)[(Q)] = (0x0000) | (int(V) & 0xFFFF)); \
|
||||||
|
}while(0)
|
||||||
|
|
||||||
// Set ICRn register (one per timer)
|
// Set ICRn register (one per timer)
|
||||||
// Runtime (see set_pwm_frequency)
|
// Runtime (see set_pwm_frequency)
|
||||||
#define _SET_ICRn(ICRn, V) (*(ICRn) = int(V) & 0xFFFF)
|
#define _SET_ICRn(ICRn, V) do{ \
|
||||||
|
(*(ICRn) = (0x0000) | (int(V) & 0xFFFF)); \
|
||||||
|
}while(0)
|
||||||
|
|
||||||
// Set Noise Canceler bit
|
// Set Noise Canceler bit
|
||||||
// Ex: SET_ICNC(2,1)
|
// Ex: SET_ICNC(2,1)
|
||||||
@ -278,7 +284,7 @@ enum ClockSource2 : char {
|
|||||||
* PWM availability macros
|
* PWM availability macros
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Determine which hardware PWMs are already in use
|
// Determine which harware PWMs are already in use
|
||||||
#define _PWM_CHK_FAN_B(P) (P == E0_AUTO_FAN_PIN || P == E1_AUTO_FAN_PIN || P == E2_AUTO_FAN_PIN || P == E3_AUTO_FAN_PIN || P == E4_AUTO_FAN_PIN || P == E5_AUTO_FAN_PIN || P == E6_AUTO_FAN_PIN || P == E7_AUTO_FAN_PIN || P == CHAMBER_AUTO_FAN_PIN || P == COOLER_AUTO_FAN_PIN)
|
#define _PWM_CHK_FAN_B(P) (P == E0_AUTO_FAN_PIN || P == E1_AUTO_FAN_PIN || P == E2_AUTO_FAN_PIN || P == E3_AUTO_FAN_PIN || P == E4_AUTO_FAN_PIN || P == E5_AUTO_FAN_PIN || P == E6_AUTO_FAN_PIN || P == E7_AUTO_FAN_PIN || P == CHAMBER_AUTO_FAN_PIN || P == COOLER_AUTO_FAN_PIN)
|
||||||
#if PIN_EXISTS(CONTROLLER_FAN)
|
#if PIN_EXISTS(CONTROLLER_FAN)
|
||||||
#define PWM_CHK_FAN_B(P) (_PWM_CHK_FAN_B(P) || P == CONTROLLER_FAN_PIN)
|
#define PWM_CHK_FAN_B(P) (_PWM_CHK_FAN_B(P) || P == CONTROLLER_FAN_PIN)
|
||||||
|
@ -28,14 +28,14 @@
|
|||||||
/**
|
/**
|
||||||
* Checks for FAST PWM
|
* Checks for FAST PWM
|
||||||
*/
|
*/
|
||||||
#if ALL(FAST_PWM_FAN, USE_OCR2A_AS_TOP, HAS_TCCR2)
|
#if ENABLED(FAST_PWM_FAN) && (ENABLED(USE_OCR2A_AS_TOP) && defined(TCCR2))
|
||||||
#error "USE_OCR2A_AS_TOP does not apply to devices with a single output TIMER2"
|
#error "USE_OCR2A_AS_TOP does not apply to devices with a single output TIMER2"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sanity checks for Spindle / Laser PWM
|
* Sanity checks for Spindle / Laser PWM
|
||||||
*/
|
*/
|
||||||
#if ENABLED(SPINDLE_LASER_USE_PWM)
|
#if ENABLED(SPINDLE_LASER_PWM)
|
||||||
#include "../ServoTimers.h" // Needed to check timer availability (_useTimer3)
|
#include "../ServoTimers.h" // Needed to check timer availability (_useTimer3)
|
||||||
#if SPINDLE_LASER_PWM_PIN == 4 || WITHIN(SPINDLE_LASER_PWM_PIN, 11, 13)
|
#if SPINDLE_LASER_PWM_PIN == 4 || WITHIN(SPINDLE_LASER_PWM_PIN, 11, 13)
|
||||||
#error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by a system interrupt."
|
#error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by a system interrupt."
|
||||||
@ -43,7 +43,7 @@
|
|||||||
#error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by the servo system."
|
#error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by the servo system."
|
||||||
#endif
|
#endif
|
||||||
#elif defined(SPINDLE_LASER_FREQUENCY)
|
#elif defined(SPINDLE_LASER_FREQUENCY)
|
||||||
#error "SPINDLE_LASER_FREQUENCY requires SPINDLE_LASER_USE_PWM."
|
#error "SPINDLE_LASER_FREQUENCY requires SPINDLE_LASER_PWM."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@ -102,7 +99,7 @@ void PRINT_ARRAY_NAME(uint8_t x) {
|
|||||||
return true; \
|
return true; \
|
||||||
} else return false
|
} else return false
|
||||||
|
|
||||||
#define ABTEST(N) defined(TCCR##N##A) && defined(COM##N##A1)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print a pin's PWM status.
|
* Print a pin's PWM status.
|
||||||
@ -113,7 +110,7 @@ static bool pwm_status(uint8_t pin) {
|
|||||||
|
|
||||||
switch (digitalPinToTimer_DEBUG(pin)) {
|
switch (digitalPinToTimer_DEBUG(pin)) {
|
||||||
|
|
||||||
#if ABTEST(0)
|
#if defined(TCCR0A) && defined(COM0A1)
|
||||||
#ifdef TIMER0A
|
#ifdef TIMER0A
|
||||||
#if !AVR_AT90USB1286_FAMILY // not available in Teensyduino type IDEs
|
#if !AVR_AT90USB1286_FAMILY // not available in Teensyduino type IDEs
|
||||||
PWM_CASE(0, A);
|
PWM_CASE(0, A);
|
||||||
@ -122,7 +119,7 @@ static bool pwm_status(uint8_t pin) {
|
|||||||
PWM_CASE(0, B);
|
PWM_CASE(0, B);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(1)
|
#if defined(TCCR1A) && defined(COM1A1)
|
||||||
PWM_CASE(1, A);
|
PWM_CASE(1, A);
|
||||||
PWM_CASE(1, B);
|
PWM_CASE(1, B);
|
||||||
#if defined(COM1C1) && defined(TIMER1C)
|
#if defined(COM1C1) && defined(TIMER1C)
|
||||||
@ -130,12 +127,12 @@ static bool pwm_status(uint8_t pin) {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(2)
|
#if defined(TCCR2A) && defined(COM2A1)
|
||||||
PWM_CASE(2, A);
|
PWM_CASE(2, A);
|
||||||
PWM_CASE(2, B);
|
PWM_CASE(2, B);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(3)
|
#if defined(TCCR3A) && defined(COM3A1)
|
||||||
PWM_CASE(3, A);
|
PWM_CASE(3, A);
|
||||||
PWM_CASE(3, B);
|
PWM_CASE(3, B);
|
||||||
#ifdef COM3C1
|
#ifdef COM3C1
|
||||||
@ -149,7 +146,7 @@ static bool pwm_status(uint8_t pin) {
|
|||||||
PWM_CASE(4, C);
|
PWM_CASE(4, C);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(5)
|
#if defined(TCCR5A) && defined(COM5A1)
|
||||||
PWM_CASE(5, A);
|
PWM_CASE(5, A);
|
||||||
PWM_CASE(5, B);
|
PWM_CASE(5, B);
|
||||||
PWM_CASE(5, C);
|
PWM_CASE(5, C);
|
||||||
@ -166,16 +163,16 @@ static bool pwm_status(uint8_t pin) {
|
|||||||
const volatile uint8_t* const PWM_other[][3] PROGMEM = {
|
const volatile uint8_t* const PWM_other[][3] PROGMEM = {
|
||||||
{ &TCCR0A, &TCCR0B, &TIMSK0 },
|
{ &TCCR0A, &TCCR0B, &TIMSK0 },
|
||||||
{ &TCCR1A, &TCCR1B, &TIMSK1 },
|
{ &TCCR1A, &TCCR1B, &TIMSK1 },
|
||||||
#if ABTEST(2)
|
#if defined(TCCR2A) && defined(COM2A1)
|
||||||
{ &TCCR2A, &TCCR2B, &TIMSK2 },
|
{ &TCCR2A, &TCCR2B, &TIMSK2 },
|
||||||
#endif
|
#endif
|
||||||
#if ABTEST(3)
|
#if defined(TCCR3A) && defined(COM3A1)
|
||||||
{ &TCCR3A, &TCCR3B, &TIMSK3 },
|
{ &TCCR3A, &TCCR3B, &TIMSK3 },
|
||||||
#endif
|
#endif
|
||||||
#ifdef TCCR4A
|
#ifdef TCCR4A
|
||||||
{ &TCCR4A, &TCCR4B, &TIMSK4 },
|
{ &TCCR4A, &TCCR4B, &TIMSK4 },
|
||||||
#endif
|
#endif
|
||||||
#if ABTEST(5)
|
#if defined(TCCR5A) && defined(COM5A1)
|
||||||
{ &TCCR5A, &TCCR5B, &TIMSK5 },
|
{ &TCCR5A, &TCCR5B, &TIMSK5 },
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@ -195,11 +192,11 @@ const volatile uint8_t* const PWM_OCR[][3] PROGMEM = {
|
|||||||
{ (const uint8_t*)&OCR1A, (const uint8_t*)&OCR1B, 0 },
|
{ (const uint8_t*)&OCR1A, (const uint8_t*)&OCR1B, 0 },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(2)
|
#if defined(TCCR2A) && defined(COM2A1)
|
||||||
{ &OCR2A, &OCR2B, 0 },
|
{ &OCR2A, &OCR2B, 0 },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(3)
|
#if defined(TCCR3A) && defined(COM3A1)
|
||||||
#ifdef COM3C1
|
#ifdef COM3C1
|
||||||
{ (const uint8_t*)&OCR3A, (const uint8_t*)&OCR3B, (const uint8_t*)&OCR3C },
|
{ (const uint8_t*)&OCR3A, (const uint8_t*)&OCR3B, (const uint8_t*)&OCR3C },
|
||||||
#else
|
#else
|
||||||
@ -211,7 +208,7 @@ const volatile uint8_t* const PWM_OCR[][3] PROGMEM = {
|
|||||||
{ (const uint8_t*)&OCR4A, (const uint8_t*)&OCR4B, (const uint8_t*)&OCR4C },
|
{ (const uint8_t*)&OCR4A, (const uint8_t*)&OCR4B, (const uint8_t*)&OCR4C },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(5)
|
#if defined(TCCR5A) && defined(COM5A1)
|
||||||
{ (const uint8_t*)&OCR5A, (const uint8_t*)&OCR5B, (const uint8_t*)&OCR5C },
|
{ (const uint8_t*)&OCR5A, (const uint8_t*)&OCR5B, (const uint8_t*)&OCR5C },
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@ -238,9 +235,9 @@ static void print_is_also_tied() { SERIAL_ECHOPGM(" is also tied to this pin");
|
|||||||
|
|
||||||
inline void com_print(const uint8_t N, const uint8_t Z) {
|
inline void com_print(const uint8_t N, const uint8_t Z) {
|
||||||
const uint8_t *TCCRA = (uint8_t*)TCCR_A(N);
|
const uint8_t *TCCRA = (uint8_t*)TCCR_A(N);
|
||||||
SERIAL_ECHOPGM(" COM", AS_DIGIT(N));
|
SERIAL_ECHOPAIR(" COM", AS_CHAR('0' + N));
|
||||||
SERIAL_CHAR(Z);
|
SERIAL_CHAR(Z);
|
||||||
SERIAL_ECHOPGM(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
|
SERIAL_ECHOPAIR(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
|
||||||
}
|
}
|
||||||
|
|
||||||
void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N - WGM bit layout
|
void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N - WGM bit layout
|
||||||
@ -250,7 +247,7 @@ void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N -
|
|||||||
uint8_t WGM = (((*TCCRB & _BV(WGM_2)) >> 1) | (*TCCRA & (_BV(WGM_0) | _BV(WGM_1))));
|
uint8_t WGM = (((*TCCRB & _BV(WGM_2)) >> 1) | (*TCCRA & (_BV(WGM_0) | _BV(WGM_1))));
|
||||||
if (N == 4) WGM |= ((*TCCRB & _BV(WGM_3)) >> 1);
|
if (N == 4) WGM |= ((*TCCRB & _BV(WGM_3)) >> 1);
|
||||||
|
|
||||||
SERIAL_ECHOPGM(" TIMER", AS_DIGIT(T));
|
SERIAL_ECHOPAIR(" TIMER", AS_CHAR(T + '0'));
|
||||||
SERIAL_CHAR(L);
|
SERIAL_CHAR(L);
|
||||||
SERIAL_ECHO_SP(3);
|
SERIAL_ECHO_SP(3);
|
||||||
|
|
||||||
@ -262,14 +259,14 @@ void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N -
|
|||||||
const uint16_t *OCRVAL16 = (uint16_t*)OCR_VAL(T, L - 'A');
|
const uint16_t *OCRVAL16 = (uint16_t*)OCR_VAL(T, L - 'A');
|
||||||
PWM_PRINT(*OCRVAL16);
|
PWM_PRINT(*OCRVAL16);
|
||||||
}
|
}
|
||||||
SERIAL_ECHOPGM(" WGM: ", WGM);
|
SERIAL_ECHOPAIR(" WGM: ", WGM);
|
||||||
com_print(T,L);
|
com_print(T,L);
|
||||||
SERIAL_ECHOPGM(" CS: ", (*TCCRB & (_BV(CS_0) | _BV(CS_1) | _BV(CS_2)) ));
|
SERIAL_ECHOPAIR(" CS: ", (*TCCRB & (_BV(CS_0) | _BV(CS_1) | _BV(CS_2)) ));
|
||||||
SERIAL_ECHOPGM(" TCCR", AS_DIGIT(T), "A: ", *TCCRA);
|
SERIAL_ECHOPAIR(" TCCR", AS_CHAR(T + '0'), "A: ", *TCCRA);
|
||||||
SERIAL_ECHOPGM(" TCCR", AS_DIGIT(T), "B: ", *TCCRB);
|
SERIAL_ECHOPAIR(" TCCR", AS_CHAR(T + '0'), "B: ", *TCCRB);
|
||||||
|
|
||||||
const uint8_t *TMSK = (uint8_t*)TIMSK(T);
|
const uint8_t *TMSK = (uint8_t*)TIMSK(T);
|
||||||
SERIAL_ECHOPGM(" TIMSK", AS_DIGIT(T), ": ", *TMSK);
|
SERIAL_ECHOPAIR(" TIMSK", AS_CHAR(T + '0'), ": ", *TMSK);
|
||||||
|
|
||||||
const uint8_t OCIE = L - 'A' + 1;
|
const uint8_t OCIE = L - 'A' + 1;
|
||||||
if (N == 3) { if (WGM == 0 || WGM == 2 || WGM == 4 || WGM == 6) err_is_counter(); }
|
if (N == 3) { if (WGM == 0 || WGM == 2 || WGM == 4 || WGM == 6) err_is_counter(); }
|
||||||
@ -281,7 +278,7 @@ void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N -
|
|||||||
static void pwm_details(uint8_t pin) {
|
static void pwm_details(uint8_t pin) {
|
||||||
switch (digitalPinToTimer_DEBUG(pin)) {
|
switch (digitalPinToTimer_DEBUG(pin)) {
|
||||||
|
|
||||||
#if ABTEST(0)
|
#if defined(TCCR0A) && defined(COM0A1)
|
||||||
#ifdef TIMER0A
|
#ifdef TIMER0A
|
||||||
#if !AVR_AT90USB1286_FAMILY // not available in Teensyduino type IDEs
|
#if !AVR_AT90USB1286_FAMILY // not available in Teensyduino type IDEs
|
||||||
case TIMER0A: timer_prefix(0, 'A', 3); break;
|
case TIMER0A: timer_prefix(0, 'A', 3); break;
|
||||||
@ -290,7 +287,7 @@ static void pwm_details(uint8_t pin) {
|
|||||||
case TIMER0B: timer_prefix(0, 'B', 3); break;
|
case TIMER0B: timer_prefix(0, 'B', 3); break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(1)
|
#if defined(TCCR1A) && defined(COM1A1)
|
||||||
case TIMER1A: timer_prefix(1, 'A', 4); break;
|
case TIMER1A: timer_prefix(1, 'A', 4); break;
|
||||||
case TIMER1B: timer_prefix(1, 'B', 4); break;
|
case TIMER1B: timer_prefix(1, 'B', 4); break;
|
||||||
#if defined(COM1C1) && defined(TIMER1C)
|
#if defined(COM1C1) && defined(TIMER1C)
|
||||||
@ -298,12 +295,12 @@ static void pwm_details(uint8_t pin) {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(2)
|
#if defined(TCCR2A) && defined(COM2A1)
|
||||||
case TIMER2A: timer_prefix(2, 'A', 3); break;
|
case TIMER2A: timer_prefix(2, 'A', 3); break;
|
||||||
case TIMER2B: timer_prefix(2, 'B', 3); break;
|
case TIMER2B: timer_prefix(2, 'B', 3); break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(3)
|
#if defined(TCCR3A) && defined(COM3A1)
|
||||||
case TIMER3A: timer_prefix(3, 'A', 4); break;
|
case TIMER3A: timer_prefix(3, 'A', 4); break;
|
||||||
case TIMER3B: timer_prefix(3, 'B', 4); break;
|
case TIMER3B: timer_prefix(3, 'B', 4); break;
|
||||||
#ifdef COM3C1
|
#ifdef COM3C1
|
||||||
@ -317,7 +314,7 @@ static void pwm_details(uint8_t pin) {
|
|||||||
case TIMER4C: timer_prefix(4, 'C', 4); break;
|
case TIMER4C: timer_prefix(4, 'C', 4); break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ABTEST(5)
|
#if defined(TCCR5A) && defined(COM5A1)
|
||||||
case TIMER5A: timer_prefix(5, 'A', 4); break;
|
case TIMER5A: timer_prefix(5, 'A', 4); break;
|
||||||
case TIMER5B: timer_prefix(5, 'B', 4); break;
|
case TIMER5B: timer_prefix(5, 'B', 4); break;
|
||||||
case TIMER5C: timer_prefix(5, 'C', 4); break;
|
case TIMER5C: timer_prefix(5, 'C', 4); break;
|
||||||
@ -351,6 +348,7 @@ static void pwm_details(uint8_t pin) {
|
|||||||
#endif
|
#endif
|
||||||
} // pwm_details
|
} // pwm_details
|
||||||
|
|
||||||
|
|
||||||
#ifndef digitalRead_mod // Use Teensyduino's version of digitalRead - it doesn't disable the PWMs
|
#ifndef digitalRead_mod // Use Teensyduino's version of digitalRead - it doesn't disable the PWMs
|
||||||
int digitalRead_mod(const int8_t pin) { // same as digitalRead except the PWM stop section has been removed
|
int digitalRead_mod(const int8_t pin) { // same as digitalRead except the PWM stop section has been removed
|
||||||
const uint8_t port = digitalPinToPort_DEBUG(pin);
|
const uint8_t port = digitalPinToPort_DEBUG(pin);
|
||||||
@ -395,6 +393,3 @@ static void pwm_details(uint8_t pin) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0)
|
|
||||||
|
|
||||||
#undef ABTEST
|
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
@ -34,14 +34,14 @@ typedef uint16_t hal_timer_t;
|
|||||||
|
|
||||||
#define HAL_TIMER_RATE ((F_CPU) / 8) // i.e., 2MHz or 2.5MHz
|
#define HAL_TIMER_RATE ((F_CPU) / 8) // i.e., 2MHz or 2.5MHz
|
||||||
|
|
||||||
#ifndef MF_TIMER_STEP
|
#ifndef STEP_TIMER_NUM
|
||||||
#define MF_TIMER_STEP 1
|
#define STEP_TIMER_NUM 1
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_PULSE
|
#ifndef PULSE_TIMER_NUM
|
||||||
#define MF_TIMER_PULSE MF_TIMER_STEP
|
#define PULSE_TIMER_NUM STEP_TIMER_NUM
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_TEMP
|
#ifndef TEMP_TIMER_NUM
|
||||||
#define MF_TIMER_TEMP 0
|
#define TEMP_TIMER_NUM 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TEMP_TIMER_FREQUENCY ((F_CPU) / 64.0 / 256.0)
|
#define TEMP_TIMER_FREQUENCY ((F_CPU) / 64.0 / 256.0)
|
||||||
@ -64,7 +64,7 @@ typedef uint16_t hal_timer_t;
|
|||||||
|
|
||||||
FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) {
|
FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) {
|
||||||
switch (timer_num) {
|
switch (timer_num) {
|
||||||
case MF_TIMER_STEP:
|
case STEP_TIMER_NUM:
|
||||||
// waveform generation = 0100 = CTC
|
// waveform generation = 0100 = CTC
|
||||||
SET_WGM(1, CTC_OCRnA);
|
SET_WGM(1, CTC_OCRnA);
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) {
|
|||||||
TCNT1 = 0;
|
TCNT1 = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MF_TIMER_TEMP:
|
case TEMP_TIMER_NUM:
|
||||||
// Use timer0 for temperature measurement
|
// Use timer0 for temperature measurement
|
||||||
// Interleave temperature interrupt with millies interrupt
|
// Interleave temperature interrupt with millies interrupt
|
||||||
OCR0B = 128;
|
OCR0B = 128;
|
||||||
@ -109,8 +109,8 @@ FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) {
|
|||||||
* (otherwise, characters will be lost due to UART overflow).
|
* (otherwise, characters will be lost due to UART overflow).
|
||||||
* Then: Stepper, Endstops, Temperature, and -finally- all others.
|
* Then: Stepper, Endstops, Temperature, and -finally- all others.
|
||||||
*/
|
*/
|
||||||
#define HAL_timer_isr_prologue(T)
|
#define HAL_timer_isr_prologue(TIMER_NUM)
|
||||||
#define HAL_timer_isr_epilogue(T)
|
#define HAL_timer_isr_epilogue(TIMER_NUM)
|
||||||
|
|
||||||
/* 18 cycles maximum latency */
|
/* 18 cycles maximum latency */
|
||||||
#ifndef HAL_STEP_TIMER_ISR
|
#ifndef HAL_STEP_TIMER_ISR
|
||||||
|
@ -64,8 +64,8 @@
|
|||||||
|
|
||||||
#include <U8glib-HAL.h>
|
#include <U8glib-HAL.h>
|
||||||
|
|
||||||
static uint8_t u8g_bitData, u8g_bitNotData, u8g_bitClock, u8g_bitNotClock;
|
uint8_t u8g_bitData, u8g_bitNotData, u8g_bitClock, u8g_bitNotClock;
|
||||||
static volatile uint8_t *u8g_outData, *u8g_outClock;
|
volatile uint8_t *u8g_outData, *u8g_outClock;
|
||||||
|
|
||||||
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin) {
|
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin) {
|
||||||
u8g_outData = portOutputRegister(digitalPinToPort(dataPin));
|
u8g_outData = portOutputRegister(digitalPinToPort(dataPin));
|
||||||
|
@ -144,11 +144,6 @@ inline void HAL_adc_init() {}//todo
|
|||||||
void HAL_adc_start_conversion(const uint8_t ch);
|
void HAL_adc_start_conversion(const uint8_t ch);
|
||||||
uint16_t HAL_adc_get_result();
|
uint16_t HAL_adc_get_result();
|
||||||
|
|
||||||
//
|
|
||||||
// PWM
|
|
||||||
//
|
|
||||||
inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); }
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Pin Map
|
// Pin Map
|
||||||
//
|
//
|
||||||
@ -173,14 +168,16 @@ void HAL_init();
|
|||||||
//
|
//
|
||||||
void _delay_ms(const int delay);
|
void _delay_ms(const int delay);
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#if GCC_VERSION <= 50000
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wunused-function"
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int freeMemory();
|
int freeMemory();
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -437,7 +437,7 @@
|
|||||||
} while (--todo);
|
} while (--todo);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pointers to generic functions for block transfers
|
// Pointers to generic functions for block tranfers
|
||||||
static pfnSpiTxBlock spiTxBlock = (pfnSpiTxBlock)spiTxBlockX;
|
static pfnSpiTxBlock spiTxBlock = (pfnSpiTxBlock)spiTxBlockX;
|
||||||
static pfnSpiRxBlock spiRxBlock = (pfnSpiRxBlock)spiRxBlockX;
|
static pfnSpiRxBlock spiRxBlock = (pfnSpiRxBlock)spiRxBlockX;
|
||||||
|
|
||||||
@ -594,14 +594,18 @@
|
|||||||
SPI_Configure(SPI0, ID_SPI0, SPI_MR_MSTR | SPI_MR_MODFDIS | SPI_MR_PS);
|
SPI_Configure(SPI0, ID_SPI0, SPI_MR_MSTR | SPI_MR_MODFDIS | SPI_MR_PS);
|
||||||
SPI_Enable(SPI0);
|
SPI_Enable(SPI0);
|
||||||
|
|
||||||
SET_OUTPUT(DAC0_SYNC_PIN);
|
SET_OUTPUT(DAC0_SYNC);
|
||||||
#if HAS_MULTI_EXTRUDER
|
#if HAS_MULTI_EXTRUDER
|
||||||
OUT_WRITE(DAC1_SYNC_PIN, HIGH);
|
SET_OUTPUT(DAC1_SYNC);
|
||||||
|
WRITE(DAC1_SYNC, HIGH);
|
||||||
#endif
|
#endif
|
||||||
WRITE(DAC0_SYNC_PIN, HIGH);
|
SET_OUTPUT(SPI_EEPROM1_CS);
|
||||||
OUT_WRITE(SPI_EEPROM1_CS_PIN, HIGH);
|
SET_OUTPUT(SPI_EEPROM2_CS);
|
||||||
OUT_WRITE(SPI_EEPROM2_CS_PIN, HIGH);
|
SET_OUTPUT(SPI_FLASH_CS);
|
||||||
OUT_WRITE(SPI_FLASH_CS_PIN, HIGH);
|
WRITE(DAC0_SYNC, HIGH);
|
||||||
|
WRITE(SPI_EEPROM1_CS, HIGH);
|
||||||
|
WRITE(SPI_EEPROM2_CS, HIGH);
|
||||||
|
WRITE(SPI_FLASH_CS, HIGH);
|
||||||
WRITE(SD_SS_PIN, HIGH);
|
WRITE(SD_SS_PIN, HIGH);
|
||||||
|
|
||||||
OUT_WRITE(SDSS, LOW);
|
OUT_WRITE(SDSS, LOW);
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
||||||
*
|
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program 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 program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <SPI.h>
|
|
||||||
|
|
||||||
using MarlinSPI = SPIClass;
|
|
@ -118,7 +118,7 @@ public:
|
|||||||
static size_t write(const uint8_t c);
|
static size_t write(const uint8_t c);
|
||||||
static void flushTX();
|
static void flushTX();
|
||||||
|
|
||||||
static bool emergency_parser_enabled() { return Cfg::EMERGENCYPARSER; }
|
static inline bool emergency_parser_enabled() { return Cfg::EMERGENCYPARSER; }
|
||||||
|
|
||||||
FORCE_INLINE static uint8_t dropped() { return Cfg::DROPPED_RX ? rx_dropped_bytes : 0; }
|
FORCE_INLINE static uint8_t dropped() { return Cfg::DROPPED_RX ? rx_dropped_bytes : 0; }
|
||||||
FORCE_INLINE static uint8_t buffer_overruns() { return Cfg::RX_OVERRUNS ? rx_buffer_overruns : 0; }
|
FORCE_INLINE static uint8_t buffer_overruns() { return Cfg::RX_OVERRUNS ? rx_buffer_overruns : 0; }
|
||||||
|
@ -41,7 +41,7 @@ extern "C" {
|
|||||||
int udi_cdc_getc();
|
int udi_cdc_getc();
|
||||||
bool udi_cdc_is_tx_ready();
|
bool udi_cdc_is_tx_ready();
|
||||||
int udi_cdc_putc(int value);
|
int udi_cdc_putc(int value);
|
||||||
}
|
};
|
||||||
|
|
||||||
// Pending character
|
// Pending character
|
||||||
static int pending_char = -1;
|
static int pending_char = -1;
|
||||||
|
@ -38,17 +38,17 @@ volatile static int32_t toggles;
|
|||||||
void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration) {
|
void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration) {
|
||||||
tone_pin = _pin;
|
tone_pin = _pin;
|
||||||
toggles = 2 * frequency * duration / 1000;
|
toggles = 2 * frequency * duration / 1000;
|
||||||
HAL_timer_start(MF_TIMER_TONE, 2 * frequency);
|
HAL_timer_start(TONE_TIMER_NUM, 2 * frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
void noTone(const pin_t _pin) {
|
void noTone(const pin_t _pin) {
|
||||||
HAL_timer_disable_interrupt(MF_TIMER_TONE);
|
HAL_timer_disable_interrupt(TONE_TIMER_NUM);
|
||||||
extDigitalWrite(_pin, LOW);
|
extDigitalWrite(_pin, LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
HAL_TONE_TIMER_ISR() {
|
HAL_TONE_TIMER_ISR() {
|
||||||
static uint8_t pin_state = 0;
|
static uint8_t pin_state = 0;
|
||||||
HAL_timer_isr_prologue(MF_TIMER_TONE);
|
HAL_timer_isr_prologue(TONE_TIMER_NUM);
|
||||||
|
|
||||||
if (toggles) {
|
if (toggles) {
|
||||||
toggles--;
|
toggles--;
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Based on u8g_com_msp430_hw_spi.c
|
* Based on u8g_com_msp430_hw_spi.c
|
||||||
*
|
*
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
#include "../../../inc/MarlinConfigPre.h"
|
#include "../../../inc/MarlinConfigPre.h"
|
||||||
|
|
||||||
#if IS_U8GLIB_ST7920
|
#if ENABLED(U8GLIB_ST7920)
|
||||||
|
|
||||||
#include "../../../inc/MarlinConfig.h"
|
#include "../../../inc/MarlinConfig.h"
|
||||||
#include "../../shared/Delay.h"
|
#include "../../shared/Delay.h"
|
||||||
@ -182,5 +182,5 @@ uint8_t u8g_com_HAL_DUE_ST7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_va
|
|||||||
}
|
}
|
||||||
#endif // LIGHTWEIGHT_UI
|
#endif // LIGHTWEIGHT_UI
|
||||||
|
|
||||||
#endif // IS_U8GLIB_ST7920
|
#endif // U8GLIB_ST7920
|
||||||
#endif // ARDUINO_ARCH_SAM
|
#endif // ARDUINO_ARCH_SAM
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
#include "../../../inc/MarlinConfigPre.h"
|
#include "../../../inc/MarlinConfigPre.h"
|
||||||
|
|
||||||
#if HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
|
#if HAS_MARLINUI_U8GLIB && DISABLED(U8GLIB_ST7920)
|
||||||
|
|
||||||
#include "u8g_com_HAL_DUE_sw_spi_shared.h"
|
#include "u8g_com_HAL_DUE_sw_spi_shared.h"
|
||||||
|
|
||||||
@ -141,5 +141,5 @@ uint8_t u8g_com_HAL_DUE_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
|
#endif // HAS_MARLINUI_U8GLIB && !U8GLIB_ST7920
|
||||||
#endif // ARDUINO_ARCH_SAM
|
#endif // ARDUINO_ARCH_SAM
|
||||||
|
@ -200,9 +200,9 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
|||||||
pageContents[i] = (((uint32_t*)data)[i]) | (~(pageContents[i] ^ ((uint32_t*)data)[i]));
|
pageContents[i] = (((uint32_t*)data)[i]) | (~(pageContents[i] ^ ((uint32_t*)data)[i]));
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM PageWrite ", page);
|
DEBUG_ECHOLNPAIR("EEPROM PageWrite ", page);
|
||||||
DEBUG_ECHOLNPGM(" in FLASH address ", (uint32_t)addrflash);
|
DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
|
||||||
DEBUG_ECHOLNPGM(" base address ", (uint32_t)getFlashStorage(0));
|
DEBUG_ECHOLNPAIR(" base address ", (uint32_t)getFlashStorage(0));
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
|
|
||||||
// Get the page relative to the start of the EFC controller, and the EFC controller to use
|
// Get the page relative to the start of the EFC controller, and the EFC controller to use
|
||||||
@ -246,7 +246,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
|||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM Unlock failure for page ", page);
|
DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ", page);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,7 +271,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
|||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM Write failure for page ", page);
|
DEBUG_ECHOLNPAIR("EEPROM Write failure for page ", page);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -287,7 +287,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
|||||||
|
|
||||||
#ifdef EE_EMU_DEBUG
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM Verify Write failure for page ", page);
|
DEBUG_ECHOLNPAIR("EEPROM Verify Write failure for page ", page);
|
||||||
|
|
||||||
ee_Dump( page, (uint32_t *)addrflash);
|
ee_Dump( page, (uint32_t *)addrflash);
|
||||||
ee_Dump(-page, data);
|
ee_Dump(-page, data);
|
||||||
@ -306,7 +306,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DEBUG_ECHOLNPGM("--> Differing bits: ", count);
|
DEBUG_ECHOLNPAIR("--> Differing bits: ", count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -326,9 +326,9 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
uint32_t addrflash = uint32_t(getFlashStorage(page));
|
uint32_t addrflash = uint32_t(getFlashStorage(page));
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM PageErase ", page);
|
DEBUG_ECHOLNPAIR("EEPROM PageErase ", page);
|
||||||
DEBUG_ECHOLNPGM(" in FLASH address ", (uint32_t)addrflash);
|
DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
|
||||||
DEBUG_ECHOLNPGM(" base address ", (uint32_t)getFlashStorage(0));
|
DEBUG_ECHOLNPAIR(" base address ", (uint32_t)getFlashStorage(0));
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
|
|
||||||
// Get the page relative to the start of the EFC controller, and the EFC controller to use
|
// Get the page relative to the start of the EFC controller, and the EFC controller to use
|
||||||
@ -371,7 +371,7 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM Unlock failure for page ",page);
|
DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ",page);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -395,7 +395,7 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM Erase failure for page ",page);
|
DEBUG_ECHOLNPAIR("EEPROM Erase failure for page ",page);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -411,7 +411,7 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
for (i = 0; i < PageSize >> 2; i++) {
|
for (i = 0; i < PageSize >> 2; i++) {
|
||||||
if (*aligned_src++ != 0xFFFFFFFF) {
|
if (*aligned_src++ != 0xFFFFFFFF) {
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM Verify Erase failure for page ",page);
|
DEBUG_ECHOLNPAIR("EEPROM Verify Erase failure for page ",page);
|
||||||
ee_Dump(page, (uint32_t *)addrflash);
|
ee_Dump(page, (uint32_t *)addrflash);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -922,7 +922,7 @@ static void ee_Init() {
|
|||||||
if (curGroup >= GroupCount) curGroup = 0;
|
if (curGroup >= GroupCount) curGroup = 0;
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM Current Group: ",curGroup);
|
DEBUG_ECHOLNPAIR("EEPROM Current Group: ",curGroup);
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
|
|
||||||
// Now, validate that all the other group pages are empty
|
// Now, validate that all the other group pages are empty
|
||||||
@ -932,7 +932,7 @@ static void ee_Init() {
|
|||||||
for (int page = 0; page < PagesPerGroup; page++) {
|
for (int page = 0; page < PagesPerGroup; page++) {
|
||||||
if (!ee_IsPageClean(grp * PagesPerGroup + page)) {
|
if (!ee_IsPageClean(grp * PagesPerGroup + page)) {
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM Page ", page, " not clean on group ", grp);
|
DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on group ", grp);
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
ee_PageErase(grp * PagesPerGroup + page);
|
ee_PageErase(grp * PagesPerGroup + page);
|
||||||
}
|
}
|
||||||
@ -949,14 +949,14 @@ static void ee_Init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM Active page: ", curPage);
|
DEBUG_ECHOLNPAIR("EEPROM Active page: ", curPage);
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
|
|
||||||
// Make sure the pages following the first clean one are also clean
|
// Make sure the pages following the first clean one are also clean
|
||||||
for (int page = curPage + 1; page < PagesPerGroup; page++) {
|
for (int page = curPage + 1; page < PagesPerGroup; page++) {
|
||||||
if (!ee_IsPageClean(curGroup * PagesPerGroup + page)) {
|
if (!ee_IsPageClean(curGroup * PagesPerGroup + page)) {
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPGM("EEPROM Page ", page, " not clean on active group ", curGroup);
|
DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on active group ", curGroup);
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
|
ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
|
||||||
ee_PageErase(curGroup * PagesPerGroup + page);
|
ee_PageErase(curGroup * PagesPerGroup + page);
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@ -67,7 +64,6 @@
|
|||||||
#define PRINT_PORT(p)
|
#define PRINT_PORT(p)
|
||||||
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%02d"), p); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%02d"), p); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0)
|
|
||||||
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
||||||
#define GET_ARRAY_IS_DIGITAL(p) pin_array[p].is_digital
|
#define GET_ARRAY_IS_DIGITAL(p) pin_array[p].is_digital
|
||||||
#define VALID_PIN(pin) (pin >= 0 && pin < (int8_t)NUMBER_PINS_TOTAL ? 1 : 0)
|
#define VALID_PIN(pin) (pin >= 0 && pin < (int8_t)NUMBER_PINS_TOTAL ? 1 : 0)
|
||||||
@ -90,7 +86,7 @@ bool GET_PINMODE(int8_t pin) { // 1: output, 0: input
|
|||||||
void pwm_details(int32_t pin) {
|
void pwm_details(int32_t pin) {
|
||||||
if (pwm_status(pin)) {
|
if (pwm_status(pin)) {
|
||||||
uint32_t chan = g_APinDescription[pin].ulPWMChannel;
|
uint32_t chan = g_APinDescription[pin].ulPWMChannel;
|
||||||
SERIAL_ECHOPGM("PWM = ", PWM_INTERFACE->PWM_CH_NUM[chan].PWM_CDTY);
|
SERIAL_ECHOPAIR("PWM = ", PWM_INTERFACE->PWM_CH_NUM[chan].PWM_CDTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
// Private Variables
|
// Private Variables
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
const tTimerConfig timer_config[NUM_HARDWARE_TIMERS] = {
|
const tTimerConfig TimerConfig [NUM_HARDWARE_TIMERS] = {
|
||||||
{ TC0, 0, TC0_IRQn, 3}, // 0 - [servo timer5]
|
{ TC0, 0, TC0_IRQn, 3}, // 0 - [servo timer5]
|
||||||
{ TC0, 1, TC1_IRQn, 0}, // 1
|
{ TC0, 1, TC1_IRQn, 0}, // 1
|
||||||
{ TC0, 2, TC2_IRQn, 2}, // 2 - stepper
|
{ TC0, 2, TC2_IRQn, 2}, // 2 - stepper
|
||||||
@ -66,9 +66,9 @@ const tTimerConfig timer_config[NUM_HARDWARE_TIMERS] = {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
||||||
Tc *tc = timer_config[timer_num].pTimerRegs;
|
Tc *tc = TimerConfig[timer_num].pTimerRegs;
|
||||||
IRQn_Type irq = timer_config[timer_num].IRQ_Id;
|
IRQn_Type irq = TimerConfig[timer_num].IRQ_Id;
|
||||||
uint32_t channel = timer_config[timer_num].channel;
|
uint32_t channel = TimerConfig[timer_num].channel;
|
||||||
|
|
||||||
// Disable interrupt, just in case it was already enabled
|
// Disable interrupt, just in case it was already enabled
|
||||||
NVIC_DisableIRQ(irq);
|
NVIC_DisableIRQ(irq);
|
||||||
@ -86,7 +86,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
|||||||
|
|
||||||
pmc_set_writeprotect(false);
|
pmc_set_writeprotect(false);
|
||||||
pmc_enable_periph_clk((uint32_t)irq);
|
pmc_enable_periph_clk((uint32_t)irq);
|
||||||
NVIC_SetPriority(irq, timer_config[timer_num].priority);
|
NVIC_SetPriority(irq, TimerConfig [timer_num].priority);
|
||||||
|
|
||||||
// wave mode, reset counter on match with RC,
|
// wave mode, reset counter on match with RC,
|
||||||
TC_Configure(tc, channel, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK1);
|
TC_Configure(tc, channel, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK1);
|
||||||
@ -105,12 +105,12 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void HAL_timer_enable_interrupt(const uint8_t timer_num) {
|
void HAL_timer_enable_interrupt(const uint8_t timer_num) {
|
||||||
IRQn_Type irq = timer_config[timer_num].IRQ_Id;
|
IRQn_Type irq = TimerConfig[timer_num].IRQ_Id;
|
||||||
NVIC_EnableIRQ(irq);
|
NVIC_EnableIRQ(irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_timer_disable_interrupt(const uint8_t timer_num) {
|
void HAL_timer_disable_interrupt(const uint8_t timer_num) {
|
||||||
IRQn_Type irq = timer_config[timer_num].IRQ_Id;
|
IRQn_Type irq = TimerConfig[timer_num].IRQ_Id;
|
||||||
NVIC_DisableIRQ(irq);
|
NVIC_DisableIRQ(irq);
|
||||||
|
|
||||||
// We NEED memory barriers to ensure Interrupts are actually disabled!
|
// We NEED memory barriers to ensure Interrupts are actually disabled!
|
||||||
@ -125,7 +125,7 @@ static bool NVIC_GetEnabledIRQ(IRQn_Type IRQn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool HAL_timer_interrupt_enabled(const uint8_t timer_num) {
|
bool HAL_timer_interrupt_enabled(const uint8_t timer_num) {
|
||||||
IRQn_Type irq = timer_config[timer_num].IRQ_Id;
|
IRQn_Type irq = TimerConfig[timer_num].IRQ_Id;
|
||||||
return NVIC_GetEnabledIRQ(irq);
|
return NVIC_GetEnabledIRQ(irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,17 +37,17 @@ typedef uint32_t hal_timer_t;
|
|||||||
|
|
||||||
#define HAL_TIMER_RATE ((F_CPU) / 2) // frequency of timers peripherals
|
#define HAL_TIMER_RATE ((F_CPU) / 2) // frequency of timers peripherals
|
||||||
|
|
||||||
#ifndef MF_TIMER_STEP
|
#ifndef STEP_TIMER_NUM
|
||||||
#define MF_TIMER_STEP 2 // Timer Index for Stepper
|
#define STEP_TIMER_NUM 2 // Timer Index for Stepper
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_PULSE
|
#ifndef PULSE_TIMER_NUM
|
||||||
#define MF_TIMER_PULSE MF_TIMER_STEP
|
#define PULSE_TIMER_NUM STEP_TIMER_NUM
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_TEMP
|
#ifndef TEMP_TIMER_NUM
|
||||||
#define MF_TIMER_TEMP 4 // Timer Index for Temperature
|
#define TEMP_TIMER_NUM 4 // Timer Index for Temperature
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_TONE
|
#ifndef TONE_TIMER_NUM
|
||||||
#define MF_TIMER_TONE 6 // index of timer to use for beeper tones
|
#define TONE_TIMER_NUM 6 // index of timer to use for beeper tones
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TEMP_TIMER_FREQUENCY 1000 // temperature interrupt frequency
|
#define TEMP_TIMER_FREQUENCY 1000 // temperature interrupt frequency
|
||||||
@ -60,12 +60,12 @@ typedef uint32_t hal_timer_t;
|
|||||||
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
||||||
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
||||||
|
|
||||||
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
|
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM)
|
||||||
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP)
|
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM)
|
||||||
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
|
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM)
|
||||||
|
|
||||||
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP)
|
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM)
|
||||||
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP)
|
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM)
|
||||||
|
|
||||||
#ifndef HAL_STEP_TIMER_ISR
|
#ifndef HAL_STEP_TIMER_ISR
|
||||||
#define HAL_STEP_TIMER_ISR() void TC2_Handler()
|
#define HAL_STEP_TIMER_ISR() void TC2_Handler()
|
||||||
@ -92,7 +92,7 @@ typedef struct {
|
|||||||
// Public Variables
|
// Public Variables
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
extern const tTimerConfig timer_config[];
|
extern const tTimerConfig TimerConfig[];
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
// Public functions
|
// Public functions
|
||||||
@ -101,17 +101,17 @@ extern const tTimerConfig timer_config[];
|
|||||||
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency);
|
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency);
|
||||||
|
|
||||||
FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) {
|
FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) {
|
||||||
const tTimerConfig * const pConfig = &timer_config[timer_num];
|
const tTimerConfig * const pConfig = &TimerConfig[timer_num];
|
||||||
pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_RC = compare;
|
pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_RC = compare;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) {
|
FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) {
|
||||||
const tTimerConfig * const pConfig = &timer_config[timer_num];
|
const tTimerConfig * const pConfig = &TimerConfig[timer_num];
|
||||||
return pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_RC;
|
return pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_RC;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
|
FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
|
||||||
const tTimerConfig * const pConfig = &timer_config[timer_num];
|
const tTimerConfig * const pConfig = &TimerConfig[timer_num];
|
||||||
return pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_CV;
|
return pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_CV;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,9 +120,9 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num);
|
|||||||
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
|
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
|
||||||
|
|
||||||
FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) {
|
FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) {
|
||||||
const tTimerConfig * const pConfig = &timer_config[timer_num];
|
const tTimerConfig * const pConfig = &TimerConfig[timer_num];
|
||||||
// Reading the status register clears the interrupt flag
|
// Reading the status register clears the interrupt flag
|
||||||
pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_SR;
|
pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_SR;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define HAL_timer_isr_epilogue(T)
|
#define HAL_timer_isr_epilogue(TIMER_NUM)
|
||||||
|
@ -4,12 +4,11 @@
|
|||||||
# Windows: bossac.exe
|
# Windows: bossac.exe
|
||||||
# Other: leave unchanged
|
# Other: leave unchanged
|
||||||
#
|
#
|
||||||
import pioutil
|
|
||||||
if pioutil.is_pio_build():
|
|
||||||
import platform
|
|
||||||
current_OS = platform.system()
|
|
||||||
|
|
||||||
if current_OS == 'Windows':
|
import platform
|
||||||
|
current_OS = platform.system()
|
||||||
|
|
||||||
|
if current_OS == 'Windows':
|
||||||
|
|
||||||
Import("env")
|
Import("env")
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@
|
|||||||
/* ------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------ */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \page arduino_due_x_board_info "Arduino Due/X - Board information"
|
* \page arduino_due_x_board_info "Arduino Due/X - Board informations"
|
||||||
* This page lists several definition related to the board description.
|
* This page lists several definition related to the board description.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#include "../../../sd/cardreader.h"
|
#include "../../../sd/cardreader.h"
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include "sd_mmc_spi_mem.h"
|
#include "sd_mmc_spi_mem.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SD_MMC_BLOCK_SIZE 512
|
#define SD_MMC_BLOCK_SIZE 512
|
||||||
|
@ -90,7 +90,7 @@ typedef struct {
|
|||||||
//! This buffer must be word align for DATA IN phase (use prefix COMPILER_WORD_ALIGNED for buffer)
|
//! This buffer must be word align for DATA IN phase (use prefix COMPILER_WORD_ALIGNED for buffer)
|
||||||
uint8_t *payload;
|
uint8_t *payload;
|
||||||
|
|
||||||
//! Size of buffer to send or fill, and content the number of byte transferred
|
//! Size of buffer to send or fill, and content the number of byte transfered
|
||||||
uint16_t payload_size;
|
uint16_t payload_size;
|
||||||
|
|
||||||
//! Callback called after reception of ZLP from setup request
|
//! Callback called after reception of ZLP from setup request
|
||||||
@ -132,7 +132,7 @@ typedef void (*udd_callback_halt_cleared_t)(void);
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer is complete
|
* \param status UDD_EP_TRANSFER_OK, if transfer is complete
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
||||||
* \param n number of data transferred
|
* \param n number of data transfered
|
||||||
*/
|
*/
|
||||||
typedef void (*udd_callback_trans_t) (udd_ep_status_t status,
|
typedef void (*udd_callback_trans_t) (udd_ep_status_t status,
|
||||||
iram_size_t nb_transferred, udd_ep_id_t ep);
|
iram_size_t nb_transferred, udd_ep_id_t ep);
|
||||||
@ -303,7 +303,7 @@ bool udd_ep_wait_stall_clear(udd_ep_id_t ep,
|
|||||||
* The driver uses a specific DMA USB to transfer data
|
* The driver uses a specific DMA USB to transfer data
|
||||||
* from internal RAM to endpoint, if this one is available.
|
* from internal RAM to endpoint, if this one is available.
|
||||||
* When the transfer is finished or aborted (stall, reset, ...), the \a callback is called.
|
* When the transfer is finished or aborted (stall, reset, ...), the \a callback is called.
|
||||||
* The \a callback returns the transfer status and eventually the number of byte transferred.
|
* The \a callback returns the transfer status and eventually the number of byte transfered.
|
||||||
* Note: The control endpoint is not authorized.
|
* Note: The control endpoint is not authorized.
|
||||||
*
|
*
|
||||||
* \param ep The ID of the endpoint to use
|
* \param ep The ID of the endpoint to use
|
||||||
|
@ -162,7 +162,7 @@ static void udi_cdc_ctrl_state_notify(uint8_t port, udd_ep_id_t ep);
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer finished
|
* \param status UDD_EP_TRANSFER_OK, if transfer finished
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
||||||
* \param n number of data transferred
|
* \param n number of data transfered
|
||||||
*/
|
*/
|
||||||
static void udi_cdc_serial_state_msg_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep);
|
static void udi_cdc_serial_state_msg_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep);
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ static void udi_cdc_data_received(udd_ep_status_t status, iram_size_t n, udd_ep_
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer finished
|
* \param status UDD_EP_TRANSFER_OK, if transfer finished
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
||||||
* \param n number of data transferred
|
* \param n number of data transfered
|
||||||
*/
|
*/
|
||||||
static void udi_cdc_data_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep);
|
static void udi_cdc_data_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep);
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
//@{
|
//@{
|
||||||
# if UDI_CDC_PORT_NB > 2
|
# if UDI_CDC_PORT_NB > 2
|
||||||
# error USBB, UDP, UDPHS and UOTGHS interfaces have not enough endpoints.
|
# error USBB, UDP, UDPHS and UOTGHS interfaces have not enought endpoints.
|
||||||
# endif
|
# endif
|
||||||
#define UDI_CDC_DATA_EP_IN_0 (1 | USB_EP_DIR_IN) // TX
|
#define UDI_CDC_DATA_EP_IN_0 (1 | USB_EP_DIR_IN) // TX
|
||||||
#define UDI_CDC_DATA_EP_OUT_0 (2 | USB_EP_DIR_OUT) // RX
|
#define UDI_CDC_DATA_EP_OUT_0 (2 | USB_EP_DIR_OUT) // RX
|
||||||
|
@ -173,7 +173,7 @@ static void udi_msc_cbw_wait(void);
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer is finished
|
* \param status UDD_EP_TRANSFER_OK, if transfer is finished
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
||||||
* \param nb_received number of data transferred
|
* \param nb_received number of data transfered
|
||||||
*/
|
*/
|
||||||
static void udi_msc_cbw_received(udd_ep_status_t status,
|
static void udi_msc_cbw_received(udd_ep_status_t status,
|
||||||
iram_size_t nb_received, udd_ep_id_t ep);
|
iram_size_t nb_received, udd_ep_id_t ep);
|
||||||
@ -211,7 +211,7 @@ static void udi_msc_data_send(uint8_t * buffer, uint8_t buf_size);
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer finish
|
* \param status UDD_EP_TRANSFER_OK, if transfer finish
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
||||||
* \param nb_sent number of data transferred
|
* \param nb_sent number of data transfered
|
||||||
*/
|
*/
|
||||||
static void udi_msc_data_sent(udd_ep_status_t status, iram_size_t nb_sent,
|
static void udi_msc_data_sent(udd_ep_status_t status, iram_size_t nb_sent,
|
||||||
udd_ep_id_t ep);
|
udd_ep_id_t ep);
|
||||||
@ -244,7 +244,7 @@ void udi_msc_csw_send(void);
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer is finished
|
* \param status UDD_EP_TRANSFER_OK, if transfer is finished
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
||||||
* \param nb_sent number of data transferred
|
* \param nb_sent number of data transfered
|
||||||
*/
|
*/
|
||||||
static void udi_msc_csw_sent(udd_ep_status_t status, iram_size_t nb_sent,
|
static void udi_msc_csw_sent(udd_ep_status_t status, iram_size_t nb_sent,
|
||||||
udd_ep_id_t ep);
|
udd_ep_id_t ep);
|
||||||
@ -463,7 +463,7 @@ uint8_t udi_msc_getsetting(void)
|
|||||||
static void udi_msc_cbw_invalid(void)
|
static void udi_msc_cbw_invalid(void)
|
||||||
{
|
{
|
||||||
if (!udi_msc_b_cbw_invalid)
|
if (!udi_msc_b_cbw_invalid)
|
||||||
return; // Don't re-stall endpoint if error reset by setup
|
return; // Don't re-stall endpoint if error reseted by setup
|
||||||
udd_ep_set_halt(UDI_MSC_EP_OUT);
|
udd_ep_set_halt(UDI_MSC_EP_OUT);
|
||||||
// If stall cleared then re-stall it. Only Setup MSC Reset can clear it
|
// If stall cleared then re-stall it. Only Setup MSC Reset can clear it
|
||||||
udd_ep_wait_stall_clear(UDI_MSC_EP_OUT, udi_msc_cbw_invalid);
|
udd_ep_wait_stall_clear(UDI_MSC_EP_OUT, udi_msc_cbw_invalid);
|
||||||
@ -472,7 +472,7 @@ static void udi_msc_cbw_invalid(void)
|
|||||||
static void udi_msc_csw_invalid(void)
|
static void udi_msc_csw_invalid(void)
|
||||||
{
|
{
|
||||||
if (!udi_msc_b_cbw_invalid)
|
if (!udi_msc_b_cbw_invalid)
|
||||||
return; // Don't re-stall endpoint if error reset by setup
|
return; // Don't re-stall endpoint if error reseted by setup
|
||||||
udd_ep_set_halt(UDI_MSC_EP_IN);
|
udd_ep_set_halt(UDI_MSC_EP_IN);
|
||||||
// If stall cleared then re-stall it. Only Setup MSC Reset can clear it
|
// If stall cleared then re-stall it. Only Setup MSC Reset can clear it
|
||||||
udd_ep_wait_stall_clear(UDI_MSC_EP_IN, udi_msc_csw_invalid);
|
udd_ep_wait_stall_clear(UDI_MSC_EP_IN, udi_msc_csw_invalid);
|
||||||
|
@ -325,7 +325,7 @@ static void udd_sleep_mode(bool b_idle)
|
|||||||
/**
|
/**
|
||||||
* \name Control endpoint low level management routine.
|
* \name Control endpoint low level management routine.
|
||||||
*
|
*
|
||||||
* This function performs control endpoint management.
|
* This function performs control endpoint mangement.
|
||||||
* It handle the SETUP/DATA/HANDSHAKE phases of a control transaction.
|
* It handle the SETUP/DATA/HANDSHAKE phases of a control transaction.
|
||||||
*/
|
*/
|
||||||
//@{
|
//@{
|
||||||
@ -397,9 +397,9 @@ static void udd_ctrl_endofrequest(void);
|
|||||||
/**
|
/**
|
||||||
* \brief Main interrupt routine for control endpoint
|
* \brief Main interrupt routine for control endpoint
|
||||||
*
|
*
|
||||||
* This switches control endpoint events to correct sub function.
|
* This switchs control endpoint events to correct sub function.
|
||||||
*
|
*
|
||||||
* \return \c 1 if an event about control endpoint is occurred, otherwise \c 0.
|
* \return \c 1 if an event about control endpoint is occured, otherwise \c 0.
|
||||||
*/
|
*/
|
||||||
static bool udd_ctrl_interrupt(void);
|
static bool udd_ctrl_interrupt(void);
|
||||||
|
|
||||||
@ -410,7 +410,7 @@ static bool udd_ctrl_interrupt(void);
|
|||||||
* \name Management of bulk/interrupt/isochronous endpoints
|
* \name Management of bulk/interrupt/isochronous endpoints
|
||||||
*
|
*
|
||||||
* The UDD manages the data transfer on endpoints:
|
* The UDD manages the data transfer on endpoints:
|
||||||
* - Start data transfer on endpoint with USB Device DMA
|
* - Start data tranfer on endpoint with USB Device DMA
|
||||||
* - Send a ZLP packet if requested
|
* - Send a ZLP packet if requested
|
||||||
* - Call callback registered to signal end of transfer
|
* - Call callback registered to signal end of transfer
|
||||||
* The transfer abort and stall feature are supported.
|
* The transfer abort and stall feature are supported.
|
||||||
@ -431,7 +431,7 @@ typedef struct {
|
|||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
//! Size of buffer to send or fill
|
//! Size of buffer to send or fill
|
||||||
iram_size_t buf_size;
|
iram_size_t buf_size;
|
||||||
//!< Size of data transferred
|
//!< Size of data transfered
|
||||||
iram_size_t buf_cnt;
|
iram_size_t buf_cnt;
|
||||||
//!< Size of data loaded (or prepared for DMA) last time
|
//!< Size of data loaded (or prepared for DMA) last time
|
||||||
iram_size_t buf_load;
|
iram_size_t buf_load;
|
||||||
@ -486,7 +486,7 @@ static void udd_ep_finish_job(udd_ep_job_t * ptr_job, bool b_abort, uint8_t ep_n
|
|||||||
|
|
||||||
#ifdef UDD_EP_DMA_SUPPORTED
|
#ifdef UDD_EP_DMA_SUPPORTED
|
||||||
/**
|
/**
|
||||||
* \brief Start the next transfer if necessary or complete the job associated.
|
* \brief Start the next transfer if necessary or complet the job associated.
|
||||||
*
|
*
|
||||||
* \param ep endpoint number without direction flag
|
* \param ep endpoint number without direction flag
|
||||||
*/
|
*/
|
||||||
@ -496,9 +496,9 @@ static void udd_ep_finish_job(udd_ep_job_t * ptr_job, bool b_abort, uint8_t ep_n
|
|||||||
/**
|
/**
|
||||||
* \brief Main interrupt routine for bulk/interrupt/isochronous endpoints
|
* \brief Main interrupt routine for bulk/interrupt/isochronous endpoints
|
||||||
*
|
*
|
||||||
* This switches endpoint events to correct sub function.
|
* This switchs endpoint events to correct sub function.
|
||||||
*
|
*
|
||||||
* \return \c 1 if an event about bulk/interrupt/isochronous endpoints has occurred, otherwise \c 0.
|
* \return \c 1 if an event about bulk/interrupt/isochronous endpoints has occured, otherwise \c 0.
|
||||||
*/
|
*/
|
||||||
static bool udd_ep_interrupt(void);
|
static bool udd_ep_interrupt(void);
|
||||||
|
|
||||||
@ -520,7 +520,7 @@ static bool udd_ep_interrupt(void);
|
|||||||
*
|
*
|
||||||
* Note:
|
* Note:
|
||||||
* Here, the global interrupt mask is not clear when an USB interrupt is enabled
|
* Here, the global interrupt mask is not clear when an USB interrupt is enabled
|
||||||
* because this one can not be occurred during the USB ISR (=during INTX is masked).
|
* because this one can not be occured during the USB ISR (=during INTX is masked).
|
||||||
* See Technical reference $3.8.3 Masking interrupt requests in peripheral modules.
|
* See Technical reference $3.8.3 Masking interrupt requests in peripheral modules.
|
||||||
*/
|
*/
|
||||||
#ifdef UHD_ENABLE
|
#ifdef UHD_ENABLE
|
||||||
@ -787,7 +787,7 @@ void udd_attach(void)
|
|||||||
udd_sleep_mode(true);
|
udd_sleep_mode(true);
|
||||||
otg_unfreeze_clock();
|
otg_unfreeze_clock();
|
||||||
|
|
||||||
// This section of clock check can be improved with a check of
|
// This section of clock check can be improved with a chek of
|
||||||
// USB clock source via sysclk()
|
// USB clock source via sysclk()
|
||||||
// Check USB clock because the source can be a PLL
|
// Check USB clock because the source can be a PLL
|
||||||
while (!Is_otg_clock_usable());
|
while (!Is_otg_clock_usable());
|
||||||
@ -803,7 +803,7 @@ void udd_attach(void)
|
|||||||
#ifdef USB_DEVICE_HS_SUPPORT
|
#ifdef USB_DEVICE_HS_SUPPORT
|
||||||
udd_enable_msof_interrupt();
|
udd_enable_msof_interrupt();
|
||||||
#endif
|
#endif
|
||||||
// Reset following interrupts flag
|
// Reset following interupts flag
|
||||||
udd_ack_reset();
|
udd_ack_reset();
|
||||||
udd_ack_sof();
|
udd_ack_sof();
|
||||||
udd_ack_msof();
|
udd_ack_msof();
|
||||||
@ -902,7 +902,7 @@ bool udd_ep_alloc(udd_ep_id_t ep, uint8_t bmAttributes,
|
|||||||
}
|
}
|
||||||
dbg_print("alloc(%x, %d) ", ep, MaxEndpointSize);
|
dbg_print("alloc(%x, %d) ", ep, MaxEndpointSize);
|
||||||
|
|
||||||
// Bank choice
|
// Bank choise
|
||||||
switch (bmAttributes & USB_EP_TYPE_MASK) {
|
switch (bmAttributes & USB_EP_TYPE_MASK) {
|
||||||
case USB_EP_TYPE_ISOCHRONOUS:
|
case USB_EP_TYPE_ISOCHRONOUS:
|
||||||
nb_bank = UDD_ISOCHRONOUS_NB_BANK(ep);
|
nb_bank = UDD_ISOCHRONOUS_NB_BANK(ep);
|
||||||
@ -1228,7 +1228,7 @@ bool udd_ep_wait_stall_clear(udd_ep_id_t ep,
|
|||||||
|
|
||||||
if (Is_udd_endpoint_stall_requested(ep)
|
if (Is_udd_endpoint_stall_requested(ep)
|
||||||
|| ptr_job->stall_requested) {
|
|| ptr_job->stall_requested) {
|
||||||
// Endpoint halted then registers the callback
|
// Endpoint halted then registes the callback
|
||||||
ptr_job->busy = true;
|
ptr_job->busy = true;
|
||||||
ptr_job->call_nohalt = callback;
|
ptr_job->call_nohalt = callback;
|
||||||
} else {
|
} else {
|
||||||
@ -1386,7 +1386,7 @@ static void udd_ctrl_setup_received(void)
|
|||||||
|
|
||||||
// Decode setup request
|
// Decode setup request
|
||||||
if (udc_process_setup() == false) {
|
if (udc_process_setup() == false) {
|
||||||
// Setup request unknown then stall it
|
// Setup request unknow then stall it
|
||||||
udd_ctrl_stall_data();
|
udd_ctrl_stall_data();
|
||||||
udd_ack_setup_received(0);
|
udd_ack_setup_received(0);
|
||||||
return;
|
return;
|
||||||
@ -1447,7 +1447,7 @@ static void udd_ctrl_in_sent(void)
|
|||||||
udd_ctrl_prev_payload_buf_cnt += udd_ctrl_payload_buf_cnt;
|
udd_ctrl_prev_payload_buf_cnt += udd_ctrl_payload_buf_cnt;
|
||||||
if ((udd_g_ctrlreq.req.wLength == udd_ctrl_prev_payload_buf_cnt)
|
if ((udd_g_ctrlreq.req.wLength == udd_ctrl_prev_payload_buf_cnt)
|
||||||
|| b_shortpacket) {
|
|| b_shortpacket) {
|
||||||
// All data requested are transferred or a short packet has been sent
|
// All data requested are transfered or a short packet has been sent
|
||||||
// then it is the end of data phase.
|
// then it is the end of data phase.
|
||||||
// Generate an OUT ZLP for handshake phase.
|
// Generate an OUT ZLP for handshake phase.
|
||||||
udd_ctrl_send_zlp_out();
|
udd_ctrl_send_zlp_out();
|
||||||
@ -1516,7 +1516,7 @@ static void udd_ctrl_out_received(void)
|
|||||||
// End of SETUP request:
|
// End of SETUP request:
|
||||||
// - Data IN Phase aborted,
|
// - Data IN Phase aborted,
|
||||||
// - or last Data IN Phase hidden by ZLP OUT sending quiclky,
|
// - or last Data IN Phase hidden by ZLP OUT sending quiclky,
|
||||||
// - or ZLP OUT received normally.
|
// - or ZLP OUT received normaly.
|
||||||
udd_ctrl_endofrequest();
|
udd_ctrl_endofrequest();
|
||||||
} else {
|
} else {
|
||||||
// Protocol error during SETUP request
|
// Protocol error during SETUP request
|
||||||
@ -1544,7 +1544,7 @@ static void udd_ctrl_out_received(void)
|
|||||||
(udd_ctrl_prev_payload_buf_cnt +
|
(udd_ctrl_prev_payload_buf_cnt +
|
||||||
udd_ctrl_payload_buf_cnt))) {
|
udd_ctrl_payload_buf_cnt))) {
|
||||||
// End of reception because it is a short packet
|
// End of reception because it is a short packet
|
||||||
// Before send ZLP, call intermediate callback
|
// Before send ZLP, call intermediat calback
|
||||||
// in case of data receiv generate a stall
|
// in case of data receiv generate a stall
|
||||||
udd_g_ctrlreq.payload_size = udd_ctrl_payload_buf_cnt;
|
udd_g_ctrlreq.payload_size = udd_ctrl_payload_buf_cnt;
|
||||||
if (NULL != udd_g_ctrlreq.over_under_run) {
|
if (NULL != udd_g_ctrlreq.over_under_run) {
|
||||||
@ -1565,7 +1565,7 @@ static void udd_ctrl_out_received(void)
|
|||||||
if (udd_g_ctrlreq.payload_size == udd_ctrl_payload_buf_cnt) {
|
if (udd_g_ctrlreq.payload_size == udd_ctrl_payload_buf_cnt) {
|
||||||
// Overrun then request a new payload buffer
|
// Overrun then request a new payload buffer
|
||||||
if (!udd_g_ctrlreq.over_under_run) {
|
if (!udd_g_ctrlreq.over_under_run) {
|
||||||
// No callback available to request a new payload buffer
|
// No callback availabled to request a new payload buffer
|
||||||
udd_ctrl_stall_data();
|
udd_ctrl_stall_data();
|
||||||
// Ack reception of OUT to replace NAK by a STALL
|
// Ack reception of OUT to replace NAK by a STALL
|
||||||
udd_ack_out_received(0);
|
udd_ack_out_received(0);
|
||||||
@ -1805,7 +1805,7 @@ static void udd_ep_trans_done(udd_ep_id_t ep)
|
|||||||
// transfer size of UDD_ENDPOINT_MAX_TRANS Bytes
|
// transfer size of UDD_ENDPOINT_MAX_TRANS Bytes
|
||||||
next_trans = UDD_ENDPOINT_MAX_TRANS;
|
next_trans = UDD_ENDPOINT_MAX_TRANS;
|
||||||
|
|
||||||
// Set 0 to transfer the maximum
|
// Set 0 to tranfer the maximum
|
||||||
udd_dma_ctrl = UOTGHS_DEVDMACONTROL_BUFF_LENGTH(0);
|
udd_dma_ctrl = UOTGHS_DEVDMACONTROL_BUFF_LENGTH(0);
|
||||||
} else {
|
} else {
|
||||||
udd_dma_ctrl = UOTGHS_DEVDMACONTROL_BUFF_LENGTH(next_trans);
|
udd_dma_ctrl = UOTGHS_DEVDMACONTROL_BUFF_LENGTH(next_trans);
|
||||||
@ -1850,7 +1850,7 @@ static void udd_ep_trans_done(udd_ep_id_t ep)
|
|||||||
}
|
}
|
||||||
cpu_irq_restore(flags);
|
cpu_irq_restore(flags);
|
||||||
|
|
||||||
// Here a ZLP has been received
|
// Here a ZLP has been recieved
|
||||||
// and the DMA transfer must be not started.
|
// and the DMA transfer must be not started.
|
||||||
// It is the end of transfer
|
// It is the end of transfer
|
||||||
ptr_job->buf_size = ptr_job->buf_cnt;
|
ptr_job->buf_size = ptr_job->buf_cnt;
|
||||||
@ -1991,13 +1991,13 @@ static bool udd_ep_interrupt(void)
|
|||||||
}
|
}
|
||||||
dbg_print("dma%x: ", ep);
|
dbg_print("dma%x: ", ep);
|
||||||
udd_disable_endpoint_dma_interrupt(ep);
|
udd_disable_endpoint_dma_interrupt(ep);
|
||||||
// Save number of data no transferred
|
// Save number of data no transfered
|
||||||
nb_remaining = (udd_endpoint_dma_get_status(ep) &
|
nb_remaining = (udd_endpoint_dma_get_status(ep) &
|
||||||
UOTGHS_DEVDMASTATUS_BUFF_COUNT_Msk)
|
UOTGHS_DEVDMASTATUS_BUFF_COUNT_Msk)
|
||||||
>> UOTGHS_DEVDMASTATUS_BUFF_COUNT_Pos;
|
>> UOTGHS_DEVDMASTATUS_BUFF_COUNT_Pos;
|
||||||
if (nb_remaining) {
|
if (nb_remaining) {
|
||||||
// Transfer no complete (short packet or ZLP) then:
|
// Transfer no complete (short packet or ZLP) then:
|
||||||
// Update number of data transferred
|
// Update number of data transfered
|
||||||
ptr_job->buf_cnt -= nb_remaining;
|
ptr_job->buf_cnt -= nb_remaining;
|
||||||
// Set transfer complete to stop the transfer
|
// Set transfer complete to stop the transfer
|
||||||
ptr_job->buf_size = ptr_job->buf_cnt;
|
ptr_job->buf_size = ptr_job->buf_cnt;
|
||||||
@ -2056,7 +2056,7 @@ static bool udd_ep_interrupt(void)
|
|||||||
udd_disable_endpoint_interrupt(ep);
|
udd_disable_endpoint_interrupt(ep);
|
||||||
|
|
||||||
Assert(ptr_job->stall_requested);
|
Assert(ptr_job->stall_requested);
|
||||||
// A stall has been requested during background transfer
|
// A stall has been requested during backgound transfer
|
||||||
ptr_job->stall_requested = false;
|
ptr_job->stall_requested = false;
|
||||||
udd_disable_endpoint_bank_autoswitch(ep);
|
udd_disable_endpoint_bank_autoswitch(ep);
|
||||||
udd_enable_stall_handshake(ep);
|
udd_enable_stall_handshake(ep);
|
||||||
|
@ -130,7 +130,7 @@ struct usb_msc_cbw {
|
|||||||
struct usb_msc_csw {
|
struct usb_msc_csw {
|
||||||
le32_t dCSWSignature; //!< Must contain 'USBS'
|
le32_t dCSWSignature; //!< Must contain 'USBS'
|
||||||
le32_t dCSWTag; //!< Same as dCBWTag
|
le32_t dCSWTag; //!< Same as dCBWTag
|
||||||
le32_t dCSWDataResidue; //!< Number of bytes not transferred
|
le32_t dCSWDataResidue; //!< Number of bytes not transfered
|
||||||
uint8_t bCSWStatus; //!< Status code
|
uint8_t bCSWStatus; //!< Status code
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,10 +28,6 @@
|
|||||||
#include <esp_adc_cal.h>
|
#include <esp_adc_cal.h>
|
||||||
#include <HardwareSerial.h>
|
#include <HardwareSerial.h>
|
||||||
|
|
||||||
#if ENABLED(USE_ESP32_TASK_WDT)
|
|
||||||
#include <esp_task_wdt.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if ENABLED(WIFISUPPORT)
|
#if ENABLED(WIFISUPPORT)
|
||||||
#include <ESPAsyncWebServer.h>
|
#include <ESPAsyncWebServer.h>
|
||||||
#include "wifi.h"
|
#include "wifi.h"
|
||||||
@ -94,24 +90,8 @@ volatile int numPWMUsed = 0,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(USE_ESP32_EXIO)
|
|
||||||
HardwareSerial YSerial2(2);
|
|
||||||
|
|
||||||
void Write_EXIO(uint8_t IO, uint8_t v) {
|
|
||||||
if (ISRS_ENABLED()) {
|
|
||||||
DISABLE_ISRS();
|
|
||||||
YSerial2.write(0x80 | (((char)v) << 5) | (IO - 100));
|
|
||||||
ENABLE_ISRS();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
YSerial2.write(0x80 | (((char)v) << 5) | (IO - 100));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void HAL_init_board() {
|
void HAL_init_board() {
|
||||||
#if ENABLED(USE_ESP32_TASK_WDT)
|
|
||||||
esp_task_wdt_init(10, true);
|
|
||||||
#endif
|
|
||||||
#if ENABLED(ESP3D_WIFISUPPORT)
|
#if ENABLED(ESP3D_WIFISUPPORT)
|
||||||
esp3dlib.init();
|
esp3dlib.init();
|
||||||
#elif ENABLED(WIFISUPPORT)
|
#elif ENABLED(WIFISUPPORT)
|
||||||
@ -147,11 +127,7 @@ void HAL_init_board() {
|
|||||||
// Initialize the i2s peripheral only if the I2S stepper stream is enabled.
|
// Initialize the i2s peripheral only if the I2S stepper stream is enabled.
|
||||||
// The following initialization is performed after Serial1 and Serial2 are defined as
|
// The following initialization is performed after Serial1 and Serial2 are defined as
|
||||||
// their native pins might conflict with the i2s stream even when they are remapped.
|
// their native pins might conflict with the i2s stream even when they are remapped.
|
||||||
#if ENABLED(USE_ESP32_EXIO)
|
TERN_(I2S_STEPPER_STREAM, i2s_init());
|
||||||
YSerial2.begin(460800 * 3, SERIAL_8N1, 16, 17);
|
|
||||||
#elif ENABLED(I2S_STEPPER_STREAM)
|
|
||||||
i2s_init();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_idletask() {
|
void HAL_idletask() {
|
||||||
@ -276,7 +252,7 @@ void analogWrite(pin_t pin, int value) {
|
|||||||
idx = numPWMUsed;
|
idx = numPWMUsed;
|
||||||
pwmPins[idx] = pin;
|
pwmPins[idx] = pin;
|
||||||
// Start timer on first use
|
// Start timer on first use
|
||||||
if (idx == 0) HAL_timer_start(MF_TIMER_PWM, PWM_TIMER_FREQUENCY);
|
if (idx == 0) HAL_timer_start(PWM_TIMER_NUM, PWM_TIMER_FREQUENCY);
|
||||||
|
|
||||||
++numPWMUsed;
|
++numPWMUsed;
|
||||||
}
|
}
|
||||||
@ -287,7 +263,7 @@ void analogWrite(pin_t pin, int value) {
|
|||||||
|
|
||||||
// Handle PWM timer interrupt
|
// Handle PWM timer interrupt
|
||||||
HAL_PWM_TIMER_ISR() {
|
HAL_PWM_TIMER_ISR() {
|
||||||
HAL_timer_isr_prologue(MF_TIMER_PWM);
|
HAL_timer_isr_prologue(PWM_TIMER_NUM);
|
||||||
|
|
||||||
static uint8_t count = 0;
|
static uint8_t count = 0;
|
||||||
|
|
||||||
@ -301,7 +277,7 @@ HAL_PWM_TIMER_ISR() {
|
|||||||
// 128 for 7 Bit resolution
|
// 128 for 7 Bit resolution
|
||||||
count = (count + 1) & 0x7F;
|
count = (count + 1) & 0x7F;
|
||||||
|
|
||||||
HAL_timer_isr_epilogue(MF_TIMER_PWM);
|
HAL_timer_isr_epilogue(PWM_TIMER_NUM);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // ARDUINO_ARCH_ESP32
|
#endif // ARDUINO_ARCH_ESP32
|
||||||
|
@ -105,14 +105,16 @@ void HAL_reboot();
|
|||||||
|
|
||||||
void _delay_ms(int delay);
|
void _delay_ms(int delay);
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#if GCC_VERSION <= 50000
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wunused-function"
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int freeMemory();
|
int freeMemory();
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
void analogWrite(pin_t pin, int value);
|
void analogWrite(pin_t pin, int value);
|
||||||
|
|
||||||
@ -129,10 +131,6 @@ void HAL_adc_init();
|
|||||||
|
|
||||||
void HAL_adc_start_conversion(const uint8_t adc_pin);
|
void HAL_adc_start_conversion(const uint8_t adc_pin);
|
||||||
|
|
||||||
// PWM
|
|
||||||
inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); }
|
|
||||||
|
|
||||||
// Pin Map
|
|
||||||
#define GET_PIN_MAP_PIN(index) index
|
#define GET_PIN_MAP_PIN(index) index
|
||||||
#define GET_PIN_MAP_INDEX(pin) pin
|
#define GET_PIN_MAP_INDEX(pin) pin
|
||||||
#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval)
|
#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval)
|
||||||
@ -144,10 +142,6 @@ void HAL_idletask();
|
|||||||
inline void HAL_init() {}
|
inline void HAL_init() {}
|
||||||
void HAL_init_board();
|
void HAL_init_board();
|
||||||
|
|
||||||
#if ENABLED(USE_ESP32_EXIO)
|
|
||||||
void Write_EXIO(uint8_t IO, uint8_t v);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Delay in cycles (used by DELAY_NS / DELAY_US)
|
// Delay in cycles (used by DELAY_NS / DELAY_US)
|
||||||
//
|
//
|
||||||
|
@ -53,9 +53,11 @@ static SPISettings spiConfig;
|
|||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
void spiBegin() {
|
void spiBegin() {
|
||||||
#if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_SS)
|
#if !PIN_EXISTS(SD_SS)
|
||||||
OUT_WRITE(SD_SS_PIN, HIGH);
|
#error "SD_SS_PIN not defined!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
OUT_WRITE(SD_SS_PIN, HIGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
void spiInit(uint8_t spiRate) {
|
void spiInit(uint8_t spiRate) {
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
||||||
*
|
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program 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 program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <SPI.h>
|
|
||||||
|
|
||||||
using MarlinSPI = SPIClass;
|
|
@ -38,16 +38,16 @@ volatile static int32_t toggles;
|
|||||||
void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration) {
|
void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration) {
|
||||||
tone_pin = _pin;
|
tone_pin = _pin;
|
||||||
toggles = 2 * frequency * duration / 1000;
|
toggles = 2 * frequency * duration / 1000;
|
||||||
HAL_timer_start(MF_TIMER_TONE, 2 * frequency);
|
HAL_timer_start(TONE_TIMER_NUM, 2 * frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
void noTone(const pin_t _pin) {
|
void noTone(const pin_t _pin) {
|
||||||
HAL_timer_disable_interrupt(MF_TIMER_TONE);
|
HAL_timer_disable_interrupt(TONE_TIMER_NUM);
|
||||||
WRITE(_pin, LOW);
|
WRITE(_pin, LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
HAL_TONE_TIMER_ISR() {
|
HAL_TONE_TIMER_ISR() {
|
||||||
HAL_timer_isr_prologue(MF_TIMER_TONE);
|
HAL_timer_isr_prologue(TONE_TIMER_NUM);
|
||||||
|
|
||||||
if (toggles) {
|
if (toggles) {
|
||||||
toggles--;
|
toggles--;
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
# Name, Type, SubType, Offset, Size, Flags
|
|
||||||
nvs, data, nvs, 0x9000, 0x5000,
|
|
||||||
otadata, data, ota, 0xe000, 0x2000,
|
|
||||||
app0, app, ota_0, 0x10000, 0x180000,
|
|
||||||
app1, app, ota_1, 0x190000, 0x180000,
|
|
||||||
spiffs, data, spiffs, 0x310000, 0xF0000,
|
|
|
@ -40,19 +40,13 @@
|
|||||||
// Set pin as input with pullup mode
|
// Set pin as input with pullup mode
|
||||||
#define _PULLUP(IO, v) pinMode(IO, v ? INPUT_PULLUP : INPUT)
|
#define _PULLUP(IO, v) pinMode(IO, v ? INPUT_PULLUP : INPUT)
|
||||||
|
|
||||||
#if ENABLED(USE_ESP32_EXIO)
|
// Read a pin wrapper
|
||||||
// Read a pin wrapper
|
#define READ(IO) (IS_I2S_EXPANDER_PIN(IO) ? i2s_state(I2S_EXPANDER_PIN_INDEX(IO)) : digitalRead(IO))
|
||||||
#define READ(IO) digitalRead(IO)
|
|
||||||
// Write to a pin wrapper
|
|
||||||
#define WRITE(IO, v) (IO >= 100 ? Write_EXIO(IO, v) : digitalWrite(IO, v))
|
|
||||||
#else
|
|
||||||
// Read a pin wrapper
|
|
||||||
#define READ(IO) (IS_I2S_EXPANDER_PIN(IO) ? i2s_state(I2S_EXPANDER_PIN_INDEX(IO)) : digitalRead(IO))
|
|
||||||
// Write to a pin wrapper
|
|
||||||
#define WRITE(IO, v) (IS_I2S_EXPANDER_PIN(IO) ? i2s_write(I2S_EXPANDER_PIN_INDEX(IO), v) : digitalWrite(IO, v))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Set pin as input wrapper (0x80 | (v << 5) | (IO - 100))
|
// Write to a pin wrapper
|
||||||
|
#define WRITE(IO, v) (IS_I2S_EXPANDER_PIN(IO) ? i2s_write(I2S_EXPANDER_PIN_INDEX(IO), v) : digitalWrite(IO, v))
|
||||||
|
|
||||||
|
// Set pin as input wrapper
|
||||||
#define SET_INPUT(IO) _SET_INPUT(IO)
|
#define SET_INPUT(IO) _SET_INPUT(IO)
|
||||||
|
|
||||||
// Set pin as input with pullup wrapper
|
// Set pin as input with pullup wrapper
|
||||||
|
@ -23,8 +23,6 @@
|
|||||||
|
|
||||||
#include "../../inc/MarlinConfigPre.h"
|
#include "../../inc/MarlinConfigPre.h"
|
||||||
|
|
||||||
#if DISABLED(USE_ESP32_EXIO)
|
|
||||||
|
|
||||||
#include "i2s.h"
|
#include "i2s.h"
|
||||||
|
|
||||||
#include "../shared/Marduino.h"
|
#include "../shared/Marduino.h"
|
||||||
@ -64,9 +62,12 @@ uint32_t i2s_port_data = 0;
|
|||||||
#define I2S_EXIT_CRITICAL() portEXIT_CRITICAL(&i2s_spinlock[i2s_num])
|
#define I2S_EXIT_CRITICAL() portEXIT_CRITICAL(&i2s_spinlock[i2s_num])
|
||||||
|
|
||||||
static inline void gpio_matrix_out_check(uint32_t gpio, uint32_t signal_idx, bool out_inv, bool oen_inv) {
|
static inline void gpio_matrix_out_check(uint32_t gpio, uint32_t signal_idx, bool out_inv, bool oen_inv) {
|
||||||
|
//if pin = -1, do not need to configure
|
||||||
|
if (gpio != -1) {
|
||||||
PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio], PIN_FUNC_GPIO);
|
PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio], PIN_FUNC_GPIO);
|
||||||
gpio_set_direction((gpio_num_t)gpio, (gpio_mode_t)GPIO_MODE_DEF_OUTPUT);
|
gpio_set_direction((gpio_num_t)gpio, (gpio_mode_t)GPIO_MODE_DEF_OUTPUT);
|
||||||
gpio_matrix_out(gpio, signal_idx, out_inv, oen_inv);
|
gpio_matrix_out(gpio, signal_idx, out_inv, oen_inv);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static esp_err_t i2s_reset_fifo(i2s_port_t i2s_num) {
|
static esp_err_t i2s_reset_fifo(i2s_port_t i2s_num) {
|
||||||
@ -253,7 +254,13 @@ int i2s_init() {
|
|||||||
|
|
||||||
I2S0.fifo_conf.dscr_en = 0;
|
I2S0.fifo_conf.dscr_en = 0;
|
||||||
|
|
||||||
I2S0.conf_chan.tx_chan_mod = TERN(I2S_STEPPER_SPLIT_STREAM, 4, 0);
|
I2S0.conf_chan.tx_chan_mod = (
|
||||||
|
#if ENABLED(I2S_STEPPER_SPLIT_STREAM)
|
||||||
|
4
|
||||||
|
#else
|
||||||
|
0
|
||||||
|
#endif
|
||||||
|
);
|
||||||
I2S0.fifo_conf.tx_fifo_mod = 0;
|
I2S0.fifo_conf.tx_fifo_mod = 0;
|
||||||
I2S0.conf.tx_mono = 0;
|
I2S0.conf.tx_mono = 0;
|
||||||
|
|
||||||
@ -304,16 +311,9 @@ int i2s_init() {
|
|||||||
xTaskCreatePinnedToCore(stepperTask, "StepperTask", 10000, nullptr, 1, nullptr, CONFIG_ARDUINO_RUNNING_CORE); // run I2S stepper task on same core as rest of Marlin
|
xTaskCreatePinnedToCore(stepperTask, "StepperTask", 10000, nullptr, 1, nullptr, CONFIG_ARDUINO_RUNNING_CORE); // run I2S stepper task on same core as rest of Marlin
|
||||||
|
|
||||||
// Route the i2s pins to the appropriate GPIO
|
// Route the i2s pins to the appropriate GPIO
|
||||||
// If a pin is not defined, no need to configure
|
|
||||||
#if defined(I2S_DATA) && I2S_DATA >= 0
|
|
||||||
gpio_matrix_out_check(I2S_DATA, I2S0O_DATA_OUT23_IDX, 0, 0);
|
gpio_matrix_out_check(I2S_DATA, I2S0O_DATA_OUT23_IDX, 0, 0);
|
||||||
#endif
|
|
||||||
#if defined(I2S_BCK) && I2S_BCK >= 0
|
|
||||||
gpio_matrix_out_check(I2S_BCK, I2S0O_BCK_OUT_IDX, 0, 0);
|
gpio_matrix_out_check(I2S_BCK, I2S0O_BCK_OUT_IDX, 0, 0);
|
||||||
#endif
|
|
||||||
#if defined(I2S_WS) && I2S_WS >= 0
|
|
||||||
gpio_matrix_out_check(I2S_WS, I2S0O_WS_OUT_IDX, 0, 0);
|
gpio_matrix_out_check(I2S_WS, I2S0O_WS_OUT_IDX, 0, 0);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Start the I2S peripheral
|
// Start the I2S peripheral
|
||||||
return i2s_start(I2S_NUM_0);
|
return i2s_start(I2S_NUM_0);
|
||||||
@ -340,5 +340,4 @@ void i2s_push_sample() {
|
|||||||
dma.current[dma.rw_pos++] = i2s_port_data;
|
dma.current[dma.rw_pos++] = i2s_port_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // !USE_ESP32_EXIO
|
|
||||||
#endif // ARDUINO_ARCH_ESP32
|
#endif // ARDUINO_ARCH_ESP32
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
static timg_dev_t *TG[2] = {&TIMERG0, &TIMERG1};
|
static timg_dev_t *TG[2] = {&TIMERG0, &TIMERG1};
|
||||||
|
|
||||||
const tTimerConfig timer_config[NUM_HARDWARE_TIMERS] = {
|
const tTimerConfig TimerConfig [NUM_HARDWARE_TIMERS] = {
|
||||||
{ TIMER_GROUP_0, TIMER_0, STEPPER_TIMER_PRESCALE, stepTC_Handler }, // 0 - Stepper
|
{ TIMER_GROUP_0, TIMER_0, STEPPER_TIMER_PRESCALE, stepTC_Handler }, // 0 - Stepper
|
||||||
{ TIMER_GROUP_0, TIMER_1, TEMP_TIMER_PRESCALE, tempTC_Handler }, // 1 - Temperature
|
{ TIMER_GROUP_0, TIMER_1, TEMP_TIMER_PRESCALE, tempTC_Handler }, // 1 - Temperature
|
||||||
{ TIMER_GROUP_1, TIMER_0, PWM_TIMER_PRESCALE, pwmTC_Handler }, // 2 - PWM
|
{ TIMER_GROUP_1, TIMER_0, PWM_TIMER_PRESCALE, pwmTC_Handler }, // 2 - PWM
|
||||||
@ -53,7 +53,7 @@ const tTimerConfig timer_config[NUM_HARDWARE_TIMERS] = {
|
|||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
void IRAM_ATTR timer_isr(void *para) {
|
void IRAM_ATTR timer_isr(void *para) {
|
||||||
const tTimerConfig& timer = timer_config[(int)para];
|
const tTimerConfig& timer = TimerConfig[(int)para];
|
||||||
|
|
||||||
// Retrieve the interrupt status and the counter value
|
// Retrieve the interrupt status and the counter value
|
||||||
// from the timer that reported the interrupt
|
// from the timer that reported the interrupt
|
||||||
@ -82,7 +82,7 @@ void IRAM_ATTR timer_isr(void *para) {
|
|||||||
* @param frequency frequency of the timer
|
* @param frequency frequency of the timer
|
||||||
*/
|
*/
|
||||||
void HAL_timer_start(const uint8_t timer_num, uint32_t frequency) {
|
void HAL_timer_start(const uint8_t timer_num, uint32_t frequency) {
|
||||||
const tTimerConfig timer = timer_config[timer_num];
|
const tTimerConfig timer = TimerConfig[timer_num];
|
||||||
|
|
||||||
timer_config_t config;
|
timer_config_t config;
|
||||||
config.divider = timer.divider;
|
config.divider = timer.divider;
|
||||||
@ -115,7 +115,7 @@ void HAL_timer_start(const uint8_t timer_num, uint32_t frequency) {
|
|||||||
* @param count threshold at which the interrupt is triggered
|
* @param count threshold at which the interrupt is triggered
|
||||||
*/
|
*/
|
||||||
void HAL_timer_set_compare(const uint8_t timer_num, hal_timer_t count) {
|
void HAL_timer_set_compare(const uint8_t timer_num, hal_timer_t count) {
|
||||||
const tTimerConfig timer = timer_config[timer_num];
|
const tTimerConfig timer = TimerConfig[timer_num];
|
||||||
timer_set_alarm_value(timer.group, timer.idx, count);
|
timer_set_alarm_value(timer.group, timer.idx, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +125,7 @@ void HAL_timer_set_compare(const uint8_t timer_num, hal_timer_t count) {
|
|||||||
* @return the timer current threshold for the alarm to be triggered
|
* @return the timer current threshold for the alarm to be triggered
|
||||||
*/
|
*/
|
||||||
hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) {
|
hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) {
|
||||||
const tTimerConfig timer = timer_config[timer_num];
|
const tTimerConfig timer = TimerConfig[timer_num];
|
||||||
|
|
||||||
uint64_t alarm_value;
|
uint64_t alarm_value;
|
||||||
timer_get_alarm_value(timer.group, timer.idx, &alarm_value);
|
timer_get_alarm_value(timer.group, timer.idx, &alarm_value);
|
||||||
@ -139,7 +139,7 @@ hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) {
|
|||||||
* @return the current counter of the alarm
|
* @return the current counter of the alarm
|
||||||
*/
|
*/
|
||||||
hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
|
hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
|
||||||
const tTimerConfig timer = timer_config[timer_num];
|
const tTimerConfig timer = TimerConfig[timer_num];
|
||||||
uint64_t counter_value;
|
uint64_t counter_value;
|
||||||
timer_get_counter_value(timer.group, timer.idx, &counter_value);
|
timer_get_counter_value(timer.group, timer.idx, &counter_value);
|
||||||
return counter_value;
|
return counter_value;
|
||||||
@ -150,7 +150,7 @@ hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
|
|||||||
* @param timer_num timer number to enable interrupts on
|
* @param timer_num timer number to enable interrupts on
|
||||||
*/
|
*/
|
||||||
void HAL_timer_enable_interrupt(const uint8_t timer_num) {
|
void HAL_timer_enable_interrupt(const uint8_t timer_num) {
|
||||||
//const tTimerConfig timer = timer_config[timer_num];
|
//const tTimerConfig timer = TimerConfig[timer_num];
|
||||||
//timer_enable_intr(timer.group, timer.idx);
|
//timer_enable_intr(timer.group, timer.idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,12 +159,12 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num) {
|
|||||||
* @param timer_num timer number to disable interrupts on
|
* @param timer_num timer number to disable interrupts on
|
||||||
*/
|
*/
|
||||||
void HAL_timer_disable_interrupt(const uint8_t timer_num) {
|
void HAL_timer_disable_interrupt(const uint8_t timer_num) {
|
||||||
//const tTimerConfig timer = timer_config[timer_num];
|
//const tTimerConfig timer = TimerConfig[timer_num];
|
||||||
//timer_disable_intr(timer.group, timer.idx);
|
//timer_disable_intr(timer.group, timer.idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HAL_timer_interrupt_enabled(const uint8_t timer_num) {
|
bool HAL_timer_interrupt_enabled(const uint8_t timer_num) {
|
||||||
const tTimerConfig timer = timer_config[timer_num];
|
const tTimerConfig timer = TimerConfig[timer_num];
|
||||||
return TG[timer.group]->int_ena.val | BIT(timer_num);
|
return TG[timer.group]->int_ena.val | BIT(timer_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,20 +32,20 @@
|
|||||||
typedef uint64_t hal_timer_t;
|
typedef uint64_t hal_timer_t;
|
||||||
#define HAL_TIMER_TYPE_MAX 0xFFFFFFFFFFFFFFFFULL
|
#define HAL_TIMER_TYPE_MAX 0xFFFFFFFFFFFFFFFFULL
|
||||||
|
|
||||||
#ifndef MF_TIMER_STEP
|
#ifndef STEP_TIMER_NUM
|
||||||
#define MF_TIMER_STEP 0 // Timer Index for Stepper
|
#define STEP_TIMER_NUM 0 // Timer Index for Stepper
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_PULSE
|
#ifndef PULSE_TIMER_NUM
|
||||||
#define MF_TIMER_PULSE MF_TIMER_STEP
|
#define PULSE_TIMER_NUM STEP_TIMER_NUM
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_TEMP
|
#ifndef TEMP_TIMER_NUM
|
||||||
#define MF_TIMER_TEMP 1 // Timer Index for Temperature
|
#define TEMP_TIMER_NUM 1 // Timer Index for Temperature
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_PWM
|
#ifndef PWM_TIMER_NUM
|
||||||
#define MF_TIMER_PWM 2 // index of timer to use for PWM outputs
|
#define PWM_TIMER_NUM 2 // index of timer to use for PWM outputs
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_TONE
|
#ifndef TONE_TIMER_NUM
|
||||||
#define MF_TIMER_TONE 3 // index of timer for beeper tones
|
#define TONE_TIMER_NUM 3 // index of timer for beeper tones
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define HAL_TIMER_RATE APB_CLK_FREQ // frequency of timer peripherals
|
#define HAL_TIMER_RATE APB_CLK_FREQ // frequency of timer peripherals
|
||||||
@ -79,12 +79,12 @@ typedef uint64_t hal_timer_t;
|
|||||||
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
||||||
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
||||||
|
|
||||||
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
|
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM)
|
||||||
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP)
|
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM)
|
||||||
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
|
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM)
|
||||||
|
|
||||||
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP)
|
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM)
|
||||||
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP)
|
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM)
|
||||||
|
|
||||||
#ifndef HAL_TEMP_TIMER_ISR
|
#ifndef HAL_TEMP_TIMER_ISR
|
||||||
#define HAL_TEMP_TIMER_ISR() extern "C" void tempTC_Handler()
|
#define HAL_TEMP_TIMER_ISR() extern "C" void tempTC_Handler()
|
||||||
@ -121,7 +121,7 @@ typedef struct {
|
|||||||
// Public Variables
|
// Public Variables
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
extern const tTimerConfig timer_config[];
|
extern const tTimerConfig TimerConfig[];
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
// Public functions
|
// Public functions
|
||||||
@ -136,5 +136,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num);
|
|||||||
void HAL_timer_disable_interrupt(const uint8_t timer_num);
|
void HAL_timer_disable_interrupt(const uint8_t timer_num);
|
||||||
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
|
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
|
||||||
|
|
||||||
#define HAL_timer_isr_prologue(T)
|
#define HAL_timer_isr_prologue(TIMER_NUM)
|
||||||
#define HAL_timer_isr_epilogue(T)
|
#define HAL_timer_isr_epilogue(TIMER_NUM)
|
||||||
|
@ -59,7 +59,7 @@ void wifi_init() {
|
|||||||
|
|
||||||
MDNS.addService("http", "tcp", 80);
|
MDNS.addService("http", "tcp", 80);
|
||||||
|
|
||||||
SERIAL_ECHOLNPGM("Successfully connected to WiFi with SSID '" WIFI_SSID "', hostname: '" WIFI_HOSTNAME "', IP address: ", WiFi.localIP().toString().c_str());
|
SERIAL_ECHOLNPAIR("Successfully connected to WiFi with SSID '" WIFI_SSID "', hostname: '" WIFI_HOSTNAME "', IP address: ", WiFi.localIP().toString().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // WIFISUPPORT
|
#endif // WIFISUPPORT
|
||||||
|
@ -63,9 +63,9 @@ uint8_t _getc();
|
|||||||
extern MSerialT usb_serial;
|
extern MSerialT usb_serial;
|
||||||
#define MYSERIAL1 usb_serial
|
#define MYSERIAL1 usb_serial
|
||||||
|
|
||||||
#define CPU_ST7920_DELAY_1 600
|
#define ST7920_DELAY_1 DELAY_NS(600)
|
||||||
#define CPU_ST7920_DELAY_2 750
|
#define ST7920_DELAY_2 DELAY_NS(750)
|
||||||
#define CPU_ST7920_DELAY_3 750
|
#define ST7920_DELAY_3 DELAY_NS(750)
|
||||||
|
|
||||||
//
|
//
|
||||||
// Interrupts
|
// Interrupts
|
||||||
@ -79,14 +79,16 @@ extern MSerialT usb_serial;
|
|||||||
inline void HAL_init() {}
|
inline void HAL_init() {}
|
||||||
|
|
||||||
// Utility functions
|
// Utility functions
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#if GCC_VERSION <= 50000
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wunused-function"
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int freeMemory();
|
int freeMemory();
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
// ADC
|
// ADC
|
||||||
#define HAL_ADC_VREF 5.0
|
#define HAL_ADC_VREF 5.0
|
||||||
@ -101,9 +103,6 @@ void HAL_adc_enable_channel(const uint8_t ch);
|
|||||||
void HAL_adc_start_conversion(const uint8_t ch);
|
void HAL_adc_start_conversion(const uint8_t ch);
|
||||||
uint16_t HAL_adc_get_result();
|
uint16_t HAL_adc_get_result();
|
||||||
|
|
||||||
// PWM
|
|
||||||
inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); }
|
|
||||||
|
|
||||||
// Reset source
|
// Reset source
|
||||||
inline void HAL_clear_reset_source(void) {}
|
inline void HAL_clear_reset_source(void) {}
|
||||||
inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; }
|
inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; }
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
||||||
*
|
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program 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 program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <SPI.h>
|
|
||||||
|
|
||||||
using MarlinSPI = SPIClass;
|
|
@ -54,7 +54,7 @@ void Heater::update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Heater::interrupt(GpioEvent ev) {
|
void Heater::interrupt(GpioEvent ev) {
|
||||||
// unused
|
// ununsed
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __PLAT_LINUX__
|
#endif // __PLAT_LINUX__
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Emulating RAMPS
|
// Emulating RAMPS
|
||||||
#if ENABLED(SPINDLE_LASER_USE_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
#if ENABLED(SPINDLE_LASER_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
||||||
#error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
#error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ constexpr bool VALID_PIN(const pin_t p) { return WITHIN(p, 0, NUM_DIGITAL_PINS);
|
|||||||
// Test whether the pin is PWM
|
// Test whether the pin is PWM
|
||||||
constexpr bool PWM_PIN(const pin_t p) { return false; }
|
constexpr bool PWM_PIN(const pin_t p) { return false; }
|
||||||
|
|
||||||
// Test whether the pin is interruptible
|
// Test whether the pin is interruptable
|
||||||
constexpr bool INTERRUPT_PIN(const pin_t p) { return false; }
|
constexpr bool INTERRUPT_PIN(const pin_t p) { return false; }
|
||||||
|
|
||||||
// Get the pin number at the given index
|
// Get the pin number at the given index
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@ -19,7 +16,6 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __PLAT_LINUX__
|
#ifdef __PLAT_LINUX__
|
||||||
|
|
||||||
//#define GPIO_LOGGING // Full GPIO and Positional Logging
|
//#define GPIO_LOGGING // Full GPIO and Positional Logging
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@ -37,7 +34,6 @@
|
|||||||
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
||||||
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0)
|
|
||||||
#define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin
|
#define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin
|
||||||
|
|
||||||
// active ADC function/mode/code values for PINSEL registers
|
// active ADC function/mode/code values for PINSEL registers
|
||||||
|
@ -37,14 +37,14 @@ typedef uint32_t hal_timer_t;
|
|||||||
|
|
||||||
#define HAL_TIMER_RATE ((SystemCoreClock) / 4) // frequency of timers peripherals
|
#define HAL_TIMER_RATE ((SystemCoreClock) / 4) // frequency of timers peripherals
|
||||||
|
|
||||||
#ifndef MF_TIMER_STEP
|
#ifndef STEP_TIMER_NUM
|
||||||
#define MF_TIMER_STEP 0 // Timer Index for Stepper
|
#define STEP_TIMER_NUM 0 // Timer Index for Stepper
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_PULSE
|
#ifndef PULSE_TIMER_NUM
|
||||||
#define MF_TIMER_PULSE MF_TIMER_STEP
|
#define PULSE_TIMER_NUM STEP_TIMER_NUM
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_TEMP
|
#ifndef TEMP_TIMER_NUM
|
||||||
#define MF_TIMER_TEMP 1 // Timer Index for Temperature
|
#define TEMP_TIMER_NUM 1 // Timer Index for Temperature
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TEMP_TIMER_RATE 1000000
|
#define TEMP_TIMER_RATE 1000000
|
||||||
@ -58,12 +58,12 @@ typedef uint32_t hal_timer_t;
|
|||||||
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
||||||
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
||||||
|
|
||||||
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
|
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM)
|
||||||
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP)
|
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM)
|
||||||
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
|
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM)
|
||||||
|
|
||||||
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP)
|
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM)
|
||||||
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP)
|
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM)
|
||||||
|
|
||||||
#ifndef HAL_STEP_TIMER_ISR
|
#ifndef HAL_STEP_TIMER_ISR
|
||||||
#define HAL_STEP_TIMER_ISR() extern "C" void TIMER0_IRQHandler()
|
#define HAL_STEP_TIMER_ISR() extern "C" void TIMER0_IRQHandler()
|
||||||
@ -77,6 +77,7 @@ typedef uint32_t hal_timer_t;
|
|||||||
#define HAL_PWM_TIMER_ISR() extern "C" void TIMER3_IRQHandler()
|
#define HAL_PWM_TIMER_ISR() extern "C" void TIMER3_IRQHandler()
|
||||||
#define HAL_PWM_TIMER_IRQn
|
#define HAL_PWM_TIMER_IRQn
|
||||||
|
|
||||||
|
|
||||||
void HAL_timer_init();
|
void HAL_timer_init();
|
||||||
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency);
|
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency);
|
||||||
|
|
||||||
@ -92,5 +93,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num);
|
|||||||
void HAL_timer_disable_interrupt(const uint8_t timer_num);
|
void HAL_timer_disable_interrupt(const uint8_t timer_num);
|
||||||
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
|
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
|
||||||
|
|
||||||
#define HAL_timer_isr_prologue(T)
|
#define HAL_timer_isr_prologue(TIMER_NUM)
|
||||||
#define HAL_timer_isr_epilogue(T)
|
#define HAL_timer_isr_epilogue(TIMER_NUM)
|
||||||
|
@ -50,9 +50,15 @@ extern "C" volatile uint32_t _millis;
|
|||||||
//
|
//
|
||||||
// Default graphical display delays
|
// Default graphical display delays
|
||||||
//
|
//
|
||||||
#define CPU_ST7920_DELAY_1 600
|
#ifndef ST7920_DELAY_1
|
||||||
#define CPU_ST7920_DELAY_2 750
|
#define ST7920_DELAY_1 DELAY_NS(600)
|
||||||
#define CPU_ST7920_DELAY_3 750
|
#endif
|
||||||
|
#ifndef ST7920_DELAY_2
|
||||||
|
#define ST7920_DELAY_2 DELAY_NS(750)
|
||||||
|
#endif
|
||||||
|
#ifndef ST7920_DELAY_3
|
||||||
|
#define ST7920_DELAY_3 DELAY_NS(750)
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef ForwardSerial1Class< decltype(UsbSerial) > DefaultSerial1;
|
typedef ForwardSerial1Class< decltype(UsbSerial) > DefaultSerial1;
|
||||||
extern DefaultSerial1 USBSerial;
|
extern DefaultSerial1 USBSerial;
|
||||||
@ -107,7 +113,7 @@ extern DefaultSerial1 USBSerial;
|
|||||||
#error "LCD_SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
#error "LCD_SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
||||||
#endif
|
#endif
|
||||||
#if HAS_DGUS_LCD
|
#if HAS_DGUS_LCD
|
||||||
#define SERIAL_GET_TX_BUFFER_FREE() LCD_SERIAL.available()
|
#define SERIAL_GET_TX_BUFFER_FREE() MSerial0.available()
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -123,14 +129,16 @@ extern DefaultSerial1 USBSerial;
|
|||||||
//
|
//
|
||||||
// Utility functions
|
// Utility functions
|
||||||
//
|
//
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#if GCC_VERSION <= 50000
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wunused-function"
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int freeMemory();
|
int freeMemory();
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// ADC API
|
// ADC API
|
||||||
@ -154,17 +162,17 @@ int freeMemory();
|
|||||||
|
|
||||||
using FilteredADC = LPC176x::ADC<ADC_LOWPASS_K_VALUE, ADC_MEDIAN_FILTER_SIZE>;
|
using FilteredADC = LPC176x::ADC<ADC_LOWPASS_K_VALUE, ADC_MEDIAN_FILTER_SIZE>;
|
||||||
extern uint32_t HAL_adc_reading;
|
extern uint32_t HAL_adc_reading;
|
||||||
[[gnu::always_inline]] inline void HAL_adc_start_conversion(const pin_t pin) {
|
[[gnu::always_inline]] inline void HAL_start_adc(const pin_t pin) {
|
||||||
HAL_adc_reading = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits
|
HAL_adc_reading = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits
|
||||||
}
|
}
|
||||||
[[gnu::always_inline]] inline uint16_t HAL_adc_get_result() {
|
[[gnu::always_inline]] inline uint16_t HAL_read_adc() {
|
||||||
return HAL_adc_reading;
|
return HAL_adc_reading;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define HAL_adc_init()
|
#define HAL_adc_init()
|
||||||
#define HAL_ANALOG_SELECT(pin) FilteredADC::enable_channel(pin)
|
#define HAL_ANALOG_SELECT(pin) FilteredADC::enable_channel(pin)
|
||||||
#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin)
|
#define HAL_START_ADC(pin) HAL_start_adc(pin)
|
||||||
#define HAL_READ_ADC() HAL_adc_get_result()
|
#define HAL_READ_ADC() HAL_read_adc()
|
||||||
#define HAL_ADC_READY() (true)
|
#define HAL_ADC_READY() (true)
|
||||||
|
|
||||||
// Test whether the pin is valid
|
// Test whether the pin is valid
|
||||||
|
@ -46,8 +46,6 @@ public:
|
|||||||
|
|
||||||
void end() {}
|
void end() {}
|
||||||
|
|
||||||
uint8_t availableForWrite(void) { /* flushTX(); */ return TX_BUFFER_SIZE; }
|
|
||||||
|
|
||||||
#if ENABLED(EMERGENCY_PARSER)
|
#if ENABLED(EMERGENCY_PARSER)
|
||||||
bool recv_callback(const char c) override;
|
bool recv_callback(const char c) override;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
||||||
|
* Copyright (c) 2015-2016 Nico Tonnhofer wurstnase.reprap@gmail.com
|
||||||
|
* Copyright (c) 2016 Victor Perez victor_pv@hotmail.com
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -19,19 +20,12 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of EEPROM settings in SD Card
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef TARGET_LPC1768
|
#ifdef TARGET_LPC1768
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
#if ENABLED(SDCARD_EEPROM_EMULATION)
|
#if ENABLED(SDCARD_EEPROM_EMULATION)
|
||||||
|
|
||||||
//#define DEBUG_SD_EEPROM_EMULATION
|
|
||||||
|
|
||||||
#include "../shared/eeprom_api.h"
|
#include "../shared/eeprom_api.h"
|
||||||
|
|
||||||
#include <chanfs/diskio.h>
|
#include <chanfs/diskio.h>
|
||||||
@ -44,11 +38,9 @@ FATFS fat_fs;
|
|||||||
FIL eeprom_file;
|
FIL eeprom_file;
|
||||||
bool eeprom_file_open = false;
|
bool eeprom_file_open = false;
|
||||||
|
|
||||||
#define EEPROM_FILENAME "eeprom.dat"
|
|
||||||
#ifndef MARLIN_EEPROM_SIZE
|
#ifndef MARLIN_EEPROM_SIZE
|
||||||
#define MARLIN_EEPROM_SIZE size_t(0x1000) // 4KiB of Emulated EEPROM
|
#define MARLIN_EEPROM_SIZE size_t(0x1000) // 4KiB of Emulated EEPROM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
||||||
|
|
||||||
bool PersistentStore::access_start() {
|
bool PersistentStore::access_start() {
|
||||||
@ -58,7 +50,7 @@ bool PersistentStore::access_start() {
|
|||||||
MSC_Release_Lock();
|
MSC_Release_Lock();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
FRESULT res = f_open(&eeprom_file, EEPROM_FILENAME, FA_OPEN_ALWAYS | FA_WRITE | FA_READ);
|
FRESULT res = f_open(&eeprom_file, "eeprom.dat", FA_OPEN_ALWAYS | FA_WRITE | FA_READ);
|
||||||
if (res) MSC_Release_Lock();
|
if (res) MSC_Release_Lock();
|
||||||
|
|
||||||
if (res == FR_OK) {
|
if (res == FR_OK) {
|
||||||
@ -89,20 +81,18 @@ bool PersistentStore::access_finish() {
|
|||||||
// This extra chit-chat goes away soon, but is helpful for now
|
// This extra chit-chat goes away soon, but is helpful for now
|
||||||
// to see errors that are happening in read_data / write_data
|
// to see errors that are happening in read_data / write_data
|
||||||
static void debug_rw(const bool write, int &pos, const uint8_t *value, const size_t size, const FRESULT s, const size_t total=0) {
|
static void debug_rw(const bool write, int &pos, const uint8_t *value, const size_t size, const FRESULT s, const size_t total=0) {
|
||||||
#if ENABLED(DEBUG_SD_EEPROM_EMULATION)
|
PGM_P const rw_str = write ? PSTR("write") : PSTR("read");
|
||||||
FSTR_P const rw_str = write ? F("write") : F("read");
|
|
||||||
SERIAL_CHAR(' ');
|
SERIAL_CHAR(' ');
|
||||||
SERIAL_ECHOF(rw_str);
|
SERIAL_ECHOPGM_P(rw_str);
|
||||||
SERIAL_ECHOLNPGM("_data(", pos, ",", *value, ",", size, ", ...)");
|
SERIAL_ECHOLNPAIR("_data(", pos, ",", value, ",", size, ", ...)");
|
||||||
if (total) {
|
if (total) {
|
||||||
SERIAL_ECHOPGM(" f_");
|
SERIAL_ECHOPGM(" f_");
|
||||||
SERIAL_ECHOF(rw_str);
|
SERIAL_ECHOPGM_P(rw_str);
|
||||||
SERIAL_ECHOPGM("()=", s, "\n size=", size, "\n bytes_");
|
SERIAL_ECHOPAIR("()=", s, "\n size=", size, "\n bytes_");
|
||||||
SERIAL_ECHOLNF(write ? F("written=") : F("read="), total);
|
SERIAL_ECHOLNPAIR_P(write ? PSTR("written=") : PSTR("read="), total);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SERIAL_ECHOLNPGM(" f_lseek()=", s);
|
SERIAL_ECHOLNPAIR(" f_lseek()=", s);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// File function return codes for type FRESULT. This goes away soon, but
|
// File function return codes for type FRESULT. This goes away soon, but
|
||||||
|
@ -22,20 +22,18 @@
|
|||||||
#ifdef TARGET_LPC1768
|
#ifdef TARGET_LPC1768
|
||||||
|
|
||||||
#include "../../inc/MarlinConfigPre.h"
|
#include "../../inc/MarlinConfigPre.h"
|
||||||
#include <pwm.h>
|
|
||||||
|
|
||||||
void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) {
|
|
||||||
if (!LPC176x::pin_is_valid(pin)) return;
|
|
||||||
if (LPC176x::pwm_attach_pin(pin))
|
|
||||||
LPC176x::pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size); // map 1-254 onto PWM range
|
|
||||||
}
|
|
||||||
|
|
||||||
#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM
|
#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM
|
||||||
|
|
||||||
void set_pwm_frequency(const pin_t pin, int f_desired) {
|
#include <pwm.h>
|
||||||
|
|
||||||
|
void set_pwm_frequency(const pin_t pin, int f_desired) {
|
||||||
LPC176x::pwm_set_frequency(pin, f_desired);
|
LPC176x::pwm_set_frequency(pin, f_desired);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) {
|
||||||
|
LPC176x::pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // NEEDS_HARDWARE_PWM
|
||||||
#endif // TARGET_LPC1768
|
#endif // TARGET_LPC1768
|
||||||
|
@ -67,7 +67,7 @@ static_assert(!(NUM_SERVOS && ENABLED(FAST_PWM_FAN)), "BLTOUCH and Servos are in
|
|||||||
* Test LPC176x-specific configuration values for errors at compile-time.
|
* Test LPC176x-specific configuration values for errors at compile-time.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#if ENABLED(SPINDLE_LASER_USE_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
//#if ENABLED(SPINDLE_LASER_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
||||||
// #error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
// #error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ public:
|
|||||||
|
|
||||||
//uint32_t spiRate() const { return spi_speed; }
|
//uint32_t spiRate() const { return spi_speed; }
|
||||||
|
|
||||||
static uint32_t spiRate2Clock(uint32_t spiRate) {
|
static inline uint32_t spiRate2Clock(uint32_t spiRate) {
|
||||||
uint32_t Marlin_speed[7]; // CPSR is always 2
|
uint32_t Marlin_speed[7]; // CPSR is always 2
|
||||||
Marlin_speed[0] = 8333333; //(SCR: 2) desired: 8,000,000 actual: 8,333,333 +4.2% SPI_FULL_SPEED
|
Marlin_speed[0] = 8333333; //(SCR: 2) desired: 8,000,000 actual: 8,333,333 +4.2% SPI_FULL_SPEED
|
||||||
Marlin_speed[1] = 4166667; //(SCR: 5) desired: 4,000,000 actual: 4,166,667 +4.2% SPI_HALF_SPEED
|
Marlin_speed[1] = 4166667; //(SCR: 5) desired: 4,000,000 actual: 4,166,667 +4.2% SPI_HALF_SPEED
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@ -36,9 +33,8 @@
|
|||||||
#define PRINT_PORT(p)
|
#define PRINT_PORT(p)
|
||||||
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
||||||
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("P%d_%02d"), LPC176x::pin_port(p), LPC176x::pin_bit(p)); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%d.%02d"), LPC176x::pin_port(p), LPC176x::pin_bit(p)); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR("_A%d "), LPC176x::pin_get_adc_channel(pin)); SERIAL_ECHO(buffer); }while(0)
|
#define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin
|
||||||
#define MULTI_NAME_PAD 17 // space needed to be pretty if not first name assigned to a pin
|
|
||||||
|
|
||||||
// pins that will cause hang/reset/disconnect in M43 Toggle and Watch utilities
|
// pins that will cause hang/reset/disconnect in M43 Toggle and Watch utilities
|
||||||
#ifndef M43_NEVER_TOUCH
|
#ifndef M43_NEVER_TOUCH
|
||||||
@ -52,4 +48,6 @@ bool GET_PINMODE(const pin_t pin) {
|
|||||||
return LPC176x::gpio_direction(pin);
|
return LPC176x::gpio_direction(pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GET_ARRAY_IS_DIGITAL(x) ((bool) pin_array[x].is_digital)
|
bool GET_ARRAY_IS_DIGITAL(const pin_t pin) {
|
||||||
|
return (!LPC176x::pin_has_adc(pin) || !LPC176x::pin_adc_enabled(pin));
|
||||||
|
}
|
||||||
|
@ -26,22 +26,39 @@
|
|||||||
|
|
||||||
#include "tft_spi.h"
|
#include "tft_spi.h"
|
||||||
|
|
||||||
|
//TFT_SPI tft;
|
||||||
|
|
||||||
SPIClass TFT_SPI::SPIx(1);
|
SPIClass TFT_SPI::SPIx(1);
|
||||||
|
|
||||||
|
#define TFT_CS_H WRITE(TFT_CS_PIN, HIGH)
|
||||||
|
#define TFT_CS_L WRITE(TFT_CS_PIN, LOW)
|
||||||
|
|
||||||
|
#define TFT_DC_H WRITE(TFT_DC_PIN, HIGH)
|
||||||
|
#define TFT_DC_L WRITE(TFT_DC_PIN, LOW)
|
||||||
|
|
||||||
|
#define TFT_RST_H WRITE(TFT_RESET_PIN, HIGH)
|
||||||
|
#define TFT_RST_L WRITE(TFT_RESET_PIN, LOW)
|
||||||
|
|
||||||
|
#define TFT_BLK_H WRITE(TFT_BACKLIGHT_PIN, HIGH)
|
||||||
|
#define TFT_BLK_L WRITE(TFT_BACKLIGHT_PIN, LOW)
|
||||||
|
|
||||||
void TFT_SPI::Init() {
|
void TFT_SPI::Init() {
|
||||||
#if PIN_EXISTS(TFT_RESET)
|
#if PIN_EXISTS(TFT_RESET)
|
||||||
OUT_WRITE(TFT_RESET_PIN, HIGH);
|
SET_OUTPUT(TFT_RESET_PIN);
|
||||||
|
TFT_RST_H;
|
||||||
delay(100);
|
delay(100);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if PIN_EXISTS(TFT_BACKLIGHT)
|
#if PIN_EXISTS(TFT_BACKLIGHT)
|
||||||
OUT_WRITE(TFT_BACKLIGHT_PIN, HIGH);
|
SET_OUTPUT(TFT_BACKLIGHT_PIN);
|
||||||
|
TFT_BLK_H;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SET_OUTPUT(TFT_DC_PIN);
|
SET_OUTPUT(TFT_DC_PIN);
|
||||||
SET_OUTPUT(TFT_CS_PIN);
|
SET_OUTPUT(TFT_CS_PIN);
|
||||||
WRITE(TFT_DC_PIN, HIGH);
|
|
||||||
WRITE(TFT_CS_PIN, HIGH);
|
TFT_DC_H;
|
||||||
|
TFT_CS_H;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* STM32F1 APB2 = 72MHz, APB1 = 36MHz, max SPI speed of this MCU if 18Mhz
|
* STM32F1 APB2 = 72MHz, APB1 = 36MHz, max SPI speed of this MCU if 18Mhz
|
||||||
@ -80,7 +97,7 @@ void TFT_SPI::Init() {
|
|||||||
void TFT_SPI::DataTransferBegin(uint16_t DataSize) {
|
void TFT_SPI::DataTransferBegin(uint16_t DataSize) {
|
||||||
SPIx.setDataSize(DataSize);
|
SPIx.setDataSize(DataSize);
|
||||||
SPIx.begin();
|
SPIx.begin();
|
||||||
WRITE(TFT_CS_PIN, LOW);
|
TFT_CS_L;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t TFT_SPI::GetID() {
|
uint32_t TFT_SPI::GetID() {
|
||||||
@ -99,7 +116,7 @@ uint32_t TFT_SPI::ReadID(uint16_t Reg) {
|
|||||||
SPIx.setDataSize(DATASIZE_8BIT);
|
SPIx.setDataSize(DATASIZE_8BIT);
|
||||||
SPIx.setClock(SPI_CLOCK_DIV64);
|
SPIx.setClock(SPI_CLOCK_DIV64);
|
||||||
SPIx.begin();
|
SPIx.begin();
|
||||||
WRITE(TFT_CS_PIN, LOW);
|
TFT_CS_L;
|
||||||
WriteReg(Reg);
|
WriteReg(Reg);
|
||||||
|
|
||||||
LOOP_L_N(i, 4) {
|
LOOP_L_N(i, 4) {
|
||||||
@ -114,15 +131,21 @@ uint32_t TFT_SPI::ReadID(uint16_t Reg) {
|
|||||||
return data >> 7;
|
return data >> 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TFT_SPI::isBusy() { return false; }
|
bool TFT_SPI::isBusy() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void TFT_SPI::Abort() { DataTransferEnd(); }
|
void TFT_SPI::Abort() {
|
||||||
|
DataTransferEnd();
|
||||||
|
}
|
||||||
|
|
||||||
void TFT_SPI::Transmit(uint16_t Data) { SPIx.transfer(Data); }
|
void TFT_SPI::Transmit(uint16_t Data) {
|
||||||
|
SPIx.transfer(Data);
|
||||||
|
}
|
||||||
|
|
||||||
void TFT_SPI::TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count) {
|
void TFT_SPI::TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count) {
|
||||||
DataTransferBegin(DATASIZE_16BIT);
|
DataTransferBegin(DATASIZE_16BIT); //16
|
||||||
WRITE(TFT_DC_PIN, HIGH);
|
TFT_DC_H;
|
||||||
SPIx.dmaSend(Data, Count, MemoryIncrease);
|
SPIx.dmaSend(Data, Count, MemoryIncrease);
|
||||||
DataTransferEnd();
|
DataTransferEnd();
|
||||||
}
|
}
|
||||||
|
@ -65,8 +65,8 @@ private:
|
|||||||
static uint16_t getRawData(const XPTCoordinate coordinate);
|
static uint16_t getRawData(const XPTCoordinate coordinate);
|
||||||
static bool isTouched();
|
static bool isTouched();
|
||||||
|
|
||||||
static void DataTransferBegin() { WRITE(TOUCH_CS_PIN, LOW); };
|
static inline void DataTransferBegin() { WRITE(TOUCH_CS_PIN, LOW); };
|
||||||
static void DataTransferEnd() { WRITE(TOUCH_CS_PIN, HIGH); };
|
static inline void DataTransferEnd() { WRITE(TOUCH_CS_PIN, HIGH); };
|
||||||
#if ENABLED(TOUCH_BUTTONS_HW_SPI)
|
#if ENABLED(TOUCH_BUTTONS_HW_SPI)
|
||||||
static uint16_t HardwareIO(uint16_t data);
|
static uint16_t HardwareIO(uint16_t data);
|
||||||
#endif
|
#endif
|
||||||
|
@ -40,7 +40,7 @@ void HAL_timer_init() {
|
|||||||
|
|
||||||
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
||||||
switch (timer_num) {
|
switch (timer_num) {
|
||||||
case MF_TIMER_STEP:
|
case 0:
|
||||||
LPC_TIM0->MCR = _BV(SBIT_MR0I) | _BV(SBIT_MR0R); // Match on MR0, reset on MR0, interrupts when NVIC enables them
|
LPC_TIM0->MCR = _BV(SBIT_MR0I) | _BV(SBIT_MR0R); // Match on MR0, reset on MR0, interrupts when NVIC enables them
|
||||||
LPC_TIM0->MR0 = uint32_t(STEPPER_TIMER_RATE) / frequency; // Match value (period) to set frequency
|
LPC_TIM0->MR0 = uint32_t(STEPPER_TIMER_RATE) / frequency; // Match value (period) to set frequency
|
||||||
LPC_TIM0->TCR = _BV(SBIT_CNTEN); // Counter Enable
|
LPC_TIM0->TCR = _BV(SBIT_CNTEN); // Counter Enable
|
||||||
@ -49,7 +49,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
|||||||
NVIC_EnableIRQ(TIMER0_IRQn);
|
NVIC_EnableIRQ(TIMER0_IRQn);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MF_TIMER_TEMP:
|
case 1:
|
||||||
LPC_TIM1->MCR = _BV(SBIT_MR0I) | _BV(SBIT_MR0R); // Match on MR0, reset on MR0, interrupts when NVIC enables them
|
LPC_TIM1->MCR = _BV(SBIT_MR0I) | _BV(SBIT_MR0R); // Match on MR0, reset on MR0, interrupts when NVIC enables them
|
||||||
LPC_TIM1->MR0 = uint32_t(TEMP_TIMER_RATE) / frequency;
|
LPC_TIM1->MR0 = uint32_t(TEMP_TIMER_RATE) / frequency;
|
||||||
LPC_TIM1->TCR = _BV(SBIT_CNTEN); // Counter Enable
|
LPC_TIM1->TCR = _BV(SBIT_CNTEN); // Counter Enable
|
||||||
|
@ -60,17 +60,17 @@ typedef uint32_t hal_timer_t;
|
|||||||
|
|
||||||
#define HAL_TIMER_RATE ((F_CPU) / 4) // frequency of timers peripherals
|
#define HAL_TIMER_RATE ((F_CPU) / 4) // frequency of timers peripherals
|
||||||
|
|
||||||
#ifndef MF_TIMER_STEP
|
#ifndef STEP_TIMER_NUM
|
||||||
#define MF_TIMER_STEP 0 // Timer Index for Stepper
|
#define STEP_TIMER_NUM 0 // Timer Index for Stepper
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_PULSE
|
#ifndef PULSE_TIMER_NUM
|
||||||
#define MF_TIMER_PULSE MF_TIMER_STEP
|
#define PULSE_TIMER_NUM STEP_TIMER_NUM
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_TEMP
|
#ifndef TEMP_TIMER_NUM
|
||||||
#define MF_TIMER_TEMP 1 // Timer Index for Temperature
|
#define TEMP_TIMER_NUM 1 // Timer Index for Temperature
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_PWM
|
#ifndef PWM_TIMER_NUM
|
||||||
#define MF_TIMER_PWM 3 // Timer Index for PWM
|
#define PWM_TIMER_NUM 3 // Timer Index for PWM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TEMP_TIMER_RATE 1000000
|
#define TEMP_TIMER_RATE 1000000
|
||||||
@ -84,23 +84,23 @@ typedef uint32_t hal_timer_t;
|
|||||||
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
||||||
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
||||||
|
|
||||||
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
|
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM)
|
||||||
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP)
|
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM)
|
||||||
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
|
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM)
|
||||||
|
|
||||||
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP)
|
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM)
|
||||||
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP)
|
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM)
|
||||||
|
|
||||||
#ifndef HAL_STEP_TIMER_ISR
|
#ifndef HAL_STEP_TIMER_ISR
|
||||||
#define HAL_STEP_TIMER_ISR() _HAL_TIMER_ISR(MF_TIMER_STEP)
|
#define HAL_STEP_TIMER_ISR() _HAL_TIMER_ISR(STEP_TIMER_NUM)
|
||||||
#endif
|
#endif
|
||||||
#ifndef HAL_TEMP_TIMER_ISR
|
#ifndef HAL_TEMP_TIMER_ISR
|
||||||
#define HAL_TEMP_TIMER_ISR() _HAL_TIMER_ISR(MF_TIMER_TEMP)
|
#define HAL_TEMP_TIMER_ISR() _HAL_TIMER_ISR(TEMP_TIMER_NUM)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Timer references by index
|
// Timer references by index
|
||||||
#define STEP_TIMER_PTR _HAL_TIMER(MF_TIMER_STEP)
|
#define STEP_TIMER_PTR _HAL_TIMER(STEP_TIMER_NUM)
|
||||||
#define TEMP_TIMER_PTR _HAL_TIMER(MF_TIMER_TEMP)
|
#define TEMP_TIMER_PTR _HAL_TIMER(TEMP_TIMER_NUM)
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
// Public functions
|
// Public functions
|
||||||
@ -110,38 +110,38 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency);
|
|||||||
|
|
||||||
FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) {
|
FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) {
|
||||||
switch (timer_num) {
|
switch (timer_num) {
|
||||||
case MF_TIMER_STEP: STEP_TIMER_PTR->MR0 = compare; break; // Stepper Timer Match Register 0
|
case 0: STEP_TIMER_PTR->MR0 = compare; break; // Stepper Timer Match Register 0
|
||||||
case MF_TIMER_TEMP: TEMP_TIMER_PTR->MR0 = compare; break; // Temp Timer Match Register 0
|
case 1: TEMP_TIMER_PTR->MR0 = compare; break; // Temp Timer Match Register 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) {
|
FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) {
|
||||||
switch (timer_num) {
|
switch (timer_num) {
|
||||||
case MF_TIMER_STEP: return STEP_TIMER_PTR->MR0; // Stepper Timer Match Register 0
|
case 0: return STEP_TIMER_PTR->MR0; // Stepper Timer Match Register 0
|
||||||
case MF_TIMER_TEMP: return TEMP_TIMER_PTR->MR0; // Temp Timer Match Register 0
|
case 1: return TEMP_TIMER_PTR->MR0; // Temp Timer Match Register 0
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
|
FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
|
||||||
switch (timer_num) {
|
switch (timer_num) {
|
||||||
case MF_TIMER_STEP: return STEP_TIMER_PTR->TC; // Stepper Timer Count
|
case 0: return STEP_TIMER_PTR->TC; // Stepper Timer Count
|
||||||
case MF_TIMER_TEMP: return TEMP_TIMER_PTR->TC; // Temp Timer Count
|
case 1: return TEMP_TIMER_PTR->TC; // Temp Timer Count
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE static void HAL_timer_enable_interrupt(const uint8_t timer_num) {
|
FORCE_INLINE static void HAL_timer_enable_interrupt(const uint8_t timer_num) {
|
||||||
switch (timer_num) {
|
switch (timer_num) {
|
||||||
case MF_TIMER_STEP: NVIC_EnableIRQ(TIMER0_IRQn); break; // Enable interrupt handler
|
case 0: NVIC_EnableIRQ(TIMER0_IRQn); break; // Enable interrupt handler
|
||||||
case MF_TIMER_TEMP: NVIC_EnableIRQ(TIMER1_IRQn); break; // Enable interrupt handler
|
case 1: NVIC_EnableIRQ(TIMER1_IRQn); break; // Enable interrupt handler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE static void HAL_timer_disable_interrupt(const uint8_t timer_num) {
|
FORCE_INLINE static void HAL_timer_disable_interrupt(const uint8_t timer_num) {
|
||||||
switch (timer_num) {
|
switch (timer_num) {
|
||||||
case MF_TIMER_STEP: NVIC_DisableIRQ(TIMER0_IRQn); break; // Disable interrupt handler
|
case 0: NVIC_DisableIRQ(TIMER0_IRQn); break; // Disable interrupt handler
|
||||||
case MF_TIMER_TEMP: NVIC_DisableIRQ(TIMER1_IRQn); break; // Disable interrupt handler
|
case 1: NVIC_DisableIRQ(TIMER1_IRQn); break; // Disable interrupt handler
|
||||||
}
|
}
|
||||||
|
|
||||||
// We NEED memory barriers to ensure Interrupts are actually disabled!
|
// We NEED memory barriers to ensure Interrupts are actually disabled!
|
||||||
@ -157,17 +157,17 @@ FORCE_INLINE static bool NVIC_GetEnableIRQ(IRQn_Type IRQn) {
|
|||||||
|
|
||||||
FORCE_INLINE static bool HAL_timer_interrupt_enabled(const uint8_t timer_num) {
|
FORCE_INLINE static bool HAL_timer_interrupt_enabled(const uint8_t timer_num) {
|
||||||
switch (timer_num) {
|
switch (timer_num) {
|
||||||
case MF_TIMER_STEP: return NVIC_GetEnableIRQ(TIMER0_IRQn); // Check if interrupt is enabled or not
|
case 0: return NVIC_GetEnableIRQ(TIMER0_IRQn); // Check if interrupt is enabled or not
|
||||||
case MF_TIMER_TEMP: return NVIC_GetEnableIRQ(TIMER1_IRQn); // Check if interrupt is enabled or not
|
case 1: return NVIC_GetEnableIRQ(TIMER1_IRQn); // Check if interrupt is enabled or not
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) {
|
FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) {
|
||||||
switch (timer_num) {
|
switch (timer_num) {
|
||||||
case MF_TIMER_STEP: SBI(STEP_TIMER_PTR->IR, SBIT_CNTEN); break;
|
case 0: SBI(STEP_TIMER_PTR->IR, SBIT_CNTEN); break;
|
||||||
case MF_TIMER_TEMP: SBI(TEMP_TIMER_PTR->IR, SBIT_CNTEN); break;
|
case 1: SBI(TEMP_TIMER_PTR->IR, SBIT_CNTEN); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define HAL_timer_isr_epilogue(T)
|
#define HAL_timer_isr_epilogue(TIMER_NUM)
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
#include "../../../inc/MarlinConfigPre.h"
|
#include "../../../inc/MarlinConfigPre.h"
|
||||||
|
|
||||||
#if IS_U8GLIB_ST7920
|
#if ENABLED(U8GLIB_ST7920)
|
||||||
|
|
||||||
#include <U8glib-HAL.h>
|
#include <U8glib-HAL.h>
|
||||||
#include <SoftwareSPI.h>
|
#include <SoftwareSPI.h>
|
||||||
@ -143,5 +143,5 @@ uint8_t u8g_com_HAL_LPC1768_ST7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t ar
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // IS_U8GLIB_ST7920
|
#endif // U8GLIB_ST7920
|
||||||
#endif // TARGET_LPC1768
|
#endif // TARGET_LPC1768
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
#include "../../../inc/MarlinConfigPre.h"
|
#include "../../../inc/MarlinConfigPre.h"
|
||||||
|
|
||||||
#if HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
|
#if HAS_MARLINUI_U8GLIB && DISABLED(U8GLIB_ST7920)
|
||||||
|
|
||||||
#include <SoftwareSPI.h>
|
#include <SoftwareSPI.h>
|
||||||
#include "../../shared/HAL_SPI.h"
|
#include "../../shared/HAL_SPI.h"
|
||||||
@ -205,5 +205,5 @@ uint8_t u8g_com_HAL_LPC1768_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
|
#endif // HAS_MARLINUI_U8GLIB && !U8GLIB_ST7920
|
||||||
#endif // TARGET_LPC1768
|
#endif // TARGET_LPC1768
|
||||||
|
@ -1,30 +1,26 @@
|
|||||||
#
|
#
|
||||||
# upload_extra_script.py
|
# sets output_port
|
||||||
# set the output_port
|
|
||||||
# if target_filename is found then that drive is used
|
# if target_filename is found then that drive is used
|
||||||
# else if target_drive is found then that drive is used
|
# else if target_drive is found then that drive is used
|
||||||
#
|
#
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
import pioutil
|
target_filename = "FIRMWARE.CUR"
|
||||||
if pioutil.is_pio_build():
|
target_drive = "REARM"
|
||||||
|
|
||||||
target_filename = "FIRMWARE.CUR"
|
import os,getpass,platform
|
||||||
target_drive = "REARM"
|
|
||||||
|
|
||||||
import os,getpass,platform
|
current_OS = platform.system()
|
||||||
|
Import("env")
|
||||||
|
|
||||||
current_OS = platform.system()
|
def print_error(e):
|
||||||
Import("env")
|
|
||||||
|
|
||||||
def print_error(e):
|
|
||||||
print('\nUnable to find destination disk (%s)\n' \
|
print('\nUnable to find destination disk (%s)\n' \
|
||||||
'Please select it in platformio.ini using the upload_port keyword ' \
|
'Please select it in platformio.ini using the upload_port keyword ' \
|
||||||
'(https://docs.platformio.org/en/latest/projectconf/section_env_upload.html) ' \
|
'(https://docs.platformio.org/en/latest/projectconf/section_env_upload.html) ' \
|
||||||
'or copy the firmware (.pio/build/%s/firmware.bin) manually to the appropriate disk\n' \
|
'or copy the firmware (.pio/build/%s/firmware.bin) manually to the appropriate disk\n' \
|
||||||
%(e, env.get('PIOENV')))
|
%(e, env.get('PIOENV')))
|
||||||
|
|
||||||
def before_upload(source, target, env):
|
def before_upload(source, target, env):
|
||||||
try:
|
try:
|
||||||
#
|
#
|
||||||
# Find a disk for upload
|
# Find a disk for upload
|
||||||
@ -124,4 +120,4 @@ if pioutil.is_pio_build():
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print_error(str(e))
|
print_error(str(e))
|
||||||
|
|
||||||
env.AddPreAction("upload", before_upload)
|
env.AddPreAction("upload", before_upload)
|
||||||
|
@ -99,9 +99,9 @@ extern MSerialT serial_stream_3;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define CPU_ST7920_DELAY_1 600
|
#define ST7920_DELAY_1 DELAY_NS(600)
|
||||||
#define CPU_ST7920_DELAY_2 750
|
#define ST7920_DELAY_2 DELAY_NS(750)
|
||||||
#define CPU_ST7920_DELAY_3 750
|
#define ST7920_DELAY_3 DELAY_NS(750)
|
||||||
|
|
||||||
//
|
//
|
||||||
// Interrupts
|
// Interrupts
|
||||||
@ -133,15 +133,10 @@ void HAL_adc_enable_channel(const uint8_t ch);
|
|||||||
void HAL_adc_start_conversion(const uint8_t ch);
|
void HAL_adc_start_conversion(const uint8_t ch);
|
||||||
uint16_t HAL_adc_get_result();
|
uint16_t HAL_adc_get_result();
|
||||||
|
|
||||||
// PWM
|
|
||||||
inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); }
|
|
||||||
|
|
||||||
// Reset source
|
// Reset source
|
||||||
inline void HAL_clear_reset_source(void) {}
|
inline void HAL_clear_reset_source(void) {}
|
||||||
inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; }
|
inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; }
|
||||||
|
|
||||||
void HAL_reboot();
|
|
||||||
|
|
||||||
/* ---------------- Delay in cycles */
|
/* ---------------- Delay in cycles */
|
||||||
|
|
||||||
#define DELAY_CYCLES(x) Kernel::delayCycles(x)
|
#define DELAY_CYCLES(x) Kernel::delayCycles(x)
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Emulating RAMPS
|
// Emulating RAMPS
|
||||||
#if ENABLED(SPINDLE_LASER_USE_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
#if ENABLED(SPINDLE_LASER_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
||||||
#error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
#error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
/**
|
/**
|
||||||
* Support routines for X86_64
|
* Support routines for X86_64
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,7 +36,6 @@
|
|||||||
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
||||||
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0)
|
|
||||||
#define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin
|
#define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin
|
||||||
|
|
||||||
// active ADC function/mode/code values for PINSEL registers
|
// active ADC function/mode/code values for PINSEL registers
|
||||||
|
@ -62,8 +62,8 @@ private:
|
|||||||
static uint16_t getRawData(const XPTCoordinate coordinate);
|
static uint16_t getRawData(const XPTCoordinate coordinate);
|
||||||
static bool isTouched();
|
static bool isTouched();
|
||||||
|
|
||||||
static void DataTransferBegin();
|
static inline void DataTransferBegin();
|
||||||
static void DataTransferEnd();
|
static inline void DataTransferEnd();
|
||||||
#if ENABLED(TOUCH_BUTTONS_HW_SPI)
|
#if ENABLED(TOUCH_BUTTONS_HW_SPI)
|
||||||
static uint16_t HardwareIO(uint16_t data);
|
static uint16_t HardwareIO(uint16_t data);
|
||||||
#endif
|
#endif
|
||||||
|
@ -37,17 +37,17 @@ typedef uint64_t hal_timer_t;
|
|||||||
|
|
||||||
#define HAL_TIMER_RATE ((SystemCoreClock) / 4) // frequency of timers peripherals
|
#define HAL_TIMER_RATE ((SystemCoreClock) / 4) // frequency of timers peripherals
|
||||||
|
|
||||||
#ifndef MF_TIMER_STEP
|
#ifndef STEP_TIMER_NUM
|
||||||
#define MF_TIMER_STEP 0 // Timer Index for Stepper
|
#define STEP_TIMER_NUM 0 // Timer Index for Stepper
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_PULSE
|
#ifndef PULSE_TIMER_NUM
|
||||||
#define MF_TIMER_PULSE MF_TIMER_STEP
|
#define PULSE_TIMER_NUM STEP_TIMER_NUM
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_TEMP
|
#ifndef TEMP_TIMER_NUM
|
||||||
#define MF_TIMER_TEMP 1 // Timer Index for Temperature
|
#define TEMP_TIMER_NUM 1 // Timer Index for Temperature
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_SYSTICK
|
#ifndef SYSTICK_TIMER_NUM
|
||||||
#define MF_TIMER_SYSTICK 2 // Timer Index for Systick
|
#define SYSTICK_TIMER_NUM 2 // Timer Index for Systick
|
||||||
#endif
|
#endif
|
||||||
#define SYSTICK_TIMER_FREQUENCY 1000
|
#define SYSTICK_TIMER_FREQUENCY 1000
|
||||||
|
|
||||||
@ -62,12 +62,12 @@ typedef uint64_t hal_timer_t;
|
|||||||
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
||||||
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
||||||
|
|
||||||
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
|
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM)
|
||||||
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP)
|
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM)
|
||||||
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
|
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM)
|
||||||
|
|
||||||
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP)
|
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM)
|
||||||
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP)
|
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM)
|
||||||
|
|
||||||
#ifndef HAL_STEP_TIMER_ISR
|
#ifndef HAL_STEP_TIMER_ISR
|
||||||
#define HAL_STEP_TIMER_ISR() extern "C" void TIMER0_IRQHandler()
|
#define HAL_STEP_TIMER_ISR() extern "C" void TIMER0_IRQHandler()
|
||||||
@ -87,5 +87,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num);
|
|||||||
void HAL_timer_disable_interrupt(const uint8_t timer_num);
|
void HAL_timer_disable_interrupt(const uint8_t timer_num);
|
||||||
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
|
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
|
||||||
|
|
||||||
#define HAL_timer_isr_prologue(T)
|
#define HAL_timer_isr_prologue(TIMER_NUM)
|
||||||
#define HAL_timer_isr_epilogue(T)
|
#define HAL_timer_isr_epilogue(TIMER_NUM)
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
#include "../../../inc/MarlinConfig.h"
|
#include "../../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
#if IS_U8GLIB_ST7920
|
#if ENABLED(U8GLIB_ST7920)
|
||||||
|
|
||||||
#include <U8glib-HAL.h>
|
#include <U8glib-HAL.h>
|
||||||
#include "../../shared/Delay.h"
|
#include "../../shared/Delay.h"
|
||||||
@ -167,5 +167,5 @@ uint8_t u8g_com_ST7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // IS_U8GLIB_ST7920
|
#endif // U8GLIB_ST7920
|
||||||
#endif // TARGET_LPC1768
|
#endif // TARGET_LPC1768
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
#include "../../../inc/MarlinConfig.h"
|
#include "../../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
#if HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
|
#if HAS_MARLINUI_U8GLIB && DISABLED(U8GLIB_ST7920)
|
||||||
|
|
||||||
#undef SPI_SPEED
|
#undef SPI_SPEED
|
||||||
#define SPI_SPEED 2 // About 2 MHz
|
#define SPI_SPEED 2 // About 2 MHz
|
||||||
@ -208,11 +208,8 @@ uint8_t u8g_com_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_pt
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif NONE(TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI, HAS_MARLINUI_HD44780) && HAS_MARLINUI_U8GLIB
|
#elif !ANY(TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI, HAS_MARLINUI_HD44780) && HAS_MARLINUI_U8GLIB
|
||||||
|
|
||||||
#include <U8glib-HAL.h>
|
#include <U8glib-HAL.h>
|
||||||
uint8_t u8g_com_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) {return 0;}
|
uint8_t u8g_com_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) {return 0;}
|
||||||
|
#endif // HAS_MARLINUI_U8GLIB && !U8GLIB_ST7920
|
||||||
#endif // HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
|
|
||||||
|
|
||||||
#endif // __PLAT_NATIVE_SIM__
|
#endif // __PLAT_NATIVE_SIM__
|
||||||
|
@ -98,7 +98,7 @@
|
|||||||
// Struct must be 32 bits aligned because of DMA accesses but fields needs to be 8 bits packed
|
// Struct must be 32 bits aligned because of DMA accesses but fields needs to be 8 bits packed
|
||||||
typedef struct __attribute__((aligned(4), packed)) {
|
typedef struct __attribute__((aligned(4), packed)) {
|
||||||
ADC_INPUTCTRL_Type INPUTCTRL;
|
ADC_INPUTCTRL_Type INPUTCTRL;
|
||||||
} HAL_DMA_DAC_Registers; // DMA transferred registers
|
} HAL_DMA_DAC_Registers; // DMA transfered registers
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -127,11 +127,6 @@ void HAL_adc_init();
|
|||||||
|
|
||||||
void HAL_adc_start_conversion(const uint8_t adc_pin);
|
void HAL_adc_start_conversion(const uint8_t adc_pin);
|
||||||
|
|
||||||
//
|
|
||||||
// PWM
|
|
||||||
//
|
|
||||||
inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); }
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Pin Map
|
// Pin Map
|
||||||
//
|
//
|
||||||
@ -158,14 +153,16 @@ void HAL_idletask();
|
|||||||
//
|
//
|
||||||
FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); }
|
FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); }
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#if GCC_VERSION <= 50000
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wunused-function"
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int freeMemory();
|
int freeMemory();
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
#if GCC_VERSION <= 50000
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
||||||
*
|
|
||||||
* Based on Sprinter and grbl.
|
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program 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 program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <SPI.h>
|
|
||||||
|
|
||||||
using MarlinSPI = SPIClass;
|
|
@ -25,6 +25,7 @@
|
|||||||
*
|
*
|
||||||
* Derived from Adafruit_SPIFlash class with no SdFat references
|
* Derived from Adafruit_SPIFlash class with no SdFat references
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <Adafruit_SPIFlashBase.h>
|
#include <Adafruit_SPIFlashBase.h>
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
static volatile int8_t currentServoIndex[_Nbr_16timers]; // index for the servo being pulsed for each timer (or -1 if refresh interval)
|
static volatile int8_t currentServoIndex[_Nbr_16timers]; // index for the servo being pulsed for each timer (or -1 if refresh interval)
|
||||||
|
|
||||||
FORCE_INLINE static uint16_t getTimerCount() {
|
FORCE_INLINE static uint16_t getTimerCount() {
|
||||||
Tc * const tc = timer_config[SERVO_TC].pTc;
|
Tc * const tc = TimerConfig[SERVO_TC].pTc;
|
||||||
|
|
||||||
tc->COUNT16.CTRLBSET.reg = TC_CTRLBCLR_CMD_READSYNC;
|
tc->COUNT16.CTRLBSET.reg = TC_CTRLBCLR_CMD_READSYNC;
|
||||||
SYNC(tc->COUNT16.SYNCBUSY.bit.CTRLB || tc->COUNT16.SYNCBUSY.bit.COUNT);
|
SYNC(tc->COUNT16.SYNCBUSY.bit.CTRLB || tc->COUNT16.SYNCBUSY.bit.COUNT);
|
||||||
@ -65,7 +65,7 @@ FORCE_INLINE static uint16_t getTimerCount() {
|
|||||||
// Interrupt handler for the TC
|
// Interrupt handler for the TC
|
||||||
// ----------------------------
|
// ----------------------------
|
||||||
HAL_SERVO_TIMER_ISR() {
|
HAL_SERVO_TIMER_ISR() {
|
||||||
Tc * const tc = timer_config[SERVO_TC].pTc;
|
Tc * const tc = TimerConfig[SERVO_TC].pTc;
|
||||||
const timer16_Sequence_t timer =
|
const timer16_Sequence_t timer =
|
||||||
#ifndef _useTimer1
|
#ifndef _useTimer1
|
||||||
_timer2
|
_timer2
|
||||||
@ -125,7 +125,7 @@ HAL_SERVO_TIMER_ISR() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void initISR(timer16_Sequence_t timer) {
|
void initISR(timer16_Sequence_t timer) {
|
||||||
Tc * const tc = timer_config[SERVO_TC].pTc;
|
Tc * const tc = TimerConfig[SERVO_TC].pTc;
|
||||||
const uint8_t tcChannel = TIMER_TCCHANNEL(timer);
|
const uint8_t tcChannel = TIMER_TCCHANNEL(timer);
|
||||||
|
|
||||||
static bool initialized = false; // Servo TC has been initialized
|
static bool initialized = false; // Servo TC has been initialized
|
||||||
@ -202,7 +202,7 @@ void initISR(timer16_Sequence_t timer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void finISR(timer16_Sequence_t timer) {
|
void finISR(timer16_Sequence_t timer) {
|
||||||
Tc * const tc = timer_config[SERVO_TC].pTc;
|
Tc * const tc = TimerConfig[SERVO_TC].pTc;
|
||||||
const uint8_t tcChannel = TIMER_TCCHANNEL(timer);
|
const uint8_t tcChannel = TIMER_TCCHANNEL(timer);
|
||||||
|
|
||||||
// Disable the match channel interrupt request
|
// Disable the match channel interrupt request
|
||||||
|
@ -162,14 +162,12 @@ void setup_endstop_interrupts() {
|
|||||||
#error "Z_MIN_PROBE_PIN has no EXTINT line available."
|
#error "Z_MIN_PROBE_PIN has no EXTINT line available."
|
||||||
#endif
|
#endif
|
||||||
_ATTACH(Z_MIN_PROBE_PIN);
|
_ATTACH(Z_MIN_PROBE_PIN);
|
||||||
#endif
|
#elif HAS_I_MAX
|
||||||
#if HAS_I_MAX
|
|
||||||
#if !AVAILABLE_EILINE(I_MAX_PIN)
|
#if !AVAILABLE_EILINE(I_MAX_PIN)
|
||||||
#error "I_MAX_PIN has no EXTINT line available."
|
#error "I_MAX_PIN has no EXTINT line available."
|
||||||
#endif
|
#endif
|
||||||
attachInterrupt(I_MAX_PIN, endstop_ISR, CHANGE);
|
attachInterrupt(I_MAX_PIN, endstop_ISR, CHANGE);
|
||||||
#endif
|
#elif HAS_I_MIN
|
||||||
#if HAS_I_MIN
|
|
||||||
#if !AVAILABLE_EILINE(I_MIN_PIN)
|
#if !AVAILABLE_EILINE(I_MIN_PIN)
|
||||||
#error "I_MIN_PIN has no EXTINT line available."
|
#error "I_MIN_PIN has no EXTINT line available."
|
||||||
#endif
|
#endif
|
||||||
@ -180,8 +178,7 @@ void setup_endstop_interrupts() {
|
|||||||
#error "J_MAX_PIN has no EXTINT line available."
|
#error "J_MAX_PIN has no EXTINT line available."
|
||||||
#endif
|
#endif
|
||||||
attachInterrupt(J_MAX_PIN, endstop_ISR, CHANGE);
|
attachInterrupt(J_MAX_PIN, endstop_ISR, CHANGE);
|
||||||
#endif
|
#elif HAS_J_MIN
|
||||||
#if HAS_J_MIN
|
|
||||||
#if !AVAILABLE_EILINE(J_MIN_PIN)
|
#if !AVAILABLE_EILINE(J_MIN_PIN)
|
||||||
#error "J_MIN_PIN has no EXTINT line available."
|
#error "J_MIN_PIN has no EXTINT line available."
|
||||||
#endif
|
#endif
|
||||||
@ -192,8 +189,7 @@ void setup_endstop_interrupts() {
|
|||||||
#error "K_MAX_PIN has no EXTINT line available."
|
#error "K_MAX_PIN has no EXTINT line available."
|
||||||
#endif
|
#endif
|
||||||
attachInterrupt(K_MAX_PIN, endstop_ISR, CHANGE);
|
attachInterrupt(K_MAX_PIN, endstop_ISR, CHANGE);
|
||||||
#endif
|
#elif HAS_K_MIN
|
||||||
#if HAS_K_MIN
|
|
||||||
#if !AVAILABLE_EILINE(K_MIN_PIN)
|
#if !AVAILABLE_EILINE(K_MIN_PIN)
|
||||||
#error "K_MIN_PIN has no EXTINT line available."
|
#error "K_MIN_PIN has no EXTINT line available."
|
||||||
#endif
|
#endif
|
||||||
|
@ -131,7 +131,7 @@
|
|||||||
*/
|
*/
|
||||||
#define PWM_PIN(P) (WITHIN(P, 2, 13) || WITHIN(P, 22, 23) || WITHIN(P, 44, 45) || P == 48)
|
#define PWM_PIN(P) (WITHIN(P, 2, 13) || WITHIN(P, 22, 23) || WITHIN(P, 44, 45) || P == 48)
|
||||||
|
|
||||||
// Return fulfilled ADCx->INPUTCTRL.reg
|
// Return fullfilled ADCx->INPUTCTRL.reg
|
||||||
#define PIN_TO_INPUTCTRL(P) ( (PIN_TO_AIN(P) == 0) ? ADC_INPUTCTRL_MUXPOS_AIN0 \
|
#define PIN_TO_INPUTCTRL(P) ( (PIN_TO_AIN(P) == 0) ? ADC_INPUTCTRL_MUXPOS_AIN0 \
|
||||||
: (PIN_TO_AIN(P) == 1) ? ADC_INPUTCTRL_MUXPOS_AIN1 \
|
: (PIN_TO_AIN(P) == 1) ? ADC_INPUTCTRL_MUXPOS_AIN1 \
|
||||||
: (PIN_TO_AIN(P) == 2) ? ADC_INPUTCTRL_MUXPOS_AIN2 \
|
: (PIN_TO_AIN(P) == 2) ? ADC_INPUTCTRL_MUXPOS_AIN2 \
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
#error "OnBoard SPI BUS can't be shared with other devices."
|
#error "OnBoard SPI BUS can't be shared with other devices."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if SERVO_TC == MF_TIMER_RTC
|
#if SERVO_TC == RTC_TIMER_NUM
|
||||||
#error "Servos can't use RTC timer"
|
#error "Servos can't use RTC timer"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
#define PRINT_PORT(p) do{ SERIAL_ECHOPGM(" Port: "); sprintf_P(buffer, PSTR("%c%02ld"), 'A' + g_APinDescription[p].ulPort, g_APinDescription[p].ulPin); SERIAL_ECHO(buffer); }while (0)
|
#define PRINT_PORT(p) do{ SERIAL_ECHOPGM(" Port: "); sprintf_P(buffer, PSTR("%c%02ld"), 'A' + g_APinDescription[p].ulPort, g_APinDescription[p].ulPin); SERIAL_ECHO(buffer); }while (0)
|
||||||
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0)
|
|
||||||
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
||||||
#define GET_ARRAY_IS_DIGITAL(p) pin_array[p].is_digital
|
#define GET_ARRAY_IS_DIGITAL(p) pin_array[p].is_digital
|
||||||
#define VALID_PIN(pin) (pin >= 0 && pin < (int8_t)NUMBER_PINS_TOTAL)
|
#define VALID_PIN(pin) (pin >= 0 && pin < (int8_t)NUMBER_PINS_TOTAL)
|
||||||
@ -48,7 +47,7 @@ bool GET_PINMODE(int8_t pin) { // 1: output, 0: input
|
|||||||
void pwm_details(int32_t pin) {
|
void pwm_details(int32_t pin) {
|
||||||
if (pwm_status(pin)) {
|
if (pwm_status(pin)) {
|
||||||
//uint32_t chan = g_APinDescription[pin].ulPWMChannel TODO when fast pwm is operative;
|
//uint32_t chan = g_APinDescription[pin].ulPWMChannel TODO when fast pwm is operative;
|
||||||
//SERIAL_ECHOPGM("PWM = ", duty);
|
//SERIAL_ECHOPAIR("PWM = ", duty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,13 +31,13 @@
|
|||||||
// Local defines
|
// Local defines
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
#define NUM_HARDWARE_TIMERS 9
|
#define NUM_HARDWARE_TIMERS 8
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// Private Variables
|
// Private Variables
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
const tTimerConfig timer_config[NUM_HARDWARE_TIMERS] = {
|
const tTimerConfig TimerConfig[NUM_HARDWARE_TIMERS+1] = {
|
||||||
{ {.pTc=TC0}, TC0_IRQn, TC_PRIORITY(0) }, // 0 - stepper (assigned priority 2)
|
{ {.pTc=TC0}, TC0_IRQn, TC_PRIORITY(0) }, // 0 - stepper (assigned priority 2)
|
||||||
{ {.pTc=TC1}, TC1_IRQn, TC_PRIORITY(1) }, // 1 - stepper (needed by 32 bit timers)
|
{ {.pTc=TC1}, TC1_IRQn, TC_PRIORITY(1) }, // 1 - stepper (needed by 32 bit timers)
|
||||||
{ {.pTc=TC2}, TC2_IRQn, 5 }, // 2 - tone (reserved by framework and fixed assigned priority 5)
|
{ {.pTc=TC2}, TC2_IRQn, 5 }, // 2 - tone (reserved by framework and fixed assigned priority 5)
|
||||||
@ -67,13 +67,13 @@ FORCE_INLINE void Disable_Irq(IRQn_Type irq) {
|
|||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
||||||
IRQn_Type irq = timer_config[timer_num].IRQ_Id;
|
IRQn_Type irq = TimerConfig[timer_num].IRQ_Id;
|
||||||
|
|
||||||
// Disable interrupt, just in case it was already enabled
|
// Disable interrupt, just in case it was already enabled
|
||||||
Disable_Irq(irq);
|
Disable_Irq(irq);
|
||||||
|
|
||||||
if (timer_num == MF_TIMER_RTC) {
|
if (timer_num == RTC_TIMER_NUM) {
|
||||||
Rtc * const rtc = timer_config[timer_num].pRtc;
|
Rtc * const rtc = TimerConfig[timer_num].pRtc;
|
||||||
|
|
||||||
// Disable timer interrupt
|
// Disable timer interrupt
|
||||||
rtc->MODE0.INTENCLR.reg = RTC_MODE0_INTENCLR_CMP0;
|
rtc->MODE0.INTENCLR.reg = RTC_MODE0_INTENCLR_CMP0;
|
||||||
@ -101,13 +101,13 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
|||||||
SYNC(rtc->MODE0.SYNCBUSY.bit.ENABLE);
|
SYNC(rtc->MODE0.SYNCBUSY.bit.ENABLE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Tc * const tc = timer_config[timer_num].pTc;
|
Tc * const tc = TimerConfig[timer_num].pTc;
|
||||||
|
|
||||||
// Disable timer interrupt
|
// Disable timer interrupt
|
||||||
tc->COUNT32.INTENCLR.reg = TC_INTENCLR_OVF; // disable overflow interrupt
|
tc->COUNT32.INTENCLR.reg = TC_INTENCLR_OVF; // disable overflow interrupt
|
||||||
|
|
||||||
// TCn clock setup
|
// TCn clock setup
|
||||||
const uint8_t clockID = GCLK_CLKCTRL_IDs[TCC_INST_NUM + timer_num]; // TC clock are preceded by TCC ones
|
const uint8_t clockID = GCLK_CLKCTRL_IDs[TCC_INST_NUM + timer_num]; // TC clock are preceeded by TCC ones
|
||||||
GCLK->PCHCTRL[clockID].bit.CHEN = false;
|
GCLK->PCHCTRL[clockID].bit.CHEN = false;
|
||||||
SYNC(GCLK->PCHCTRL[clockID].bit.CHEN);
|
SYNC(GCLK->PCHCTRL[clockID].bit.CHEN);
|
||||||
GCLK->PCHCTRL[clockID].reg = GCLK_PCHCTRL_GEN_GCLK0 | GCLK_PCHCTRL_CHEN; // 120MHz startup code programmed
|
GCLK->PCHCTRL[clockID].reg = GCLK_PCHCTRL_GEN_GCLK0 | GCLK_PCHCTRL_CHEN; // 120MHz startup code programmed
|
||||||
@ -141,17 +141,17 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Finally, enable IRQ
|
// Finally, enable IRQ
|
||||||
NVIC_SetPriority(irq, timer_config[timer_num].priority);
|
NVIC_SetPriority(irq, TimerConfig[timer_num].priority);
|
||||||
NVIC_EnableIRQ(irq);
|
NVIC_EnableIRQ(irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_timer_enable_interrupt(const uint8_t timer_num) {
|
void HAL_timer_enable_interrupt(const uint8_t timer_num) {
|
||||||
const IRQn_Type irq = timer_config[timer_num].IRQ_Id;
|
const IRQn_Type irq = TimerConfig[timer_num].IRQ_Id;
|
||||||
NVIC_EnableIRQ(irq);
|
NVIC_EnableIRQ(irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_timer_disable_interrupt(const uint8_t timer_num) {
|
void HAL_timer_disable_interrupt(const uint8_t timer_num) {
|
||||||
const IRQn_Type irq = timer_config[timer_num].IRQ_Id;
|
const IRQn_Type irq = TimerConfig[timer_num].IRQ_Id;
|
||||||
Disable_Irq(irq);
|
Disable_Irq(irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ static bool NVIC_GetEnabledIRQ(IRQn_Type IRQn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool HAL_timer_interrupt_enabled(const uint8_t timer_num) {
|
bool HAL_timer_interrupt_enabled(const uint8_t timer_num) {
|
||||||
const IRQn_Type irq = timer_config[timer_num].IRQ_Id;
|
const IRQn_Type irq = TimerConfig[timer_num].IRQ_Id;
|
||||||
return NVIC_GetEnabledIRQ(irq);
|
return NVIC_GetEnabledIRQ(irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,22 +25,21 @@
|
|||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// Defines
|
// Defines
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
#define RTC_TIMER_NUM 8 // This is not a TC but a RTC
|
||||||
|
|
||||||
typedef uint32_t hal_timer_t;
|
typedef uint32_t hal_timer_t;
|
||||||
#define HAL_TIMER_TYPE_MAX 0xFFFFFFFF
|
#define HAL_TIMER_TYPE_MAX 0xFFFFFFFF
|
||||||
|
|
||||||
#define HAL_TIMER_RATE F_CPU // frequency of timers peripherals
|
#define HAL_TIMER_RATE F_CPU // frequency of timers peripherals
|
||||||
|
|
||||||
#define MF_TIMER_RTC 8 // This is not a TC but a RTC
|
#ifndef STEP_TIMER_NUM
|
||||||
|
#define STEP_TIMER_NUM 0 // Timer Index for Stepper
|
||||||
#ifndef MF_TIMER_STEP
|
|
||||||
#define MF_TIMER_STEP 0 // Timer Index for Stepper
|
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_PULSE
|
#ifndef PULSE_TIMER_NUM
|
||||||
#define MF_TIMER_PULSE MF_TIMER_STEP
|
#define PULSE_TIMER_NUM STEP_TIMER_NUM
|
||||||
#endif
|
#endif
|
||||||
#ifndef MF_TIMER_TEMP
|
#ifndef TEMP_TIMER_NUM
|
||||||
#define MF_TIMER_TEMP MF_TIMER_RTC // Timer Index for Temperature
|
#define TEMP_TIMER_NUM RTC_TIMER_NUM // Timer Index for Temperature
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TEMP_TIMER_FREQUENCY 1000 // temperature interrupt frequency
|
#define TEMP_TIMER_FREQUENCY 1000 // temperature interrupt frequency
|
||||||
@ -53,29 +52,30 @@ typedef uint32_t hal_timer_t;
|
|||||||
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
|
||||||
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
|
||||||
|
|
||||||
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
|
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM)
|
||||||
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP)
|
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM)
|
||||||
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
|
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM)
|
||||||
|
|
||||||
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP)
|
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM)
|
||||||
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP)
|
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM)
|
||||||
|
|
||||||
#define TC_PRIORITY(t) ( t == SERVO_TC ? 1 \
|
#define TC_PRIORITY(t) t == SERVO_TC ? 1 \
|
||||||
: (t == MF_TIMER_STEP || t == MF_TIMER_PULSE) ? 2 \
|
: (t == STEP_TIMER_NUM || t == PULSE_TIMER_NUM) ? 2 \
|
||||||
: (t == MF_TIMER_TEMP) ? 6 : 7 )
|
: (t == TEMP_TIMER_NUM) ? 6 \
|
||||||
|
: 7
|
||||||
|
|
||||||
#define _TC_HANDLER(t) void TC##t##_Handler()
|
#define _TC_HANDLER(t) void TC##t##_Handler()
|
||||||
#define TC_HANDLER(t) _TC_HANDLER(t)
|
#define TC_HANDLER(t) _TC_HANDLER(t)
|
||||||
#ifndef HAL_STEP_TIMER_ISR
|
#ifndef HAL_STEP_TIMER_ISR
|
||||||
#define HAL_STEP_TIMER_ISR() TC_HANDLER(MF_TIMER_STEP)
|
#define HAL_STEP_TIMER_ISR() TC_HANDLER(STEP_TIMER_NUM)
|
||||||
#endif
|
#endif
|
||||||
#if MF_TIMER_STEP != MF_TIMER_PULSE
|
#if STEP_TIMER_NUM != PULSE_TIMER_NUM
|
||||||
#define HAL_PULSE_TIMER_ISR() TC_HANDLER(MF_TIMER_PULSE)
|
#define HAL_PULSE_TIMER_ISR() TC_HANDLER(PULSE_TIMER_NUM)
|
||||||
#endif
|
#endif
|
||||||
#if MF_TIMER_TEMP == MF_TIMER_RTC
|
#if TEMP_TIMER_NUM == RTC_TIMER_NUM
|
||||||
#define HAL_TEMP_TIMER_ISR() void RTC_Handler()
|
#define HAL_TEMP_TIMER_ISR() void RTC_Handler()
|
||||||
#else
|
#else
|
||||||
#define HAL_TEMP_TIMER_ISR() TC_HANDLER(MF_TIMER_TEMP)
|
#define HAL_TEMP_TIMER_ISR() TC_HANDLER(TEMP_TIMER_NUM)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -95,7 +95,7 @@ typedef struct {
|
|||||||
// Public Variables
|
// Public Variables
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
extern const tTimerConfig timer_config[];
|
extern const tTimerConfig TimerConfig[];
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// Public functions
|
// Public functions
|
||||||
@ -104,20 +104,20 @@ extern const tTimerConfig timer_config[];
|
|||||||
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency);
|
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency);
|
||||||
|
|
||||||
FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) {
|
FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) {
|
||||||
// Should never be called with timer MF_TIMER_RTC
|
// Should never be called with timer RTC_TIMER_NUM
|
||||||
Tc * const tc = timer_config[timer_num].pTc;
|
Tc * const tc = TimerConfig[timer_num].pTc;
|
||||||
tc->COUNT32.CC[0].reg = compare;
|
tc->COUNT32.CC[0].reg = compare;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) {
|
FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) {
|
||||||
// Should never be called with timer MF_TIMER_RTC
|
// Should never be called with timer RTC_TIMER_NUM
|
||||||
Tc * const tc = timer_config[timer_num].pTc;
|
Tc * const tc = TimerConfig[timer_num].pTc;
|
||||||
return (hal_timer_t)tc->COUNT32.CC[0].reg;
|
return (hal_timer_t)tc->COUNT32.CC[0].reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
|
FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
|
||||||
// Should never be called with timer MF_TIMER_RTC
|
// Should never be called with timer RTC_TIMER_NUM
|
||||||
Tc * const tc = timer_config[timer_num].pTc;
|
Tc * const tc = TimerConfig[timer_num].pTc;
|
||||||
tc->COUNT32.CTRLBSET.reg = TC_CTRLBCLR_CMD_READSYNC;
|
tc->COUNT32.CTRLBSET.reg = TC_CTRLBCLR_CMD_READSYNC;
|
||||||
SYNC(tc->COUNT32.SYNCBUSY.bit.CTRLB || tc->COUNT32.SYNCBUSY.bit.COUNT);
|
SYNC(tc->COUNT32.SYNCBUSY.bit.CTRLB || tc->COUNT32.SYNCBUSY.bit.COUNT);
|
||||||
return tc->COUNT32.COUNT.reg;
|
return tc->COUNT32.COUNT.reg;
|
||||||
@ -128,13 +128,13 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num);
|
|||||||
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
|
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
|
||||||
|
|
||||||
FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) {
|
FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) {
|
||||||
if (timer_num == MF_TIMER_RTC) {
|
if (timer_num == RTC_TIMER_NUM) {
|
||||||
Rtc * const rtc = timer_config[timer_num].pRtc;
|
Rtc * const rtc = TimerConfig[timer_num].pRtc;
|
||||||
// Clear interrupt flag
|
// Clear interrupt flag
|
||||||
rtc->MODE0.INTFLAG.reg = RTC_MODE0_INTFLAG_CMP0;
|
rtc->MODE0.INTFLAG.reg = RTC_MODE0_INTFLAG_CMP0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Tc * const tc = timer_config[timer_num].pTc;
|
Tc * const tc = TimerConfig[timer_num].pTc;
|
||||||
// Clear interrupt flag
|
// Clear interrupt flag
|
||||||
tc->COUNT32.INTFLAG.reg = TC_INTFLAG_OVF;
|
tc->COUNT32.INTFLAG.reg = TC_INTFLAG_OVF;
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,7 @@ void HAL_adc_start_conversion(const uint8_t adc_pin) { HAL_adc_result = analogRe
|
|||||||
uint16_t HAL_adc_get_result() { return HAL_adc_result; }
|
uint16_t HAL_adc_get_result() { return HAL_adc_result; }
|
||||||
|
|
||||||
// Reset the system to initiate a firmware flash
|
// Reset the system to initiate a firmware flash
|
||||||
WEAK void flashFirmware(const int16_t) { HAL_reboot(); }
|
void flashFirmware(const int16_t) { HAL_reboot(); }
|
||||||
|
|
||||||
// Maple Compatibility
|
// Maple Compatibility
|
||||||
volatile uint32_t systick_uptime_millis = 0;
|
volatile uint32_t systick_uptime_millis = 0;
|
||||||
|
@ -37,13 +37,6 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
//
|
|
||||||
// Default graphical display delays
|
|
||||||
//
|
|
||||||
#define CPU_ST7920_DELAY_1 300
|
|
||||||
#define CPU_ST7920_DELAY_2 40
|
|
||||||
#define CPU_ST7920_DELAY_3 340
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Serial Ports
|
// Serial Ports
|
||||||
//
|
//
|
||||||
@ -130,11 +123,7 @@
|
|||||||
// Types
|
// Types
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
#ifdef STM32G0B1xx
|
typedef int16_t pin_t;
|
||||||
typedef int32_t pin_t;
|
|
||||||
#else
|
|
||||||
typedef int16_t pin_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define HAL_SERVO_LIB libServo
|
#define HAL_SERVO_LIB libServo
|
||||||
#define PAUSE_SERVO_OUTPUT() libServo::pause_all_servos()
|
#define PAUSE_SERVO_OUTPUT() libServo::pause_all_servos()
|
||||||
@ -187,13 +176,8 @@ static inline int freeMemory() {
|
|||||||
|
|
||||||
#define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT)
|
#define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT)
|
||||||
|
|
||||||
#ifdef ADC_RESOLUTION
|
|
||||||
#define HAL_ADC_RESOLUTION ADC_RESOLUTION
|
|
||||||
#else
|
|
||||||
#define HAL_ADC_RESOLUTION 12
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define HAL_ADC_VREF 3.3
|
#define HAL_ADC_VREF 3.3
|
||||||
|
#define HAL_ADC_RESOLUTION ADC_RESOLUTION // 12
|
||||||
#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin)
|
#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin)
|
||||||
#define HAL_READ_ADC() HAL_adc_result
|
#define HAL_READ_ADC() HAL_adc_result
|
||||||
#define HAL_ADC_READY() true
|
#define HAL_ADC_READY() true
|
||||||
|
@ -125,7 +125,7 @@ static void TX(char c) {
|
|||||||
}
|
}
|
||||||
regs->DR = c;
|
regs->DR = c;
|
||||||
#else
|
#else
|
||||||
// Let's hope a mystical guru will fix this, one day by writing interrupt-free USB CDC ACM code (or, at least, by polling the registers since interrupt will be queued but will never trigger)
|
// Let's hope a mystical guru will fix this, one day by writting interrupt-free USB CDC ACM code (or, at least, by polling the registers since interrupt will be queued but will never trigger)
|
||||||
// For now, it's completely lost to oblivion.
|
// For now, it's completely lost to oblivion.
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -135,7 +135,7 @@ void install_min_serial() {
|
|||||||
HAL_min_serial_out = &TX;
|
HAL_min_serial_out = &TX;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if NONE(DYNAMIC_VECTORTABLE, STM32F0xx, STM32G0xx) // Cortex M0 can't jump to a symbol that's too far from the current function, so we work around this in exception_arm.cpp
|
#if DISABLED(DYNAMIC_VECTORTABLE) && DISABLED(STM32F0xx) // Cortex M0 can't jump to a symbol that's too far from the current function, so we work around this in exception_arm.cpp
|
||||||
extern "C" {
|
extern "C" {
|
||||||
__attribute__((naked)) void JumpHandler_ASM() {
|
__attribute__((naked)) void JumpHandler_ASM() {
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user