Browse Source

Merge branch '2.0.x' of github.com:MarlinFirmware/Marlin into ctc-i3-pro-b

Thomas Buck 3 years ago
parent
commit
0ab5bd2ad6
100 changed files with 2972 additions and 1972 deletions
  1. 1
    1
      .github/FUNDING.yml
  2. 26
    10
      .github/ISSUE_TEMPLATE/bug_report.md
  3. 1
    1
      .github/ISSUE_TEMPLATE/feature_request.md
  4. 10
    11
      .github/contributing.md
  5. 6
    11
      .github/issue_template.md
  6. 40
    0
      .github/lock.yml
  7. 4
    0
      .github/pull_request_template.md
  8. 0
    7
      .github/workflows/bad-target.md
  9. 2
    1
      .github/workflows/bump-date.yml
  10. 15
    9
      .github/workflows/check-pr.yml
  11. 27
    0
      .github/workflows/close-stale.yml
  12. 32
    0
      .github/workflows/lock-closed.yml
  13. 28
    9
      .github/workflows/test-builds.yml
  14. 22
    0
      .github/workflows/unlock-reopened.yml
  15. 1
    1
      .gitignore
  16. 4
    5
      LICENSE
  17. 309
    150
      Marlin/Configuration.h
  18. 658
    199
      Marlin/Configuration_adv.h
  19. 201
    95
      Marlin/Makefile
  20. 15
    11
      Marlin/Marlin.ino
  21. 8
    8
      Marlin/Version.h
  22. 1
    1
      Marlin/lib/readme.txt
  23. 1
    2
      Marlin/src/HAL/AVR/HAL.cpp
  24. 22
    246
      Marlin/src/HAL/AVR/HAL.h
  25. 1
    1
      Marlin/src/HAL/AVR/HAL_SPI.cpp
  26. 618
    608
      Marlin/src/HAL/AVR/MarlinSerial.cpp
  27. 38
    24
      Marlin/src/HAL/AVR/MarlinSerial.h
  28. 1
    3
      Marlin/src/HAL/AVR/Servo.cpp
  29. 6
    4
      Marlin/src/HAL/AVR/ServoTimers.h
  30. 13
    6
      Marlin/src/HAL/AVR/eeprom.cpp
  31. 1
    1
      Marlin/src/HAL/AVR/endstop_interrupts.h
  32. 6
    6
      Marlin/src/HAL/AVR/fast_pwm.cpp
  33. 51
    1
      Marlin/src/HAL/AVR/fastio.cpp
  34. 15
    9
      Marlin/src/HAL/AVR/fastio.h
  35. 1
    1
      Marlin/src/HAL/AVR/fastio/fastio_1280.h
  36. 1
    1
      Marlin/src/HAL/AVR/fastio/fastio_1281.h
  37. 1
    1
      Marlin/src/HAL/AVR/fastio/fastio_168.h
  38. 1
    1
      Marlin/src/HAL/AVR/fastio/fastio_644.h
  39. 1
    1
      Marlin/src/HAL/AVR/fastio/fastio_AT90USB.h
  40. 5
    1
      Marlin/src/HAL/AVR/inc/Conditionals_LCD.h
  41. 1
    1
      Marlin/src/HAL/AVR/inc/Conditionals_adv.h
  42. 1
    1
      Marlin/src/HAL/AVR/inc/Conditionals_post.h
  43. 7
    14
      Marlin/src/HAL/AVR/inc/SanityCheck.h
  44. 1
    1
      Marlin/src/HAL/AVR/math.h
  45. 4
    2
      Marlin/src/HAL/AVR/pinsDebug.h
  46. 1
    1
      Marlin/src/HAL/AVR/pinsDebug_Teensyduino.h
  47. 4
    7
      Marlin/src/HAL/AVR/pinsDebug_plus_70.h
  48. 1
    1
      Marlin/src/HAL/AVR/spi_pins.h
  49. 260
    0
      Marlin/src/HAL/AVR/timers.h
  50. 3
    3
      Marlin/src/HAL/AVR/u8g_com_HAL_AVR_sw_spi.cpp
  51. 1
    2
      Marlin/src/HAL/AVR/watchdog.cpp
  52. 1
    1
      Marlin/src/HAL/AVR/watchdog.h
  53. 1
    2
      Marlin/src/HAL/DUE/DebugMonitor.cpp
  54. 3
    4
      Marlin/src/HAL/DUE/HAL.cpp
  55. 23
    54
      Marlin/src/HAL/DUE/HAL.h
  56. 3
    4
      Marlin/src/HAL/DUE/HAL_SPI.cpp
  57. 1
    1
      Marlin/src/HAL/DUE/InterruptVectors.cpp
  58. 1
    1
      Marlin/src/HAL/DUE/InterruptVectors.h
  59. 6
    16
      Marlin/src/HAL/DUE/MarlinSerial.cpp
  60. 5
    7
      Marlin/src/HAL/DUE/MarlinSerial.h
  61. 11
    11
      Marlin/src/HAL/DUE/MarlinSerialUSB.cpp
  62. 10
    4
      Marlin/src/HAL/DUE/MarlinSerialUSB.h
  63. 1
    2
      Marlin/src/HAL/DUE/Servo.cpp
  64. 2
    3
      Marlin/src/HAL/DUE/Tone.cpp
  65. 4
    5
      Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_shared_hw_spi.cpp
  66. 1
    1
      Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_st7920_sw_spi.cpp
  67. 3
    3
      Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_sw_spi.cpp
  68. 3
    3
      Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_sw_spi_shared.cpp
  69. 1
    1
      Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_sw_spi_shared.h
  70. 113
    122
      Marlin/src/HAL/DUE/eeprom_flash.cpp
  71. 16
    21
      Marlin/src/HAL/DUE/eeprom_wired.cpp
  72. 18
    40
      Marlin/src/HAL/DUE/endstop_interrupts.h
  73. 4
    4
      Marlin/src/HAL/DUE/fastio.h
  74. 110
    49
      Marlin/src/HAL/DUE/fastio/G2_PWM.cpp
  75. 1
    1
      Marlin/src/HAL/DUE/fastio/G2_PWM.h
  76. 1
    1
      Marlin/src/HAL/DUE/fastio/G2_pins.h
  77. 5
    1
      Marlin/src/HAL/DUE/inc/Conditionals_LCD.h
  78. 1
    1
      Marlin/src/HAL/DUE/inc/Conditionals_adv.h
  79. 5
    5
      Marlin/src/HAL/DUE/inc/Conditionals_post.h
  80. 3
    3
      Marlin/src/HAL/DUE/inc/SanityCheck.h
  81. 1
    2
      Marlin/src/HAL/DUE/pinsDebug.h
  82. 1
    1
      Marlin/src/HAL/DUE/spi_pins.h
  83. 2
    6
      Marlin/src/HAL/DUE/timers.cpp
  84. 18
    10
      Marlin/src/HAL/DUE/timers.h
  85. 18
    0
      Marlin/src/HAL/DUE/upload_extra_script.py
  86. 2
    2
      Marlin/src/HAL/DUE/usb/arduino_due_x.h
  87. 83
    84
      Marlin/src/HAL/DUE/usb/compiler.h
  88. 1
    1
      Marlin/src/HAL/DUE/usb/conf_access.h
  89. 1
    1
      Marlin/src/HAL/DUE/usb/conf_clock.h
  90. 1
    5
      Marlin/src/HAL/DUE/usb/conf_usb.h
  91. 1
    1
      Marlin/src/HAL/DUE/usb/ctrl_access.c
  92. 1
    1
      Marlin/src/HAL/DUE/usb/ctrl_access.h
  93. 1
    1
      Marlin/src/HAL/DUE/usb/genclk.h
  94. 1
    1
      Marlin/src/HAL/DUE/usb/mrepeat.h
  95. 1
    1
      Marlin/src/HAL/DUE/usb/osc.h
  96. 1
    1
      Marlin/src/HAL/DUE/usb/pll.h
  97. 1
    1
      Marlin/src/HAL/DUE/usb/preprocessor.h
  98. 1
    1
      Marlin/src/HAL/DUE/usb/sbc_protocol.h
  99. 1
    1
      Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.h
  100. 0
    0
      Marlin/src/HAL/DUE/usb/spc_protocol.h

+ 1
- 1
.github/FUNDING.yml View File

1
 github: [thinkyhead]
1
 github: [thinkyhead]
2
 patreon: thinkyhead
2
 patreon: thinkyhead
3
-custom: ["http://www.thinkyhead.com/donate-to-marlin"]
3
+custom: ["https://www.thinkyhead.com/donate-to-marlin"]

+ 26
- 10
.github/ISSUE_TEMPLATE/bug_report.md View File

9
 
9
 
10
 <!--
10
 <!--
11
 
11
 
12
-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/master/.github/code_of_conduct.md
12
+Please follow the instructions below. Failure to do so may result in your issue being closed.
13
 
13
 
14
-Do you want to ask a question? Are you looking for support? Please don't post here. Instead please use one of the support links at https://github.com/MarlinFirmware/Marlin/issues/new/choose
14
+### Before Reporting a Bug
15
 
15
 
16
-Before filing an issue be sure to test the "bugfix" branches to see whether the issue has been resolved.
16
+1. Test with the `bugfix-2.0.x` branch to see whether the issue still exists.
17
+
18
+2. Get troubleshooting help from the Marlin community to confirm it's a bug and not just a configuration error. Links at https://github.com/MarlinFirmware/Marlin/issues/new/choose
19
+
20
+### Instructions
21
+
22
+1. Fill out every section of the template below.
23
+
24
+2. Always attach configuration files, regardless of whether you think they are involved.
25
+
26
+3. Read and understand 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/master/.github/code_of_conduct.md
17
 
27
 
18
 -->
28
 -->
19
 
29
 
20
 ### Bug Description
30
 ### Bug Description
21
 
31
 
22
-<!-- Description of the bug -->
32
+<!-- Describe the bug in this section. (You can remove this invisible comment.) -->
33
+
34
+### Configuration Files
23
 
35
 
24
-### My Configurations
36
+**Required:** Include a ZIP file containing `Configuration.h` and `Configuration_adv.h`.
25
 
37
 
26
-**Required:** Please include a ZIP file containing your `Configuration.h` and `Configuration_adv.h` files.
38
+If you've made any other modifications describe them in detail here.
27
 
39
 
28
 ### Steps to Reproduce
40
 ### Steps to Reproduce
29
 
41
 
30
-<!-- Please describe the steps needed to reproduce the issue -->
42
+<!-- Describe the steps needed to reproduce the issue. (You can remove this invisible comment.) -->
31
 
43
 
32
 1. [First Step]
44
 1. [First Step]
33
 2. [Second Step]
45
 2. [Second Step]
34
 3. [and so on...]
46
 3. [and so on...]
35
 
47
 
36
-**Expected behavior:** [What you expect to happen]
48
+**Expected behavior:**
49
+
50
+<!-- Describe what you expected to happen here. (You can remove this invisible comment.) -->
51
+
52
+**Actual behavior:**
37
 
53
 
38
-**Actual behavior:** [What actually happens]
54
+<!-- Describe what actually happens here. (You can remove this invisible comment.) -->
39
 
55
 
40
 #### Additional Information
56
 #### Additional Information
41
 
57
 
42
 * Provide pictures or links to videos that clearly demonstrate the issue.
58
 * Provide pictures or links to videos that clearly demonstrate the issue.
