Compare commits
161 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 69f91ffdc5 | |||
| 1b6f303adb | |||
| 81e6155f88 | |||
| 352676885d | |||
| dbb62feac9 | |||
| 7805b59936 | |||
| 4c90b7e82e | |||
| ebaa72811d | |||
| 39cd26487a | |||
| de2c3bb3f3 | |||
| 42d68ff13f | |||
| 463e3d4436 | |||
| 3cf1e618eb | |||
| 575570f2a8 | |||
| f1823aca55 | |||
| cf4766a2b2 | |||
| 38ce8b9772 | |||
| c0159be9df | |||
| c80623998c | |||
| ae067f1c45 | |||
| aa20e8e419 | |||
| 9393a1e75b | |||
| 201f0ae03e | |||
| 098256d5df | |||
| a0f00367fe | |||
| 60cfb42668 | |||
| 138de675fe | |||
| 263ca25342 | |||
| e4211d2358 | |||
| 03897008e4 | |||
| 9291b46600 | |||
| ed5cc1a0c0 | |||
| 769701e64a | |||
| 4c8f900950 | |||
| c0f97e7874 | |||
| 232dec268d | |||
| 6af3951a47 | |||
| ea34fa2616 | |||
| 0e04d7b43d | |||
| 093d3cb32b | |||
| f603a152c7 | |||
| cf7e896328 | |||
| d4ad91c8f2 | |||
| e45d5354ea | |||
| 4279b78b17 | |||
| 5d24ecb17b | |||
| 23c7b5018e | |||
| 04d499c816 | |||
| e943b54003 | |||
| 7d04475e09 | |||
| 8c796fcd3b | |||
| 39997b7710 | |||
| 6ac884ee58 | |||
| b0829e5745 | |||
| ed2d955a42 | |||
| 49c78a4b25 | |||
| eb53a1c318 | |||
| 4743bb58e9 | |||
| 27f48c2c46 | |||
| 9ab228f19d | |||
| 00d3cdc8a6 | |||
| 384f45dcae | |||
| ebc40633a5 | |||
| 61665a4b6f | |||
| 848020d314 | |||
| 885fe5f573 | |||
| 39f035547a | |||
| 975141f77e | |||
| aa6b6a3b3d | |||
| 0b81c1cd14 | |||
| 1a1f9562d8 | |||
| 334893f831 | |||
| 73310d9848 | |||
| 34cce5a26a | |||
| 45688c0ae6 | |||
| 420ea1c30e | |||
| 10a71da890 | |||
| dde5cdfb0b | |||
| 0fea530069 | |||
| b55264b5ed | |||
| fb1cd0cf3c | |||
| 6840dcf87d | |||
| 04f81d0aa4 | |||
| 1884f3754c | |||
| 8f8511d2e0 | |||
| 966ffa295f | |||
| 63815d9acc | |||
| 1b5f70a35e | |||
| f6fc94dbc4 | |||
| 06982535d2 | |||
| f62a5f3ff6 | |||
| 2fc4871bc1 | |||
| 7e5b72bb49 | |||
| 31386be583 | |||
| cff4360621 | |||
| f515f22313 | |||
| e249e380fc | |||
| 9ce076a045 | |||
| f70c1d59da | |||
| f30bf8ba7d | |||
| 5e82e4e33d | |||
| b54f11859a | |||
| 5c051a005f | |||
| d25e477f76 | |||
| a1d8f5f79f | |||
| fd52a71294 | |||
| adc60676ae | |||
| 55a69ca853 | |||
| e0e42a5f61 | |||
| 2b10dfaf52 | |||
| 4599988e2a | |||
| ea10994180 | |||
| 534a3f39bb | |||
| 9f04dfb0a1 | |||
| 34d8f1d81f | |||
| 005cbbbb17 | |||
| 9dbf731d9a | |||
| 3f752657a7 | |||
| dd70e03767 | |||
| ecdc3a0911 | |||
| 2416912aef | |||
| 6d7220e379 | |||
| 80134a4a48 | |||
| e49bbfef14 | |||
| 0c48e709ff | |||
| 38aba644c3 | |||
| 6498c4cf88 | |||
| 9948054cb7 | |||
| 412e3aa1f6 | |||
| 9975799c5f | |||
| 5f688304f6 | |||
| ba919e49fc | |||
| a2fa854d9c | |||
| 518e313260 | |||
| 4e2b4ce9a0 | |||
| 08b5bdda27 | |||
| a9d634fe28 | |||
| 4198b14e2f | |||
| 615ac13a52 | |||
| 8d23b85b47 | |||
| ad17b23fc8 | |||
| 3ef237cece | |||
| 4c2fe3bad8 | |||
| 0822bcbff8 | |||
| 672f1c60fb | |||
| 3a8c87b511 | |||
| a43dd70976 | |||
| e890bdffeb | |||
| eb54bf155a | |||
| 53e9e8c7b3 | |||
| cddbd1c6b4 | |||
| 77db45432b | |||
| 68240d398f | |||
| 6a3532bc71 | |||
| a94dedd2cb | |||
| 2108715fa6 | |||
| 614c9c6c9d | |||
| 1c658401de | |||
| 97379d5d53 | |||
| 3e5a957872 | |||
| e9588824bb |
@@ -0,0 +1,274 @@
|
|||||||
|
# Python CircleCI 2.0 configuration file
|
||||||
|
#
|
||||||
|
# Check https://circleci.com/docs/2.0/language-python/ for more details
|
||||||
|
#
|
||||||
|
version: 2
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
docker:
|
||||||
|
# specify the version you desire here
|
||||||
|
# use `-browsers` prefix for selenium tests, e.g. `3.6.1-browsers`
|
||||||
|
- image: circleci/python:2.7.13
|
||||||
|
|
||||||
|
# Specify service dependencies here if necessary
|
||||||
|
# CircleCI maintains a library of pre-built images
|
||||||
|
# documented at https://circleci.com/docs/2.0/circleci-images/
|
||||||
|
# - image: circleci/postgres:9.4
|
||||||
|
environment:
|
||||||
|
TEST_PLATFORM: "-e megaatmega2560"
|
||||||
|
|
||||||
|
working_directory: ~/Marlin
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
|
||||||
|
- restore_cache:
|
||||||
|
paths:
|
||||||
|
- ~/.platformio
|
||||||
|
- ~/Marlin/.piolibdeps
|
||||||
|
keys:
|
||||||
|
- v1-dependencies-{{ checksum "~/Marlin/platformio.ini" }}
|
||||||
|
# fallback to using the latest cache if no exact match is found
|
||||||
|
- v1-dependencies-
|
||||||
|
|
||||||
|
- run:
|
||||||
|
name: install dependencies
|
||||||
|
command: |
|
||||||
|
sudo pip install -U platformio
|
||||||
|
|
||||||
|
# run tests!
|
||||||
|
- run:
|
||||||
|
name: run tests
|
||||||
|
command: |
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Fetch the tag information for the current branch
|
||||||
|
ls -la
|
||||||
|
git fetch origin --tags
|
||||||
|
#
|
||||||
|
# Publish the buildroot script folder
|
||||||
|
chmod +x buildroot/bin/*
|
||||||
|
export PATH=`pwd`/buildroot/bin/:${PATH}
|
||||||
|
|
||||||
|
# Generate custom version include
|
||||||
|
generate_version ./Marlin/src/inc
|
||||||
|
cat ./Marlin/src/inc/_Version.h
|
||||||
|
#
|
||||||
|
# Back up pins_RAMPS.h
|
||||||
|
#
|
||||||
|
backup_ramps
|
||||||
|
|
||||||
|
env_backup
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Build all sample configurations
|
||||||
|
#################################
|
||||||
|
|
||||||
|
echo testing megaatmega2560 targets...
|
||||||
|
export TEST_PLATFORM="-e megaatmega2560"
|
||||||
|
echo use_example_configs adafruit/ST7565
|
||||||
|
use_example_configs adafruit/ST7565
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs BQ/Hephestos
|
||||||
|
use_example_configs BQ/Hephestos
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs BQ/Hephestos_2
|
||||||
|
use_example_configs BQ/Hephestos_2
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs BQ/WITBOX
|
||||||
|
use_example_configs BQ/WITBOX
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs AliExpress/CL-260
|
||||||
|
use_example_configs AliExpress/CL-260
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
#echo use_example_configs Cartesio
|
||||||
|
#use_example_configs Cartesio
|
||||||
|
#build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
#restore_configs
|
||||||
|
echo use_example_configs delta/FLSUN/auto_calibrate
|
||||||
|
use_example_configs delta/FLSUN/auto_calibrate
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs delta/FLSUN/kossel_mini
|
||||||
|
use_example_configs delta/FLSUN/kossel_mini
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs delta/generic
|
||||||
|
use_example_configs delta/generic
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs delta/kossel_mini
|
||||||
|
use_example_configs delta/kossel_mini
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs delta/kossel_xl
|
||||||
|
use_example_configs delta/kossel_xl
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Felix
|
||||||
|
use_example_configs Felix
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Felix/DUAL
|
||||||
|
use_example_configs Felix/DUAL
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs FolgerTech/i3-2020
|
||||||
|
use_example_configs FolgerTech/i3-2020
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs gCreate/gMax1.5+
|
||||||
|
use_example_configs gCreate/gMax1.5+
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Geeetech/GT2560
|
||||||
|
use_example_configs Geeetech/GT2560
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
#echo use_example_configs Geeetech/I3_Pro_X-GT2560
|
||||||
|
#use_example_configs Geeetech/I3_Pro_X-GT2560
|
||||||
|
#build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
#restore_configs
|
||||||
|
echo use_example_configs Infitary/i3-M508
|
||||||
|
use_example_configs Infitary/i3-M508
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
use_example_configs Malyan/M200
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Micromake/C1/basic
|
||||||
|
use_example_configs Micromake/C1/basic
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Micromake/C1/enhanced
|
||||||
|
use_example_configs Micromake/C1/enhanced
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs RepRapWorld/Megatronics
|
||||||
|
use_example_configs RepRapWorld/Megatronics
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs RigidBot
|
||||||
|
use_example_configs RigidBot
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs SCARA
|
||||||
|
use_example_configs SCARA
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Velleman/K8200
|
||||||
|
use_example_configs Velleman/K8200
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Velleman/K8400/Dual-head
|
||||||
|
use_example_configs Velleman/K8400/Dual-head
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Velleman/K8400
|
||||||
|
use_example_configs Velleman/K8400
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Wanhao/Duplicator6
|
||||||
|
use_example_configs Wanhao/Duplicator6
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
# Requires manual load of https://github.com/stawel/SlowSoftI2CMaster
|
||||||
|
#use_example_configs wt150
|
||||||
|
#build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
#restore_configs
|
||||||
|
echo testing melzi targets...
|
||||||
|
export TEST_PLATFORM="-e melzi"
|
||||||
|
echo use_example_configs Anet/A6
|
||||||
|
use_example_configs Anet/A6
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Anet/A8
|
||||||
|
use_example_configs Anet/A8
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Creality/CR-10
|
||||||
|
use_example_configs Creality/CR-10
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Malyan/M150
|
||||||
|
use_example_configs Malyan/M150
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs Sanguinololu
|
||||||
|
use_example_configs Sanguinololu
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs TinyBoy2
|
||||||
|
use_example_configs TinyBoy2
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
|
||||||
|
echo testing rambo targets...
|
||||||
|
export TEST_PLATFORM="-e rambo"
|
||||||
|
echo use_example_configs AlephObjects/TAZ4
|
||||||
|
use_example_configs AlephObjects/TAZ4
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
|
||||||
|
echo testing at90usb1286_* targets...
|
||||||
|
export TEST_PLATFORM="-e at90usb1286_dfu"
|
||||||
|
#echo se_example_configs delta/kossel_pro
|
||||||
|
#use_example_configs delta/kossel_pro
|
||||||
|
#build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
#restore_configs
|
||||||
|
echo use_example_configs makibox
|
||||||
|
use_example_configs makibox
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
|
||||||
|
echo testing sanguino_atmega644p targets...
|
||||||
|
export TEST_PLATFORM="-e sanguino_atmega644p"
|
||||||
|
echo use_example_configs tvrrug/Round2
|
||||||
|
use_example_configs tvrrug/Round2
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
|
||||||
|
echo testing LPC1768 targets...
|
||||||
|
export TEST_PLATFORM="-e LPC1768"
|
||||||
|
echo use_example_configs Mks/Sbase
|
||||||
|
use_example_configs Mks/Sbase
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo testing STM32F1 targets...
|
||||||
|
export TEST_PLATFORM="-e STM32F103RE"
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs STM32/STM32F103RE
|
||||||
|
use_example_configs STM32/STM32F103RE
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
echo use_example_configs STM32/stm32f103ret6
|
||||||
|
use_example_configs STM32/stm32f103ret6
|
||||||
|
build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
restore_configs
|
||||||
|
|
||||||
|
echo testing DUE targets...
|
||||||
|
export TEST_PLATFORM="-e DUE"
|
||||||
|
#echo use_example_configs UltiMachine/Archim2
|
||||||
|
#use_example_configs UltiMachine/Archim2
|
||||||
|
#build_marlin_pio ./ ${TEST_PLATFORM}
|
||||||
|
#restore_configs
|
||||||
|
|
||||||
|
#
|
||||||
|
# Remove temp files from dependencies tree prior to caching
|
||||||
|
rm -rf ~/Marlin/.piolibdeps/_tmp_*
|
||||||
|
|
||||||
|
#
|
||||||
|
# Restore the environment
|
||||||
|
#
|
||||||
|
env_restore
|
||||||
|
|
||||||
|
- save_cache:
|
||||||
|
paths:
|
||||||
|
- ~/.platformio
|
||||||
|
- ~/Marlin/.piolibdeps
|
||||||
|
key: v1-dependencies-{{ checksum "~/Marlin/platformio.ini" }}
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# editorconfig.org
|
|
||||||
root = true
|
|
||||||
|
|
||||||
[{*.patch,syntax_test_*}]
|
|
||||||
trim_trailing_whitespace = false
|
|
||||||
|
|
||||||
[{*.c,*.cpp,*.h}]
|
|
||||||
charset = utf-8
|
|
||||||
|
|
||||||
[{*.c,*.cpp,*.h,Makefile}]
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
insert_final_newline = true
|
|
||||||
end_of_line = lf
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[{*.py,*.conf,*.sublime-project}]
|
|
||||||
indent_style = tab
|
|
||||||
indent_size = 4
|
|
||||||
+1
-3
@@ -1,3 +1 @@
|
|||||||
github: [thinkyhead]
|
custom: http://www.thinkyhead.com/donate-to-marlin
|
||||||
patreon: thinkyhead
|
|
||||||
custom: ["https://www.thinkyhead.com/donate-to-marlin"]
|
|
||||||
|
|||||||
+11
-10
@@ -34,15 +34,16 @@ This project and everyone participating in it is governed by the [Marlin Code of
|
|||||||
|
|
||||||
We have a Message Board and a Facebook group where our knowledgable user community can provide helpful advice if you have questions.
|
We have a Message Board and a Facebook group where our knowledgable user community can provide helpful advice if you have questions.
|
||||||
|
|
||||||
* [Marlin RepRap forum](https://reprap.org/forum/list.php?415)
|
* [Marlin RepRap forum](http://forums.reprap.org/list.php?415)
|
||||||
* [MarlinFirmware on Facebook](https://www.facebook.com/groups/1049718498464482/)
|
* [MarlinFirmware on Facebook](https://www.facebook.com/groups/1049718498464482/)
|
||||||
|
|
||||||
If chat is more your speed, you can join the MarlinFirmware Discord server:
|
If chat is more your speed, you can join the MarlinFirmware Slack team:
|
||||||
|
|
||||||
* Use the link https://discord.gg/n5NJ59y to join up as a General User.
|
* Join the Marlin Slack Team
|
||||||
* Even though our Discord is pretty active, it may take a while for community members to respond — please be patient!
|
* To obtain group access, please [send a request](http://www.thinkyhead.com/contact/9) to @thinkyhead.
|
||||||
* Use the `#general` channel for general questions or discussion about Marlin.
|
* Even though Slack is a chat service, sometimes it takes several hours for community members to respond — please be patient!
|
||||||
* Other channels exist for certain topics or are limited to Patrons. Check the channel list.
|
* Use the `#general` channel for general questions or discussion about Marlin.
|
||||||
|
* Other channels exist for certain topics. Check the channel list.
|
||||||
|
|
||||||
## How Can I Contribute?
|
## How Can I Contribute?
|
||||||
|
|
||||||
@@ -92,7 +93,7 @@ Before creating a suggestion, please check [this list](#before-submitting-a-sugg
|
|||||||
|
|
||||||
#### Before Submitting a Feature Request
|
#### Before Submitting a Feature Request
|
||||||
|
|
||||||
* **Check the [Marlin website](https://marlinfw.org/)** for tips — you might discover that the feature is already included. Most importantly, check if you're using [the latest version of Marlin](https://github.com/MarlinFirmware/Marlin/releases) and if you can get the desired behavior by changing [Marlin's config settings](https://marlinfw.org/docs/configuration/configuration.html).
|
* **Check the [Marlin website](http://marlinfw.org/)** for tips — you might discover that the feature is already included. Most importantly, check if you're using [the latest version of Marlin](https://github.com/MarlinFirmware/Marlin/releases) and if you can get the desired behavior by changing [Marlin's config settings](http://marlinfw.org/docs/configuration/configuration.html).
|
||||||
* **Perform a [cursory search](https://github.com/MarlinFirmware/Marlin/issues?q=is%3Aissue)** to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
|
* **Perform a [cursory search](https://github.com/MarlinFirmware/Marlin/issues?q=is%3Aissue)** to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
|
||||||
|
|
||||||
#### How Do I Submit A (Good) Feature Request?
|
#### How Do I Submit A (Good) Feature Request?
|
||||||
@@ -116,12 +117,12 @@ Unsure where to begin contributing to Marlin? You can start by looking through t
|
|||||||
|
|
||||||
### Pull Requests
|
### Pull Requests
|
||||||
|
|
||||||
Pull Requests should always be targeted to working branches (e.g., `bugfix-1.1.x` and/or `bugfix-2.0.x`) and never to release branches (e.g., `1.1.x`). If this is your first Pull Request, please read our [Guide to Pull Requests](https://marlinfw.org/docs/development/getting_started_pull_requests.html) and Github's [Pull Request](https://help.github.com/articles/creating-a-pull-request/) documentation.
|
Pull Requests should always be targeted to working branches (e.g., `bugfix-1.1.x` and/or `bugfix-2.0.x`) and never to release branches (e.g., `1.1.x`). If this is your first Pull Request, please read our [Guide to Pull Requests](http://marlinfw.org/docs/development/getting_started_pull_requests.html) and Github's [Pull Request](https://help.github.com/articles/creating-a-pull-request/) documentation.
|
||||||
|
|
||||||
* Fill in [the required template](pull_request_template.md).
|
* Fill in [the required template](pull_request_template.md).
|
||||||
* Don't include issue numbers in the PR title.
|
* Don't include issue numbers in the PR title.
|
||||||
* Include pictures, diagrams, and links to videos in your Pull Request to demonstrate your changes, if needed.
|
* Include pictures, diagrams, and links to videos in your Pull Request to demonstrate your changes, if needed.
|
||||||
* Follow the [Coding Standards](https://marlinfw.org/docs/development/coding_standards.html) posted on our website.
|
* Follow the [Coding Standards](http://marlinfw.org/docs/development/coding_standards.html) posted on our website.
|
||||||
* Document new code with clear and concise comments.
|
* Document new code with clear and concise comments.
|
||||||
* End all files with a newline.
|
* End all files with a newline.
|
||||||
|
|
||||||
@@ -136,7 +137,7 @@ Pull Requests should always be targeted to working branches (e.g., `bugfix-1.1.x
|
|||||||
|
|
||||||
### C++ Coding Standards
|
### C++ Coding Standards
|
||||||
|
|
||||||
* Please read and follow the [Coding Standards](https://marlinfw.org/docs/development/coding_standards.html) posted on our website. Failure to follow these guidelines will delay evaluation and acceptance of Pull Requests.
|
* Please read and follow the [Coding Standards](http://marlinfw.org/docs/development/coding_standards.html) posted on our website. Failure to follow these guidelines will delay evaluation and acceptance of Pull Requests.
|
||||||
|
|
||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,9 @@
|
|||||||
|
|
||||||
Have you read Marlin's Code of Conduct? By filing an Issue, you are expected to comply with it, including treating everyone with respect: https://github.com/MarlinFirmware/Marlin/blob/bugfix-2.0.x/.github/code_of_conduct.md
|
Have you read Marlin's Code of Conduct? By filing an Issue, you are expected to comply with it, including treating everyone with respect: https://github.com/MarlinFirmware/Marlin/blob/bugfix-2.0.x/.github/code_of_conduct.md
|
||||||
|
|
||||||
Do you want to ask a question? Are you looking for support? Please don't post here. Instead use one of the following options:
|
Do you want to ask a question? Are you looking for support? Please don't post here. Instead please use the Marlin Firmware forum at http://forums.reprap.org/list.php?415 or the Marlin Facebook Group https://www.facebook.com/groups/1049718498464482/ or the Marlin Discord Server https://discord.gg/n5NJ59y.
|
||||||
|
|
||||||
- The Marlin Firmware forum at https://reprap.org/forum/list.php?415
|
Before filing an issue be sure to test the 1.1 and/or 2.0 "bugfix" branches to see whether the issue is already addressed.
|
||||||
- The MarlinFirmware Facebook Group at https://www.facebook.com/groups/1049718498464482/
|
|
||||||
- The MarlinFirmware Discord Server at https://discord.gg/n5NJ59y.
|
|
||||||
|
|
||||||
Before filing an issue be sure to test the latest "bugfix" branch to see whether the issue is already addressed.
|
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
#
|
|
||||||
# Configuration for Lock Threads - https://github.com/dessant/lock-threads-app
|
|
||||||
#
|
|
||||||
|
|
||||||
# Number of days of inactivity before a closed issue or pull request is locked
|
|
||||||
daysUntilLock: 60
|
|
||||||
|
|
||||||
# Skip issues and pull requests created before a given timestamp. Timestamp must
|
|
||||||
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
|
|
||||||
skipCreatedBefore: false
|
|
||||||
|
|
||||||
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
|
|
||||||
exemptLabels: [ 'no-locking' ]
|
|
||||||
|
|
||||||
# Label to add before locking, such as `outdated`. Set to `false` to disable
|
|
||||||
lockLabel: false
|
|
||||||
|
|
||||||
# Comment to post before locking. Set to `false` to disable
|
|
||||||
lockComment: >
|
|
||||||
This thread has been automatically locked since there has not been
|
|
||||||
any recent activity after it was closed. Please open a new issue for
|
|
||||||
related bugs.
|
|
||||||
|
|
||||||
# Assign `resolved` as the reason for locking. Set to `false` to disable
|
|
||||||
setLockReason: true
|
|
||||||
|
|
||||||
# Limit to only `issues` or `pulls`
|
|
||||||
# only: issues
|
|
||||||
|
|
||||||
# Optionally, specify configuration settings just for `issues` or `pulls`
|
|
||||||
# issues:
|
|
||||||
# exemptLabels:
|
|
||||||
# - help-wanted
|
|
||||||
# lockLabel: outdated
|
|
||||||
|
|
||||||
# pulls:
|
|
||||||
# daysUntilLock: 30
|
|
||||||
|
|
||||||
# Repository to extend settings from
|
|
||||||
# _extends: repo
|
|
||||||
@@ -14,10 +14,6 @@ We must be able to understand your proposed change from this description. If we
|
|||||||
|
|
||||||
<!-- What does this fix or improve? -->
|
<!-- What does this fix or improve? -->
|
||||||
|
|
||||||
### Configurations
|
|
||||||
|
|
||||||
<!-- Attach any Configuration.h, Configuration_adv.h, or platformio.ini files needed to compile/test your Pull Request. -->
|
|
||||||
|
|
||||||
### Related Issues
|
### Related Issues
|
||||||
|
|
||||||
<!-- Whether this fixes a bug or fulfills a feature request, please list any related Issues here. -->
|
<!-- Whether this fixes a bug or fulfills a feature request, please list any related Issues here. -->
|
||||||
|
|||||||
@@ -1,121 +0,0 @@
|
|||||||
#
|
|
||||||
# test-builds.yml
|
|
||||||
# Do test builds to catch compile errors
|
|
||||||
#
|
|
||||||
|
|
||||||
name: CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- bugfix-2.0.x
|
|
||||||
paths-ignore:
|
|
||||||
- config/**
|
|
||||||
- data/**
|
|
||||||
- docs/**
|
|
||||||
- '**/*.md'
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- bugfix-2.0.x
|
|
||||||
paths-ignore:
|
|
||||||
- config/**
|
|
||||||
- data/**
|
|
||||||
- docs/**
|
|
||||||
- '**/*.md'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test_builds:
|
|
||||||
name: Run All Tests
|
|
||||||
if: github.repository == 'MarlinFirmware/Marlin'
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
test-platform:
|
|
||||||
# Base Environments
|
|
||||||
|
|
||||||
- DUE
|
|
||||||
- esp32
|
|
||||||
- linux_native
|
|
||||||
- mega2560
|
|
||||||
- teensy31
|
|
||||||
- teensy35
|
|
||||||
- SAMD51_grandcentral_m4
|
|
||||||
|
|
||||||
# Extended AVR Environments
|
|
||||||
|
|
||||||
- FYSETC_F6_13
|
|
||||||
- mega1280
|
|
||||||
- rambo
|
|
||||||
- sanguino1284p
|
|
||||||
- sanguino644p
|
|
||||||
|
|
||||||
# Extended STM32 Environments
|
|
||||||
|
|
||||||
- STM32F103RC_btt
|
|
||||||
- STM32F103RC_btt_USB
|
|
||||||
- STM32F103RE_btt
|
|
||||||
- STM32F103RE_btt_USB
|
|
||||||
- STM32F103RC_fysetc
|
|
||||||
- STM32F103RC_meeb
|
|
||||||
- jgaurora_a5s_a1
|
|
||||||
- STM32F103VE_longer
|
|
||||||
- STM32F407VE_black
|
|
||||||
- STM32F401VE_STEVAL
|
|
||||||
- BIGTREE_BTT002
|
|
||||||
- BIGTREE_SKR_PRO
|
|
||||||
- BIGTREE_GTR_V1_0
|
|
||||||
- mks_robin
|
|
||||||
- mks_robin_stm32
|
|
||||||
- ARMED
|
|
||||||
- FYSETC_S6
|
|
||||||
- STM32F070RB_malyan
|
|
||||||
- malyan_M300
|
|
||||||
- mks_robin_lite
|
|
||||||
- FLYF407ZG
|
|
||||||
- rumba32
|
|
||||||
- mks_robin_pro
|
|
||||||
- STM32F103RET6_creality
|
|
||||||
- LERDGEX
|
|
||||||
- mks_robin_nano35
|
|
||||||
|
|
||||||
# Put lengthy tests last
|
|
||||||
|
|
||||||
- LPC1768
|
|
||||||
- LPC1769
|
|
||||||
|
|
||||||
# STM32 with non-STM framework. both broken for now. they should use HAL_STM32 which is working.
|
|
||||||
|
|
||||||
#- STM32F4
|
|
||||||
#- STM32F7
|
|
||||||
|
|
||||||
# Non-working environment tests
|
|
||||||
#- at90usb1286_cdc
|
|
||||||
#- at90usb1286_dfu
|
|
||||||
#- STM32F103CB_malyan
|
|
||||||
#- mks_robin_mini
|
|
||||||
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Select Python 3.7
|
|
||||||
uses: actions/setup-python@v1
|
|
||||||
with:
|
|
||||||
python-version: '3.7' # Version range or exact version of a Python version to use, using semvers version range syntax.
|
|
||||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
|
||||||
|
|
||||||
- name: Install PlatformIO
|
|
||||||
run: |
|
|
||||||
pip install -U https://github.com/platformio/platformio-core/archive/develop.zip
|
|
||||||
platformio update
|
|
||||||
|
|
||||||
- name: Check out the PR
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Run ${{ matrix.test-platform }} Tests
|
|
||||||
run: |
|
|
||||||
# Inline tests script
|
|
||||||
chmod +x buildroot/bin/*
|
|
||||||
chmod +x buildroot/tests/*
|
|
||||||
export PATH=./buildroot/bin/:./buildroot/tests/:${PATH}
|
|
||||||
run_tests . ${{ matrix.test-platform }}
|
|
||||||
+2
-5
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Marlin 3D Printer Firmware
|
# Marlin 3D Printer Firmware
|
||||||
# Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
# Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
#
|
#
|
||||||
# Based on Sprinter and grbl.
|
# Based on Sprinter and grbl.
|
||||||
# Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
# Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
# Our automatic versioning scheme generates the following file
|
# Our automatic versioning scheme generates the following file
|
||||||
@@ -146,9 +146,6 @@ Marlin/*/*/readme.txt
|
|||||||
Marlin/*/*/*/readme.txt
|
Marlin/*/*/*/readme.txt
|
||||||
Marlin/*/*/*/*/readme.txt
|
Marlin/*/*/*/*/readme.txt
|
||||||
|
|
||||||
# Secure Credentials
|
|
||||||
Configuration_Secure.h
|
|
||||||
|
|
||||||
#Visual Studio
|
#Visual Studio
|
||||||
*.sln
|
*.sln
|
||||||
*.vcxproj
|
*.vcxproj
|
||||||
|
|||||||
+80
@@ -0,0 +1,80 @@
|
|||||||
|
dist: bionic
|
||||||
|
sudo: false
|
||||||
|
|
||||||
|
language: python
|
||||||
|
python:
|
||||||
|
- "3.7"
|
||||||
|
|
||||||
|
notifications:
|
||||||
|
email: false
|
||||||
|
|
||||||
|
env:
|
||||||
|
# Base Environments
|
||||||
|
- TEST_PLATFORM="DUE"
|
||||||
|
- TEST_PLATFORM="esp32"
|
||||||
|
- TEST_PLATFORM="linux_native"
|
||||||
|
- TEST_PLATFORM="LPC1768"
|
||||||
|
- TEST_PLATFORM="LPC1769"
|
||||||
|
- TEST_PLATFORM="megaatmega2560"
|
||||||
|
- TEST_PLATFORM="STM32F103RE"
|
||||||
|
- TEST_PLATFORM="teensy31"
|
||||||
|
- TEST_PLATFORM="teensy35"
|
||||||
|
|
||||||
|
# Extended AVR Environments
|
||||||
|
- TEST_PLATFORM="fysetc_f6_13"
|
||||||
|
- TEST_PLATFORM="megaatmega1280"
|
||||||
|
- TEST_PLATFORM="rambo"
|
||||||
|
- TEST_PLATFORM="sanguino_atmega1284p"
|
||||||
|
- TEST_PLATFORM="sanguino_atmega644p"
|
||||||
|
|
||||||
|
# Extended STM32 Environments
|
||||||
|
- TEST_PLATFORM="ARMED"
|
||||||
|
- TEST_PLATFORM="BIGTREE_BTT002"
|
||||||
|
- TEST_PLATFORM="BIGTREE_SKR_PRO"
|
||||||
|
- TEST_PLATFORM="STM32F103RC_bigtree"
|
||||||
|
- TEST_PLATFORM="jgaurora_a5s_a1"
|
||||||
|
- TEST_PLATFORM="STM32F103VE_longer"
|
||||||
|
- TEST_PLATFORM="STM32F407VE_black"
|
||||||
|
|
||||||
|
# Non-working environment tests
|
||||||
|
#- TEST_PLATFORM="at90usb1286_cdc"
|
||||||
|
#- TEST_PLATFORM="at90usb1286_dfu"
|
||||||
|
#- TEST_PLATFORM="STM32F103CB_malyan"
|
||||||
|
#- TEST_PLATFORM="mks_robin"
|
||||||
|
#- TEST_PLATFORM="mks_robin_lite"
|
||||||
|
#- TEST_PLATFORM="mks_robin_mini"
|
||||||
|
#- TEST_PLATFORM="mks_robin_nano"
|
||||||
|
#- TEST_PLATFORM="SAMD51_grandcentral_m4"
|
||||||
|
#- TEST_PLATFORM="STM32F103RC_bigtree"
|
||||||
|
#- TEST_PLATFORM="STM32F103RC_bigtree_USB"
|
||||||
|
#- TEST_PLATFORM="STM32F103RC_fysetc"
|
||||||
|
#- TEST_PLATFORM="STM32F4"
|
||||||
|
#- TEST_PLATFORM="STM32F7"
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
#
|
||||||
|
# Fetch the tag information for the current branch
|
||||||
|
- git fetch origin --tags
|
||||||
|
#
|
||||||
|
# Publish the buildroot script folder
|
||||||
|
- chmod +x ${TRAVIS_BUILD_DIR}/buildroot/bin/*
|
||||||
|
- chmod +x ${TRAVIS_BUILD_DIR}/buildroot/share/tests/*
|
||||||
|
- export PATH=${TRAVIS_BUILD_DIR}/buildroot/bin/:${TRAVIS_BUILD_DIR}/buildroot/share/tests/:${PATH}
|
||||||
|
|
||||||
|
install:
|
||||||
|
#- pip install -U platformio
|
||||||
|
- pip install -U https://github.com/platformio/platformio-core/archive/master.zip
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
# Update PlatformIO packages
|
||||||
|
- platformio update
|
||||||
|
#
|
||||||
|
# Change current working directory to the build dir
|
||||||
|
- cd ${TRAVIS_BUILD_DIR}
|
||||||
|
#
|
||||||
|
# Generate custom version include
|
||||||
|
- generate_version ${TRAVIS_BUILD_DIR}/Marlin/src/inc
|
||||||
|
- cat ${TRAVIS_BUILD_DIR}/Marlin/src/inc/_Version.h
|
||||||
|
#
|
||||||
|
script:
|
||||||
|
- run_tests ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
|
||||||
Binary file not shown.
+9758
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 3, 29 June 2007
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
Copyright (c) 2007 Free Software Foundation, Inc. <https://www.fsf.org/>
|
Copyright (c) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
@@ -647,7 +647,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
|||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
@@ -666,11 +666,12 @@ might be different; for a GUI interface, you would use an "about box".
|
|||||||
You should also get your employer (if you work as a programmer) or school,
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
For more information on this, and how to apply and follow the GNU GPL, see
|
For more information on this, and how to apply and follow the GNU GPL, see
|
||||||
<https://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
The GNU General Public License does not permit incorporating your program
|
The GNU General Public License does not permit incorporating your program
|
||||||
into proprietary programs. If your program is a subroutine library, you
|
into proprietary programs. If your program is a subroutine library, you
|
||||||
may consider it more useful to permit linking proprietary applications with
|
may consider it more useful to permit linking proprietary applications with
|
||||||
the library. If this is what you want to do, use the GNU Lesser General
|
the library. If this is what you want to do, use the GNU Lesser General
|
||||||
Public License instead of this License. But first, please read
|
Public License instead of this License. But first, please read
|
||||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||||
|
|
||||||
|
|||||||
+1164
-728
File diff suppressed because it is too large
Load Diff
+561
-1375
File diff suppressed because it is too large
Load Diff
+72
-101
@@ -14,7 +14,7 @@
|
|||||||
# Detailed instructions for using the makefile:
|
# Detailed instructions for using the makefile:
|
||||||
#
|
#
|
||||||
# 1. Modify the line containing "ARDUINO_INSTALL_DIR" to point to the directory that
|
# 1. Modify the line containing "ARDUINO_INSTALL_DIR" to point to the directory that
|
||||||
# contains the Arduino installation (for example, under macOS, this
|
# contains the Arduino installation (for example, under Mac OS X, this
|
||||||
# might be /Applications/Arduino.app/Contents/Resources/Java).
|
# might be /Applications/Arduino.app/Contents/Resources/Java).
|
||||||
#
|
#
|
||||||
# 2. Modify the line containing "UPLOAD_PORT" to refer to the filename
|
# 2. Modify the line containing "UPLOAD_PORT" to refer to the filename
|
||||||
@@ -92,13 +92,10 @@ U8GLIB ?= 1
|
|||||||
# this defines whether to include the Trinamic TMCStepper library
|
# this defines whether to include the Trinamic TMCStepper library
|
||||||
TMC ?= 1
|
TMC ?= 1
|
||||||
|
|
||||||
# this defines whether to include the AdaFruit NeoPixel library
|
|
||||||
NEOPIXEL ?= 0
|
|
||||||
|
|
||||||
############
|
############
|
||||||
# Try to automatically determine whether RELOC_WORKAROUND is needed based
|
# Try to automatically determine whether RELOC_WORKAROUND is needed based
|
||||||
# on GCC versions:
|
# on GCC versions:
|
||||||
# https://www.avrfreaks.net/comment/1789106#comment-1789106
|
# http://www.avrfreaks.net/comment/1789106#comment-1789106
|
||||||
|
|
||||||
CC_MAJ:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC__ | cut -f3 -d\ )
|
CC_MAJ:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC__ | cut -f3 -d\ )
|
||||||
CC_MIN:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC_MINOR__ | cut -f3 -d\ )
|
CC_MIN:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC_MINOR__ | cut -f3 -d\ )
|
||||||
@@ -170,110 +167,90 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1100)
|
|||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1101)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1101)
|
||||||
# Velleman K8400 Controller (derived from 3Drag Controller)
|
# Velleman K8400 Controller (derived from 3Drag Controller)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1102)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1102)
|
||||||
# Velleman K8600 Controller (derived from 3Drag Controller)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1103)
|
|
||||||
# 2PrintBeta BAM&DICE with STK drivers
|
# 2PrintBeta BAM&DICE with STK drivers
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1104)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1103)
|
||||||
# 2PrintBeta BAM&DICE Due with STK drivers
|
# 2PrintBeta BAM&DICE Due with STK drivers
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1105)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1104)
|
||||||
# MKS BASE v1.0
|
# MKS BASE v1.0
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1106)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1105)
|
||||||
# MKS v1.4 with A4982 stepper drivers
|
# MKS v1.4 with A4982 stepper drivers
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1107)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1106)
|
||||||
# MKS v1.5 with Allegro A4982 stepper drivers
|
# MKS v1.5 with Allegro A4982 stepper drivers
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1108)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1107)
|
||||||
# MKS v1.6 with Allegro A4982 stepper drivers
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1109)
|
|
||||||
# MKS BASE 1.0 with Heroic HR4982 stepper drivers
|
# MKS BASE 1.0 with Heroic HR4982 stepper drivers
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1110)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1108)
|
||||||
# MKS GEN v1.3 or 1.4
|
# MKS GEN v1.3 or 1.4
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1111)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1109)
|
||||||
# MKS GEN L
|
# MKS GEN L
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1112)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1110)
|
||||||
# zrib V2.0 control board (Chinese knock off RAMPS replica)
|
# zrib V2.0 control board (Chinese knock off RAMPS replica)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1113)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1111)
|
||||||
# BigTreeTech or BIQU KFB2.0
|
# Bigtreetech or BIQU KFB2.0
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1114)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1112)
|
||||||
# Felix 2.0+ Electronics Board (RAMPS like)
|
# Felix 2.0+ Electronics Board (RAMPS like)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1115)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1113)
|
||||||
# Invent-A-Part RigidBoard
|
# Invent-A-Part RigidBoard
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1116)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1114)
|
||||||
# Invent-A-Part RigidBoard V2
|
# Invent-A-Part RigidBoard V2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1117)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1115)
|
||||||
# Sainsmart 2-in-1 board
|
# Sainsmart 2-in-1 board
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1118)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1116)
|
||||||
# Ultimaker
|
# Ultimaker
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1119)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1117)
|
||||||
# Ultimaker (Older electronics. Pre 1.5.4. This is rare)
|
# Ultimaker (Older electronics. Pre 1.5.4. This is rare)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1120)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1118)
|
||||||
MCU ?= atmega1280
|
MCU ?= atmega1280
|
||||||
|
|
||||||
# Azteeg X3
|
# Azteeg X3
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1121)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1119)
|
||||||
# Azteeg X3 Pro
|
# Azteeg X3 Pro
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1122)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1120)
|
||||||
# Ultimainboard 2.x (Uses TEMP_SENSOR 20)
|
# Ultimainboard 2.x (Uses TEMP_SENSOR 20)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1123)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1121)
|
||||||
# Rumba
|
# Rumba
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1124)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1122)
|
||||||
# Raise3D Rumba
|
# Raise3D Rumba
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1125)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1123)
|
||||||
# Rapide Lite RL200 Rumba
|
# Rapide Lite RL200 Rumba
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1126)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1124)
|
||||||
# Formbot T-Rex 2 Plus
|
# Formbot T-Rex 2 Plus
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1127)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1125)
|
||||||
# Formbot T-Rex 3
|
# Formbot T-Rex 3
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1128)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1126)
|
||||||
# Formbot Raptor
|
# Formbot Raptor
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1129)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1127)
|
||||||
# Formbot Raptor 2
|
# Formbot Raptor 2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1130)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1128)
|
||||||
# bq ZUM Mega 3D
|
# bq ZUM Mega 3D
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1131)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1129)
|
||||||
# MakeBoard Mini v2.1.2 is a control board sold by MicroMake
|
# MakeBoard Mini v2.1.2 is a control board sold by MicroMake
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1132)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1130)
|
||||||
# TriGorilla Anycubic version 1.3 based on RAMPS EFB
|
# TriGorilla Anycubic version 1.3 based on RAMPS EFB
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1133)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1131)
|
||||||
# TriGorilla Anycubic version 1.4 based on RAMPS EFB
|
# TriGorilla Anycubic version 1.4 based on RAMPS EFB
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1134)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1132)
|
||||||
# TriGorilla Anycubic version 1.4 Rev 1.1
|
# TriGorilla Anycubic version 1.4 Rev 1.1
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1135)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1133)
|
||||||
# Creality: Ender-4, CR-8
|
# Creality: Ender-4, CR-8
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1136)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1134)
|
||||||
# Creality: CR10S, CR20, CR-X
|
# Creality: CR10S, CR20, CR-X
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1137)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1135)
|
||||||
# Dagoma F5
|
# Dagoma F5
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1138)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1136)
|
||||||
# FYSETC F6 1.3
|
# FYSETC F6
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1139)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1137)
|
||||||
# FYSETC F6 1.5
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1140)
|
|
||||||
# Duplicator i3 Plus
|
# Duplicator i3 Plus
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1141)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1138)
|
||||||
# VORON
|
# VORON
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1142)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1139)
|
||||||
# TRONXY V3 1.0
|
# TRONXY V3 1.0
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1143)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1140)
|
||||||
# Z-Bolt X Series
|
# Z-Bolt X Series
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1144)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1141)
|
||||||
# TT OSCAR
|
# TT OSCAR
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1145)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1142)
|
||||||
# Overlord/Overlord Pro
|
# Overlord/Overlord Pro
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1146)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1143)
|
||||||
# ADIMLab Gantry v1
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1147)
|
|
||||||
# ADIMLab Gantry v2
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1148)
|
|
||||||
# BIQU Tango V1
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1149)
|
|
||||||
# MKS GEN L V2
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1150)
|
|
||||||
# Copymaster 3D
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1151)
|
|
||||||
# Ortur 4
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1152)
|
|
||||||
# Tenlog D3 Hero
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1153)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# RAMBo and derivatives
|
# RAMBo and derivatives
|
||||||
@@ -300,44 +277,42 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1205)
|
|||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1300)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1300)
|
||||||
# Cartesio CN Controls V12
|
# Cartesio CN Controls V12
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1301)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1301)
|
||||||
# Cartesio CN Controls V15
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1302)
|
|
||||||
# Cheaptronic v1.0
|
# Cheaptronic v1.0
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1303)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1302)
|
||||||
# Cheaptronic v2.0
|
# Cheaptronic v2.0
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1304)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1303)
|
||||||
# Makerbot Mightyboard Revision E
|
# Makerbot Mightyboard Revision E
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1305)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1304)
|
||||||
# Megatronics
|
# Megatronics
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1306)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1305)
|
||||||
# Megatronics v2.0
|
# Megatronics v2.0
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1307)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1306)
|
||||||
# Megatronics v3.0
|
# Megatronics v3.0
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1308)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1307)
|
||||||
# Megatronics v3.1
|
# Megatronics v3.1
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1309)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1308)
|
||||||
# Megatronics v3.2
|
# Megatronics v3.2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1310)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1309)
|
||||||
# Elefu Ra Board (v3)
|
# Elefu Ra Board (v3)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1311)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1310)
|
||||||
# Leapfrog
|
# Leapfrog
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1312)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1311)
|
||||||
# Mega controller
|
# Mega controller
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1313)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1312)
|
||||||
# Geeetech GT2560 Rev B for Mecreator2
|
# Geeetech GT2560 Rev B for Mecreator2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1314)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1313)
|
||||||
# Geeetech GT2560 Rev. A
|
# Geeetech GT2560 Rev. A
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1315)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1314)
|
||||||
# Geeetech GT2560 Rev. A+ (with auto level probe)
|
# Geeetech GT2560 Rev. A+ (with auto level probe)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1316)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1315)
|
||||||
# Geeetech GT2560 Rev B for A10(M/D)
|
# Geeetech GT2560 Rev B for A10(M/D)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1317)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1316)
|
||||||
# Geeetech GT2560 Rev B for A20(M/D)
|
# Geeetech GT2560 Rev B for A20(M/D)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1318)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1317)
|
||||||
# Einstart retrofit
|
# Einstart retrofit
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1319)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1318)
|
||||||
# Wanhao 0ne+ i3 Mini
|
# Wanhao 0ne+ i3 Mini
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1320)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1319)
|
||||||
|
|
||||||
#
|
#
|
||||||
# ATmega1281, ATmega2561
|
# ATmega1281, ATmega2561
|
||||||
@@ -366,36 +341,32 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1501)
|
|||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1502)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1502)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega644p
|
MCU ?= atmega644p
|
||||||
# Melzi V2.0
|
# Melzi with ATmega1284 (MaKr3d version)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1503)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1503)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
# Melzi with ATmega1284 (MaKr3d version)
|
# Melzi Creality3D board (for CR-10 etc)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1504)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1504)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
# Melzi Creality3D board (for CR-10 etc)
|
# Melzi Malyan M150 board
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1505)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1505)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
# Melzi Malyan M150 board
|
# Tronxy X5S
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1506)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1506)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
# Tronxy X5S
|
# STB V1.1
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1507)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1507)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
# STB V1.1
|
# Azteeg X1
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1508)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1508)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
# Azteeg X1
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1509)
|
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
|
||||||
MCU ?= atmega1284p
|
|
||||||
# Anet 1.0 (Melzi clone)
|
# Anet 1.0 (Melzi clone)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1510)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1509)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
|
|
||||||
@@ -695,7 +666,7 @@ ifeq ($(HARDWARE_VARIANT), Teensy)
|
|||||||
|
|
||||||
else ifeq ($(HARDWARE_VARIANT), archim)
|
else ifeq ($(HARDWARE_VARIANT), archim)
|
||||||
CDEFS += -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSB_VID=0x27b1 -DUSB_PID=0x0001 -DUSBCON '-DUSB_MANUFACTURER="UltiMachine"' '-DUSB_PRODUCT="Archim"'
|
CDEFS += -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSB_VID=0x27b1 -DUSB_PID=0x0001 -DUSBCON '-DUSB_MANUFACTURER="UltiMachine"' '-DUSB_PRODUCT="Archim"'
|
||||||
LIB_CXXSRC += variant.cpp IPAddress.cpp Reset.cpp RingBuffer.cpp Stream.cpp UARTClass.cpp USARTClass.cpp abi.cpp new.cpp watchdog.cpp CDC.cpp PluggableUSB.cpp USBCore.cpp
|
LIB_CXXSRC += variant.cpp IPAddress.cpp Reset.cpp RingBuffer.cpp Stream.cpp UARTClass.cpp USARTClass.cpp abi.cpp new.cpp watchdog.cpp CDC.cpp PluggableUSB.cpp USBCore.cpp
|
||||||
LIB_SRC += cortex_handlers.c iar_calls_sam3.c syscalls_sam3.c dtostrf.c itoa.c
|
LIB_SRC += cortex_handlers.c iar_calls_sam3.c syscalls_sam3.c dtostrf.c itoa.c
|
||||||
|
|
||||||
ifeq ($(U8GLIB), 1)
|
ifeq ($(U8GLIB), 1)
|
||||||
@@ -716,7 +687,7 @@ CXXSTANDARD = -std=gnu++11
|
|||||||
CDEBUG = -g$(DEBUG)
|
CDEBUG = -g$(DEBUG)
|
||||||
CWARN = -Wall -Wstrict-prototypes -Wno-packed-bitfield-compat -Wno-pragmas -Wunused-parameter
|
CWARN = -Wall -Wstrict-prototypes -Wno-packed-bitfield-compat -Wno-pragmas -Wunused-parameter
|
||||||
CXXWARN = -Wall -Wno-packed-bitfield-compat -Wno-pragmas -Wunused-parameter
|
CXXWARN = -Wall -Wno-packed-bitfield-compat -Wno-pragmas -Wunused-parameter
|
||||||
CTUNING = -fsigned-char -funsigned-bitfields -fno-exceptions \
|
CTUNING = -fsigned-char -funsigned-bitfields -fpack-struct -fno-exceptions \
|
||||||
-fshort-enums -ffunction-sections -fdata-sections
|
-fshort-enums -ffunction-sections -fdata-sections
|
||||||
ifneq ($(HARDWARE_MOTHERBOARD),)
|
ifneq ($(HARDWARE_MOTHERBOARD),)
|
||||||
CTUNING += -DMOTHERBOARD=${HARDWARE_MOTHERBOARD}
|
CTUNING += -DMOTHERBOARD=${HARDWARE_MOTHERBOARD}
|
||||||
|
|||||||
+11
-15
@@ -1,8 +1,9 @@
|
|||||||
/*==============================================================================
|
/*
|
||||||
|
================================================================================
|
||||||
|
|
||||||
Marlin Firmware
|
Marlin Firmware
|
||||||
|
|
||||||
(c) 2011-2020 MarlinFirmware
|
(c) 2011-2019 MarlinFirmware
|
||||||
Portions of Marlin are (c) by their respective authors.
|
Portions of Marlin are (c) by their respective authors.
|
||||||
All code complies with GPLv2 and/or GPLv3
|
All code complies with GPLv2 and/or GPLv3
|
||||||
|
|
||||||
@@ -11,33 +12,30 @@
|
|||||||
Greetings! Thank you for choosing Marlin 2 as your 3D printer firmware.
|
Greetings! Thank you for choosing Marlin 2 as your 3D printer firmware.
|
||||||
|
|
||||||
To configure Marlin you must edit Configuration.h and Configuration_adv.h
|
To configure Marlin you must edit Configuration.h and Configuration_adv.h
|
||||||
located in the root 'Marlin' folder. Check our Configurations repository to
|
located in the root 'Marlin' folder. Check the config/examples folder to see if
|
||||||
see if there's a more suitable starting-point for your specific hardware.
|
there's a more suitable starting-point for your specific hardware.
|
||||||
|
|
||||||
Before diving in, we recommend the following essential links:
|
Before diving in, we recommend the following essential links:
|
||||||
|
|
||||||
Marlin Firmware Official Website
|
Marlin Firmware Official Website
|
||||||
|
|
||||||
- https://marlinfw.org/
|
- http://marlinfw.org/
|
||||||
The official Marlin Firmware website contains the most up-to-date
|
The official Marlin Firmware website contains the most up-to-date
|
||||||
documentation. Contributions are always welcome!
|
documentation. Contributions are always welcome!
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
|
|
||||||
- https://github.com/MarlinFirmware/Configurations
|
|
||||||
Example configurations for several printer models.
|
|
||||||
|
|
||||||
- https://www.youtube.com/watch?v=3gwWVFtdg-4
|
- https://www.youtube.com/watch?v=3gwWVFtdg-4
|
||||||
A good 20-minute overview of Marlin configuration by Tom Sanladerer.
|
A good 20-minute overview of Marlin configuration by Tom Sanladerer.
|
||||||
(Applies to Marlin 1.0.x, so Jerk and Acceleration should be halved.)
|
(Applies to Marlin 1.0.x, so Jerk and Acceleration should be halved.)
|
||||||
Also... https://www.google.com/search?tbs=vid%3A1&q=configure+marlin
|
Also... https://www.google.com/search?tbs=vid%3A1&q=configure+marlin
|
||||||
|
|
||||||
- https://marlinfw.org/docs/configuration/configuration.html
|
- http://marlinfw.org/docs/configuration/configuration.html
|
||||||
Marlin's configuration options are explained in more detail here.
|
Marlin's configuration options are explained in more detail here.
|
||||||
|
|
||||||
Getting Help
|
Getting Help
|
||||||
|
|
||||||
- https://reprap.org/forum/list.php?415
|
- http://forums.reprap.org/list.php?415
|
||||||
The Marlin Discussion Forum is a great place to get help from other Marlin
|
The Marlin Discussion Forum is a great place to get help from other Marlin
|
||||||
users who may have experienced similar issues to your own.
|
users who may have experienced similar issues to your own.
|
||||||
|
|
||||||
@@ -47,11 +45,9 @@ Getting Help
|
|||||||
|
|
||||||
Contributing
|
Contributing
|
||||||
|
|
||||||
- https://marlinfw.org/docs/development/contributing.html
|
- http://marlinfw.org/docs/development/contributing.html
|
||||||
If you'd like to contribute to Marlin, read this first!
|
If you'd like to contribute to Marlin, read this first!
|
||||||
|
|
||||||
- https://marlinfw.org/docs/development/coding_standards.html
|
- http://marlinfw.org/docs/development/coding_standards.html
|
||||||
Before submitting code get to know the Coding Standards.
|
Before submitting code get to know the Coding Standards.
|
||||||
|
*/
|
||||||
|
|
||||||
------------------------------------------------------------------------------*/
|
|
||||||
|
|||||||
@@ -1,78 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* 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
|
|
||||||
* 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
|
|
||||||
|
|
||||||
////////////////////////////
|
|
||||||
// VENDOR VERSION EXAMPLE //
|
|
||||||
////////////////////////////
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Marlin release version identifier
|
|
||||||
*/
|
|
||||||
#define SHORT_BUILD_VERSION "LulzbotUnified - 2.0.6"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verbose version identifier which should contain a reference to the location
|
|
||||||
* from where the binary was downloaded or the source code was compiled.
|
|
||||||
*/
|
|
||||||
#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION " Rev2"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The STRING_DISTRIBUTION_DATE represents when the binary file was built,
|
|
||||||
* here we define this default string as the date where the latest release
|
|
||||||
* version was tagged.
|
|
||||||
*/
|
|
||||||
#define STRING_DISTRIBUTION_DATE "2020-08-09"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
|
||||||
*/
|
|
||||||
//#define MACHINE_NAME "3D Printer"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The SOURCE_CODE_URL is the location where users will find the Marlin Source
|
|
||||||
* Code which is installed on the device. In most cases —unless the manufacturer
|
|
||||||
* has a distinct Github fork— the Source Code URL should just be the main
|
|
||||||
* Marlin repository.
|
|
||||||
*/
|
|
||||||
//#define SOURCE_CODE_URL "https://github.com/MarlinFirmware/Marlin"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default generic printer UUID.
|
|
||||||
*/
|
|
||||||
//#define DEFAULT_MACHINE_UUID "cede2a2f-41a2-4748-9b12-c55c62f367ff"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The WEBSITE_URL is the location where users can get more information such as
|
|
||||||
* documentation about a specific Marlin release.
|
|
||||||
*/
|
|
||||||
//#define WEBSITE_URL "https://marlinfw.org"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the vendor info the serial USB interface, if changable
|
|
||||||
* Currently only supported by DUE platform
|
|
||||||
*/
|
|
||||||
#if ENABLED(TazPro)
|
|
||||||
#define USB_DEVICE_VENDOR_ID 0x27b1 // <-- changed
|
|
||||||
#define USB_DEVICE_PRODUCT_ID 0x0001 // <-- changed
|
|
||||||
#endif
|
|
||||||
//#define USB_DEVICE_MANUFACTURE_NAME WEBSITE_URL
|
|
||||||
+58
-67
@@ -32,72 +32,63 @@
|
|||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
#define CUSTOM_BOOTSCREEN_TIMEOUT 2500
|
#define CUSTOM_BOOTSCREEN_TIMEOUT 2500
|
||||||
#define CUSTOM_BOOTSCREEN_BMPWIDTH 60
|
#define CUSTOM_BOOTSCREEN_BMPWIDTH 128
|
||||||
#define CUSTOM_BOOTSCREEN_BMPHEIGHT 64
|
#define CUSTOM_BOOTSCREEN_INVERTED
|
||||||
|
|
||||||
const unsigned char custom_start_bmp[574] PROGMEM = {
|
const unsigned char custom_start_bmp[] PROGMEM = {
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111101,B00000000,B00000000,B00000111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111110,B00000111,B11000000,B00000101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0,
|
B11111100,B00001010,B00100000,B00000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0,
|
B11111110,B00010100,B00010000,B00000101,B00000000,B00000000,B00000111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0x0,
|
B11111100,B00101000,B00001000,B00000110,B00000111,B11000000,B00000101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x23, 0x0, 0x0, 0x0, 0x0,
|
B11111110,B01010100,B00000100,B00000100,B00001010,B00100000,B00000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0,
|
B11111100,B01100000,B00000100,B00000110,B00010100,B00010000,B00000101,B00000000,B00000000,B00000111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x4c, 0x80, 0x0, 0x0, 0x0,
|
B11111110,B01010000,B00000100,B00000100,B00101000,B00001000,B00000110,B00000111,B11000000,B00000101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,
|
||||||
0x0, 0x0, 0x0, 0x5e, 0x80, 0x0, 0x0, 0x0,
|
B11111100,B01100000,B00000100,B00000110,B01010100,B00000100,B00000100,B00001010,B00100000,B00000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,
|
||||||
0x0, 0x0, 0x0, 0x92, 0x40, 0x0, 0x0, 0x0,
|
B11111110,B01010100,B00000100,B00011100,B01100000,B00000100,B00000110,B00010100,B00010000,B00000101,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,
|
||||||
0x0, 0x0, 0x0, 0xa1, 0x40, 0x0, 0x0, 0x0,
|
B11111100,B00101000,B00001000,B00101110,B01010000,B00000100,B00000100,B00101000,B00001000,B00000110,B00000111,B11000000,B00000000,B00000001,B11110000,B00111111,
|
||||||
0x0, 0x0, 0x1, 0x21, 0x20, 0x0, 0x0, 0x0,
|
B11111110,B00010100,B00010000,B01010100,B01100000,B00000100,B00000110,B01010100,B00000100,B00000100,B00001010,B00100000,B00000000,B00000010,B00001000,B00011111,
|
||||||
0x0, 0x0, 0x2, 0x7f, 0x90, 0x0, 0x0, 0x0,
|
B11111100,B00001010,B00100000,B01100110,B01010100,B00000100,B00011100,B01100000,B00000100,B00000110,B00010100,B00010000,B00000000,B00000101,B00000100,B00111111,
|
||||||
0x0, 0x0, 0x2, 0x0, 0x10, 0x0, 0x0, 0x0,
|
B11111110,B00000111,B11000000,B01010100,B00101000,B00001000,B00101110,B01010000,B00000100,B00000100,B00101000,B00001000,B00000000,B00001010,B00000010,B00011111,
|
||||||
0x0, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0,
|
B11111100,B00000000,B00000000,B00101110,B00010100,B00010000,B01010100,B01100000,B00000100,B00000110,B01010100,B00000100,B00000000,B00010101,B00000001,B00111111,
|
||||||
0x0, 0x0, 0x4, 0x0, 0x8, 0x0, 0x0, 0x0,
|
B11111110,B00000000,B00000000,B00011100,B00001010,B00100000,B01100110,B01010100,B00000100,B00011100,B01100000,B00000100,B00000000,B00011000,B00000001,B00011111,
|
||||||
0x0, 0x0, 0x8, 0x0, 0x4, 0x0, 0x0, 0x0,
|
B11111100,B00000000,B00000000,B00000110,B00000111,B11000000,B01010100,B00101000,B00001000,B00101110,B01010000,B00000100,B00000000,B00010100,B00000001,B00111111,
|
||||||
0x0, 0x0, 0x8, 0x0, 0x6, 0x0, 0x0, 0x0,
|
B11111110,B00000000,B00000000,B00000100,B00000000,B00000000,B00101110,B00010100,B00010000,B01010100,B01100000,B00000100,B00000000,B00011000,B00000001,B00011111,
|
||||||
0x0, 0x0, 0x10, 0x0, 0x2, 0x0, 0x0, 0x0,
|
B11111100,B11111111,B11111111,B11111110,B00000000,B00000000,B00011100,B00001010,B00100000,B01100110,B01010100,B00000100,B00011100,B00010101,B00000001,B00111111,
|
||||||
0x0, 0x0, 0x30, 0x1e, 0x1, 0x0, 0x0, 0x0,
|
B11111110,B11010101,B01010101,B01010100,B00000000,B00000000,B00000110,B00000111,B11000000,B01010100,B00101000,B00001000,B00101010,B00001010,B00000010,B00011111,
|
||||||
0x0, 0x0, 0x20, 0x7f, 0x81, 0x0, 0x0, 0x0,
|
B11111100,B10000100,B00010000,B01000110,B00000000,B00000000,B00000100,B00000000,B00000000,B00101110,B00010100,B00010000,B01010001,B00000101,B00000100,B00111111,
|
||||||
0x0, 0x0, 0x41, 0xff, 0xe0, 0x80, 0x0, 0x0,
|
B11111110,B11000100,B00010000,B01000100,B11111111,B11111111,B11111110,B00000000,B00000000,B00011100,B00001010,B00100000,B01100001,B00000010,B10001000,B00011111,
|
||||||
0x0, 0x0, 0x43, 0xfc, 0xf0, 0x80, 0x0, 0x0,
|
B11111100,B10000100,B00010000,B01000110,B11010101,B01010101,B01010100,B00000000,B00000000,B00000110,B00000111,B11000000,B01010001,B00000001,B11110000,B00111111,
|
||||||
0x0, 0x0, 0x87, 0x3b, 0x78, 0x40, 0x0, 0x0,
|
B11111110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B00000000,B00000000,B00000100,B00000000,B00000000,B00101010,B00000000,B00000000,B00011111,
|
||||||
0x0, 0x1, 0x8e, 0xdb, 0xfc, 0x60, 0x0, 0x0,
|
B11111100,B11000100,B00010000,B01000110,B11000100,B00010000,B01000100,B11111111,B11111111,B11111110,B00000000,B00000000,B00011100,B00000000,B00000000,B00111111,
|
||||||
0x0, 0x1, 0xf, 0xeb, 0xcc, 0x20, 0x0, 0x0,
|
B11111110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B11010101,B01010101,B01010100,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,
|
||||||
0x0, 0x2, 0x1f, 0xed, 0xb6, 0x10, 0x0, 0x0,
|
B11111100,B11010101,B01010101,B01010110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,
|
||||||
0x0, 0x2, 0x1f, 0xde, 0xb6, 0x10, 0x0, 0x0,
|
B11111100,B11111111,B11111111,B11111100,B11000100,B00010000,B01000110,B11000100,B00010000,B01000100,B11111111,B11111111,B11111111,B11111111,B11111111,B10011111,
|
||||||
0x0, 0x4, 0x39, 0xcd, 0x7f, 0x8, 0x0, 0x0,
|
B11111110,B00000000,B00000000,B00000110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B11010101,B01010101,B01010101,B01010101,B01010101,B10111111,
|
||||||
0x0, 0x4, 0x36, 0xe0, 0xff, 0x8, 0x0, 0x0,
|
B11111101,B01010101,B01010101,B01010100,B11010101,B01010101,B01010110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111,
|
||||||
0x0, 0x8, 0x7e, 0xc0, 0xbb, 0x84, 0x0, 0x0,
|
B11111111,B11111111,B11111111,B11111100,B11111111,B11111111,B11111100,B11000100,B00010000,B01000110,B11000100,B00010000,B01000001,B00000100,B00010001,B10111111,
|
||||||
0x0, 0x18, 0x7f, 0x0, 0x5d, 0x86, 0x0, 0x0,
|
B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111,
|
||||||
0x0, 0x10, 0x7f, 0xc0, 0xed, 0x82, 0x0, 0x0,
|
B11111111,B11111111,B11111111,B11111101,B01010101,B01010101,B01010100,B11010101,B01010101,B01010110,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111,
|
||||||
0x0, 0x20, 0x3c, 0xc0, 0x73, 0x1, 0x0, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B11111111,B11111111,B11111100,B11000100,B00010000,B01000001,B00000100,B00010001,B10111111,
|
||||||
0x0, 0x20, 0x3b, 0x33, 0x7f, 0x1, 0x0, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000110,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111,
|
||||||
0x0, 0x70, 0x1b, 0xe7, 0x7e, 0x3, 0x80, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111101,B01010101,B01010101,B01010100,B11010101,B01010101,B01010101,B01010101,B01010101,B10111111,
|
||||||
0x0, 0xc8, 0x1d, 0xee, 0xde, 0x4, 0xc0, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B11111111,B11111111,B11111111,B11111111,B11111111,B10011111,
|
||||||
0x0, 0x88, 0xf, 0xde, 0xdc, 0x4, 0x40, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,
|
||||||
0x1, 0x24, 0xf, 0xdf, 0x3c, 0x9, 0x20, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,
|
||||||
0x1, 0x26, 0x7, 0xdb, 0xf8, 0x19, 0x20, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x2, 0x72, 0x3, 0xe7, 0xf0, 0x13, 0x90, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x2, 0x51, 0x1, 0xff, 0xe0, 0x22, 0x90, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x4, 0x89, 0x0, 0x7f, 0x80, 0x24, 0x48, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x9, 0x4, 0x80, 0x1e, 0x0, 0x48, 0x24, 0x0,
|
B11100000,B00101110,B11111011,B01111101,B11111011,B11111011,B11001111,B11000001,B11011111,B10111011,B00111110,B11000000,B11100001,B11111110,B00111100,B00011111,
|
||||||
0xb, 0xfe, 0x40, 0x0, 0x0, 0xdf, 0xf4, 0x0,
|
B11111101,B11101110,B01111011,B00111001,B11111001,B11110011,B11001111,B10011110,B11011111,B10111011,B00111110,B11011111,B11011110,B11111100,B11011101,B11100111,
|
||||||
0x10, 0x0, 0x40, 0x0, 0x0, 0x80, 0x2, 0x0,
|
B11111101,B11101110,B00111011,B10111011,B11111001,B11101011,B11010111,B10111111,B01011111,B10111011,B01011110,B11011111,B11011110,B11111101,B11101101,B11110111,
|
||||||
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0,
|
B11111101,B11101110,B10111011,B11010011,B11111010,B11101011,B10110111,B00111111,B11011111,B10111011,B01001110,B11011111,B11011111,B11111111,B11001101,B11110011,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111101,B11101110,B11011011,B11000111,B11111010,B11101011,B10111011,B01111111,B11000000,B00111011,B01101110,B11000000,B11100011,B11111111,B00011101,B11110011,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111101,B11101110,B11001011,B11101111,B11111010,B11011011,B10111011,B01111111,B11011111,B10111011,B01100110,B11011111,B11111000,B11111111,B11001101,B11110011,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111101,B11101110,B11101011,B11101111,B11111011,B01011011,B00000011,B00111111,B01011111,B10111011,B01110110,B11011111,B11111110,B01111111,B11101101,B11110011,
|
||||||
0x10, 0x22, 0x10, 0x3c, 0x3c, 0xe, 0x1f, 0x0,
|
B11111101,B11101110,B11110011,B11101111,B11111011,B01011011,B01111001,B10111110,B11011111,B10111011,B01111010,B11011111,B11011110,B01111101,B11101101,B11110111,
|
||||||
0x10, 0x22, 0x10, 0x4, 0x22, 0x11, 0x4, 0x0,
|
B11111101,B11101110,B11110011,B11101111,B11111011,B10111010,B11111101,B10011110,B11011111,B10111011,B01111100,B11011111,B11011110,B11111101,B11001101,B11100111,
|
||||||
0x10, 0x22, 0x10, 0x8, 0x22, 0x11, 0x4, 0x0,
|
B11111101,B11101110,B11111011,B11101111,B11111011,B10111010,B11111101,B11000001,B11011111,B10111011,B01111110,B11000000,B11100000,B11111110,B00011100,B00011111
|
||||||
0x10, 0x22, 0x10, 0x8, 0x3c, 0x11, 0x4, 0x0,
|
|
||||||
0x10, 0x22, 0x10, 0x10, 0x22, 0x11, 0x4, 0x0,
|
|
||||||
0x10, 0x22, 0x10, 0x20, 0x22, 0x11, 0x4, 0x0,
|
|
||||||
0x1e, 0x1c, 0x1e, 0x3c, 0x3c, 0xe, 0x4, 0x0,
|
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (C) 2016 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom Status Screen bitmap
|
||||||
|
*
|
||||||
|
* Place this file in the root with your configuration files
|
||||||
|
* and enable CUSTOM_STATUS_SCREEN_IMAGE in Configuration.h.
|
||||||
|
*
|
||||||
|
* Use the Marlin Bitmap Converter to make your own:
|
||||||
|
* http://marlinfw.org/tools/u8glib/converter.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// Status Screen Logo bitmap
|
||||||
|
//
|
||||||
|
#define STATUS_LOGO_Y 3
|
||||||
|
#define STATUS_LOGO_WIDTH 24
|
||||||
|
|
||||||
|
const unsigned char status_logo_bmp[] PROGMEM = {
|
||||||
|
B11111111,B11111111,B11111111,
|
||||||
|
B10000000,B00000000,B00000001,
|
||||||
|
B10001110,B00000000,B11100001,
|
||||||
|
B10011111,B00000001,B11110001,
|
||||||
|
B10010011,B10000001,B00111001,
|
||||||
|
B10011111,B10000001,B11111001,
|
||||||
|
B10011111,B10000001,B11111001,
|
||||||
|
B10011111,B10111001,B11111001,
|
||||||
|
B10001111,B00101000,B11110001,
|
||||||
|
B10000000,B00111000,B00000001,
|
||||||
|
B10000000,B00000000,B00000001,
|
||||||
|
B10011111,B11111111,B11111001,
|
||||||
|
B10010001,B01110100,B10011001,
|
||||||
|
B10011011,B00000110,B10101001,
|
||||||
|
B10011011,B01010100,B10101001,
|
||||||
|
B10011011,B01010110,B10101001,
|
||||||
|
B10011011,B01010100,B10011001,
|
||||||
|
B10011111,B11111111,B11111001,
|
||||||
|
B11111111,B11111111,B11111111
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Use default bitmaps
|
||||||
|
//
|
||||||
|
#define STATUS_HOTEND_ANIM
|
||||||
|
#define STATUS_BED_ANIM
|
||||||
|
#if HOTENDS < 2
|
||||||
|
#define STATUS_LOGO_X 8
|
||||||
|
#define STATUS_HEATERS_X 40
|
||||||
|
#define STATUS_BED_X 72
|
||||||
|
#else
|
||||||
|
#define STATUS_LOGO_X 0
|
||||||
|
#define STATUS_HEATERS_X 32
|
||||||
|
#define STATUS_BED_X 80
|
||||||
|
#endif
|
||||||
@@ -33,4 +33,4 @@ PlatformIO will find your libraries automatically, configure preprocessor's
|
|||||||
include paths and build them.
|
include paths and build them.
|
||||||
|
|
||||||
More information about PlatformIO Library Dependency Finder
|
More information about PlatformIO Library Dependency Finder
|
||||||
- https://docs.platformio.org/page/librarymanager/ldf.html
|
- http://docs.platformio.org/page/librarymanager/ldf.html
|
||||||
|
|||||||
@@ -1,213 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
||||||
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
|
||||||
*
|
|
||||||
* 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 "../shared/Marduino.h"
|
|
||||||
#include "../shared/HAL_SPI.h"
|
|
||||||
#include "fastio.h"
|
|
||||||
#include "watchdog.h"
|
|
||||||
#include "math.h"
|
|
||||||
|
|
||||||
#ifdef USBCON
|
|
||||||
#include <HardwareSerial.h>
|
|
||||||
#else
|
|
||||||
#define HardwareSerial_h // Hack to prevent HardwareSerial.h header inclusion
|
|
||||||
#include "MarlinSerial.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <util/delay.h>
|
|
||||||
#include <avr/eeprom.h>
|
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
#include <avr/interrupt.h>
|
|
||||||
#include <avr/io.h>
|
|
||||||
|
|
||||||
#ifndef pgm_read_ptr
|
|
||||||
// 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
|
|
||||||
#define pgm_read_ptr_far(address_long) (void*)__ELPM_word((uint32_t)(address_long))
|
|
||||||
#define pgm_read_ptr_near(address_short) (void*)__LPM_word((uint16_t)(address_short))
|
|
||||||
#define pgm_read_ptr(address_short) pgm_read_ptr_near(address_short)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ------------------------
|
|
||||||
// Defines
|
|
||||||
// ------------------------
|
|
||||||
|
|
||||||
// AVR PROGMEM extension for sprintf_P
|
|
||||||
#define S_FMT "%S"
|
|
||||||
|
|
||||||
// AVR PROGMEM extension for string define
|
|
||||||
#define PGMSTR(NAM,STR) const char NAM[] PROGMEM = STR
|
|
||||||
|
|
||||||
#ifndef CRITICAL_SECTION_START
|
|
||||||
#define CRITICAL_SECTION_START() unsigned char _sreg = SREG; cli()
|
|
||||||
#define CRITICAL_SECTION_END() SREG = _sreg
|
|
||||||
#endif
|
|
||||||
#define ISRS_ENABLED() TEST(SREG, SREG_I)
|
|
||||||
#define ENABLE_ISRS() sei()
|
|
||||||
#define DISABLE_ISRS() cli()
|
|
||||||
|
|
||||||
// ------------------------
|
|
||||||
// Types
|
|
||||||
// ------------------------
|
|
||||||
|
|
||||||
typedef int8_t pin_t;
|
|
||||||
|
|
||||||
#define SHARED_SERVOS HAS_SERVOS
|
|
||||||
#define HAL_SERVO_LIB Servo
|
|
||||||
|
|
||||||
// ------------------------
|
|
||||||
// Public Variables
|
|
||||||
// ------------------------
|
|
||||||
|
|
||||||
//extern uint8_t MCUSR;
|
|
||||||
|
|
||||||
// Serial ports
|
|
||||||
#ifdef USBCON
|
|
||||||
#if ENABLED(BLUETOOTH)
|
|
||||||
#define MYSERIAL0 bluetoothSerial
|
|
||||||
#else
|
|
||||||
#define MYSERIAL0 Serial
|
|
||||||
#endif
|
|
||||||
#define NUM_SERIAL 1
|
|
||||||
#else
|
|
||||||
#if !WITHIN(SERIAL_PORT, -1, 3)
|
|
||||||
#error "SERIAL_PORT must be from -1 to 3. Please update your configuration."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MYSERIAL0 customizedSerial1
|
|
||||||
|
|
||||||
#ifdef SERIAL_PORT_2
|
|
||||||
#if !WITHIN(SERIAL_PORT_2, -1, 3)
|
|
||||||
#error "SERIAL_PORT_2 must be from -1 to 3. Please update your configuration."
|
|
||||||
#elif SERIAL_PORT_2 == SERIAL_PORT
|
|
||||||
#error "SERIAL_PORT_2 must be different than SERIAL_PORT. Please update your configuration."
|
|
||||||
#endif
|
|
||||||
#define MYSERIAL1 customizedSerial2
|
|
||||||
#define NUM_SERIAL 2
|
|
||||||
#else
|
|
||||||
#define NUM_SERIAL 1
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DGUS_SERIAL_PORT
|
|
||||||
#if !WITHIN(DGUS_SERIAL_PORT, -1, 3)
|
|
||||||
#error "DGUS_SERIAL_PORT must be from -1 to 3. Please update your configuration."
|
|
||||||
#elif DGUS_SERIAL_PORT == SERIAL_PORT
|
|
||||||
#error "DGUS_SERIAL_PORT must be different than SERIAL_PORT. Please update your configuration."
|
|
||||||
#elif defined(SERIAL_PORT_2) && DGUS_SERIAL_PORT == SERIAL_PORT_2
|
|
||||||
#error "DGUS_SERIAL_PORT must be different than SERIAL_PORT_2. Please update your configuration."
|
|
||||||
#endif
|
|
||||||
#define DGUS_SERIAL internalDgusSerial
|
|
||||||
|
|
||||||
#define DGUS_SERIAL_GET_TX_BUFFER_FREE DGUS_SERIAL.get_tx_buffer_free
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ANYCUBIC_LCD_SERIAL_PORT
|
|
||||||
#if !WITHIN(ANYCUBIC_LCD_SERIAL_PORT, -1, 3)
|
|
||||||
#error "ANYCUBIC_LCD_SERIAL_PORT must be from -1 to 3. Please update your configuration."
|
|
||||||
#elif ANYCUBIC_LCD_SERIAL_PORT == SERIAL_PORT
|
|
||||||
#error "ANYCUBIC_LCD_SERIAL_PORT must be different than SERIAL_PORT. Please update your configuration."
|
|
||||||
#elif defined(SERIAL_PORT_2) && ANYCUBIC_LCD_SERIAL_PORT == SERIAL_PORT_2
|
|
||||||
#error "ANYCUBIC_LCD_SERIAL_PORT must be different than SERIAL_PORT_2. Please update your configuration."
|
|
||||||
#endif
|
|
||||||
#define ANYCUBIC_LCD_SERIAL anycubicLcdSerial
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ------------------------
|
|
||||||
// Public functions
|
|
||||||
// ------------------------
|
|
||||||
|
|
||||||
void HAL_init();
|
|
||||||
|
|
||||||
//void cli();
|
|
||||||
|
|
||||||
//void _delay_ms(const int delay);
|
|
||||||
|
|
||||||
inline void HAL_clear_reset_source() { MCUSR = 0; }
|
|
||||||
inline uint8_t HAL_get_reset_source() { return MCUSR; }
|
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-function"
|
|
||||||
extern "C" {
|
|
||||||
int freeMemory();
|
|
||||||
}
|
|
||||||
#pragma GCC diagnostic pop
|
|
||||||
|
|
||||||
// ADC
|
|
||||||
#ifdef DIDR2
|
|
||||||
#define HAL_ANALOG_SELECT(ind) do{ if (ind < 8) SBI(DIDR0, ind); else SBI(DIDR2, ind & 0x07); }while(0)
|
|
||||||
#else
|
|
||||||
#define HAL_ANALOG_SELECT(ind) SBI(DIDR0, ind);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
inline void HAL_adc_init() {
|
|
||||||
ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADIF) | 0x07;
|
|
||||||
DIDR0 = 0;
|
|
||||||
#ifdef DIDR2
|
|
||||||
DIDR2 = 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SET_ADMUX_ADCSRA(ch) ADMUX = _BV(REFS0) | (ch & 0x07); SBI(ADCSRA, ADSC)
|
|
||||||
#ifdef MUX5
|
|
||||||
#define HAL_START_ADC(ch) if (ch > 7) ADCSRB = _BV(MUX5); else ADCSRB = 0; SET_ADMUX_ADCSRA(ch)
|
|
||||||
#else
|
|
||||||
#define HAL_START_ADC(ch) ADCSRB = 0; SET_ADMUX_ADCSRA(ch)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define HAL_ADC_VREF 5.0
|
|
||||||
#define HAL_ADC_RESOLUTION 10
|
|
||||||
#define HAL_READ_ADC() ADC
|
|
||||||
#define HAL_ADC_READY() !TEST(ADCSRA, ADSC)
|
|
||||||
|
|
||||||
#define GET_PIN_MAP_PIN(index) index
|
|
||||||
#define GET_PIN_MAP_INDEX(pin) pin
|
|
||||||
#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval)
|
|
||||||
|
|
||||||
#define HAL_SENSITIVE_PINS 0, 1
|
|
||||||
|
|
||||||
#ifdef __AVR_AT90USB1286__
|
|
||||||
#define JTAG_DISABLE() do{ MCUCR = 0x80; MCUCR = 0x80; }while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// AVR compatibility
|
|
||||||
#define strtof strtod
|
|
||||||
|
|
||||||
#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment
|
|
||||||
|
|
||||||
/**
|
|
||||||
* set_pwm_frequency
|
|
||||||
* Sets the frequency of the timer corresponding to the provided pin
|
|
||||||
* as close as possible to the provided desired frequency. Internally
|
|
||||||
* calculates the required waveform generation mode, prescaler and
|
|
||||||
* resolution values required and sets the timer registers accordingly.
|
|
||||||
* NOTE that the frequency is applied to all pins on the timer (Ex OC3A, OC3B and OC3B)
|
|
||||||
* NOTE that there are limitations, particularly if using TIMER2. (see Configuration_adv.h -> FAST FAN PWM Settings)
|
|
||||||
*/
|
|
||||||
void set_pwm_frequency(const pin_t pin, int f_desired);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* set_pwm_duty
|
|
||||||
* Sets the PWM duty cycle of the provided pin to the provided value
|
|
||||||
* 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]
|
|
||||||
*/
|
|
||||||
void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false);
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* 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
|
|
||||||
* 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
|
|
||||||
|
|
||||||
#if HAS_SPI_TFT || HAS_FSMC_TFT
|
|
||||||
#error "Sorry! TFT displays are not available for HAL/AVR."
|
|
||||||
#endif
|
|
||||||
@@ -1,206 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* 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
|
|
||||||
* 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/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The PWM module is only used to generate interrupts at specified times. It
|
|
||||||
* is NOT used to directly toggle pins. The ISR writes to the pin assigned to
|
|
||||||
* that interrupt.
|
|
||||||
*
|
|
||||||
* All PWMs use the same repetition rate. The G2 needs about 10KHz min in order to
|
|
||||||
* not have obvious ripple on the Vref signals.
|
|
||||||
*
|
|
||||||
* The data structures are setup to minimize the computation done by the ISR which
|
|
||||||
* minimizes ISR execution time. Execution times are 0.8 to 1.1 microseconds.
|
|
||||||
*
|
|
||||||
* FIve PWM interrupt sources are used. Channel 0 sets the base period. All Vref
|
|
||||||
* signals are set active when this counter overflows and resets to zero. The compare
|
|
||||||
* values in channels 1-4 are set to give the desired duty cycle for that Vref pin.
|
|
||||||
* When counter 0 matches the compare value then that channel generates an interrupt.
|
|
||||||
* The ISR checks the source of the interrupt and sets the corresponding pin inactive.
|
|
||||||
*
|
|
||||||
* Some jitter in the Vref signal is OK so the interrupt priority is left at its default value.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "../../../inc/MarlinConfig.h"
|
|
||||||
|
|
||||||
#if MB(PRINTRBOARD_G2)
|
|
||||||
|
|
||||||
#include "G2_PWM.h"
|
|
||||||
|
|
||||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
|
|
||||||
#define G2_PWM_X 1
|
|
||||||
#else
|
|
||||||
#define G2_PWM_X 0
|
|
||||||
#endif
|
|
||||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Y)
|
|
||||||
#define G2_PWM_Y 1
|
|
||||||
#else
|
|
||||||
#define G2_PWM_Y 0
|
|
||||||
#endif
|
|
||||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
|
|
||||||
#define G2_PWM_Z 1
|
|
||||||
#else
|
|
||||||
#define G2_PWM_Z 0
|
|
||||||
#endif
|
|
||||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
|
|
||||||
#define G2_PWM_E 1
|
|
||||||
#else
|
|
||||||
#define G2_PWM_E 0
|
|
||||||
#endif
|
|
||||||
#define G2_MASK_X(V) (G2_PWM_X * (V))
|
|
||||||
#define G2_MASK_Y(V) (G2_PWM_Y * (V))
|
|
||||||
#define G2_MASK_Z(V) (G2_PWM_Z * (V))
|
|
||||||
#define G2_MASK_E(V) (G2_PWM_E * (V))
|
|
||||||
|
|
||||||
volatile uint32_t *SODR_A = &PIOA->PIO_SODR,
|
|
||||||
*SODR_B = &PIOB->PIO_SODR,
|
|
||||||
*CODR_A = &PIOA->PIO_CODR,
|
|
||||||
*CODR_B = &PIOB->PIO_CODR;
|
|
||||||
|
|
||||||
PWM_map ISR_table[NUM_PWMS] = PWM_MAP_INIT;
|
|
||||||
|
|
||||||
void Stepper::digipot_init() {
|
|
||||||
|
|
||||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
|
|
||||||
OUT_WRITE(MOTOR_CURRENT_PWM_X_PIN, 0); // init pins
|
|
||||||
#endif
|
|
||||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Y)
|
|
||||||
OUT_WRITE(MOTOR_CURRENT_PWM_Y_PIN, 0);
|
|
||||||
#endif
|
|
||||||
#if G2_PWM_Z
|
|
||||||
OUT_WRITE(MOTOR_CURRENT_PWM_Z_PIN, 0);
|
|
||||||
#endif
|
|
||||||
#if G2_PWM_E
|
|
||||||
OUT_WRITE(MOTOR_CURRENT_PWM_E_PIN, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define WPKEY (0x50574D << 8) // “PWM” in ASCII
|
|
||||||
#define WPCMD_DIS_SW 0 // command to disable Write Protect SW
|
|
||||||
#define WPRG_ALL (PWM_WPCR_WPRG0 | PWM_WPCR_WPRG1 | PWM_WPCR_WPRG2 | PWM_WPCR_WPRG3 | PWM_WPCR_WPRG4 | PWM_WPCR_WPRG5) // all Write Protect Groups
|
|
||||||
|
|
||||||
#define PWM_CLOCK_F F_CPU / 1000000UL // set clock to 1MHz
|
|
||||||
|
|
||||||
PMC->PMC_PCER1 = PMC_PCER1_PID36; // enable PWM controller clock (disabled on power up)
|
|
||||||
|
|
||||||
PWM->PWM_WPCR = WPKEY | WPRG_ALL | WPCMD_DIS_SW; // enable setting of all PWM registers
|
|
||||||
PWM->PWM_CLK = PWM_CLOCK_F; // enable CLK_A and set it to 1MHz, leave CLK_B disabled
|
|
||||||
PWM->PWM_CH_NUM[0].PWM_CMR = 0b1011; // set channel 0 to Clock A input & to left aligned
|
|
||||||
if (G2_PWM_X) PWM->PWM_CH_NUM[1].PWM_CMR = 0b1011; // set channel 1 to Clock A input & to left aligned
|
|
||||||
if (G2_PWM_Y) PWM->PWM_CH_NUM[2].PWM_CMR = 0b1011; // set channel 2 to Clock A input & to left aligned
|
|
||||||
if (G2_PWM_Z) PWM->PWM_CH_NUM[3].PWM_CMR = 0b1011; // set channel 3 to Clock A input & to left aligned
|
|
||||||
if (G2_PWM_E) PWM->PWM_CH_NUM[4].PWM_CMR = 0b1011; // set channel 4 to Clock A input & to left aligned
|
|
||||||
|
|
||||||
PWM->PWM_CH_NUM[0].PWM_CPRD = PWM_PERIOD_US; // set channel 0 Period
|
|
||||||
|
|
||||||
PWM->PWM_IER2 = PWM_IER1_CHID0; // generate interrupt when counter0 overflows
|
|
||||||
PWM->PWM_IER2 = PWM_IER2_CMPM0
|
|
||||||
| G2_MASK_X(PWM_IER2_CMPM1)
|
|
||||||
| G2_MASK_Y(PWM_IER2_CMPM2)
|
|
||||||
| G2_MASK_Z(PWM_IER2_CMPM3)
|
|
||||||
| G2_MASK_E(PWM_IER2_CMPM4)
|
|
||||||
; // generate interrupt on compare event
|
|
||||||
|
|
||||||
if (G2_PWM_X) PWM->PWM_CMP[1].PWM_CMPV = 0x010000000LL | G2_VREF_COUNT(G2_VREF(motor_current_setting[0])); // interrupt when counter0 == CMPV - used to set Motor 1 PWM inactive
|
|
||||||
if (G2_PWM_Y) PWM->PWM_CMP[2].PWM_CMPV = 0x010000000LL | G2_VREF_COUNT(G2_VREF(motor_current_setting[0])); // interrupt when counter0 == CMPV - used to set Motor 2 PWM inactive
|
|
||||||
if (G2_PWM_Z) PWM->PWM_CMP[3].PWM_CMPV = 0x010000000LL | G2_VREF_COUNT(G2_VREF(motor_current_setting[1])); // interrupt when counter0 == CMPV - used to set Motor 3 PWM inactive
|
|
||||||
if (G2_PWM_E) PWM->PWM_CMP[4].PWM_CMPV = 0x010000000LL | G2_VREF_COUNT(G2_VREF(motor_current_setting[2])); // interrupt when counter0 == CMPV - used to set Motor 4 PWM inactive
|
|
||||||
|
|
||||||
if (G2_PWM_X) PWM->PWM_CMP[1].PWM_CMPM = 0x0001; // enable compare event
|
|
||||||
if (G2_PWM_Y) PWM->PWM_CMP[2].PWM_CMPM = 0x0001; // enable compare event
|
|
||||||
if (G2_PWM_Z) PWM->PWM_CMP[3].PWM_CMPM = 0x0001; // enable compare event
|
|
||||||
if (G2_PWM_E) PWM->PWM_CMP[4].PWM_CMPM = 0x0001; // enable compare event
|
|
||||||
|
|
||||||
PWM->PWM_SCM = PWM_SCM_UPDM_MODE0 | PWM_SCM_SYNC0
|
|
||||||
| G2_MASK_X(PWM_SCM_SYNC1)
|
|
||||||
| G2_MASK_Y(PWM_SCM_SYNC2)
|
|
||||||
| G2_MASK_Z(PWM_SCM_SYNC3)
|
|
||||||
| G2_MASK_E(PWM_SCM_SYNC4)
|
|
||||||
; // sync 1-4 with 0, use mode 0 for updates
|
|
||||||
|
|
||||||
PWM->PWM_ENA = PWM_ENA_CHID0
|
|
||||||
| G2_MASK_X(PWM_ENA_CHID1)
|
|
||||||
| G2_MASK_Y(PWM_ENA_CHID2)
|
|
||||||
| G2_MASK_Z(PWM_ENA_CHID3)
|
|
||||||
| G2_MASK_E(PWM_ENA_CHID4)
|
|
||||||
; // enable channels used by G2
|
|
||||||
|
|
||||||
PWM->PWM_IER1 = PWM_IER1_CHID0
|
|
||||||
| G2_MASK_X(PWM_IER1_CHID1)
|
|
||||||
| G2_MASK_Y(PWM_IER1_CHID2)
|
|
||||||
| G2_MASK_Z(PWM_IER1_CHID3)
|
|
||||||
| G2_MASK_E(PWM_IER1_CHID4)
|
|
||||||
; // enable interrupts for channels used by G2
|
|
||||||
|
|
||||||
NVIC_EnableIRQ(PWM_IRQn); // Enable interrupt handler
|
|
||||||
NVIC_SetPriority(PWM_IRQn, NVIC_EncodePriority(0, 10, 0)); // normal priority for PWM module (can stand some jitter on the Vref signals)
|
|
||||||
}
|
|
||||||
|
|
||||||
void Stepper::digipot_current(const uint8_t driver, const int16_t current) {
|
|
||||||
|
|
||||||
if (!(PWM->PWM_CH_NUM[0].PWM_CPRD == PWM_PERIOD_US)) digipot_init(); // Init PWM system if needed
|
|
||||||
|
|
||||||
switch (driver) {
|
|
||||||
case 0:
|
|
||||||
if (G2_PWM_X) PWM->PWM_CMP[1].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current)); // update X & Y
|
|
||||||
if (G2_PWM_Y) PWM->PWM_CMP[2].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current));
|
|
||||||
if (G2_PWM_X) PWM->PWM_CMP[1].PWM_CMPMUPD = 0x0001; // enable compare event
|
|
||||||
if (G2_PWM_Y) PWM->PWM_CMP[2].PWM_CMPMUPD = 0x0001; // enable compare event
|
|
||||||
if (G2_PWM_X || G2_PWM_Y) PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
if (G2_PWM_Z) {
|
|
||||||
PWM->PWM_CMP[3].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current)); // update Z
|
|
||||||
PWM->PWM_CMP[3].PWM_CMPMUPD = 0x0001; // enable compare event
|
|
||||||
PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (G2_PWM_E) {
|
|
||||||
PWM->PWM_CMP[4].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current)); // update E
|
|
||||||
PWM->PWM_CMP[4].PWM_CMPMUPD = 0x0001; // enable compare event
|
|
||||||
PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
volatile uint32_t PWM_ISR1_STATUS, PWM_ISR2_STATUS;
|
|
||||||
|
|
||||||
void PWM_Handler() {
|
|
||||||
PWM_ISR1_STATUS = PWM->PWM_ISR1;
|
|
||||||
PWM_ISR2_STATUS = PWM->PWM_ISR2;
|
|
||||||
if (PWM_ISR1_STATUS & PWM_IER1_CHID0) { // CHAN_0 interrupt
|
|
||||||
if (G2_PWM_X) *ISR_table[0].set_register = ISR_table[0].write_mask; // set X to active
|
|
||||||
if (G2_PWM_Y) *ISR_table[1].set_register = ISR_table[1].write_mask; // set Y to active
|
|
||||||
if (G2_PWM_Z) *ISR_table[2].set_register = ISR_table[2].write_mask; // set Z to active
|
|
||||||
if (G2_PWM_E) *ISR_table[3].set_register = ISR_table[3].write_mask; // set E to active
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (G2_PWM_X && (PWM_ISR2_STATUS & PWM_IER2_CMPM1)) *ISR_table[0].clr_register = ISR_table[0].write_mask; // set X to inactive
|
|
||||||
if (G2_PWM_Y && (PWM_ISR2_STATUS & PWM_IER2_CMPM2)) *ISR_table[1].clr_register = ISR_table[1].write_mask; // set Y to inactive
|
|
||||||
if (G2_PWM_Z && (PWM_ISR2_STATUS & PWM_IER2_CMPM3)) *ISR_table[2].clr_register = ISR_table[2].write_mask; // set Z to inactive
|
|
||||||
if (G2_PWM_E && (PWM_ISR2_STATUS & PWM_IER2_CMPM4)) *ISR_table[3].clr_register = ISR_table[3].write_mask; // set E to inactive
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // PRINTRBOARD_G2
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* 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
|
|
||||||
* 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
|
|
||||||
|
|
||||||
#if HAS_SPI_TFT || HAS_FSMC_TFT
|
|
||||||
#error "Sorry! TFT displays are not available for HAL/DUE."
|
|
||||||
#endif
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* 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
|
|
||||||
* 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
|
|
||||||
|
|
||||||
#if USE_FALLBACK_EEPROM
|
|
||||||
#define FLASH_EEPROM_EMULATION
|
|
||||||
#elif EITHER(I2C_EEPROM, SPI_EEPROM)
|
|
||||||
#define USE_SHARED_EEPROM 1
|
|
||||||
#endif
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
#
|
|
||||||
# Set upload_command
|
|
||||||
#
|
|
||||||
# Windows: bossac.exe
|
|
||||||
# Other: leave unchanged
|
|
||||||
#
|
|
||||||
|
|
||||||
import platform
|
|
||||||
current_OS = platform.system()
|
|
||||||
|
|
||||||
if current_OS == 'Windows':
|
|
||||||
|
|
||||||
Import("env")
|
|
||||||
|
|
||||||
# Use bossac.exe on Windows
|
|
||||||
env.Replace(
|
|
||||||
UPLOADCMD="bossac --info --unlock --write --verify --reset --erase -U false --boot"
|
|
||||||
)
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* 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
|
|
||||||
* 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/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
|
||||||
|
|
||||||
#if ENABLED(EEPROM_SETTINGS)
|
|
||||||
|
|
||||||
#include "../shared/eeprom_api.h"
|
|
||||||
#include <EEPROM.h>
|
|
||||||
|
|
||||||
#ifndef MARLIN_EEPROM_SIZE
|
|
||||||
#define MARLIN_EEPROM_SIZE 0x1000 // 4KB
|
|
||||||
#endif
|
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
|
||||||
|
|
||||||
bool PersistentStore::access_start() { return EEPROM.begin(MARLIN_EEPROM_SIZE); }
|
|
||||||
bool PersistentStore::access_finish() { EEPROM.end(); return true; }
|
|
||||||
|
|
||||||
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
|
||||||
for (size_t i = 0; i < size; i++) {
|
|
||||||
EEPROM.write(pos++, value[i]);
|
|
||||||
crc16(crc, &value[i], 1);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
|
|
||||||
for (size_t i = 0; i < size; i++) {
|
|
||||||
uint8_t c = EEPROM.read(pos++);
|
|
||||||
if (writing) value[i] = c;
|
|
||||||
crc16(crc, &c, 1);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // EEPROM_SETTINGS
|
|
||||||
#endif // ARDUINO_ARCH_ESP32
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* 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
|
|
||||||
* 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
|
|
||||||
|
|
||||||
#if HAS_SPI_TFT || HAS_FSMC_TFT
|
|
||||||
#error "Sorry! TFT displays are not available for HAL/ESP32."
|
|
||||||
#endif
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
* 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
|
|
||||||
* 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
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
esp_err_t esp_task_wdt_reset();
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Initialize watchdog with a 4 second interrupt time
|
|
||||||
void watchdog_init();
|
|
||||||
|
|
||||||
// Reset watchdog.
|
|
||||||
inline void HAL_watchdog_refresh() { esp_task_wdt_reset(); }
|
|
||||||
+5
-19
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -25,22 +25,8 @@
|
|||||||
|
|
||||||
#include HAL_PATH(.,HAL.h)
|
#include HAL_PATH(.,HAL.h)
|
||||||
|
|
||||||
#define HAL_ADC_RANGE _BV(HAL_ADC_RESOLUTION)
|
|
||||||
|
|
||||||
#ifndef I2C_ADDRESS
|
|
||||||
#define I2C_ADDRESS(A) (A)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Needed for AVR sprintf_P PROGMEM extension
|
|
||||||
#ifndef S_FMT
|
|
||||||
#define S_FMT "%s"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// String helper
|
|
||||||
#ifndef PGMSTR
|
|
||||||
#define PGMSTR(NAM,STR) constexpr char NAM[] = STR
|
|
||||||
#endif
|
|
||||||
|
|
||||||
inline void watchdog_refresh() {
|
inline void watchdog_refresh() {
|
||||||
TERN_(USE_WATCHDOG, HAL_watchdog_refresh());
|
#if ENABLED(USE_WATCHDOG)
|
||||||
|
HAL_watchdog_refresh();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,9 +16,10 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __AVR__
|
#ifdef __AVR__
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.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
|
||||||
@@ -14,11 +14,46 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "../shared/Marduino.h"
|
||||||
|
#include "../shared/HAL_SPI.h"
|
||||||
|
#include "fastio.h"
|
||||||
|
#include "watchdog.h"
|
||||||
|
#include "math.h"
|
||||||
|
|
||||||
|
#ifdef USBCON
|
||||||
|
#include "HardwareSerial.h"
|
||||||
|
#else
|
||||||
|
#define HardwareSerial_h // Hack to prevent HardwareSerial.h header inclusion
|
||||||
|
#include "MarlinSerial.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include <avr/eeprom.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
// ------------------------
|
||||||
|
// Defines
|
||||||
|
// ------------------------
|
||||||
|
|
||||||
|
//#define analogInputToDigitalPin(IO) IO
|
||||||
|
|
||||||
|
#ifndef CRITICAL_SECTION_START
|
||||||
|
#define CRITICAL_SECTION_START unsigned char _sreg = SREG; cli()
|
||||||
|
#define CRITICAL_SECTION_END SREG = _sreg
|
||||||
|
#endif
|
||||||
|
#define ISRS_ENABLED() TEST(SREG, SREG_I)
|
||||||
|
#define ENABLE_ISRS() sei()
|
||||||
|
#define DISABLE_ISRS() cli()
|
||||||
|
|
||||||
|
// On AVR this is in math.h?
|
||||||
|
//#define square(x) ((x)*(x))
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
// Types
|
// Types
|
||||||
@@ -27,21 +62,71 @@
|
|||||||
typedef uint16_t hal_timer_t;
|
typedef uint16_t hal_timer_t;
|
||||||
#define HAL_TIMER_TYPE_MAX 0xFFFF
|
#define HAL_TIMER_TYPE_MAX 0xFFFF
|
||||||
|
|
||||||
|
typedef int8_t pin_t;
|
||||||
|
|
||||||
|
#define SHARED_SERVOS HAS_SERVOS
|
||||||
|
#define HAL_SERVO_LIB Servo
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
// Defines
|
// Public Variables
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
|
//extern uint8_t MCUSR;
|
||||||
|
|
||||||
|
// Serial ports
|
||||||
|
#ifdef USBCON
|
||||||
|
#if ENABLED(BLUETOOTH)
|
||||||
|
#define MYSERIAL0 bluetoothSerial
|
||||||
|
#else
|
||||||
|
#define MYSERIAL0 Serial
|
||||||
|
#endif
|
||||||
|
#define NUM_SERIAL 1
|
||||||
|
#else
|
||||||
|
#if !WITHIN(SERIAL_PORT, -1, 3)
|
||||||
|
#error "SERIAL_PORT must be from -1 to 3"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MYSERIAL0 customizedSerial1
|
||||||
|
|
||||||
|
#ifdef SERIAL_PORT_2
|
||||||
|
#if !WITHIN(SERIAL_PORT_2, -1, 3)
|
||||||
|
#error "SERIAL_PORT_2 must be from -1 to 3"
|
||||||
|
#elif SERIAL_PORT_2 == SERIAL_PORT
|
||||||
|
#error "SERIAL_PORT_2 must be different than SERIAL_PORT"
|
||||||
|
#endif
|
||||||
|
#define NUM_SERIAL 2
|
||||||
|
#define MYSERIAL1 customizedSerial2
|
||||||
|
#else
|
||||||
|
#define NUM_SERIAL 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ------------------------
|
||||||
|
// Public functions
|
||||||
|
// ------------------------
|
||||||
|
|
||||||
|
void HAL_init();
|
||||||
|
|
||||||
|
//void cli();
|
||||||
|
|
||||||
|
//void _delay_ms(const int delay);
|
||||||
|
|
||||||
|
inline void HAL_clear_reset_source() { MCUSR = 0; }
|
||||||
|
inline uint8_t HAL_get_reset_source() { return MCUSR; }
|
||||||
|
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||||
|
extern "C" {
|
||||||
|
int freeMemory();
|
||||||
|
}
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
|
// timers
|
||||||
#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 STEP_TIMER_NUM
|
#define STEP_TIMER_NUM 1
|
||||||
#define STEP_TIMER_NUM 1
|
#define TEMP_TIMER_NUM 0
|
||||||
#endif
|
#define PULSE_TIMER_NUM STEP_TIMER_NUM
|
||||||
#ifndef PULSE_TIMER_NUM
|
|
||||||
#define PULSE_TIMER_NUM STEP_TIMER_NUM
|
|
||||||
#endif
|
|
||||||
#ifndef TEMP_TIMER_NUM
|
|
||||||
#define TEMP_TIMER_NUM 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TEMP_TIMER_FREQUENCY ((F_CPU) / 64.0 / 256.0)
|
#define TEMP_TIMER_FREQUENCY ((F_CPU) / 64.0 / 256.0)
|
||||||
|
|
||||||
@@ -112,8 +197,6 @@ FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) {
|
|||||||
#define HAL_timer_isr_epilogue(TIMER_NUM)
|
#define HAL_timer_isr_epilogue(TIMER_NUM)
|
||||||
|
|
||||||
/* 18 cycles maximum latency */
|
/* 18 cycles maximum latency */
|
||||||
#ifndef HAL_STEP_TIMER_ISR
|
|
||||||
|
|
||||||
#define HAL_STEP_TIMER_ISR() \
|
#define HAL_STEP_TIMER_ISR() \
|
||||||
extern "C" void TIMER1_COMPA_vect() __attribute__ ((signal, naked, used, externally_visible)); \
|
extern "C" void TIMER1_COMPA_vect() __attribute__ ((signal, naked, used, externally_visible)); \
|
||||||
extern "C" void TIMER1_COMPA_vect_bottom() asm ("TIMER1_COMPA_vect_bottom") __attribute__ ((used, externally_visible, noinline)); \
|
extern "C" void TIMER1_COMPA_vect_bottom() asm ("TIMER1_COMPA_vect_bottom") __attribute__ ((used, externally_visible, noinline)); \
|
||||||
@@ -186,10 +269,6 @@ void TIMER1_COMPA_vect() { \
|
|||||||
} \
|
} \
|
||||||
void TIMER1_COMPA_vect_bottom()
|
void TIMER1_COMPA_vect_bottom()
|
||||||
|
|
||||||
#endif // HAL_STEP_TIMER_ISR
|
|
||||||
|
|
||||||
#ifndef HAL_TEMP_TIMER_ISR
|
|
||||||
|
|
||||||
/* 14 cycles maximum latency */
|
/* 14 cycles maximum latency */
|
||||||
#define HAL_TEMP_TIMER_ISR() \
|
#define HAL_TEMP_TIMER_ISR() \
|
||||||
extern "C" void TIMER0_COMPB_vect() __attribute__ ((signal, naked, used, externally_visible)); \
|
extern "C" void TIMER0_COMPB_vect() __attribute__ ((signal, naked, used, externally_visible)); \
|
||||||
@@ -256,4 +335,59 @@ void TIMER0_COMPB_vect() { \
|
|||||||
} \
|
} \
|
||||||
void TIMER0_COMPB_vect_bottom()
|
void TIMER0_COMPB_vect_bottom()
|
||||||
|
|
||||||
#endif // HAL_TEMP_TIMER_ISR
|
// ADC
|
||||||
|
#ifdef DIDR2
|
||||||
|
#define HAL_ANALOG_SELECT(pin) do{ if (pin < 8) SBI(DIDR0, pin); else SBI(DIDR2, pin & 0x07); }while(0)
|
||||||
|
#else
|
||||||
|
#define HAL_ANALOG_SELECT(pin) do{ SBI(DIDR0, pin); }while(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
inline void HAL_adc_init() {
|
||||||
|
ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADIF) | 0x07;
|
||||||
|
DIDR0 = 0;
|
||||||
|
#ifdef DIDR2
|
||||||
|
DIDR2 = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SET_ADMUX_ADCSRA(pin) ADMUX = _BV(REFS0) | (pin & 0x07); SBI(ADCSRA, ADSC)
|
||||||
|
#ifdef MUX5
|
||||||
|
#define HAL_START_ADC(pin) if (pin > 7) ADCSRB = _BV(MUX5); else ADCSRB = 0; SET_ADMUX_ADCSRA(pin)
|
||||||
|
#else
|
||||||
|
#define HAL_START_ADC(pin) ADCSRB = 0; SET_ADMUX_ADCSRA(pin)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define HAL_READ_ADC() ADC
|
||||||
|
#define HAL_ADC_READY() !TEST(ADCSRA, ADSC)
|
||||||
|
|
||||||
|
#define GET_PIN_MAP_PIN(index) index
|
||||||
|
#define GET_PIN_MAP_INDEX(pin) pin
|
||||||
|
#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval)
|
||||||
|
|
||||||
|
#define HAL_SENSITIVE_PINS 0, 1
|
||||||
|
|
||||||
|
#ifdef __AVR_AT90USB1286__
|
||||||
|
#define JTAG_DISABLE() do{ MCUCR = 0x80; MCUCR = 0x80; }while(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// AVR compatibility
|
||||||
|
#define strtof strtod
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set_pwm_frequency
|
||||||
|
* Sets the frequency of the timer corresponding to the provided pin
|
||||||
|
* as close as possible to the provided desired frequency. Internally
|
||||||
|
* calculates the required waveform generation mode, prescaler and
|
||||||
|
* resolution values required and sets the timer registers accordingly.
|
||||||
|
* NOTE that the frequency is applied to all pins on the timer (Ex OC3A, OC3B and OC3B)
|
||||||
|
* NOTE that there are limitations, particularly if using TIMER2. (see Configuration_adv.h -> FAST FAN PWM Settings)
|
||||||
|
*/
|
||||||
|
void set_pwm_frequency(const pin_t pin, int f_desired);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set_pwm_duty
|
||||||
|
* Sets the PWM duty cycle of the provided pin to the provided value
|
||||||
|
* 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]
|
||||||
|
*/
|
||||||
|
void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false);
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -197,7 +197,7 @@ void spiBegin() {
|
|||||||
// output pin high - like sending 0xFF
|
// output pin high - like sending 0xFF
|
||||||
WRITE(MOSI_PIN, HIGH);
|
WRITE(MOSI_PIN, HIGH);
|
||||||
|
|
||||||
LOOP_L_N(i, 8) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
WRITE(SCK_PIN, HIGH);
|
WRITE(SCK_PIN, HIGH);
|
||||||
|
|
||||||
nop; // adjust so SCK is nice
|
nop; // adjust so SCK is nice
|
||||||
@@ -224,7 +224,7 @@ void spiBegin() {
|
|||||||
void spiSend(uint8_t data) {
|
void spiSend(uint8_t data) {
|
||||||
// no interrupts during byte send - about 8µs
|
// no interrupts during byte send - about 8µs
|
||||||
cli();
|
cli();
|
||||||
LOOP_L_N(i, 8) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
WRITE(SCK_PIN, LOW);
|
WRITE(SCK_PIN, LOW);
|
||||||
WRITE(MOSI_PIN, data & 0x80);
|
WRITE(MOSI_PIN, data & 0x80);
|
||||||
data <<= 1;
|
data <<= 1;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -41,11 +41,7 @@
|
|||||||
#if !defined(USBCON) && (defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H))
|
#if !defined(USBCON) && (defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H))
|
||||||
|
|
||||||
#include "MarlinSerial.h"
|
#include "MarlinSerial.h"
|
||||||
#include "../../MarlinCore.h"
|
#include "../../Marlin.h"
|
||||||
|
|
||||||
#if ENABLED(DIRECT_STEPPING)
|
|
||||||
#include "../../feature/direct_stepping.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_r MarlinSerial<Cfg>::rx_buffer = { 0, 0, { 0 } };
|
template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_r MarlinSerial<Cfg>::rx_buffer = { 0, 0, { 0 } };
|
||||||
template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_t MarlinSerial<Cfg>::tx_buffer = { 0 };
|
template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_t MarlinSerial<Cfg>::tx_buffer = { 0 };
|
||||||
@@ -59,7 +55,7 @@
|
|||||||
// A SW memory barrier, to ensure GCC does not overoptimize loops
|
// A SW memory barrier, to ensure GCC does not overoptimize loops
|
||||||
#define sw_barrier() asm volatile("": : :"memory");
|
#define sw_barrier() asm volatile("": : :"memory");
|
||||||
|
|
||||||
#include "../../feature/e_parser.h"
|
#include "../../feature/emergency_parser.h"
|
||||||
|
|
||||||
// "Atomically" read the RX head index value without disabling interrupts:
|
// "Atomically" read the RX head index value without disabling interrupts:
|
||||||
// This MUST be called with RX interrupts enabled, and CAN'T be called
|
// This MUST be called with RX interrupts enabled, and CAN'T be called
|
||||||
@@ -135,18 +131,6 @@
|
|||||||
|
|
||||||
static EmergencyParser::State emergency_state; // = EP_RESET
|
static EmergencyParser::State emergency_state; // = EP_RESET
|
||||||
|
|
||||||
// This must read the R_UCSRA register before reading the received byte to detect error causes
|
|
||||||
if (Cfg::DROPPED_RX && B_DOR && !++rx_dropped_bytes) --rx_dropped_bytes;
|
|
||||||
if (Cfg::RX_OVERRUNS && B_DOR && !++rx_buffer_overruns) --rx_buffer_overruns;
|
|
||||||
if (Cfg::RX_FRAMING_ERRORS && B_FE && !++rx_framing_errors) --rx_framing_errors;
|
|
||||||
|
|
||||||
// Read the character from the USART
|
|
||||||
uint8_t c = R_UDR;
|
|
||||||
|
|
||||||
#if ENABLED(DIRECT_STEPPING)
|
|
||||||
if (page_manager.maybe_store_rxd_char(c)) return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Get the tail - Nothing can alter its value while this ISR is executing, but there's
|
// Get the tail - Nothing can alter its value while this ISR is executing, but there's
|
||||||
// a chance that this ISR interrupted the main process while it was updating the index.
|
// a chance that this ISR interrupted the main process while it was updating the index.
|
||||||
// The backup mechanism ensures the correct value is always returned.
|
// The backup mechanism ensures the correct value is always returned.
|
||||||
@@ -158,6 +142,14 @@
|
|||||||
// Get the next element
|
// Get the next element
|
||||||
ring_buffer_pos_t i = (ring_buffer_pos_t)(h + 1) & (ring_buffer_pos_t)(Cfg::RX_SIZE - 1);
|
ring_buffer_pos_t i = (ring_buffer_pos_t)(h + 1) & (ring_buffer_pos_t)(Cfg::RX_SIZE - 1);
|
||||||
|
|
||||||
|
// This must read the R_UCSRA register before reading the received byte to detect error causes
|
||||||
|
if (Cfg::DROPPED_RX && B_DOR && !++rx_dropped_bytes) --rx_dropped_bytes;
|
||||||
|
if (Cfg::RX_OVERRUNS && B_DOR && !++rx_buffer_overruns) --rx_buffer_overruns;
|
||||||
|
if (Cfg::RX_FRAMING_ERRORS && B_FE && !++rx_framing_errors) --rx_framing_errors;
|
||||||
|
|
||||||
|
// Read the character from the USART
|
||||||
|
uint8_t c = R_UDR;
|
||||||
|
|
||||||
if (Cfg::EMERGENCYPARSER) emergency_parser.update(emergency_state, c);
|
if (Cfg::EMERGENCYPARSER) emergency_parser.update(emergency_state, c);
|
||||||
|
|
||||||
// If the character is to be stored at the index just before the tail
|
// If the character is to be stored at the index just before the tail
|
||||||
@@ -690,7 +682,7 @@
|
|||||||
|
|
||||||
// Round correctly so that print(1.999, 2) prints as "2.00"
|
// Round correctly so that print(1.999, 2) prints as "2.00"
|
||||||
double rounding = 0.5;
|
double rounding = 0.5;
|
||||||
LOOP_L_N(i, digits) rounding *= 0.1;
|
for (uint8_t i = 0; i < digits; ++i) rounding *= 0.1;
|
||||||
number += rounding;
|
number += rounding;
|
||||||
|
|
||||||
// Extract the integer part of the number and print it
|
// Extract the integer part of the number and print it
|
||||||
@@ -765,51 +757,6 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DGUS_SERIAL_PORT
|
|
||||||
|
|
||||||
template<typename Cfg>
|
|
||||||
typename MarlinSerial<Cfg>::ring_buffer_pos_t MarlinSerial<Cfg>::get_tx_buffer_free() {
|
|
||||||
const ring_buffer_pos_t t = tx_buffer.tail, // next byte to send.
|
|
||||||
h = tx_buffer.head; // next pos for queue.
|
|
||||||
int ret = t - h - 1;
|
|
||||||
if (ret < 0) ret += Cfg::TX_SIZE + 1;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ISR(SERIAL_REGNAME(USART,DGUS_SERIAL_PORT,_RX_vect)) {
|
|
||||||
MarlinSerial<MarlinInternalSerialCfg<DGUS_SERIAL_PORT>>::store_rxd_char();
|
|
||||||
}
|
|
||||||
|
|
||||||
ISR(SERIAL_REGNAME(USART,DGUS_SERIAL_PORT,_UDRE_vect)) {
|
|
||||||
MarlinSerial<MarlinInternalSerialCfg<DGUS_SERIAL_PORT>>::_tx_udr_empty_irq();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Preinstantiate
|
|
||||||
template class MarlinSerial<MarlinInternalSerialCfg<DGUS_SERIAL_PORT>>;
|
|
||||||
|
|
||||||
// Instantiate
|
|
||||||
MarlinSerial<MarlinInternalSerialCfg<DGUS_SERIAL_PORT>> internalDgusSerial;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ANYCUBIC_LCD_SERIAL_PORT
|
|
||||||
|
|
||||||
ISR(SERIAL_REGNAME(USART,ANYCUBIC_LCD_SERIAL_PORT,_RX_vect)) {
|
|
||||||
MarlinSerial<AnycubicLcdSerialCfg<ANYCUBIC_LCD_SERIAL_PORT>>::store_rxd_char();
|
|
||||||
}
|
|
||||||
|
|
||||||
ISR(SERIAL_REGNAME(USART,ANYCUBIC_LCD_SERIAL_PORT,_UDRE_vect)) {
|
|
||||||
MarlinSerial<AnycubicLcdSerialCfg<ANYCUBIC_LCD_SERIAL_PORT>>::_tx_udr_empty_irq();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Preinstantiate
|
|
||||||
template class MarlinSerial<AnycubicLcdSerialCfg<ANYCUBIC_LCD_SERIAL_PORT>>;
|
|
||||||
|
|
||||||
// Instantiate
|
|
||||||
MarlinSerial<AnycubicLcdSerialCfg<ANYCUBIC_LCD_SERIAL_PORT>> anycubicLcdSerial;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// For AT90USB targets use the UART for BT interfacing
|
// For AT90USB targets use the UART for BT interfacing
|
||||||
#if defined(USBCON) && ENABLED(BLUETOOTH)
|
#if defined(USBCON) && ENABLED(BLUETOOTH)
|
||||||
HardwareSerial bluetoothSerial;
|
HardwareSerial bluetoothSerial;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -31,9 +31,9 @@
|
|||||||
* Templatized 01 October 2018 by Eduardo José Tagle to allow multiple instances
|
* Templatized 01 October 2018 by Eduardo José Tagle to allow multiple instances
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <WString.h>
|
#include "../shared/MarlinSerial.h"
|
||||||
|
|
||||||
#include "../../inc/MarlinConfigPre.h"
|
#include <WString.h>
|
||||||
|
|
||||||
#ifndef SERIAL_PORT
|
#ifndef SERIAL_PORT
|
||||||
#define SERIAL_PORT 0
|
#define SERIAL_PORT 0
|
||||||
@@ -217,9 +217,6 @@
|
|||||||
static ring_buffer_pos_t available();
|
static ring_buffer_pos_t available();
|
||||||
static void write(const uint8_t c);
|
static void write(const uint8_t c);
|
||||||
static void flushTX();
|
static void flushTX();
|
||||||
#ifdef DGUS_SERIAL_PORT
|
|
||||||
static ring_buffer_pos_t get_tx_buffer_free();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
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; }
|
||||||
@@ -261,12 +258,12 @@
|
|||||||
static constexpr int PORT = serial;
|
static constexpr int PORT = serial;
|
||||||
static constexpr unsigned int RX_SIZE = RX_BUFFER_SIZE;
|
static constexpr unsigned int RX_SIZE = RX_BUFFER_SIZE;
|
||||||
static constexpr unsigned int TX_SIZE = TX_BUFFER_SIZE;
|
static constexpr unsigned int TX_SIZE = TX_BUFFER_SIZE;
|
||||||
static constexpr bool XONOFF = ENABLED(SERIAL_XON_XOFF);
|
static constexpr bool XONOFF = bSERIAL_XON_XOFF;
|
||||||
static constexpr bool EMERGENCYPARSER = ENABLED(EMERGENCY_PARSER);
|
static constexpr bool EMERGENCYPARSER = bEMERGENCY_PARSER;
|
||||||
static constexpr bool DROPPED_RX = ENABLED(SERIAL_STATS_DROPPED_RX);
|
static constexpr bool DROPPED_RX = bSERIAL_STATS_DROPPED_RX;
|
||||||
static constexpr bool RX_OVERRUNS = ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS);
|
static constexpr bool RX_OVERRUNS = bSERIAL_STATS_RX_BUFFER_OVERRUNS;
|
||||||
static constexpr bool RX_FRAMING_ERRORS = ENABLED(SERIAL_STATS_RX_FRAMING_ERRORS);
|
static constexpr bool RX_FRAMING_ERRORS = bSERIAL_STATS_RX_FRAMING_ERRORS;
|
||||||
static constexpr bool MAX_RX_QUEUED = ENABLED(SERIAL_STATS_MAX_RX_QUEUED);
|
static constexpr bool MAX_RX_QUEUED = bSERIAL_STATS_MAX_RX_QUEUED;
|
||||||
};
|
};
|
||||||
extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
|
extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
|
||||||
|
|
||||||
@@ -295,40 +292,6 @@
|
|||||||
extern MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>> internalSerial;
|
extern MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>> internalSerial;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DGUS_SERIAL_PORT
|
|
||||||
template <uint8_t serial>
|
|
||||||
struct MarlinInternalSerialCfg {
|
|
||||||
static constexpr int PORT = serial;
|
|
||||||
static constexpr unsigned int RX_SIZE = DGUS_RX_BUFFER_SIZE;
|
|
||||||
static constexpr unsigned int TX_SIZE = DGUS_TX_BUFFER_SIZE;
|
|
||||||
static constexpr bool XONOFF = false;
|
|
||||||
static constexpr bool EMERGENCYPARSER = false;
|
|
||||||
static constexpr bool DROPPED_RX = false;
|
|
||||||
static constexpr bool RX_OVERRUNS = BOTH(HAS_DGUS_LCD, DGUS_SERIAL_STATS_RX_BUFFER_OVERRUNS);
|
|
||||||
static constexpr bool RX_FRAMING_ERRORS = false;
|
|
||||||
static constexpr bool MAX_RX_QUEUED = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern MarlinSerial<MarlinInternalSerialCfg<DGUS_SERIAL_PORT>> internalDgusSerial;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ANYCUBIC_LCD_SERIAL_PORT
|
|
||||||
template <uint8_t serial>
|
|
||||||
struct AnycubicLcdSerialCfg {
|
|
||||||
static constexpr int PORT = serial;
|
|
||||||
static constexpr unsigned int RX_SIZE = 64;
|
|
||||||
static constexpr unsigned int TX_SIZE = 128;
|
|
||||||
static constexpr bool XONOFF = false;
|
|
||||||
static constexpr bool EMERGENCYPARSER = false;
|
|
||||||
static constexpr bool DROPPED_RX = false;
|
|
||||||
static constexpr bool RX_OVERRUNS = false;
|
|
||||||
static constexpr bool RX_FRAMING_ERRORS = false;
|
|
||||||
static constexpr bool MAX_RX_QUEUED = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern MarlinSerial<AnycubicLcdSerialCfg<ANYCUBIC_LCD_SERIAL_PORT>> anycubicLcdSerial;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Use the UART for Bluetooth in AT90USB configurations
|
// Use the UART for Bluetooth in AT90USB configurations
|
||||||
#if defined(USBCON) && ENABLED(BLUETOOTH)
|
#if defined(USBCON) && ENABLED(BLUETOOTH)
|
||||||
extern HardwareSerial bluetoothSerial;
|
extern HardwareSerial bluetoothSerial;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -59,6 +59,7 @@
|
|||||||
|
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
|
|
||||||
|
#include "../shared/Marduino.h"
|
||||||
#include "../shared/servo.h"
|
#include "../shared/servo.h"
|
||||||
#include "../shared/servo_private.h"
|
#include "../shared/servo_private.h"
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
+37
-69
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -46,55 +46,39 @@ void endstop_ISR() { endstops.update(); }
|
|||||||
/**
|
/**
|
||||||
* Patch for pins_arduino.h (...\Arduino\hardware\arduino\avr\variants\mega\pins_arduino.h)
|
* Patch for pins_arduino.h (...\Arduino\hardware\arduino\avr\variants\mega\pins_arduino.h)
|
||||||
*
|
*
|
||||||
* These macros for the Arduino MEGA do not include the two connected pins on Port J (D14, D15).
|
* These macros for the Arduino MEGA do not include the two connected pins on Port J (D13, D14).
|
||||||
* So we extend them here because these are the normal pins for Y_MIN and Y_MAX on RAMPS.
|
* So we extend them here because these are the normal pins for Y_MIN and Y_MAX on RAMPS.
|
||||||
* There are more PCI-enabled processor pins on Port J, but they are not connected to Arduino MEGA.
|
* There are more PCI-enabled processor pins on Port J, but they are not connected to Arduino MEGA.
|
||||||
*/
|
*/
|
||||||
#if defined(ARDUINO_AVR_MEGA2560) || defined(ARDUINO_AVR_MEGA)
|
#if defined(ARDUINO_AVR_MEGA2560) || defined(ARDUINO_AVR_MEGA)
|
||||||
|
|
||||||
#define digitalPinHasPCICR(p) (WITHIN(p, 10, 15) || WITHIN(p, 50, 53) || WITHIN(p, 62, 69))
|
|
||||||
|
|
||||||
#undef digitalPinToPCICR
|
#undef digitalPinToPCICR
|
||||||
#define digitalPinToPCICR(p) (digitalPinHasPCICR(p) ? (&PCICR) : nullptr)
|
#define digitalPinToPCICR(p) ( WITHIN(p, 10, 15) || \
|
||||||
|
WITHIN(p, 50, 53) || \
|
||||||
|
WITHIN(p, 62, 69) ? &PCICR : nullptr )
|
||||||
#undef digitalPinToPCICRbit
|
#undef digitalPinToPCICRbit
|
||||||
#define digitalPinToPCICRbit(p) (WITHIN(p, 10, 13) || WITHIN(p, 50, 53) ? 0 : \
|
#define digitalPinToPCICRbit(p) ( WITHIN(p, 10, 13) || WITHIN(p, 50, 53) ? 0 : \
|
||||||
WITHIN(p, 14, 15) ? 1 : \
|
WITHIN(p, 14, 15) ? 1 : \
|
||||||
WITHIN(p, 62, 69) ? 2 : \
|
WITHIN(p, 62, 69) ? 2 : \
|
||||||
0)
|
0 )
|
||||||
|
|
||||||
#undef digitalPinToPCMSK
|
#undef digitalPinToPCMSK
|
||||||
#define digitalPinToPCMSK(p) (WITHIN(p, 10, 13) || WITHIN(p, 50, 53) ? (&PCMSK0) : \
|
#define digitalPinToPCMSK(p) ( WITHIN(p, 10, 13) || WITHIN(p, 50, 53) ? &PCMSK0 : \
|
||||||
WITHIN(p, 14, 15) ? (&PCMSK1) : \
|
WITHIN(p, 14, 15) ? &PCMSK1 : \
|
||||||
WITHIN(p, 62, 69) ? (&PCMSK2) : \
|
WITHIN(p, 62, 69) ? &PCMSK2 : \
|
||||||
nullptr)
|
nullptr )
|
||||||
|
|
||||||
#undef digitalPinToPCMSKbit
|
#undef digitalPinToPCMSKbit
|
||||||
#define digitalPinToPCMSKbit(p) (WITHIN(p, 10, 13) ? ((p) - 6) : \
|
#define digitalPinToPCMSKbit(p) ( WITHIN(p, 10, 13) ? ((p) - 6) : \
|
||||||
(p) == 14 || (p) == 51 ? 2 : \
|
(p) == 14 || (p) == 51 ? 2 : \
|
||||||
(p) == 15 || (p) == 52 ? 1 : \
|
(p) == 15 || (p) == 52 ? 1 : \
|
||||||
(p) == 50 ? 3 : \
|
(p) == 50 ? 3 : \
|
||||||
(p) == 53 ? 0 : \
|
(p) == 53 ? 0 : \
|
||||||
WITHIN(p, 62, 69) ? ((p) - 62) : \
|
WITHIN(p, 62, 69) ? ((p) - 62) : \
|
||||||
0)
|
0 )
|
||||||
|
|
||||||
#elif defined(__AVR_ATmega164A__) || defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324A__) || \
|
|
||||||
defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega324PB__) || \
|
|
||||||
defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284__) || \
|
|
||||||
defined(__AVR_ATmega1284P__)
|
|
||||||
|
|
||||||
#define digitalPinHasPCICR(p) WITHIN(p, 0, NUM_DIGITAL_PINS)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#error "Unsupported AVR variant!"
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Install Pin change interrupt for a pin. Can be called multiple times.
|
// Install Pin change interrupt for a pin. Can be called multiple times.
|
||||||
void pciSetup(const int8_t pin) {
|
void pciSetup(const int8_t pin) {
|
||||||
if (digitalPinHasPCICR(pin)) {
|
if (digitalPinToPCMSK(pin) != nullptr) {
|
||||||
SBI(*digitalPinToPCMSK(pin), digitalPinToPCMSKbit(pin)); // enable pin
|
SBI(*digitalPinToPCMSK(pin), digitalPinToPCMSKbit(pin)); // enable pin
|
||||||
SBI(PCIFR, digitalPinToPCICRbit(pin)); // clear any outstanding interrupt
|
SBI(PCIFR, digitalPinToPCICRbit(pin)); // clear any outstanding interrupt
|
||||||
SBI(PCICR, digitalPinToPCICRbit(pin)); // enable interrupt for the group
|
SBI(PCICR, digitalPinToPCICRbit(pin)); // enable interrupt for the group
|
||||||
@@ -124,7 +108,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(X_MAX_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(X_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(X_MAX_PIN);
|
_ATTACH(X_MAX_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(X_MAX_PIN), "X_MAX_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(X_MAX_PIN), "X_MAX_PIN is not interrupt-capable");
|
||||||
pciSetup(X_MAX_PIN);
|
pciSetup(X_MAX_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -132,7 +116,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(X_MIN_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(X_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(X_MIN_PIN);
|
_ATTACH(X_MIN_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(X_MIN_PIN), "X_MIN_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(X_MIN_PIN), "X_MIN_PIN is not interrupt-capable");
|
||||||
pciSetup(X_MIN_PIN);
|
pciSetup(X_MIN_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -140,7 +124,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(Y_MAX_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Y_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Y_MAX_PIN);
|
_ATTACH(Y_MAX_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Y_MAX_PIN), "Y_MAX_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Y_MAX_PIN), "Y_MAX_PIN is not interrupt-capable");
|
||||||
pciSetup(Y_MAX_PIN);
|
pciSetup(Y_MAX_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -148,7 +132,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(Y_MIN_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Y_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Y_MIN_PIN);
|
_ATTACH(Y_MIN_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Y_MIN_PIN), "Y_MIN_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Y_MIN_PIN), "Y_MIN_PIN is not interrupt-capable");
|
||||||
pciSetup(Y_MIN_PIN);
|
pciSetup(Y_MIN_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -156,7 +140,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(Z_MAX_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Z_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Z_MAX_PIN);
|
_ATTACH(Z_MAX_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Z_MAX_PIN), "Z_MAX_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Z_MAX_PIN), "Z_MAX_PIN is not interrupt-capable");
|
||||||
pciSetup(Z_MAX_PIN);
|
pciSetup(Z_MAX_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -164,7 +148,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(Z_MIN_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Z_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Z_MIN_PIN);
|
_ATTACH(Z_MIN_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Z_MIN_PIN), "Z_MIN_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Z_MIN_PIN), "Z_MIN_PIN is not interrupt-capable");
|
||||||
pciSetup(Z_MIN_PIN);
|
pciSetup(Z_MIN_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -172,7 +156,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(X2_MAX_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(X2_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(X2_MAX_PIN);
|
_ATTACH(X2_MAX_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(X2_MAX_PIN), "X2_MAX_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(X2_MAX_PIN), "X2_MAX_PIN is not interrupt-capable");
|
||||||
pciSetup(X2_MAX_PIN);
|
pciSetup(X2_MAX_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -180,7 +164,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(X2_MIN_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(X2_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(X2_MIN_PIN);
|
_ATTACH(X2_MIN_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(X2_MIN_PIN), "X2_MIN_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(X2_MIN_PIN), "X2_MIN_PIN is not interrupt-capable");
|
||||||
pciSetup(X2_MIN_PIN);
|
pciSetup(X2_MIN_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -188,7 +172,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(Y2_MAX_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Y2_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Y2_MAX_PIN);
|
_ATTACH(Y2_MAX_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Y2_MAX_PIN), "Y2_MAX_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Y2_MAX_PIN), "Y2_MAX_PIN is not interrupt-capable");
|
||||||
pciSetup(Y2_MAX_PIN);
|
pciSetup(Y2_MAX_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -196,7 +180,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(Y2_MIN_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Y2_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Y2_MIN_PIN);
|
_ATTACH(Y2_MIN_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Y2_MIN_PIN), "Y2_MIN_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Y2_MIN_PIN), "Y2_MIN_PIN is not interrupt-capable");
|
||||||
pciSetup(Y2_MIN_PIN);
|
pciSetup(Y2_MIN_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -204,7 +188,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(Z2_MAX_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Z2_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Z2_MAX_PIN);
|
_ATTACH(Z2_MAX_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Z2_MAX_PIN), "Z2_MAX_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Z2_MAX_PIN), "Z2_MAX_PIN is not interrupt-capable");
|
||||||
pciSetup(Z2_MAX_PIN);
|
pciSetup(Z2_MAX_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -212,7 +196,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(Z2_MIN_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Z2_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Z2_MIN_PIN);
|
_ATTACH(Z2_MIN_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Z2_MIN_PIN), "Z2_MIN_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Z2_MIN_PIN), "Z2_MIN_PIN is not interrupt-capable");
|
||||||
pciSetup(Z2_MIN_PIN);
|
pciSetup(Z2_MIN_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -220,7 +204,7 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(Z3_MAX_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Z3_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Z3_MAX_PIN);
|
_ATTACH(Z3_MAX_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Z3_MAX_PIN), "Z3_MAX_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Z3_MAX_PIN), "Z3_MAX_PIN is not interrupt-capable");
|
||||||
pciSetup(Z3_MAX_PIN);
|
pciSetup(Z3_MAX_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -228,31 +212,15 @@ void setup_endstop_interrupts() {
|
|||||||
#if (digitalPinToInterrupt(Z3_MIN_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Z3_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Z3_MIN_PIN);
|
_ATTACH(Z3_MIN_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Z3_MIN_PIN), "Z3_MIN_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Z3_MIN_PIN), "Z3_MIN_PIN is not interrupt-capable");
|
||||||
pciSetup(Z3_MIN_PIN);
|
pciSetup(Z3_MIN_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if HAS_Z4_MAX
|
|
||||||
#if (digitalPinToInterrupt(Z4_MAX_PIN) != NOT_AN_INTERRUPT)
|
|
||||||
_ATTACH(Z4_MAX_PIN);
|
|
||||||
#else
|
|
||||||
static_assert(digitalPinHasPCICR(Z4_MAX_PIN), "Z4_MAX_PIN is not interrupt-capable");
|
|
||||||
pciSetup(Z4_MAX_PIN);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#if HAS_Z4_MIN
|
|
||||||
#if (digitalPinToInterrupt(Z4_MIN_PIN) != NOT_AN_INTERRUPT)
|
|
||||||
_ATTACH(Z4_MIN_PIN);
|
|
||||||
#else
|
|
||||||
static_assert(digitalPinHasPCICR(Z4_MIN_PIN), "Z4_MIN_PIN is not interrupt-capable");
|
|
||||||
pciSetup(Z4_MIN_PIN);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#if HAS_Z_MIN_PROBE_PIN
|
#if HAS_Z_MIN_PROBE_PIN
|
||||||
#if (digitalPinToInterrupt(Z_MIN_PROBE_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(Z_MIN_PROBE_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(Z_MIN_PROBE_PIN);
|
_ATTACH(Z_MIN_PROBE_PIN);
|
||||||
#else
|
#else
|
||||||
static_assert(digitalPinHasPCICR(Z_MIN_PROBE_PIN), "Z_MIN_PROBE_PIN is not interrupt-capable");
|
static_assert(digitalPinToPCICR(Z_MIN_PROBE_PIN), "Z_MIN_PROBE_PIN is not interrupt-capable");
|
||||||
pciSetup(Z_MIN_PROBE_PIN);
|
pciSetup(Z_MIN_PROBE_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,14 +16,14 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#ifdef __AVR__
|
#ifdef __AVR__
|
||||||
|
|
||||||
#include "../../inc/MarlinConfigPre.h"
|
#include "../../inc/MarlinConfigPre.h"
|
||||||
|
|
||||||
#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM
|
#if ENABLED(FAST_PWM_FAN)
|
||||||
|
|
||||||
#include "HAL.h"
|
#include "HAL.h"
|
||||||
|
|
||||||
@@ -167,7 +167,7 @@ void set_pwm_frequency(const pin_t pin, int f_desired) {
|
|||||||
uint16_t prescaler[] = { 0, 1, 8, /*TIMER2 ONLY*/32, 64, /*TIMER2 ONLY*/128, 256, 1024 };
|
uint16_t prescaler[] = { 0, 1, 8, /*TIMER2 ONLY*/32, 64, /*TIMER2 ONLY*/128, 256, 1024 };
|
||||||
|
|
||||||
// loop over prescaler values
|
// loop over prescaler values
|
||||||
LOOP_S_L_N(i, 1, 8) {
|
for (uint8_t i = 1; i < 8; i++) {
|
||||||
uint16_t res_temp_fast = 255, res_temp_phase_correct = 255;
|
uint16_t res_temp_fast = 255, res_temp_phase_correct = 255;
|
||||||
if (timer.n == 2) {
|
if (timer.n == 2) {
|
||||||
// No resolution calculation for TIMER2 unless enabled USE_OCR2A_AS_TOP
|
// No resolution calculation for TIMER2 unless enabled USE_OCR2A_AS_TOP
|
||||||
@@ -274,9 +274,9 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255
|
|||||||
else
|
else
|
||||||
top = *timer.ICRn; // top = ICRn
|
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
|
_SET_OCRnQ(timer.OCRnQ, timer.q, v * float(top / v_size)); // Scale 8/16-bit v to top value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // NEEDS_HARDWARE_PWM
|
#endif // FAST_PWM_FAN
|
||||||
#endif // __AVR__
|
#endif // __AVR__
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -234,55 +234,5 @@ uint8_t extDigitalRead(const int8_t pin) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/**
|
|
||||||
* Set Timer 5 PWM frequency in Hz, from 3.8Hz up to ~16MHz
|
|
||||||
* with a minimum resolution of 100 steps.
|
|
||||||
*
|
|
||||||
* DC values -1.0 to 1.0. Negative duty cycle inverts the pulse.
|
|
||||||
*/
|
|
||||||
uint16_t set_pwm_frequency_hz(const float &hz, const float dca, const float dcb, const float dcc) {
|
|
||||||
float count = 0;
|
|
||||||
if (hz > 0 && (dca || dcb || dcc)) {
|
|
||||||
count = float(F_CPU) / hz; // 1x prescaler, TOP for 16MHz base freq.
|
|
||||||
uint16_t prescaler; // Range of 30.5Hz (65535) 64.5KHz (>31)
|
|
||||||
|
|
||||||
if (count >= 255. * 256.) { prescaler = 1024; SET_CS(5, PRESCALER_1024); }
|
|
||||||
else if (count >= 255. * 64.) { prescaler = 256; SET_CS(5, PRESCALER_256); }
|
|
||||||
else if (count >= 255. * 8.) { prescaler = 64; SET_CS(5, PRESCALER_64); }
|
|
||||||
else if (count >= 255.) { prescaler = 8; SET_CS(5, PRESCALER_8); }
|
|
||||||
else { prescaler = 1; SET_CS(5, PRESCALER_1); }
|
|
||||||
|
|
||||||
count /= float(prescaler);
|
|
||||||
const float pwm_top = round(count); // Get the rounded count
|
|
||||||
|
|
||||||
ICR5 = (uint16_t)pwm_top - 1; // Subtract 1 for TOP
|
|
||||||
OCR5A = pwm_top * ABS(dca); // Update and scale DCs
|
|
||||||
OCR5B = pwm_top * ABS(dcb);
|
|
||||||
OCR5C = pwm_top * ABS(dcc);
|
|
||||||
_SET_COM(5, A, dca ? (dca < 0 ? COM_SET_CLEAR : COM_CLEAR_SET) : COM_NORMAL); // Set compare modes
|
|
||||||
_SET_COM(5, B, dcb ? (dcb < 0 ? COM_SET_CLEAR : COM_CLEAR_SET) : COM_NORMAL);
|
|
||||||
_SET_COM(5, C, dcc ? (dcc < 0 ? COM_SET_CLEAR : COM_CLEAR_SET) : COM_NORMAL);
|
|
||||||
|
|
||||||
SET_WGM(5, FAST_PWM_ICRn); // Fast PWM with ICR5 as TOP
|
|
||||||
|
|
||||||
//SERIAL_ECHOLNPGM("Timer 5 Settings:");
|
|
||||||
//SERIAL_ECHOLNPAIR(" Prescaler=", prescaler);
|
|
||||||
//SERIAL_ECHOLNPAIR(" TOP=", ICR5);
|
|
||||||
//SERIAL_ECHOLNPAIR(" OCR5A=", OCR5A);
|
|
||||||
//SERIAL_ECHOLNPAIR(" OCR5B=", OCR5B);
|
|
||||||
//SERIAL_ECHOLNPAIR(" OCR5C=", OCR5C);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Restore the default for Timer 5
|
|
||||||
SET_WGM(5, PWM_PC_8); // PWM 8-bit (Phase Correct)
|
|
||||||
SET_COMS(5, NORMAL, NORMAL, NORMAL); // Do nothing
|
|
||||||
SET_CS(5, PRESCALER_64); // 16MHz / 64 = 250KHz
|
|
||||||
OCR5A = OCR5B = OCR5C = 0;
|
|
||||||
}
|
|
||||||
return round(count);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // FASTIO_EXT_START
|
#endif // FASTIO_EXT_START
|
||||||
#endif // __AVR__
|
#endif // __AVR__
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
*
|
*
|
||||||
* Now you can simply SET_OUTPUT(PIN); WRITE(PIN, HIGH); WRITE(PIN, LOW);
|
* Now you can simply SET_OUTPUT(PIN); WRITE(PIN, HIGH); WRITE(PIN, LOW);
|
||||||
*
|
*
|
||||||
* Why double up on these macros? see https://gcc.gnu.org/onlinedocs/cpp/Stringification.html
|
* Why double up on these macros? see http://gcc.gnu.org/onlinedocs/cpp/Stringification.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _READ(IO) TEST(DIO ## IO ## _RPORT, DIO ## IO ## _PIN)
|
#define _READ(IO) TEST(DIO ## IO ## _RPORT, DIO ## IO ## _PIN)
|
||||||
@@ -98,9 +98,9 @@
|
|||||||
|
|
||||||
#define SET_INPUT(IO) _SET_INPUT(IO)
|
#define SET_INPUT(IO) _SET_INPUT(IO)
|
||||||
#define SET_INPUT_PULLUP(IO) do{ _SET_INPUT(IO); _WRITE(IO, HIGH); }while(0)
|
#define SET_INPUT_PULLUP(IO) do{ _SET_INPUT(IO); _WRITE(IO, HIGH); }while(0)
|
||||||
#define SET_INPUT_PULLDOWN SET_INPUT
|
|
||||||
#define SET_OUTPUT(IO) _SET_OUTPUT(IO)
|
#define SET_OUTPUT(IO) _SET_OUTPUT(IO)
|
||||||
#define SET_PWM SET_OUTPUT
|
|
||||||
|
#define SET_PWM(IO) SET_OUTPUT(IO)
|
||||||
|
|
||||||
#define IS_INPUT(IO) _IS_INPUT(IO)
|
#define IS_INPUT(IO) _IS_INPUT(IO)
|
||||||
#define IS_OUTPUT(IO) _IS_OUTPUT(IO)
|
#define IS_OUTPUT(IO) _IS_OUTPUT(IO)
|
||||||
@@ -279,25 +279,14 @@ enum ClockSource2 : char {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Determine which harware 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)
|
|
||||||
#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) (P == CONTROLLER_FAN_PIN || 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 == CHAMBER_AUTO_FAN_PIN)
|
||||||
#else
|
#else
|
||||||
#define PWM_CHK_FAN_B(P) _PWM_CHK_FAN_B(P)
|
#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 == CHAMBER_AUTO_FAN_PIN)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ANY_PIN(FAN, FAN1, FAN2, FAN3, FAN4, FAN5, FAN6, FAN7)
|
#if ANY_PIN(FAN, FAN1, FAN2)
|
||||||
#if PIN_EXISTS(FAN7)
|
#if PIN_EXISTS(FAN2)
|
||||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN || P == FAN5_PIN || P == FAN6_PIN || P == FAN7_PIN)
|
|
||||||
#elif PIN_EXISTS(FAN6)
|
|
||||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN || P == FAN5_PIN || P == FAN6_PIN)
|
|
||||||
#elif PIN_EXISTS(FAN5)
|
|
||||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN || P == FAN5_PIN)
|
|
||||||
#elif PIN_EXISTS(FAN4)
|
|
||||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN)
|
|
||||||
#elif PIN_EXISTS(FAN3)
|
|
||||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN)
|
|
||||||
#elif PIN_EXISTS(FAN2)
|
|
||||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN)
|
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN)
|
||||||
#elif PIN_EXISTS(FAN1)
|
#elif PIN_EXISTS(FAN1)
|
||||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN)
|
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN)
|
||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
*
|
*
|
||||||
* Hardware Pin : 02 03 06 07 01 05 15 16 17 18 23 24 25 26 64 63 13 12 46 45 44 43 78 77 76 75 74 73 72 71 60 59 58 57 56 55 54 53 50 70 52 51 42 41 40 39 38 37 36 35 22 21 20 19 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 | 04 08 09 10 11 14 27 28 29 30 31 32 33 34 47 48 49 61 62 65 66 67 68 69 79 80 81 98 99 100
|
* Hardware Pin : 02 03 06 07 01 05 15 16 17 18 23 24 25 26 64 63 13 12 46 45 44 43 78 77 76 75 74 73 72 71 60 59 58 57 56 55 54 53 50 70 52 51 42 41 40 39 38 37 36 35 22 21 20 19 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 | 04 08 09 10 11 14 27 28 29 30 31 32 33 34 47 48 49 61 62 65 66 67 68 69 79 80 81 98 99 100
|
||||||
* Port : E0 E1 E4 E5 G5 E3 H3 H4 H5 H6 B4 B5 B6 B7 J1 J0 H1 H0 D3 D2 D1 D0 A0 A1 A2 A3 A4 A5 A6 A7 C7 C6 C5 C4 C3 C2 C1 C0 D7 G2 G1 G0 L7 L6 L5 L4 L3 L2 L1 L0 B3 B2 B1 B0 F0 F1 F2 F3 F4 F5 F6 F7 K0 K1 K2 K3 K4 K5 K6 K7 | E2 E6 E7 xx xx H2 H7 G3 G4 xx xx xx xx xx D4 D5 D6 xx xx J2 J3 J4 J5 J6 J7 xx xx xx xx xx
|
* Port : E0 E1 E4 E5 G5 E3 H3 H4 H5 H6 B4 B5 B6 B7 J1 J0 H1 H0 D3 D2 D1 D0 A0 A1 A2 A3 A4 A5 A6 A7 C7 C6 C5 C4 C3 C2 C1 C0 D7 G2 G1 G0 L7 L6 L5 L4 L3 L2 L1 L0 B3 B2 B1 B0 F0 F1 F2 F3 F4 F5 F6 F7 K0 K1 K2 K3 K4 K5 K6 K7 | E2 E6 E7 xx xx H2 H7 G3 G4 xx xx xx xx xx D4 D5 D6 xx xx J2 J3 J4 J5 J6 J7 xx xx xx xx xx
|
||||||
* Logical Pin : 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 78 79 80 xx xx 84 85 71 70 xx xx xx xx xx 81 82 83 xx xx 72 73 75 76 77 74 xx xx xx xx xx
|
* Logical Pin : 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 78 79 80 xx xx 84 85 71 70 xx xx xx xx xx 81 82 83 xx xx 72 72 75 76 77 74 xx xx xx xx xx
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../fastio.h"
|
#include "../fastio.h"
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -25,11 +25,21 @@
|
|||||||
* Test AVR-specific configuration values for errors at compile-time.
|
* Test AVR-specific configuration values for errors at compile-time.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Digipot requirement
|
||||||
|
*/
|
||||||
|
#if ENABLED(DIGIPOT_MCP4018)
|
||||||
|
#if !defined(DIGIPOTS_I2C_SDA_X) || !defined(DIGIPOTS_I2C_SDA_Y) || !defined(DIGIPOTS_I2C_SDA_Z) \
|
||||||
|
|| !defined(DIGIPOTS_I2C_SDA_E0) || !defined(DIGIPOTS_I2C_SDA_E1)
|
||||||
|
#error "DIGIPOT_MCP4018 requires DIGIPOTS_I2C_SDA_* pins to be defined."
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks for FAST PWM
|
* Checks for FAST PWM
|
||||||
*/
|
*/
|
||||||
#if ENABLED(FAST_PWM_FAN) && (ENABLED(USE_OCR2A_AS_TOP) && defined(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
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,17 +51,11 @@
|
|||||||
#elif NUM_SERVOS > 0 && (WITHIN(SPINDLE_LASER_PWM_PIN, 2, 3) || SPINDLE_LASER_PWM_PIN == 5)
|
#elif NUM_SERVOS > 0 && (WITHIN(SPINDLE_LASER_PWM_PIN, 2, 3) || SPINDLE_LASER_PWM_PIN == 5)
|
||||||
#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)
|
|
||||||
#error "SPINDLE_LASER_FREQUENCY requires SPINDLE_LASER_PWM."
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Trinamic library includes SoftwareSerial.h, leading to a compile error.
|
* The Trinamic library includes SoftwareSerial.h, leading to a compile error.
|
||||||
*/
|
*/
|
||||||
#if BOTH(HAS_TRINAMIC_CONFIG, ENDSTOP_INTERRUPTS_FEATURE)
|
#if HAS_TRINAMIC && ENABLED(ENDSTOP_INTERRUPTS_FEATURE)
|
||||||
#error "TMCStepper includes SoftwareSerial.h which is incompatible with ENDSTOP_INTERRUPTS_FEATURE. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."
|
#error "TMCStepper includes SoftwareSerial.h which is incompatible with ENDSTOP_INTERRUPTS_FEATURE. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if BOTH(HAS_TMC_SW_SERIAL, MONITOR_DRIVER_STATUS)
|
|
||||||
#error "MONITOR_DRIVER_STATUS causes performance issues when used with SoftwareSerial-connected drivers. Disable MONITOR_DRIVER_STATUS or use hardware serial to continue."
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#ifdef __AVR__
|
#ifdef __AVR__
|
||||||
@@ -25,18 +25,9 @@
|
|||||||
|
|
||||||
#if EITHER(EEPROM_SETTINGS, SD_FIRMWARE_UPDATE)
|
#if EITHER(EEPROM_SETTINGS, SD_FIRMWARE_UPDATE)
|
||||||
|
|
||||||
/**
|
#include "../shared/persistent_store_api.h"
|
||||||
* PersistentStore for Arduino-style EEPROM interface
|
|
||||||
* with implementations supplied by the framework.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "../shared/eeprom_api.h"
|
bool PersistentStore::access_start() { return true; }
|
||||||
|
|
||||||
#ifndef MARLIN_EEPROM_SIZE
|
|
||||||
#define MARLIN_EEPROM_SIZE size_t(E2END + 1)
|
|
||||||
#endif
|
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
|
||||||
bool PersistentStore::access_start() { return true; }
|
|
||||||
bool PersistentStore::access_finish() { return true; }
|
bool PersistentStore::access_finish() { return true; }
|
||||||
|
|
||||||
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
||||||
@@ -48,14 +39,14 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|||||||
if (v != eeprom_read_byte(p)) {
|
if (v != eeprom_read_byte(p)) {
|
||||||
eeprom_write_byte(p, v);
|
eeprom_write_byte(p, v);
|
||||||
if (eeprom_read_byte(p) != v) {
|
if (eeprom_read_byte(p) != v) {
|
||||||
SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
|
SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
crc16(crc, &v, 1);
|
crc16(crc, &v, 1);
|
||||||
pos++;
|
pos++;
|
||||||
value++;
|
value++;
|
||||||
}
|
};
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,5 +61,7 @@ bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t
|
|||||||
return false; // always assume success for AVR's
|
return false; // always assume success for AVR's
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t PersistentStore::capacity() { return E2END + 1; }
|
||||||
|
|
||||||
#endif // EEPROM_SETTINGS || SD_FIRMWARE_UPDATE
|
#endif // EEPROM_SETTINGS || SD_FIRMWARE_UPDATE
|
||||||
#endif // __AVR__
|
#endif // __AVR__
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -26,10 +26,7 @@
|
|||||||
|
|
||||||
#define NUMBER_PINS_TOTAL NUM_DIGITAL_PINS
|
#define NUMBER_PINS_TOTAL NUM_DIGITAL_PINS
|
||||||
|
|
||||||
#define AVR_ATmega2560_FAMILY_PLUS_70 MB(BQ_ZUM_MEGA_3D, MIGHTYBOARD_REVE, MINIRAMBO, SCOOVO_X9H)
|
|
||||||
|
|
||||||
#if AVR_AT90USB1286_FAMILY
|
#if AVR_AT90USB1286_FAMILY
|
||||||
|
|
||||||
// Working with Teensyduino extension so need to re-define some things
|
// Working with Teensyduino extension so need to re-define some things
|
||||||
#include "pinsDebug_Teensyduino.h"
|
#include "pinsDebug_Teensyduino.h"
|
||||||
// Can't use the "digitalPinToPort" function from the Teensyduino type IDEs
|
// Can't use the "digitalPinToPort" function from the Teensyduino type IDEs
|
||||||
@@ -38,9 +35,7 @@
|
|||||||
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask(p)
|
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask(p)
|
||||||
#define digitalPinToPort_DEBUG(p) digitalPinToPort_Teensy(p)
|
#define digitalPinToPort_DEBUG(p) digitalPinToPort_Teensy(p)
|
||||||
#define GET_PINMODE(pin) (*portModeRegister(pin) & digitalPinToBitMask_DEBUG(pin))
|
#define GET_PINMODE(pin) (*portModeRegister(pin) & digitalPinToBitMask_DEBUG(pin))
|
||||||
|
|
||||||
#elif AVR_ATmega2560_FAMILY_PLUS_70 // So we can access/display all the pins on boards using more than 70
|
#elif AVR_ATmega2560_FAMILY_PLUS_70 // So we can access/display all the pins on boards using more than 70
|
||||||
|
|
||||||
#include "pinsDebug_plus_70.h"
|
#include "pinsDebug_plus_70.h"
|
||||||
#define digitalPinToTimer_DEBUG(p) digitalPinToTimer_plus_70(p)
|
#define digitalPinToTimer_DEBUG(p) digitalPinToTimer_plus_70(p)
|
||||||
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask_plus_70(p)
|
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask_plus_70(p)
|
||||||
@@ -48,13 +43,11 @@
|
|||||||
bool GET_PINMODE(int8_t pin) {return *portModeRegister(digitalPinToPort_DEBUG(pin)) & digitalPinToBitMask_DEBUG(pin); }
|
bool GET_PINMODE(int8_t pin) {return *portModeRegister(digitalPinToPort_DEBUG(pin)) & digitalPinToBitMask_DEBUG(pin); }
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define digitalPinToTimer_DEBUG(p) digitalPinToTimer(p)
|
#define digitalPinToTimer_DEBUG(p) digitalPinToTimer(p)
|
||||||
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask(p)
|
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask(p)
|
||||||
#define digitalPinToPort_DEBUG(p) digitalPinToPort(p)
|
#define digitalPinToPort_DEBUG(p) digitalPinToPort(p)
|
||||||
bool GET_PINMODE(int8_t pin) {return *portModeRegister(digitalPinToPort_DEBUG(pin)) & digitalPinToBitMask_DEBUG(pin); }
|
bool GET_PINMODE(int8_t pin) {return *portModeRegister(digitalPinToPort_DEBUG(pin)) & digitalPinToBitMask_DEBUG(pin); }
|
||||||
#define GET_ARRAY_PIN(p) pgm_read_byte(&pin_array[p].pin)
|
#define GET_ARRAY_PIN(p) pgm_read_byte(&pin_array[p].pin)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define VALID_PIN(pin) (pin >= 0 && pin < NUM_DIGITAL_PINS ? 1 : 0)
|
#define VALID_PIN(pin) (pin >= 0 && pin < NUM_DIGITAL_PINS ? 1 : 0)
|
||||||
@@ -70,12 +63,12 @@
|
|||||||
|
|
||||||
void PRINT_ARRAY_NAME(uint8_t x) {
|
void PRINT_ARRAY_NAME(uint8_t x) {
|
||||||
char *name_mem_pointer = (char*)pgm_read_ptr(&pin_array[x].name);
|
char *name_mem_pointer = (char*)pgm_read_ptr(&pin_array[x].name);
|
||||||
LOOP_L_N(y, MAX_NAME_LENGTH) {
|
for (uint8_t y = 0; y < MAX_NAME_LENGTH; y++) {
|
||||||
char temp_char = pgm_read_byte(name_mem_pointer + y);
|
char temp_char = pgm_read_byte(name_mem_pointer + y);
|
||||||
if (temp_char != 0)
|
if (temp_char != 0)
|
||||||
SERIAL_CHAR(temp_char);
|
SERIAL_CHAR(temp_char);
|
||||||
else {
|
else {
|
||||||
LOOP_L_N(i, MAX_NAME_LENGTH - y) SERIAL_CHAR(' ');
|
for (uint8_t i = 0; i < MAX_NAME_LENGTH - y; i++) SERIAL_CHAR(' ');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -231,10 +224,11 @@ static void err_is_interrupt() { SERIAL_ECHOPGM(" compare interrupt enabled"
|
|||||||
static void err_prob_interrupt() { SERIAL_ECHOPGM(" overflow interrupt enabled"); }
|
static void err_prob_interrupt() { SERIAL_ECHOPGM(" overflow interrupt enabled"); }
|
||||||
static void print_is_also_tied() { SERIAL_ECHOPGM(" is also tied to this pin"); SERIAL_ECHO_SP(14); }
|
static void print_is_also_tied() { SERIAL_ECHOPGM(" is also tied to this pin"); SERIAL_ECHO_SP(14); }
|
||||||
|
|
||||||
inline void com_print(const uint8_t N, const uint8_t Z) {
|
void com_print(uint8_t N, uint8_t Z) {
|
||||||
const uint8_t *TCCRA = (uint8_t*)TCCR_A(N);
|
const uint8_t *TCCRA = (uint8_t*)TCCR_A(N);
|
||||||
SERIAL_ECHOPGM(" COM");
|
SERIAL_ECHOPGM(" COM");
|
||||||
SERIAL_CHAR('0' + N, Z);
|
SERIAL_CHAR('0' + N);
|
||||||
|
SERIAL_CHAR('A' + Z);
|
||||||
SERIAL_ECHOPAIR(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
|
SERIAL_ECHOPAIR(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,7 +240,8 @@ void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N -
|
|||||||
if (N == 4) WGM |= ((*TCCRB & _BV(WGM_3)) >> 1);
|
if (N == 4) WGM |= ((*TCCRB & _BV(WGM_3)) >> 1);
|
||||||
|
|
||||||
SERIAL_ECHOPGM(" TIMER");
|
SERIAL_ECHOPGM(" TIMER");
|
||||||
SERIAL_CHAR(T + '0', L);
|
SERIAL_CHAR(T + '0');
|
||||||
|
SERIAL_CHAR(L);
|
||||||
SERIAL_ECHO_SP(3);
|
SERIAL_ECHO_SP(3);
|
||||||
|
|
||||||
if (N == 3) {
|
if (N == 3) {
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
+4
-4
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ void u8g_spiSend_sw_AVR_mode_0(uint8_t val) {
|
|||||||
volatile uint8_t *outData = u8g_outData,
|
volatile uint8_t *outData = u8g_outData,
|
||||||
*outClock = u8g_outClock;
|
*outClock = u8g_outClock;
|
||||||
U8G_ATOMIC_START();
|
U8G_ATOMIC_START();
|
||||||
LOOP_L_N(i, 8) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
if (val & 0x80)
|
if (val & 0x80)
|
||||||
*outData |= bitData;
|
*outData |= bitData;
|
||||||
else
|
else
|
||||||
@@ -108,7 +108,7 @@ void u8g_spiSend_sw_AVR_mode_3(uint8_t val) {
|
|||||||
volatile uint8_t *outData = u8g_outData,
|
volatile uint8_t *outData = u8g_outData,
|
||||||
*outClock = u8g_outClock;
|
*outClock = u8g_outClock;
|
||||||
U8G_ATOMIC_START();
|
U8G_ATOMIC_START();
|
||||||
LOOP_L_N(i, 8) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
*outClock &= bitNotClock;
|
*outClock &= bitNotClock;
|
||||||
if (val & 0x80)
|
if (val & 0x80)
|
||||||
*outData |= bitData;
|
*outData |= bitData;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,9 +16,10 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __AVR__
|
#ifdef __AVR__
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
@@ -27,7 +28,7 @@
|
|||||||
|
|
||||||
#include "watchdog.h"
|
#include "watchdog.h"
|
||||||
|
|
||||||
#include "../../MarlinCore.h"
|
#include "../../Marlin.h"
|
||||||
|
|
||||||
// Initialize watchdog with 8s timeout, if possible. Otherwise, make it 4s.
|
// Initialize watchdog with 8s timeout, if possible. Otherwise, make it 4s.
|
||||||
void watchdog_init() {
|
void watchdog_init() {
|
||||||
@@ -61,7 +62,7 @@ void watchdog_init() {
|
|||||||
#if ENABLED(WATCHDOG_RESET_MANUAL)
|
#if ENABLED(WATCHDOG_RESET_MANUAL)
|
||||||
ISR(WDT_vect) {
|
ISR(WDT_vect) {
|
||||||
sei(); // With the interrupt driven serial we need to allow interrupts.
|
sei(); // With the interrupt driven serial we need to allow interrupts.
|
||||||
SERIAL_ERROR_MSG(STR_WATCHDOG_FIRED);
|
SERIAL_ERROR_MSG(MSG_WATCHDOG_FIRED);
|
||||||
minkill(); // interrupt-safe final kill and infinite loop
|
minkill(); // interrupt-safe final kill and infinite loop
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,9 +16,10 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef ARDUINO_ARCH_SAM
|
#ifdef ARDUINO_ARCH_SAM
|
||||||
|
|
||||||
#include "../../core/macros.h"
|
#include "../../core/macros.h"
|
||||||
+117
-130
@@ -1,30 +1,3 @@
|
|||||||
/**
|
|
||||||
* Marlin 3D Printer Firmware
|
|
||||||
*
|
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
||||||
* 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
|
|
||||||
* 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/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#ifdef ARDUINO_ARCH_SAM
|
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
|
||||||
|
|
||||||
#if ENABLED(FLASH_EEPROM_EMULATION)
|
|
||||||
|
|
||||||
/* EEPROM emulation over flash with reduced wear
|
/* EEPROM emulation over flash with reduced wear
|
||||||
*
|
*
|
||||||
@@ -56,7 +29,14 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#define EE_EMU_DEBUG
|
#ifdef ARDUINO_ARCH_SAM
|
||||||
|
|
||||||
|
#include "../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
|
#if ENABLED(EEPROM_SETTINGS) && NONE(I2C_EEPROM, SPI_EEPROM)
|
||||||
|
|
||||||
|
#include "../shared/Marduino.h"
|
||||||
|
#include "../shared/persistent_store_api.h"
|
||||||
|
|
||||||
#define EEPROMSize 4096
|
#define EEPROMSize 4096
|
||||||
#define PagesPerGroup 128
|
#define PagesPerGroup 128
|
||||||
@@ -133,18 +113,15 @@ static uint8_t buffer[256] = {0}, // The RAM buffer to accumulate writes
|
|||||||
curPage = 0, // Current FLASH page inside the group
|
curPage = 0, // Current FLASH page inside the group
|
||||||
curGroup = 0xFF; // Current FLASH group
|
curGroup = 0xFF; // Current FLASH group
|
||||||
|
|
||||||
#define DEBUG_OUT ENABLED(EE_EMU_DEBUG)
|
//#define EE_EMU_DEBUG
|
||||||
#include "../../core/debug_out.h"
|
#ifdef EE_EMU_DEBUG
|
||||||
|
static void ee_Dump(int page,const void* data) {
|
||||||
static void ee_Dump(const int page, const void* data) {
|
|
||||||
|
|
||||||
#ifdef EE_EMU_DEBUG
|
|
||||||
|
|
||||||
const uint8_t* c = (const uint8_t*) data;
|
const uint8_t* c = (const uint8_t*) data;
|
||||||
char buffer[80];
|
char buffer[80];
|
||||||
|
|
||||||
sprintf_P(buffer, PSTR("Page: %d (0x%04x)\n"), page, page);
|
sprintf_P(buffer, PSTR("Page: %d (0x%04x)\n"), page, page);
|
||||||
DEBUG_ECHO(buffer);
|
SERIAL_ECHO(buffer);
|
||||||
|
|
||||||
char* p = &buffer[0];
|
char* p = &buffer[0];
|
||||||
for (int i = 0; i< PageSize; ++i) {
|
for (int i = 0; i< PageSize; ++i) {
|
||||||
@@ -154,16 +131,12 @@ static void ee_Dump(const int page, const void* data) {
|
|||||||
if ((i & 0xF) == 0xF) {
|
if ((i & 0xF) == 0xF) {
|
||||||
*p++ = '\n';
|
*p++ = '\n';
|
||||||
*p = 0;
|
*p = 0;
|
||||||
DEBUG_ECHO(buffer);
|
SERIAL_ECHO(buffer);
|
||||||
p = &buffer[0];
|
p = &buffer[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#else
|
#endif
|
||||||
UNUSED(page);
|
|
||||||
UNUSED(data);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Flash Writing Protection Key */
|
/* Flash Writing Protection Key */
|
||||||
#define FWP_KEY 0x5Au
|
#define FWP_KEY 0x5Au
|
||||||
@@ -176,16 +149,17 @@ static void ee_Dump(const int page, const void* data) {
|
|||||||
#define EEFC_ERROR_FLAGS (EEFC_FSR_FLOCKE | EEFC_FSR_FCMDE)
|
#define EEFC_ERROR_FLAGS (EEFC_FSR_FLOCKE | EEFC_FSR_FCMDE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes the contents of the specified page (no previous erase)
|
* Writes the contents of the specified page (no previous erase)
|
||||||
* @param page (page #)
|
* @param page (page #)
|
||||||
* @param data (pointer to the data buffer)
|
* @param data (pointer to the data buffer)
|
||||||
*/
|
*/
|
||||||
__attribute__ ((long_call, section (".ramfunc")))
|
__attribute__ ((long_call, section (".ramfunc")))
|
||||||
static bool ee_PageWrite(uint16_t page, const void* data) {
|
static bool ee_PageWrite(uint16_t page,const void* data) {
|
||||||
|
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
uint32_t addrflash = uint32_t(getFlashStorage(page));
|
uint32_t addrflash = ((uint32_t)getFlashStorage(page));
|
||||||
|
|
||||||
// Read the flash contents
|
// Read the flash contents
|
||||||
uint32_t pageContents[PageSize>>2];
|
uint32_t pageContents[PageSize>>2];
|
||||||
@@ -200,11 +174,13 @@ static bool ee_PageWrite(uint16_t page, const void* data) {
|
|||||||
for (i = 0; i <PageSize >> 2; i++)
|
for (i = 0; i <PageSize >> 2; i++)
|
||||||
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();
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHOLNPAIR("EEPROM PageWrite ", page);
|
SERIAL_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
|
SERIAL_ECHOLNPAIR("EEPROM PageWrite ", page);
|
||||||
DEBUG_ECHOLNPAIR(" base address ", (uint32_t)getFlashStorage(0));
|
SERIAL_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
|
||||||
DEBUG_FLUSH();
|
SERIAL_ECHOLNPAIR(" base address ", (uint32_t)getFlashStorage(0));
|
||||||
|
SERIAL_FLUSH();
|
||||||
|
#endif
|
||||||
|
|
||||||
// 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
|
||||||
Efc *efc;
|
Efc *efc;
|
||||||
@@ -246,8 +222,10 @@ static bool ee_PageWrite(uint16_t page, const void* data) {
|
|||||||
// Reenable interrupts
|
// Reenable interrupts
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ", page);
|
SERIAL_ECHO_START();
|
||||||
|
SERIAL_ECHOLNPAIR("EEPROM Unlock failure for page ", page);
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,9 +249,10 @@ static bool ee_PageWrite(uint16_t page, const void* data) {
|
|||||||
// Reenable interrupts
|
// Reenable interrupts
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Write failure for page ", page);
|
SERIAL_ECHO_START();
|
||||||
|
SERIAL_ECHOLNPAIR("EEPROM Write failure for page ", page);
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,11 +266,11 @@ static bool ee_PageWrite(uint16_t page, const void* data) {
|
|||||||
if (memcmp(getFlashStorage(page),data,PageSize)) {
|
if (memcmp(getFlashStorage(page),data,PageSize)) {
|
||||||
|
|
||||||
#ifdef EE_EMU_DEBUG
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHO_START();
|
SERIAL_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Verify Write failure for page ", page);
|
SERIAL_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);
|
||||||
|
|
||||||
// Calculate count of changed bits
|
// Calculate count of changed bits
|
||||||
uint32_t* p1 = (uint32_t*)addrflash;
|
uint32_t* p1 = (uint32_t*)addrflash;
|
||||||
@@ -307,7 +286,7 @@ static bool ee_PageWrite(uint16_t page, const void* data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DEBUG_ECHOLNPAIR("--> Differing bits: ", count);
|
SERIAL_ECHOLNPAIR("--> Differing bits: ", count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -324,13 +303,15 @@ __attribute__ ((long_call, section (".ramfunc")))
|
|||||||
static bool ee_PageErase(uint16_t page) {
|
static bool ee_PageErase(uint16_t page) {
|
||||||
|
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
uint32_t addrflash = uint32_t(getFlashStorage(page));
|
uint32_t addrflash = ((uint32_t)getFlashStorage(page));
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHOLNPAIR("EEPROM PageErase ", page);
|
SERIAL_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
|
SERIAL_ECHOLNPAIR("EEPROM PageErase ", page);
|
||||||
DEBUG_ECHOLNPAIR(" base address ", (uint32_t)getFlashStorage(0));
|
SERIAL_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
|
||||||
DEBUG_FLUSH();
|
SERIAL_ECHOLNPAIR(" base address ", (uint32_t)getFlashStorage(0));
|
||||||
|
SERIAL_FLUSH();
|
||||||
|
#endif
|
||||||
|
|
||||||
// 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
|
||||||
Efc *efc;
|
Efc *efc;
|
||||||
@@ -371,9 +352,10 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
// Reenable interrupts
|
// Reenable interrupts
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ",page);
|
SERIAL_ECHO_START();
|
||||||
|
SERIAL_ECHOLNPAIR("EEPROM Unlock failure for page ",page);
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -395,9 +377,10 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
// Reenable interrupts
|
// Reenable interrupts
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Erase failure for page ",page);
|
SERIAL_ECHO_START();
|
||||||
|
SERIAL_ECHOLNPAIR("EEPROM Erase failure for page ",page);
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -411,17 +394,20 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
uint32_t * aligned_src = (uint32_t *) addrflash;
|
uint32_t * aligned_src = (uint32_t *) addrflash;
|
||||||
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_ECHOLNPAIR("EEPROM Verify Erase failure for page ",page);
|
#ifdef EE_EMU_DEBUG
|
||||||
ee_Dump(page, (uint32_t *)addrflash);
|
SERIAL_ECHO_START();
|
||||||
|
SERIAL_ECHOLNPAIR("EEPROM Verify Erase failure for page ",page);
|
||||||
|
|
||||||
|
ee_Dump( page,(uint32_t *) addrflash);
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
static uint8_t ee_Read(uint32_t address, bool excludeRAMBuffer = false) {
|
||||||
static uint8_t ee_Read(uint32_t address, bool excludeRAMBuffer=false) {
|
|
||||||
|
|
||||||
uint32_t baddr;
|
uint32_t baddr;
|
||||||
uint32_t blen;
|
uint32_t blen;
|
||||||
@@ -504,7 +490,7 @@ static uint8_t ee_Read(uint32_t address, bool excludeRAMBuffer=false) {
|
|||||||
return 0xFF;
|
return 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t ee_GetAddrRange(uint32_t address, bool excludeRAMBuffer=false) {
|
static uint32_t ee_GetAddrRange(uint32_t address, bool excludeRAMBuffer = false) {
|
||||||
uint32_t baddr,
|
uint32_t baddr,
|
||||||
blen,
|
blen,
|
||||||
nextAddr = 0xFFFF,
|
nextAddr = 0xFFFF,
|
||||||
@@ -596,7 +582,7 @@ static bool ee_IsPageClean(int page) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ee_Flush(uint32_t overrideAddress = 0xFFFFFFFF, uint8_t overrideData=0xFF) {
|
static bool ee_Flush(uint32_t overrideAddress = 0xFFFFFFFF, uint8_t overrideData = 0xFF) {
|
||||||
|
|
||||||
// Check if RAM buffer has something to be written
|
// Check if RAM buffer has something to be written
|
||||||
bool isEmpty = true;
|
bool isEmpty = true;
|
||||||
@@ -922,9 +908,11 @@ static void ee_Init() {
|
|||||||
// If all groups seem to be used, default to first group
|
// If all groups seem to be used, default to first group
|
||||||
if (curGroup >= GroupCount) curGroup = 0;
|
if (curGroup >= GroupCount) curGroup = 0;
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Current Group: ",curGroup);
|
SERIAL_ECHO_START();
|
||||||
DEBUG_FLUSH();
|
SERIAL_ECHOLNPAIR("EEPROM Current Group: ",curGroup);
|
||||||
|
SERIAL_FLUSH();
|
||||||
|
#endif
|
||||||
|
|
||||||
// Now, validate that all the other group pages are empty
|
// Now, validate that all the other group pages are empty
|
||||||
for (int grp = 0; grp < GroupCount; grp++) {
|
for (int grp = 0; grp < GroupCount; grp++) {
|
||||||
@@ -932,9 +920,11 @@ 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();
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on group ", grp);
|
SERIAL_ECHO_START();
|
||||||
DEBUG_FLUSH();
|
SERIAL_ECHOLNPAIR("EEPROM Page ", page, " not clean on group ", grp);
|
||||||
|
SERIAL_FLUSH();
|
||||||
|
#endif
|
||||||
ee_PageErase(grp * PagesPerGroup + page);
|
ee_PageErase(grp * PagesPerGroup + page);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -944,69 +934,66 @@ static void ee_Init() {
|
|||||||
// and also validate that all the other ones are clean
|
// and also validate that all the other ones are clean
|
||||||
for (curPage = 0; curPage < PagesPerGroup; curPage++) {
|
for (curPage = 0; curPage < PagesPerGroup; curPage++) {
|
||||||
if (ee_IsPageClean(curGroup * PagesPerGroup + curPage)) {
|
if (ee_IsPageClean(curGroup * PagesPerGroup + curPage)) {
|
||||||
ee_Dump(curGroup * PagesPerGroup + curPage, getFlashStorage(curGroup * PagesPerGroup + curPage));
|
#ifdef EE_EMU_DEBUG
|
||||||
|
ee_Dump(curGroup * PagesPerGroup + curPage, getFlashStorage(curGroup * PagesPerGroup + curPage));
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Active page: ", curPage);
|
SERIAL_ECHO_START();
|
||||||
DEBUG_FLUSH();
|
SERIAL_ECHOLNPAIR("EEPROM Active page: ", curPage);
|
||||||
|
SERIAL_FLUSH();
|
||||||
|
#endif
|
||||||
|
|
||||||
// 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();
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on active group ", curGroup);
|
SERIAL_ECHO_START();
|
||||||
DEBUG_FLUSH();
|
SERIAL_ECHOLNPAIR("EEPROM Page ", page, " not clean on active group ", curGroup);
|
||||||
ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
|
SERIAL_FLUSH();
|
||||||
|
ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
|
||||||
|
#endif
|
||||||
ee_PageErase(curGroup * PagesPerGroup + page);
|
ee_PageErase(curGroup * PagesPerGroup + page);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PersistentStore -----------------------------------------------------------*/
|
uint8_t eeprom_read_byte(uint8_t* addr) {
|
||||||
|
ee_Init();
|
||||||
|
return ee_Read((uint32_t)addr);
|
||||||
|
}
|
||||||
|
|
||||||
#include "../shared/eeprom_api.h"
|
void eeprom_write_byte(uint8_t* addr, uint8_t value) {
|
||||||
|
ee_Init();
|
||||||
|
ee_Write((uint32_t)addr, value);
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef MARLIN_EEPROM_SIZE
|
void eeprom_update_block(const void* __src, void* __dst, size_t __n) {
|
||||||
#define MARLIN_EEPROM_SIZE 0x1000 // 4KB
|
uint8_t* dst = (uint8_t*)__dst;
|
||||||
#endif
|
const uint8_t* src = (const uint8_t*)__src;
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
while (__n--) {
|
||||||
bool PersistentStore::access_start() { ee_Init(); return true; }
|
eeprom_write_byte(dst, *src);
|
||||||
bool PersistentStore::access_finish() { ee_Flush(); return true; }
|
++dst;
|
||||||
|
++src;
|
||||||
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
|
||||||
while (size--) {
|
|
||||||
uint8_t * const p = (uint8_t * const)pos;
|
|
||||||
uint8_t v = *value;
|
|
||||||
// EEPROM has only ~100,000 write cycles,
|
|
||||||
// so only write bytes that have changed!
|
|
||||||
if (v != ee_Read(uint32_t(p))) {
|
|
||||||
ee_Write(uint32_t(p), v);
|
|
||||||
delay(2);
|
|
||||||
if (ee_Read(uint32_t(p)) != v) {
|
|
||||||
SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
crc16(crc, &v, 1);
|
|
||||||
pos++;
|
|
||||||
value++;
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
|
void eeprom_read_block(void* __dst, const void* __src, size_t __n) {
|
||||||
do {
|
uint8_t* dst = (uint8_t*)__dst;
|
||||||
uint8_t c = ee_Read(uint32_t(pos));
|
uint8_t* src = (uint8_t*)__src;
|
||||||
if (writing) *value = c;
|
while (__n--) {
|
||||||
crc16(crc, &c, 1);
|
*dst = eeprom_read_byte(src);
|
||||||
pos++;
|
++dst;
|
||||||
value++;
|
++src;
|
||||||
} while (--size);
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // FLASH_EEPROM_EMULATION
|
void eeprom_flush() {
|
||||||
#endif // ARDUINO_ARCH_SAM
|
ee_Flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // EEPROM_SETTINGS && (!I2C_EEPROM && !SPI_EEPROM)
|
||||||
|
#endif // ARDUINO_ARCH_AVR
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.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
|
||||||
@@ -14,8 +14,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -95,8 +94,8 @@ int freeMemory() {
|
|||||||
// ADC
|
// ADC
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
void HAL_adc_start_conversion(const uint8_t ch) {
|
void HAL_adc_start_conversion(const uint8_t adc_pin) {
|
||||||
HAL_adc_result = analogRead(ch);
|
HAL_adc_result = analogRead(adc_pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t HAL_adc_get_result() {
|
uint16_t HAL_adc_get_result() {
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
*
|
*
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
||||||
* Copyright (c) 2015-2016 Nico Tonnhofer wurstnase.reprap@gmail.com
|
* Copyright (c) 2015-2016 Nico Tonnhofer wurstnase.reprap@gmail.com
|
||||||
*
|
*
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -30,70 +30,34 @@
|
|||||||
#define CPU_32_BIT
|
#define CPU_32_BIT
|
||||||
|
|
||||||
#include "../shared/Marduino.h"
|
#include "../shared/Marduino.h"
|
||||||
#include "../shared/eeprom_if.h"
|
|
||||||
#include "../shared/math_32bit.h"
|
#include "../shared/math_32bit.h"
|
||||||
#include "../shared/HAL_SPI.h"
|
#include "../shared/HAL_SPI.h"
|
||||||
#include "fastio.h"
|
#include "fastio.h"
|
||||||
#include "watchdog.h"
|
#include "watchdog.h"
|
||||||
|
#include "timers.h"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
// Define MYSERIAL0/1 before MarlinSerial includes!
|
// Serial ports
|
||||||
#if SERIAL_PORT == -1 || ENABLED(EMERGENCY_PARSER)
|
#if !WITHIN(SERIAL_PORT, -1, 3)
|
||||||
#define MYSERIAL0 customizedSerial1
|
#error "SERIAL_PORT must be from -1 to 3"
|
||||||
#elif SERIAL_PORT == 0
|
|
||||||
#define MYSERIAL0 Serial
|
|
||||||
#elif SERIAL_PORT == 1
|
|
||||||
#define MYSERIAL0 Serial1
|
|
||||||
#elif SERIAL_PORT == 2
|
|
||||||
#define MYSERIAL0 Serial2
|
|
||||||
#elif SERIAL_PORT == 3
|
|
||||||
#define MYSERIAL0 Serial3
|
|
||||||
#else
|
|
||||||
#error "The required SERIAL_PORT must be from -1 to 3. Please update your configuration."
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// MYSERIAL0 required before MarlinSerial includes!
|
||||||
|
#define MYSERIAL0 customizedSerial1
|
||||||
|
|
||||||
#ifdef SERIAL_PORT_2
|
#ifdef SERIAL_PORT_2
|
||||||
#if SERIAL_PORT_2 == SERIAL_PORT
|
#if !WITHIN(SERIAL_PORT_2, -1, 3)
|
||||||
#error "SERIAL_PORT_2 must be different from SERIAL_PORT. Please update your configuration."
|
#error "SERIAL_PORT_2 must be from -1 to 3"
|
||||||
#elif SERIAL_PORT_2 == -1 || ENABLED(EMERGENCY_PARSER)
|
#elif SERIAL_PORT_2 == SERIAL_PORT
|
||||||
#define MYSERIAL1 customizedSerial2
|
#error "SERIAL_PORT_2 must be different than SERIAL_PORT"
|
||||||
#elif SERIAL_PORT_2 == 0
|
|
||||||
#define MYSERIAL1 Serial
|
|
||||||
#elif SERIAL_PORT_2 == 1
|
|
||||||
#define MYSERIAL1 Serial1
|
|
||||||
#elif SERIAL_PORT_2 == 2
|
|
||||||
#define MYSERIAL1 Serial2
|
|
||||||
#elif SERIAL_PORT_2 == 3
|
|
||||||
#define MYSERIAL1 Serial3
|
|
||||||
#else
|
|
||||||
#error "SERIAL_PORT_2 must be from -1 to 3. Please update your configuration."
|
|
||||||
#endif
|
#endif
|
||||||
#define NUM_SERIAL 2
|
#define NUM_SERIAL 2
|
||||||
|
#define MYSERIAL1 customizedSerial2
|
||||||
#else
|
#else
|
||||||
#define NUM_SERIAL 1
|
#define NUM_SERIAL 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DGUS_SERIAL_PORT
|
|
||||||
#if DGUS_SERIAL_PORT == SERIAL_PORT
|
|
||||||
#error "DGUS_SERIAL_PORT must be different from SERIAL_PORT. Please update your configuration."
|
|
||||||
#elif defined(SERIAL_PORT_2) && DGUS_SERIAL_PORT == SERIAL_PORT_2
|
|
||||||
#error "DGUS_SERIAL_PORT must be different than SERIAL_PORT_2. Please update your configuration."
|
|
||||||
#elif DGUS_SERIAL_PORT == -1
|
|
||||||
#define DGUS_SERIAL internalDgusSerial
|
|
||||||
#elif DGUS_SERIAL_PORT == 0
|
|
||||||
#define DGUS_SERIAL Serial
|
|
||||||
#elif DGUS_SERIAL_PORT == 1
|
|
||||||
#define DGUS_SERIAL Serial1
|
|
||||||
#elif DGUS_SERIAL_PORT == 2
|
|
||||||
#define DGUS_SERIAL Serial2
|
|
||||||
#elif DGUS_SERIAL_PORT == 3
|
|
||||||
#define DGUS_SERIAL Serial3
|
|
||||||
#else
|
|
||||||
#error "DGUS_SERIAL_PORT must be from -1 to 3. Please update your configuration."
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "MarlinSerial.h"
|
#include "MarlinSerial.h"
|
||||||
#include "MarlinSerialUSB.h"
|
#include "MarlinSerialUSB.h"
|
||||||
|
|
||||||
@@ -118,8 +82,8 @@ typedef int8_t pin_t;
|
|||||||
//
|
//
|
||||||
// Interrupts
|
// Interrupts
|
||||||
//
|
//
|
||||||
#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq()
|
#define CRITICAL_SECTION_START uint32_t primask = __get_PRIMASK(); __disable_irq()
|
||||||
#define CRITICAL_SECTION_END() if (!primask) __enable_irq()
|
#define CRITICAL_SECTION_END if (!primask) __enable_irq()
|
||||||
#define ISRS_ENABLED() (!__get_PRIMASK())
|
#define ISRS_ENABLED() (!__get_PRIMASK())
|
||||||
#define ENABLE_ISRS() __enable_irq()
|
#define ENABLE_ISRS() __enable_irq()
|
||||||
#define DISABLE_ISRS() __disable_irq()
|
#define DISABLE_ISRS() __disable_irq()
|
||||||
@@ -130,6 +94,14 @@ void sei(); // Enable interrupts
|
|||||||
void HAL_clear_reset_source(); // clear reset reason
|
void HAL_clear_reset_source(); // clear reset reason
|
||||||
uint8_t HAL_get_reset_source(); // get reset reason
|
uint8_t HAL_get_reset_source(); // get reset reason
|
||||||
|
|
||||||
|
//
|
||||||
|
// EEPROM
|
||||||
|
//
|
||||||
|
void eeprom_write_byte(uint8_t *pos, unsigned char value);
|
||||||
|
uint8_t eeprom_read_byte(uint8_t *pos);
|
||||||
|
void eeprom_read_block (void *__dst, const void *__src, size_t __n);
|
||||||
|
void eeprom_update_block (const void *__src, void *__dst, size_t __n);
|
||||||
|
|
||||||
//
|
//
|
||||||
// ADC
|
// ADC
|
||||||
//
|
//
|
||||||
@@ -139,17 +111,15 @@ extern uint16_t HAL_adc_result; // result of last ADC conversion
|
|||||||
#define analogInputToDigitalPin(p) ((p < 12u) ? (p) + 54u : -1)
|
#define analogInputToDigitalPin(p) ((p < 12u) ? (p) + 54u : -1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define HAL_ANALOG_SELECT(ch)
|
#define HAL_ANALOG_SELECT(pin)
|
||||||
|
|
||||||
inline void HAL_adc_init() {}//todo
|
inline void HAL_adc_init() {}//todo
|
||||||
|
|
||||||
#define HAL_ADC_VREF 3.3
|
#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin)
|
||||||
#define HAL_ADC_RESOLUTION 10
|
|
||||||
#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch)
|
|
||||||
#define HAL_READ_ADC() HAL_adc_result
|
#define HAL_READ_ADC() HAL_adc_result
|
||||||
#define HAL_ADC_READY() true
|
#define HAL_ADC_READY() true
|
||||||
|
|
||||||
void HAL_adc_start_conversion(const uint8_t ch);
|
void HAL_adc_start_conversion(const uint8_t adc_pin);
|
||||||
uint16_t HAL_adc_get_result();
|
uint16_t HAL_adc_get_result();
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -240,7 +240,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// all the others
|
// all the others
|
||||||
static uint32_t spiDelayCyclesX4 = (F_CPU) / 1000000; // 4µs => 125khz
|
static uint32_t spiDelayCyclesX4 = (F_CPU) / 1000000; // 4uS => 125khz
|
||||||
|
|
||||||
static uint8_t spiTransferX(uint8_t b) { // using Mode 0
|
static uint8_t spiTransferX(uint8_t b) { // using Mode 0
|
||||||
int bits = 8;
|
int bits = 8;
|
||||||
+6
-6
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -63,13 +63,13 @@ static pfnISR_Handler* get_relocated_table_addr() {
|
|||||||
memcpy(&ram_tab, romtab, sizeof(ram_tab));
|
memcpy(&ram_tab, romtab, sizeof(ram_tab));
|
||||||
|
|
||||||
// Disable global interrupts
|
// Disable global interrupts
|
||||||
CRITICAL_SECTION_START();
|
CRITICAL_SECTION_START;
|
||||||
|
|
||||||
// Set the vector table base address to the SRAM copy
|
// Set the vector table base address to the SRAM copy
|
||||||
SCB->VTOR = (uint32_t)(&ram_tab);
|
SCB->VTOR = (uint32_t)(&ram_tab);
|
||||||
|
|
||||||
// Reenable interrupts
|
// Reenable interrupts
|
||||||
CRITICAL_SECTION_END();
|
CRITICAL_SECTION_END;
|
||||||
|
|
||||||
// Return the address of the table
|
// Return the address of the table
|
||||||
return (pfnISR_Handler*)(&ram_tab);
|
return (pfnISR_Handler*)(&ram_tab);
|
||||||
@@ -80,7 +80,7 @@ pfnISR_Handler install_isr(IRQn_Type irq, pfnISR_Handler newHandler) {
|
|||||||
pfnISR_Handler *isrtab = get_relocated_table_addr();
|
pfnISR_Handler *isrtab = get_relocated_table_addr();
|
||||||
|
|
||||||
// Disable global interrupts
|
// Disable global interrupts
|
||||||
CRITICAL_SECTION_START();
|
CRITICAL_SECTION_START;
|
||||||
|
|
||||||
// Get the original handler
|
// Get the original handler
|
||||||
pfnISR_Handler oldHandler = isrtab[irq + 16];
|
pfnISR_Handler oldHandler = isrtab[irq + 16];
|
||||||
@@ -89,7 +89,7 @@ pfnISR_Handler install_isr(IRQn_Type irq, pfnISR_Handler newHandler) {
|
|||||||
isrtab[irq + 16] = newHandler;
|
isrtab[irq + 16] = newHandler;
|
||||||
|
|
||||||
// Reenable interrupts
|
// Reenable interrupts
|
||||||
CRITICAL_SECTION_END();
|
CRITICAL_SECTION_END;
|
||||||
|
|
||||||
// Return the original one
|
// Return the original one
|
||||||
return oldHandler;
|
return oldHandler;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#include "MarlinSerial.h"
|
#include "MarlinSerial.h"
|
||||||
#include "InterruptVectors.h"
|
#include "InterruptVectors.h"
|
||||||
#include "../../MarlinCore.h"
|
#include "../../Marlin.h"
|
||||||
|
|
||||||
template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_r MarlinSerial<Cfg>::rx_buffer = { 0, 0, { 0 } };
|
template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_r MarlinSerial<Cfg>::rx_buffer = { 0, 0, { 0 } };
|
||||||
template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_t MarlinSerial<Cfg>::tx_buffer = { 0 };
|
template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_t MarlinSerial<Cfg>::tx_buffer = { 0 };
|
||||||
@@ -45,7 +45,7 @@ template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_pos_t MarlinSeria
|
|||||||
// A SW memory barrier, to ensure GCC does not overoptimize loops
|
// A SW memory barrier, to ensure GCC does not overoptimize loops
|
||||||
#define sw_barrier() asm volatile("": : :"memory");
|
#define sw_barrier() asm volatile("": : :"memory");
|
||||||
|
|
||||||
#include "../../feature/e_parser.h"
|
#include "../../feature/emergency_parser.h"
|
||||||
|
|
||||||
// (called with RX interrupts disabled)
|
// (called with RX interrupts disabled)
|
||||||
template<typename Cfg>
|
template<typename Cfg>
|
||||||
@@ -606,7 +606,7 @@ void MarlinSerial<Cfg>::printFloat(double number, uint8_t digits) {
|
|||||||
|
|
||||||
// Round correctly so that print(1.999, 2) prints as "2.00"
|
// Round correctly so that print(1.999, 2) prints as "2.00"
|
||||||
double rounding = 0.5;
|
double rounding = 0.5;
|
||||||
LOOP_L_N(i, digits) rounding *= 0.1;
|
for (uint8_t i = 0; i < digits; ++i) rounding *= 0.1;
|
||||||
number += rounding;
|
number += rounding;
|
||||||
|
|
||||||
// Extract the integer part of the number and print it
|
// Extract the integer part of the number and print it
|
||||||
@@ -629,13 +629,23 @@ void MarlinSerial<Cfg>::printFloat(double number, uint8_t digits) {
|
|||||||
|
|
||||||
// If not using the USB port as serial port
|
// If not using the USB port as serial port
|
||||||
#if SERIAL_PORT >= 0
|
#if SERIAL_PORT >= 0
|
||||||
template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT>>; // Define
|
|
||||||
MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1; // Instantiate
|
// Preinstantiate
|
||||||
|
template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT>>;
|
||||||
|
|
||||||
|
// Instantiate
|
||||||
|
MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0
|
#ifdef SERIAL_PORT_2
|
||||||
template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>>; // Define
|
|
||||||
MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2; // Instantiate
|
// Preinstantiate
|
||||||
|
template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>>;
|
||||||
|
|
||||||
|
// Instantiate
|
||||||
|
MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ARDUINO_ARCH_SAM
|
#endif // ARDUINO_ARCH_SAM
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -27,9 +27,9 @@
|
|||||||
* Based on MarlinSerial for AVR, copyright (c) 2006 Nicholas Zambetti. All right reserved.
|
* Based on MarlinSerial for AVR, copyright (c) 2006 Nicholas Zambetti. All right reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <WString.h>
|
#include "../shared/MarlinSerial.h"
|
||||||
|
|
||||||
#include "../../inc/MarlinConfigPre.h"
|
#include <WString.h>
|
||||||
|
|
||||||
#define DEC 10
|
#define DEC 10
|
||||||
#define HEX 16
|
#define HEX 16
|
||||||
@@ -163,18 +163,22 @@ struct MarlinSerialCfg {
|
|||||||
static constexpr int PORT = serial;
|
static constexpr int PORT = serial;
|
||||||
static constexpr unsigned int RX_SIZE = RX_BUFFER_SIZE;
|
static constexpr unsigned int RX_SIZE = RX_BUFFER_SIZE;
|
||||||
static constexpr unsigned int TX_SIZE = TX_BUFFER_SIZE;
|
static constexpr unsigned int TX_SIZE = TX_BUFFER_SIZE;
|
||||||
static constexpr bool XONOFF = ENABLED(SERIAL_XON_XOFF);
|
static constexpr bool XONOFF = bSERIAL_XON_XOFF;
|
||||||
static constexpr bool EMERGENCYPARSER = ENABLED(EMERGENCY_PARSER);
|
static constexpr bool EMERGENCYPARSER = bEMERGENCY_PARSER;
|
||||||
static constexpr bool DROPPED_RX = ENABLED(SERIAL_STATS_DROPPED_RX);
|
static constexpr bool DROPPED_RX = bSERIAL_STATS_DROPPED_RX;
|
||||||
static constexpr bool RX_OVERRUNS = ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS);
|
static constexpr bool RX_OVERRUNS = bSERIAL_STATS_RX_BUFFER_OVERRUNS;
|
||||||
static constexpr bool RX_FRAMING_ERRORS = ENABLED(SERIAL_STATS_RX_FRAMING_ERRORS);
|
static constexpr bool RX_FRAMING_ERRORS = bSERIAL_STATS_RX_FRAMING_ERRORS;
|
||||||
static constexpr bool MAX_RX_QUEUED = ENABLED(SERIAL_STATS_MAX_RX_QUEUED);
|
static constexpr bool MAX_RX_QUEUED = bSERIAL_STATS_MAX_RX_QUEUED;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if SERIAL_PORT >= 0
|
#if SERIAL_PORT >= 0
|
||||||
extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0
|
extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
|
||||||
|
|
||||||
|
#endif // SERIAL_PORT >= 0
|
||||||
|
|
||||||
|
#ifdef SERIAL_PORT_2
|
||||||
|
|
||||||
extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
|
extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
+14
-14
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -29,12 +29,12 @@
|
|||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
#if HAS_USB_SERIAL
|
#if SERIAL_PORT == -1
|
||||||
|
|
||||||
#include "MarlinSerialUSB.h"
|
#include "MarlinSerialUSB.h"
|
||||||
|
|
||||||
#if ENABLED(EMERGENCY_PARSER)
|
#if ENABLED(EMERGENCY_PARSER)
|
||||||
#include "../../feature/e_parser.h"
|
#include "../../feature/emergency_parser.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Imports from Atmel USB Stack/CDC implementation
|
// Imports from Atmel USB Stack/CDC implementation
|
||||||
@@ -73,7 +73,9 @@ int MarlinSerialUSB::peek() {
|
|||||||
|
|
||||||
pending_char = udi_cdc_getc();
|
pending_char = udi_cdc_getc();
|
||||||
|
|
||||||
TERN_(EMERGENCY_PARSER, emergency_parser.update(emergency_state, (char)pending_char));
|
#if ENABLED(EMERGENCY_PARSER)
|
||||||
|
emergency_parser.update(emergency_state, (char)pending_char);
|
||||||
|
#endif
|
||||||
|
|
||||||
return pending_char;
|
return pending_char;
|
||||||
}
|
}
|
||||||
@@ -95,7 +97,9 @@ int MarlinSerialUSB::read() {
|
|||||||
|
|
||||||
int c = udi_cdc_getc();
|
int c = udi_cdc_getc();
|
||||||
|
|
||||||
TERN_(EMERGENCY_PARSER, emergency_parser.update(emergency_state, (char)c));
|
#if ENABLED(EMERGENCY_PARSER)
|
||||||
|
emergency_parser.update(emergency_state, (char)c);
|
||||||
|
#endif
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
@@ -255,7 +259,7 @@ void MarlinSerialUSB::printFloat(double number, uint8_t digits) {
|
|||||||
|
|
||||||
// Round correctly so that print(1.999, 2) prints as "2.00"
|
// Round correctly so that print(1.999, 2) prints as "2.00"
|
||||||
double rounding = 0.5;
|
double rounding = 0.5;
|
||||||
LOOP_L_N(i, digits)
|
for (uint8_t i = 0; i < digits; ++i)
|
||||||
rounding *= 0.1;
|
rounding *= 0.1;
|
||||||
|
|
||||||
number += rounding;
|
number += rounding;
|
||||||
@@ -279,12 +283,8 @@ void MarlinSerialUSB::printFloat(double number, uint8_t digits) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Preinstantiate
|
// Preinstantiate
|
||||||
#if SERIAL_PORT == -1
|
MarlinSerialUSB customizedSerial1;
|
||||||
MarlinSerialUSB customizedSerial1;
|
|
||||||
#endif
|
#endif // SERIAL_PORT == -1
|
||||||
#if SERIAL_PORT_2 == -1
|
|
||||||
MarlinSerialUSB customizedSerial2;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // HAS_USB_SERIAL
|
|
||||||
#endif // ARDUINO_ARCH_SAM
|
#endif // ARDUINO_ARCH_SAM
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
#if HAS_USB_SERIAL
|
#if SERIAL_PORT == -1
|
||||||
|
|
||||||
#include <WString.h>
|
#include <WString.h>
|
||||||
|
|
||||||
@@ -88,12 +88,6 @@ private:
|
|||||||
static void printFloat(double, uint8_t);
|
static void printFloat(double, uint8_t);
|
||||||
};
|
};
|
||||||
|
|
||||||
#if SERIAL_PORT == -1
|
extern MarlinSerialUSB customizedSerial1;
|
||||||
extern MarlinSerialUSB customizedSerial1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if SERIAL_PORT_2 == -1
|
#endif // SERIAL_PORT == -1
|
||||||
extern MarlinSerialUSB customizedSerial2;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // HAS_USB_SERIAL
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -44,6 +44,7 @@
|
|||||||
|
|
||||||
#if HAS_SERVOS
|
#if HAS_SERVOS
|
||||||
|
|
||||||
|
#include "../shared/Marduino.h"
|
||||||
#include "../shared/servo.h"
|
#include "../shared/servo.h"
|
||||||
#include "../shared/servo_private.h"
|
#include "../shared/servo_private.h"
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -18,19 +18,20 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description: Tone function for Arduino Due and compatible (SAM3X8E)
|
* Description: Tone function for Arduino Due and compatible (SAM3X8E)
|
||||||
* Derived from https://forum.arduino.cc/index.php?topic=136500.msg2903012#msg2903012
|
* Derived from http://forum.arduino.cc/index.php?topic=136500.msg2903012#msg2903012
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef ARDUINO_ARCH_SAM
|
#ifdef ARDUINO_ARCH_SAM
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
#include "HAL.h"
|
#include "HAL.h"
|
||||||
|
#include "timers.h"
|
||||||
|
|
||||||
static pin_t tone_pin;
|
static pin_t tone_pin;
|
||||||
volatile static int32_t toggles;
|
volatile static int32_t toggles;
|
||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib.h>
|
||||||
|
|
||||||
#include "../../../MarlinCore.h"
|
#include "../../../Marlin.h"
|
||||||
|
|
||||||
void spiBegin();
|
void spiBegin();
|
||||||
void spiInit(uint8_t spiRate);
|
void spiInit(uint8_t spiRate);
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+4
-4
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ Pio *SCK_pPio, *MOSI_pPio;
|
|||||||
uint32_t SCK_dwMask, MOSI_dwMask;
|
uint32_t SCK_dwMask, MOSI_dwMask;
|
||||||
|
|
||||||
void u8g_spiSend_sw_DUE_mode_0(uint8_t val) { // 3MHz
|
void u8g_spiSend_sw_DUE_mode_0(uint8_t val) { // 3MHz
|
||||||
LOOP_L_N(i, 8) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
if (val & 0x80)
|
if (val & 0x80)
|
||||||
MOSI_pPio->PIO_SODR = MOSI_dwMask;
|
MOSI_pPio->PIO_SODR = MOSI_dwMask;
|
||||||
else
|
else
|
||||||
@@ -94,7 +94,7 @@ void u8g_spiSend_sw_DUE_mode_0(uint8_t val) { // 3MHz
|
|||||||
}
|
}
|
||||||
|
|
||||||
void u8g_spiSend_sw_DUE_mode_3(uint8_t val) { // 3.5MHz
|
void u8g_spiSend_sw_DUE_mode_3(uint8_t val) { // 3.5MHz
|
||||||
LOOP_L_N(i, 8) {
|
for (uint8_t i = 0; i < 8; i++) {
|
||||||
SCK_pPio->PIO_CODR = SCK_dwMask;
|
SCK_pPio->PIO_CODR = SCK_dwMask;
|
||||||
DELAY_NS(50);
|
DELAY_NS(50);
|
||||||
if (val & 0x80)
|
if (val & 0x80)
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
+35
-19
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -47,21 +47,37 @@ void endstop_ISR() { endstops.update(); }
|
|||||||
|
|
||||||
void setup_endstop_interrupts() {
|
void setup_endstop_interrupts() {
|
||||||
#define _ATTACH(P) attachInterrupt(digitalPinToInterrupt(P), endstop_ISR, CHANGE)
|
#define _ATTACH(P) attachInterrupt(digitalPinToInterrupt(P), endstop_ISR, CHANGE)
|
||||||
TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN));
|
#if HAS_X_MAX
|
||||||
TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN));
|
_ATTACH(X_MAX_PIN);
|
||||||
TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN));
|
#endif
|
||||||
TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN));
|
#if HAS_X_MIN
|
||||||
TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN));
|
_ATTACH(X_MIN_PIN);
|
||||||
TERN_(HAS_Z_MIN, _ATTACH(Z_MIN_PIN));
|
#endif
|
||||||
TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN));
|
#if HAS_Y_MAX
|
||||||
TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN));
|
_ATTACH(Y_MAX_PIN);
|
||||||
TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN));
|
#endif
|
||||||
TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN));
|
#if HAS_Y_MIN
|
||||||
TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN));
|
_ATTACH(Y_MIN_PIN);
|
||||||
TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN));
|
#endif
|
||||||
TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN));
|
#if HAS_Z_MAX
|
||||||
TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN));
|
_ATTACH(Z_MAX_PIN);
|
||||||
TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
|
#endif
|
||||||
TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
|
#if HAS_Z_MIN
|
||||||
TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
|
_ATTACH(Z_MIN_PIN);
|
||||||
|
#endif
|
||||||
|
#if HAS_Z2_MAX
|
||||||
|
_ATTACH(Z2_MAX_PIN);
|
||||||
|
#endif
|
||||||
|
#if HAS_Z2_MIN
|
||||||
|
_ATTACH(Z2_MIN_PIN);
|
||||||
|
#endif
|
||||||
|
#if HAS_Z3_MAX
|
||||||
|
_ATTACH(Z3_MAX_PIN);
|
||||||
|
#endif
|
||||||
|
#if HAS_Z3_MIN
|
||||||
|
_ATTACH(Z3_MIN_PIN);
|
||||||
|
#endif
|
||||||
|
#if HAS_Z_MIN_PROBE_PIN
|
||||||
|
_ATTACH(Z_MIN_PROBE_PIN);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
*
|
*
|
||||||
* Now you can simply SET_OUTPUT(STEP); WRITE(STEP, HIGH); WRITE(STEP, LOW);
|
* Now you can simply SET_OUTPUT(STEP); WRITE(STEP, HIGH); WRITE(STEP, LOW);
|
||||||
*
|
*
|
||||||
* Why double up on these macros? see https://gcc.gnu.org/onlinedocs/cpp/Stringification.html
|
* Why double up on these macros? see http://gcc.gnu.org/onlinedocs/cpp/Stringification.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Read a pin
|
// Read a pin
|
||||||
@@ -166,7 +166,7 @@
|
|||||||
// Set pin as output (wrapper) - reads the pin and sets the output to that value
|
// Set pin as output (wrapper) - reads the pin and sets the output to that value
|
||||||
#define SET_OUTPUT(IO) _SET_OUTPUT(IO)
|
#define SET_OUTPUT(IO) _SET_OUTPUT(IO)
|
||||||
// Set pin as PWM
|
// Set pin as PWM
|
||||||
#define SET_PWM SET_OUTPUT
|
#define SET_PWM(IO) SET_OUTPUT(IO)
|
||||||
|
|
||||||
// Check if pin is an input
|
// Check if pin is an input
|
||||||
#define IS_INPUT(IO) ((digitalPinToPort(IO)->PIO_OSR & digitalPinToBitMask(IO)) == 0)
|
#define IS_INPUT(IO) ((digitalPinToPort(IO)->PIO_OSR & digitalPinToBitMask(IO)) == 0)
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
#define IS_OUTPUT(IO) ((digitalPinToPort(IO)->PIO_OSR & digitalPinToBitMask(IO)) != 0)
|
#define IS_OUTPUT(IO) ((digitalPinToPort(IO)->PIO_OSR & digitalPinToBitMask(IO)) != 0)
|
||||||
|
|
||||||
// Shorthand
|
// Shorthand
|
||||||
#define OUT_WRITE(IO,V) do{ SET_OUTPUT(IO); WRITE(IO,V); }while(0)
|
#define OUT_WRITE(IO,V) { SET_OUTPUT(IO); WRITE(IO,V); }
|
||||||
|
|
||||||
// digitalRead/Write wrappers
|
// digitalRead/Write wrappers
|
||||||
#define extDigitalRead(IO) digitalRead(IO)
|
#define extDigitalRead(IO) digitalRead(IO)
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2019 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The PWM module is only used to generate interrupts at specified times. It
|
||||||
|
* is NOT used to directly toggle pins. The ISR writes to the pin assigned to
|
||||||
|
* that interrupt.
|
||||||
|
*
|
||||||
|
* All PWMs use the same repetition rate. The G2 needs about 10KHz min in order to
|
||||||
|
* not have obvious ripple on the Vref signals.
|
||||||
|
*
|
||||||
|
* The data structures are setup to minimize the computation done by the ISR which
|
||||||
|
* minimizes ISR execution time. Execution times are 0.8 to 1.1 microseconds.
|
||||||
|
*
|
||||||
|
* FIve PWM interrupt sources are used. Channel 0 sets the base period. All Vref
|
||||||
|
* signals are set active when this counter overflows and resets to zero. The compare
|
||||||
|
* values in channels 1-4 are set to give the desired duty cycle for that Vref pin.
|
||||||
|
* When counter 0 matches the compare value then that channel generates an interrupt.
|
||||||
|
* The ISR checks the source of the interrupt and sets the corresponding pin inactive.
|
||||||
|
*
|
||||||
|
* Some jitter in the Vref signal is OK so the interrupt priority is left at its default value.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
|
#if MB(PRINTRBOARD_G2)
|
||||||
|
|
||||||
|
#include "G2_PWM.h"
|
||||||
|
|
||||||
|
volatile uint32_t *SODR_A = &PIOA->PIO_SODR,
|
||||||
|
*SODR_B = &PIOB->PIO_SODR,
|
||||||
|
*CODR_A = &PIOA->PIO_CODR,
|
||||||
|
*CODR_B = &PIOB->PIO_CODR;
|
||||||
|
|
||||||
|
PWM_map ISR_table[NUM_PWMS] = PWM_MAP_INIT;
|
||||||
|
|
||||||
|
void Stepper::digipot_init() {
|
||||||
|
|
||||||
|
OUT_WRITE(MOTOR_CURRENT_PWM_X_PIN, 0); // init pins
|
||||||
|
OUT_WRITE(MOTOR_CURRENT_PWM_Y_PIN, 0);
|
||||||
|
OUT_WRITE(MOTOR_CURRENT_PWM_Z_PIN, 0);
|
||||||
|
OUT_WRITE(MOTOR_CURRENT_PWM_E_PIN, 0);
|
||||||
|
|
||||||
|
#define WPKEY (0x50574D << 8) // “PWM” in ASCII
|
||||||
|
#define WPCMD_DIS_SW 0 // command to disable Write Protect SW
|
||||||
|
#define WPRG_ALL (PWM_WPCR_WPRG0 | PWM_WPCR_WPRG1 | PWM_WPCR_WPRG2 | PWM_WPCR_WPRG3 | PWM_WPCR_WPRG4 | PWM_WPCR_WPRG5) // all Write Protect Groups
|
||||||
|
|
||||||
|
#define PWM_CLOCK_F F_CPU / 1000000UL // set clock to 1MHz
|
||||||
|
|
||||||
|
PMC->PMC_PCER1 = PMC_PCER1_PID36; // enable PWM controller clock (disabled on power up)
|
||||||
|
|
||||||
|
PWM->PWM_WPCR = WPKEY | WPRG_ALL | WPCMD_DIS_SW; // enable setting of all PWM registers
|
||||||
|
PWM->PWM_CLK = PWM_CLOCK_F; // enable CLK_A and set it to 1MHz, leave CLK_B disabled
|
||||||
|
PWM->PWM_CH_NUM[0].PWM_CMR = 0b1011; // set channel 0 to Clock A input & to left aligned
|
||||||
|
PWM->PWM_CH_NUM[1].PWM_CMR = 0b1011; // set channel 1 to Clock A input & to left aligned
|
||||||
|
PWM->PWM_CH_NUM[2].PWM_CMR = 0b1011; // set channel 2 to Clock A input & to left aligned
|
||||||
|
PWM->PWM_CH_NUM[3].PWM_CMR = 0b1011; // set channel 3 to Clock A input & to left aligned
|
||||||
|
PWM->PWM_CH_NUM[4].PWM_CMR = 0b1011; // set channel 4 to Clock A input & to left aligned
|
||||||
|
|
||||||
|
PWM->PWM_CH_NUM[0].PWM_CPRD = PWM_PERIOD_US; // set channel 0 Period
|
||||||
|
|
||||||
|
PWM->PWM_IER2 = PWM_IER1_CHID0; // generate interrupt when counter0 overflows
|
||||||
|
PWM->PWM_IER2 = PWM_IER2_CMPM0 | PWM_IER2_CMPM1 | PWM_IER2_CMPM2 | PWM_IER2_CMPM3 | PWM_IER2_CMPM4; // generate interrupt on compare event
|
||||||
|
|
||||||
|
PWM->PWM_CMP[1].PWM_CMPV = 0x010000000LL | G2_VREF_COUNT(G2_VREF(motor_current_setting[0])); // interrupt when counter0 == CMPV - used to set Motor 1 PWM inactive
|
||||||
|
PWM->PWM_CMP[2].PWM_CMPV = 0x010000000LL | G2_VREF_COUNT(G2_VREF(motor_current_setting[0])); // interrupt when counter0 == CMPV - used to set Motor 2 PWM inactive
|
||||||
|
PWM->PWM_CMP[3].PWM_CMPV = 0x010000000LL | G2_VREF_COUNT(G2_VREF(motor_current_setting[1])); // interrupt when counter0 == CMPV - used to set Motor 3 PWM inactive
|
||||||
|
PWM->PWM_CMP[4].PWM_CMPV = 0x010000000LL | G2_VREF_COUNT(G2_VREF(motor_current_setting[2])); // interrupt when counter0 == CMPV - used to set Motor 4 PWM inactive
|
||||||
|
|
||||||
|
PWM->PWM_CMP[1].PWM_CMPM = 0x0001; // enable compare event
|
||||||
|
PWM->PWM_CMP[2].PWM_CMPM = 0x0001; // enable compare event
|
||||||
|
PWM->PWM_CMP[3].PWM_CMPM = 0x0001; // enable compare event
|
||||||
|
PWM->PWM_CMP[4].PWM_CMPM = 0x0001; // enable compare event
|
||||||
|
|
||||||
|
PWM->PWM_SCM = PWM_SCM_UPDM_MODE0 | PWM_SCM_SYNC0 | PWM_SCM_SYNC1 | PWM_SCM_SYNC2 | PWM_SCM_SYNC3 | PWM_SCM_SYNC4; // sync 1-4 with 0, use mode 0 for updates
|
||||||
|
|
||||||
|
PWM->PWM_ENA = PWM_ENA_CHID0 | PWM_ENA_CHID1 | PWM_ENA_CHID2 | PWM_ENA_CHID3 | PWM_ENA_CHID4; // enable the channels used by G2
|
||||||
|
PWM->PWM_IER1 = PWM_IER1_CHID0 | PWM_IER1_CHID1 | PWM_IER1_CHID2 | PWM_IER1_CHID3 | PWM_IER1_CHID4; // enable interrupts for the channels used by G2
|
||||||
|
|
||||||
|
NVIC_EnableIRQ(PWM_IRQn); // Enable interrupt handler
|
||||||
|
NVIC_SetPriority(PWM_IRQn, NVIC_EncodePriority(0, 10, 0)); // normal priority for PWM module (can stand some jitter on the Vref signals)
|
||||||
|
}
|
||||||
|
|
||||||
|
void Stepper::digipot_current(const uint8_t driver, const int16_t current) {
|
||||||
|
|
||||||
|
if (!(PWM->PWM_CH_NUM[0].PWM_CPRD == PWM_PERIOD_US)) digipot_init(); // Init PWM system if needed
|
||||||
|
|
||||||
|
switch (driver) {
|
||||||
|
case 0: PWM->PWM_CMP[1].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current)); // update X & Y
|
||||||
|
PWM->PWM_CMP[2].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current));
|
||||||
|
PWM->PWM_CMP[1].PWM_CMPMUPD = 0x0001; // enable compare event
|
||||||
|
PWM->PWM_CMP[2].PWM_CMPMUPD = 0x0001; // enable compare event
|
||||||
|
PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
|
||||||
|
break;
|
||||||
|
case 1: PWM->PWM_CMP[3].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current)); // update Z
|
||||||
|
PWM->PWM_CMP[3].PWM_CMPMUPD = 0x0001; // enable compare event
|
||||||
|
PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
|
||||||
|
break;
|
||||||
|
default:PWM->PWM_CMP[4].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current)); // update E
|
||||||
|
PWM->PWM_CMP[4].PWM_CMPMUPD = 0x0001; // enable compare event
|
||||||
|
PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
volatile uint32_t PWM_ISR1_STATUS, PWM_ISR2_STATUS;
|
||||||
|
|
||||||
|
void PWM_Handler() {
|
||||||
|
PWM_ISR1_STATUS = PWM->PWM_ISR1;
|
||||||
|
PWM_ISR2_STATUS = PWM->PWM_ISR2;
|
||||||
|
if (PWM_ISR1_STATUS & PWM_IER1_CHID0) { // CHAN_0 interrupt
|
||||||
|
*ISR_table[0].set_register = ISR_table[0].write_mask; // set X to active
|
||||||
|
*ISR_table[1].set_register = ISR_table[1].write_mask; // set Y to active
|
||||||
|
*ISR_table[2].set_register = ISR_table[2].write_mask; // set Z to active
|
||||||
|
*ISR_table[3].set_register = ISR_table[3].write_mask; // set E to active
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (PWM_ISR2_STATUS & PWM_IER2_CMPM1) *ISR_table[0].clr_register = ISR_table[0].write_mask; // set X to inactive
|
||||||
|
if (PWM_ISR2_STATUS & PWM_IER2_CMPM2) *ISR_table[1].clr_register = ISR_table[1].write_mask; // set Y to inactive
|
||||||
|
if (PWM_ISR2_STATUS & PWM_IER2_CMPM3) *ISR_table[2].clr_register = ISR_table[2].write_mask; // set Z to inactive
|
||||||
|
if (PWM_ISR2_STATUS & PWM_IER2_CMPM4) *ISR_table[3].clr_register = ISR_table[3].write_mask; // set E to inactive
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // PRINTRBOARD_G2
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -63,7 +63,7 @@ extern PWM_map ISR_table[NUM_PWMS];
|
|||||||
extern uint32_t motor_current_setting[3];
|
extern uint32_t motor_current_setting[3];
|
||||||
|
|
||||||
#define IR_BIT(p) (WITHIN(p, 0, 3) ? (p) : (p) + 4)
|
#define IR_BIT(p) (WITHIN(p, 0, 3) ? (p) : (p) + 4)
|
||||||
#define COPY_ACTIVE_TABLE() do{ LOOP_L_N(i, 6) work_table[i] = active_table[i]; }while(0)
|
#define COPY_ACTIVE_TABLE() do{ for (uint8_t i = 0; i < 6 ; i++) work_table[i] = active_table[i]; }while(0)
|
||||||
|
|
||||||
#define PWM_MR0 19999 // base repetition rate minus one count - 20mS
|
#define PWM_MR0 19999 // base repetition rate minus one count - 20mS
|
||||||
#define PWM_PR 24 // prescaler value - prescaler divide by 24 + 1 - 1 MHz output
|
#define PWM_PR 24 // prescaler value - prescaler divide by 24 + 1 - 1 MHz output
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2019 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* Based on Sprinter and grbl.
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -52,10 +52,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_FREQUENCY
|
#if ENABLED(FAST_PWM_FAN)
|
||||||
#error "Features requiring Hardware PWM (FAST_PWM_FAN, SPINDLE_LASER_FREQUENCY) are not yet supported on DUE."
|
#error "FAST_PWM_FAN is not yet implemented for this platform."
|
||||||
#endif
|
|
||||||
|
|
||||||
#if HAS_TMC_SW_SERIAL
|
|
||||||
#error "TMC220x Software Serial is not supported on this platform."
|
|
||||||
#endif
|
#endif
|
||||||
+25
-20
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
*
|
*
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
||||||
* Copyright (c) 2015-2016 Nico Tonnhofer wurstnase.reprap@gmail.com
|
* Copyright (c) 2015-2016 Nico Tonnhofer wurstnase.reprap@gmail.com
|
||||||
* Copyright (c) 2016 Victor Perez victor_pv@hotmail.com
|
* Copyright (c) 2016 Victor Perez victor_pv@hotmail.com
|
||||||
@@ -17,29 +17,32 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#ifdef ARDUINO_ARCH_SAM
|
#ifdef ARDUINO_ARCH_SAM
|
||||||
|
|
||||||
|
#include "../../inc/MarlinConfigPre.h"
|
||||||
|
|
||||||
|
#if ENABLED(EEPROM_SETTINGS)
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
|
#include "../shared/persistent_store_api.h"
|
||||||
|
|
||||||
#if USE_WIRED_EEPROM
|
#if !defined(E2END) && NONE(I2C_EEPROM, SPI_EEPROM)
|
||||||
|
#define E2END 0xFFF // Default to Flash emulated EEPROM size (EepromEmulation_Due.cpp)
|
||||||
/**
|
|
||||||
* PersistentStore for Arduino-style EEPROM interface
|
|
||||||
* with simple implementations supplied by Marlin.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "../shared/eeprom_if.h"
|
|
||||||
#include "../shared/eeprom_api.h"
|
|
||||||
|
|
||||||
#ifndef MARLIN_EEPROM_SIZE
|
|
||||||
#error "MARLIN_EEPROM_SIZE is required for I2C / SPI EEPROM."
|
|
||||||
#endif
|
#endif
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
|
||||||
bool PersistentStore::access_start() { eeprom_init(); return true; }
|
extern void eeprom_flush();
|
||||||
bool PersistentStore::access_finish() { return true; }
|
|
||||||
|
bool PersistentStore::access_start() { return true; }
|
||||||
|
|
||||||
|
bool PersistentStore::access_finish() {
|
||||||
|
#if NONE(I2C_EEPROM, SPI_EEPROM)
|
||||||
|
eeprom_flush();
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
||||||
while (size--) {
|
while (size--) {
|
||||||
@@ -51,14 +54,14 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|||||||
eeprom_write_byte(p, v);
|
eeprom_write_byte(p, v);
|
||||||
delay(2);
|
delay(2);
|
||||||
if (eeprom_read_byte(p) != v) {
|
if (eeprom_read_byte(p) != v) {
|
||||||
SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
|
SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
crc16(crc, &v, 1);
|
crc16(crc, &v, 1);
|
||||||
pos++;
|
pos++;
|
||||||
value++;
|
value++;
|
||||||
}
|
};
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,5 +76,7 @@ bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // USE_WIRED_EEPROM
|
size_t PersistentStore::capacity() { return E2END + 1; }
|
||||||
|
|
||||||
|
#endif // EEPROM_SETTINGS
|
||||||
#endif // ARDUINO_ARCH_SAM
|
#endif // ARDUINO_ARCH_SAM
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user