Go to file
Alex Voinea 5cf84ab98a Make gpio write atomic
Unfortunately, there is no way to differentiate between an optimized gpio write (safe always on the atmega32u4) and an unoptimized write (read-modify-write, dangerous if any other pin on that Port is used in an ISR).
While very quickly polling the tmc registers, I noticed that the moving stepper would do some random extra steps. That can only be explained by the following sequence of actions:
- the spi code reads the PORT register
- ISR toggles the step line, changing the value in the PORT register
- the spi code writes the upated PORT back, resetting the step line to the old state

After making the writes atomic, the stepping issue disappeared and the driver checks also worked correctly
2022-10-10 20:13:08 +02:00
.vscode Update vscode to avr-gcc 2022-07-27 17:04:52 +02:00
cmake cmake: Full reproducibility support 2022-10-10 15:19:58 +02:00
lib USB cdc stdout stream 2021-10-14 14:27:56 +02:00
src Make gpio write atomic 2022-10-10 20:13:08 +02:00
tests Force fix formatting 2022-09-22 12:16:41 +02:00
utils Update Jenkins rules to match updated cmake/ninja versions 2022-07-27 17:04:52 +02:00
.clang-format Disable preprocessor code indentation 2021-07-07 16:33:03 +02:00
.cmake-format.py Prepare parts of the build system 2021-04-19 07:03:47 +02:00
.gitignore Prepare parts of the build system 2021-04-19 07:03:47 +02:00
.pre-commit-config.yaml hooks: Update cmake-format to 0.6.13 2022-10-10 11:50:05 +02:00
CMakeLists.txt cmake: Reformat 2022-10-10 15:19:58 +02:00
Doxyfile Update doxyfile + document modules namespace 2021-06-30 07:39:31 +02:00
README.md README: Mention the correct output filename 2022-07-27 17:04:52 +02:00
version.cmake Fix computation of CRC 2022-09-07 15:44:08 +02:00

README.md

Prusa-Firmware-MMU-Private

How to prepare build env and tools

Run ./utils/bootstrap.py

bootstrap.py will now download all the "missing" dependencies into the .dependencies folder:

  • clang-format-9.0.0-noext
  • cmake-3.22.5
  • ninja-1.10.2
  • avr-gcc-7.3.0

How to build the preliminary project so far:

Now the process is the same as in the Buddy Firmware:

./utils/build.py

builds the firmware.hex in build/mmu_release

In case you'd like to build the project directly via cmake you can use an approach like this:

mkdir build
cd build
cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=../cmake/AvrGcc.cmake
ninja

It will produce a MMU2SR_<version>.hex file.