43
-* See [How Can I Contribute](#how-can-i-contribute) for additional guidelines.
59
+* See [Contributing to Marlin](https://github.com/MarlinFirmware/Marlin/blob/2.0.x/.github/contributing.md) for additional guidelines.

+ 1
- 1
.github/ISSUE_TEMPLATE/feature_request.md View File

2
 name: Feature request
2
 name: Feature request
3
 about: Request a Feature
3
 about: Request a Feature
4
 title: "[FR] (feature request title)"
4
 title: "[FR] (feature request title)"
5
-labels: ''
5
+labels: 'T: Feature Request'
6
 assignees: ''
6
 assignees: ''
7
 
7
 
8
 ---
8
 ---

+ 10
- 11
.github/contributing.md View File

34
 
34
 
35
 We have a Message Board and a Facebook group where our knowledgable user community can provide helpful advice if you have questions.
35
 We have a Message Board and a Facebook group where our knowledgable user community can provide helpful advice if you have questions.
36
 
36
 
37
-* [Marlin RepRap forum](http://forums.reprap.org/list.php?415)
37
+* [Marlin RepRap forum](https://reprap.org/forum/list.php?415)
38
 * [MarlinFirmware on Facebook](https://www.facebook.com/groups/1049718498464482/)
38
 * [MarlinFirmware on Facebook](https://www.facebook.com/groups/1049718498464482/)
39
 
39
 
40
-If chat is more your speed, you can join the MarlinFirmware Slack team:
40
+If chat is more your speed, you can join the MarlinFirmware Discord server:
41
 
41
 
42
-* Join the Marlin Slack Team
43
-  * To obtain group access, please [send a request](http://www.thinkyhead.com/contact/9) to @thinkyhead.
44
-  * Even though Slack is a chat service, sometimes it takes several hours for community members to respond &mdash; please be patient!
45
-  * Use the `#general` channel for general questions or discussion about Marlin.
46
-  * Other channels exist for certain topics. Check the channel list.
42
+* Use the link https://discord.gg/n5NJ59y to join up as a General User.
43
+* Even though our Discord is pretty active, it may take a while for community members to respond &mdash; please be patient!
44
+* Use the `#general` channel for general questions or discussion about Marlin.
45
+* Other channels exist for certain topics or are limited to Patrons. Check the channel list.
47
 
46
 
48
 ## How Can I Contribute?
47
 ## How Can I Contribute?
49
 
48
 
93
 
92
 
94
 #### Before Submitting a Feature Request
93
 #### Before Submitting a Feature Request
95
 
94
 
96
-* **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).
95
+* **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).
97
 * **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.
96
 * **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.
98
 
97
 
99
 #### How Do I Submit A (Good) Feature Request?
98
 #### How Do I Submit A (Good) Feature Request?
117
 
116
 
118
 ### Pull Requests
117
 ### Pull Requests
119
 
118
 
120
-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.
119
+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.
121
 
120
 
122
 * Fill in [the required template](pull_request_template.md).
121
 * Fill in [the required template](pull_request_template.md).
123
 * Don't include issue numbers in the PR title.
122
 * Don't include issue numbers in the PR title.
124
 * Include pictures, diagrams, and links to videos in your Pull Request to demonstrate your changes, if needed.
123
 * Include pictures, diagrams, and links to videos in your Pull Request to demonstrate your changes, if needed.
125
-* Follow the [Coding Standards](http://marlinfw.org/docs/development/coding_standards.html) posted on our website.
124
+* Follow the [Coding Standards](https://marlinfw.org/docs/development/coding_standards.html) posted on our website.
126
 * Document new code with clear and concise comments.
125
 * Document new code with clear and concise comments.
127
 * End all files with a newline.
126
 * End all files with a newline.
128
 
127
 
137
 
136
 
138
 ### C++ Coding Standards
137
 ### C++ Coding Standards
139
 
138
 
140
-* 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.
139
+* 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.
141
 
140
 
142
 ### Documentation
141
 ### Documentation
143
 
142
 

+ 6
- 11
.github/issue_template.md View File

1
 # NO SUPPORT REQUESTS PLEASE
1
 # NO SUPPORT REQUESTS PLEASE
2
 
2
 
3
-Support Requests posted here will be automatically closed!
3
+Do you want to ask a question? Are you looking for support? Please don't post here. Support Requests posted here will be automatically closed!
4
 
4
 
5
-This Issue Queue is for Marlin bug reports and development-related issues, and we prefer not to handle user-support questions here. See https://github.com/MarlinFirmware/Marlin/blob/1.1.x/.github/contributing.md#i-dont-want-to-read-this-whole-thing-i-just-have-a-question.
5
+Instead use one of the following options:
6
 
6
 
7
-For best results getting help with configuration and troubleshooting, please use the following resources:
7
+- The Marlin Firmware forum at https://reprap.org/forum/list.php?415
8
+- The MarlinFirmware Facebook Group at https://www.facebook.com/groups/1049718498464482/
9
+- The MarlinFirmware Discord Server at https://discord.gg/n5NJ59y.
8
 
10
 
9
-- RepRap.org Marlin Forum http://forums.reprap.org/list.php?415
10
-- Tom's 3D Forums https://discuss.toms3d.org/
11
-- Facebook Group "Marlin Firmware" https://www.facebook.com/groups/1049718498464482/
12
-- Facebook Group "Marlin Firmware for 3D Printers" https://www.facebook.com/groups/3Dtechtalk/
13
-- Marlin Configuration https://www.youtube.com/results?search_query=marlin+configuration on YouTube
14
-- Marlin Discord server. Join link: https://discord.gg/n5NJ59y
15
-
16
-After seeking help from the community, if the consensus points to to a bug in Marlin, then you should post a Bug Report at https://github.com/MarlinFirmware/Marlin/issues/new/choose).
11
+Before filing an issue be sure to test the latest "bugfix" branch to see whether the issue is already addressed.

+ 40
- 0
.github/lock.yml View File

1
+#
2
+# Configuration for Lock Threads - https://github.com/dessant/lock-threads-app
3
+#
4
+
5
+# Number of days of inactivity before a closed issue or pull request is locked
6
+daysUntilLock: 60
7
+
8
+# Skip issues and pull requests created before a given timestamp. Timestamp must
9
+# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
10
+skipCreatedBefore: false
11
+
12
+# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
13
+exemptLabels: [ 'no-locking' ]
14
+
15
+# Label to add before locking, such as `outdated`. Set to `false` to disable
16
+lockLabel: false
17
+
18
+# Comment to post before locking. Set to `false` to disable
19
+lockComment: >
20
+  This thread has been automatically locked since there has not been
21
+  any recent activity after it was closed. Please open a new issue for
22
+  related bugs.
23
+
24
+# Assign `resolved` as the reason for locking. Set to `false` to disable
25
+setLockReason: true
26
+
27
+# Limit to only `issues` or `pulls`
28
+# only: issues
29
+
30
+# Optionally, specify configuration settings just for `issues` or `pulls`
31
+# issues:
32
+#   exemptLabels:
33
+#     - help-wanted
34
+#   lockLabel: outdated
35
+
36
+# pulls:
37
+#   daysUntilLock: 30
38
+
39
+# Repository to extend settings from
40
+# _extends: repo

+ 4
- 0
.github/pull_request_template.md View File

14
 
14
 
15
 <!-- What does this fix or improve? -->
15
 <!-- What does this fix or improve? -->
16
 
16
 
17
+### Configurations
18
+
19
+<!-- Attach any Configuration.h, Configuration_adv.h, or platformio.ini files needed to compile/test your Pull Request. -->
20
+
17
 ### Related Issues
21
 ### Related Issues
18
 
22
 
19
 <!-- Whether this fixes a bug or fulfills a feature request, please list any related Issues here. -->
23
 <!-- Whether this fixes a bug or fulfills a feature request, please list any related Issues here. -->

+ 0
- 7
.github/workflows/bad-target.md View File

1
-Thanks for your contribution! Unfortunately we can't accept PRs directed at release branches. We make patches to the bugfix branches and only later do we push them out as releases.
2
-
3
-Please redo this PR starting with the `bugfix-2.0.x` branch and be careful to target `bugfix-2.0.x` when resubmitting the PR.
4
-
5
-It may help to set your fork's default branch to `bugfix-2.0.x`.
6
-
7
-See [this page](http://marlinfw.org/docs/development/getting_started_pull_requests.html) for full instructions.

+ 2
- 1
.github/workflows/bump-date.yml View File

11
 
11
 
12
 jobs:
12
 jobs:
13
   bump_date:
13
   bump_date:
14
+    name: Bump Distribution Date
15
+    if: github.repository == 'MarlinFirmware/Marlin'
14
 
16
 
15
     runs-on: ubuntu-latest
17
     runs-on: ubuntu-latest
16
 
18
 
24
     - name: Bump Distribution Date
26
     - name: Bump Distribution Date
25
       run: |
27
       run: |
26
         # Inline Bump Script
28
         # Inline Bump Script
27
-        [[ "$GITHUB_REPOSITORY" == "MarlinFirmware/Marlin" ]] || exit 0
28
         DIST=$( date +"%Y-%m-%d" )
29
         DIST=$( date +"%Y-%m-%d" )
29
         eval "sed -E -i 's/(#define +STRING_DISTRIBUTION_DATE) .*$/\1 \"$DIST\"/g' Marlin/src/inc/Version.h" && \
30
         eval "sed -E -i 's/(#define +STRING_DISTRIBUTION_DATE) .*$/\1 \"$DIST\"/g' Marlin/src/inc/Version.h" && \
30
         git config user.name "${GITHUB_ACTOR}" && \
31
         git config user.name "${GITHUB_ACTOR}" && \

+ 15
- 9
.github/workflows/check-pr.yml View File

1
 #
1
 #
2
-# comment-pr.yml
3
-# Add a comment to any PR directed to a release branch
2
+# check-pr.yml
3
+# Close PRs directed at release branches
4
 #
4
 #
5
 
5
 
6
 name: PR Bad Target
6
 name: PR Bad Target
14
 
14
 
15
 jobs:
15
 jobs:
16
   bad_target:
16
   bad_target:
17
-
18
     name: PR Bad Target
17
     name: PR Bad Target
18
+    if: github.repository == 'MarlinFirmware/Marlin'
19
+
19
     runs-on: ubuntu-latest
20
     runs-on: ubuntu-latest
20
 
21
 
21
     steps:
22
     steps:
22
-      - uses: actions/checkout@v1
23
-      - uses: harupy/comment-on-pr@master
24
-        env:
25
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
26
-        with:
27
-          filename: bad-target.md
23
+    - uses: peter-evans/close-pull@v1
24
+      with:
25
+        delete-branch: false
26
+        comment: >
27
+          Thanks for your contribution! Unfortunately we can't accept PRs directed at release branches. We make patches to the bugfix branches and only later do we push them out as releases.
28
+
29
+          Please redo this PR starting with the `bugfix-2.0.x` branch and be careful to target `bugfix-2.0.x` when resubmitting the PR.
30
+
31
+          It may help to set your fork's default branch to `bugfix-2.0.x`.
32
+
33
+          See [this page](http://marlinfw.org/docs/development/getting_started_pull_requests.html) for full instructions.

+ 27
- 0
.github/workflows/close-stale.yml View File

1
+#
2
+# close-stale.yml
3
+# Close open issues after a period of inactivity
4
+#
5
+
6
+name: Close Stale Issues
7
+
8
+on:
9
+  schedule:
10
+  - cron: "22 1 * * *"
11
+
12
+jobs:
13
+  stale:
14
+    name: Close Stale Issues
15
+    if: github.repository == 'MarlinFirmware/Marlin'
16
+
17
+    runs-on: ubuntu-latest
18
+
19
+    steps:
20
+    - uses: actions/stale@v3
21
+      with:
22
+        repo-token: ${{ secrets.GITHUB_TOKEN }}
23
+        stale-issue-message: 'This issue has had no activity in the last 30 days. Please add a reply if you want to keep this issue active, otherwise it will be automatically closed within 7 days.'
24
+        days-before-stale: 30
25
+        days-before-close: 7
26
+        stale-issue-label: 'stale-closing-soon'
27
+        exempt-issue-labels: 'T: Feature Request'

+ 32
- 0
.github/workflows/lock-closed.yml View File

1
+#
2
+# lock-closed.yml
3
+# Lock closed issues after a period of inactivity
4
+#
5
+
6
+name: Lock Closed Issues
7
+
8
+on:
9
+  schedule:
10
+    - cron: '0 1/13 * * *'
11
+
12
+jobs:
13
+  lock:
14
+    name: Lock Closed Issues
15
+    if: github.repository == 'MarlinFirmware/Marlin'
16
+
17
+    runs-on: ubuntu-latest
18
+
19
+    steps:
20
+    - uses: dessant/lock-threads@v2
21
+      with:
22
+        github-token: ${{ github.token }}
23
+        process-only: 'issues'
24
+        issue-lock-inactive-days: '60'
25
+        issue-exclude-created-before: ''
26
+        issue-exclude-labels: 'no-locking'
27
+        issue-lock-labels: ''
28
+        issue-lock-comment: >
29
+          This issue has been automatically locked since there
30
+          has not been any recent activity after it was closed.
31
+          Please open a new issue for related bugs.
32
+        issue-lock-reason: ''

+ 28
- 9
.github/workflows/test-builds.yml View File

9
   pull_request:
9
   pull_request:
10
     branches:
10
     branches:
11
     - bugfix-2.0.x
11
     - bugfix-2.0.x
12
-    - dev-2.1.x
12
+    paths-ignore:
13
+    - config/**
14
+    - data/**
15
+    - docs/**
16
+    - '**/*.md'
17
+  push:
18
+    branches:
19
+    - bugfix-2.0.x
13
     paths-ignore:
20
     paths-ignore:
14
     - config/**
21
     - config/**
15
     - data/**
22
     - data/**
18
 
25
 
19
 jobs:
26
 jobs:
20
   test_builds:
27
   test_builds:
28
+    name: Run All Tests
29
+    if: github.repository == 'MarlinFirmware/Marlin'
21
 
30
 
22
     runs-on: ubuntu-latest
31
     runs-on: ubuntu-latest
23
 
32
 
32
         - mega2560
41
         - mega2560
33
         - teensy31
42
         - teensy31
34
         - teensy35
43
         - teensy35
44
+        - teensy41
35
         - SAMD51_grandcentral_m4
45
         - SAMD51_grandcentral_m4
36
 
46
 
37
         # Extended AVR Environments
47
         # Extended AVR Environments
49
         - STM32F103RE_btt
59
         - STM32F103RE_btt
50
         - STM32F103RE_btt_USB
60
         - STM32F103RE_btt_USB
51
         - STM32F103RC_fysetc
61
         - STM32F103RC_fysetc
62
+        - STM32F103RC_meeb
52
         - jgaurora_a5s_a1
63
         - jgaurora_a5s_a1
53
         - STM32F103VE_longer
64
         - STM32F103VE_longer
54
         - STM32F407VE_black
65
         - STM32F407VE_black
66
+        - STM32F401VE_STEVAL
67
+        - BIGTREE_BTT002
55
         - BIGTREE_SKR_PRO
68
         - BIGTREE_SKR_PRO
56
         - BIGTREE_GTR_V1_0
69
         - BIGTREE_GTR_V1_0
57
         - mks_robin
70
         - mks_robin
71
+        - mks_robin_stm32
58
         - ARMED
72
         - ARMED
59
         - FYSETC_S6
73
         - FYSETC_S6
74
+        - STM32F070CB_malyan
75
+        - STM32F070RB_malyan
76
+        - malyan_M300
77
+        - mks_robin_lite
78
+        - FLYF407ZG
79
+        - rumba32
80
+        - mks_robin_pro
81
+        - STM32F103RET6_creality
82
+        - LERDGEX
83
+        - mks_robin_nano35
60
 
84
 
61
         # Put lengthy tests last
85
         # Put lengthy tests last
62
 
86
 
69
         #- STM32F7
93
         #- STM32F7
70
 
94
 
71
         # Non-working environment tests
95
         # Non-working environment tests
72
-
73
-        #- BIGTREE_BTT002
74
         #- at90usb1286_cdc
96
         #- at90usb1286_cdc
75
         #- at90usb1286_dfu
97
         #- at90usb1286_dfu
76
         #- STM32F103CB_malyan
98
         #- STM32F103CB_malyan
77
-        #- mks_robin_lite
78
         #- mks_robin_mini
99
         #- mks_robin_mini
79
-        #- mks_robin_nano
80
 
100
 
81
     steps:
101
     steps:
82
 
102
 
88
 
108
 
89
     - name: Install PlatformIO
109
     - name: Install PlatformIO
90
       run: |
110
       run: |
91
-        pip install -U https://github.com/platformio/platformio-core/archive/master.zip
111
+        pip install -U https://github.com/platformio/platformio-core/archive/develop.zip
92
         platformio update
112
         platformio update
93
 
113
 
94
     - name: Check out the PR
114
     - name: Check out the PR
97
     - name: Run ${{ matrix.test-platform }} Tests
117
     - name: Run ${{ matrix.test-platform }} Tests
98
       run: |
118
       run: |
99
         # Inline tests script
119
         # Inline tests script
100
-        [[ "$GITHUB_REPOSITORY" == "MarlinFirmware/Marlin" ]] || exit 0
101
         chmod +x buildroot/bin/*
120
         chmod +x buildroot/bin/*
102
-        chmod +x buildroot/share/tests/*
103
-        export PATH=./buildroot/bin/:./buildroot/share/tests/:${PATH}
121
+        chmod +x buildroot/tests/*
122
+        export PATH=./buildroot/bin/:./buildroot/tests/:${PATH}
104
         run_tests . ${{ matrix.test-platform }}
123
         run_tests . ${{ matrix.test-platform }}

+ 22
- 0
.github/workflows/unlock-reopened.yml View File

1
+#
2
+# unlock-reopened.yml
3
+# Unlock an issue whenever it is re-opened
4
+#
5
+
6
+name: "Unlock reopened issue"
7
+
8
+on:
9
+  issues:
10
+    types: [reopened]
11
+
12
+jobs:
13
+  unlock:
14
+    name: Unlock Reopened
15
+    if: github.repository == 'MarlinFirmware/Marlin'
16
+
17
+    runs-on: ubuntu-latest
18
+
19
+    steps:
20
+    - uses: OSDKDev/unlock-issues@v1.1
21
+      with:
22
+        repo-token: "${{ secrets.GITHUB_TOKEN }}"

+ 1
- 1
.gitignore View File

16
 # GNU General Public License for more details.
16
 # GNU General Public License for more details.
17
 #
17
 #
18
 # You should have received a copy of the GNU General Public License
18
 # You should have received a copy of the GNU General Public License
19
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
 #
20
 #
21
 
21
 
22
 # Our automatic versioning scheme generates the following file
22
 # Our automatic versioning scheme generates the following file

+ 4
- 5
LICENSE View File

3
                     GNU GENERAL PUBLIC LICENSE
3
                     GNU GENERAL PUBLIC LICENSE
4
                        Version 3, 29 June 2007
4
                        Version 3, 29 June 2007
5
 
5
 
6
- Copyright (c) 2007 Free Software Foundation, Inc. <http://fsf.org/>
6
+ Copyright (c) 2007 Free Software Foundation, Inc. <https://www.fsf.org/>
7
  Everyone is permitted to copy and distribute verbatim copies
7
  Everyone is permitted to copy and distribute verbatim copies
8
  of this license document, but changing it is not allowed.
8
  of this license document, but changing it is not allowed.
9
 
9
 
647
     GNU General Public License for more details.
647
     GNU General Public License for more details.
648
 
648
 
649
     You should have received a copy of the GNU General Public License
649
     You should have received a copy of the GNU General Public License
650
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
650
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
651
 
651
 
652
 Also add information on how to contact you by electronic and paper mail.
652
 Also add information on how to contact you by electronic and paper mail.
653
 
653
 
666
   You should also get your employer (if you work as a programmer) or school,
666
   You should also get your employer (if you work as a programmer) or school,
667
 if any, to sign a "copyright disclaimer" for the program, if necessary.
667
 if any, to sign a "copyright disclaimer" for the program, if necessary.
668
 For more information on this, and how to apply and follow the GNU GPL, see
668
 For more information on this, and how to apply and follow the GNU GPL, see
669
-<http://www.gnu.org/licenses/>.
669
+<https://www.gnu.org/licenses/>.
670
 
670
 
671
   The GNU General Public License does not permit incorporating your program
671
   The GNU General Public License does not permit incorporating your program
672
 into proprietary programs.  If your program is a subroutine library, you
672
 into proprietary programs.  If your program is a subroutine library, you
673
 may consider it more useful to permit linking proprietary applications with
673
 may consider it more useful to permit linking proprietary applications with
674
 the library.  If this is what you want to do, use the GNU Lesser General
674
 the library.  If this is what you want to do, use the GNU Lesser General
675
 Public License instead of this License.  But first, please read
675
 Public License instead of this License.  But first, please read
676
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
677
-
676
+<https://www.gnu.org/licenses/why-not-lgpl.html>.

+ 309
- 150
Marlin/Configuration.h
File diff suppressed because it is too large
View File


+ 658
- 199
Marlin/Configuration_adv.h
File diff suppressed because it is too large
View File


+ 201
- 95
Marlin/Makefile View File

14
 # Detailed instructions for using the makefile:
14
 # Detailed instructions for using the makefile:
15
 #
15
 #
16
 #  1. Modify the line containing "ARDUINO_INSTALL_DIR" to point to the directory that
16
 #  1. Modify the line containing "ARDUINO_INSTALL_DIR" to point to the directory that
17
-#     contains the Arduino installation (for example, under Mac OS X, this
17
+#     contains the Arduino installation (for example, under macOS, this
18
 #     might be /Applications/Arduino.app/Contents/Resources/Java).
18
 #     might be /Applications/Arduino.app/Contents/Resources/Java).
19
 #
19
 #
20
 #  2. Modify the line containing "UPLOAD_PORT" to refer to the filename
20
 #  2. Modify the line containing "UPLOAD_PORT" to refer to the filename
22
 #     (e.g. UPLOAD_PORT = /dev/tty.USB0).  If the exact name of this file
22
 #     (e.g. UPLOAD_PORT = /dev/tty.USB0).  If the exact name of this file
23
 #     changes, you can use * as a wild card (e.g. UPLOAD_PORT = /dev/tty.usb*).
23
 #     changes, you can use * as a wild card (e.g. UPLOAD_PORT = /dev/tty.usb*).
24
 #
24
 #
25
-#  3. Set the line containing "MCU" to match your board's processor.
26
-#     Older one's are atmega8 based, newer ones like Arduino Mini, Bluetooth
25
+#  3. Set the line containing "MCU" to match your board's processor. Set
26
+#     "PROG_MCU" as the AVR part name corresponding to "MCU". You can use the
27
+#     following command to get a list of correspondences: `avrdude -c alf -p x`
28
+#     Older boards are atmega8 based, newer ones like Arduino Mini, Bluetooth
27
 #     or Diecimila have the atmega168.  If you're using a LilyPad Arduino,
29
 #     or Diecimila have the atmega168.  If you're using a LilyPad Arduino,
28
 #     change F_CPU to 8000000. If you are using Gen7 electronics, you
30
 #     change F_CPU to 8000000. If you are using Gen7 electronics, you
29
 #     probably need to use 20000000. Either way, you must regenerate
31
 #     probably need to use 20000000. Either way, you must regenerate
34
 #  5. Type "make upload", reset your Arduino board, and press enter to
36
 #  5. Type "make upload", reset your Arduino board, and press enter to
35
 #     upload your program to the Arduino board.
37
 #     upload your program to the Arduino board.
36
 #
38
 #
37
-# Note that all settings at the top of this file can be overriden from
39
+# Note that all settings at the top of this file can be overridden from
38
 # the command line with, for example, "make HARDWARE_MOTHERBOARD=71"
40
 # the command line with, for example, "make HARDWARE_MOTHERBOARD=71"
39
 #
41
 #
40
 # To compile for RAMPS (atmega2560) with Arduino 1.6.9 at root/arduino you would use...
42
 # To compile for RAMPS (atmega2560) with Arduino 1.6.9 at root/arduino you would use...
41
 #
43
 #
42
 #   make ARDUINO_VERSION=10609 AVR_TOOLS_PATH=/root/arduino/hardware/tools/avr/bin/ \
44
 #   make ARDUINO_VERSION=10609 AVR_TOOLS_PATH=/root/arduino/hardware/tools/avr/bin/ \
43
-#   HARDWARE_MOTHERBOARD=33 ARDUINO_INSTALL_DIR=/root/arduino
45
+#   HARDWARE_MOTHERBOARD=1200 ARDUINO_INSTALL_DIR=/root/arduino
44
 #
46
 #
45
 # To compile and upload simply add "upload" to the end of the line...
47
 # To compile and upload simply add "upload" to the end of the line...
46
 #
48
 #
47
 #   make ARDUINO_VERSION=10609 AVR_TOOLS_PATH=/root/arduino/hardware/tools/avr/bin/ \
49
 #   make ARDUINO_VERSION=10609 AVR_TOOLS_PATH=/root/arduino/hardware/tools/avr/bin/ \
48
-#   HARDWARE_MOTHERBOARD=33 ARDUINO_INSTALL_DIR=/root/arduino upload
50
+#   HARDWARE_MOTHERBOARD=1200 ARDUINO_INSTALL_DIR=/root/arduino upload
49
 #
51
 #
50
 # If uploading doesn't work try adding the parameter "AVRDUDE_PROGRAMMER=wiring" or
52
 # If uploading doesn't work try adding the parameter "AVRDUDE_PROGRAMMER=wiring" or
51
 # start upload manually (using stk500) like so:
53
 # start upload manually (using stk500) like so:
57
 #
59
 #
58
 
60
 
59
 # This defines the board to compile for (see boards.h for your board's ID)
61
 # This defines the board to compile for (see boards.h for your board's ID)
60
-HARDWARE_MOTHERBOARD ?= 11
62
+HARDWARE_MOTHERBOARD ?= 1020
63
+
64
+ifeq ($(OS),Windows_NT)
65
+  # Windows
66
+  ARDUINO_INSTALL_DIR ?= ${HOME}/Arduino
67
+  ARDUINO_USER_DIR ?= ${HOME}/Arduino
68
+else
69
+  UNAME_S := $(shell uname -s)
70
+  ifeq ($(UNAME_S),Linux)
71
+    # Linux
72
+    ARDUINO_INSTALL_DIR ?= /usr/share/arduino
73
+    ARDUINO_USER_DIR ?= ${HOME}/Arduino
74
+  endif
75
+  ifeq ($(UNAME_S),Darwin)
76
+    # Darwin (macOS)
77
+    ARDUINO_INSTALL_DIR ?= /Applications/Arduino.app/Contents/Java
78
+    ARDUINO_USER_DIR ?= ${HOME}/Documents/Arduino
79
+    AVR_TOOLS_PATH ?= /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/
80
+  endif
81
+endif
61
 
82
 
62
 # Arduino source install directory, and version number
83
 # Arduino source install directory, and version number
63
 # On most linuxes this will be /usr/share/arduino
84
 # On most linuxes this will be /usr/share/arduino
67
 # The installed Libraries are in the User folder
88
 # The installed Libraries are in the User folder
68
 ARDUINO_USER_DIR ?= ${HOME}/Arduino
89
 ARDUINO_USER_DIR ?= ${HOME}/Arduino
69
 
90
 
70
-# You can optionally set a path to the avr-gcc tools. Requires a trailing slash. (ex: /usr/local/avr-gcc/bin)
91
+# You can optionally set a path to the avr-gcc tools.
92
+# Requires a trailing slash. For example, /usr/local/avr-gcc/bin/
71
 AVR_TOOLS_PATH ?=
93
 AVR_TOOLS_PATH ?=
72
 
94
 
73
-#Programmer configuration
95
+# Programmer configuration
74
 UPLOAD_RATE        ?= 57600
96
 UPLOAD_RATE        ?= 57600
75
 AVRDUDE_PROGRAMMER ?= arduino
97
 AVRDUDE_PROGRAMMER ?= arduino
76
-# on most linuxes this will be /dev/ttyACM0 or /dev/ttyACM1
98
+# On most linuxes this will be /dev/ttyACM0 or /dev/ttyACM1
77
 UPLOAD_PORT        ?= /dev/ttyUSB0
99
 UPLOAD_PORT        ?= /dev/ttyUSB0
78
 
100
 
79
-#Directory used to build files in, contains all the build files, from object files to the final hex file
80
-#on linux it is best to put an absolute path like /home/username/tmp .
101
+# Directory used to build files in, contains all the build files, from object
102
+# files to the final hex file on linux it is best to put an absolute path
103
+# like /home/username/tmp .
81
 BUILD_DIR          ?= applet
104
 BUILD_DIR          ?= applet
82
 
105
 
83
 # This defines whether Liquid_TWI2 support will be built
106
 # This defines whether Liquid_TWI2 support will be built
84
 LIQUID_TWI2        ?= 0
107
 LIQUID_TWI2        ?= 0
85
 
108
 
86
-# this defines if Wire is needed
109
+# This defines if Wire is needed
87
 WIRE               ?= 0
110
 WIRE               ?= 0
88
 
111
 
89
-# this defines if U8GLIB is needed (may require RELOC_WORKAROUND)
90
-U8GLIB             ?= 1
112
+# This defines if Tone is needed (i.e SPEAKER is defined in Configuration.h)
113
+# Disabling this (and SPEAKER) saves approximatively 350 bytes of memory.
114
+TONE               ?= 1
115
+
116
+# This defines if U8GLIB is needed (may require RELOC_WORKAROUND)
117
+U8GLIB             ?= 0
91
 
118
 
92
-# this defines whether to include the Trinamic TMCStepper library
93
-TMC                ?= 1
119
+# This defines whether to include the Trinamic TMCStepper library
120
+TMC                ?= 0
94
 
121
 
95
-# this defines whether to include the AdaFruit NeoPixel library
122
+# This defines whether to include the AdaFruit NeoPixel library
96
 NEOPIXEL           ?= 0
123
 NEOPIXEL           ?= 0
97
 
124
 
98
 ############
125
 ############
99
 # Try to automatically determine whether RELOC_WORKAROUND is needed based
126
 # Try to automatically determine whether RELOC_WORKAROUND is needed based
100
 # on GCC versions:
127
 # on GCC versions:
101
-#   http://www.avrfreaks.net/comment/1789106#comment-1789106
128
+#   https://www.avrfreaks.net/comment/1789106#comment-1789106
102
 
129
 
103
 CC_MAJ:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC__ | cut -f3 -d\ )
130
 CC_MAJ:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC__ | cut -f3 -d\ )
104
 CC_MIN:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC_MINOR__ | cut -f3 -d\ )
131
 CC_MIN:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC_MINOR__ | cut -f3 -d\ )
170
 else ifeq ($(HARDWARE_MOTHERBOARD),1101)
197
 else ifeq ($(HARDWARE_MOTHERBOARD),1101)
171
 # Velleman K8400 Controller (derived from 3Drag Controller)
198
 # Velleman K8400 Controller (derived from 3Drag Controller)
172
 else ifeq ($(HARDWARE_MOTHERBOARD),1102)
199
 else ifeq ($(HARDWARE_MOTHERBOARD),1102)
173
-# 2PrintBeta BAM&DICE with STK drivers
200
+# Velleman K8600 Controller (Vertex Nano)
174
 else ifeq ($(HARDWARE_MOTHERBOARD),1103)
201
 else ifeq ($(HARDWARE_MOTHERBOARD),1103)
175
-# 2PrintBeta BAM&DICE Due with STK drivers
202
+# Velleman K8800 Controller (Vertex Delta)
176
 else ifeq ($(HARDWARE_MOTHERBOARD),1104)
203
 else ifeq ($(HARDWARE_MOTHERBOARD),1104)
177
-# MKS BASE v1.0
204
+# 2PrintBeta BAM&DICE with STK drivers
178
 else ifeq ($(HARDWARE_MOTHERBOARD),1105)
205
 else ifeq ($(HARDWARE_MOTHERBOARD),1105)
179
-# MKS v1.4 with A4982 stepper drivers
206
+# 2PrintBeta BAM&DICE Due with STK drivers
180
 else ifeq ($(HARDWARE_MOTHERBOARD),1106)
207
 else ifeq ($(HARDWARE_MOTHERBOARD),1106)
181
-# MKS v1.5 with Allegro A4982 stepper drivers
208
+# MKS BASE v1.0
182
 else ifeq ($(HARDWARE_MOTHERBOARD),1107)
209
 else ifeq ($(HARDWARE_MOTHERBOARD),1107)
183
-# MKS v1.6 with Allegro A4982 stepper drivers
210
+# MKS v1.4 with A4982 stepper drivers
184
 else ifeq ($(HARDWARE_MOTHERBOARD),1108)
211
 else ifeq ($(HARDWARE_MOTHERBOARD),1108)
185
-
186
-# MKS BASE 1.0 with Heroic HR4982 stepper drivers
212
+# MKS v1.5 with Allegro A4982 stepper drivers
187
 else ifeq ($(HARDWARE_MOTHERBOARD),1109)
213
 else ifeq ($(HARDWARE_MOTHERBOARD),1109)
188
-# MKS GEN v1.3 or 1.4
214
+# MKS v1.6 with Allegro A4982 stepper drivers
189
 else ifeq ($(HARDWARE_MOTHERBOARD),1110)
215
 else ifeq ($(HARDWARE_MOTHERBOARD),1110)
190
-# MKS GEN L
216
+# MKS BASE 1.0 with Heroic HR4982 stepper drivers
191
 else ifeq ($(HARDWARE_MOTHERBOARD),1111)
217
 else ifeq ($(HARDWARE_MOTHERBOARD),1111)
192
-# zrib V2.0 control board (Chinese knock off RAMPS replica)
218
+# MKS GEN v1.3 or 1.4
193
 else ifeq ($(HARDWARE_MOTHERBOARD),1112)
219
 else ifeq ($(HARDWARE_MOTHERBOARD),1112)
194
-# BigTreeTech or BIQU KFB2.0
220
+# MKS GEN L
195
 else ifeq ($(HARDWARE_MOTHERBOARD),1113)
221
 else ifeq ($(HARDWARE_MOTHERBOARD),1113)
196
-# Felix 2.0+ Electronics Board (RAMPS like)
222
+# zrib V2.0 control board (Chinese knock off RAMPS replica)
197
 else ifeq ($(HARDWARE_MOTHERBOARD),1114)
223
 else ifeq ($(HARDWARE_MOTHERBOARD),1114)
198
-# Invent-A-Part RigidBoard
224
+# BigTreeTech or BIQU KFB2.0
199
 else ifeq ($(HARDWARE_MOTHERBOARD),1115)
225
 else ifeq ($(HARDWARE_MOTHERBOARD),1115)
200
-# Invent-A-Part RigidBoard V2
226
+# Felix 2.0+ Electronics Board (RAMPS like)
201
 else ifeq ($(HARDWARE_MOTHERBOARD),1116)
227
 else ifeq ($(HARDWARE_MOTHERBOARD),1116)
202
-# Sainsmart 2-in-1 board
228
+# Invent-A-Part RigidBoard
203
 else ifeq ($(HARDWARE_MOTHERBOARD),1117)
229
 else ifeq ($(HARDWARE_MOTHERBOARD),1117)
204
-# Ultimaker
230
+# Invent-A-Part RigidBoard V2
205
 else ifeq ($(HARDWARE_MOTHERBOARD),1118)
231
 else ifeq ($(HARDWARE_MOTHERBOARD),1118)
206
-# Ultimaker (Older electronics. Pre 1.5.4. This is rare)
232
+# Sainsmart 2-in-1 board
207
 else ifeq ($(HARDWARE_MOTHERBOARD),1119)
233
 else ifeq ($(HARDWARE_MOTHERBOARD),1119)
208
-  MCU ?= atmega1280
234
+# Ultimaker
235
+else ifeq ($(HARDWARE_MOTHERBOARD),1120)
236
+# Ultimaker (Older electronics. Pre 1.5.4. This is rare)
237
+else ifeq ($(HARDWARE_MOTHERBOARD),1121)
238
+  MCU              ?= atmega1280
239
+  PROG_MCU         ?= m1280
209
 
240
 
210
 # Azteeg X3
241
 # Azteeg X3
211
-else ifeq ($(HARDWARE_MOTHERBOARD),1120)
242
+else ifeq ($(HARDWARE_MOTHERBOARD),1122)
212
 # Azteeg X3 Pro
243
 # Azteeg X3 Pro
213
-else ifeq ($(HARDWARE_MOTHERBOARD),1121)
244
+else ifeq ($(HARDWARE_MOTHERBOARD),1123)
214
 # Ultimainboard 2.x (Uses TEMP_SENSOR 20)
245
 # Ultimainboard 2.x (Uses TEMP_SENSOR 20)
215
-else ifeq ($(HARDWARE_MOTHERBOARD),1122)
246
+else ifeq ($(HARDWARE_MOTHERBOARD),1124)
216
 # Rumba
247
 # Rumba
217
-else ifeq ($(HARDWARE_MOTHERBOARD),1123)
248
+else ifeq ($(HARDWARE_MOTHERBOARD),1125)
218
 # Raise3D Rumba
249
 # Raise3D Rumba
219
-else ifeq ($(HARDWARE_MOTHERBOARD),1124)
250
+else ifeq ($(HARDWARE_MOTHERBOARD),1126)
220
 # Rapide Lite RL200 Rumba
251
 # Rapide Lite RL200 Rumba
221
-else ifeq ($(HARDWARE_MOTHERBOARD),1125)
252
+else ifeq ($(HARDWARE_MOTHERBOARD),1127)
222
 # Formbot T-Rex 2 Plus
253
 # Formbot T-Rex 2 Plus
223
-else ifeq ($(HARDWARE_MOTHERBOARD),1126)
254
+else ifeq ($(HARDWARE_MOTHERBOARD),1128)
224
 # Formbot T-Rex 3
255
 # Formbot T-Rex 3
225
-else ifeq ($(HARDWARE_MOTHERBOARD),1127)
256
+else ifeq ($(HARDWARE_MOTHERBOARD),1129)
226
 # Formbot Raptor
257
 # Formbot Raptor
227
-else ifeq ($(HARDWARE_MOTHERBOARD),1128)
258
+else ifeq ($(HARDWARE_MOTHERBOARD),1130)
228
 # Formbot Raptor 2
259
 # Formbot Raptor 2
229
-else ifeq ($(HARDWARE_MOTHERBOARD),1129)
260
+else ifeq ($(HARDWARE_MOTHERBOARD),1131)
230
 # bq ZUM Mega 3D
261
 # bq ZUM Mega 3D
231
-else ifeq ($(HARDWARE_MOTHERBOARD),1130)
262
+else ifeq ($(HARDWARE_MOTHERBOARD),1132)
232
 # MakeBoard Mini v2.1.2 is a control board sold by MicroMake
263
 # MakeBoard Mini v2.1.2 is a control board sold by MicroMake
233
-else ifeq ($(HARDWARE_MOTHERBOARD),1131)
264
+else ifeq ($(HARDWARE_MOTHERBOARD),1133)
234
 # TriGorilla Anycubic version 1.3 based on RAMPS EFB
265
 # TriGorilla Anycubic version 1.3 based on RAMPS EFB
235
-else ifeq ($(HARDWARE_MOTHERBOARD),1132)
266
+else ifeq ($(HARDWARE_MOTHERBOARD),1134)
236
 # TriGorilla Anycubic version 1.4 based on RAMPS EFB
267
 # TriGorilla Anycubic version 1.4 based on RAMPS EFB
237
-else ifeq ($(HARDWARE_MOTHERBOARD),1133)
268
+else ifeq ($(HARDWARE_MOTHERBOARD),1135)
238
 # TriGorilla Anycubic version 1.4 Rev 1.1
269
 # TriGorilla Anycubic version 1.4 Rev 1.1
239
-else ifeq ($(HARDWARE_MOTHERBOARD),1134)
270
+else ifeq ($(HARDWARE_MOTHERBOARD),1136)
240
 # Creality: Ender-4, CR-8
271
 # Creality: Ender-4, CR-8
241
-else ifeq ($(HARDWARE_MOTHERBOARD),1135)
272
+else ifeq ($(HARDWARE_MOTHERBOARD),1137)
242
 # Creality: CR10S, CR20, CR-X
273
 # Creality: CR10S, CR20, CR-X
243
-else ifeq ($(HARDWARE_MOTHERBOARD),1136)
274
+else ifeq ($(HARDWARE_MOTHERBOARD),1138)
244
 # Dagoma F5
275
 # Dagoma F5
245
-else ifeq ($(HARDWARE_MOTHERBOARD),1137)
276
+else ifeq ($(HARDWARE_MOTHERBOARD),1139)
246
 # FYSETC F6 1.3
277
 # FYSETC F6 1.3
247
-else ifeq ($(HARDWARE_MOTHERBOARD),1138)
278
+else ifeq ($(HARDWARE_MOTHERBOARD),1140)
248
 # FYSETC F6 1.5
279
 # FYSETC F6 1.5
249
-else ifeq ($(HARDWARE_MOTHERBOARD),1139)
280
+else ifeq ($(HARDWARE_MOTHERBOARD),1141)
250
 # Duplicator i3 Plus
281
 # Duplicator i3 Plus
251
-else ifeq ($(HARDWARE_MOTHERBOARD),1140)
282
+else ifeq ($(HARDWARE_MOTHERBOARD),1142)
252
 # VORON
283
 # VORON
253
-else ifeq ($(HARDWARE_MOTHERBOARD),1141)
284
+else ifeq ($(HARDWARE_MOTHERBOARD),1143)
254
 # TRONXY V3 1.0
285
 # TRONXY V3 1.0
255
-else ifeq ($(HARDWARE_MOTHERBOARD),1142)
286
+else ifeq ($(HARDWARE_MOTHERBOARD),1144)
256
 # Z-Bolt X Series
287
 # Z-Bolt X Series
257
-else ifeq ($(HARDWARE_MOTHERBOARD),1143)
288
+else ifeq ($(HARDWARE_MOTHERBOARD),1145)
258
 # TT OSCAR
289
 # TT OSCAR
259
-else ifeq ($(HARDWARE_MOTHERBOARD),1144)
290
+else ifeq ($(HARDWARE_MOTHERBOARD),1146)
260
 # Overlord/Overlord Pro
291
 # Overlord/Overlord Pro
261
-else ifeq ($(HARDWARE_MOTHERBOARD),1145)
292
+else ifeq ($(HARDWARE_MOTHERBOARD),1147)
262
 # ADIMLab Gantry v1
293
 # ADIMLab Gantry v1
263
-else ifeq ($(HARDWARE_MOTHERBOARD),1146)
294
+else ifeq ($(HARDWARE_MOTHERBOARD),1148)
264
 # ADIMLab Gantry v2
295
 # ADIMLab Gantry v2
265
-else ifeq ($(HARDWARE_MOTHERBOARD),1147)
296
+else ifeq ($(HARDWARE_MOTHERBOARD),1149)
266
 # BIQU Tango V1
297
 # BIQU Tango V1
267
-else ifeq ($(HARDWARE_MOTHERBOARD),1148)
298
+else ifeq ($(HARDWARE_MOTHERBOARD),1150)
268
 # MKS GEN L V2
299
 # MKS GEN L V2
269
-else ifeq ($(HARDWARE_MOTHERBOARD),1149)
300
+else ifeq ($(HARDWARE_MOTHERBOARD),1151)
301
+# MKS GEN L V2.1
302
+else ifeq ($(HARDWARE_MOTHERBOARD),1152)
303
+# Copymaster 3D
304
+else ifeq ($(HARDWARE_MOTHERBOARD),1153)
305
+# Ortur 4
306
+else ifeq ($(HARDWARE_MOTHERBOARD),1154)
307
+# Tenlog D3 Hero
308
+else ifeq ($(HARDWARE_MOTHERBOARD),1155)
270
 
309
 
271
 #
310
 #
272
 # RAMBo and derivatives
311
 # RAMBo and derivatives
339
 # Minitronics v1.0/1.1
378
 # Minitronics v1.0/1.1
340
 else ifeq ($(HARDWARE_MOTHERBOARD),1400)
379
 else ifeq ($(HARDWARE_MOTHERBOARD),1400)
341
   MCU              ?= atmega1281
380
   MCU              ?= atmega1281
381
+  PROG_MCU         ?= m1281
342
 # Silvergate v1.0
382
 # Silvergate v1.0
343
 else ifeq ($(HARDWARE_MOTHERBOARD),1401)
383
 else ifeq ($(HARDWARE_MOTHERBOARD),1401)
344
   MCU              ?= atmega1281
384
   MCU              ?= atmega1281
385
+  PROG_MCU         ?= m1281
345
 
386
 
346
 #
387
 #
347
 # Sanguinololu and Derivatives - ATmega644P, ATmega1284P
388
 # Sanguinololu and Derivatives - ATmega644P, ATmega1284P
351
 else ifeq ($(HARDWARE_MOTHERBOARD),1500)
392
 else ifeq ($(HARDWARE_MOTHERBOARD),1500)
352
   HARDWARE_VARIANT ?= Sanguino
393
   HARDWARE_VARIANT ?= Sanguino
353
   MCU              ?= atmega644p
394
   MCU              ?= atmega644p
395
+  PROG_MCU         ?= m644p
354
 # Sanguinololu 1.2 and above
396
 # Sanguinololu 1.2 and above
355
 else ifeq ($(HARDWARE_MOTHERBOARD),1501)
397
 else ifeq ($(HARDWARE_MOTHERBOARD),1501)
356
   HARDWARE_VARIANT ?= Sanguino
398
   HARDWARE_VARIANT ?= Sanguino
357
   MCU              ?= atmega644p
399
   MCU              ?= atmega644p
400
+  PROG_MCU         ?= m644p
358
 # Melzi
401
 # Melzi
359
 else ifeq ($(HARDWARE_MOTHERBOARD),1502)
402
 else ifeq ($(HARDWARE_MOTHERBOARD),1502)
360
   HARDWARE_VARIANT ?= Sanguino
403
   HARDWARE_VARIANT ?= Sanguino
361
   MCU              ?= atmega644p
404
   MCU              ?= atmega644p
362
-# Melzi with ATmega1284 (MaKr3d version)
405
+  PROG_MCU         ?= m644p
406
+# Melzi V2.0
363
 else ifeq ($(HARDWARE_MOTHERBOARD),1503)
407
 else ifeq ($(HARDWARE_MOTHERBOARD),1503)
364
   HARDWARE_VARIANT ?= Sanguino
408
   HARDWARE_VARIANT ?= Sanguino
365
   MCU              ?= atmega1284p
409
   MCU              ?= atmega1284p
366
-# Melzi Creality3D board (for CR-10 etc)
410
+  PROG_MCU         ?= m1284p
411
+# Melzi with ATmega1284 (MaKr3d version)
367
 else ifeq ($(HARDWARE_MOTHERBOARD),1504)
412
 else ifeq ($(HARDWARE_MOTHERBOARD),1504)
368
   HARDWARE_VARIANT ?= Sanguino
413
   HARDWARE_VARIANT ?= Sanguino
369
   MCU              ?= atmega1284p
414
   MCU              ?= atmega1284p
370
-# Melzi Malyan M150 board
415
+  PROG_MCU         ?= m1284p
416
+# Melzi Creality3D board (for CR-10 etc)
371
 else ifeq ($(HARDWARE_MOTHERBOARD),1505)
417
 else ifeq ($(HARDWARE_MOTHERBOARD),1505)
372
   HARDWARE_VARIANT ?= Sanguino
418
   HARDWARE_VARIANT ?= Sanguino
373
   MCU              ?= atmega1284p
419
   MCU              ?= atmega1284p
374
-# Tronxy X5S
420
+  PROG_MCU         ?= m1284p
421
+# Melzi Malyan M150 board
375
 else ifeq ($(HARDWARE_MOTHERBOARD),1506)
422
 else ifeq ($(HARDWARE_MOTHERBOARD),1506)
376
   HARDWARE_VARIANT ?= Sanguino
423
   HARDWARE_VARIANT ?= Sanguino
377
   MCU              ?= atmega1284p
424
   MCU              ?= atmega1284p
378
-# STB V1.1
425
+  PROG_MCU         ?= m1284p
426
+# Tronxy X5S
379
 else ifeq ($(HARDWARE_MOTHERBOARD),1507)
427
 else ifeq ($(HARDWARE_MOTHERBOARD),1507)
380
   HARDWARE_VARIANT ?= Sanguino
428
   HARDWARE_VARIANT ?= Sanguino
381
   MCU              ?= atmega1284p
429
   MCU              ?= atmega1284p
382
-# Azteeg X1
430
+  PROG_MCU         ?= m1284p
431
+# STB V1.1
383
 else ifeq ($(HARDWARE_MOTHERBOARD),1508)
432
 else ifeq ($(HARDWARE_MOTHERBOARD),1508)
384
   HARDWARE_VARIANT ?= Sanguino
433
   HARDWARE_VARIANT ?= Sanguino
385
   MCU              ?= atmega1284p
434
   MCU              ?= atmega1284p
386
-# Anet 1.0 (Melzi clone)
435
+  PROG_MCU         ?= m1284p
436
+# Azteeg X1
387
 else ifeq ($(HARDWARE_MOTHERBOARD),1509)
437
 else ifeq ($(HARDWARE_MOTHERBOARD),1509)
388
   HARDWARE_VARIANT ?= Sanguino
438
   HARDWARE_VARIANT ?= Sanguino
389
   MCU              ?= atmega1284p
439
   MCU              ?= atmega1284p
440
+  PROG_MCU         ?= m1284p
441
+# Anet 1.0 (Melzi clone)
442
+else ifeq ($(HARDWARE_MOTHERBOARD),1510)
443
+  HARDWARE_VARIANT ?= Sanguino
444
+  MCU              ?= atmega1284p
445
+  PROG_MCU         ?= m1284p
390
 
446
 
391
 #
447
 #
392
 # Other ATmega644P, ATmega644, ATmega1284P
448
 # Other ATmega644P, ATmega644, ATmega1284P
396
 else ifeq ($(HARDWARE_MOTHERBOARD),1600)
452
 else ifeq ($(HARDWARE_MOTHERBOARD),1600)
397
   HARDWARE_VARIANT ?= Sanguino
453
   HARDWARE_VARIANT ?= Sanguino
398
   MCU              ?= atmega644p
454
   MCU              ?= atmega644p
455
+  PROG_MCU         ?= m644p
399
 # Gen3+
456
 # Gen3+
400
 else ifeq ($(HARDWARE_MOTHERBOARD),1601)
457
 else ifeq ($(HARDWARE_MOTHERBOARD),1601)
401
   HARDWARE_VARIANT ?= Sanguino
458
   HARDWARE_VARIANT ?= Sanguino
402
   MCU              ?= atmega644p
459
   MCU              ?= atmega644p
460
+  PROG_MCU         ?= m644p
403
 # Gen6
461
 # Gen6
404
 else ifeq ($(HARDWARE_MOTHERBOARD),1602)
462
 else ifeq ($(HARDWARE_MOTHERBOARD),1602)
405
   HARDWARE_VARIANT ?= Gen6
463
   HARDWARE_VARIANT ?= Gen6
406
   MCU              ?= atmega644p
464
   MCU              ?= atmega644p
465
+  PROG_MCU         ?= m644p
407
 # Gen6 deluxe
466
 # Gen6 deluxe
408
 else ifeq ($(HARDWARE_MOTHERBOARD),1603)
467
 else ifeq ($(HARDWARE_MOTHERBOARD),1603)
409
   HARDWARE_VARIANT ?= Gen6
468
   HARDWARE_VARIANT ?= Gen6
410
   MCU              ?= atmega644p
469
   MCU              ?= atmega644p
470
+  PROG_MCU         ?= m644p
411
 # Gen7 custom (Alfons3 Version)
471
 # Gen7 custom (Alfons3 Version)
412
 else ifeq ($(HARDWARE_MOTHERBOARD),1604)
472
 else ifeq ($(HARDWARE_MOTHERBOARD),1604)
413
   HARDWARE_VARIANT ?= Gen7
473
   HARDWARE_VARIANT ?= Gen7
414
   MCU              ?= atmega644
474
   MCU              ?= atmega644
475
+  PROG_MCU         ?= m644
415
   F_CPU            ?= 20000000
476
   F_CPU            ?= 20000000
416
 # Gen7 v1.1, v1.2
477
 # Gen7 v1.1, v1.2
417
 else ifeq ($(HARDWARE_MOTHERBOARD),1605)
478
 else ifeq ($(HARDWARE_MOTHERBOARD),1605)
418
   HARDWARE_VARIANT ?= Gen7
479
   HARDWARE_VARIANT ?= Gen7
419
   MCU              ?= atmega644p
480
   MCU              ?= atmega644p
481
+  PROG_MCU         ?= m644p
420
   F_CPU            ?= 20000000
482
   F_CPU            ?= 20000000
421
 # Gen7 v1.3
483
 # Gen7 v1.3
422
 else ifeq ($(HARDWARE_MOTHERBOARD),1606)
484
 else ifeq ($(HARDWARE_MOTHERBOARD),1606)
423
   HARDWARE_VARIANT ?= Gen7
485
   HARDWARE_VARIANT ?= Gen7
424
   MCU              ?= atmega644p
486
   MCU              ?= atmega644p
487
+  PROG_MCU         ?= m644p
425
   F_CPU            ?= 20000000
488
   F_CPU            ?= 20000000
426
 # Gen7 v1.4
489
 # Gen7 v1.4
427
 else ifeq ($(HARDWARE_MOTHERBOARD),1607)
490
 else ifeq ($(HARDWARE_MOTHERBOARD),1607)
428
   HARDWARE_VARIANT ?= Gen7
491
   HARDWARE_VARIANT ?= Gen7
429
   MCU              ?= atmega1284p
492
   MCU              ?= atmega1284p
493
+  PROG_MCU         ?= m1284p
430
   F_CPU            ?= 20000000
494
   F_CPU            ?= 20000000
431
 # Alpha OMCA board
495
 # Alpha OMCA board
432
 else ifeq ($(HARDWARE_MOTHERBOARD),1608)
496
 else ifeq ($(HARDWARE_MOTHERBOARD),1608)
433
   HARDWARE_VARIANT ?= SanguinoA
497
   HARDWARE_VARIANT ?= SanguinoA
434
   MCU              ?= atmega644
498
   MCU              ?= atmega644
499
+  PROG_MCU         ?= m644
435
 # Final OMCA board
500
 # Final OMCA board
436
 else ifeq ($(HARDWARE_MOTHERBOARD),1609)
501
 else ifeq ($(HARDWARE_MOTHERBOARD),1609)
437
   HARDWARE_VARIANT ?= Sanguino
502
   HARDWARE_VARIANT ?= Sanguino
438
   MCU              ?= atmega644p
503
   MCU              ?= atmega644p
504
+  PROG_MCU         ?= m644p
439
 # Sethi 3D_1
505
 # Sethi 3D_1
440
 else ifeq ($(HARDWARE_MOTHERBOARD),1610)
506
 else ifeq ($(HARDWARE_MOTHERBOARD),1610)
441
   HARDWARE_VARIANT ?= Sanguino
507
   HARDWARE_VARIANT ?= Sanguino
442
   MCU              ?= atmega644p
508
   MCU              ?= atmega644p
509
+  PROG_MCU         ?= m644p
443
 
510
 
444
 #
511
 #
445
 # Teensyduino - AT90USB1286, AT90USB1286P
512
 # Teensyduino - AT90USB1286, AT90USB1286P
449
 else ifeq ($(HARDWARE_MOTHERBOARD),1700)
516
 else ifeq ($(HARDWARE_MOTHERBOARD),1700)
450
   HARDWARE_VARIANT ?= Teensy
517
   HARDWARE_VARIANT ?= Teensy
451
   MCU              ?= at90usb1286
518
   MCU              ?= at90usb1286
519
+  PROG_MCU         ?= usb1286
452
 # Printrboard (AT90USB1286)
520
 # Printrboard (AT90USB1286)
453
 else ifeq ($(HARDWARE_MOTHERBOARD),1701)
521
 else ifeq ($(HARDWARE_MOTHERBOARD),1701)
454
   HARDWARE_VARIANT ?= Teensy
522
   HARDWARE_VARIANT ?= Teensy
455
   MCU              ?= at90usb1286
523
   MCU              ?= at90usb1286
524
+  PROG_MCU         ?= usb1286
456
 # Printrboard Revision F (AT90USB1286)
525
 # Printrboard Revision F (AT90USB1286)
457
 else ifeq ($(HARDWARE_MOTHERBOARD),1702)
526
 else ifeq ($(HARDWARE_MOTHERBOARD),1702)
458
   HARDWARE_VARIANT ?= Teensy
527
   HARDWARE_VARIANT ?= Teensy
459
   MCU              ?= at90usb1286
528
   MCU              ?= at90usb1286
529
+  PROG_MCU         ?= usb1286
460
 # Brainwave (AT90USB646)
530
 # Brainwave (AT90USB646)
461
 else ifeq ($(HARDWARE_MOTHERBOARD),1703)
531
 else ifeq ($(HARDWARE_MOTHERBOARD),1703)
462
   HARDWARE_VARIANT ?= Teensy
532
   HARDWARE_VARIANT ?= Teensy
463
   MCU              ?= at90usb646
533
   MCU              ?= at90usb646
534
+  PROG_MCU         ?= usb646
464
 # Brainwave Pro (AT90USB1286)
535
 # Brainwave Pro (AT90USB1286)
465
 else ifeq ($(HARDWARE_MOTHERBOARD),1704)
536
 else ifeq ($(HARDWARE_MOTHERBOARD),1704)
466
   HARDWARE_VARIANT ?= Teensy
537
   HARDWARE_VARIANT ?= Teensy
467
   MCU              ?= at90usb1286
538
   MCU              ?= at90usb1286
539
+  PROG_MCU         ?= usb1286
468
 # SAV Mk-I (AT90USB1286)
540
 # SAV Mk-I (AT90USB1286)
469
 else ifeq ($(HARDWARE_MOTHERBOARD),1705)
541
 else ifeq ($(HARDWARE_MOTHERBOARD),1705)
470
   HARDWARE_VARIANT ?= Teensy
542
   HARDWARE_VARIANT ?= Teensy
471
   MCU              ?= at90usb1286
543
   MCU              ?= at90usb1286
544
+  PROG_MCU         ?= usb1286
472
 # Teensy++2.0 (AT90USB1286)
545
 # Teensy++2.0 (AT90USB1286)
473
 else ifeq ($(HARDWARE_MOTHERBOARD),1706)
546
 else ifeq ($(HARDWARE_MOTHERBOARD),1706)
474
   HARDWARE_VARIANT ?= Teensy
547
   HARDWARE_VARIANT ?= Teensy
475
   MCU              ?= at90usb1286
548
   MCU              ?= at90usb1286
549
+  PROG_MCU         ?= usb1286
476
 # 5DPrint D8 Driver Board
550
 # 5DPrint D8 Driver Board
477
 else ifeq ($(HARDWARE_MOTHERBOARD),1707)
551
 else ifeq ($(HARDWARE_MOTHERBOARD),1707)
478
   HARDWARE_VARIANT ?= Teensy
552
   HARDWARE_VARIANT ?= Teensy
479
   MCU              ?= at90usb1286
553
   MCU              ?= at90usb1286
554
+  PROG_MCU         ?= usb1286
480
 
555
 
481
 # UltiMachine Archim1 (with DRV8825 drivers)
556
 # UltiMachine Archim1 (with DRV8825 drivers)
482
 else ifeq ($(HARDWARE_MOTHERBOARD),3023)
557
 else ifeq ($(HARDWARE_MOTHERBOARD),3023)
483
   HARDWARE_VARIANT ?= archim
558
   HARDWARE_VARIANT ?= archim
484
   MCPU              = cortex-m3
559
   MCPU              = cortex-m3
485
-  F_CPU             = 84000000L
560
+  F_CPU             = 84000000
486
   IS_MCU            = 0
561
   IS_MCU            = 0
487
 # UltiMachine Archim2 (with TMC2130 drivers)
562
 # UltiMachine Archim2 (with TMC2130 drivers)
488
 else ifeq ($(HARDWARE_MOTHERBOARD),3024)
563
 else ifeq ($(HARDWARE_MOTHERBOARD),3024)
489
   HARDWARE_VARIANT ?= archim
564
   HARDWARE_VARIANT ?= archim
490
   MCPU              = cortex-m3
565
   MCPU              = cortex-m3
491
-  F_CPU             = 84000000L
566
+  F_CPU             = 84000000
492
   IS_MCU            = 0
567
   IS_MCU            = 0
493
 endif
568
 endif
494
 
569
 
495
 # Be sure to regenerate speed_lookuptable.h with create_speed_lookuptable.py
570
 # Be sure to regenerate speed_lookuptable.h with create_speed_lookuptable.py
496
 # if you are setting this to something other than 16MHz
571
 # if you are setting this to something other than 16MHz
572
+# Do not put the UL suffix, it's done later on.
497
 # Set to 16Mhz if not yet set.
573
 # Set to 16Mhz if not yet set.
498
 F_CPU ?= 16000000
574
 F_CPU ?= 16000000
499
 
575
 
503
 ifeq ($(IS_MCU),1)
579
 ifeq ($(IS_MCU),1)
504
   # Set to arduino, ATmega2560 if not yet set.
580
   # Set to arduino, ATmega2560 if not yet set.
505
   HARDWARE_VARIANT ?= arduino
581
   HARDWARE_VARIANT ?= arduino
506
-  MCU ?= atmega2560
582
+  MCU              ?= atmega2560
583
+  PROG_MCU         ?= m2560
507
 
584
 
508
   TOOL_PREFIX = avr
585
   TOOL_PREFIX = avr
509
   MCU_FLAGS   = -mmcu=$(MCU)
586
   MCU_FLAGS   = -mmcu=$(MCU)
534
 VPATH += $(HARDWARE_SRC)
611
 VPATH += $(HARDWARE_SRC)
535
 
612
 
536
 ifeq ($(HARDWARE_VARIANT), $(filter $(HARDWARE_VARIANT),arduino Teensy Sanguino))
613
 ifeq ($(HARDWARE_VARIANT), $(filter $(HARDWARE_VARIANT),arduino Teensy Sanguino))
537
-VPATH += $(ARDUINO_INSTALL_DIR)/hardware/marlin/avr/libraries/LiquidCrystal/src
538
-VPATH += $(ARDUINO_INSTALL_DIR)/hardware/marlin/avr/libraries/SPI
614
+  # Old libraries (avr-core 1.6.21 < / Arduino < 1.6.8)
615
+  VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI
616
+  # New libraries (avr-core >= 1.6.21 / Arduino >= 1.6.8)
617
+  VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI/src
539
 endif
618
 endif
540
 
619
 
541
 ifeq ($(IS_MCU),1)
620
 ifeq ($(IS_MCU),1)
542
   VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/cores/arduino
621
   VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/cores/arduino
543
 
622
 
623
+  # Old libraries (avr-core 1.6.21 < / Arduino < 1.6.8)
544
   VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI
624
   VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI
625
+  VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SoftwareSerial
626
+  # New libraries (avr-core >= 1.6.21 / Arduino >= 1.6.8)
545
   VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI/src
627
   VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI/src
546
   VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SoftwareSerial/src
628
   VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SoftwareSerial/src
547
 endif
629
 endif
548
 
630
 
549
 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidCrystal/src
631
 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidCrystal/src
632
+
550
 ifeq ($(LIQUID_TWI2), 1)
633
 ifeq ($(LIQUID_TWI2), 1)
551
-VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire
552
-VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire/utility
553
-VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidTWI2
634
+  WIRE   = 1
635
+  VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidTWI2
554
 endif
636
 endif
555
 ifeq ($(WIRE), 1)
637
 ifeq ($(WIRE), 1)
556
-VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire
557
-VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire/utility
638
+  # Old libraries (avr-core 1.6.21 / Arduino < 1.6.8)
639
+  VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire
640
+  VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire/utility
641
+  # New libraries (avr-core >= 1.6.21 / Arduino >= 1.6.8)
642
+  VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire/src
643
+  VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire/src/utility
558
 endif
644
 endif
559
 ifeq ($(NEOPIXEL), 1)
645
 ifeq ($(NEOPIXEL), 1)
560
 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Adafruit_NeoPixel
646
 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Adafruit_NeoPixel
626
   LIB_CXXSRC += Wire.cpp
712
   LIB_CXXSRC += Wire.cpp
627
 endif
713
 endif
628
 
714
 
715
+ifeq ($(TONE), 1)
716
+  LIB_CXXSRC += Tone.cpp
717
+endif
718
+
629
 ifeq ($(U8GLIB), 1)
719
 ifeq ($(U8GLIB), 1)
630
   LIB_CXXSRC += U8glib.cpp
720
   LIB_CXXSRC += U8glib.cpp
631
-  LIB_SRC += u8g_ll_api.c u8g_bitmap.c u8g_clip.c u8g_com_null.c u8g_delay.c u8g_page.c u8g_pb.c u8g_pb16h1.c u8g_rect.c u8g_state.c u8g_font.c u8g_font_6x13.c u8g_font_04b_03.c u8g_font_5x8.c
721
+  LIB_SRC += u8g_ll_api.c u8g_bitmap.c u8g_clip.c u8g_com_null.c u8g_delay.c \
722
+    u8g_page.c u8g_pb.c u8g_pb16h1.c u8g_rect.c u8g_state.c u8g_font.c \
723
+    u8g_font_6x13.c u8g_font_04b_03.c u8g_font_5x8.c
632
 endif
724
 endif
633
 
725
 
634
 ifeq ($(TMC), 1)
726
 ifeq ($(TMC), 1)
635
-  LIB_CXXSRC += TMCStepper.cpp COOLCONF.cpp DRV_STATUS.cpp IHOLD_IRUN.cpp CHOPCONF.cpp GCONF.cpp PWMCONF.cpp DRV_CONF.cpp DRVCONF.cpp DRVCTRL.cpp DRVSTATUS.cpp ENCMODE.cpp RAMP_STAT.cpp SGCSCONF.cpp SHORT_CONF.cpp SMARTEN.cpp SW_MODE.cpp SW_SPI.cpp TMC2130Stepper.cpp TMC2208Stepper.cpp TMC2209Stepper.cpp TMC2660Stepper.cpp TMC5130Stepper.cpp TMC5160Stepper.cpp
727
+  LIB_CXXSRC += TMCStepper.cpp COOLCONF.cpp DRV_STATUS.cpp IHOLD_IRUN.cpp \
728
+    CHOPCONF.cpp GCONF.cpp PWMCONF.cpp DRV_CONF.cpp DRVCONF.cpp DRVCTRL.cpp \
729
+    DRVSTATUS.cpp ENCMODE.cpp RAMP_STAT.cpp SGCSCONF.cpp SHORT_CONF.cpp \
730
+    SMARTEN.cpp SW_MODE.cpp SW_SPI.cpp TMC2130Stepper.cpp TMC2208Stepper.cpp \
731
+    TMC2209Stepper.cpp TMC2660Stepper.cpp TMC5130Stepper.cpp TMC5160Stepper.cpp
636
 endif
732
 endif
637
 
733
 
638
 ifeq ($(RELOC_WORKAROUND), 1)
734
 ifeq ($(RELOC_WORKAROUND), 1)
674
 MV = mv -f
770
 MV = mv -f
675
 
771
 
676
 # Place -D or -U options here
772
 # Place -D or -U options here
677
-CDEFS    = -DF_CPU=$(F_CPU) ${addprefix -D , $(DEFINES)} -DARDUINO=$(ARDUINO_VERSION)
773
+CDEFS    = -DF_CPU=$(F_CPU)UL ${addprefix -D , $(DEFINES)} -DARDUINO=$(ARDUINO_VERSION)
678
 CXXDEFS  = $(CDEFS)
774
 CXXDEFS  = $(CDEFS)
679
 
775
 
680
 ifeq ($(HARDWARE_VARIANT), Teensy)
776
 ifeq ($(HARDWARE_VARIANT), Teensy)
681
-  CDEFS  += -DUSB_SERIAL
777
+  CDEFS      += -DUSB_SERIAL
682
   LIB_SRC    += usb.c pins_teensy.c
778
   LIB_SRC    += usb.c pins_teensy.c
683
   LIB_CXXSRC += usb_api.cpp
779
   LIB_CXXSRC += usb_api.cpp
684
 
780
 
685
 else ifeq ($(HARDWARE_VARIANT), archim)
781
 else ifeq ($(HARDWARE_VARIANT), archim)
686
-  CDEFS      += -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSB_VID=0x27b1 -DUSB_PID=0x0001 -DUSBCON '-DUSB_MANUFACTURER="UltiMachine"' '-DUSB_PRODUCT="Archim"'
687
-  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
782
+  CDEFS      += -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__
783
+  CDEFS      += -DUSB_VID=0x27B1 -DUSB_PID=0x0001 -DUSBCON
784
+  CDEFS      += '-DUSB_MANUFACTURER="UltiMachine"' '-DUSB_PRODUCT_STRING="Archim"'
785
+
786
+  LIB_CXXSRC += variant.cpp IPAddress.cpp Reset.cpp RingBuffer.cpp Stream.cpp \
787
+    UARTClass.cpp  USARTClass.cpp abi.cpp new.cpp watchdog.cpp CDC.cpp \
788
+    PluggableUSB.cpp USBCore.cpp
789
+
688
   LIB_SRC    += cortex_handlers.c iar_calls_sam3.c syscalls_sam3.c dtostrf.c itoa.c
790
   LIB_SRC    += cortex_handlers.c iar_calls_sam3.c syscalls_sam3.c dtostrf.c itoa.c
689
 
791
 
690
   ifeq ($(U8GLIB), 1)
792
   ifeq ($(U8GLIB), 1)
710
 ifneq ($(HARDWARE_MOTHERBOARD),)
812
 ifneq ($(HARDWARE_MOTHERBOARD),)
711
   CTUNING += -DMOTHERBOARD=${HARDWARE_MOTHERBOARD}
813
   CTUNING += -DMOTHERBOARD=${HARDWARE_MOTHERBOARD}
712
 endif
814
 endif
815
+
713
 #CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
816
 #CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
714
 CXXEXTRA = -fno-use-cxa-atexit -fno-threadsafe-statics -fno-rtti
817
 CXXEXTRA = -fno-use-cxa-atexit -fno-threadsafe-statics -fno-rtti
715
 CFLAGS := $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CEXTRA)   $(CTUNING) $(CSTANDARD)
818
 CFLAGS := $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CEXTRA)   $(CTUNING) $(CSTANDARD)
716
 CXXFLAGS :=         $(CDEFS) $(CINCS) -O$(OPT) $(CXXEXTRA) $(CTUNING) $(CXXSTANDARD)
819
 CXXFLAGS :=         $(CDEFS) $(CINCS) -O$(OPT) $(CXXEXTRA) $(CTUNING) $(CXXSTANDARD)
717
 ASFLAGS :=          $(CDEFS)
820
 ASFLAGS :=          $(CDEFS)
718
 #ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
821
 #ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
822
+
719
 ifeq ($(HARDWARE_VARIANT), archim)
823
 ifeq ($(HARDWARE_VARIANT), archim)
720
   LD_PREFIX = -Wl,--gc-sections,-Map,Marlin.ino.map,--cref,--check-sections,--entry=Reset_Handler,--unresolved-symbols=report-all,--warn-common,--warn-section-align
824
   LD_PREFIX = -Wl,--gc-sections,-Map,Marlin.ino.map,--cref,--check-sections,--entry=Reset_Handler,--unresolved-symbols=report-all,--warn-common,--warn-section-align
721
   LD_SUFFIX = $(LDLIBS)
825
   LD_SUFFIX = $(LDLIBS)
722
-  LDFLAGS   = -lm -T$(LDSCRIPT) -u _sbrk -u link -u _close -u _fstat -u _isatty -u _lseek -u _read -u _write -u _exit -u kill -u _getpid
826
+
827
+  LDFLAGS   = -lm -T$(LDSCRIPT) -u _sbrk -u link -u _close -u _fstat -u _isatty
828
+  LDFLAGS  += -u _lseek -u _read -u _write -u _exit -u kill -u _getpid
723
 else
829
 else
724
   LD_PREFIX = -Wl,--gc-sections,--relax
830
   LD_PREFIX = -Wl,--gc-sections,--relax
725
   LDFLAGS   = -lm
831
   LDFLAGS   = -lm
735
   AVRDUDE_CONF = $(ARDUINO_INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf
841
   AVRDUDE_CONF = $(ARDUINO_INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf
736
 endif
842
 endif
737
 AVRDUDE_FLAGS = -D -C$(AVRDUDE_CONF) \
843
 AVRDUDE_FLAGS = -D -C$(AVRDUDE_CONF) \
738
-  -p$(MCU) -P$(AVRDUDE_PORT) -c$(AVRDUDE_PROGRAMMER) \
844
+  -p$(PROG_MCU) -P$(AVRDUDE_PORT) -c$(AVRDUDE_PROGRAMMER) \
739
   -b$(UPLOAD_RATE)
845
   -b$(UPLOAD_RATE)
740
 
846
 
741
 # Since Marlin 2.0, the source files may be distributed into several
847
 # Since Marlin 2.0, the source files may be distributed into several
836
 
942
 
837
 .elf.eep:
943
 .elf.eep:
838
 	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
944
 	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
839
-    --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
945
+	  --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
840
 
946
 
841
 # Create extended listing file from ELF output file.
947
 # Create extended listing file from ELF output file.
842
 .elf.lss:
948
 .elf.lss:
850
 
956
 
851
 $(BUILD_DIR)/$(TARGET).elf: $(OBJ) Configuration.h
957
 $(BUILD_DIR)/$(TARGET).elf: $(OBJ) Configuration.h
852
 	$(Pecho) "  CXX   $@"
958
 	$(Pecho) "  CXX   $@"
853
-	$P $(CC) $(LD_PREFIX) $(ALL_CXXFLAGS) -o $@ -L. $(OBJ) $(LDFLAGS) $(LD_SUFFIX)
959
+	$P $(CXX) $(LD_PREFIX) $(ALL_CXXFLAGS) -o $@ -L. $(OBJ) $(LDFLAGS) $(LD_SUFFIX)
854
 
960
 
855
 # Object files that were found in "src" will be stored in $(BUILD_DIR)
961
 # Object files that were found in "src" will be stored in $(BUILD_DIR)
856
 # in directories that mirror the structure of "src"
962
 # in directories that mirror the structure of "src"

+ 15
- 11
Marlin/Marlin.ino View File

1
-/*
2
-================================================================================
1
+/*==============================================================================
3
 
2
 
4
   Marlin Firmware
3
   Marlin Firmware
5
 
4
 
6
-  (c) 2011-2019 MarlinFirmware
5
+  (c) 2011-2020 MarlinFirmware
7
   Portions of Marlin are (c) by their respective authors.
6
   Portions of Marlin are (c) by their respective authors.
8
   All code complies with GPLv2 and/or GPLv3
7
   All code complies with GPLv2 and/or GPLv3
9
 
8
 
12
 Greetings! Thank you for choosing Marlin 2 as your 3D printer firmware.
11
 Greetings! Thank you for choosing Marlin 2 as your 3D printer firmware.
13
 
12
 
14
 To configure Marlin you must edit Configuration.h and Configuration_adv.h
13
 To configure Marlin you must edit Configuration.h and Configuration_adv.h
15
-located in the root 'Marlin' folder. Check the config/examples folder to see if
16
-there's a more suitable starting-point for your specific hardware.
14
+located in the root 'Marlin' folder. Check our Configurations repository to
15
+see if there's a more suitable starting-point for your specific hardware.
17
 
16
 
18
 Before diving in, we recommend the following essential links:
17
 Before diving in, we recommend the following essential links:
19
 
18
 
20
 Marlin Firmware Official Website
19
 Marlin Firmware Official Website
21
 
20
 
22
-  - http://marlinfw.org/
21
+  - https://marlinfw.org/
23
     The official Marlin Firmware website contains the most up-to-date
22
     The official Marlin Firmware website contains the most up-to-date
24
     documentation. Contributions are always welcome!
23
     documentation. Contributions are always welcome!
25
 
24
 
26
 Configuration
25
 Configuration
27
 
26
 
27
+  - https://github.com/MarlinFirmware/Configurations
28
+    Example configurations for several printer models.
29
+
28
   - https://www.youtube.com/watch?v=3gwWVFtdg-4
30
   - https://www.youtube.com/watch?v=3gwWVFtdg-4
29
     A good 20-minute overview of Marlin configuration by Tom Sanladerer.
31
     A good 20-minute overview of Marlin configuration by Tom Sanladerer.
30
     (Applies to Marlin 1.0.x, so Jerk and Acceleration should be halved.)
32
     (Applies to Marlin 1.0.x, so Jerk and Acceleration should be halved.)
31
     Also... https://www.google.com/search?tbs=vid%3A1&q=configure+marlin
33
     Also... https://www.google.com/search?tbs=vid%3A1&q=configure+marlin
32
 
34
 
33
-  - http://marlinfw.org/docs/configuration/configuration.html
35
+  - https://marlinfw.org/docs/configuration/configuration.html
34
     Marlin's configuration options are explained in more detail here.
36
     Marlin's configuration options are explained in more detail here.
35
 
37
 
36
 Getting Help
38
 Getting Help
37
 
39
 
38
-  - http://forums.reprap.org/list.php?415
40
+  - https://reprap.org/forum/list.php?415
39
     The Marlin Discussion Forum is a great place to get help from other Marlin
41
     The Marlin Discussion Forum is a great place to get help from other Marlin
40
     users who may have experienced similar issues to your own.
42
     users who may have experienced similar issues to your own.
41
 
43
 
45
 
47
 
46
 Contributing
48
 Contributing
47
 
49
 
48
-  - http://marlinfw.org/docs/development/contributing.html
50
+  - https://marlinfw.org/docs/development/contributing.html
49
     If you'd like to contribute to Marlin, read this first!
51
     If you'd like to contribute to Marlin, read this first!
50
 
52
 
51
-  - http://marlinfw.org/docs/development/coding_standards.html
53
+  - https://marlinfw.org/docs/development/coding_standards.html
52
     Before submitting code get to know the Coding Standards.
54
     Before submitting code get to know the Coding Standards.
53
-*/
55
+
56
+
57
+------------------------------------------------------------------------------*/

+ 8
- 8
Marlin/Version.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
28
 /**
28
 /**
29
  * Marlin release version identifier
29
  * Marlin release version identifier
30
  */
30
  */
31
-//#define SHORT_BUILD_VERSION "2.0.5"
31
+//#define SHORT_BUILD_VERSION "2.0.7.2"
32
 
32
 
33
 /**
33
 /**
34
  * Verbose version identifier which should contain a reference to the location
34
  * Verbose version identifier which should contain a reference to the location
35
  * from where the binary was downloaded or the source code was compiled.
35
  * from where the binary was downloaded or the source code was compiled.
36
  */
36
  */
37
-//#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION " (Github)"
37
+//#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION
38
 
38
 
39
 /**
39
 /**
40
  * The STRING_DISTRIBUTION_DATE represents when the binary file was built,
40
  * The STRING_DISTRIBUTION_DATE represents when the binary file was built,
41
  * here we define this default string as the date where the latest release
41
  * here we define this default string as the date where the latest release
42
  * version was tagged.
42
  * version was tagged.
43
  */
43
  */
44
-//#define STRING_DISTRIBUTION_DATE "2020-01-31"
44
+//#define STRING_DISTRIBUTION_DATE "2020-07-09"
45
 
45
 
46
 /**
46
 /**
47
  * Defines a generic printer name to be output to the LCD after booting Marlin.
47
  * Defines a generic printer name to be output to the LCD after booting Marlin.
65
  * The WEBSITE_URL is the location where users can get more information such as
65
  * The WEBSITE_URL is the location where users can get more information such as
66
  * documentation about a specific Marlin release.
66
  * documentation about a specific Marlin release.
67
  */
67
  */
68
-//#define WEBSITE_URL "http://marlinfw.org"
68
+//#define WEBSITE_URL "https://marlinfw.org"
69
 
69
 
70
 /**
70
 /**
71
  * Set the vendor info the serial USB interface, if changable
71
  * Set the vendor info the serial USB interface, if changable
72
  * Currently only supported by DUE platform
72
  * Currently only supported by DUE platform
73
  */
73
  */
74
-//#define  USB_DEVICE_VENDOR_ID           0x0000
75
-//#define  USB_DEVICE_PRODUCT_ID          0x0000
76
-//#define  USB_DEVICE_MANUFACTURE_NAME    WEBSITE_URL
74
+//#define USB_DEVICE_VENDOR_ID           0x0000
75
+//#define USB_DEVICE_PRODUCT_ID          0x0000
76
+//#define USB_DEVICE_MANUFACTURE_NAME    WEBSITE_URL

+ 1
- 1
Marlin/lib/readme.txt View File

33
 include paths and build them.
33
 include paths and build them.
34
 
34
 
35
 More information about PlatformIO Library Dependency Finder
35
 More information about PlatformIO Library Dependency Finder
36
-- http://docs.platformio.org/page/librarymanager/ldf.html
36
+- https://docs.platformio.org/page/librarymanager/ldf.html

+ 1
- 2
Marlin/src/HAL/AVR/HAL.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
-
23
 #ifdef __AVR__
22
 #ifdef __AVR__
24
 
23
 
25
 #include "../../inc/MarlinConfig.h"
24
 #include "../../inc/MarlinConfig.h"

+ 22
- 246
Marlin/src/HAL/AVR/HAL.h View File

14
  * GNU General Public License for more details.
14
  * GNU General Public License for more details.
15
  *
15
  *
16
  * You should have received a copy of the GNU General Public License
16
  * You should have received a copy of the GNU General Public License
17
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
18
+ *
18
  */
19
  */
19
 #pragma once
20
 #pragma once
20
 
21
 
24
 #include "watchdog.h"
25
 #include "watchdog.h"
25
 #include "math.h"
26
 #include "math.h"
26
 
27
 
27
-#ifdef USBCON
28
+#ifdef IS_AT90USB
28
   #include <HardwareSerial.h>
29
   #include <HardwareSerial.h>
29
 #else
30
 #else
30
   #define HardwareSerial_h // Hack to prevent HardwareSerial.h header inclusion
31
   #define HardwareSerial_h // Hack to prevent HardwareSerial.h header inclusion
50
 // Defines
51
 // Defines
51
 // ------------------------
52
 // ------------------------
52
 
53
 
53
-//#define analogInputToDigitalPin(IO) IO
54
+// AVR PROGMEM extension for sprintf_P
55
+#define S_FMT "%S"
56
+
57
+// AVR PROGMEM extension for string define
58
+#define PGMSTR(NAM,STR) const char NAM[] PROGMEM = STR
54
 
59
 
55
 #ifndef CRITICAL_SECTION_START
60
 #ifndef CRITICAL_SECTION_START
56
   #define CRITICAL_SECTION_START()  unsigned char _sreg = SREG; cli()
61
   #define CRITICAL_SECTION_START()  unsigned char _sreg = SREG; cli()
60
 #define ENABLE_ISRS()  sei()
65
 #define ENABLE_ISRS()  sei()
61
 #define DISABLE_ISRS() cli()
66
 #define DISABLE_ISRS() cli()
62
 
67
 
63
-// On AVR this is in math.h?
64
-//#define square(x) ((x)*(x))
65
-
66
 // ------------------------
68
 // ------------------------
67
 // Types
69
 // Types
68
 // ------------------------
70
 // ------------------------
69
 
71
 
70
-typedef uint16_t hal_timer_t;
71
-#define HAL_TIMER_TYPE_MAX 0xFFFF
72
-
73
 typedef int8_t pin_t;
72
 typedef int8_t pin_t;
74
 
73
 
75
 #define SHARED_SERVOS HAS_SERVOS
74
 #define SHARED_SERVOS HAS_SERVOS
82
 //extern uint8_t MCUSR;
81
 //extern uint8_t MCUSR;
83
 
82
 
84
 // Serial ports
83
 // Serial ports
85
-#ifdef USBCON
86
-  #if ENABLED(BLUETOOTH)
87
-    #define MYSERIAL0 bluetoothSerial
88
-  #else
89
-    #define MYSERIAL0 Serial
90
-  #endif
91
-  #define NUM_SERIAL 1
84
+#ifdef IS_AT90USB
85
+  #define MYSERIAL0 TERN(BLUETOOTH, bluetoothSerial, Serial)
92
 #else
86
 #else
93
   #if !WITHIN(SERIAL_PORT, -1, 3)
87
   #if !WITHIN(SERIAL_PORT, -1, 3)
94
     #error "SERIAL_PORT must be from -1 to 3. Please update your configuration."
88
     #error "SERIAL_PORT must be from -1 to 3. Please update your configuration."
95
   #endif
89
   #endif
96
-
97
   #define MYSERIAL0 customizedSerial1
90
   #define MYSERIAL0 customizedSerial1
98
 
91
 
99
   #ifdef SERIAL_PORT_2
92
   #ifdef SERIAL_PORT_2
100
     #if !WITHIN(SERIAL_PORT_2, -1, 3)
93
     #if !WITHIN(SERIAL_PORT_2, -1, 3)
101
       #error "SERIAL_PORT_2 must be from -1 to 3. Please update your configuration."
94
       #error "SERIAL_PORT_2 must be from -1 to 3. Please update your configuration."
102
-    #elif SERIAL_PORT_2 == SERIAL_PORT
103
-      #error "SERIAL_PORT_2 must be different than SERIAL_PORT. Please update your configuration."
104
     #endif
95
     #endif
105
     #define MYSERIAL1 customizedSerial2
96
     #define MYSERIAL1 customizedSerial2
106
-    #define NUM_SERIAL 2
107
-  #else
108
-    #define NUM_SERIAL 1
109
   #endif
97
   #endif
110
 #endif
98
 #endif
111
 
99
 
112
-#ifdef DGUS_SERIAL_PORT
113
-  #if !WITHIN(DGUS_SERIAL_PORT, -1, 3)
114
-    #error "DGUS_SERIAL_PORT must be from -1 to 3. Please update your configuration."
115
-  #elif DGUS_SERIAL_PORT == SERIAL_PORT
116
-    #error "DGUS_SERIAL_PORT must be different than SERIAL_PORT. Please update your configuration."
117
-  #elif defined(SERIAL_PORT_2) && DGUS_SERIAL_PORT == SERIAL_PORT_2
118
-    #error "DGUS_SERIAL_PORT must be different than SERIAL_PORT_2. Please update your configuration."
100
+#ifdef LCD_SERIAL_PORT
101
+  #if !WITHIN(LCD_SERIAL_PORT, -1, 3)
102
+    #error "LCD_SERIAL_PORT must be from -1 to 3. Please update your configuration."
103
+  #endif
104
+  #define LCD_SERIAL lcdSerial
105
+  #if HAS_DGUS_LCD
106
+    #define SERIAL_GET_TX_BUFFER_FREE() LCD_SERIAL.get_tx_buffer_free()
119
   #endif
107
   #endif
120
-  #define DGUS_SERIAL internalDgusSerial
121
-
122
-  #define DGUS_SERIAL_GET_TX_BUFFER_FREE DGUS_SERIAL.get_tx_buffer_free
123
 #endif
108
 #endif
124
 
109
 
125
 // ------------------------
110
 // ------------------------
135
 inline void HAL_clear_reset_source() { MCUSR = 0; }
120
 inline void HAL_clear_reset_source() { MCUSR = 0; }
136
 inline uint8_t HAL_get_reset_source() { return MCUSR; }
121
 inline uint8_t HAL_get_reset_source() { return MCUSR; }
137
 
122
 
123
+inline void HAL_reboot() {}  // reboot the board or restart the bootloader
124
+
138
 #pragma GCC diagnostic push
125
 #pragma GCC diagnostic push
139
 #pragma GCC diagnostic ignored "-Wunused-function"
126
 #pragma GCC diagnostic ignored "-Wunused-function"
140
 extern "C" {
127
 extern "C" {
142
 }
129
 }
143
 #pragma GCC diagnostic pop
130
 #pragma GCC diagnostic pop
144
 
131
 
145
-// timers
146
-#define HAL_TIMER_RATE          ((F_CPU) / 8)    // i.e., 2MHz or 2.5MHz
147
-
148
-#define STEP_TIMER_NUM          1
149
-#define TEMP_TIMER_NUM          0
150
-#define PULSE_TIMER_NUM         STEP_TIMER_NUM
151
-
152
-#define TEMP_TIMER_FREQUENCY    ((F_CPU) / 64.0 / 256.0)
153
-
154
-#define STEPPER_TIMER_RATE      HAL_TIMER_RATE
155
-#define STEPPER_TIMER_PRESCALE  8
156
-#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // Cannot be of type double
157
-
158
-#define PULSE_TIMER_RATE       STEPPER_TIMER_RATE   // frequency of pulse timer
159
-#define PULSE_TIMER_PRESCALE   STEPPER_TIMER_PRESCALE
160
-#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
161
-
162
-#define ENABLE_STEPPER_DRIVER_INTERRUPT()  SBI(TIMSK1, OCIE1A)
163
-#define DISABLE_STEPPER_DRIVER_INTERRUPT() CBI(TIMSK1, OCIE1A)
164
-#define STEPPER_ISR_ENABLED()             TEST(TIMSK1, OCIE1A)
165
-
166
-#define ENABLE_TEMPERATURE_INTERRUPT()     SBI(TIMSK0, OCIE0B)
167
-#define DISABLE_TEMPERATURE_INTERRUPT()    CBI(TIMSK0, OCIE0B)
168
-#define TEMPERATURE_ISR_ENABLED()         TEST(TIMSK0, OCIE0B)
169
-
170
-FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) {
171
-  switch (timer_num) {
172
-    case STEP_TIMER_NUM:
173
-      // waveform generation = 0100 = CTC
174
-      SET_WGM(1, CTC_OCRnA);
175
-
176
-      // output mode = 00 (disconnected)
177
-      SET_COMA(1, NORMAL);
178
-
179
-      // Set the timer pre-scaler
180
-      // Generally we use a divider of 8, resulting in a 2MHz timer
181
-      // frequency on a 16MHz MCU. If you are going to change this, be
182
-      // sure to regenerate speed_lookuptable.h with
183
-      // create_speed_lookuptable.py
184
-      SET_CS(1, PRESCALER_8);  //  CS 2 = 1/8 prescaler
185
-
186
-      // Init Stepper ISR to 122 Hz for quick starting
187
-      // (F_CPU) / (STEPPER_TIMER_PRESCALE) / frequency
188
-      OCR1A = 0x4000;
189
-      TCNT1 = 0;
190
-      break;
191
-
192
-    case TEMP_TIMER_NUM:
193
-      // Use timer0 for temperature measurement
194
-      // Interleave temperature interrupt with millies interrupt
195
-      OCR0B = 128;
196
-      break;
197
-  }
198
-}
199
-
200
-#define TIMER_OCR_1             OCR1A
201
-#define TIMER_COUNTER_1         TCNT1
202
-
203
-#define TIMER_OCR_0             OCR0A
204
-#define TIMER_COUNTER_0         TCNT0
205
-
206
-#define _CAT(a,V...) a##V
207
-#define HAL_timer_set_compare(timer, compare) (_CAT(TIMER_OCR_, timer) = compare)
208
-#define HAL_timer_get_compare(timer) _CAT(TIMER_OCR_, timer)
209
-#define HAL_timer_get_count(timer) _CAT(TIMER_COUNTER_, timer)
210
-
211
-/**
212
- * On AVR there is no hardware prioritization and preemption of
213
- * interrupts, so this emulates it. The UART has first priority
214
- * (otherwise, characters will be lost due to UART overflow).
215
- * Then: Stepper, Endstops, Temperature, and -finally- all others.
216
- */
217
-#define HAL_timer_isr_prologue(TIMER_NUM)
218
-#define HAL_timer_isr_epilogue(TIMER_NUM)
219
-
220
-/* 18 cycles maximum latency */
221
-#define HAL_STEP_TIMER_ISR() \
222
-extern "C" void TIMER1_COMPA_vect() __attribute__ ((signal, naked, used, externally_visible)); \
223
-extern "C" void TIMER1_COMPA_vect_bottom() asm ("TIMER1_COMPA_vect_bottom") __attribute__ ((used, externally_visible, noinline)); \
224
-void TIMER1_COMPA_vect() { \
225
-  __asm__ __volatile__ ( \
226
-    A("push r16")                      /* 2 Save R16 */ \
227
-    A("in r16, __SREG__")              /* 1 Get SREG */ \
228
-    A("push r16")                      /* 2 Save SREG into stack */ \
229
-    A("lds r16, %[timsk0]")            /* 2 Load into R0 the Temperature timer Interrupt mask register */ \
230
-    A("push r16")                      /* 2 Save TIMSK0 into the stack */ \
231
-    A("andi r16,~%[msk0]")             /* 1 Disable the temperature ISR */ \
232
-    A("sts %[timsk0], r16")            /* 2 And set the new value */ \
233
-    A("lds r16, %[timsk1]")            /* 2 Load into R0 the stepper timer Interrupt mask register [TIMSK1] */ \
234
-    A("andi r16,~%[msk1]")             /* 1 Disable the stepper ISR */ \
235
-    A("sts %[timsk1], r16")            /* 2 And set the new value */ \
236
-    A("push r16")                      /* 2 Save TIMSK1 into stack */ \
237
-    A("in r16, 0x3B")                  /* 1 Get RAMPZ register */ \
238
-    A("push r16")                      /* 2 Save RAMPZ into stack */ \
239
-    A("in r16, 0x3C")                  /* 1 Get EIND register */ \
240
-    A("push r0")                       /* C runtime can modify all the following registers without restoring them */ \
241
-    A("push r1")                       \
242
-    A("push r18")                      \
243
-    A("push r19")                      \
244
-    A("push r20")                      \
245
-    A("push r21")                      \
246
-    A("push r22")                      \
247
-    A("push r23")                      \
248
-    A("push r24")                      \
249
-    A("push r25")                      \
250
-    A("push r26")                      \
251
-    A("push r27")                      \
252
-    A("push r30")                      \
253
-    A("push r31")                      \
254
-    A("clr r1")                        /* C runtime expects this register to be 0 */ \
255
-    A("call TIMER1_COMPA_vect_bottom") /* Call the bottom handler - No inlining allowed, otherwise registers used are not saved */   \
256
-    A("pop r31")                       \
257
-    A("pop r30")                       \
258
-    A("pop r27")                       \
259
-    A("pop r26")                       \
260
-    A("pop r25")                       \
261
-    A("pop r24")                       \
262
-    A("pop r23")                       \
263
-    A("pop r22")                       \
264
-    A("pop r21")                       \
265
-    A("pop r20")                       \
266
-    A("pop r19")                       \
267
-    A("pop r18")                       \
268
-    A("pop r1")                        \
269
-    A("pop r0")                        \
270
-    A("out 0x3C, r16")                 /* 1 Restore EIND register */ \
271
-    A("pop r16")                       /* 2 Get the original RAMPZ register value */ \
272
-    A("out 0x3B, r16")                 /* 1 Restore RAMPZ register to its original value */ \
273
-    A("pop r16")                       /* 2 Get the original TIMSK1 value but with stepper ISR disabled */ \
274
-    A("ori r16,%[msk1]")               /* 1 Reenable the stepper ISR */ \
275
-    A("cli")                           /* 1 Disable global interrupts - Reenabling Stepper ISR can reenter amd temperature can reenter, and we want that, if it happens, after this ISR has ended */ \
276
-    A("sts %[timsk1], r16")            /* 2 And restore the old value - This reenables the stepper ISR */ \
277
-    A("pop r16")                       /* 2 Get the temperature timer Interrupt mask register [TIMSK0] */ \
278
-    A("sts %[timsk0], r16")            /* 2 And restore the old value - This reenables the temperature ISR */ \
279
-    A("pop r16")                       /* 2 Get the old SREG value */ \
280
-    A("out __SREG__, r16")             /* 1 And restore the SREG value */ \
281
-    A("pop r16")                       /* 2 Restore R16 value */ \
282
-    A("reti")                          /* 4 Return from interrupt */ \
283
-    :                                   \
284
-    : [timsk0] "i" ((uint16_t)&TIMSK0), \
285
-      [timsk1] "i" ((uint16_t)&TIMSK1), \
286
-      [msk0] "M" ((uint8_t)(1<<OCIE0B)),\
287
-      [msk1] "M" ((uint8_t)(1<<OCIE1A)) \
288
-    : \
289
-  ); \
290
-} \
291
-void TIMER1_COMPA_vect_bottom()
292
-
293
-/* 14 cycles maximum latency */
294
-#define HAL_TEMP_TIMER_ISR() \
295
-extern "C" void TIMER0_COMPB_vect() __attribute__ ((signal, naked, used, externally_visible)); \
296
-extern "C" void TIMER0_COMPB_vect_bottom()  asm ("TIMER0_COMPB_vect_bottom") __attribute__ ((used, externally_visible, noinline)); \
297
-void TIMER0_COMPB_vect() { \
298
-  __asm__ __volatile__ ( \
299
-    A("push r16")                       /* 2 Save R16 */ \
300
-    A("in r16, __SREG__")               /* 1 Get SREG */ \
301
-    A("push r16")                       /* 2 Save SREG into stack */ \
302
-    A("lds r16, %[timsk0]")             /* 2 Load into R0 the Temperature timer Interrupt mask register */ \
303
-    A("andi r16,~%[msk0]")              /* 1 Disable the temperature ISR */ \
304
-    A("sts %[timsk0], r16")             /* 2 And set the new value */ \
305
-    A("sei")                            /* 1 Enable global interrupts - It is safe, as the temperature ISR is disabled, so we cannot reenter it */    \
306
-    A("push r16")                       /* 2 Save TIMSK0 into stack */ \
307
-    A("in r16, 0x3B")                   /* 1 Get RAMPZ register */ \
308
-    A("push r16")                       /* 2 Save RAMPZ into stack */ \
309
-    A("in r16, 0x3C")                   /* 1 Get EIND register */ \
310
-    A("push r0")                        /* C runtime can modify all the following registers without restoring them */ \
311
-    A("push r1")                        \
312
-    A("push r18")                       \
313
-    A("push r19")                       \
314
-    A("push r20")                       \
315
-    A("push r21")                       \
316
-    A("push r22")                       \
317
-    A("push r23")                       \
318
-    A("push r24")                       \
319
-    A("push r25")                       \
320
-    A("push r26")                       \
321
-    A("push r27")                       \
322
-    A("push r30")                       \
323
-    A("push r31")                       \
324
-    A("clr r1")                         /* C runtime expects this register to be 0 */ \
325
-    A("call TIMER0_COMPB_vect_bottom")  /* Call the bottom handler - No inlining allowed, otherwise registers used are not saved */   \
326
-    A("pop r31")                        \
327
-    A("pop r30")                        \
328
-    A("pop r27")                        \
329
-    A("pop r26")                        \
330
-    A("pop r25")                        \
331
-    A("pop r24")                        \
332
-    A("pop r23")                        \
333
-    A("pop r22")                        \
334
-    A("pop r21")                        \
335
-    A("pop r20")                        \
336
-    A("pop r19")                        \
337
-    A("pop r18")                        \
338
-    A("pop r1")                         \
339
-    A("pop r0")                         \
340
-    A("out 0x3C, r16")                  /* 1 Restore EIND register */ \
341
-    A("pop r16")                        /* 2 Get the original RAMPZ register value */ \
342
-    A("out 0x3B, r16")                  /* 1 Restore RAMPZ register to its original value */ \
343
-    A("pop r16")                        /* 2 Get the original TIMSK0 value but with temperature ISR disabled */ \
344
-    A("ori r16,%[msk0]")                /* 1 Enable temperature ISR */ \
345
-    A("cli")                            /* 1 Disable global interrupts - We must do this, as we will reenable the temperature ISR, and we don't want to reenter this handler until the current one is done */ \
346
-    A("sts %[timsk0], r16")             /* 2 And restore the old value */ \
347
-    A("pop r16")                        /* 2 Get the old SREG */ \
348
-    A("out __SREG__, r16")              /* 1 And restore the SREG value */ \
349
-    A("pop r16")                        /* 2 Restore R16 */ \
350
-    A("reti")                           /* 4 Return from interrupt */ \
351
-    :                                   \
352
-    : [timsk0] "i"((uint16_t)&TIMSK0),  \
353
-      [msk0] "M" ((uint8_t)(1<<OCIE0B)) \
354
-    : \
355
-  ); \
356
-} \
357
-void TIMER0_COMPB_vect_bottom()
358
-
359
 // ADC
132
 // ADC
360
 #ifdef DIDR2
133
 #ifdef DIDR2
361
   #define HAL_ANALOG_SELECT(ind) do{ if (ind < 8) SBI(DIDR0, ind); else SBI(DIDR2, ind & 0x07); }while(0)
134
   #define HAL_ANALOG_SELECT(ind) do{ if (ind < 8) SBI(DIDR0, ind); else SBI(DIDR2, ind & 0x07); }while(0)
378
   #define HAL_START_ADC(ch) ADCSRB = 0; SET_ADMUX_ADCSRA(ch)
151
   #define HAL_START_ADC(ch) ADCSRB = 0; SET_ADMUX_ADCSRA(ch)
379
 #endif
152
 #endif
380
 
153
 
154
+#define HAL_ADC_VREF        5.0
381
 #define HAL_ADC_RESOLUTION 10
155
 #define HAL_ADC_RESOLUTION 10
382
 #define HAL_READ_ADC()  ADC
156
 #define HAL_READ_ADC()  ADC
383
 #define HAL_ADC_READY() !TEST(ADCSRA, ADSC)
157
 #define HAL_ADC_READY() !TEST(ADCSRA, ADSC)
395
 // AVR compatibility
169
 // AVR compatibility
396
 #define strtof strtod
170
 #define strtof strtod
397
 
171
 
172
+#define HAL_CAN_SET_PWM_FREQ   // This HAL supports PWM Frequency adjustment
173
+
398
 /**
174
 /**
399
  *  set_pwm_frequency
175
  *  set_pwm_frequency
400
  *  Sets the frequency of the timer corresponding to the provided pin
176
  *  Sets the frequency of the timer corresponding to the provided pin

+ 1
- 1
Marlin/src/HAL/AVR/HAL_SPI.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 

+ 618
- 608
Marlin/src/HAL/AVR/MarlinSerial.cpp
File diff suppressed because it is too large
View File


+ 38
- 24
Marlin/src/HAL/AVR/MarlinSerial.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
48
 
48
 
49
   // These are macros to build serial port register names for the selected SERIAL_PORT (C preprocessor
49
   // These are macros to build serial port register names for the selected SERIAL_PORT (C preprocessor
50
   // requires two levels of indirection to expand macro values properly)
50
   // requires two levels of indirection to expand macro values properly)
51
-  #define SERIAL_REGNAME(registerbase,number,suffix) SERIAL_REGNAME_INTERNAL(registerbase,number,suffix)
51
+  #define SERIAL_REGNAME(registerbase,number,suffix) _SERIAL_REGNAME(registerbase,number,suffix)
52
   #if SERIAL_PORT == 0 && (!defined(UBRR0H) || !defined(UDR0)) // use un-numbered registers if necessary
52
   #if SERIAL_PORT == 0 && (!defined(UBRR0H) || !defined(UDR0)) // use un-numbered registers if necessary
53
-    #define SERIAL_REGNAME_INTERNAL(registerbase,number,suffix) registerbase##suffix
53
+    #define _SERIAL_REGNAME(registerbase,number,suffix) registerbase##suffix
54
   #else
54
   #else
55
-    #define SERIAL_REGNAME_INTERNAL(registerbase,number,suffix) registerbase##number##suffix
55
+    #define _SERIAL_REGNAME(registerbase,number,suffix) registerbase##number##suffix
56
   #endif
56
   #endif
57
 
57
 
58
   // Registers used by MarlinSerial class (expanded depending on selected serial port)
58
   // Registers used by MarlinSerial class (expanded depending on selected serial port)
217
       static ring_buffer_pos_t available();
217
       static ring_buffer_pos_t available();
218
       static void write(const uint8_t c);
218
       static void write(const uint8_t c);
219
       static void flushTX();
219
       static void flushTX();
220
-      #ifdef DGUS_SERIAL_PORT
220
+      #if HAS_DGUS_LCD
221
         static ring_buffer_pos_t get_tx_buffer_free();
221
         static ring_buffer_pos_t get_tx_buffer_free();
222
       #endif
222
       #endif
223
 
223
 
224
+      static inline bool emergency_parser_enabled() { return Cfg::EMERGENCYPARSER; }
225
+
224
       FORCE_INLINE static uint8_t dropped() { return Cfg::DROPPED_RX ? rx_dropped_bytes : 0; }
226
       FORCE_INLINE static uint8_t dropped() { return Cfg::DROPPED_RX ? rx_dropped_bytes : 0; }
225
       FORCE_INLINE static uint8_t buffer_overruns() { return Cfg::RX_OVERRUNS ? rx_buffer_overruns : 0; }
227
       FORCE_INLINE static uint8_t buffer_overruns() { return Cfg::RX_OVERRUNS ? rx_buffer_overruns : 0; }
226
       FORCE_INLINE static uint8_t framing_errors() { return Cfg::RX_FRAMING_ERRORS ? rx_framing_errors : 0; }
228
       FORCE_INLINE static uint8_t framing_errors() { return Cfg::RX_FRAMING_ERRORS ? rx_framing_errors : 0; }
278
 
280
 
279
 #endif // !USBCON
281
 #endif // !USBCON
280
 
282
 
281
-#ifdef INTERNAL_SERIAL_PORT
283
+#ifdef MMU2_SERIAL_PORT
282
   template <uint8_t serial>
284
   template <uint8_t serial>
283
-  struct MarlinInternalSerialCfg {
285
+  struct MMU2SerialCfg {
284
     static constexpr int PORT               = serial;
286
     static constexpr int PORT               = serial;
285
-    static constexpr unsigned int RX_SIZE   = 32;
286
-    static constexpr unsigned int TX_SIZE   = 32;
287
     static constexpr bool XONOFF            = false;
287
     static constexpr bool XONOFF            = false;
288
     static constexpr bool EMERGENCYPARSER   = false;
288
     static constexpr bool EMERGENCYPARSER   = false;
289
     static constexpr bool DROPPED_RX        = false;
289
     static constexpr bool DROPPED_RX        = false;
290
-    static constexpr bool RX_OVERRUNS       = false;
291
     static constexpr bool RX_FRAMING_ERRORS = false;
290
     static constexpr bool RX_FRAMING_ERRORS = false;
292
     static constexpr bool MAX_RX_QUEUED     = false;
291
     static constexpr bool MAX_RX_QUEUED     = false;
292
+    static constexpr unsigned int RX_SIZE   = 32;
293
+    static constexpr unsigned int TX_SIZE   = 32;
294
+    static constexpr bool RX_OVERRUNS       = false;
293
   };
295
   };
294
 
296
 
295
-  extern MarlinSerial<MarlinInternalSerialCfg<INTERNAL_SERIAL_PORT>> internalSerial;
297
+  extern MarlinSerial<MMU2SerialCfg<MMU2_SERIAL_PORT>> mmuSerial;
296
 #endif
298
 #endif
297
 
299
 
298
-#ifdef DGUS_SERIAL_PORT
300
+#ifdef LCD_SERIAL_PORT
301
+
299
   template <uint8_t serial>
302
   template <uint8_t serial>
300
-  struct MarlinInternalSerialCfg {
301
-    static constexpr int PORT               = serial;
302
-    static constexpr unsigned int RX_SIZE   = 128;
303
-    static constexpr unsigned int TX_SIZE   = 48;
304
-    static constexpr bool XONOFF            = false;
305
-    static constexpr bool EMERGENCYPARSER   = false;
306
-    static constexpr bool DROPPED_RX        = false;
307
-    static constexpr bool RX_OVERRUNS       = HAS_DGUS_LCD && ENABLED(DGUS_SERIAL_STATS_RX_BUFFER_OVERRUNS);
308
-    static constexpr bool RX_FRAMING_ERRORS = false;
309
-    static constexpr bool MAX_RX_QUEUED     = false;
303
+  struct LCDSerialCfg {
304
+    static constexpr int PORT                 = serial;
305
+    static constexpr bool XONOFF              = false;
306
+    static constexpr bool EMERGENCYPARSER     = ENABLED(EMERGENCY_PARSER);
307
+    static constexpr bool DROPPED_RX          = false;
308
+    static constexpr bool RX_FRAMING_ERRORS   = false;
309
+    static constexpr bool MAX_RX_QUEUED       = false;
310
+    #if HAS_DGUS_LCD
311
+      static constexpr unsigned int RX_SIZE   = DGUS_RX_BUFFER_SIZE;
312
+      static constexpr unsigned int TX_SIZE   = DGUS_TX_BUFFER_SIZE;
313
+      static constexpr bool RX_OVERRUNS       = ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS);
314
+    #elif EITHER(ANYCUBIC_LCD_I3MEGA, ANYCUBIC_LCD_CHIRON)
315
+      static constexpr unsigned int RX_SIZE   = 64;
316
+      static constexpr unsigned int TX_SIZE   = 128;
317
+      static constexpr bool RX_OVERRUNS       = false;
318
+    #else
319
+      static constexpr unsigned int RX_SIZE   = 64;
320
+      static constexpr unsigned int TX_SIZE   = 128;
321
+      static constexpr bool RX_OVERRUNS       = false
322
+    #endif
310
   };
323
   };
311
 
324
 
312
-  extern MarlinSerial<MarlinInternalSerialCfg<DGUS_SERIAL_PORT>> internalDgusSerial;
325
+  extern MarlinSerial<LCDSerialCfg<LCD_SERIAL_PORT>> lcdSerial;
326
+
313
 #endif
327
 #endif
314
 
328
 
315
 // Use the UART for Bluetooth in AT90USB configurations
329
 // Use the UART for Bluetooth in AT90USB configurations
316
-#if defined(USBCON) && ENABLED(BLUETOOTH)
330
+#if BOTH(IS_AT90USB, BLUETOOTH)
317
   extern HardwareSerial bluetoothSerial;
331
   extern HardwareSerial bluetoothSerial;
318
 #endif
332
 #endif

+ 1
- 3
Marlin/src/HAL/AVR/Servo.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
48
  * readMicroseconds()    - Get the last-written servo pulse width in microseconds.
48
  * readMicroseconds()    - Get the last-written servo pulse width in microseconds.
49
  * attached()            - Return true if a servo is attached.
49
  * attached()            - Return true if a servo is attached.
50
  * detach()              - Stop an attached servo from pulsing its i/o pin.
50
  * detach()              - Stop an attached servo from pulsing its i/o pin.
51
- *
52
  */
51
  */
53
 
52
 
54
 #ifdef __AVR__
53
 #ifdef __AVR__
59
 
58
 
60
 #include <avr/interrupt.h>
59
 #include <avr/interrupt.h>
61
 
60
 
62
-#include "../shared/Marduino.h"
63
 #include "../shared/servo.h"
61
 #include "../shared/servo.h"
64
 #include "../shared/servo_private.h"
62
 #include "../shared/servo_private.h"
65
 
63
 

+ 6
- 4
Marlin/src/HAL/AVR/ServoTimers.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
59
 // Say which 16 bit timers can be used and in what order
59
 // Say which 16 bit timers can be used and in what order
60
 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
60
 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
61
   //#define _useTimer1
61
   //#define _useTimer1
62
-  #define _useTimer3
63
   #define _useTimer4
62
   #define _useTimer4
64
-  #if !HAS_MOTOR_CURRENT_PWM
65
-    #define _useTimer5 // Timer 5 is used for motor current PWM and can't be used for servos.
63
+  #if NUM_SERVOS > SERVOS_PER_TIMER
64
+    #define _useTimer3
65
+    #if !HAS_MOTOR_CURRENT_PWM && SERVOS > 2 * SERVOS_PER_TIMER
66
+      #define _useTimer5 // Timer 5 is used for motor current PWM and can't be used for servos.
67
+    #endif
66
   #endif
68
   #endif
67
 #elif defined(__AVR_ATmega32U4__)
69
 #elif defined(__AVR_ATmega32U4__)
68
   #define _useTimer3
70
   #define _useTimer3

Marlin/src/HAL/AVR/persistent_store_eeprom.cpp → Marlin/src/HAL/AVR/eeprom.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #ifdef __AVR__
22
 #ifdef __AVR__
25
 
25
 
26
 #if EITHER(EEPROM_SETTINGS, SD_FIRMWARE_UPDATE)
26
 #if EITHER(EEPROM_SETTINGS, SD_FIRMWARE_UPDATE)
27
 
27
 
28
-#include "../shared/persistent_store_api.h"
28
+/**
29
+ * PersistentStore for Arduino-style EEPROM interface
30
+ * with implementations supplied by the framework.
31
+ */
29
 
32
 
30
-bool PersistentStore::access_start() { return true; }
33
+#include "../shared/eeprom_api.h"
34
+
35
+#ifndef MARLIN_EEPROM_SIZE
36
+  #define MARLIN_EEPROM_SIZE size_t(E2END + 1)
37
+#endif
38
+size_t PersistentStore::capacity()    { return MARLIN_EEPROM_SIZE; }
39
+bool PersistentStore::access_start()  { return true; }
31
 bool PersistentStore::access_finish() { return true; }
40
 bool PersistentStore::access_finish() { return true; }
32
 
41
 
33
 bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
42
 bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
46
     crc16(crc, &v, 1);
55
     crc16(crc, &v, 1);
47
     pos++;
56
     pos++;
48
     value++;
57
     value++;
49
-  };
58
+  }
50
   return false;
59
   return false;
51
 }
60
 }
52
 
61
 
61
   return false;  // always assume success for AVR's
70
   return false;  // always assume success for AVR's
62
 }
71
 }
63
 
72
 
64
-size_t PersistentStore::capacity() { return E2END + 1; }
65
-
66
 #endif // EEPROM_SETTINGS || SD_FIRMWARE_UPDATE
73
 #endif // EEPROM_SETTINGS || SD_FIRMWARE_UPDATE
67
 #endif // __AVR__
74
 #endif // __AVR__

+ 1
- 1
Marlin/src/HAL/AVR/endstop_interrupts.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 6
- 6
Marlin/src/HAL/AVR/fast_pwm.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #ifdef __AVR__
22
 #ifdef __AVR__
23
 
23
 
24
 #include "../../inc/MarlinConfigPre.h"
24
 #include "../../inc/MarlinConfigPre.h"
25
 
25
 
26
-#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_PWM
26
+#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM
27
 
27
 
28
 #include "HAL.h"
28
 #include "HAL.h"
29
 
29
 
185
         res_temp_phase_correct = rtf / 2;
185
         res_temp_phase_correct = rtf / 2;
186
       }
186
       }
187
 
187
 
188
-      LIMIT(res_temp_fast, 1u, size);
189
-      LIMIT(res_temp_phase_correct, 1u, size);
188
+      LIMIT(res_temp_fast, 1U, size);
189
+      LIMIT(res_temp_phase_correct, 1U, size);
190
       // Calculate frequencies of test prescaler and resolution values
190
       // Calculate frequencies of test prescaler and resolution values
191
       const int f_temp_fast = (F_CPU) / (prescaler[i] * (1 + res_temp_fast)),
191
       const int f_temp_fast = (F_CPU) / (prescaler[i] * (1 + res_temp_fast)),
192
                 f_temp_phase_correct = (F_CPU) / (2 * prescaler[i] * res_temp_phase_correct),
192
                 f_temp_phase_correct = (F_CPU) / (2 * prescaler[i] * res_temp_phase_correct),
274
     else
274
     else
275
       top = *timer.ICRn; // top = ICRn
275
       top = *timer.ICRn; // top = ICRn
276
 
276
 
277
-    _SET_OCRnQ(timer.OCRnQ, timer.q, v * float(top / v_size)); // Scale 8/16-bit v to top value
277
+    _SET_OCRnQ(timer.OCRnQ, timer.q, v * float(top) / float(v_size)); // Scale 8/16-bit v to top value
278
   }
278
   }
279
 }
279
 }
280
 
280
 
281
-#endif // FAST_PWM_FAN || SPINDLE_LASER_PWM
281
+#endif // NEEDS_HARDWARE_PWM
282
 #endif // __AVR__
282
 #endif // __AVR__

+ 51
- 1
Marlin/src/HAL/AVR/fastio.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
234
   }
234
   }
235
 }
235
 }
236
 
236
 
237
+#if 0
238
+/**
239
+ * Set Timer 5 PWM frequency in Hz, from 3.8Hz up to ~16MHz
240
+ * with a minimum resolution of 100 steps.
241
+ *
242
+ * DC values -1.0 to 1.0. Negative duty cycle inverts the pulse.
243
+ */
244
+uint16_t set_pwm_frequency_hz(const float &hz, const float dca, const float dcb, const float dcc) {
245
+  float count = 0;
246
+  if (hz > 0 && (dca || dcb || dcc)) {
247
+    count = float(F_CPU) / hz;            // 1x prescaler, TOP for 16MHz base freq.
248
+    uint16_t prescaler;                   // Range of 30.5Hz (65535) 64.5KHz (>31)
249
+
250
+         if (count >= 255. * 256.) { prescaler = 1024; SET_CS(5, PRESCALER_1024); }
251
+    else if (count >= 255. * 64.)  { prescaler = 256;  SET_CS(5,  PRESCALER_256); }
252
+    else if (count >= 255. * 8.)   { prescaler = 64;   SET_CS(5,   PRESCALER_64); }
253
+    else if (count >= 255.)        { prescaler = 8;    SET_CS(5,    PRESCALER_8); }
254
+    else                           { prescaler = 1;    SET_CS(5,    PRESCALER_1); }
255
+
256
+    count /= float(prescaler);
257
+    const float pwm_top = round(count);   // Get the rounded count
258
+
259
+    ICR5 = (uint16_t)pwm_top - 1;         // Subtract 1 for TOP
260
+    OCR5A = pwm_top * ABS(dca);          // Update and scale DCs
261
+    OCR5B = pwm_top * ABS(dcb);
262
+    OCR5C = pwm_top * ABS(dcc);
263
+    _SET_COM(5, A, dca ? (dca < 0 ? COM_SET_CLEAR : COM_CLEAR_SET) : COM_NORMAL); // Set compare modes
264
+    _SET_COM(5, B, dcb ? (dcb < 0 ? COM_SET_CLEAR : COM_CLEAR_SET) : COM_NORMAL);
265
+    _SET_COM(5, C, dcc ? (dcc < 0 ? COM_SET_CLEAR : COM_CLEAR_SET) : COM_NORMAL);
266
+
267
+    SET_WGM(5, FAST_PWM_ICRn);            // Fast PWM with ICR5 as TOP
268
+
269
+    //SERIAL_ECHOLNPGM("Timer 5 Settings:");
270
+    //SERIAL_ECHOLNPAIR("  Prescaler=", prescaler);
271
+    //SERIAL_ECHOLNPAIR("        TOP=", ICR5);
272
+    //SERIAL_ECHOLNPAIR("      OCR5A=", OCR5A);
273
+    //SERIAL_ECHOLNPAIR("      OCR5B=", OCR5B);
274
+    //SERIAL_ECHOLNPAIR("      OCR5C=", OCR5C);
275
+  }
276
+  else {
277
+    // Restore the default for Timer 5
278
+    SET_WGM(5, PWM_PC_8);                 // PWM 8-bit (Phase Correct)
279
+    SET_COMS(5, NORMAL, NORMAL, NORMAL);  // Do nothing
280
+    SET_CS(5, PRESCALER_64);              // 16MHz / 64 = 250KHz
281
+    OCR5A = OCR5B = OCR5C = 0;
282
+  }
283
+  return round(count);
284
+}
285
+#endif
286
+
237
 #endif // FASTIO_EXT_START
287
 #endif // FASTIO_EXT_START
238
 #endif // __AVR__
288
 #endif // __AVR__

+ 15
- 9
Marlin/src/HAL/AVR/fastio.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
29
 
29
 
30
 #include <avr/io.h>
30
 #include <avr/io.h>
31
 
31
 
32
-#define AVR_AT90USB1286_FAMILY (defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1286P__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB646P__) || defined(__AVR_AT90USB647__))
33
-#define AVR_ATmega1284_FAMILY (defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) || defined(__AVR_ATmega1284P__))
34
-#define AVR_ATmega2560_FAMILY (defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__))
35
-#define AVR_ATmega2561_FAMILY (defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__))
36
-#define AVR_ATmega328_FAMILY (defined(__AVR_ATmega168__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega328P__))
32
+#if defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1286P__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB646P__) || defined(__AVR_AT90USB647__)
33
+  #define AVR_AT90USB1286_FAMILY 1
34
+#elif defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) || defined(__AVR_ATmega1284P__)
35
+  #define AVR_ATmega1284_FAMILY 1
36
+#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
37
+  #define AVR_ATmega2560_FAMILY 1
38
+#elif defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__)
39
+  #define AVR_ATmega2561_FAMILY 1
40
+#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega328P__)
41
+  #define AVR_ATmega328_FAMILY 1
42
+#endif
37
 
43
 
38
 /**
44
 /**
39
  * Include Ports and Functions
45
  * Include Ports and Functions
57
  *
63
  *
58
  * Now you can simply SET_OUTPUT(PIN); WRITE(PIN, HIGH); WRITE(PIN, LOW);
64
  * Now you can simply SET_OUTPUT(PIN); WRITE(PIN, HIGH); WRITE(PIN, LOW);
59
  *
65
  *
60
- * Why double up on these macros? see http://gcc.gnu.org/onlinedocs/cpp/Stringification.html
66
+ * Why double up on these macros? see https://gcc.gnu.org/onlinedocs/cpp/Stringification.html
61
  */
67
  */
62
 
68
 
63
 #define _READ(IO)             TEST(DIO ## IO ## _RPORT, DIO ## IO ## _PIN)
69
 #define _READ(IO)             TEST(DIO ## IO ## _RPORT, DIO ## IO ## _PIN)
98
 
104
 
99
 #define SET_INPUT(IO)         _SET_INPUT(IO)
105
 #define SET_INPUT(IO)         _SET_INPUT(IO)
100
 #define SET_INPUT_PULLUP(IO)  do{ _SET_INPUT(IO); _WRITE(IO, HIGH); }while(0)
106
 #define SET_INPUT_PULLUP(IO)  do{ _SET_INPUT(IO); _WRITE(IO, HIGH); }while(0)
107
+#define SET_INPUT_PULLDOWN    SET_INPUT
101
 #define SET_OUTPUT(IO)        _SET_OUTPUT(IO)
108
 #define SET_OUTPUT(IO)        _SET_OUTPUT(IO)
102
-
103
-#define SET_PWM(IO)           SET_OUTPUT(IO)
109
+#define SET_PWM               SET_OUTPUT
104
 
110
 
105
 #define IS_INPUT(IO)          _IS_INPUT(IO)
111
 #define IS_INPUT(IO)          _IS_INPUT(IO)
106
 #define IS_OUTPUT(IO)         _IS_OUTPUT(IO)
112
 #define IS_OUTPUT(IO)         _IS_OUTPUT(IO)

+ 1
- 1
Marlin/src/HAL/AVR/fastio/fastio_1280.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 1
- 1
Marlin/src/HAL/AVR/fastio/fastio_1281.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 1
- 1
Marlin/src/HAL/AVR/fastio/fastio_168.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 1
- 1
Marlin/src/HAL/AVR/fastio/fastio_644.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 1
- 1
Marlin/src/HAL/AVR/fastio/fastio_AT90USB.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 5
- 1
Marlin/src/HAL/AVR/inc/Conditionals_LCD.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
23
+
24
+#if HAS_SPI_TFT || HAS_FSMC_TFT
25
+  #error "Sorry! TFT displays are not available for HAL/AVR."
26
+#endif

+ 1
- 1
Marlin/src/HAL/AVR/inc/Conditionals_adv.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 1
- 1
Marlin/src/HAL/AVR/inc/Conditionals_post.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 7
- 14
Marlin/src/HAL/AVR/inc/SanityCheck.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
26
  */
26
  */
27
 
27
 
28
 /**
28
 /**
29
- * Digipot requirement
30
- */
31
- #if ENABLED(DIGIPOT_MCP4018)
32
-  #if !defined(DIGIPOTS_I2C_SDA_X) || !defined(DIGIPOTS_I2C_SDA_Y) || !defined(DIGIPOTS_I2C_SDA_Z) \
33
-    || !defined(DIGIPOTS_I2C_SDA_E0) || !defined(DIGIPOTS_I2C_SDA_E1)
34
-      #error "DIGIPOT_MCP4018 requires DIGIPOTS_I2C_SDA_* pins to be defined."
35
-  #endif
36
-#endif
37
-
38
-/**
39
  * Checks for FAST PWM
29
  * Checks for FAST PWM
40
  */
30
  */
41
 #if ENABLED(FAST_PWM_FAN) && (ENABLED(USE_OCR2A_AS_TOP) && defined(TCCR2))
31
 #if ENABLED(FAST_PWM_FAN) && (ENABLED(USE_OCR2A_AS_TOP) && defined(TCCR2))
46
  * Sanity checks for Spindle / Laser PWM
36
  * Sanity checks for Spindle / Laser PWM
47
  */
37
  */
48
 #if ENABLED(SPINDLE_LASER_PWM)
38
 #if ENABLED(SPINDLE_LASER_PWM)
39
+  #include "../ServoTimers.h"   // Needed to check timer availability (_useTimer3)
49
   #if SPINDLE_LASER_PWM_PIN == 4 || WITHIN(SPINDLE_LASER_PWM_PIN, 11, 13)
40
   #if SPINDLE_LASER_PWM_PIN == 4 || WITHIN(SPINDLE_LASER_PWM_PIN, 11, 13)
50
     #error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by a system interrupt."
41
     #error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by a system interrupt."
51
-  #elif NUM_SERVOS > 0 && (WITHIN(SPINDLE_LASER_PWM_PIN, 2, 3) || SPINDLE_LASER_PWM_PIN == 5)
42
+  #elif NUM_SERVOS > 0 && defined(_useTimer3) && (WITHIN(SPINDLE_LASER_PWM_PIN, 2, 3) || SPINDLE_LASER_PWM_PIN == 5)
52
     #error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by the servo system."
43
     #error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by the servo system."
53
   #endif
44
   #endif
45
+#elif defined(SPINDLE_LASER_FREQUENCY)
46
+  #error "SPINDLE_LASER_FREQUENCY requires SPINDLE_LASER_PWM."
54
 #endif
47
 #endif
55
 
48
 
56
 /**
49
 /**
57
  * The Trinamic library includes SoftwareSerial.h, leading to a compile error.
50
  * The Trinamic library includes SoftwareSerial.h, leading to a compile error.
58
  */
51
  */
59
-#if HAS_TRINAMIC_CONFIG && ENABLED(ENDSTOP_INTERRUPTS_FEATURE)
52
+#if BOTH(HAS_TRINAMIC_CONFIG, ENDSTOP_INTERRUPTS_FEATURE)
60
   #error "TMCStepper includes SoftwareSerial.h which is incompatible with ENDSTOP_INTERRUPTS_FEATURE. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."
53
   #error "TMCStepper includes SoftwareSerial.h which is incompatible with ENDSTOP_INTERRUPTS_FEATURE. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."
61
 #endif
54
 #endif
62
 
55
 
63
-#if HAS_TMC_SW_SERIAL && ENABLED(MONITOR_DRIVER_STATUS)
56
+#if BOTH(HAS_TMC_SW_SERIAL, MONITOR_DRIVER_STATUS)
64
   #error "MONITOR_DRIVER_STATUS causes performance issues when used with SoftwareSerial-connected drivers. Disable MONITOR_DRIVER_STATUS or use hardware serial to continue."
57
   #error "MONITOR_DRIVER_STATUS causes performance issues when used with SoftwareSerial-connected drivers. Disable MONITOR_DRIVER_STATUS or use hardware serial to continue."
65
 #endif
58
 #endif

+ 1
- 1
Marlin/src/HAL/AVR/math.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 4
- 2
Marlin/src/HAL/AVR/pinsDebug.h View File

13
  * GNU General Public License for more details.
13
  * GNU General Public License for more details.
14
  *
14
  *
15
  * You should have received a copy of the GNU General Public License
15
  * You should have received a copy of the GNU General Public License
16
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
17
  *
17
  *
18
  */
18
  */
19
 #pragma once
19
 #pragma once
26
 
26
 
27
 #define NUMBER_PINS_TOTAL NUM_DIGITAL_PINS
27
 #define NUMBER_PINS_TOTAL NUM_DIGITAL_PINS
28
 
28
 
29
-#define AVR_ATmega2560_FAMILY_PLUS_70 MB(BQ_ZUM_MEGA_3D, MIGHTYBOARD_REVE, MINIRAMBO, SCOOVO_X9H)
29
+#if MB(BQ_ZUM_MEGA_3D, MIGHTYBOARD_REVE, MINIRAMBO, SCOOVO_X9H, TRIGORILLA_14)
30
+  #define AVR_ATmega2560_FAMILY_PLUS_70 1
31
+#endif
30
 
32
 
31
 #if AVR_AT90USB1286_FAMILY
33
 #if AVR_AT90USB1286_FAMILY
32
 
34
 

+ 1
- 1
Marlin/src/HAL/AVR/pinsDebug_Teensyduino.h View File

13
  * GNU General Public License for more details.
13
  * GNU General Public License for more details.
14
  *
14
  *
15
  * You should have received a copy of the GNU General Public License
15
  * You should have received a copy of the GNU General Public License
16
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
17
  *
17
  *
18
  */
18
  */
19
 #pragma once
19
 #pragma once

+ 4
- 7
Marlin/src/HAL/AVR/pinsDebug_plus_70.h View File

13
  * GNU General Public License for more details.
13
  * GNU General Public License for more details.
14
  *
14
  *
15
  * You should have received a copy of the GNU General Public License
15
  * You should have received a copy of the GNU General Public License
16
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
17
  *
17
  *
18
  */
18
  */
19
 #pragma once
19
 #pragma once
22
  * Structures for 2560 family boards that use more than 70 pins
22
  * Structures for 2560 family boards that use more than 70 pins
23
  */
23
  */
24
 
24
 
25
-#undef NUM_DIGITAL_PINS
26
-#if MB(BQ_ZUM_MEGA_3D)
25
+#if MB(BQ_ZUM_MEGA_3D, MINIRAMBO, SCOOVO_X9H, TRIGORILLA_14)
26
+  #undef NUM_DIGITAL_PINS
27
   #define NUM_DIGITAL_PINS            85
27
   #define NUM_DIGITAL_PINS            85
28
 #elif MB(MIGHTYBOARD_REVE)
28
 #elif MB(MIGHTYBOARD_REVE)
29
+  #undef NUM_DIGITAL_PINS
29
   #define NUM_DIGITAL_PINS            80
30
   #define NUM_DIGITAL_PINS            80
30
-#elif MB(MINIRAMBO)
31
-  #define NUM_DIGITAL_PINS            85
32
-#elif MB(SCOOVO_X9H)
33
-  #define NUM_DIGITAL_PINS            85
34
 #endif
31
 #endif
35
 
32
 
36
 #define PA 1
33
 #define PA 1

+ 1
- 1
Marlin/src/HAL/AVR/spi_pins.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 260
- 0
Marlin/src/HAL/AVR/timers.h View File

1
+/**
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ * Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
18
+ *
19
+ */
20
+#pragma once
21
+
22
+#include <stdint.h>
23
+
24
+// ------------------------
25
+// Types
26
+// ------------------------
27
+
28
+typedef uint16_t hal_timer_t;
29
+#define HAL_TIMER_TYPE_MAX 0xFFFF
30
+
31
+// ------------------------
32
+// Defines
33
+// ------------------------
34
+
35
+#define HAL_TIMER_RATE          ((F_CPU) / 8)    // i.e., 2MHz or 2.5MHz
36
+
37
+#ifndef STEP_TIMER_NUM
38
+  #define STEP_TIMER_NUM        1
39
+#endif
40
+#ifndef PULSE_TIMER_NUM
41
+  #define PULSE_TIMER_NUM       STEP_TIMER_NUM
42
+#endif
43
+#ifndef TEMP_TIMER_NUM
44
+  #define TEMP_TIMER_NUM        0
45
+#endif
46
+
47
+#define TEMP_TIMER_FREQUENCY    ((F_CPU) / 64.0 / 256.0)
48
+
49
+#define STEPPER_TIMER_RATE      HAL_TIMER_RATE
50
+#define STEPPER_TIMER_PRESCALE  8
51
+#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // Cannot be of type double
52
+
53
+#define PULSE_TIMER_RATE       STEPPER_TIMER_RATE   // frequency of pulse timer
54
+#define PULSE_TIMER_PRESCALE   STEPPER_TIMER_PRESCALE
55
+#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
56
+
57
+#define ENABLE_STEPPER_DRIVER_INTERRUPT()  SBI(TIMSK1, OCIE1A)
58
+#define DISABLE_STEPPER_DRIVER_INTERRUPT() CBI(TIMSK1, OCIE1A)
59
+#define STEPPER_ISR_ENABLED()             TEST(TIMSK1, OCIE1A)
60
+
61
+#define ENABLE_TEMPERATURE_INTERRUPT()     SBI(TIMSK0, OCIE0B)
62
+#define DISABLE_TEMPERATURE_INTERRUPT()    CBI(TIMSK0, OCIE0B)
63
+#define TEMPERATURE_ISR_ENABLED()         TEST(TIMSK0, OCIE0B)
64
+
65
+FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) {
66
+  switch (timer_num) {
67
+    case STEP_TIMER_NUM:
68
+      // waveform generation = 0100 = CTC
69
+      SET_WGM(1, CTC_OCRnA);
70
+
71
+      // output mode = 00 (disconnected)
72
+      SET_COMA(1, NORMAL);
73
+
74
+      // Set the timer pre-scaler
75
+      // Generally we use a divider of 8, resulting in a 2MHz timer
76
+      // frequency on a 16MHz MCU. If you are going to change this, be
77
+      // sure to regenerate speed_lookuptable.h with
78
+      // create_speed_lookuptable.py
79
+      SET_CS(1, PRESCALER_8);  //  CS 2 = 1/8 prescaler
80
+
81
+      // Init Stepper ISR to 122 Hz for quick starting
82
+      // (F_CPU) / (STEPPER_TIMER_PRESCALE) / frequency
83
+      OCR1A = 0x4000;
84
+      TCNT1 = 0;
85
+      break;
86
+
87
+    case TEMP_TIMER_NUM:
88
+      // Use timer0 for temperature measurement
89
+      // Interleave temperature interrupt with millies interrupt
90
+      OCR0B = 128;
91
+      break;
92
+  }
93
+}
94
+
95
+#define TIMER_OCR_1             OCR1A
96
+#define TIMER_COUNTER_1         TCNT1
97
+
98
+#define TIMER_OCR_0             OCR0A
99
+#define TIMER_COUNTER_0         TCNT0
100
+
101
+#define _CAT(a,V...) a##V
102
+#define HAL_timer_set_compare(timer, compare) (_CAT(TIMER_OCR_, timer) = compare)
103
+#define HAL_timer_get_compare(timer) _CAT(TIMER_OCR_, timer)
104
+#define HAL_timer_get_count(timer) _CAT(TIMER_COUNTER_, timer)
105
+
106
+/**
107
+ * On AVR there is no hardware prioritization and preemption of
108
+ * interrupts, so this emulates it. The UART has first priority
109
+ * (otherwise, characters will be lost due to UART overflow).
110
+ * Then: Stepper, Endstops, Temperature, and -finally- all others.
111
+ */
112
+#define HAL_timer_isr_prologue(TIMER_NUM)
113
+#define HAL_timer_isr_epilogue(TIMER_NUM)
114
+
115
+/* 18 cycles maximum latency */
116
+#ifndef HAL_STEP_TIMER_ISR
117
+
118
+#define HAL_STEP_TIMER_ISR() \
119
+extern "C" void TIMER1_COMPA_vect() __attribute__ ((signal, naked, used, externally_visible)); \
120
+extern "C" void TIMER1_COMPA_vect_bottom() asm ("TIMER1_COMPA_vect_bottom") __attribute__ ((used, externally_visible, noinline)); \
121
+void TIMER1_COMPA_vect() { \
122
+  __asm__ __volatile__ ( \
123
+    A("push r16")                      /* 2 Save R16 */ \
124
+    A("in r16, __SREG__")              /* 1 Get SREG */ \
125
+    A("push r16")                      /* 2 Save SREG into stack */ \
126
+    A("lds r16, %[timsk0]")            /* 2 Load into R0 the Temperature timer Interrupt mask register */ \
127
+    A("push r16")                      /* 2 Save TIMSK0 into the stack */ \
128
+    A("andi r16,~%[msk0]")             /* 1 Disable the temperature ISR */ \
129
+    A("sts %[timsk0], r16")            /* 2 And set the new value */ \
130
+    A("lds r16, %[timsk1]")            /* 2 Load into R0 the stepper timer Interrupt mask register [TIMSK1] */ \
131
+    A("andi r16,~%[msk1]")             /* 1 Disable the stepper ISR */ \
132
+    A("sts %[timsk1], r16")            /* 2 And set the new value */ \
133
+    A("push r16")                      /* 2 Save TIMSK1 into stack */ \
134
+    A("in r16, 0x3B")                  /* 1 Get RAMPZ register */ \
135
+    A("push r16")                      /* 2 Save RAMPZ into stack */ \
136
+    A("in r16, 0x3C")                  /* 1 Get EIND register */ \
137
+    A("push r0")                       /* C runtime can modify all the following registers without restoring them */ \
138
+    A("push r1")                       \
139
+    A("push r18")                      \
140
+    A("push r19")                      \
141
+    A("push r20")                      \
142
+    A("push r21")                      \
143
+    A("push r22")                      \
144
+    A("push r23")                      \
145
+    A("push r24")                      \
146
+    A("push r25")                      \
147
+    A("push r26")                      \
148
+    A("push r27")                      \
149
+    A("push r30")                      \
150
+    A("push r31")                      \
151
+    A("clr r1")                        /* C runtime expects this register to be 0 */ \
152
+    A("call TIMER1_COMPA_vect_bottom") /* Call the bottom handler - No inlining allowed, otherwise registers used are not saved */   \
153
+    A("pop r31")                       \
154
+    A("pop r30")                       \
155
+    A("pop r27")                       \
156
+    A("pop r26")                       \
157
+    A("pop r25")                       \
158
+    A("pop r24")                       \
159
+    A("pop r23")                       \
160
+    A("pop r22")                       \
161
+    A("pop r21")                       \
162
+    A("pop r20")                       \
163
+    A("pop r19")                       \
164
+    A("pop r18")                       \
165
+    A("pop r1")                        \
166
+    A("pop r0")                        \
167
+    A("out 0x3C, r16")                 /* 1 Restore EIND register */ \
168
+    A("pop r16")                       /* 2 Get the original RAMPZ register value */ \
169
+    A("out 0x3B, r16")                 /* 1 Restore RAMPZ register to its original value */ \
170
+    A("pop r16")                       /* 2 Get the original TIMSK1 value but with stepper ISR disabled */ \
171
+    A("ori r16,%[msk1]")               /* 1 Reenable the stepper ISR */ \
172
+    A("cli")                           /* 1 Disable global interrupts - Reenabling Stepper ISR can reenter amd temperature can reenter, and we want that, if it happens, after this ISR has ended */ \
173
+    A("sts %[timsk1], r16")            /* 2 And restore the old value - This reenables the stepper ISR */ \
174
+    A("pop r16")                       /* 2 Get the temperature timer Interrupt mask register [TIMSK0] */ \
175
+    A("sts %[timsk0], r16")            /* 2 And restore the old value - This reenables the temperature ISR */ \
176
+    A("pop r16")                       /* 2 Get the old SREG value */ \
177
+    A("out __SREG__, r16")             /* 1 And restore the SREG value */ \
178
+    A("pop r16")                       /* 2 Restore R16 value */ \
179
+    A("reti")                          /* 4 Return from interrupt */ \
180
+    :                                   \
181
+    : [timsk0] "i" ((uint16_t)&TIMSK0), \
182
+      [timsk1] "i" ((uint16_t)&TIMSK1), \
183
+      [msk0] "M" ((uint8_t)(1<<OCIE0B)),\
184
+      [msk1] "M" ((uint8_t)(1<<OCIE1A)) \
185
+    : \
186
+  ); \
187
+} \
188
+void TIMER1_COMPA_vect_bottom()
189
+
190
+#endif // HAL_STEP_TIMER_ISR
191
+
192
+#ifndef HAL_TEMP_TIMER_ISR
193
+
194
+/* 14 cycles maximum latency */
195
+#define HAL_TEMP_TIMER_ISR() \
196
+extern "C" void TIMER0_COMPB_vect() __attribute__ ((signal, naked, used, externally_visible)); \
197
+extern "C" void TIMER0_COMPB_vect_bottom()  asm ("TIMER0_COMPB_vect_bottom") __attribute__ ((used, externally_visible, noinline)); \
198
+void TIMER0_COMPB_vect() { \
199
+  __asm__ __volatile__ ( \
200
+    A("push r16")                       /* 2 Save R16 */ \
201
+    A("in r16, __SREG__")               /* 1 Get SREG */ \
202
+    A("push r16")                       /* 2 Save SREG into stack */ \
203
+    A("lds r16, %[timsk0]")             /* 2 Load into R0 the Temperature timer Interrupt mask register */ \
204
+    A("andi r16,~%[msk0]")              /* 1 Disable the temperature ISR */ \
205
+    A("sts %[timsk0], r16")             /* 2 And set the new value */ \
206
+    A("sei")                            /* 1 Enable global interrupts - It is safe, as the temperature ISR is disabled, so we cannot reenter it */    \
207
+    A("push r16")                       /* 2 Save TIMSK0 into stack */ \
208
+    A("in r16, 0x3B")                   /* 1 Get RAMPZ register */ \
209
+    A("push r16")                       /* 2 Save RAMPZ into stack */ \
210
+    A("in r16, 0x3C")                   /* 1 Get EIND register */ \
211
+    A("push r0")                        /* C runtime can modify all the following registers without restoring them */ \
212
+    A("push r1")                        \
213
+    A("push r18")                       \
214
+    A("push r19")                       \
215
+    A("push r20")                       \
216
+    A("push r21")                       \
217
+    A("push r22")                       \
218
+    A("push r23")                       \
219
+    A("push r24")                       \
220
+    A("push r25")                       \
221
+    A("push r26")                       \
222
+    A("push r27")                       \
223
+    A("push r30")                       \
224
+    A("push r31")                       \
225
+    A("clr r1")                         /* C runtime expects this register to be 0 */ \
226
+    A("call TIMER0_COMPB_vect_bottom")  /* Call the bottom handler - No inlining allowed, otherwise registers used are not saved */   \
227
+    A("pop r31")                        \
228
+    A("pop r30")                        \
229
+    A("pop r27")                        \
230
+    A("pop r26")                        \
231
+    A("pop r25")                        \
232
+    A("pop r24")                        \
233
+    A("pop r23")                        \
234
+    A("pop r22")                        \
235
+    A("pop r21")                        \
236
+    A("pop r20")                        \
237
+    A("pop r19")                        \
238
+    A("pop r18")                        \
239
+    A("pop r1")                         \
240
+    A("pop r0")                         \
241
+    A("out 0x3C, r16")                  /* 1 Restore EIND register */ \
242
+    A("pop r16")                        /* 2 Get the original RAMPZ register value */ \
243
+    A("out 0x3B, r16")                  /* 1 Restore RAMPZ register to its original value */ \
244
+    A("pop r16")                        /* 2 Get the original TIMSK0 value but with temperature ISR disabled */ \
245
+    A("ori r16,%[msk0]")                /* 1 Enable temperature ISR */ \
246
+    A("cli")                            /* 1 Disable global interrupts - We must do this, as we will reenable the temperature ISR, and we don't want to reenter this handler until the current one is done */ \
247
+    A("sts %[timsk0], r16")             /* 2 And restore the old value */ \
248
+    A("pop r16")                        /* 2 Get the old SREG */ \
249
+    A("out __SREG__, r16")              /* 1 And restore the SREG value */ \
250
+    A("pop r16")                        /* 2 Restore R16 */ \
251
+    A("reti")                           /* 4 Return from interrupt */ \
252
+    :                                   \
253
+    : [timsk0] "i"((uint16_t)&TIMSK0),  \
254
+      [msk0] "M" ((uint8_t)(1<<OCIE0B)) \
255
+    : \
256
+  ); \
257
+} \
258
+void TIMER0_COMPB_vect_bottom()
259
+
260
+#endif // HAL_TEMP_TIMER_ISR

+ 3
- 3
Marlin/src/HAL/AVR/u8g_com_HAL_AVR_sw_spi.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
57
 
57
 
58
 #include "../../inc/MarlinConfigPre.h"
58
 #include "../../inc/MarlinConfigPre.h"
59
 
59
 
60
-#if HAS_GRAPHICAL_LCD
60
+#if HAS_MARLINUI_U8GLIB
61
 
61
 
62
 #include "../shared/Marduino.h"
62
 #include "../shared/Marduino.h"
63
 #include "../shared/Delay.h"
63
 #include "../shared/Delay.h"
189
   return 1;
189
   return 1;
190
 }
190
 }
191
 
191
 
192
-#endif // HAS_GRAPHICAL_LCD
192
+#endif // HAS_MARLINUI_U8GLIB
193
 #endif // ARDUINO_ARCH_SAM
193
 #endif // ARDUINO_ARCH_SAM

+ 1
- 2
Marlin/src/HAL/AVR/watchdog.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
-
23
 #ifdef __AVR__
22
 #ifdef __AVR__
24
 
23
 
25
 #include "../../inc/MarlinConfig.h"
24
 #include "../../inc/MarlinConfig.h"

+ 1
- 1
Marlin/src/HAL/AVR/watchdog.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 1
- 2
Marlin/src/HAL/DUE/DebugMonitor.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
-
23
 #ifdef ARDUINO_ARCH_SAM
22
 #ifdef ARDUINO_ARCH_SAM
24
 
23
 
25
 #include "../../core/macros.h"
24
 #include "../../core/macros.h"

+ 3
- 4
Marlin/src/HAL/DUE/HAL.cpp View File

14
  * GNU General Public License for more details.
14
  * GNU General Public License for more details.
15
  *
15
  *
16
  * You should have received a copy of the GNU General Public License
16
  * You should have received a copy of the GNU General Public License
17
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
18
+ *
18
  */
19
  */
19
 
20
 
20
 /**
21
 /**
21
- * Description: HAL for Arduino Due and compatible (SAM3X8E)
22
- *
23
- * For ARDUINO_ARCH_SAM
22
+ * HAL for Arduino Due and compatible (SAM3X8E)
24
  */
23
  */
25
 
24
 
26
 #ifdef ARDUINO_ARCH_SAM
25
 #ifdef ARDUINO_ARCH_SAM

+ 23
- 54
Marlin/src/HAL/DUE/HAL.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
23
 
23
 
24
 /**
24
 /**
25
- * Description: HAL for Arduino Due and compatible (SAM3X8E)
26
- *
27
- * For ARDUINO_ARCH_SAM
25
+ * HAL for Arduino Due and compatible (SAM3X8E)
28
  */
26
  */
29
 
27
 
30
 #define CPU_32_BIT
28
 #define CPU_32_BIT
31
 
29
 
32
 #include "../shared/Marduino.h"
30
 #include "../shared/Marduino.h"
31
+#include "../shared/eeprom_if.h"
33
 #include "../shared/math_32bit.h"
32
 #include "../shared/math_32bit.h"
34
 #include "../shared/HAL_SPI.h"
33
 #include "../shared/HAL_SPI.h"
35
 #include "fastio.h"
34
 #include "fastio.h"
36
 #include "watchdog.h"
35
 #include "watchdog.h"
37
-#include "timers.h"
38
 
36
 
39
 #include <stdint.h>
37
 #include <stdint.h>
40
 
38
 
39
+#define _MSERIAL(X) Serial##X
40
+#define MSERIAL(X) _MSERIAL(X)
41
+#define Serial0 Serial
42
+
41
 // Define MYSERIAL0/1 before MarlinSerial includes!
43
 // Define MYSERIAL0/1 before MarlinSerial includes!
42
-#if SERIAL_PORT == -1
44
+#if SERIAL_PORT == -1 || ENABLED(EMERGENCY_PARSER)
43
   #define MYSERIAL0 customizedSerial1
45
   #define MYSERIAL0 customizedSerial1
44
-#elif SERIAL_PORT == 0
45
-  #define MYSERIAL0 Serial
46
-#elif SERIAL_PORT == 1
47
-  #define MYSERIAL0 Serial1
48
-#elif SERIAL_PORT == 2
49
-  #define MYSERIAL0 Serial2
50
-#elif SERIAL_PORT == 3
51
-  #define MYSERIAL0 Serial3
46
+#elif WITHIN(SERIAL_PORT, 0, 3)
47
+  #define MYSERIAL0 MSERIAL(SERIAL_PORT)
52
 #else
48
 #else
53
   #error "The required SERIAL_PORT must be from -1 to 3. Please update your configuration."
49
   #error "The required SERIAL_PORT must be from -1 to 3. Please update your configuration."
54
 #endif
50
 #endif
55
 
51
 
56
 #ifdef SERIAL_PORT_2
52
 #ifdef SERIAL_PORT_2
57
-  #if SERIAL_PORT_2 == SERIAL_PORT
58
-    #error "SERIAL_PORT_2 must be different from SERIAL_PORT. Please update your configuration."
59
-  #elif SERIAL_PORT_2 == -1
53
+  #if SERIAL_PORT_2 == -1 || ENABLED(EMERGENCY_PARSER)
60
     #define MYSERIAL1 customizedSerial2
54
     #define MYSERIAL1 customizedSerial2
61
-  #elif SERIAL_PORT_2 == 0
62
-    #define MYSERIAL1 Serial
63
-  #elif SERIAL_PORT_2 == 1
64
-    #define MYSERIAL1 Serial1
65
-  #elif SERIAL_PORT_2 == 2
66
-    #define MYSERIAL1 Serial2
67
-  #elif SERIAL_PORT_2 == 3
68
-    #define MYSERIAL1 Serial3
55
+  #elif WITHIN(SERIAL_PORT_2, 0, 3)
56
+    #define MYSERIAL1 MSERIAL(SERIAL_PORT_2)
69
   #else
57
   #else
70
     #error "SERIAL_PORT_2 must be from -1 to 3. Please update your configuration."
58
     #error "SERIAL_PORT_2 must be from -1 to 3. Please update your configuration."
71
   #endif
59
   #endif
72
-  #define NUM_SERIAL 2
73
-#else
74
-  #define NUM_SERIAL 1
75
 #endif
60
 #endif
76
 
61
 
77
-#ifdef DGUS_SERIAL_PORT
78
-  #if DGUS_SERIAL_PORT == SERIAL_PORT
79
-    #error "DGUS_SERIAL_PORT must be different from SERIAL_PORT. Please update your configuration."
80
-  #elif defined(SERIAL_PORT_2) && DGUS_SERIAL_PORT == SERIAL_PORT_2
81
-    #error "DGUS_SERIAL_PORT must be different than SERIAL_PORT_2. Please update your configuration."
82
-  #elif DGUS_SERIAL_PORT == -1
83
-    #define DGUS_SERIAL internalDgusSerial
84
-  #elif DGUS_SERIAL_PORT == 0
85
-    #define DGUS_SERIAL Serial
86
-  #elif DGUS_SERIAL_PORT == 1
87
-    #define DGUS_SERIAL Serial1
88
-  #elif DGUS_SERIAL_PORT == 2
89
-    #define DGUS_SERIAL Serial2
90
-  #elif DGUS_SERIAL_PORT == 3
91
-    #define DGUS_SERIAL Serial3
62
+#ifdef LCD_SERIAL_PORT
63
+  #if LCD_SERIAL_PORT == -1
64
+    #define LCD_SERIAL lcdSerial
65
+  #elif WITHIN(LCD_SERIAL_PORT, 0, 3)
66
+    #define LCD_SERIAL MSERIAL(LCD_SERIAL_PORT)
92
   #else
67
   #else
93
-    #error "DGUS_SERIAL_PORT must be from -1 to 3. Please update your configuration."
68
+    #error "LCD_SERIAL_PORT must be from -1 to 3. Please update your configuration."
94
   #endif
69
   #endif
95
 #endif
70
 #endif
96
 
71
 
97
-
98
 #include "MarlinSerial.h"
72
 #include "MarlinSerial.h"
99
 #include "MarlinSerialUSB.h"
73
 #include "MarlinSerialUSB.h"
100
 
74
 
131
 void HAL_clear_reset_source();  // clear reset reason
105
 void HAL_clear_reset_source();  // clear reset reason
132
 uint8_t HAL_get_reset_source(); // get reset reason
106
 uint8_t HAL_get_reset_source(); // get reset reason
133
 
107
 
134
-//
135
-// EEPROM
136
-//
137
-void eeprom_write_byte(uint8_t *pos, unsigned char value);
138
-uint8_t eeprom_read_byte(uint8_t *pos);
139
-void eeprom_read_block (void *__dst, const void *__src, size_t __n);
140
-void eeprom_update_block (const void *__src, void *__dst, size_t __n);
108
+inline void HAL_reboot() {}  // reboot the board or restart the bootloader
141
 
109
 
142
 //
110
 //
143
 // ADC
111
 // ADC
145
 extern uint16_t HAL_adc_result;     // result of last ADC conversion
113
 extern uint16_t HAL_adc_result;     // result of last ADC conversion
146
 
114
 
147
 #ifndef analogInputToDigitalPin
115
 #ifndef analogInputToDigitalPin
148
-  #define analogInputToDigitalPin(p) ((p < 12u) ? (p) + 54u : -1)
116
+  #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1)
149
 #endif
117
 #endif
150
 
118
 
151
 #define HAL_ANALOG_SELECT(ch)
119
 #define HAL_ANALOG_SELECT(ch)
152
 
120
 
153
 inline void HAL_adc_init() {}//todo
121
 inline void HAL_adc_init() {}//todo
154
 
122
 
155
-#define HAL_START_ADC(ch)   HAL_adc_start_conversion(ch)
123
+#define HAL_ADC_VREF         3.3
156
 #define HAL_ADC_RESOLUTION  10
124
 #define HAL_ADC_RESOLUTION  10
125
+#define HAL_START_ADC(ch)   HAL_adc_start_conversion(ch)
157
 #define HAL_READ_ADC()      HAL_adc_result
126
 #define HAL_READ_ADC()      HAL_adc_result
158
 #define HAL_ADC_READY()     true
127
 #define HAL_ADC_READY()     true
159
 
128
 

+ 3
- 4
Marlin/src/HAL/DUE/HAL_SPI.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
30
  */
30
  */
31
 
31
 
32
 /**
32
 /**
33
- * Description: HAL for Arduino Due and compatible (SAM3X8E)
33
+ * HAL for Arduino Due and compatible (SAM3X8E)
34
  *
34
  *
35
  * For ARDUINO_ARCH_SAM
35
  * For ARDUINO_ARCH_SAM
36
  */
36
  */
595
       SPI_Enable(SPI0);
595
       SPI_Enable(SPI0);
596
 
596
 
597
       SET_OUTPUT(DAC0_SYNC);
597
       SET_OUTPUT(DAC0_SYNC);
598
-      #if EXTRUDERS > 1
598
+      #if HAS_MULTI_EXTRUDER
599
         SET_OUTPUT(DAC1_SYNC);
599
         SET_OUTPUT(DAC1_SYNC);
600
         WRITE(DAC1_SYNC, HIGH);
600
         WRITE(DAC1_SYNC, HIGH);
601
       #endif
601
       #endif
759
      *
759
      *
760
      *  All of the above can be avoided by defining FORCE_SOFT_SPI to force the
760
      *  All of the above can be avoided by defining FORCE_SOFT_SPI to force the
761
      *  display to use software SPI.
761
      *  display to use software SPI.
762
-     *
763
      */
762
      */
764
 
763
 
765
     void spiInit(uint8_t spiRate=6) {  // Default to slowest rate if not specified)
764
     void spiInit(uint8_t spiRate=6) {  // Default to slowest rate if not specified)

+ 1
- 1
Marlin/src/HAL/DUE/InterruptVectors.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 

+ 1
- 1
Marlin/src/HAL/DUE/InterruptVectors.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 6
- 16
Marlin/src/HAL/DUE/MarlinSerial.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
629
 
629
 
630
 // If not using the USB port as serial port
630
 // If not using the USB port as serial port
631
 #if SERIAL_PORT >= 0
631
 #if SERIAL_PORT >= 0
632
-
633
-  // Preinstantiate
634
-  template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT>>;
635
-
636
-  // Instantiate
637
-  MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
638
-
632
+  template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT>>;      // Define
633
+  MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;   // Instantiate
639
 #endif
634
 #endif
640
 
635
 
641
-#ifdef SERIAL_PORT_2
642
-
643
-  // Preinstantiate
644
-  template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>>;
645
-
646
-  // Instantiate
647
-  MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
648
-
636
+#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0
637
+  template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>>;    // Define
638
+  MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2; // Instantiate
649
 #endif
639
 #endif
650
 
640
 
651
 #endif // ARDUINO_ARCH_SAM
641
 #endif // ARDUINO_ARCH_SAM

+ 5
- 7
Marlin/src/HAL/DUE/MarlinSerial.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
122
   static void write(const uint8_t c);
122
   static void write(const uint8_t c);
123
   static void flushTX();
123
   static void flushTX();
124
 
124
 
125
+  static inline bool emergency_parser_enabled() { return Cfg::EMERGENCYPARSER; }
126
+
125
   FORCE_INLINE static uint8_t dropped() { return Cfg::DROPPED_RX ? rx_dropped_bytes : 0; }
127
   FORCE_INLINE static uint8_t dropped() { return Cfg::DROPPED_RX ? rx_dropped_bytes : 0; }
126
   FORCE_INLINE static uint8_t buffer_overruns() { return Cfg::RX_OVERRUNS ? rx_buffer_overruns : 0; }
128
   FORCE_INLINE static uint8_t buffer_overruns() { return Cfg::RX_OVERRUNS ? rx_buffer_overruns : 0; }
127
   FORCE_INLINE static uint8_t framing_errors() { return Cfg::RX_FRAMING_ERRORS ? rx_framing_errors : 0; }
129
   FORCE_INLINE static uint8_t framing_errors() { return Cfg::RX_FRAMING_ERRORS ? rx_framing_errors : 0; }
172
 };
174
 };
173
 
175
 
174
 #if SERIAL_PORT >= 0
176
 #if SERIAL_PORT >= 0
175
-
176
   extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
177
   extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
178
+#endif
177
 
179
 
178
-#endif // SERIAL_PORT >= 0
179
-
180
-#ifdef SERIAL_PORT_2
181
-
180
+#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0
182
   extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
181
   extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
183
-
184
 #endif
182
 #endif

+ 11
- 11
Marlin/src/HAL/DUE/MarlinSerialUSB.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
29
 
29
 
30
 #include "../../inc/MarlinConfig.h"
30
 #include "../../inc/MarlinConfig.h"
31
 
31
 
32
-#if SERIAL_PORT == -1
32
+#if HAS_USB_SERIAL
33
 
33
 
34
 #include "MarlinSerialUSB.h"
34
 #include "MarlinSerialUSB.h"
35
 
35
 
73
 
73
 
74
   pending_char = udi_cdc_getc();
74
   pending_char = udi_cdc_getc();
75
 
75
 
76
-  #if ENABLED(EMERGENCY_PARSER)
77
-    emergency_parser.update(emergency_state, (char)pending_char);
78
-  #endif
76
+  TERN_(EMERGENCY_PARSER, emergency_parser.update(emergency_state, (char)pending_char));
79
 
77
 
80
   return pending_char;
78
   return pending_char;
81
 }
79
 }
97
 
95
 
98
   int c = udi_cdc_getc();
96
   int c = udi_cdc_getc();
99
 
97
 
100
-  #if ENABLED(EMERGENCY_PARSER)
101
-    emergency_parser.update(emergency_state, (char)c);
102
-  #endif
98
+  TERN_(EMERGENCY_PARSER, emergency_parser.update(emergency_state, (char)c));
103
 
99
 
104
   return c;
100
   return c;
105
 }
101
 }
283
 }
279
 }
284
 
280
 
285
 // Preinstantiate
281
 // Preinstantiate
286
-MarlinSerialUSB customizedSerial1;
287
-
288
-#endif // SERIAL_PORT == -1
282
+#if SERIAL_PORT == -1
283
+  MarlinSerialUSB customizedSerial1;
284
+#endif
285
+#if SERIAL_PORT_2 == -1
286
+  MarlinSerialUSB customizedSerial2;
287
+#endif
289
 
288
 
289
+#endif // HAS_USB_SERIAL
290
 #endif // ARDUINO_ARCH_SAM
290
 #endif // ARDUINO_ARCH_SAM

+ 10
- 4
Marlin/src/HAL/DUE/MarlinSerialUSB.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
28
 
28
 
29
 #include "../../inc/MarlinConfig.h"
29
 #include "../../inc/MarlinConfig.h"
30
 
30
 
31
-#if SERIAL_PORT == -1
31
+#if HAS_USB_SERIAL
32
 
32
 
33
 #include <WString.h>
33
 #include <WString.h>
34
 
34
 
88
   static void printFloat(double, uint8_t);
88
   static void printFloat(double, uint8_t);
89
 };
89
 };
90
 
90
 
91
-extern MarlinSerialUSB customizedSerial1;
91
+#if SERIAL_PORT == -1
92
+  extern MarlinSerialUSB customizedSerial1;
93
+#endif
94
+
95
+#if SERIAL_PORT_2 == -1
96
+  extern MarlinSerialUSB customizedSerial2;
97
+#endif
92
 
98
 
93
-#endif // SERIAL_PORT == -1
99
+#endif // HAS_USB_SERIAL

+ 1
- 2
Marlin/src/HAL/DUE/Servo.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
44
 
44
 
45
 #if HAS_SERVOS
45
 #if HAS_SERVOS
46
 
46
 
47
-#include "../shared/Marduino.h"
48
 #include "../shared/servo.h"
47
 #include "../shared/servo.h"
49
 #include "../shared/servo_private.h"
48
 #include "../shared/servo_private.h"
50
 
49
 

+ 2
- 3
Marlin/src/HAL/DUE/Tone.cpp View File

18
  * GNU General Public License for more details.
18
  * GNU General Public License for more details.
19
  *
19
  *
20
  * You should have received a copy of the GNU General Public License
20
  * You should have received a copy of the GNU General Public License
21
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
22
  *
22
  *
23
  */
23
  */
24
 
24
 
25
 /**
25
 /**
26
  * Description: Tone function for Arduino Due and compatible (SAM3X8E)
26
  * Description: Tone function for Arduino Due and compatible (SAM3X8E)
27
- * Derived from http://forum.arduino.cc/index.php?topic=136500.msg2903012#msg2903012
27
+ * Derived from https://forum.arduino.cc/index.php?topic=136500.msg2903012#msg2903012
28
  */
28
  */
29
 
29
 
30
 #ifdef ARDUINO_ARCH_SAM
30
 #ifdef ARDUINO_ARCH_SAM
31
 
31
 
32
 #include "../../inc/MarlinConfig.h"
32
 #include "../../inc/MarlinConfig.h"
33
 #include "HAL.h"
33
 #include "HAL.h"
34
-#include "timers.h"
35
 
34
 
36
 static pin_t tone_pin;
35
 static pin_t tone_pin;
37
 volatile static int32_t toggles;
36
 volatile static int32_t toggles;

+ 4
- 5
Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_shared_hw_spi.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
52
  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
52
  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
53
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
53
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
54
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
55
- *
56
  */
55
  */
57
 
56
 
58
 #ifdef __SAM3X8E__
57
 #ifdef __SAM3X8E__
59
 
58
 
60
 #include "../../../inc/MarlinConfigPre.h"
59
 #include "../../../inc/MarlinConfigPre.h"
61
 
60
 
62
-#if HAS_GRAPHICAL_LCD
61
+#if HAS_MARLINUI_U8GLIB
63
 
62
 
64
 #include <U8glib.h>
63
 #include <U8glib.h>
65
 
64
 
145
   return 1;
144
   return 1;
146
 }
145
 }
147
 
146
 
148
-#endif // HAS_GRAPHICAL_LCD
147
+#endif // HAS_MARLINUI_U8GLIB
149
 
148
 
150
-#endif //__SAM3X8E__
149
+#endif // __SAM3X8E__

+ 1
- 1
Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_st7920_sw_spi.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 

+ 3
- 3
Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_sw_spi.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
57
 
57
 
58
 #include "../../../inc/MarlinConfigPre.h"
58
 #include "../../../inc/MarlinConfigPre.h"
59
 
59
 
60
-#if HAS_GRAPHICAL_LCD && DISABLED(U8GLIB_ST7920)
60
+#if HAS_MARLINUI_U8GLIB && DISABLED(U8GLIB_ST7920)
61
 
61
 
62
 #undef SPI_SPEED
62
 #undef SPI_SPEED
63
 #define SPI_SPEED 2  // About 2 MHz
63
 #define SPI_SPEED 2  // About 2 MHz
144
   return 1;
144
   return 1;
145
 }
145
 }
146
 
146
 
147
-#endif // HAS_GRAPHICAL_LCD && !U8GLIB_ST7920
147
+#endif // HAS_MARLINUI_U8GLIB && !U8GLIB_ST7920
148
 #endif // ARDUINO_ARCH_SAM
148
 #endif // ARDUINO_ARCH_SAM

+ 3
- 3
Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_sw_spi_shared.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
57
 
57
 
58
 #include "../../../inc/MarlinConfigPre.h"
58
 #include "../../../inc/MarlinConfigPre.h"
59
 
59
 
60
-#if HAS_GRAPHICAL_LCD
60
+#if HAS_MARLINUI_U8GLIB
61
 
61
 
62
 #include "../../shared/Delay.h"
62
 #include "../../shared/Delay.h"
63
 
63
 
108
   }
108
   }
109
 }
109
 }
110
 
110
 
111
-#endif // HAS_GRAPHICAL_LCD
111
+#endif // HAS_MARLINUI_U8GLIB
112
 #endif // ARDUINO_ARCH_SAM
112
 #endif // ARDUINO_ARCH_SAM

+ 1
- 1
Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_sw_spi_shared.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

Marlin/src/HAL/DUE/EepromEmulation.cpp → Marlin/src/HAL/DUE/eeprom_flash.cpp View File

1
 /**
1
 /**
2
  * Marlin 3D Printer Firmware
2
  * Marlin 3D Printer Firmware
3
- * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
  *
3
  *
5
- * Based on Sprinter and grbl.
6
- * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
4
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
5
+ * Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
6
+ * Copyright (c) 2015-2016 Nico Tonnhofer wurstnase.reprap@gmail.com
7
+ * Copyright (c) 2016 Victor Perez victor_pv@hotmail.com
7
  *
8
  *
8
  * This program is free software: you can redistribute it and/or modify
9
  * This program is free software: you can redistribute it and/or modify
9
  * it under the terms of the GNU General Public License as published by
10
  * it under the terms of the GNU General Public License as published by
16
  * GNU General Public License for more details.
17
  * GNU General Public License for more details.
17
  *
18
  *
18
  * You should have received a copy of the GNU General Public License
19
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
21
  *
21
  */
22
  */
23
+#ifdef ARDUINO_ARCH_SAM
24
+
25
+#include "../../inc/MarlinConfig.h"
26
+
27
+#if ENABLED(FLASH_EEPROM_EMULATION)
22
 
28
 
23
 /* EEPROM emulation over flash with reduced wear
29
 /* EEPROM emulation over flash with reduced wear
24
  *
30
  *
47
  * per page. We can't emulate EE endurance with FLASH for all
53
  * per page. We can't emulate EE endurance with FLASH for all
48
  * bytes, but we can emulate endurance for a given percent of
54
  * bytes, but we can emulate endurance for a given percent of
49
  * bytes.
55
  * bytes.
50
- *
51
  */
56
  */
52
 
57
 
53
-#ifdef ARDUINO_ARCH_SAM
54
-
55
-#include "../../inc/MarlinConfig.h"
56
-
57
-#if ENABLED(FLASH_EEPROM_EMULATION)
58
-
59
-#include "../shared/Marduino.h"
60
-#include "../shared/persistent_store_api.h"
58
+//#define EE_EMU_DEBUG
61
 
59
 
62
 #define EEPROMSize     4096
60
 #define EEPROMSize     4096
63
 #define PagesPerGroup   128
61
 #define PagesPerGroup   128
64
 #define GroupCount        2
62
 #define GroupCount        2
65
-#define PageSize        256u
63
+#define PageSize        256U
66
 
64
 
67
  /* Flash storage */
65
  /* Flash storage */
68
 typedef struct FLASH_SECTOR {
66
 typedef struct FLASH_SECTOR {
134
                curPage = 0,         // Current FLASH page inside the group
132
                curPage = 0,         // Current FLASH page inside the group
135
                curGroup = 0xFF;     // Current FLASH group
133
                curGroup = 0xFF;     // Current FLASH group
136
 
134
 
137
-//#define EE_EMU_DEBUG
138
-#ifdef EE_EMU_DEBUG
139
-  static void ee_Dump(int page,const void* data) {
135
+#define DEBUG_OUT ENABLED(EE_EMU_DEBUG)
136
+#include "../../core/debug_out.h"
137
+
138
+static void ee_Dump(const int page, const void* data) {
139
+
140
+  #ifdef EE_EMU_DEBUG
140
 
141
 
141
     const uint8_t* c = (const uint8_t*) data;
142
     const uint8_t* c = (const uint8_t*) data;
142
     char buffer[80];
143
     char buffer[80];
143
 
144
 
144
     sprintf_P(buffer, PSTR("Page: %d (0x%04x)\n"), page, page);
145
     sprintf_P(buffer, PSTR("Page: %d (0x%04x)\n"), page, page);
145
-    SERIAL_ECHO(buffer);
146
+    DEBUG_ECHO(buffer);
146
 
147
 
147
     char* p = &buffer[0];
148
     char* p = &buffer[0];
148
     for (int i = 0; i< PageSize; ++i) {
149
     for (int i = 0; i< PageSize; ++i) {
152
       if ((i & 0xF) == 0xF) {
153
       if ((i & 0xF) == 0xF) {
153
         *p++ = '\n';
154
         *p++ = '\n';
154
         *p = 0;
155
         *p = 0;
155
-        SERIAL_ECHO(buffer);
156
+        DEBUG_ECHO(buffer);
156
         p = &buffer[0];
157
         p = &buffer[0];
157
       }
158
       }
158
     }
159
     }
159
-  }
160
-#endif
160
+
161
+  #else
162
+    UNUSED(page);
163
+    UNUSED(data);
164
+  #endif
165
+}
161
 
166
 
162
 /* Flash Writing Protection Key */
167
 /* Flash Writing Protection Key */
163
 #define FWP_KEY    0x5Au
168
 #define FWP_KEY    0x5Au
170
   #define EEFC_ERROR_FLAGS  (EEFC_FSR_FLOCKE | EEFC_FSR_FCMDE)
175
   #define EEFC_ERROR_FLAGS  (EEFC_FSR_FLOCKE | EEFC_FSR_FCMDE)
171
 #endif
176
 #endif
172
 
177
 
173
-
174
 /**
178
 /**
175
  * Writes the contents of the specified page (no previous erase)
179
  * Writes the contents of the specified page (no previous erase)
176
  * @param page    (page #)
180
  * @param page    (page #)
177
  * @param data    (pointer to the data buffer)
181
  * @param data    (pointer to the data buffer)
178
  */
182
  */
179
 __attribute__ ((long_call, section (".ramfunc")))
183
 __attribute__ ((long_call, section (".ramfunc")))
180
-static bool ee_PageWrite(uint16_t page,const void* data) {
184
+static bool ee_PageWrite(uint16_t page, const void* data) {
181
 
185
 
182
   uint16_t i;
186
   uint16_t i;
183
-  uint32_t addrflash = ((uint32_t)getFlashStorage(page));
187
+  uint32_t addrflash = uint32_t(getFlashStorage(page));
184
 
188
 
185
   // Read the flash contents
189
   // Read the flash contents
186
   uint32_t pageContents[PageSize>>2];
190
   uint32_t pageContents[PageSize>>2];
195
   for (i = 0; i <PageSize >> 2; i++)
199
   for (i = 0; i <PageSize >> 2; i++)
196
     pageContents[i] = (((uint32_t*)data)[i]) | (~(pageContents[i] ^ ((uint32_t*)data)[i]));
200
     pageContents[i] = (((uint32_t*)data)[i]) | (~(pageContents[i] ^ ((uint32_t*)data)[i]));
197
 
201
 
198
-  #ifdef EE_EMU_DEBUG
199
-    SERIAL_ECHO_START();
200
-    SERIAL_ECHOLNPAIR("EEPROM PageWrite   ", page);
201
-    SERIAL_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
202
-    SERIAL_ECHOLNPAIR(" base address     ", (uint32_t)getFlashStorage(0));
203
-    SERIAL_FLUSH();
204
-  #endif
202
+  DEBUG_ECHO_START();
203
+  DEBUG_ECHOLNPAIR("EEPROM PageWrite   ", page);
204
+  DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
205
+  DEBUG_ECHOLNPAIR(" base address     ", (uint32_t)getFlashStorage(0));
206
+  DEBUG_FLUSH();
205
 
207
 
206
   // Get the page relative to the start of the EFC controller, and the EFC controller to use
208
   // Get the page relative to the start of the EFC controller, and the EFC controller to use
207
   Efc *efc;
209
   Efc *efc;
243
     // Reenable interrupts
245
     // Reenable interrupts
244
     __enable_irq();
246
     __enable_irq();
245
 
247
 
246
-    #ifdef EE_EMU_DEBUG
247
-      SERIAL_ECHO_START();
248
-      SERIAL_ECHOLNPAIR("EEPROM Unlock failure for page ", page);
249
-    #endif
248
+    DEBUG_ECHO_START();
249
+    DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ", page);
250
     return false;
250
     return false;
251
   }
251
   }
252
 
252
 
270
     // Reenable interrupts
270
     // Reenable interrupts
271
     __enable_irq();
271
     __enable_irq();
272
 
272
 
273
-    #ifdef EE_EMU_DEBUG
274
-      SERIAL_ECHO_START();
275
-      SERIAL_ECHOLNPAIR("EEPROM Write failure for page ", page);
276
-    #endif
273
+    DEBUG_ECHO_START();
274
+    DEBUG_ECHOLNPAIR("EEPROM Write failure for page ", page);
275
+
277
     return false;
276
     return false;
278
   }
277
   }
279
 
278
 
287
   if (memcmp(getFlashStorage(page),data,PageSize)) {
286
   if (memcmp(getFlashStorage(page),data,PageSize)) {
288
 
287
 
289
     #ifdef EE_EMU_DEBUG
288
     #ifdef EE_EMU_DEBUG
290
-      SERIAL_ECHO_START();
291
-      SERIAL_ECHOLNPAIR("EEPROM Verify Write failure for page ", page);
289
+      DEBUG_ECHO_START();
290
+      DEBUG_ECHOLNPAIR("EEPROM Verify Write failure for page ", page);
292
 
291
 
293
-      ee_Dump( page,(uint32_t *) addrflash);
294
-      ee_Dump(-page,data);
292
+      ee_Dump( page, (uint32_t *)addrflash);
293
+      ee_Dump(-page, data);
295
 
294
 
296
       // Calculate count of changed bits
295
       // Calculate count of changed bits
297
       uint32_t* p1 = (uint32_t*)addrflash;
296
       uint32_t* p1 = (uint32_t*)addrflash;
307
           }
306
           }
308
         }
307
         }
309
       }
308
       }
310
-      SERIAL_ECHOLNPAIR("--> Differing bits: ", count);
309
+      DEBUG_ECHOLNPAIR("--> Differing bits: ", count);
311
     #endif
310
     #endif
312
 
311
 
313
     return false;
312
     return false;
324
 static bool ee_PageErase(uint16_t page) {
323
 static bool ee_PageErase(uint16_t page) {
325
 
324
 
326
   uint16_t i;
325
   uint16_t i;
327
-  uint32_t addrflash = ((uint32_t)getFlashStorage(page));
326
+  uint32_t addrflash = uint32_t(getFlashStorage(page));
328
 
327
 
329
-  #ifdef EE_EMU_DEBUG
330
-    SERIAL_ECHO_START();
331
-    SERIAL_ECHOLNPAIR("EEPROM PageErase  ", page);
332
-    SERIAL_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
333
-    SERIAL_ECHOLNPAIR(" base address     ", (uint32_t)getFlashStorage(0));
334
-    SERIAL_FLUSH();
335
-  #endif
328
+  DEBUG_ECHO_START();
329
+  DEBUG_ECHOLNPAIR("EEPROM PageErase  ", page);
330
+  DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
331
+  DEBUG_ECHOLNPAIR(" base address     ", (uint32_t)getFlashStorage(0));
332
+  DEBUG_FLUSH();
336
 
333
 
337
   // Get the page relative to the start of the EFC controller, and the EFC controller to use
334
   // Get the page relative to the start of the EFC controller, and the EFC controller to use
338
   Efc *efc;
335
   Efc *efc;
373
     // Reenable interrupts
370
     // Reenable interrupts
374
     __enable_irq();
371
     __enable_irq();
375
 
372
 
376
-    #ifdef EE_EMU_DEBUG
377
-      SERIAL_ECHO_START();
378
-      SERIAL_ECHOLNPAIR("EEPROM Unlock failure for page ",page);
379
-    #endif
373
+    DEBUG_ECHO_START();
374
+    DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ",page);
375
+
380
     return false;
376
     return false;
381
   }
377
   }
382
 
378
 
398
     // Reenable interrupts
394
     // Reenable interrupts
399
     __enable_irq();
395
     __enable_irq();
400
 
396
 
401
-    #ifdef EE_EMU_DEBUG
402
-      SERIAL_ECHO_START();
403
-      SERIAL_ECHOLNPAIR("EEPROM Erase failure for page ",page);
404
-    #endif
397
+    DEBUG_ECHO_START();
398
+    DEBUG_ECHOLNPAIR("EEPROM Erase failure for page ",page);
399
+
405
     return false;
400
     return false;
406
   }
401
   }
407
 
402
 
415
   uint32_t * aligned_src = (uint32_t *) addrflash;
410
   uint32_t * aligned_src = (uint32_t *) addrflash;
416
   for (i = 0; i < PageSize >> 2; i++) {
411
   for (i = 0; i < PageSize >> 2; i++) {
417
     if (*aligned_src++ != 0xFFFFFFFF) {
412
     if (*aligned_src++ != 0xFFFFFFFF) {
418
-
419
-      #ifdef EE_EMU_DEBUG
420
-        SERIAL_ECHO_START();
421
-        SERIAL_ECHOLNPAIR("EEPROM Verify Erase failure for page ",page);
422
-
423
-        ee_Dump( page,(uint32_t *) addrflash);
424
-      #endif
413
+      DEBUG_ECHO_START();
414
+      DEBUG_ECHOLNPAIR("EEPROM Verify Erase failure for page ",page);
415
+      ee_Dump(page, (uint32_t *)addrflash);
425
       return false;
416
       return false;
426
     }
417
     }
427
   }
418
   }
428
 
419
 
429
   return true;
420
   return true;
430
 }
421
 }
431
-static uint8_t ee_Read(uint32_t address, bool excludeRAMBuffer = false) {
422
+
423
+static uint8_t ee_Read(uint32_t address, bool excludeRAMBuffer=false) {
432
 
424
 
433
   uint32_t baddr;
425
   uint32_t baddr;
434
   uint32_t blen;
426
   uint32_t blen;
511
   return 0xFF;
503
   return 0xFF;
512
 }
504
 }
513
 
505
 
514
-static uint32_t ee_GetAddrRange(uint32_t address, bool excludeRAMBuffer = false) {
506
+static uint32_t ee_GetAddrRange(uint32_t address, bool excludeRAMBuffer=false) {
515
   uint32_t baddr,
507
   uint32_t baddr,
516
            blen,
508
            blen,
517
            nextAddr = 0xFFFF,
509
            nextAddr = 0xFFFF,
603
   return true;
595
   return true;
604
 }
596
 }
605
 
597
 
606
-static bool ee_Flush(uint32_t overrideAddress = 0xFFFFFFFF, uint8_t overrideData = 0xFF) {
598
+static bool ee_Flush(uint32_t overrideAddress = 0xFFFFFFFF, uint8_t overrideData=0xFF) {
607
 
599
 
608
   // Check if RAM buffer has something to be written
600
   // Check if RAM buffer has something to be written
609
   bool isEmpty = true;
601
   bool isEmpty = true;
929
   // If all groups seem to be used, default to first group
921
   // If all groups seem to be used, default to first group
930
   if (curGroup >= GroupCount) curGroup = 0;
922
   if (curGroup >= GroupCount) curGroup = 0;
931
 
923
 
932
-  #ifdef EE_EMU_DEBUG
933
-    SERIAL_ECHO_START();
934
-    SERIAL_ECHOLNPAIR("EEPROM Current Group: ",curGroup);
935
-    SERIAL_FLUSH();
936
-  #endif
924
+  DEBUG_ECHO_START();
925
+  DEBUG_ECHOLNPAIR("EEPROM Current Group: ",curGroup);
926
+  DEBUG_FLUSH();
937
 
927
 
938
   // Now, validate that all the other group pages are empty
928
   // Now, validate that all the other group pages are empty
939
   for (int grp = 0; grp < GroupCount; grp++) {
929
   for (int grp = 0; grp < GroupCount; grp++) {
941
 
931
 
942
     for (int page = 0; page < PagesPerGroup; page++) {
932
     for (int page = 0; page < PagesPerGroup; page++) {
943
       if (!ee_IsPageClean(grp * PagesPerGroup + page)) {
933
       if (!ee_IsPageClean(grp * PagesPerGroup + page)) {
944
-        #ifdef EE_EMU_DEBUG
945
-          SERIAL_ECHO_START();
946
-          SERIAL_ECHOLNPAIR("EEPROM Page ", page, " not clean on group ", grp);
947
-          SERIAL_FLUSH();
948
-        #endif
934
+        DEBUG_ECHO_START();
935
+        DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on group ", grp);
936
+        DEBUG_FLUSH();
949
         ee_PageErase(grp * PagesPerGroup + page);
937
         ee_PageErase(grp * PagesPerGroup + page);
950
       }
938
       }
951
     }
939
     }
955
   // and also validate that all the other ones are clean
943
   // and also validate that all the other ones are clean
956
   for (curPage = 0; curPage < PagesPerGroup; curPage++) {
944
   for (curPage = 0; curPage < PagesPerGroup; curPage++) {
957
     if (ee_IsPageClean(curGroup * PagesPerGroup + curPage)) {
945
     if (ee_IsPageClean(curGroup * PagesPerGroup + curPage)) {
958
-      #ifdef EE_EMU_DEBUG
959
-        ee_Dump(curGroup * PagesPerGroup + curPage, getFlashStorage(curGroup * PagesPerGroup + curPage));
960
-      #endif
946
+      ee_Dump(curGroup * PagesPerGroup + curPage, getFlashStorage(curGroup * PagesPerGroup + curPage));
961
       break;
947
       break;
962
     }
948
     }
963
   }
949
   }
964
 
950
 
965
-  #ifdef EE_EMU_DEBUG
966
-    SERIAL_ECHO_START();
967
-    SERIAL_ECHOLNPAIR("EEPROM Active page: ", curPage);
968
-    SERIAL_FLUSH();
969
-  #endif
951
+  DEBUG_ECHO_START();
952
+  DEBUG_ECHOLNPAIR("EEPROM Active page: ", curPage);
953
+  DEBUG_FLUSH();
970
 
954
 
971
   // Make sure the pages following the first clean one are also clean
955
   // Make sure the pages following the first clean one are also clean
972
   for (int page = curPage + 1; page < PagesPerGroup; page++) {
956
   for (int page = curPage + 1; page < PagesPerGroup; page++) {
973
     if (!ee_IsPageClean(curGroup * PagesPerGroup + page)) {
957
     if (!ee_IsPageClean(curGroup * PagesPerGroup + page)) {
974
-      #ifdef EE_EMU_DEBUG
975
-        SERIAL_ECHO_START();
976
-        SERIAL_ECHOLNPAIR("EEPROM Page ", page, " not clean on active group ", curGroup);
977
-        SERIAL_FLUSH();
978
-        ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
979
-      #endif
958
+      DEBUG_ECHO_START();
959
+      DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on active group ", curGroup);
960
+      DEBUG_FLUSH();
961
+      ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
980
       ee_PageErase(curGroup * PagesPerGroup + page);
962
       ee_PageErase(curGroup * PagesPerGroup + page);
981
     }
963
     }
982
   }
964
   }
983
 }
965
 }
984
 
966
 
985
-uint8_t eeprom_read_byte(uint8_t* addr) {
986
-  ee_Init();
987
-  return ee_Read((uint32_t)addr);
988
-}
989
-
990
-void eeprom_write_byte(uint8_t* addr, uint8_t value) {
991
-  ee_Init();
992
-  ee_Write((uint32_t)addr, value);
993
-}
967
+/* PersistentStore -----------------------------------------------------------*/
994
 
968
 
995
-void eeprom_update_block(const void* __src, void* __dst, size_t __n) {
996
-  uint8_t* dst = (uint8_t*)__dst;
997
-  const uint8_t* src = (const uint8_t*)__src;
998
-  while (__n--) {
999
-    eeprom_write_byte(dst, *src);
1000
-    ++dst;
1001
-    ++src;
1002
-  }
1003
-}
969
+#include "../shared/eeprom_api.h"
1004
 
970
 
1005
-void eeprom_read_block(void* __dst, const void* __src, size_t __n) {
1006
-  uint8_t* dst = (uint8_t*)__dst;
1007
-  uint8_t* src = (uint8_t*)__src;
1008
-  while (__n--) {
1009
-    *dst = eeprom_read_byte(src);
1010
-    ++dst;
1011
-    ++src;
971
+#ifndef MARLIN_EEPROM_SIZE
972
+  #define MARLIN_EEPROM_SIZE 0x1000 // 4KB
973
+#endif
974
+size_t PersistentStore::capacity()    { return MARLIN_EEPROM_SIZE; }
975
+bool PersistentStore::access_start()  { ee_Init();  return true; }
976
+bool PersistentStore::access_finish() { ee_Flush(); return true; }
977
+
978
+bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
979
+  while (size--) {
980
+    uint8_t * const p = (uint8_t * const)pos;
981
+    uint8_t v = *value;
982
+    // EEPROM has only ~100,000 write cycles,
983
+    // so only write bytes that have changed!
984
+    if (v != ee_Read(uint32_t(p))) {
985
+      ee_Write(uint32_t(p), v);
986
+      delay(2);
987
+      if (ee_Read(uint32_t(p)) != v) {
988
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
989
+        return true;
990
+      }
991
+    }
992
+    crc16(crc, &v, 1);
993
+    pos++;
994
+    value++;
1012
   }
995
   }
996
+  return false;
1013
 }
997
 }
1014
 
998
 
1015
-void eeprom_flush() {
1016
-  ee_Flush();
999
+bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
1000
+  do {
1001
+    uint8_t c = ee_Read(uint32_t(pos));
1002
+    if (writing) *value = c;
1003
+    crc16(crc, &c, 1);
1004
+    pos++;
1005
+    value++;
1006
+  } while (--size);
1007
+  return false;
1017
 }
1008
 }
1018
 
1009
 
1019
 #endif // FLASH_EEPROM_EMULATION
1010
 #endif // FLASH_EEPROM_EMULATION
1020
-#endif // ARDUINO_ARCH_AVR
1011
+#endif // ARDUINO_ARCH_SAM

Marlin/src/HAL/DUE/persistent_store_eeprom.cpp → Marlin/src/HAL/DUE/eeprom_wired.cpp View File

17
  * GNU General Public License for more details.
17
  * GNU General Public License for more details.
18
  *
18
  *
19
  * You should have received a copy of the GNU General Public License
19
  * You should have received a copy of the GNU General Public License
20
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
21
  *
21
  *
22
  */
22
  */
23
 #ifdef ARDUINO_ARCH_SAM
23
 #ifdef ARDUINO_ARCH_SAM
24
 
24
 
25
-#include "../../inc/MarlinConfigPre.h"
26
-
27
-#if ENABLED(EEPROM_SETTINGS)
28
-
29
 #include "../../inc/MarlinConfig.h"
25
 #include "../../inc/MarlinConfig.h"
30
-#include "../shared/persistent_store_api.h"
31
 
26
 
32
-#if !defined(E2END) && ENABLED(FLASH_EEPROM_EMULATION)
33
-  #define E2END 0xFFF // Default to Flash emulated EEPROM size (EepromEmulation_Due.cpp)
34
-#endif
27
+#if USE_WIRED_EEPROM
35
 
28
 
36
-extern void eeprom_flush();
29
+/**
30
+ * PersistentStore for Arduino-style EEPROM interface
31
+ * with simple implementations supplied by Marlin.
32
+ */
37
 
33
 
38
-bool PersistentStore::access_start() { return true; }
34
+#include "../shared/eeprom_if.h"
35
+#include "../shared/eeprom_api.h"
39
 
36
 
40
-bool PersistentStore::access_finish() {
41
-  #if ENABLED(FLASH_EEPROM_EMULATION)
42
-    eeprom_flush();
43
-  #endif
44
-  return true;
45
-}
37
+#ifndef MARLIN_EEPROM_SIZE
38
+  #error "MARLIN_EEPROM_SIZE is required for I2C / SPI EEPROM."
39
+#endif
40
+size_t PersistentStore::capacity()    { return MARLIN_EEPROM_SIZE; }
41
+bool PersistentStore::access_start()  { eeprom_init(); return true; }
42
+bool PersistentStore::access_finish() { return true; }
46
 
43
 
47
 bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
44
 bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
48
   while (size--) {
45
   while (size--) {
61
     crc16(crc, &v, 1);
58
     crc16(crc, &v, 1);
62
     pos++;
59
     pos++;
63
     value++;
60
     value++;
64
-  };
61
+  }
65
   return false;
62
   return false;
66
 }
63
 }
67
 
64
 
76
   return false;
73
   return false;
77
 }
74
 }
78
 
75
 
79
-size_t PersistentStore::capacity() { return E2END + 1; }
80
-
81
-#endif // EEPROM_SETTINGS
76
+#endif // USE_WIRED_EEPROM
82
 #endif // ARDUINO_ARCH_SAM
77
 #endif // ARDUINO_ARCH_SAM

+ 18
- 40
Marlin/src/HAL/DUE/endstop_interrupts.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
47
 
47
 
48
 void setup_endstop_interrupts() {
48
 void setup_endstop_interrupts() {
49
   #define _ATTACH(P) attachInterrupt(digitalPinToInterrupt(P), endstop_ISR, CHANGE)
49
   #define _ATTACH(P) attachInterrupt(digitalPinToInterrupt(P), endstop_ISR, CHANGE)
50
-  #if HAS_X_MAX
51
-    _ATTACH(X_MAX_PIN);
52
-  #endif
53
-  #if HAS_X_MIN
54
-    _ATTACH(X_MIN_PIN);
55
-  #endif
56
-  #if HAS_Y_MAX
57
-    _ATTACH(Y_MAX_PIN);
58
-  #endif
59
-  #if HAS_Y_MIN
60
-    _ATTACH(Y_MIN_PIN);
61
-  #endif
62
-  #if HAS_Z_MAX
63
-    _ATTACH(Z_MAX_PIN);
64
-  #endif
65
-  #if HAS_Z_MIN
66
-     _ATTACH(Z_MIN_PIN);
67
-  #endif
68
-  #if HAS_Z2_MAX
69
-    _ATTACH(Z2_MAX_PIN);
70
-  #endif
71
-  #if HAS_Z2_MIN
72
-    _ATTACH(Z2_MIN_PIN);
73
-  #endif
74
-  #if HAS_Z3_MAX
75
-    _ATTACH(Z3_MAX_PIN);
76
-  #endif
77
-  #if HAS_Z3_MIN
78
-    _ATTACH(Z3_MIN_PIN);
79
-  #endif
80
-  #if HAS_Z4_MAX
81
-    _ATTACH(Z4_MAX_PIN);
82
-  #endif
83
-  #if HAS_Z4_MIN
84
-    _ATTACH(Z4_MIN_PIN);
85
-  #endif
86
-  #if HAS_Z_MIN_PROBE_PIN
87
-    _ATTACH(Z_MIN_PROBE_PIN);
88
-  #endif
50
+  TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN));
51
+  TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN));
52
+  TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN));
53
+  TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN));
54
+  TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN));
55
+  TERN_(HAS_Z_MIN, _ATTACH(Z_MIN_PIN));
56
+  TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN));
57
+  TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN));
58
+  TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN));
59
+  TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN));
60
+  TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN));
61
+  TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN));
62
+  TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN));
63
+  TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN));
64
+  TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
65
+  TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
66
+  TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
89
 }
67
 }

+ 4
- 4
Marlin/src/HAL/DUE/fastio.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
58
  *
58
  *
59
  * Now you can simply SET_OUTPUT(STEP); WRITE(STEP, HIGH); WRITE(STEP, LOW);
59
  * Now you can simply SET_OUTPUT(STEP); WRITE(STEP, HIGH); WRITE(STEP, LOW);
60
  *
60
  *
61
- * Why double up on these macros? see http://gcc.gnu.org/onlinedocs/cpp/Stringification.html
61
+ * Why double up on these macros? see https://gcc.gnu.org/onlinedocs/cpp/Stringification.html
62
  */
62
  */
63
 
63
 
64
 // Read a pin
64
 // Read a pin
166
 // Set pin as output (wrapper) -  reads the pin and sets the output to that value
166
 // Set pin as output (wrapper) -  reads the pin and sets the output to that value
167
 #define SET_OUTPUT(IO)       _SET_OUTPUT(IO)
167
 #define SET_OUTPUT(IO)       _SET_OUTPUT(IO)
168
 // Set pin as PWM
168
 // Set pin as PWM
169
-#define SET_PWM(IO)           SET_OUTPUT(IO)
169
+#define SET_PWM               SET_OUTPUT
170
 
170
 
171
 // Check if pin is an input
171
 // Check if pin is an input
172
 #define IS_INPUT(IO)         ((digitalPinToPort(IO)->PIO_OSR & digitalPinToBitMask(IO)) == 0)
172
 #define IS_INPUT(IO)         ((digitalPinToPort(IO)->PIO_OSR & digitalPinToBitMask(IO)) == 0)
174
 #define IS_OUTPUT(IO)        ((digitalPinToPort(IO)->PIO_OSR & digitalPinToBitMask(IO)) != 0)
174
 #define IS_OUTPUT(IO)        ((digitalPinToPort(IO)->PIO_OSR & digitalPinToBitMask(IO)) != 0)
175
 
175
 
176
 // Shorthand
176
 // Shorthand
177
-#define OUT_WRITE(IO,V)       { SET_OUTPUT(IO); WRITE(IO,V); }
177
+#define OUT_WRITE(IO,V)      do{ SET_OUTPUT(IO); WRITE(IO,V); }while(0)
178
 
178
 
179
 // digitalRead/Write wrappers
179
 // digitalRead/Write wrappers
180
 #define extDigitalRead(IO)    digitalRead(IO)
180
 #define extDigitalRead(IO)    digitalRead(IO)

+ 110
- 49
Marlin/src/HAL/DUE/fastio/G2_PWM.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
46
 
46
 
47
 #include "G2_PWM.h"
47
 #include "G2_PWM.h"
48
 
48
 
49
+#if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
50
+  #define G2_PWM_X 1
51
+#else
52
+  #define G2_PWM_X 0
53
+#endif
54
+#if PIN_EXISTS(MOTOR_CURRENT_PWM_Y)
55
+  #define G2_PWM_Y 1
56
+#else
57
+  #define G2_PWM_Y 0
58
+#endif
59
+#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
60
+  #define G2_PWM_Z 1
61
+#else
62
+  #define G2_PWM_Z 0
63
+#endif
64
+#if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
65
+  #define G2_PWM_E 1
66
+#else
67
+  #define G2_PWM_E 0
68
+#endif
69
+#define G2_MASK_X(V) (G2_PWM_X * (V))
70
+#define G2_MASK_Y(V) (G2_PWM_Y * (V))
71
+#define G2_MASK_Z(V) (G2_PWM_Z * (V))
72
+#define G2_MASK_E(V) (G2_PWM_E * (V))
73
+
49
 volatile uint32_t *SODR_A = &PIOA->PIO_SODR,
74
 volatile uint32_t *SODR_A = &PIOA->PIO_SODR,
50
                   *SODR_B = &PIOB->PIO_SODR,
75
                   *SODR_B = &PIOB->PIO_SODR,
51
                   *CODR_A = &PIOA->PIO_CODR,
76
                   *CODR_A = &PIOA->PIO_CODR,
55
 
80
 
56
 void Stepper::digipot_init() {
81
 void Stepper::digipot_init() {
57
 
82
 
58
-  OUT_WRITE(MOTOR_CURRENT_PWM_X_PIN, 0);  // init pins
59
-  OUT_WRITE(MOTOR_CURRENT_PWM_Y_PIN, 0);
60
-  OUT_WRITE(MOTOR_CURRENT_PWM_Z_PIN, 0);
61
-  OUT_WRITE(MOTOR_CURRENT_PWM_E_PIN, 0);
83
+  #if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
84
+    OUT_WRITE(MOTOR_CURRENT_PWM_X_PIN, 0);  // init pins
85
+  #endif
86
+  #if PIN_EXISTS(MOTOR_CURRENT_PWM_Y)
87
+    OUT_WRITE(MOTOR_CURRENT_PWM_Y_PIN, 0);
88
+  #endif
89
+  #if G2_PWM_Z
90
+    OUT_WRITE(MOTOR_CURRENT_PWM_Z_PIN, 0);
91
+  #endif
92
+  #if G2_PWM_E
93
+    OUT_WRITE(MOTOR_CURRENT_PWM_E_PIN, 0);
94
+  #endif
62
 
95
 
63
   #define WPKEY          (0x50574D << 8) // “PWM” in ASCII
96
   #define WPKEY          (0x50574D << 8) // “PWM” in ASCII
64
   #define WPCMD_DIS_SW   0  // command to disable Write Protect SW
97
   #define WPCMD_DIS_SW   0  // command to disable Write Protect SW
71
   PWM->PWM_WPCR = WPKEY | WPRG_ALL | WPCMD_DIS_SW;        // enable setting of all PWM registers
104
   PWM->PWM_WPCR = WPKEY | WPRG_ALL | WPCMD_DIS_SW;        // enable setting of all PWM registers
72
   PWM->PWM_CLK = PWM_CLOCK_F;                             // enable CLK_A and set it to 1MHz, leave CLK_B disabled
105
   PWM->PWM_CLK = PWM_CLOCK_F;                             // enable CLK_A and set it to 1MHz, leave CLK_B disabled
73
   PWM->PWM_CH_NUM[0].PWM_CMR = 0b1011;                    // set channel 0 to Clock A input & to left aligned
106
   PWM->PWM_CH_NUM[0].PWM_CMR = 0b1011;                    // set channel 0 to Clock A input & to left aligned
74
-  PWM->PWM_CH_NUM[1].PWM_CMR = 0b1011;                    // set channel 1 to Clock A input & to left aligned
75
-  PWM->PWM_CH_NUM[2].PWM_CMR = 0b1011;                    // set channel 2 to Clock A input & to left aligned
76
-  PWM->PWM_CH_NUM[3].PWM_CMR = 0b1011;                    // set channel 3 to Clock A input & to left aligned
77
-  PWM->PWM_CH_NUM[4].PWM_CMR = 0b1011;                    // set channel 4 to Clock A input & to left aligned
107
+  if (G2_PWM_X) PWM->PWM_CH_NUM[1].PWM_CMR = 0b1011;      // set channel 1 to Clock A input & to left aligned
108
+  if (G2_PWM_Y) PWM->PWM_CH_NUM[2].PWM_CMR = 0b1011;      // set channel 2 to Clock A input & to left aligned
109
+  if (G2_PWM_Z) PWM->PWM_CH_NUM[3].PWM_CMR = 0b1011;      // set channel 3 to Clock A input & to left aligned
110
+  if (G2_PWM_E) PWM->PWM_CH_NUM[4].PWM_CMR = 0b1011;      // set channel 4 to Clock A input & to left aligned
78
 
111
 
79
   PWM->PWM_CH_NUM[0].PWM_CPRD = PWM_PERIOD_US;            // set channel 0 Period
112
   PWM->PWM_CH_NUM[0].PWM_CPRD = PWM_PERIOD_US;            // set channel 0 Period
80
 
113
 
81
   PWM->PWM_IER2 = PWM_IER1_CHID0;                         // generate interrupt when counter0 overflows
114
   PWM->PWM_IER2 = PWM_IER1_CHID0;                         // generate interrupt when counter0 overflows
82
-  PWM->PWM_IER2 = PWM_IER2_CMPM0 | PWM_IER2_CMPM1 | PWM_IER2_CMPM2 | PWM_IER2_CMPM3 | PWM_IER2_CMPM4;        // generate interrupt on compare event
83
-
84
-  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
85
-  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
86
-  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
87
-  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
88
-
89
-  PWM->PWM_CMP[1].PWM_CMPM = 0x0001;  // enable compare event
90
-  PWM->PWM_CMP[2].PWM_CMPM = 0x0001;  // enable compare event
91
-  PWM->PWM_CMP[3].PWM_CMPM = 0x0001;  // enable compare event
92
-  PWM->PWM_CMP[4].PWM_CMPM = 0x0001;  // enable compare event
93
-
94
-  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
95
-
96
-  PWM->PWM_ENA = PWM_ENA_CHID0 | PWM_ENA_CHID1 | PWM_ENA_CHID2 | PWM_ENA_CHID3 | PWM_ENA_CHID4;         // enable the channels used by G2
97
-  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
115
+  PWM->PWM_IER2 = PWM_IER2_CMPM0
116
+    | G2_MASK_X(PWM_IER2_CMPM1)
117
+    | G2_MASK_Y(PWM_IER2_CMPM2)
118
+    | G2_MASK_Z(PWM_IER2_CMPM3)
119
+    | G2_MASK_E(PWM_IER2_CMPM4)
120
+  ; // generate interrupt on compare event
121
+
122
+  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
123
+  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
124
+  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
125
+  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
126
+
127
+  if (G2_PWM_X) PWM->PWM_CMP[1].PWM_CMPM = 0x0001;  // enable compare event
128
+  if (G2_PWM_Y) PWM->PWM_CMP[2].PWM_CMPM = 0x0001;  // enable compare event
129
+  if (G2_PWM_Z) PWM->PWM_CMP[3].PWM_CMPM = 0x0001;  // enable compare event
130
+  if (G2_PWM_E) PWM->PWM_CMP[4].PWM_CMPM = 0x0001;  // enable compare event
131
+
132
+  PWM->PWM_SCM = PWM_SCM_UPDM_MODE0 | PWM_SCM_SYNC0
133
+    | G2_MASK_X(PWM_SCM_SYNC1)
134
+    | G2_MASK_Y(PWM_SCM_SYNC2)
135
+    | G2_MASK_Z(PWM_SCM_SYNC3)
136
+    | G2_MASK_E(PWM_SCM_SYNC4)
137
+  ; // sync 1-4 with 0, use mode 0 for updates
138
+
139
+  PWM->PWM_ENA = PWM_ENA_CHID0
140
+    | G2_MASK_X(PWM_ENA_CHID1)
141
+    | G2_MASK_Y(PWM_ENA_CHID2)
142
+    | G2_MASK_Z(PWM_ENA_CHID3)
143
+    | G2_MASK_E(PWM_ENA_CHID4)
144
+  ; // enable channels used by G2
145
+
146
+  PWM->PWM_IER1 = PWM_IER1_CHID0
147
+    | G2_MASK_X(PWM_IER1_CHID1)
148
+    | G2_MASK_Y(PWM_IER1_CHID2)
149
+    | G2_MASK_Z(PWM_IER1_CHID3)
150
+    | G2_MASK_E(PWM_IER1_CHID4)
151
+  ; // enable interrupts for channels used by G2
98
 
152
 
99
   NVIC_EnableIRQ(PWM_IRQn);     // Enable interrupt handler
153
   NVIC_EnableIRQ(PWM_IRQn);     // Enable interrupt handler
100
   NVIC_SetPriority(PWM_IRQn, NVIC_EncodePriority(0, 10, 0));  // normal priority for PWM module (can stand some jitter on the Vref signals)
154
   NVIC_SetPriority(PWM_IRQn, NVIC_EncodePriority(0, 10, 0));  // normal priority for PWM module (can stand some jitter on the Vref signals)
101
 }
155
 }
102
 
156
 
103
-void Stepper::digipot_current(const uint8_t driver, const int16_t current) {
157
+void Stepper::set_digipot_current(const uint8_t driver, const int16_t current) {
104
 
158
 
105
   if (!(PWM->PWM_CH_NUM[0].PWM_CPRD == PWM_PERIOD_US)) digipot_init();  // Init PWM system if needed
159
   if (!(PWM->PWM_CH_NUM[0].PWM_CPRD == PWM_PERIOD_US)) digipot_init();  // Init PWM system if needed
106
 
160
 
107
   switch (driver) {
161
   switch (driver) {
108
-    case 0: PWM->PWM_CMP[1].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current));    // update X & Y
109
-            PWM->PWM_CMP[2].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current));
110
-            PWM->PWM_CMP[1].PWM_CMPMUPD = 0x0001;  // enable compare event
111
-            PWM->PWM_CMP[2].PWM_CMPMUPD = 0x0001;  // enable compare event
112
-            PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
113
-            break;
114
-    case 1: PWM->PWM_CMP[3].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current));    // update Z
115
-            PWM->PWM_CMP[3].PWM_CMPMUPD = 0x0001;  // enable compare event
116
-            PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
117
-            break;
118
-    default:PWM->PWM_CMP[4].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current));    // update E
119
-            PWM->PWM_CMP[4].PWM_CMPMUPD = 0x0001;  // enable compare event
120
-            PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
121
-            break;
162
+    case 0:
163
+      if (G2_PWM_X) PWM->PWM_CMP[1].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current));    // update X & Y
164
+      if (G2_PWM_Y) PWM->PWM_CMP[2].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current));
165
+      if (G2_PWM_X) PWM->PWM_CMP[1].PWM_CMPMUPD = 0x0001;  // enable compare event
166
+      if (G2_PWM_Y) PWM->PWM_CMP[2].PWM_CMPMUPD = 0x0001;  // enable compare event
167
+      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
168
+      break;
169
+    case 1:
170
+      if (G2_PWM_Z) {
171
+        PWM->PWM_CMP[3].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current));    // update Z
172
+        PWM->PWM_CMP[3].PWM_CMPMUPD = 0x0001;  // enable compare event
173
+        PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
174
+      }
175
+      break;
176
+    default:
177
+      if (G2_PWM_E) {
178
+        PWM->PWM_CMP[4].PWM_CMPVUPD = 0x010000000LL | G2_VREF_COUNT(G2_VREF(current));    // update E
179
+        PWM->PWM_CMP[4].PWM_CMPMUPD = 0x0001;  // enable compare event
180
+        PWM->PWM_SCUC = PWM_SCUC_UPDULOCK; // tell the PWM controller to update the values on the next cycle
181
+      }
182
+      break;
122
   }
183
   }
123
 }
184
 }
124
 
185
 
127
 void PWM_Handler() {
188
 void PWM_Handler() {
128
   PWM_ISR1_STATUS = PWM->PWM_ISR1;
189
   PWM_ISR1_STATUS = PWM->PWM_ISR1;
129
   PWM_ISR2_STATUS = PWM->PWM_ISR2;
190
   PWM_ISR2_STATUS = PWM->PWM_ISR2;
130
-  if (PWM_ISR1_STATUS & PWM_IER1_CHID0) {                           // CHAN_0 interrupt
131
-    *ISR_table[0].set_register = ISR_table[0].write_mask;                                          // set X to active
132
-    *ISR_table[1].set_register = ISR_table[1].write_mask;                                          // set Y to active
133
-    *ISR_table[2].set_register = ISR_table[2].write_mask;                                          // set Z to active
134
-    *ISR_table[3].set_register = ISR_table[3].write_mask;                                          // set E to active
191
+  if (PWM_ISR1_STATUS & PWM_IER1_CHID0) {                                                         // CHAN_0 interrupt
192
+    if (G2_PWM_X) *ISR_table[0].set_register = ISR_table[0].write_mask;                           // set X to active
193
+    if (G2_PWM_Y) *ISR_table[1].set_register = ISR_table[1].write_mask;                           // set Y to active
194
+    if (G2_PWM_Z) *ISR_table[2].set_register = ISR_table[2].write_mask;                           // set Z to active
195
+    if (G2_PWM_E) *ISR_table[3].set_register = ISR_table[3].write_mask;                           // set E to active
135
   }
196
   }
136
   else {
197
   else {
137
-    if (PWM_ISR2_STATUS & PWM_IER2_CMPM1)  *ISR_table[0].clr_register = ISR_table[0].write_mask;   // set X to inactive
138
-    if (PWM_ISR2_STATUS & PWM_IER2_CMPM2)  *ISR_table[1].clr_register = ISR_table[1].write_mask;   // set Y to inactive
139
-    if (PWM_ISR2_STATUS & PWM_IER2_CMPM3)  *ISR_table[2].clr_register = ISR_table[2].write_mask;   // set Z to inactive
140
-    if (PWM_ISR2_STATUS & PWM_IER2_CMPM4)  *ISR_table[3].clr_register = ISR_table[3].write_mask;   // set E to inactive
198
+    if (G2_PWM_X && (PWM_ISR2_STATUS & PWM_IER2_CMPM1)) *ISR_table[0].clr_register = ISR_table[0].write_mask; // set X to inactive
199
+    if (G2_PWM_Y && (PWM_ISR2_STATUS & PWM_IER2_CMPM2)) *ISR_table[1].clr_register = ISR_table[1].write_mask; // set Y to inactive
200
+    if (G2_PWM_Z && (PWM_ISR2_STATUS & PWM_IER2_CMPM3)) *ISR_table[2].clr_register = ISR_table[2].write_mask; // set Z to inactive
201
+    if (G2_PWM_E && (PWM_ISR2_STATUS & PWM_IER2_CMPM4)) *ISR_table[3].clr_register = ISR_table[3].write_mask; // set E to inactive
141
   }
202
   }
142
   return;
203
   return;
143
 }
204
 }

+ 1
- 1
Marlin/src/HAL/DUE/fastio/G2_PWM.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 1
- 1
Marlin/src/HAL/DUE/fastio/G2_pins.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 5
- 1
Marlin/src/HAL/DUE/inc/Conditionals_LCD.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
23
+
24
+#if HAS_SPI_TFT || HAS_FSMC_TFT
25
+  #error "Sorry! TFT displays are not available for HAL/DUE."
26
+#endif

+ 1
- 1
Marlin/src/HAL/DUE/inc/Conditionals_adv.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 5
- 5
Marlin/src/HAL/DUE/inc/Conditionals_post.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
23
 
23
 
24
-#if USE_EMULATED_EEPROM
25
-  #undef SRAM_EEPROM_EMULATION
26
-  #undef SDCARD_EEPROM_EMULATION
27
-  #define FLASH_EEPROM_EMULATION 1
24
+#if USE_FALLBACK_EEPROM
25
+  #define FLASH_EEPROM_EMULATION
26
+#elif EITHER(I2C_EEPROM, SPI_EEPROM)
27
+  #define USE_SHARED_EEPROM 1
28
 #endif
28
 #endif

+ 3
- 3
Marlin/src/HAL/DUE/inc/SanityCheck.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once
52
   #endif
52
   #endif
53
 #endif
53
 #endif
54
 
54
 
55
-#if ENABLED(FAST_PWM_FAN)
56
-  #error "FAST_PWM_FAN is not yet implemented for this platform."
55
+#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_FREQUENCY
56
+  #error "Features requiring Hardware PWM (FAST_PWM_FAN, SPINDLE_LASER_FREQUENCY) are not yet supported on DUE."
57
 #endif
57
 #endif
58
 
58
 
59
 #if HAS_TMC_SW_SERIAL
59
 #if HAS_TMC_SW_SERIAL

+ 1
- 2
Marlin/src/HAL/DUE/pinsDebug.h View File

13
  * GNU General Public License for more details.
13
  * GNU General Public License for more details.
14
  *
14
  *
15
  * You should have received a copy of the GNU General Public License
15
  * You should have received a copy of the GNU General Public License
16
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
17
  *
17
  *
18
  */
18
  */
19
 
19
 
179
  * ----------------+--------
179
  * ----------------+--------
180
  *  ID             |  PB11
180
  *  ID             |  PB11
181
  *  VBOF           |  PB10
181
  *  VBOF           |  PB10
182
- *
183
  */
182
  */

+ 1
- 1
Marlin/src/HAL/DUE/spi_pins.h View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 #pragma once
22
 #pragma once

+ 2
- 6
Marlin/src/HAL/DUE/timers.cpp View File

16
  * GNU General Public License for more details.
16
  * GNU General Public License for more details.
17
  *
17
  *
18
  * You should have received a copy of the GNU General Public License
18
  * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
  *
20
  *
21
  */
21
  */
22
 
22
 
23
 /**
23
 /**
24
- * Description: HAL for Arduino Due and compatible (SAM3X8E)
25
- *
26
- * For ARDUINO_ARCH_SAM
24
+ * HAL Timers for Arduino Due and compatible (SAM3X8E)
27
  */
25
  */
28
 
26
 
29
 #ifdef ARDUINO_ARCH_SAM
27
 #ifdef ARDUINO_ARCH_SAM
34
 #include "../../inc/MarlinConfig.h"
32
 #include "../../inc/MarlinConfig.h"
35
 #include "HAL.h"
33
 #include "HAL.h"
36
 
34
 
37
-#include "timers.h"
38
-
39
 // ------------------------
35
 // ------------------------
40
 // Local defines
36
 // Local defines
41
 // ------------------------
37
 // ------------------------

+ 18
- 10
Marlin/src/HAL/DUE/timers.h View File

15
  * GNU General Public License for more details.
15
  * GNU General Public License for more details.
16
  *
16
  *
17
  * You should have received a copy of the GNU General Public License
17
  * You should have received a copy of the GNU General Public License
18
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19
  *
19
  *
20
  */
20
  */
21
 #pragma once
21
 #pragma once
22
 
22
 
23
 /**
23
 /**
24
- * HAL for Arduino Due and compatible (SAM3X8E)
25
- *
26
- * For ARDUINO_ARCH_SAM
24
+ * HAL Timers for Arduino Due and compatible (SAM3X8E)
27
  */
25
  */
28
 
26
 
29
 #include <stdint.h>
27
 #include <stdint.h>
40
 #define HAL_TIMER_RATE         ((F_CPU) / 2)    // frequency of timers peripherals
38
 #define HAL_TIMER_RATE         ((F_CPU) / 2)    // frequency of timers peripherals
41
 
39
 
42
 #ifndef STEP_TIMER_NUM
40
 #ifndef STEP_TIMER_NUM
43
-#define STEP_TIMER_NUM 2  // index of timer to use for stepper
41
+  #define STEP_TIMER_NUM        2  // Timer Index for Stepper
42
+#endif
43
+#ifndef PULSE_TIMER_NUM
44
+  #define PULSE_TIMER_NUM       STEP_TIMER_NUM
45
+#endif
46
+#ifndef TEMP_TIMER_NUM
47
+  #define TEMP_TIMER_NUM        4  // Timer Index for Temperature
48
+#endif
49
+#ifndef TONE_TIMER_NUM
50
+  #define TONE_TIMER_NUM        6  // index of timer to use for beeper tones
44
 #endif
51
 #endif
45
-#define TEMP_TIMER_NUM 4  // index of timer to use for temperature
46
-#define PULSE_TIMER_NUM STEP_TIMER_NUM
47
-#define TONE_TIMER_NUM 6  // index of timer to use for beeper tones
48
 
52
 
49
 #define TEMP_TIMER_FREQUENCY   1000 // temperature interrupt frequency
53
 #define TEMP_TIMER_FREQUENCY   1000 // temperature interrupt frequency
50
 
54
 
66
 #ifndef HAL_STEP_TIMER_ISR
70
 #ifndef HAL_STEP_TIMER_ISR
67
   #define HAL_STEP_TIMER_ISR() void TC2_Handler()
71
   #define HAL_STEP_TIMER_ISR() void TC2_Handler()
68
 #endif
72
 #endif
69
-#define HAL_TEMP_TIMER_ISR()  void TC4_Handler()
70
-#define HAL_TONE_TIMER_ISR()  void TC6_Handler()
73
+#ifndef HAL_TEMP_TIMER_ISR
74
+  #define HAL_TEMP_TIMER_ISR() void TC4_Handler()
75
+#endif
76
+#ifndef HAL_TONE_TIMER_ISR
77
+  #define HAL_TONE_TIMER_ISR() void TC6_Handler()
78
+#endif
71
 
79
 
72
 // ------------------------
80
 // ------------------------
73
 // Types
81
 // Types

+ 18
- 0
Marlin/src/HAL/DUE/upload_extra_script.py View File

1
+#
2
+# Set upload_command
3
+#
4
+#  Windows: bossac.exe
5
+#  Other: leave unchanged
6
+#
7
+
8
+import platform
9
+current_OS = platform.system()
10
+
11
+if current_OS == 'Windows':
12
+
13
+	Import("env")
14
+
15
+	# Use bossac.exe on Windows
16
+	env.Replace(
17
+	    UPLOADCMD="bossac --info --unlock --write --verify --reset --erase -U false --boot $SOURCE"
18
+	)

+ 2
- 2
Marlin/src/HAL/DUE/usb/arduino_due_x.h View File

43
 #pragma once
43
 #pragma once
44
 
44
 
45
 /**
45
 /**
46
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
46
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
47
  */
47
  */
48
 
48
 
49
 /**
49
 /**
93
 #define USB_VBOF_GPIO               (PIO_PB10_IDX)
93
 #define USB_VBOF_GPIO               (PIO_PB10_IDX)
94
 #define USB_VBOF_FLAGS              (PIO_PERIPH_A | PIO_DEFAULT)
94
 #define USB_VBOF_FLAGS              (PIO_PERIPH_A | PIO_DEFAULT)
95
 /*! Active level of the USB_VBOF output pin. */
95
 /*! Active level of the USB_VBOF output pin. */
96
-#define USB_VBOF_ACTIVE_LEVEL       LOW
96
+#define USB_VBOF_ACTIVE_STATE       LOW
97
 /* ------------------------------------------------------------------------ */
97
 /* ------------------------------------------------------------------------ */

+ 83
- 84
Marlin/src/HAL/DUE/usb/compiler.h View File

41
  *
41
  *
42
  */
42
  */
43
 /*
43
 /*
44
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
44
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
45
  */
45
  */
46
 
46
 
47
 #ifndef UTILS_COMPILER_H
47
 #ifndef UTILS_COMPILER_H
173
 #   define __always_inline   __forceinline
173
 #   define __always_inline   __forceinline
174
 #elif (defined __GNUC__)
174
 #elif (defined __GNUC__)
175
 #ifdef __always_inline
175
 #ifdef __always_inline
176
-#	undef __always_inline
176
+# undef __always_inline
177
 #endif
177
 #endif
178
-#	define __always_inline   inline __attribute__((__always_inline__))
178
+# define __always_inline   inline __attribute__((__always_inline__))
179
 #elif (defined __ICCARM__)
179
 #elif (defined __ICCARM__)
180
-#	define __always_inline   _Pragma("inline=forced")
180
+# define __always_inline   _Pragma("inline=forced")
181
 #endif
181
 #endif
182
 
182
 
183
 /**
183
 /**
188
  * heuristics and not inline the function.
188
  * heuristics and not inline the function.
189
  */
189
  */
190
 #ifdef __CC_ARM
190
 #ifdef __CC_ARM
191
-#   define __no_inline   __attribute__((noinline))
191
+# define __no_inline   __attribute__((noinline))
192
 #elif (defined __GNUC__)
192
 #elif (defined __GNUC__)
193
-#	define __no_inline   __attribute__((__noinline__))
193
+# define __no_inline   __attribute__((__noinline__))
194
 #elif (defined __ICCARM__)
194
 #elif (defined __ICCARM__)
195
-#	define __no_inline   _Pragma("inline=never")
195
+# define __no_inline   _Pragma("inline=never")
196
 #endif
196
 #endif
197
 
197
 
198
 /*! \brief This macro is used to test fatal errors.
198
 /*! \brief This macro is used to test fatal errors.
211
 #  else
211
 #  else
212
 #undef TEST_SUITE_DEFINE_ASSERT_MACRO
212
 #undef TEST_SUITE_DEFINE_ASSERT_MACRO
213
 #    define Assert(expr) \
213
 #    define Assert(expr) \
214
-	{\
215
-		if (!(expr)) while (true);\
216
-	}
214
+  {\
215
+    if (!(expr)) while (true);\
216
+  }
217
 #  endif
217
 #  endif
218
 #else
218
 #else
219
 #  define Assert(expr) ((void) 0)
219
 #  define Assert(expr) ((void) 0)
609
 #   define clz(u)              ((u) ? __CLZ(u) : 32)
609
 #   define clz(u)              ((u) ? __CLZ(u) : 32)
610
 #else
610
 #else
611
 #   define clz(u)              (((u) == 0)          ? 32 : \
611
 #   define clz(u)              (((u) == 0)          ? 32 : \
612
-                                ((u) & (1ul << 31)) ?  0 : \
613
-                                ((u) & (1ul << 30)) ?  1 : \
614
-                                ((u) & (1ul << 29)) ?  2 : \
615
-                                ((u) & (1ul << 28)) ?  3 : \
616
-                                ((u) & (1ul << 27)) ?  4 : \
617
-                                ((u) & (1ul << 26)) ?  5 : \
618
-                                ((u) & (1ul << 25)) ?  6 : \
619
-                                ((u) & (1ul << 24)) ?  7 : \
620
-                                ((u) & (1ul << 23)) ?  8 : \
621
-                                ((u) & (1ul << 22)) ?  9 : \
622
-                                ((u) & (1ul << 21)) ? 10 : \
623
-                                ((u) & (1ul << 20)) ? 11 : \
624
-                                ((u) & (1ul << 19)) ? 12 : \
625
-                                ((u) & (1ul << 18)) ? 13 : \
626
-                                ((u) & (1ul << 17)) ? 14 : \
627
-                                ((u) & (1ul << 16)) ? 15 : \
628
-                                ((u) & (1ul << 15)) ? 16 : \
629
-                                ((u) & (1ul << 14)) ? 17 : \
630
-                                ((u) & (1ul << 13)) ? 18 : \
631
-                                ((u) & (1ul << 12)) ? 19 : \
632
-                                ((u) & (1ul << 11)) ? 20 : \
633
-                                ((u) & (1ul << 10)) ? 21 : \
634
-                                ((u) & (1ul <<  9)) ? 22 : \
635
-                                ((u) & (1ul <<  8)) ? 23 : \
636
-                                ((u) & (1ul <<  7)) ? 24 : \
637
-                                ((u) & (1ul <<  6)) ? 25 : \
638
-                                ((u) & (1ul <<  5)) ? 26 : \
639
-                                ((u) & (1ul <<  4)) ? 27 : \
640
-                                ((u) & (1ul <<  3)) ? 28 : \
641
-                                ((u) & (1ul <<  2)) ? 29 : \
642
-                                ((u) & (1ul <<  1)) ? 30 : \
612
+                                ((u) & (1UL << 31)) ?  0 : \
613
+                                ((u) & (1UL << 30)) ?  1 : \
614
+                                ((u) & (1UL << 29)) ?  2 : \
615
+                                ((u) & (1UL << 28)) ?  3 : \
616
+                                ((u) & (1UL << 27)) ?  4 : \
617
+                                ((u) & (1UL << 26)) ?  5 : \
618
+                                ((u) & (1UL << 25)) ?  6 : \
619
+                                ((u) & (1UL << 24)) ?  7 : \
620
+                                ((u) & (1UL << 23)) ?  8 : \
621
+                                ((u) & (1UL << 22)) ?  9 : \
622
+                                ((u) & (1UL << 21)) ? 10 : \
623
+                                ((u) & (1UL << 20)) ? 11 : \
624
+                                ((u) & (1UL << 19)) ? 12 : \
625
+                                ((u) & (1UL << 18)) ? 13 : \
626
+                                ((u) & (1UL << 17)) ? 14 : \
627
+                                ((u) & (1UL << 16)) ? 15 : \
628
+                                ((u) & (1UL << 15)) ? 16 : \
629
+                                ((u) & (1UL << 14)) ? 17 : \
630
+                                ((u) & (1UL << 13)) ? 18 : \
631
+                                ((u) & (1UL << 12)) ? 19 : \
632
+                                ((u) & (1UL << 11)) ? 20 : \
633
+                                ((u) & (1UL << 10)) ? 21 : \
634
+                                ((u) & (1UL <<  9)) ? 22 : \
635
+                                ((u) & (1UL <<  8)) ? 23 : \
636
+                                ((u) & (1UL <<  7)) ? 24 : \
637
+                                ((u) & (1UL <<  6)) ? 25 : \
638
+                                ((u) & (1UL <<  5)) ? 26 : \
639
+                                ((u) & (1UL <<  4)) ? 27 : \
640
+                                ((u) & (1UL <<  3)) ? 28 : \
641
+                                ((u) & (1UL <<  2)) ? 29 : \
642
+                                ((u) & (1UL <<  1)) ? 30 : \
643
                                 31)
643
                                 31)
644
 #endif
644
 #endif
645
 #endif
645
 #endif
654
 #if (defined __GNUC__) || (defined __CC_ARM)
654
 #if (defined __GNUC__) || (defined __CC_ARM)
655
 #   define ctz(u)              ((u) ? __builtin_ctz(u) : 32)
655
 #   define ctz(u)              ((u) ? __builtin_ctz(u) : 32)
656
 #else
656
 #else
657
-#   define ctz(u)              ((u) & (1ul <<  0) ?  0 : \
658
-                                (u) & (1ul <<  1) ?  1 : \
659
-                                (u) & (1ul <<  2) ?  2 : \
660
-                                (u) & (1ul <<  3) ?  3 : \
661
-                                (u) & (1ul <<  4) ?  4 : \
662
-                                (u) & (1ul <<  5) ?  5 : \
663
-                                (u) & (1ul <<  6) ?  6 : \
664
-                                (u) & (1ul <<  7) ?  7 : \
665
-                                (u) & (1ul <<  8) ?  8 : \
666
-                                (u) & (1ul <<  9) ?  9 : \
667
-                                (u) & (1ul << 10) ? 10 : \
668
-                                (u) & (1ul << 11) ? 11 : \
669
-                                (u) & (1ul << 12) ? 12 : \
670
-                                (u) & (1ul << 13) ? 13 : \
671
-                                (u) & (1ul << 14) ? 14 : \
672
-                                (u) & (1ul << 15) ? 15 : \
673
-                                (u) & (1ul << 16) ? 16 : \
674
-                                (u) & (1ul << 17) ? 17 : \
675
-                                (u) & (1ul << 18) ? 18 : \
676
-                                (u) & (1ul << 19) ? 19 : \
677
-                                (u) & (1ul << 20) ? 20 : \
678
-                                (u) & (1ul << 21) ? 21 : \
679
-                                (u) & (1ul << 22) ? 22 : \
680
-                                (u) & (1ul << 23) ? 23 : \
681
-                                (u) & (1ul << 24) ? 24 : \
682
-                                (u) & (1ul << 25) ? 25 : \
683
-                                (u) & (1ul << 26) ? 26 : \
684
-                                (u) & (1ul << 27) ? 27 : \
685
-                                (u) & (1ul << 28) ? 28 : \
686
-                                (u) & (1ul << 29) ? 29 : \
687
-                                (u) & (1ul << 30) ? 30 : \
688
-                                (u) & (1ul << 31) ? 31 : \
657
+#   define ctz(u)              ((u) & (1UL <<  0) ?  0 : \
658
+                                (u) & (1UL <<  1) ?  1 : \
659
+                                (u) & (1UL <<  2) ?  2 : \
660
+                                (u) & (1UL <<  3) ?  3 : \
661
+                                (u) & (1UL <<  4) ?  4 : \
662
+                                (u) & (1UL <<  5) ?  5 : \
663
+                                (u) & (1UL <<  6) ?  6 : \
664
+                                (u) & (1UL <<  7) ?  7 : \
665
+                                (u) & (1UL <<  8) ?  8 : \
666
+                                (u) & (1UL <<  9) ?  9 : \
667
+                                (u) & (1UL << 10) ? 10 : \
668
+                                (u) & (1UL << 11) ? 11 : \
669
+                                (u) & (1UL << 12) ? 12 : \
670
+                                (u) & (1UL << 13) ? 13 : \
671
+                                (u) & (1UL << 14) ? 14 : \
672
+                                (u) & (1UL << 15) ? 15 : \
673
+                                (u) & (1UL << 16) ? 16 : \
674
+                                (u) & (1UL << 17) ? 17 : \
675
+                                (u) & (1UL << 18) ? 18 : \
676
+                                (u) & (1UL << 19) ? 19 : \
677
+                                (u) & (1UL << 20) ? 20 : \
678
+                                (u) & (1UL << 21) ? 21 : \
679
+                                (u) & (1UL << 22) ? 22 : \
680
+                                (u) & (1UL << 23) ? 23 : \
681
+                                (u) & (1UL << 24) ? 24 : \
682
+                                (u) & (1UL << 25) ? 25 : \
683
+                                (u) & (1UL << 26) ? 26 : \
684
+                                (u) & (1UL << 27) ? 27 : \
685
+                                (u) & (1UL << 28) ? 28 : \
686
+                                (u) & (1UL << 29) ? 29 : \
687
+                                (u) & (1UL << 30) ? 30 : \
688
+                                (u) & (1UL << 31) ? 31 : \
689
                                 32)
689
                                 32)
690
 #endif
690
 #endif
691
 #endif
691
 #endif
1106
 /* Converts a 8 Byte array into a 32-Bit value */
1106
 /* Converts a 8 Byte array into a 32-Bit value */
1107
 static inline uint32_t convert_byte_array_to_32_bit(uint8_t *data)
1107
 static inline uint32_t convert_byte_array_to_32_bit(uint8_t *data)
1108
 {
1108
 {
1109
-	union
1110
-	{
1111
-		uint32_t u32;
1112
-		uint8_t u8[8];
1113
-	}long_addr;
1114
-	uint8_t index;
1115
-	for (index = 0; index < 4; index++)
1116
-	{
1117
-		long_addr.u8[index] = *data++;
1118
-	}
1119
-	return long_addr.u32;
1109
+  union
1110
+  {
1111
+    uint32_t u32;
1112
+    uint8_t u8[8];
1113
+  }long_addr;
1114
+  uint8_t index;
1115
+  for (index = 0; index < 4; index++) {
1116
+    long_addr.u8[index] = *data++;
1117
+  }
1118
+  return long_addr.u32;
1120
 }
1119
 }
1121
 
1120
 
1122
 /**
1121
 /**

+ 1
- 1
Marlin/src/HAL/DUE/usb/conf_access.h View File

41
  *
41
  *
42
  */
42
  */
43
 /*
43
 /*
44
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
44
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
45
  */
45
  */
46
 
46
 
47
 #ifndef _CONF_ACCESS_H_
47
 #ifndef _CONF_ACCESS_H_

+ 1
- 1
Marlin/src/HAL/DUE/usb/conf_clock.h View File

41
  *
41
  *
42
  */
42
  */
43
 /*
43
 /*
44
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
44
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
45
  */
45
  */
46
 
46
 
47
 #ifndef CONF_CLOCK_H_INCLUDED
47
 #ifndef CONF_CLOCK_H_INCLUDED

+ 1
- 5
Marlin/src/HAL/DUE/usb/conf_usb.h View File

41
  *
41
  *
42
  */
42
  */
43
 /*
43
 /*
44
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
44
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
45
  */
45
  */
46
 
46
 
47
 #ifndef _CONF_USB_H_
47
 #ifndef _CONF_USB_H_
78
 //! To define a Full speed device
78
 //! To define a Full speed device
79
 //#define USB_DEVICE_FULL_SPEED
79
 //#define USB_DEVICE_FULL_SPEED
80
 
80
 
81
-#if MB(ARCHIM1)
82
-  #define USB_DEVICE_FULL_SPEED
83
-#endif
84
-
85
 //! To authorize the High speed
81
 //! To authorize the High speed
86
 #ifndef USB_DEVICE_FULL_SPEED
82
 #ifndef USB_DEVICE_FULL_SPEED
87
   #if (UC3A3||UC3A4)
83
   #if (UC3A3||UC3A4)

+ 1
- 1
Marlin/src/HAL/DUE/usb/ctrl_access.c View File

53
  *
53
  *
54
  ******************************************************************************/
54
  ******************************************************************************/
55
 /*
55
 /*
56
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
56
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
57
  */
57
  */
58
 
58
 
59
 #ifdef ARDUINO_ARCH_SAM
59
 #ifdef ARDUINO_ARCH_SAM

+ 1
- 1
Marlin/src/HAL/DUE/usb/ctrl_access.h View File

53
  *
53
  *
54
  ******************************************************************************/
54
  ******************************************************************************/
55
 /*
55
 /*
56
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
56
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
57
  */
57
  */
58
 
58
 
59
 
59
 

+ 1
- 1
Marlin/src/HAL/DUE/usb/genclk.h View File

41
  *
41
  *
42
  */
42
  */
43
 /*
43
 /*
44
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
44
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
45
  */
45
  */
46
 
46
 
47
 #ifndef CHIP_GENCLK_H_INCLUDED
47
 #ifndef CHIP_GENCLK_H_INCLUDED

+ 1
- 1
Marlin/src/HAL/DUE/usb/mrepeat.h View File

41
  *
41
  *
42
  */
42
  */
43
 /*
43
 /*
44
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
44
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
45
  */
45
  */
46
 
46
 
47
 #ifndef _MREPEAT_H_
47
 #ifndef _MREPEAT_H_

+ 1
- 1
Marlin/src/HAL/DUE/usb/osc.h View File

41
  *
41
  *
42
  */
42
  */
43
 /*
43
 /*
44
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
44
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
45
  */
45
  */
46
 
46
 
47
 #ifndef CHIP_OSC_H_INCLUDED
47
 #ifndef CHIP_OSC_H_INCLUDED

+ 1
- 1
Marlin/src/HAL/DUE/usb/pll.h View File

41
  *
41
  *
42
  */
42
  */
43
 /*
43
 /*
44
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
44
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
45
  */
45
  */
46
 
46
 
47
 #ifndef CHIP_PLL_H_INCLUDED
47
 #ifndef CHIP_PLL_H_INCLUDED

+ 1
- 1
Marlin/src/HAL/DUE/usb/preprocessor.h View File

41
  *
41
  *
42
  */
42
  */
43
 /*
43
 /*
44
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
44
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
45
  */
45
  */
46
 
46
 
47
 #ifndef _PREPROCESSOR_H_
47
 #ifndef _PREPROCESSOR_H_

+ 1
- 1
Marlin/src/HAL/DUE/usb/sbc_protocol.h View File

52
  *
52
  *
53
  */
53
  */
54
 /*
54
 /*
55
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
55
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
56
  */
56
  */
57
 #ifndef _SBC_PROTOCOL_H_
57
 #ifndef _SBC_PROTOCOL_H_
58
 #define _SBC_PROTOCOL_H_
58
 #define _SBC_PROTOCOL_H_

+ 1
- 1
Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.h View File

42
  *
42
  *
43
  ******************************************************************************/
43
  ******************************************************************************/
44
 /*
44
 /*
45
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
45
+ * Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
46
  */
46
  */
47
 
47
 
48
 
48
 

+ 0
- 0
Marlin/src/HAL/DUE/usb/spc_protocol.h View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save