diff --git a/IDE_Board_Manager/Prepare-new-version.sh b/IDE_Board_Manager/Prepare-new-version.sh new file mode 100644 index 0000000..0a60dd6 --- /dev/null +++ b/IDE_Board_Manager/Prepare-new-version.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# This bash script is used to prepare the "package_prusa3d_index.json" +# +# Supported OS: Windows 10, Linux64 bit +# Beta OS: Linux32 bit +# +# 30, jul 2019, 3d-gussner, Read version from "prusa3dboards.version" file. It reads the 1st line + + +# Get version from prusa3dboards.version file +VERSION=$(head -1 prusa3dboards.version|cut -d ' ' -f1) +# rename temporaray "prusa3dboards" folder to include version number +mv prusa3dboards prusa3dboards-$VERSION +# compress prusa3dboards-$VERSION folder +tar -cjf prusa3dboards-$VERSION.tar.bz2 prusa3dboards-$VERSION +# rename prusa3dboards-$VERSION back to prusa3dboards as it makes follow changes easier in Github, cimmits/blame/history +mv prusa3dboards-$VERSION prusa3dboards +# get size of the compressed file for JSO +SIZE=$(wc -c prusa3dboards-$VERSION.tar.bz2|cut -d ' ' -f1) + +#get sha256 checksum +SHA256=$(sha256sum prusa3dboards-$VERSION.tar.bz2|cut -d ' ' -f1) + + +echo "Version : "$VERSION" to build" +echo "" +echo "Please don't forget to create new version file prusa3dboards-"$VERSION".MD" +sleep 5 +echo "Please use following values to edit JSON file" +echo "" +echo "ArchiveFileName : prusa3dboards-"$VERSION".tar.bz2" +echo "SHA256 checksum : "$SHA256 +echo "Size : "$SIZE +echo "online : prusa3dboards-"$VERSION".MD" + diff --git a/IDE_Board_Manager/package_prusa3d_index.json b/IDE_Board_Manager/package_prusa3d_index.json index 9ec47ee..1a90fdc 100644 --- a/IDE_Board_Manager/package_prusa3d_index.json +++ b/IDE_Board_Manager/package_prusa3d_index.json @@ -9,6 +9,47 @@ "online": "https://github.com/prusa3d/Arduino_Boards" }, "platforms": [ + { + "name": "Prusa Research AVR Boards", + "architecture": "avr", + "version": "1.0.2", + "category": "Contributed", + "url": "https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-1.0.2.tar.bz2", + "archiveFileName": "prusa3dboards-1.0.2.tar.bz2", + "checksum": "SHA-256:e7ff02ea51fba6a5dadfb7b14eb53f61f106f2412c0f0d95f64accc37945d82a", + "size": "101087", + "help": { + "online": "https://github.com/prusa3d/Arduino_Boards/blob/master/IDE_Board_Manager/prusa3dboards-1.0.2.md" + }, + "boards": [ + { + "name": "Original Prusa i3 MK3 Multi Material 2.0 upgrade" + }, + { + "name": "Original Prusa i3 MK3/MK3S Einsy RAMBo" + } + ], + "toolsDependencies": [] + }, + { + "name": "Prusa Research AVR MMU Boards", + "architecture": "avr", + "version": "1.0.1", + "category": "Contributed", + "url": "https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-1.0.1.tar.bz2", + "archiveFileName": "prusa3dboards-1.0.1.tar.bz2", + "checksum": "SHA-256:858cec0d14a549f637a558e51de29917796b37eaa9e1e8d6bd7449ba6bcd1ffd", + "size": "32469", + "help": { + "online": "https://github.com/prusa3d/Arduino_Boards/blob/master/IDE_Board_Manager/prusa3dboards-1.0.1.md" + }, + "boards": [ + { + "name": "Original Prusa i3 MK3 Multi Material 2.0 upgrade" + } + ], + "toolsDependencies": [] + }, { "name": "Prusa Research AVR MMU Boards", "architecture": "avr", @@ -19,7 +60,7 @@ "checksum": "SHA-256:df1061544109119ffaa2ea3fa9820aa6469f288213661e23405b7f190fd71b12", "size": "32792", "help": { - "online": "https://learn.sparkfun.com/tutorials/installing-arduino-ide/board-add-ons-with-arduino-board-manager" + "online": "https://github.com/prusa3d/Arduino_Boards/blob/master/IDE_Board_Manager/prusa3dboards-1.0.0.md" }, "boards": [ { @@ -32,7 +73,7 @@ "tools":[] }, { - "name": "PrusaResearchRambo", + "name": "PrusaResearchEinsyRAMBo", "maintainer": "Prusa Research", "websiteURL": "https://www.prusa3d.com/", "email": "info@prusa3d.com", @@ -41,7 +82,7 @@ }, "platforms": [ { - "name": "Prusa Research AVR MK3 Einsy RAMBo", + "name": "Prusa Research AVR MK3/MK3S Einsy RAMBo", "architecture": "avr", "version": "1.0.1", "category": "Contributed", @@ -50,7 +91,7 @@ "checksum": "SHA-256:68996c5de9e29603bdff3d8b7aba115f30e37383e7a3e9b89921799574d1cb31", "size": "53425", "help": { - "online": "https://learn.sparkfun.com/tutorials/installing-arduino-ide/board-add-ons-with-arduino-board-manager" + "online": "https://github.com/prusa3d/Arduino_Boards/blob/master/IDE_Board_Manager/prusa3dboards-1.0.1.md" }, "boards": [ { @@ -69,6 +110,25 @@ "version": "6.3.0-arduino9" } ] + }, + { + "name": "Prusa Research AVR MK3 RAMBo EINSy", + "architecture": "avr", + "version": "1.0.0", + "category": "Contributed", + "url": "https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3drambo-1.0.0.tar.bz2", + "archiveFileName": "prusa3drambo-1.0.0.tar.bz2", + "checksum": "SHA-256:73ec40b02ae2a13c6016057e3ba49731b8ccab71b5ed7c913f6d698819f24838", + "size": "53396", + "help": { + "online": "https://github.com/prusa3d/Arduino_Boards/blob/master/IDE_Board_Manager/prusa3dboards-1.0.1.md" + }, + "boards": [ + { + "name": "Original Prusa i3 MK3/MK3S EINSY RAMBo" + } + ], + "toolsDependencies": [] } ], "tools":[] diff --git a/IDE_Board_Manager/prusa3dboards-1.0.0.md b/IDE_Board_Manager/prusa3dboards-1.0.0.md new file mode 100644 index 0000000..88b0617 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards-1.0.0.md @@ -0,0 +1,24 @@ +# Prusa Research Boards definition version 1.0.0 + +## Boards supported +- [Prusa MM control board](https://github.com/prusa3d/MM-control-2.0) + - including bootloader + + +Folder Structure: + + . + ├── IDE_Boards_Manager + │ └── ... + └── ... + +Files: + + . + ├── IDE_Boards_Manager + │ ├── package_prusa3d_index.json + │ ├── prusa3dboards-.tar.bz2 actual used pacakges for Ardunio IDE Boards Manager + │ └── ... + ├── LICENSE + ├── README.md + └── ... diff --git a/IDE_Board_Manager/prusa3dboards-1.0.1.md b/IDE_Board_Manager/prusa3dboards-1.0.1.md new file mode 100644 index 0000000..4a33142 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards-1.0.1.md @@ -0,0 +1,39 @@ +# Prusa Research Boards definition version 1.0.1 + +## Boards supported +- [Prusa MM control board](https://github.com/prusa3d/MM-control-2.0) using prusa3dboards-1.0.0.tar.bz2 + - including bootloader +- [Einsy board](https://reprap.org/wiki/EinsyRambo) using prusa3drambo-1.0.1.tar.bz2 +- [miniRAMbo](https://reprap.org/wiki/MiniRambo) using prusa3drambo-1.0.1.tar.bz2 + +## Specials/Limits +- Restricted to use avr-gcc version `4.9.2-atmel3.5.4-arduino2` +- Restricted to use avrdude version `6.3.0-arduino9` + +Folder Structure: + + . + ├── IDE_Boards_Manager + │ ├── prusa3drambo-1.0.1 + │ ├── cores + │ └── rambo + │ ├── variants + │ └── rambo + │ └── ... + └── ... + +Files: + + . + ├── IDE_Boards_Manager + │ ├── prusa3drambo-1.0.1 Please don't change that folder name when you update your Github and post a PR. + │ ├── boards.txt contains definitions for the boards (board name, parameters for building and uploading sketches, etc.). + │ ├── platform.txt contains definitions for the CPU architecture used (compiler, build process parameters, tools used for upload, etc.). + │ ├── avrdude.conf + │ └── ... + │ ├── package_prusa3d_index.json + │ ├── prusa3dboards-.tar.bz2 actual used pacakges for Ardunio IDE Boards Manager + │ └── ... + ├── LICENSE + ├── README.md + └── ... diff --git a/IDE_Board_Manager/prusa3dboards-1.0.1.tar.bz2 b/IDE_Board_Manager/prusa3dboards-1.0.1.tar.bz2 new file mode 100644 index 0000000..d0d7260 Binary files /dev/null and b/IDE_Board_Manager/prusa3dboards-1.0.1.tar.bz2 differ diff --git a/IDE_Board_Manager/prusa3dboards-1.0.2.md b/IDE_Board_Manager/prusa3dboards-1.0.2.md new file mode 100644 index 0000000..5c2f79b --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards-1.0.2.md @@ -0,0 +1,117 @@ +# Prusa Research Boards definition version 1.0.2 + +## Boards supported +- [Prusa MM control board](https://github.com/prusa3d/MM-control-2.0) using prusa3dboards-1.0.2.tar.bz2 + - including bootloader +- Einsy/miniRAMBo boards using prusa3dboards-1.0.2.tar.bz2 + - including bootloader + - [Einsys](https://reprap.org/wiki/EinsyRambo) + - [miniRAMbo](https://reprap.org/wiki/MiniRambo) +## Specials/Limits +- Restricted cores version for the Einsy/miniRAMBo boards + +Folder Structure: + + . + └── prusa3dboards + ├── bootloaders + │   ├── prusa_einsy_rambo + │   └── prusa_mm_control + ├── cores + │   └── prusa_einsy_rambo + ├── patches + ├── tools + └── variants + ├── prusa_einsy_rambo + └── prusa_mm_control + +File Structure: + + . + ├── Prepare-new-version.sh + ├── package_prusa3d_index.json + ├── prusa3dboards + │   ├── avrdude.conf + │   ├── avrdude.md + │   ├── boards.txt + │   ├── bootloaders + │   │   ├── prusa_einsy_rambo + │   │   │   ├── License.txt + │   │   │   ├── Makefile + │   │   │   ├── avr_cpunames.h + │   │   │   ├── avrinterruptnames.h + │   │   │   ├── command.h + │   │   │   ├── lcd.c + │   │   │   ├── lcd.h + │   │   │   ├── settings.h + │   │   │   ├── stk500boot.c + │   │   │   ├── stk500boot.h + │   │   │   ├── stk500boot.hex + │   │   │   └── stk500boot_v2_mega2560.hex + │   │   └── prusa_mm_control + │   │   ├── Caterina-prusa_mm_control.hex + │   │   ├── Readme.txt + │   │   ├── build.txt + │   │   └── program.txt + │   ├── cores + │   │   └── prusa_einsy_rambo + │   │   ├── Arduino.h + │   │   ├── CDC.cpp + │   │   ├── Client.h + │   │   ├── HardwareSerial.cpp + │   │   ├── HardwareSerial.h + │   │   ├── HardwareSerial0.cpp + │   │   ├── HardwareSerial1.cpp + │   │   ├── HardwareSerial2.cpp + │   │   ├── HardwareSerial3.cpp + │   │   ├── HardwareSerial_private.h + │   │   ├── IPAddress.cpp + │   │   ├── IPAddress.h + │   │   ├── PluggableUSB.cpp + │   │   ├── PluggableUSB.h + │   │   ├── Print.cpp + │   │   ├── Print.h + │   │   ├── Printable.h + │   │   ├── Server.h + │   │   ├── Stream.cpp + │   │   ├── Stream.h + │   │   ├── Tone.cpp + │   │   ├── USBAPI.h + │   │   ├── USBCore.cpp + │   │   ├── USBCore.h + │   │   ├── USBDesc.h + │   │   ├── Udp.h + │   │   ├── WCharacter.h + │   │   ├── WInterrupts.c + │   │   ├── WMath.cpp + │   │   ├── WString.cpp + │   │   ├── WString.h + │   │   ├── abi.cpp + │   │   ├── binary.h + │   │   ├── hooks.c + │   │   ├── main.cpp + │   │   ├── new.cpp + │   │   ├── new.h + │   │   ├── wiring.c + │   │   ├── wiring_analog.c + │   │   ├── wiring_digital.c + │   │   ├── wiring_private.h + │   │   ├── wiring_pulse.S + │   │   ├── wiring_pulse.c + │   │   └── wiring_shift.c + │   ├── patches + │   ├── platform.txt + │   ├── tools + │   └── variants + │   ├── prusa_einsy_rambo + │   │   └── pins_arduino.h + │   └── prusa_mm_control + │   └── pins_arduino.h + ├── prusa3dboards-1.0.0.md + ├── prusa3dboards-1.0.0.tar.bz2 + ├── prusa3dboards-1.0.1.md + ├── prusa3dboards-1.0.1.tar.bz2 + ├── prusa3dboards-1.0.2.tar.bz2 + ├── prusa3dboards.version + ├── prusa3drambo-1.0.0.tar.bz2 + └── prusa3drambo-1.0.1.tar.bz2 \ No newline at end of file diff --git a/IDE_Board_Manager/prusa3dboards-1.0.2.tar.bz2 b/IDE_Board_Manager/prusa3dboards-1.0.2.tar.bz2 new file mode 100644 index 0000000..eb24277 Binary files /dev/null and b/IDE_Board_Manager/prusa3dboards-1.0.2.tar.bz2 differ diff --git a/IDE_Board_Manager/prusa3dboards.version b/IDE_Board_Manager/prusa3dboards.version new file mode 100644 index 0000000..521fbad --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards.version @@ -0,0 +1,3 @@ +1.0.2 # With bootloader and compiler.c.elf.extra_flags for Prusa Einsy/RAMBo Prusa Frimware +1.0.1 # Added Einsy/miniRAMBo boards +1.0.0 # Original Prusa i3 MK3 Multi Material 2.0 upgrade diff --git a/IDE_Board_Manager/prusa3dboards/avrdude.conf b/IDE_Board_Manager/prusa3dboards/avrdude.conf new file mode 100644 index 0000000..861c4fb --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/avrdude.conf @@ -0,0 +1,424 @@ + +# +# This is a basic minimal config file embedded into the avrdude-slic3r binary +# so that it can work in a standalone manner. +# +# Only the bits useful for Prusa3D devices were copied over from avrdude.conf +# If needed, more configuration can still be loaded into avrdude-slic3r +# via the -C command-line option. +# + + +programmer + id = "wiring"; + desc = "Wiring"; + type = "wiring"; + connection_type = serial; +; + +programmer + id = "arduino"; + desc = "Arduino"; + type = "arduino"; + connection_type = serial; +; + +programmer + id = "avr109"; + desc = "Atmel AppNote AVR109 Boot Loader"; + type = "butterfly"; + connection_type = serial; +; + + +#------------------------------------------------------------ +# ATmega2560 +#------------------------------------------------------------ + +part + id = "m2560"; + desc = "ATmega2560"; + signature = 0x1e 0x98 0x01; + has_jtag = yes; + stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 4; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 262144; + page_size = 256; + num_pages = 1024; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + load_ext_addr = " 0 1 0 0 1 1 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 a16", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + + + +#------------------------------------------------------------ +# ATmega32u4 +#------------------------------------------------------------ + +part + id = "m32u4"; + desc = "ATmega32U4"; + signature = 0x1e 0x95 0x87; + usbpid = 0x2ff4; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + diff --git a/IDE_Board_Manager/prusa3dboards/avrdude.md b/IDE_Board_Manager/prusa3dboards/avrdude.md new file mode 100644 index 0000000..d2dff75 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/avrdude.md @@ -0,0 +1 @@ +The [avrdude.conf](https://github.com/prusa3d/PrusaSlicer/tree/master/src/avrdude) is a copy of the PrusaSlicer github repository diff --git a/IDE_Board_Manager/prusa3dboards/boards.txt b/IDE_Board_Manager/prusa3dboards/boards.txt new file mode 100644 index 0000000..4c86a72 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/boards.txt @@ -0,0 +1,73 @@ +# Prusa Research Board Contribution Configuration +# +# For more information see: +# * https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification +# * https://github.com/arduino/Arduino/wiki/Arduino-Hardware-Cores-migration-guide-from-1.0-to-1.6 +# + +menu.cpu=Processor + +################################################################################ +############################### Prusa MM control ############################### +################################################################################ + +prusa_mm_control.name=Original Prusa i3 MK3 Multi Material 2.0 upgrade +prusa_mm_control.vid.0=0x2c99 +prusa_mm_control.pid.0=0x0004 +prusa_mm_control.vid.1=0x2c99 +prusa_mm_control.pid.1=0x0003 + +prusa_mm_control.upload.tool=avrdude +prusa_mm_control.upload.protocol=avr109 +prusa_mm_control.upload.maximum_size=28672 +prusa_mm_control.upload.maximum_data_size=2560 +prusa_mm_control.upload.speed=57600 +prusa_mm_control.upload.disable_flushing=true +prusa_mm_control.upload.use_1200bps_touch=true +prusa_mm_control.upload.wait_for_upload_port=true + +prusa_mm_control.bootloader.tool=avrdude +prusa_mm_control.bootloader.low_fuses=0xff +prusa_mm_control.bootloader.high_fuses=0xd8 +prusa_mm_control.bootloader.extended_fuses=0xcb +prusa_mm_control.bootloader.file=prusa_mm_control/Caterina-prusa_mm_control.hex +prusa_mm_control.bootloader.unlock_bits=0x3F +prusa_mm_control.bootloader.lock_bits=0x2F + +prusa_mm_control.build.mcu=atmega32u4 +prusa_mm_control.build.f_cpu=16000000L +prusa_mm_control.build.vid=0x2c99 +prusa_mm_control.build.pid=0x0004 +prusa_mm_control.build.usb_product="Original Prusa i3 MK3 Multi Material 2.0 upgrade" +prusa_mm_control.build.board=AVR_prusa_mm_control +prusa_mm_control.build.core=arduino:arduino +prusa_mm_control.build.variant=prusa_mm_control +prusa_mm_control.build.extra_flags={build.usb_flags} + +######################################## +########## Prusa Einsy RAMBo ########### +######################################## +prusa_einsy_rambo.name=PrusaResearch Einsy RAMBo +prusa_einsy_rambo.vid.0=0x27b1 +prusa_einsy_rambo.pid.0=0x0001 + +prusa_einsy_rambo.upload.tool=avrdude +prusa_einsy_rambo.upload.protocol=wiring +prusa_einsy_rambo.upload.maximum_size=253952 +prusa_einsy_rambo.upload.speed=115200 + +prusa_einsy_rambo.bootloader.tool=avrdude +prusa_einsy_rambo.bootloader.low_fuses=0xFF +prusa_einsy_rambo.bootloader.high_fuses=0xD8 +prusa_einsy_rambo.bootloader.extended_fuses=0xFD +prusa_einsy_rambo.bootloader.path=prusa_einsy_rambo +prusa_einsy_rambo.bootloader.file=prusa_einsy_rambo/stk500boot_v2_mega2560.hex +prusa_einsy_rambo.bootloader.unlock_bits=0x3F +prusa_einsy_rambo.bootloader.lock_bits=0x0F + +prusa_einsy_rambo.build.mcu=atmega2560 +prusa_einsy_rambo.build.f_cpu=16000000L +prusa_einsy_rambo.build.board=AVR_PRUSA_EINSY_RAMBO +prusa_einsy_rambo.build.core=prusa_einsy_rambo +prusa_einsy_rambo.build.variant=prusa_einsy_rambo +prusa_einsy_rambo.compiler.c.elf.extra_flags=-Wl,-u,vfprintf -lprintf_flt -lm \ No newline at end of file diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/License.txt b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/License.txt new file mode 100644 index 0000000..a66eb90 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/License.txt @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/Makefile b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/Makefile new file mode 100644 index 0000000..f8e22ae --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/Makefile @@ -0,0 +1,587 @@ +# ---------------------------------------------------------------------------- +# Makefile to compile and link stk500boot bootloader +# Author: Peter Fleury +# based on WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. +# +# Adjust F_CPU below to the clock frequency in Mhz of your AVR target +# Adjust BOOTLOADER_ADDRESS to your AVR target +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- +# = Mark Sproul msproul-at-skychariot.com + + +# MCU name +MCU = atmega2560 + + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +F_CPU = 16000000 + + +# Bootloader +# Please adjust if using a different AVR +# 0x0e00*2=0x1C00 for ATmega8 512 words Boot Size +# 0xFC00*2=0x1F800 for ATmega128 1024 words Boot Size +# 0xF800*2=0x1F000 for ATmega1280 +# 0xF000*2=0x1E000 for ATmega1280 +BOOTLOADER_ADDRESS = 3E000 + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = stk500boot + + +# List C source files here. (C dependencies are automatically generated.) +SRC = stk500boot.c lcd.c + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU)UL + + +# Place -I options here +CINCS = + + + +#---------------- Compiler Options ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) $(CINCS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-jump-tables +CFLAGS += -Wall -Wstrict-prototypes +CFLAGS += -Wa,-adhlns=$(<:.c=.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -ahlms: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) + + +#--------------- bootloader linker Options ------- +# BOOTLOADER_ADDRESS (=Start of Boot Loader section +# in bytes - not words) is defined above. +#LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) -nostartfiles -nodefaultlibs +#LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) -nostartfiles +LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware: alf avr910 avrisp bascom bsd +# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 +# +# Type: avrdude -c ? +# to get a full listing. +# +AVRDUDE_PROGRAMMER = stk500v2 + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = com1 # programmer connected to serial device + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: + + + + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + +############################################################ +# May 25, 2010 Adding 1280 support +#mega1280: MCU = atmega1280 +#mega1280: F_CPU = 16000000 +#mega1280: BOOTLOADER_ADDRESS = 1E000 +#mega1280: CFLAGS += -D_MEGA_BOARD_ +#mega1280: begin gccversion sizebefore build sizeafter end +# mv $(TARGET).hex stk500boot_v2_mega1280.hex + + +############################################################ +# Jul 6, 2010 Adding 2560 support +mega2560: MCU = atmega2560 +mega2560: F_CPU = 16000000 +mega2560: BOOTLOADER_ADDRESS = 3E000 +mega2560: CFLAGS += -D_MEGA_BOARD_ +mega2560: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_mega2560.hex + + +############################################################ +#Initial config on Amber128 board +# avrdude: Device signature = 0x1e9702 +# avrdude: safemode: lfuse reads as 8F +# avrdude: safemode: hfuse reads as CB +# avrdude: safemode: efuse reads as FF +# Jul 17, 2010 Adding 128 support +############################################################ +amber128: MCU = atmega128 +#amber128: F_CPU = 16000000 +amber128: F_CPU = 14745600 +amber128: BOOTLOADER_ADDRESS = 1E000 +amber128: CFLAGS += -D_BOARD_AMBER128_ +amber128: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_amber128.hex + +############################################################ +# Aug 23, 2010 Adding atmega2561 support +m2561: MCU = atmega2561 +m2561: F_CPU = 8000000 +m2561: BOOTLOADER_ADDRESS = 3E000 +m2561: CFLAGS += -D_ANDROID_2561_ -DBAUDRATE=57600 +m2561: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_android2561.hex + + +############################################################ +# avrdude: Device signature = 0x1e9801 +# avrdude: safemode: lfuse reads as EC +# avrdude: safemode: hfuse reads as 18 +# avrdude: safemode: efuse reads as FD +# Aug 23, 2010 Adding cerebot 2560 @ 8mhz +#avrdude -P usb -c usbtiny -p m2560 -v -U flash:w:/Arduino/WiringBootV2_upd1/stk500boot_v2_cerebotplus.hex +############################################################ +cerebot: MCU = atmega2560 +cerebot: F_CPU = 8000000 +cerebot: BOOTLOADER_ADDRESS = 3E000 +cerebot: CFLAGS += -D_CEREBOTPLUS_BOARD_ -DBAUDRATE=38400 -DUART_BAUDRATE_DOUBLE_SPEED=1 +cerebot: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_cerebotplus.hex + + +############################################################ +# Aug 23, 2010 Adding atmega2561 support +penguino: MCU = atmega32 +penguino: F_CPU = 16000000 +penguino: BOOTLOADER_ADDRESS = 7800 +penguino: CFLAGS += -D_PENGUINO_ -DBAUDRATE=57600 +penguino: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_penguino.hex + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +build: elf hex eep lss sym +#build: hex eep lss sym + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --format=avr --mcu=$(MCU) $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) *.hex + $(REMOVE) *.eep + $(REMOVE) *.cof + $(REMOVE) *.elf + $(REMOVE) *.map + $(REMOVE) *.sym + $(REMOVE) *.lss + $(REMOVE) $(OBJ) + $(REMOVE) $(LST) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) .dep/* + + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ +clean clean_list program debug gdb-config + diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/avr_cpunames.h b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/avr_cpunames.h new file mode 100644 index 0000000..ad0ed9c --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/avr_cpunames.h @@ -0,0 +1,189 @@ +//************************************************************************************************** +//* +//* Atmel AVR CPU name strings +//* +//************************************************************************************************** +//* Sep 19, 2010 Started on avr_cpunames.h +//************************************************************************************************** + +//#include "avr_cpunames.h" + +//************************************************************************************************** + + +#if defined (__AVR_AT94K__) + #define _AVR_CPU_NAME_ "AT94k" +#elif defined (__AVR_AT43USB320__) +#elif defined (__AVR_AT43USB355__) +#elif defined (__AVR_AT76C711__) +#elif defined (__AVR_AT86RF401__) +#elif defined (__AVR_AT90PWM1__) +#elif defined (__AVR_AT90PWM2__) +#elif defined (__AVR_AT90PWM2B__) +#elif defined (__AVR_AT90PWM3__) +#elif defined (__AVR_AT90PWM3B__) +#elif defined (__AVR_AT90PWM216__) +#elif defined (__AVR_AT90PWM316__) +#elif defined (__AVR_ATmega32C1__) +#elif defined (__AVR_ATmega32M1__) +#elif defined (__AVR_ATmega32U4__) + #define _AVR_CPU_NAME_ "ATmega32U4" +#elif defined (__AVR_ATmega32U6__) + #define _AVR_CPU_NAME_ "ATmega32U6" +#elif defined (__AVR_ATmega128__) + #define _AVR_CPU_NAME_ "Atmega128" +#elif defined (__AVR_ATmega1280__) + #define _AVR_CPU_NAME_ "ATmega1280" +#elif defined (__AVR_ATmega1281__) + #define _AVR_CPU_NAME_ "ATmega1281" +#elif defined (__AVR_ATmega1284P__) + #define _AVR_CPU_NAME_ "ATmega1284" +#elif defined (__AVR_ATmega128RFA1__) + #define _AVR_CPU_NAME_ "ATmega128RFA1" +#elif defined (__AVR_ATmega2560__) + #define _AVR_CPU_NAME_ "ATmega2560" +#elif defined (__AVR_ATmega2561__) + #define _AVR_CPU_NAME_ "ATmega2561" +#elif defined (__AVR_AT90CAN32__) + #define _AVR_CPU_NAME_ "AT90CAN32" +#elif defined (__AVR_AT90CAN64__) + #define _AVR_CPU_NAME_ "AT90CAN64" +#elif defined (__AVR_AT90CAN128__) + #define _AVR_CPU_NAME_ "AT90CAN128" +#elif defined (__AVR_AT90USB82__) + #define _AVR_CPU_NAME_ "AT90USB82" +#elif defined (__AVR_AT90USB162__) + #define _AVR_CPU_NAME_ "AT90USB162" +#elif defined (__AVR_AT90USB646__) + #define _AVR_CPU_NAME_ "AT90USB646" +#elif defined (__AVR_AT90USB647__) + #define _AVR_CPU_NAME_ "AT90USB647" +#elif defined (__AVR_AT90USB1286__) + #define _AVR_CPU_NAME_ "AT90USB1286" +#elif defined (__AVR_AT90USB1287__) + #define _AVR_CPU_NAME_ "AT90USB1287" +#elif defined (__AVR_ATmega64__) + #define _AVR_CPU_NAME_ "ATmega64" +#elif defined (__AVR_ATmega640__) + #define _AVR_CPU_NAME_ "ATmega640" +#elif defined (__AVR_ATmega644__) + #define _AVR_CPU_NAME_ "ATmega644" +#elif defined (__AVR_ATmega644P__) + #define _AVR_CPU_NAME_ "ATmega644P" +#elif defined (__AVR_ATmega645__) + #define _AVR_CPU_NAME_ "ATmega645" +#elif defined (__AVR_ATmega6450__) + #define _AVR_CPU_NAME_ "ATmega6450" +#elif defined (__AVR_ATmega649__) + #define _AVR_CPU_NAME_ "ATmega649" +#elif defined (__AVR_ATmega6490__) + #define _AVR_CPU_NAME_ "ATmega6490" +#elif defined (__AVR_ATmega103__) + #define _AVR_CPU_NAME_ "ATmega103" +#elif defined (__AVR_ATmega32__) + #define _AVR_CPU_NAME_ "Atmega32" +#elif defined (__AVR_ATmega323__) + #define _AVR_CPU_NAME_ "ATmega323" +#elif defined (__AVR_ATmega324P__) + #define _AVR_CPU_NAME_ "ATmega324P" +#elif defined (__AVR_ATmega325__) + #define _AVR_CPU_NAME_ "ATmega325" +#elif defined (__AVR_ATmega325P__) + #define _AVR_CPU_NAME_ "ATmega325P" +#elif defined (__AVR_ATmega3250__) + #define _AVR_CPU_NAME_ "ATmega3250" +#elif defined (__AVR_ATmega3250P__) + #define _AVR_CPU_NAME_ "ATmega3250P" +#elif defined (__AVR_ATmega328P__) + #define _AVR_CPU_NAME_ "ATmega328P" +#elif defined (__AVR_ATmega329__) + #define _AVR_CPU_NAME_ "ATmega329" +#elif defined (__AVR_ATmega329P__) + #define _AVR_CPU_NAME_ "ATmega329P" +#elif defined (__AVR_ATmega3290__) + #define _AVR_CPU_NAME_ "ATmega3290" +#elif defined (__AVR_ATmega3290P__) + #define _AVR_CPU_NAME_ "ATmega3290P" +#elif defined (__AVR_ATmega32HVB__) + #define _AVR_CPU_NAME_ "ATmega32HVB" +#elif defined (__AVR_ATmega406__) + #define _AVR_CPU_NAME_ "ATmega406" +#elif defined (__AVR_ATmega16__) + #define _AVR_CPU_NAME_ "Atmega16" +#elif defined (__AVR_ATmega161__) + #define _AVR_CPU_NAME_ "ATmega161" +#elif defined (__AVR_ATmega162__) + #define _AVR_CPU_NAME_ "ATmega162" +#elif defined (__AVR_ATmega163__) + #define _AVR_CPU_NAME_ "ATmega163" +#elif defined (__AVR_ATmega164P__) + #define _AVR_CPU_NAME_ "ATmega164P" +#elif defined (__AVR_ATmega165__) + #define _AVR_CPU_NAME_ "ATmega165" +#elif defined (__AVR_ATmega165P__) + #define _AVR_CPU_NAME_ "ATmega165P" +#elif defined (__AVR_ATmega168__) + #define _AVR_CPU_NAME_ "ATmega168" +#elif defined (__AVR_ATmega168P__) + #define _AVR_CPU_NAME_ "ATmega168P" +#elif defined (__AVR_ATmega169__) + #define _AVR_CPU_NAME_ "Atmega169" +#elif defined (__AVR_ATmega169P__) + #define _AVR_CPU_NAME_ "ATmega169P" +#elif defined (__AVR_ATmega8HVA__) + #define _AVR_CPU_NAME_ "ATmega8HVA" +#elif defined (__AVR_ATmega16HVA__) + #define _AVR_CPU_NAME_ "ATmega16HVA" +#elif defined (__AVR_ATmega8__) + #define _AVR_CPU_NAME_ "ATmega8" +#elif defined (__AVR_ATmega48__) + #define _AVR_CPU_NAME_ "ATmega48" +#elif defined (__AVR_ATmega48P__) + #define _AVR_CPU_NAME_ "ATmega48P" +#elif defined (__AVR_ATmega88__) + #define _AVR_CPU_NAME_ "ATmega88" +#elif defined (__AVR_ATmega88P__) + #define _AVR_CPU_NAME_ "ATmega88P" +#elif defined (__AVR_ATmega8515__) + #define _AVR_CPU_NAME_ "ATmega8515" +#elif defined (__AVR_ATmega8535__) + #define _AVR_CPU_NAME_ "ATmega8535" +#elif defined (__AVR_AT90S8535__) +#elif defined (__AVR_AT90C8534__) +#elif defined (__AVR_AT90S8515__) +#elif defined (__AVR_AT90S4434__) +#elif defined (__AVR_AT90S4433__) +#elif defined (__AVR_AT90S4414__) +#elif defined (__AVR_ATtiny22__) +#elif defined (__AVR_ATtiny26__) +#elif defined (__AVR_AT90S2343__) +#elif defined (__AVR_AT90S2333__) +#elif defined (__AVR_AT90S2323__) +#elif defined (__AVR_AT90S2313__) +#elif defined (__AVR_ATtiny2313__) + #define _AVR_CPU_NAME_ "ATtiny2313" +#elif defined (__AVR_ATtiny13__) +#elif defined (__AVR_ATtiny13A__) +#elif defined (__AVR_ATtiny25__) +#elif defined (__AVR_ATtiny45__) +#elif defined (__AVR_ATtiny85__) +#elif defined (__AVR_ATtiny24__) +#elif defined (__AVR_ATtiny44__) +#elif defined (__AVR_ATtiny84__) +#elif defined (__AVR_ATtiny261__) +#elif defined (__AVR_ATtiny461__) +#elif defined (__AVR_ATtiny861__) +#elif defined (__AVR_ATtiny43U__) +#elif defined (__AVR_ATtiny48__) +#elif defined (__AVR_ATtiny88__) +#elif defined (__AVR_ATtiny167__) +#elif defined (__AVR_ATmega8U2__) + #define _AVR_CPU_NAME_ "ATmega8U2" +#else + #error cpu not defined +#endif + + +#if !defined (_AVR_CPU_NAME_) +// #define _AVR_CPU_NAME_ "UNKNOWN" +#endif diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/avrinterruptnames.h b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/avrinterruptnames.h new file mode 100644 index 0000000..e7e3ed9 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/avrinterruptnames.h @@ -0,0 +1,1040 @@ +//************************************************************************************************** +//* +//* interrupt vector names +//* +//* It is important to note that the vector numbers listed here +//* are the ATMEL documentation numbers. The Arduino numbers are 1 less +//* This is because the Atmel docs start numbering the interrupts at 1 +//* when it is actually vector #0 in the table. +//************************************************************************************************** +//* Jun 1, 2010 Added support for ATmega1281 +//* Jun 30, 2010 Putting in more ifdefs to conserve space +//* Jul 3, 2010 More #ifdefs to conserve space and testing on most of my boards +//* Jul 4, 2010 Started using vector defs for #ifdefs as defined in +//* Jul 13, 2010 Added support for __AVR_ATmega128__ +//* Aug 26, 2010 Added support for __AVR_ATmega2561__ +//* Sep 13, 2010 Added support for __AVR_AT90CAN32__ __AVR_AT90CAN64__ __AVR_AT90CAN128__ +//************************************************************************************************** + +//#include "avrinterruptnames.h" + +//************************************************************************************************** +//* this defines the interrupt vectors and allows us to compile ONLY those strings that are actually +//* in the target CPU. This way we do not have to keep making changes based on cpu, it will be +//* automatic even if we add a new CPU +#ifndef _AVR_IO_H_ + #include +#endif +//************************************************************************************************** + +#ifdef __MWERKS__ + #define prog_char char + #define PGM_P char * +#endif + + prog_char gAvrInt_RESET[] PROGMEM = "RESET"; +#ifdef INT0_vect + prog_char gAvrInt_INT0[] PROGMEM = "INT0"; +#endif +#ifdef INT1_vect + prog_char gAvrInt_INT1[] PROGMEM = "INT1"; +#endif +#ifdef INT2_vect + prog_char gAvrInt_INT2[] PROGMEM = "INT2"; +#endif +#ifdef INT3_vect + prog_char gAvrInt_INT3[] PROGMEM = "INT3"; +#endif +#ifdef INT4_vect + prog_char gAvrInt_INT4[] PROGMEM = "INT4"; +#endif +#ifdef INT5_vect + prog_char gAvrInt_INT5[] PROGMEM = "INT5"; +#endif +#ifdef INT6_vect + prog_char gAvrInt_INT6[] PROGMEM = "INT6"; +#endif +#ifdef INT7_vect + prog_char gAvrInt_INT7[] PROGMEM = "INT7"; +#endif +#ifdef PCINT0_vect + prog_char gAvrInt_PCINT0[] PROGMEM = "PCINT0"; +#endif +#ifdef PCINT1_vect + prog_char gAvrInt_PCINT1[] PROGMEM = "PCINT1"; +#endif +#ifdef PCINT2_vect + prog_char gAvrInt_PCINT2[] PROGMEM = "PCINT2"; +#endif +#ifdef PCINT3_vect + prog_char gAvrInt_PCINT3[] PROGMEM = "PCINT3"; +#endif +#ifdef WDT_vect + prog_char gAvrInt_WDT[] PROGMEM = "WDT"; +#endif +#ifdef TIMER0_COMP_vect + prog_char gAvrInt_TIMER0_COMP[] PROGMEM = "TIMER0 COMP"; +#endif +#ifdef TIMER0_COMPA_vect + prog_char gAvrInt_TIMER0_COMPA[] PROGMEM = "TIMER0 COMPA"; +#endif +#ifdef TIMER0_COMPB_vect + prog_char gAvrInt_TIMER0_COMPB[] PROGMEM = "TIMER0 COMPB"; +#endif +#ifdef TIMER0_OVF_vect + prog_char gAvrInt_TIMER0_OVF[] PROGMEM = "TIMER0 OVF"; +#endif +#ifdef TIMER1_CAPT_vect + prog_char gAvrInt_TIMER1_CAPT[] PROGMEM = "TIMER1 CAPT"; +#endif +#ifdef TIMER1_COMPA_vect + prog_char gAvrInt_TIMER1_COMPA[] PROGMEM = "TIMER1 COMPA"; +#endif +#ifdef TIMER1_COMPB_vect + prog_char gAvrInt_TIMER1_COMPB[] PROGMEM = "TIMER1 COMPB"; +#endif +#ifdef TIMER1_COMPC_vect + prog_char gAvrInt_TIMER1_COMPC[] PROGMEM = "TIMER1 COMPC"; +#endif +#ifdef TIMER1_OVF_vect + prog_char gAvrInt_TIMER1_OVF[] PROGMEM = "TIMER1 OVF"; +#endif +#ifdef TIMER2_COMP_vect + prog_char gAvrInt_TIMER2_COMP[] PROGMEM = "TIMER2 COMP"; +#endif +#ifdef TIMER2_COMPA_vect + prog_char gAvrInt_TIMER2_COMPA[] PROGMEM = "TIMER2 COMPA"; +#endif +#ifdef TIMER2_COMPB_vect + prog_char gAvrInt_TIMER2_COMPB[] PROGMEM = "TIMER2 COMPB"; +#endif +#ifdef TIMER2_OVF_vect + prog_char gAvrInt_TIMER2_OVF[] PROGMEM = "TIMER2 OVF"; +#endif +#ifdef TIMER3_CAPT_vect + prog_char gAvrInt_TIMER3_CAPT[] PROGMEM = "TIMER3 CAPT"; +#endif +#ifdef TIMER3_COMPA_vect + prog_char gAvrInt_TIMER3_COMPA[] PROGMEM = "TIMER3 COMPA"; +#endif +#ifdef TIMER3_COMPB_vect + prog_char gAvrInt_TIMER3_COMPB[] PROGMEM = "TIMER3 COMPB"; +#endif +#ifdef TIMER3_COMPC_vect + prog_char gAvrInt_TIMER3_COMPC[] PROGMEM = "TIMER3 COMPC"; +#endif +#ifdef TIMER3_OVF_vect + prog_char gAvrInt_TIMER3_OVF[] PROGMEM = "TIMER3 OVF"; +#endif +#ifdef TIMER4_CAPT_vect + prog_char gAvrInt_TIMER4_CAPT[] PROGMEM = "TIMER4 CAPT"; +#endif +#ifdef TIMER4_COMPA_vect + prog_char gAvrInt_TIMER4_COMPA[] PROGMEM = "TIMER4 COMPA"; +#endif +#ifdef TIMER4_COMPB_vect + prog_char gAvrInt_TIMER4_COMPB[] PROGMEM = "TIMER4 COMPB"; +#endif +#ifdef TIMER4_COMPC_vect + prog_char gAvrInt_TIMER4_COMPC[] PROGMEM = "TIMER4 COMPC"; +#endif +#ifdef TIMER4_COMPD_vect + prog_char gAvrInt_TIMER4_COMPD[] PROGMEM = "TIMER4 COMPD"; +#endif +#ifdef TIMER4_OVF_vect + prog_char gAvrInt_TIMER4_OVF[] PROGMEM = "TIMER4 OVF"; +#endif +#ifdef TIMER4_FPF_vect + prog_char gAvrInt_TIMER4_FPF[] PROGMEM = "TIMER4 Fault Protection"; +#endif +#ifdef TIMER5_CAPT_vect + prog_char gAvrInt_TIMER5_CAPT[] PROGMEM = "TIMER5 CAPT"; +#endif +#ifdef TIMER5_COMPA_vect + prog_char gAvrInt_TIMER5_COMPA[] PROGMEM = "TIMER5 COMPA"; +#endif +#ifdef TIMER5_COMPB_vect + prog_char gAvrInt_TIMER5_COMPB[] PROGMEM = "TIMER5 COMPB"; +#endif +#ifdef TIMER5_COMPC_vect + prog_char gAvrInt_TIMER5_COMPC[] PROGMEM = "TIMER5 COMPC"; +#endif +#ifdef TIMER5_OVF_vect + prog_char gAvrInt_TIMER5_OVF[] PROGMEM = "TIMER5 OVF"; +#endif + +//* when there is only 1 usart +#if defined(USART_RX_vect) || defined(USART_RXC_vect) + prog_char gAvrInt_USART_RX[] PROGMEM = "USART RX"; +#endif +#if defined(USART_UDRE_vect) + prog_char gAvrInt_USART_UDRE[] PROGMEM = "USART UDRE"; +#endif +#if defined(USART_TX_vect) || defined(USART_TXC_vect) + prog_char gAvrInt_USART_TX[] PROGMEM = "USART TX"; +#endif + + +//* usart 0 +#if defined(USART0_RX_vect) + prog_char gAvrInt_USART0_RX[] PROGMEM = "USART0 RX"; +#endif +#if defined(USART0_UDRE_vect) + prog_char gAvrInt_USART0_UDRE[] PROGMEM = "USART0 UDRE"; +#endif +#if defined(USART0_TX_vect) + prog_char gAvrInt_USART0_TX[] PROGMEM = "USART0 TX"; +#endif + + +//* usart 1 +#ifdef USART1_RX_vect + prog_char gAvrInt_USART1_RX[] PROGMEM = "USART1 RX"; +#endif +#ifdef USART1_UDRE_vect + prog_char gAvrInt_USART1_UDRE[] PROGMEM = "USART1 UDRE"; +#endif +#ifdef USART1_TX_vect + prog_char gAvrInt_USART1_TX[] PROGMEM = "USART1 TX"; +#endif + +//* usart 2 +#ifdef USART2_RX_vect + prog_char gAvrInt_USART2_RX[] PROGMEM = "USART2 RX"; +#endif +#ifdef USART2_UDRE_vect + prog_char gAvrInt_USART2_UDRE[] PROGMEM = "USART2 UDRE"; +#endif +#ifdef USART2_TX_vect + prog_char gAvrInt_USART2_TX[] PROGMEM = "USART2 TX"; +#endif + +//* usart 3 +#ifdef USART3_RX_vect + prog_char gAvrInt_USART3_RX[] PROGMEM = "USART3 RX"; +#endif +#ifdef USART3_UDRE_vect + prog_char gAvrInt_USART3_UDRE[] PROGMEM = "USART3 UDRE"; +#endif +#ifdef USART3_TX_vect + prog_char gAvrInt_USART3_TX[] PROGMEM = "USART3 TX"; +#endif +#ifdef SPI_STC_vect + prog_char gAvrInt_SPI_STC[] PROGMEM = "SPI STC"; +#endif +#ifdef ADC_vect + prog_char gAvrInt_ADC[] PROGMEM = "ADC"; +#endif +#if defined(ANALOG_COMP_vect) || defined(ANA_COMP_vect) + prog_char gAvrInt_ANALOG_COMP[] PROGMEM = "ANALOG COMP"; +#endif +#if defined(EE_READY_vect) || defined(EE_RDY_vect) + prog_char gAvrInt_EE_READY[] PROGMEM = "EE READY"; +#endif +#ifdef TWI_vect + prog_char gAvrInt_TWI[] PROGMEM = "TWI"; +#endif +#if defined(SPM_READY_vect) || defined(SPM_RDY_vect) + prog_char gAvrInt_SPM_READY[] PROGMEM = "SPM READY"; +#endif +#ifdef USI_START_vect + prog_char gAvrInt_USI_START[] PROGMEM = "USI START"; +#endif +#ifdef USI_OVERFLOW_vect + prog_char gAvrInt_USI_OVERFLOW[] PROGMEM = "USI OVERFLOW"; +#endif +#ifdef USB_GEN_vect + prog_char gAvrInt_USB_General[] PROGMEM = "USB General"; +#endif +#ifdef USB_COM_vect + prog_char gAvrInt_USB_Endpoint[] PROGMEM = "USB Endpoint"; +#endif + +#ifdef LCD_vect + prog_char gAvrInt_LCD_StartFrame[] PROGMEM = "LCD Start of Frame"; +#endif + +//* these are for the chips with CAN bus support +#ifdef CANIT_vect + prog_char gAvrInt_CAN_TrafnsferCE[] PROGMEM = "CAN Transfer Complete or Error"; +#endif +#ifdef OVRIT_vect + prog_char gAvrInt_CAN_TimerOverRun[] PROGMEM = "CAN Timer Overrun"; +#endif + +//* these are for __AVR_ATmega128RFA1__ +#ifdef TRX24_PLL_LOCK_vect + prog_char gAvrInt_TRN_PLL_LOCK[] PROGMEM = "TRX24_PLL_LOCK"; +#endif +#ifdef TRX24_PLL_UNLOCK_vect + prog_char gAvrInt_TRN_PLL_UNLOCK[] PROGMEM = "TRX24_PLL_UNLOCK"; +#endif +#ifdef TRX24_RX_START_vect + prog_char gAvrInt_TRN_RX_START[] PROGMEM = "TRX24_RX_START"; +#endif +#ifdef TRX24_RX_END_vect + prog_char gAvrInt_TRN_RX_END[] PROGMEM = "TRX24_RX_END"; +#endif +#ifdef TRX24_CCA_ED_DONE_vect + prog_char gAvrInt_TRN_CAAED_DONE[] PROGMEM = "TRX24_CCA_ED_DONE"; +#endif +#ifdef TRX24_XAH_AMI_vect + prog_char gAvrInt_TRN_FRAME_MATCH[] PROGMEM = "TRX24_FRAME_ADDRESS_MATCH"; +#endif +#ifdef TRX24_TX_END_vect + prog_char gAvrInt_TRN_TX_END[] PROGMEM = "TRX24_TX_END"; +#endif +#ifdef TRX24_AWAKE_vect + prog_char gAvrInt_TRN_AWAKE[] PROGMEM = "TRX24_AWAKE"; +#endif +#ifdef SCNT_CMP1_vect + prog_char gAvrInt_SCNT_CMP1[] PROGMEM = "SCNT_CMP1"; +#endif +#ifdef SCNT_CMP2_vect + prog_char gAvrInt_SCNT_CMP2[] PROGMEM = "SCNT_CMP2"; +#endif +#ifdef SCNT_CMP3_vect + prog_char gAvrInt_SCNT_CMP3[] PROGMEM = "SCNT_CMP3"; +#endif +#ifdef SCNT_OVFL_vect + prog_char gAvrInt_SCNT_OVFL[] PROGMEM = "SCNT_OVFL"; +#endif +#ifdef SCNT_BACKOFF_vect + prog_char gAvrInt_SCNT_BACKOFF[] PROGMEM = "SCNT_BACKOFF"; +#endif +#ifdef AES_READY_vect + prog_char gAvrInt_AES_READY[] PROGMEM = "AES_READY"; +#endif +#ifdef BAT_LOW_vect + prog_char gAvrInt_BAT_LOW[] PROGMEM = "BAT_LOW"; +#endif + + + +//************************************************************************************************** +//* these do not have vector defs and have to be done by CPU type +#if defined(__AVR_ATmega645__ ) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) + prog_char gAvrInt_NOT_USED[] PROGMEM = "NOT_USED"; +#endif +#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega128RFA1__) + prog_char gAvrInt_RESERVED[] PROGMEM = "Reserved"; +#endif + + prog_char gAvrInt_END[] PROGMEM = "*"; + + + + + +//************************************************************************************************** +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) +#pragma mark __AVR_ATmega168__ / __AVR_ATmega328P__ / __AVR_ATmega328__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_PCINT0, // 4 + gAvrInt_PCINT1, // 5 + gAvrInt_PCINT2, // 6 + gAvrInt_WDT, // 7 + gAvrInt_TIMER2_COMPA, // 8 + gAvrInt_TIMER2_COMPB, // 9 + gAvrInt_TIMER2_OVF, // 10 + gAvrInt_TIMER1_CAPT, // 11 + gAvrInt_TIMER1_COMPA, // 12 + gAvrInt_TIMER1_COMPB, // 13 + gAvrInt_TIMER1_OVF, // 14 + gAvrInt_TIMER0_COMPA, // 15 + gAvrInt_TIMER0_COMPB, // 16 + gAvrInt_TIMER0_OVF, // 17 + gAvrInt_SPI_STC, // 18 + gAvrInt_USART_RX, // 19 + gAvrInt_USART_UDRE, // 20 + gAvrInt_USART_TX, // 21 + gAvrInt_ADC, // 22 + gAvrInt_EE_READY, // 23 + gAvrInt_ANALOG_COMP, // 24 + gAvrInt_TWI, // 25 + gAvrInt_SPM_READY, // 26 +}; + +#endif + +//************************************************************************************************** +#if defined(__AVR_ATmega169__) +#pragma mark __AVR_ATmega169__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_PCINT0, // 3 + gAvrInt_PCINT1, // 4 + gAvrInt_TIMER2_COMP, // 5 + gAvrInt_TIMER2_OVF, // 6 + gAvrInt_TIMER1_CAPT, // 7 + gAvrInt_TIMER1_COMPA, // 8 + gAvrInt_TIMER1_COMPB, // 9 + gAvrInt_TIMER1_OVF, // 10 + gAvrInt_TIMER0_COMP, // 11 + gAvrInt_TIMER0_OVF, // 12 + gAvrInt_SPI_STC, // 13 + gAvrInt_USART0_RX, // 14 + gAvrInt_USART0_UDRE, // 15 + gAvrInt_USART0_TX, // 16 + gAvrInt_USI_START, // 17 + gAvrInt_USI_OVERFLOW, // 18 + gAvrInt_ANALOG_COMP, // 19 + gAvrInt_ADC, // 20 + gAvrInt_EE_READY, // 21 + gAvrInt_SPM_READY, // 22 + gAvrInt_LCD_StartFrame, // 23 + +}; + +#endif + + +//************************************************************************************************** +#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) +#pragma mark __AVR_ATmega640__ __AVR_ATmega1280__ __AVR_ATmega1281__ __AVR_ATmega2560__ __AVR_ATmega2561__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_INT3, // 5 + gAvrInt_INT4, // 6 + gAvrInt_INT5, // 7 + gAvrInt_INT6, // 8 + gAvrInt_INT7, // 9 + gAvrInt_PCINT0, // 10 + gAvrInt_PCINT1, // 11 +#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + gAvrInt_PCINT2, // 12 +#else + gAvrInt_NOT_USED, // 12 +#endif + gAvrInt_WDT, // 13 + gAvrInt_TIMER2_COMPA, // 14 + gAvrInt_TIMER2_COMPB, // 15 + gAvrInt_TIMER2_OVF, // 16 + gAvrInt_TIMER1_CAPT, // 17 + gAvrInt_TIMER1_COMPA, // 18 + gAvrInt_TIMER1_COMPB, // 19 + gAvrInt_TIMER1_COMPC, // 20 + gAvrInt_TIMER1_OVF, // 21 + gAvrInt_TIMER0_COMPA, // 22 + gAvrInt_TIMER0_COMPB, // 23 + gAvrInt_TIMER0_OVF, // 24 + gAvrInt_SPI_STC, // 25 + + gAvrInt_USART0_RX, // 26 + gAvrInt_USART0_UDRE, // 27 + gAvrInt_USART0_TX, // 28 + gAvrInt_ANALOG_COMP, // 29 + gAvrInt_ADC, // 30 + gAvrInt_EE_READY, // 31 + + gAvrInt_TIMER3_CAPT, // 32 + gAvrInt_TIMER3_COMPA, // 33 + gAvrInt_TIMER3_COMPB, // 34 + gAvrInt_TIMER3_COMPC, // 35 + gAvrInt_TIMER3_OVF, // 36 + + gAvrInt_USART1_RX, // 37 + gAvrInt_USART1_UDRE, // 38 + gAvrInt_USART1_TX, // 39 + gAvrInt_TWI, // 40 + gAvrInt_SPM_READY, // 41 +#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + gAvrInt_TIMER4_CAPT, // 42 +#else + gAvrInt_NOT_USED, // 42 +#endif + gAvrInt_TIMER4_COMPA, // 43 + gAvrInt_TIMER4_COMPB, // 44 + gAvrInt_TIMER4_COMPC, // 45 + gAvrInt_TIMER4_OVF, // 46 +#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + gAvrInt_TIMER5_CAPT, // 47 +#else + gAvrInt_NOT_USED, // 47 +#endif + gAvrInt_TIMER5_COMPA, // 48 + gAvrInt_TIMER5_COMPB, // 49 + gAvrInt_TIMER5_COMPC, // 50 + gAvrInt_TIMER5_OVF, // 51 + +#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + gAvrInt_USART2_RX, // 52 + gAvrInt_USART2_UDRE, // 53 + gAvrInt_USART2_TX, // 54 + + gAvrInt_USART3_RX, // 55 + gAvrInt_USART3_UDRE, // 56 + gAvrInt_USART3_TX, // 57 +#endif + +}; + +#endif + + + +//************************************************************************************************** +#if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644__ ) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__) +#pragma mark __AVR_ATmega324P__ __AVR_ATmega644__ __AVR_ATmega644P__ __AVR_ATmega1284P__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_PCINT0, // 5 + gAvrInt_PCINT1, // 6 + gAvrInt_PCINT2, // 7 + gAvrInt_PCINT3, // 8 + gAvrInt_WDT, // 9 + gAvrInt_TIMER2_COMPA, // 10 + gAvrInt_TIMER2_COMPB, // 11 + gAvrInt_TIMER2_OVF, // 12 + gAvrInt_TIMER1_CAPT, // 13 + gAvrInt_TIMER1_COMPA, // 14 + gAvrInt_TIMER1_COMPB, // 15 + gAvrInt_TIMER1_OVF, // 16 + gAvrInt_TIMER0_COMPA, // 17 + gAvrInt_TIMER0_COMPB, // 18 + gAvrInt_TIMER0_OVF, // 19 + gAvrInt_SPI_STC, // 20 + gAvrInt_USART0_RX, // 21 + gAvrInt_USART0_UDRE, // 22 + gAvrInt_USART0_TX, // 23 + gAvrInt_ANALOG_COMP, // 24 + gAvrInt_ADC, // 25 + gAvrInt_EE_READY, // 26 + gAvrInt_TWI, // 27 + gAvrInt_SPM_READY, // 28 + +#if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644P__) + gAvrInt_USART1_RX, // 29 + gAvrInt_USART1_UDRE, // 30 + gAvrInt_USART1_TX, // 31 +#endif + +}; + + +#endif + +//************************************************************************************************** +#if defined(__AVR_ATmega1284P__ ) +#pragma mark __AVR_ATmega1284P__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_PCINT0, // 5 + gAvrInt_PCINT1, // 6 + gAvrInt_PCINT2, // 7 + gAvrInt_PCINT3, // 8 + gAvrInt_WDT, // 9 + gAvrInt_TIMER2_COMPA, // 10 + gAvrInt_TIMER2_COMPB, // 11 + gAvrInt_TIMER2_OVF, // 12 + gAvrInt_TIMER1_CAPT, // 13 + gAvrInt_TIMER1_COMPA, // 14 + gAvrInt_TIMER1_COMPB, // 15 + gAvrInt_TIMER1_OVF, // 16 + gAvrInt_TIMER0_COMPA, // 17 + gAvrInt_TIMER0_COMPB, // 18 + gAvrInt_TIMER0_OVF, // 19 + gAvrInt_SPI_STC, // 20 + gAvrInt_USART0_RX, // 21 + gAvrInt_USART0_UDRE, // 22 + gAvrInt_USART0_TX, // 23 + gAvrInt_ANALOG_COMP, // 24 + gAvrInt_ADC, // 25 + gAvrInt_EE_READY, // 26 + gAvrInt_TWI, // 27 + gAvrInt_SPM_READY, // 28 + + gAvrInt_USART1_RX, // 29 + gAvrInt_USART1_UDRE, // 30 + gAvrInt_USART1_TX, // 31 + //* these are NOT documented in doc8272.pdf + //* they are in iom1284p.h + gAvrInt_TIMER3_CAPT, // 32 + gAvrInt_TIMER3_COMPA, // 33 + gAvrInt_TIMER3_COMPB, // 34 + gAvrInt_TIMER3_OVF, // 35 + + +}; + + +#endif + + +//************************************************************************************************** +#if defined(__AVR_ATmega645__ ) +#pragma mark __AVR_ATmega645__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_PCINT0, // 3 + gAvrInt_PCINT1, // 4 + gAvrInt_TIMER2_COMP, // 5 + gAvrInt_TIMER2_OVF, // 6 + gAvrInt_TIMER1_CAPT, // 7 + gAvrInt_TIMER1_COMPA, // 8 + gAvrInt_TIMER1_COMPB, // 9 + gAvrInt_TIMER1_OVF, // 10 + gAvrInt_TIMER0_COMP, // 11 + gAvrInt_TIMER0_OVF, // 12 + gAvrInt_SPI_STC, // 13 + gAvrInt_USART0_RX, // 14 + gAvrInt_USART0_UDRE, // 15 + gAvrInt_USART0_TX, // 16 + gAvrInt_USI_START, // 17 + gAvrInt_USI_OVERFLOW, // 18 + gAvrInt_ANALOG_COMP, // 19 + gAvrInt_ADC, // 20 + gAvrInt_EE_READY, // 21 + gAvrInt_SPM_READY, // 22 + gAvrInt_NOT_USED, // 23 + +#if defined(__AVR_ATmega3250__) || defined(__AVR_ATmega6450__) + gAvrInt_PCINT2, // 24 + gAvrInt_PCINT3, // 25 +#endif +}; + + +#endif + +//************************************************************************************************** +#if defined(__AVR_ATmega16__ ) +#pragma mark __AVR_ATmega16__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_TIMER2_COMP, // 4 + gAvrInt_TIMER2_OVF, // 5 + gAvrInt_TIMER1_CAPT, // 6 + gAvrInt_TIMER1_COMPA, // 7 + gAvrInt_TIMER1_COMPB, // 8 + gAvrInt_TIMER1_OVF, // 9 + gAvrInt_TIMER0_OVF, // 10 + gAvrInt_SPI_STC, // 11 + gAvrInt_USART_RX, // 12 + gAvrInt_USART_UDRE, // 13 + gAvrInt_USART_TX, // 14 + gAvrInt_ADC, // 15 + gAvrInt_EE_READY, // 16 + gAvrInt_ANALOG_COMP, // 17 + gAvrInt_TWI, // 18 + gAvrInt_INT2, // 19 + gAvrInt_TIMER0_COMP, // 20 + gAvrInt_SPM_READY, // 21 + +}; + + +#endif + +//************************************************************************************************** +#if defined(__AVR_ATmega32__ ) +#pragma mark __AVR_ATmega32__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_TIMER2_COMP, // 5 + gAvrInt_TIMER2_OVF, // 6 + gAvrInt_TIMER1_CAPT, // 7 + gAvrInt_TIMER1_COMPA, // 8 + gAvrInt_TIMER1_COMPB, // 9 + gAvrInt_TIMER1_OVF, // 10 + gAvrInt_TIMER0_COMP, // 11 + gAvrInt_TIMER0_OVF, // 12 + gAvrInt_SPI_STC, // 13 + gAvrInt_USART_RX, // 14 + gAvrInt_USART_UDRE, // 15 + gAvrInt_USART_TX, // 16 + gAvrInt_ADC, // 17 + gAvrInt_EE_READY, // 18 + gAvrInt_ANALOG_COMP, // 19 + gAvrInt_TWI, // 20 + gAvrInt_SPM_READY, // 21 + +}; + + +#endif + +//************************************************************************************************** +#if defined(__AVR_ATmega32U4__) +#pragma mark __AVR_ATmega32U4__ +//* teensy 2.0 +//* http://www.pjrc.com/teensy/pinout.html +#define _INTERRUPT_NAMES_DEFINED_ + + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_INT3, // 5 + gAvrInt_RESERVED, // 6 + gAvrInt_RESERVED, // 7 + gAvrInt_INT6, // 8 + gAvrInt_RESERVED, // 9 + gAvrInt_PCINT0, // 10 + gAvrInt_USB_General, // 11 + gAvrInt_USB_Endpoint, // 12 + gAvrInt_WDT, // 13 + gAvrInt_RESERVED, // 14 + gAvrInt_RESERVED, // 15 + gAvrInt_RESERVED, // 16 + gAvrInt_TIMER1_CAPT, // 17 + gAvrInt_TIMER1_COMPA, // 18 + gAvrInt_TIMER1_COMPB, // 19 + gAvrInt_TIMER1_COMPC, // 20 + gAvrInt_TIMER1_OVF, // 21 + gAvrInt_TIMER0_COMPA, // 22 + gAvrInt_TIMER0_COMPB, // 23 + gAvrInt_TIMER0_OVF, // 24 + gAvrInt_SPI_STC, // 25 + + gAvrInt_USART1_RX, // 26 + gAvrInt_USART1_UDRE, // 27 + gAvrInt_USART1_TX, // 28 + gAvrInt_ANALOG_COMP, // 29 + + gAvrInt_ADC, // 30 + gAvrInt_EE_READY, // 31 + + gAvrInt_TIMER3_CAPT, // 32 + gAvrInt_TIMER3_COMPA, // 33 + gAvrInt_TIMER3_COMPB, // 34 + gAvrInt_TIMER3_COMPC, // 35 + gAvrInt_TIMER3_OVF, // 36 + gAvrInt_TWI, // 37 + gAvrInt_SPM_READY, // 38 + + gAvrInt_TIMER4_COMPA, // 39 + gAvrInt_TIMER4_COMPB, // 40 + gAvrInt_TIMER4_COMPD, // 41 + gAvrInt_TIMER4_OVF, // 42 + gAvrInt_TIMER4_FPF, // 43 +}; + +#endif + +//************************************************************************************************** +#if defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) +#pragma mark __AVR_AT90USB1286__ +//* teensy++ 2.0 +//* http://www.pjrc.com/teensy/pinout.html +#define _INTERRUPT_NAMES_DEFINED_ + + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_INT3, // 5 + gAvrInt_INT4, // 6 + gAvrInt_INT5, // 7 + gAvrInt_INT6, // 8 + gAvrInt_INT7, // 9 + gAvrInt_PCINT0, // 10 + gAvrInt_USB_General, // 11 + gAvrInt_USB_Endpoint, // 12 + gAvrInt_WDT, // 13 + gAvrInt_TIMER2_COMPA, // 14 + gAvrInt_TIMER2_COMPB, // 15 + gAvrInt_TIMER2_OVF, // 16 + gAvrInt_TIMER1_CAPT, // 17 + gAvrInt_TIMER1_COMPA, // 18 + gAvrInt_TIMER1_COMPB, // 19 + gAvrInt_TIMER1_COMPC, // 20 + gAvrInt_TIMER1_OVF, // 21 + gAvrInt_TIMER0_COMPA, // 22 + gAvrInt_TIMER0_COMPB, // 23 + gAvrInt_TIMER0_OVF, // 24 + gAvrInt_SPI_STC, // 25 + + gAvrInt_USART1_RX, // 26 + gAvrInt_USART1_UDRE, // 27 + gAvrInt_USART1_TX, // 28 + gAvrInt_ANALOG_COMP, // 29 + + gAvrInt_ADC, // 30 + gAvrInt_EE_READY, // 31 + + gAvrInt_TIMER3_CAPT, // 32 + gAvrInt_TIMER3_COMPA, // 33 + gAvrInt_TIMER3_COMPB, // 34 + gAvrInt_TIMER3_COMPC, // 35 + gAvrInt_TIMER3_OVF, // 36 + gAvrInt_TWI, // 37 + gAvrInt_SPM_READY, // 38 + +}; + +#endif + + + + +//************************************************************************************************** +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega64__) +#pragma mark __AVR_ATmega64__ __AVR_ATmega128__ +#define _INTERRUPT_NAMES_DEFINED_ + + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_INT3, // 5 + gAvrInt_INT4, // 6 + gAvrInt_INT5, // 7 + gAvrInt_INT6, // 8 + gAvrInt_INT7, // 9 + gAvrInt_TIMER2_COMP, // 10 + gAvrInt_TIMER2_OVF, // 11 + gAvrInt_TIMER1_CAPT, // 12 + gAvrInt_TIMER1_COMPA, // 13 + gAvrInt_TIMER1_COMPB, // 14 + gAvrInt_TIMER1_OVF, // 15 + gAvrInt_TIMER0_COMP, // 16 + gAvrInt_TIMER0_OVF, // 17 + gAvrInt_SPI_STC, // 18 + gAvrInt_USART0_RX, // 19 + gAvrInt_USART0_UDRE, // 20 + gAvrInt_USART0_TX, // 21 + gAvrInt_ADC, // 22 + gAvrInt_EE_READY, // 23 + gAvrInt_ANALOG_COMP, // 24 + gAvrInt_TIMER1_COMPC, // 25 + gAvrInt_TIMER3_CAPT, // 26 + gAvrInt_TIMER3_COMPA, // 27 + gAvrInt_TIMER3_COMPB, // 28 + gAvrInt_TIMER3_COMPC, // 29 + gAvrInt_TIMER3_OVF, // 30 + gAvrInt_USART1_RX, // 31 + gAvrInt_USART1_UDRE, // 32 + gAvrInt_USART1_TX, // 33 + gAvrInt_TWI, // 34 + gAvrInt_SPM_READY, // 35 + +}; + +#endif + +//************************************************************************************************** +#if defined(__AVR_AT90CAN32__) || defined(__AVR_AT90CAN64__) || defined(__AVR_AT90CAN128__) +#pragma mark __AVR_AT90CAN32__ __AVR_AT90CAN64__ __AVR_AT90CAN128__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_INT3, // 5 + gAvrInt_INT4, // 6 + gAvrInt_INT5, // 7 + gAvrInt_INT6, // 8 + gAvrInt_INT7, // 9 + gAvrInt_TIMER2_COMP, // 10 + gAvrInt_TIMER2_OVF, // 11 + gAvrInt_TIMER1_CAPT, // 12 + gAvrInt_TIMER1_COMPA, // 13 + gAvrInt_TIMER1_COMPB, // 14 + gAvrInt_TIMER1_COMPC, // 15 + gAvrInt_TIMER1_OVF, // 16 + gAvrInt_TIMER0_COMP, // 17 + gAvrInt_TIMER0_OVF, // 18 + gAvrInt_CAN_TrafnsferCE, // 19 + gAvrInt_CAN_TimerOverRun, // 20 + gAvrInt_SPI_STC, // 21 + gAvrInt_USART0_RX, // 22 + gAvrInt_USART0_UDRE, // 23 + gAvrInt_USART0_TX, // 24 + gAvrInt_ANALOG_COMP, // 25 + gAvrInt_ADC, // 26 + gAvrInt_EE_READY, // 27 + gAvrInt_TIMER3_CAPT, // 28 + gAvrInt_TIMER3_COMPA, // 29 + gAvrInt_TIMER3_COMPB, // 30 + gAvrInt_TIMER3_COMPC, // 31 + gAvrInt_TIMER3_OVF, // 32 + gAvrInt_USART1_RX, // 33 + gAvrInt_USART1_UDRE, // 34 + gAvrInt_USART1_TX, // 35 + gAvrInt_TWI, // 36 + gAvrInt_SPM_READY, // 37 +}; + +#endif + +//************************************************************************************************** +#if defined (__AVR_ATmega128RFA1__) +#pragma mark __AVR_ATmega128RFA1__ +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + //* Atmel changed the number scheme for interrupt vectors + gAvrInt_RESET, // 0 + gAvrInt_INT0, // 1 + gAvrInt_INT1, // 2 + gAvrInt_INT2, // 3 + gAvrInt_INT3, // 4 + gAvrInt_INT4, // 5 + gAvrInt_INT5, // 6 + gAvrInt_INT6, // 7 + gAvrInt_INT7, // 8 + gAvrInt_PCINT0, // 9 + gAvrInt_PCINT1, // 10 + gAvrInt_PCINT2, // 11 + gAvrInt_WDT, // 12 + gAvrInt_TIMER2_COMPA, // 13 + gAvrInt_TIMER2_COMPB, // 14 + gAvrInt_TIMER2_OVF, // 15 + gAvrInt_TIMER1_CAPT, // 16 + gAvrInt_TIMER1_COMPA, // 17 + gAvrInt_TIMER1_COMPB, // 18 + gAvrInt_TIMER1_COMPC, // 19 + gAvrInt_TIMER1_OVF, // 20 + gAvrInt_TIMER0_COMPA, // 21 + gAvrInt_TIMER0_COMPB, // 22 + gAvrInt_TIMER0_OVF, // 23 + gAvrInt_SPI_STC, // 24 + gAvrInt_USART0_RX, // 25 + gAvrInt_USART0_UDRE, // 26 + gAvrInt_USART0_TX, // 27 + gAvrInt_ANALOG_COMP, // 28 + gAvrInt_ADC, // 29 + gAvrInt_EE_READY, // 30 + gAvrInt_TIMER3_CAPT, // 31 + gAvrInt_TIMER3_COMPA, // 32 + gAvrInt_TIMER3_COMPB, // 33 + gAvrInt_TIMER3_COMPC, // 34 + gAvrInt_TIMER3_OVF, // 35 + gAvrInt_USART1_RX, // 36 + gAvrInt_USART1_UDRE, // 37 + gAvrInt_USART1_TX, // 38 + gAvrInt_TWI, // 39 + gAvrInt_SPM_READY, // 40 + gAvrInt_TIMER4_CAPT, // 41 + gAvrInt_TIMER4_COMPA, // 42 + gAvrInt_TIMER4_COMPB, // 43 + gAvrInt_TIMER4_COMPC, // 44 + gAvrInt_TIMER4_OVF, // 45 + gAvrInt_TIMER5_CAPT, // 46 + gAvrInt_TIMER5_COMPA, // 47 + gAvrInt_TIMER5_COMPB, // 48 + gAvrInt_TIMER5_COMPC, // 49 + gAvrInt_TIMER5_OVF, // 50 +#if 1 + gAvrInt_RESERVED, // 51 + gAvrInt_RESERVED, // 52 + gAvrInt_RESERVED, // 53 + + gAvrInt_RESERVED, // 54 + gAvrInt_RESERVED, // 55 + gAvrInt_RESERVED, // 56 + +#else + gAvrInt_USART2_RX, // 51 + gAvrInt_USART2_UDRE, // 52 + gAvrInt_USART2_TX, // 53 + + gAvrInt_USART3_RX, // 54 + gAvrInt_USART3_UDRE, // 55 + gAvrInt_USART3_TX, // 56 +#endif + gAvrInt_TRN_PLL_LOCK, // 57 + gAvrInt_TRN_PLL_UNLOCK, // 58 + gAvrInt_TRN_RX_START, // 59 + gAvrInt_TRN_RX_END, // 60 + gAvrInt_TRN_CAAED_DONE, // 61 + gAvrInt_TRN_FRAME_MATCH,// 62 + gAvrInt_TRN_TX_END, // 63 + gAvrInt_TRN_AWAKE, // 64 + + gAvrInt_SCNT_CMP1, // 65 + gAvrInt_SCNT_CMP2, // 66 + gAvrInt_SCNT_CMP3, // 67 + gAvrInt_SCNT_OVFL, // 68 + gAvrInt_SCNT_BACKOFF, // 69 + gAvrInt_AES_READY, // 70 + gAvrInt_BAT_LOW, // 71 + + +}; + +#endif + + +#if !defined(_INTERRUPT_NAMES_DEFINED_) + #warning No interrupt string defs for this cpu +#endif + diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/command.h b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/command.h new file mode 100644 index 0000000..8c28e26 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/command.h @@ -0,0 +1,118 @@ +//**** ATMEL AVR - A P P L I C A T I O N N O T E ************************ +//* +//* Title: AVR068 - STK500 Communication Protocol +//* Filename: command.h +//* Version: 1.0 +//* Last updated: 31.01.2005 +//* +//* Support E-mail: avr@atmel.com +//* +//************************************************************************** + +// *****************[ STK message constants ]*************************** + +#define MESSAGE_START 0x1B //= ESC = 27 decimal +#define TOKEN 0x0E + +// *****************[ STK general command constants ]************************** + +#define CMD_SIGN_ON 0x01 +#define CMD_SET_PARAMETER 0x02 +#define CMD_GET_PARAMETER 0x03 +#define CMD_SET_DEVICE_PARAMETERS 0x04 +#define CMD_OSCCAL 0x05 +#define CMD_LOAD_ADDRESS 0x06 +#define CMD_FIRMWARE_UPGRADE 0x07 + +// *****************[ STK ISP command constants ]****************************** + +#define CMD_ENTER_PROGMODE_ISP 0x10 +#define CMD_LEAVE_PROGMODE_ISP 0x11 +#define CMD_CHIP_ERASE_ISP 0x12 +#define CMD_PROGRAM_FLASH_ISP 0x13 +#define CMD_READ_FLASH_ISP 0x14 +#define CMD_PROGRAM_EEPROM_ISP 0x15 +#define CMD_READ_EEPROM_ISP 0x16 +#define CMD_PROGRAM_FUSE_ISP 0x17 +#define CMD_READ_FUSE_ISP 0x18 +#define CMD_PROGRAM_LOCK_ISP 0x19 +#define CMD_READ_LOCK_ISP 0x1A +#define CMD_READ_SIGNATURE_ISP 0x1B +#define CMD_READ_OSCCAL_ISP 0x1C +#define CMD_SPI_MULTI 0x1D + +// *****************[ STK PP command constants ]******************************* + +#define CMD_ENTER_PROGMODE_PP 0x20 +#define CMD_LEAVE_PROGMODE_PP 0x21 +#define CMD_CHIP_ERASE_PP 0x22 +#define CMD_PROGRAM_FLASH_PP 0x23 +#define CMD_READ_FLASH_PP 0x24 +#define CMD_PROGRAM_EEPROM_PP 0x25 +#define CMD_READ_EEPROM_PP 0x26 +#define CMD_PROGRAM_FUSE_PP 0x27 +#define CMD_READ_FUSE_PP 0x28 +#define CMD_PROGRAM_LOCK_PP 0x29 +#define CMD_READ_LOCK_PP 0x2A +#define CMD_READ_SIGNATURE_PP 0x2B +#define CMD_READ_OSCCAL_PP 0x2C + +#define CMD_SET_CONTROL_STACK 0x2D + +// *****************[ STK HVSP command constants ]***************************** + +#define CMD_ENTER_PROGMODE_HVSP 0x30 +#define CMD_LEAVE_PROGMODE_HVSP 0x31 +#define CMD_CHIP_ERASE_HVSP 0x32 +#define CMD_PROGRAM_FLASH_HVSP ` 0x33 +#define CMD_READ_FLASH_HVSP 0x34 +#define CMD_PROGRAM_EEPROM_HVSP 0x35 +#define CMD_READ_EEPROM_HVSP 0x36 +#define CMD_PROGRAM_FUSE_HVSP 0x37 +#define CMD_READ_FUSE_HVSP 0x38 +#define CMD_PROGRAM_LOCK_HVSP 0x39 +#define CMD_READ_LOCK_HVSP 0x3A +#define CMD_READ_SIGNATURE_HVSP 0x3B +#define CMD_READ_OSCCAL_HVSP 0x3C + +// *****************[ STK Prusa3D specific command constants ]***************** + +#define CMD_SET_UPLOAD_SIZE_PRUSA3D 0x71 + + +// *****************[ STK status constants ]*************************** + +// Success +#define STATUS_CMD_OK 0x00 + +// Warnings +#define STATUS_CMD_TOUT 0x80 +#define STATUS_RDY_BSY_TOUT 0x81 +#define STATUS_SET_PARAM_MISSING 0x82 + +// Errors +#define STATUS_CMD_FAILED 0xC0 +#define STATUS_CKSUM_ERROR 0xC1 +#define STATUS_CMD_UNKNOWN 0xC9 + +// *****************[ STK parameter constants ]*************************** +#define PARAM_BUILD_NUMBER_LOW 0x80 +#define PARAM_BUILD_NUMBER_HIGH 0x81 +#define PARAM_HW_VER 0x90 +#define PARAM_SW_MAJOR 0x91 +#define PARAM_SW_MINOR 0x92 +#define PARAM_VTARGET 0x94 +#define PARAM_VADJUST 0x95 +#define PARAM_OSC_PSCALE 0x96 +#define PARAM_OSC_CMATCH 0x97 +#define PARAM_SCK_DURATION 0x98 +#define PARAM_TOPCARD_DETECT 0x9A +#define PARAM_STATUS 0x9C +#define PARAM_DATA 0x9D +#define PARAM_RESET_POLARITY 0x9E +#define PARAM_CONTROLLER_INIT 0x9F + +// *****************[ STK answer constants ]*************************** + +#define ANSWER_CKSUM_ERROR 0xB0 + diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/lcd.c b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/lcd.c new file mode 100644 index 0000000..5e4a7d2 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/lcd.c @@ -0,0 +1,718 @@ +/***************************************************************************** +Title : HD44780 Library +Author : SA Development +Version: 1.11 +*****************************************************************************/ +#ifndef F_CPU +#define F_CPU 16000000UL +#endif +#include +#include "lcd.h" +#include +#if (USE_ADELAY_LIBRARY==1) + #include "adelay.h" +#else + #define Delay_ns(__ns) \ + if((unsigned long) (F_CPU/1000000000.0 * __ns) != F_CPU/1000000000.0 * __ns)\ + __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000000000.0 * __ns)+1);\ + else __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000000000.0 * __ns)) + #define Delay_us(__us) \ + if((unsigned long) (F_CPU/1000000.0 * __us) != F_CPU/1000000.0 * __us)\ + __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000000.0 * __us)+1);\ + else __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000000.0 * __us)) + #define Delay_ms(__ms) \ + if((unsigned long) (F_CPU/1000.0 * __ms) != F_CPU/1000.0 * __ms)\ + __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000.0 * __ms)+1);\ + else __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000.0 * __ms)) + #define Delay_s(__s) \ + if((unsigned long) (F_CPU/1.0 * __s) != F_CPU/1.0 * __s)\ + __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1.0 * __s)+1);\ + else __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1.0 * __s)) +#endif + +#if !defined(LCD_BITS) || (LCD_BITS!=4 && LCD_BITS!=8) + #error LCD_BITS is not defined or not valid. +#endif + +#if !defined(WAIT_MODE) || (WAIT_MODE!=0 && WAIT_MODE!=1) + #error WAIT_MODE is not defined or not valid. +#endif + +#if !defined(RW_LINE_IMPLEMENTED) || (RW_LINE_IMPLEMENTED!=0 && RW_LINE_IMPLEMENTED!=1) + #error RW_LINE_IMPLEMENTED is not defined or not valid. +#endif + +#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED!=1) + #error WAIT_MODE=1 requires RW_LINE_IMPLEMENTED=1. +#endif + +#if !defined(LCD_DISPLAYS) || (LCD_DISPLAYS<1) || (LCD_DISPLAYS>4) + #error LCD_DISPLAYS is not defined or not valid. +#endif + +// Constants/Macros +#define PIN(x) (*(&x - 2)) // Address of Data Direction Register of Port X +#define DDR(x) (*(&x - 1)) // Address of Input Register of Port X + +//PORT defines +#define lcd_rs_port_low() LCD_RS_PORT&=~_BV(LCD_RS_PIN) +#if RW_LINE_IMPLEMENTED==1 + #define lcd_rw_port_low() LCD_RW_PORT&=~_BV(LCD_RW_PIN) +#endif +#define lcd_db0_port_low() LCD_DB0_PORT&=~_BV(LCD_DB0_PIN) +#define lcd_db1_port_low() LCD_DB1_PORT&=~_BV(LCD_DB1_PIN) +#define lcd_db2_port_low() LCD_DB2_PORT&=~_BV(LCD_DB2_PIN) +#define lcd_db3_port_low() LCD_DB3_PORT&=~_BV(LCD_DB3_PIN) +#define lcd_db4_port_low() LCD_DB4_PORT&=~_BV(LCD_DB4_PIN) +#define lcd_db5_port_low() LCD_DB5_PORT&=~_BV(LCD_DB5_PIN) +#define lcd_db6_port_low() LCD_DB6_PORT&=~_BV(LCD_DB6_PIN) +#define lcd_db7_port_low() LCD_DB7_PORT&=~_BV(LCD_DB7_PIN) + +#define lcd_rs_port_high() LCD_RS_PORT|=_BV(LCD_RS_PIN) +#if RW_LINE_IMPLEMENTED==1 + #define lcd_rw_port_high() LCD_RW_PORT|=_BV(LCD_RW_PIN) +#endif +#define lcd_db0_port_high() LCD_DB0_PORT|=_BV(LCD_DB0_PIN) +#define lcd_db1_port_high() LCD_DB1_PORT|=_BV(LCD_DB1_PIN) +#define lcd_db2_port_high() LCD_DB2_PORT|=_BV(LCD_DB2_PIN) +#define lcd_db3_port_high() LCD_DB3_PORT|=_BV(LCD_DB3_PIN) +#define lcd_db4_port_high() LCD_DB4_PORT|=_BV(LCD_DB4_PIN) +#define lcd_db5_port_high() LCD_DB5_PORT|=_BV(LCD_DB5_PIN) +#define lcd_db6_port_high() LCD_DB6_PORT|=_BV(LCD_DB6_PIN) +#define lcd_db7_port_high() LCD_DB7_PORT|=_BV(LCD_DB7_PIN) + +#define lcd_rs_port_set(value) if (value) lcd_rs_port_high(); else lcd_rs_port_low(); +#if RW_LINE_IMPLEMENTED==1 + #define lcd_rw_port_set(value) if (value) lcd_rw_port_high(); else lcd_rw_port_low(); +#endif +#define lcd_db0_port_set(value) if (value) lcd_db0_port_high(); else lcd_db0_port_low(); +#define lcd_db1_port_set(value) if (value) lcd_db1_port_high(); else lcd_db1_port_low(); +#define lcd_db2_port_set(value) if (value) lcd_db2_port_high(); else lcd_db2_port_low(); +#define lcd_db3_port_set(value) if (value) lcd_db3_port_high(); else lcd_db3_port_low(); +#define lcd_db4_port_set(value) if (value) lcd_db4_port_high(); else lcd_db4_port_low(); +#define lcd_db5_port_set(value) if (value) lcd_db5_port_high(); else lcd_db5_port_low(); +#define lcd_db6_port_set(value) if (value) lcd_db6_port_high(); else lcd_db6_port_low(); +#define lcd_db7_port_set(value) if (value) lcd_db7_port_high(); else lcd_db7_port_low(); + +//PIN defines +#define lcd_db0_pin_get() (((PIN(LCD_DB0_PORT) & _BV(LCD_DB0_PIN))==0)?0:1) +#define lcd_db1_pin_get() (((PIN(LCD_DB1_PORT) & _BV(LCD_DB1_PIN))==0)?0:1) +#define lcd_db2_pin_get() (((PIN(LCD_DB2_PORT) & _BV(LCD_DB2_PIN))==0)?0:1) +#define lcd_db3_pin_get() (((PIN(LCD_DB3_PORT) & _BV(LCD_DB3_PIN))==0)?0:1) +#define lcd_db4_pin_get() (((PIN(LCD_DB4_PORT) & _BV(LCD_DB4_PIN))==0)?0:1) +#define lcd_db5_pin_get() (((PIN(LCD_DB5_PORT) & _BV(LCD_DB5_PIN))==0)?0:1) +#define lcd_db6_pin_get() (((PIN(LCD_DB6_PORT) & _BV(LCD_DB6_PIN))==0)?0:1) +#define lcd_db7_pin_get() (((PIN(LCD_DB7_PORT) & _BV(LCD_DB7_PIN))==0)?0:1) + +//DDR defines +#define lcd_rs_ddr_low() DDR(LCD_RS_PORT)&=~_BV(LCD_RS_PIN) +#if RW_LINE_IMPLEMENTED==1 + #define lcd_rw_ddr_low() DDR(LCD_RW_PORT)&=~_BV(LCD_RW_PIN) +#endif +#define lcd_db0_ddr_low() DDR(LCD_DB0_PORT)&=~_BV(LCD_DB0_PIN) +#define lcd_db1_ddr_low() DDR(LCD_DB1_PORT)&=~_BV(LCD_DB1_PIN) +#define lcd_db2_ddr_low() DDR(LCD_DB2_PORT)&=~_BV(LCD_DB2_PIN) +#define lcd_db3_ddr_low() DDR(LCD_DB3_PORT)&=~_BV(LCD_DB3_PIN) +#define lcd_db4_ddr_low() DDR(LCD_DB4_PORT)&=~_BV(LCD_DB4_PIN) +#define lcd_db5_ddr_low() DDR(LCD_DB5_PORT)&=~_BV(LCD_DB5_PIN) +#define lcd_db6_ddr_low() DDR(LCD_DB6_PORT)&=~_BV(LCD_DB6_PIN) +#define lcd_db7_ddr_low() DDR(LCD_DB7_PORT)&=~_BV(LCD_DB7_PIN) + +#define lcd_rs_ddr_high() DDR(LCD_RS_PORT)|=_BV(LCD_RS_PIN) +#if RW_LINE_IMPLEMENTED==1 + #define lcd_rw_ddr_high() DDR(LCD_RW_PORT)|=_BV(LCD_RW_PIN) +#endif +#define lcd_db0_ddr_high() DDR(LCD_DB0_PORT)|=_BV(LCD_DB0_PIN) +#define lcd_db1_ddr_high() DDR(LCD_DB1_PORT)|=_BV(LCD_DB1_PIN) +#define lcd_db2_ddr_high() DDR(LCD_DB2_PORT)|=_BV(LCD_DB2_PIN) +#define lcd_db3_ddr_high() DDR(LCD_DB3_PORT)|=_BV(LCD_DB3_PIN) +#define lcd_db4_ddr_high() DDR(LCD_DB4_PORT)|=_BV(LCD_DB4_PIN) +#define lcd_db5_ddr_high() DDR(LCD_DB5_PORT)|=_BV(LCD_DB5_PIN) +#define lcd_db6_ddr_high() DDR(LCD_DB6_PORT)|=_BV(LCD_DB6_PIN) +#define lcd_db7_ddr_high() DDR(LCD_DB7_PORT)|=_BV(LCD_DB7_PIN) + +#define lcd_rs_ddr_set(value) if (value) lcd_rs_ddr_high(); else lcd_rs_ddr_low(); +#if RW_LINE_IMPLEMENTED==1 + #define lcd_rw_ddr_set(value) if (value) lcd_rw_ddr_high(); else lcd_rw_ddr_low(); +#endif +#define lcd_db0_ddr_set(value) if (value) lcd_db0_ddr_high(); else lcd_db0_ddr_low(); +#define lcd_db1_ddr_set(value) if (value) lcd_db1_ddr_high(); else lcd_db1_ddr_low(); +#define lcd_db2_ddr_set(value) if (value) lcd_db2_ddr_high(); else lcd_db2_ddr_low(); +#define lcd_db3_ddr_set(value) if (value) lcd_db3_ddr_high(); else lcd_db3_ddr_low(); +#define lcd_db4_ddr_set(value) if (value) lcd_db4_ddr_high(); else lcd_db4_ddr_low(); +#define lcd_db5_ddr_set(value) if (value) lcd_db5_ddr_high(); else lcd_db5_ddr_low(); +#define lcd_db6_ddr_set(value) if (value) lcd_db6_ddr_high(); else lcd_db6_ddr_low(); +#define lcd_db7_ddr_set(value) if (value) lcd_db7_ddr_high(); else lcd_db7_ddr_low(); + +#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1) +static unsigned char PrevCmdInvolvedAddressCounter=0; +#endif + +#if (LCD_DISPLAYS>1) +static unsigned char ActiveDisplay=1; +#endif + +static inline void lcd_e_port_low() +{ + #if (LCD_DISPLAYS>1) + switch (ActiveDisplay) + { + case 2 : LCD_E2_PORT&=~_BV(LCD_E2_PIN); + break; + #if (LCD_DISPLAYS>=3) + case 3 : LCD_E3_PORT&=~_BV(LCD_E3_PIN); + break; + #endif + #if (LCD_DISPLAYS==4) + case 4 : LCD_E4_PORT&=~_BV(LCD_E4_PIN); + break; + #endif + default : + #endif + LCD_E_PORT&=~_BV(LCD_E_PIN); + #if (LCD_DISPLAYS>1) + } + #endif +} + +static inline void lcd_e_port_high() +{ + #if (LCD_DISPLAYS>1) + switch (ActiveDisplay) + { + case 2 : LCD_E2_PORT|=_BV(LCD_E2_PIN); + break; + #if (LCD_DISPLAYS>=3) + case 3 : LCD_E3_PORT|=_BV(LCD_E3_PIN); + break; + #endif + #if (LCD_DISPLAYS==4) + case 4 : LCD_E4_PORT|=_BV(LCD_E4_PIN); + break; + #endif + default : + #endif + LCD_E_PORT|=_BV(LCD_E_PIN); + #if (LCD_DISPLAYS>1) + } + #endif +} + +static inline void lcd_e_ddr_low() +{ + #if (LCD_DISPLAYS>1) + switch (ActiveDisplay) + { + case 2 : DDR(LCD_E2_PORT)&=~_BV(LCD_E2_PIN); + break; + #if (LCD_DISPLAYS>=3) + case 3 : DDR(LCD_E3_PORT)&=~_BV(LCD_E3_PIN); + break; + #endif + #if (LCD_DISPLAYS==4) + case 4 : DDR(LCD_E4_PORT)&=~_BV(LCD_E4_PIN); + break; + #endif + default : + #endif + DDR(LCD_E_PORT)&=~_BV(LCD_E_PIN); + #if (LCD_DISPLAYS>1) + } + #endif +} + +static inline void lcd_e_ddr_high() +{ + #if (LCD_DISPLAYS>1) + switch (ActiveDisplay) + { + case 2 : DDR(LCD_E2_PORT)|=_BV(LCD_E2_PIN); + break; + #if (LCD_DISPLAYS>=3) + case 3 : DDR(LCD_E3_PORT)|=_BV(LCD_E3_PIN); + break; + #endif + #if (LCD_DISPLAYS==4) + case 4 : DDR(LCD_E4_PORT)|=_BV(LCD_E4_PIN); + break; + #endif + default : + #endif + DDR(LCD_E_PORT)|=_BV(LCD_E_PIN); + #if (LCD_DISPLAYS>1) + } + #endif +} + + +/************************************************************************* +loops while lcd is busy, returns address counter +*************************************************************************/ +#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1) +static uint8_t lcd_read(uint8_t rs); + +static void lcd_waitbusy(void) + { + register uint8_t c; + unsigned int ul1=0; + + while ( ((c=lcd_read(0)) & (1<=16)?F_CPU/16384:16)) // Wait Until Busy Flag is Cleared + ul1++; + } +#endif + + +/************************************************************************* +Low-level function to read byte from LCD controller +Input: rs 1: read data + 0: read busy flag / address counter +Returns: byte read from LCD controller +*************************************************************************/ +#if RW_LINE_IMPLEMENTED==1 +static uint8_t lcd_read(uint8_t rs) + { + uint8_t data; + + #if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1) + if (rs) + lcd_waitbusy(); + if (PrevCmdInvolvedAddressCounter) + { + Delay_us(5); + PrevCmdInvolvedAddressCounter=0; + } + #endif + + if (rs) + { + lcd_rs_port_high(); // RS=1: Read Data + #if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1) + PrevCmdInvolvedAddressCounter=1; + #endif + } + else lcd_rs_port_low(); // RS=0: Read Busy Flag + + + lcd_rw_port_high(); // RW=1: Read Mode + + #if LCD_BITS==4 + lcd_db7_ddr_low(); // Configure Data Pins as Input + lcd_db6_ddr_low(); + lcd_db5_ddr_low(); + lcd_db4_ddr_low(); + + lcd_e_port_high(); // Read High Nibble First + Delay_ns(500); + + data=lcd_db4_pin_get() << 4 | lcd_db5_pin_get() << 5 | + lcd_db6_pin_get() << 6 | lcd_db7_pin_get() << 7; + + lcd_e_port_low(); + Delay_ns(500); + + lcd_e_port_high(); // Read Low Nibble + Delay_ns(500); + + data|=lcd_db4_pin_get() << 0 | lcd_db5_pin_get() << 1 | + lcd_db6_pin_get() << 2 | lcd_db7_pin_get() << 3; + + lcd_e_port_low(); + + lcd_db7_ddr_high(); // Configure Data Pins as Output + lcd_db6_ddr_high(); + lcd_db5_ddr_high(); + lcd_db4_ddr_high(); + + lcd_db7_port_high(); // Pins High (Inactive) + lcd_db6_port_high(); + lcd_db5_port_high(); + lcd_db4_port_high(); + #else //using 8-Bit-Mode + lcd_db7_ddr_low(); // Configure Data Pins as Input + lcd_db6_ddr_low(); + lcd_db5_ddr_low(); + lcd_db4_ddr_low(); + lcd_db3_ddr_low(); + lcd_db2_ddr_low(); + lcd_db1_ddr_low(); + lcd_db0_ddr_low(); + + lcd_e_port_high(); + Delay_ns(500); + + data=lcd_db7_pin_get() << 7 | lcd_db6_pin_get() << 6 | + lcd_db5_pin_get() << 5 | lcd_db4_pin_get() << 4 | + lcd_db3_pin_get() << 3 | lcd_db2_pin_get() << 2 | + lcd_db1_pin_get() << 1 | lcd_db0_pin_get(); + + lcd_e_port_low(); + + lcd_db7_ddr_high(); // Configure Data Pins as Output + lcd_db6_ddr_high(); + lcd_db5_ddr_high(); + lcd_db4_ddr_high(); + lcd_db3_ddr_high(); + lcd_db2_ddr_high(); + lcd_db1_ddr_high(); + lcd_db0_ddr_high(); + + lcd_db7_port_high(); // Pins High (Inactive) + lcd_db6_port_high(); + lcd_db5_port_high(); + lcd_db4_port_high(); + lcd_db3_port_high(); + lcd_db2_port_high(); + lcd_db1_port_high(); + lcd_db0_port_high(); + #endif + + lcd_rw_port_low(); + + #if (WAIT_MODE==0 || RW_LINE_IMPLEMENTED==0) + if (rs) + Delay_us(40); + else Delay_us(1); + #endif + return data; + } + +uint8_t lcd_getc() + { + return lcd_read(1); + } + +#endif + +/************************************************************************* +Low-level function to write byte to LCD controller +Input: data byte to write to LCD + rs 1: write data + 0: write instruction +Returns: none +*************************************************************************/ +static void lcd_write(uint8_t data,uint8_t rs) + { + #if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1) + lcd_waitbusy(); + if (PrevCmdInvolvedAddressCounter) + { + Delay_us(5); + PrevCmdInvolvedAddressCounter=0; + } + #endif + + if (rs) + { + lcd_rs_port_high(); // RS=1: Write Character + #if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1) + PrevCmdInvolvedAddressCounter=1; + #endif + } + else + { + lcd_rs_port_low(); // RS=0: Write Command + #if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1) + PrevCmdInvolvedAddressCounter=0; + #endif + } + + #if LCD_BITS==4 + lcd_db7_port_set(data&_BV(7)); //Output High Nibble + lcd_db6_port_set(data&_BV(6)); + lcd_db5_port_set(data&_BV(5)); + lcd_db4_port_set(data&_BV(4)); + + Delay_ns(100); + lcd_e_port_high(); + + Delay_ns(500); + lcd_e_port_low(); + + lcd_db7_port_set(data&_BV(3)); //Output High Nibble + lcd_db6_port_set(data&_BV(2)); + lcd_db5_port_set(data&_BV(1)); + lcd_db4_port_set(data&_BV(0)); + + Delay_ns(100); + lcd_e_port_high(); + + Delay_ns(500); + lcd_e_port_low(); + + lcd_db7_port_high(); // All Data Pins High (Inactive) + lcd_db6_port_high(); + lcd_db5_port_high(); + lcd_db4_port_high(); + + #else //using 8-Bit_Mode + lcd_db7_port_set(data&_BV(7)); //Output High Nibble + lcd_db6_port_set(data&_BV(6)); + lcd_db5_port_set(data&_BV(5)); + lcd_db4_port_set(data&_BV(4)); + lcd_db3_port_set(data&_BV(3)); //Output High Nibble + lcd_db2_port_set(data&_BV(2)); + lcd_db1_port_set(data&_BV(1)); + lcd_db0_port_set(data&_BV(0)); + + Delay_ns(100); + lcd_e_port_high(); + Delay_ns(500); + lcd_e_port_low(); + + lcd_db7_port_high(); // All Data Pins High (Inactive) + lcd_db6_port_high(); + lcd_db5_port_high(); + lcd_db4_port_high(); + lcd_db3_port_high(); + lcd_db2_port_high(); + lcd_db1_port_high(); + lcd_db0_port_high(); + #endif + + #if (WAIT_MODE==0 || RW_LINE_IMPLEMENTED==0) + if (!rs && data<=((1<1) + lcd_db7_port_high(); + #else + unsigned char c; + switch (ActiveDisplay) + { + case 1 : c=LCD_DISPLAY_LINES; break; + case 2 : c=LCD_DISPLAY2_LINES; break; + #if (LCD_DISPLAYS>=3) + case 3 : c=LCD_DISPLAY3_LINES; break; + #endif + #if (LCD_DISPLAYS==4) + case 4 : c=LCD_DISPLAY4_LINES; break; + #endif + } + if (c>1) + lcd_db7_port_high(); + #endif + + Delay_ns(100); + lcd_e_port_high(); + Delay_ns(500); + lcd_e_port_low(); + Delay_us(40); + #else + #if (LCD_DISPLAYS==1) + if (LCD_DISPLAY_LINES<2) + lcd_db3_port_low(); + #else + unsigned char c; + switch (ActiveDisplay) + { + case 1 : c=LCD_DISPLAY_LINES; break; + case 2 : c=LCD_DISPLAY2_LINES; break; + #if (LCD_DISPLAYS>=3) + case 3 : c=LCD_DISPLAY3_LINES; break; + #endif + #if (LCD_DISPLAYS==4) + case 4 : c=LCD_DISPLAY4_LINES; break; + #endif + } + if (c<2) + lcd_db3_port_low(); + #endif + + lcd_db2_port_low(); + Delay_ns(100); + lcd_e_port_high(); + Delay_ns(500); + lcd_e_port_low(); + Delay_us(40); + #endif + + //Display Off + lcd_command(_BV(LCD_DISPLAYMODE)); + + //Display Clear + lcd_clrscr(); + + //Entry Mode Set + lcd_command(_BV(LCD_ENTRY_MODE) | _BV(LCD_ENTRY_INC)); + + //Display On + lcd_command(_BV(LCD_DISPLAYMODE) | _BV(LCD_DISPLAYMODE_ON)); + } + +#if (LCD_DISPLAYS>1) +void lcd_use_display(int ADisplay) + { + if (ADisplay>=1 && ADisplay<=LCD_DISPLAYS) + ActiveDisplay=ADisplay; + } +#endif + diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/lcd.h b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/lcd.h new file mode 100644 index 0000000..bb9543a --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/lcd.h @@ -0,0 +1,65 @@ +/***************************************************************************** +Title : HD44780 Library +Author : SA Development +Version: 1.11 +*****************************************************************************/ + +#ifndef HD44780_H +#define HD44780_H + +#ifndef F_CPU +#define F_CPU 16000000UL +#endif + +#include "settings.h" +#include "inttypes.h" + +//LCD Constants for HD44780 +#define LCD_CLR 0 // DB0: clear display + +#define LCD_HOME 1 // DB1: return to home position + +#define LCD_ENTRY_MODE 2 // DB2: set entry mode +#define LCD_ENTRY_INC 1 // DB1: 1=increment, 0=decrement +#define LCD_ENTRY_SHIFT 0 // DB0: 1=display shift on + +#define LCD_DISPLAYMODE 3 // DB3: turn lcd/cursor on +#define LCD_DISPLAYMODE_ON 2 // DB2: turn display on +#define LCD_DISPLAYMODE_CURSOR 1 // DB1: turn cursor on +#define LCD_DISPLAYMODE_BLINK 0 // DB0: blinking cursor + +#define LCD_MOVE 4 // DB4: move cursor/display +#define LCD_MOVE_DISP 3 // DB3: move display (0-> cursor) +#define LCD_MOVE_RIGHT 2 // DB2: move right (0-> left) + +#define LCD_FUNCTION 5 // DB5: function set +#define LCD_FUNCTION_8BIT 4 // DB4: set 8BIT mode (0->4BIT mode) +#define LCD_FUNCTION_2LINES 3 // DB3: two lines (0->one line) +#define LCD_FUNCTION_10DOTS 2 // DB2: 5x10 font (0->5x7 font) + +#define LCD_CGRAM 6 // DB6: set CG RAM address +#define LCD_DDRAM 7 // DB7: set DD RAM address + +#define LCD_BUSY 7 // DB7: LCD is busy + + +void lcd_init(); +void lcd_command(uint8_t cmd); + +void lcd_clrscr(); +void lcd_home(); +void lcd_goto(uint8_t pos); + +#if RW_LINE_IMPLEMENTED==1 +uint8_t lcd_getc(); +#endif + +void lcd_putc(char c); +void lcd_puts(const char *s); +void lcd_puts_P(const char *progmem_s); + +#if (LCD_DISPLAYS>1) +void lcd_use_display(int ADisplay); +#endif + +#endif diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/settings.h b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/settings.h new file mode 100644 index 0000000..0ab697f --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/settings.h @@ -0,0 +1,83 @@ +#ifndef HD44780_SETTINGS_H +#define HD44780_SETTINGS_H + +//#define F_CPU 8000000 // Set Clock Frequency + +#define EINSYBOARD + +#define USE_ADELAY_LIBRARY 0 // Set to 1 to use my ADELAY library, 0 to use internal delay functions +#define LCD_BITS 4 // 4 for 4 Bit I/O Mode, 8 for 8 Bit I/O Mode +#define RW_LINE_IMPLEMENTED 0 // 0 for no RW line (RW on LCD tied to ground), 1 for RW line present +#define WAIT_MODE 0 // 0=Use Delay Method (Faster if running <10Mhz) +// 1=Use Check Busy Flag (Faster if running >10Mhz) ***Requires RW Line*** +#define DELAY_RESET 15 // in mS + +#if (LCD_BITS==8) // If using 8 bit mode, you must configure DB0-DB7 +#define LCD_DB0_PORT PORTC +#define LCD_DB0_PIN 0 +#define LCD_DB1_PORT PORTC +#define LCD_DB1_PIN 1 +#define LCD_DB2_PORT PORTC +#define LCD_DB2_PIN 2 +#define LCD_DB3_PORT PORTC +#define LCD_DB3_PIN 3 +#endif + + +#ifdef EINSYBOARD +#define LCD_DB4_PORT PORTF // If using 4 bit mode, yo umust configure DB4-DB7 +#define LCD_DB4_PIN PF5 +#else +#define LCD_DB4_PORT PORTD // If using 4 bit mode, yo umust configure DB4-DB7 +#define LCD_DB4_PIN PB2 +#endif + + + +#define LCD_DB5_PORT PORTG +#define LCD_DB5_PIN PG4 +#define LCD_DB6_PORT PORTH +#define LCD_DB6_PIN PK7 +#define LCD_DB7_PORT PORTG +#define LCD_DB7_PIN PA3 + +#define LCD_RS_PORT PORTD // Port for RS line +#define LCD_RS_PIN PK5 // Pin for RS line + +#define LCD_RW_PORT PORTC // Port for RW line (ONLY used if RW_LINE_IMPLEMENTED=1) +#define LCD_RW_PIN PC6 // Pin for RW line (ONLY used if RW_LINE_IMPLEMENTED=1) + + +#define LCD_DISPLAYS 1 // Up to 4 LCD displays can be used at one time +// All pins are shared between displays except for the E +// pin which each display will have its own + +// Display 1 Settings - if you only have 1 display, YOU MUST SET THESE +#define LCD_DISPLAY_LINES 2 // Number of Lines, Only Used for Set I/O Mode Command +#ifdef EINSYBOARD +#define LCD_E_PORT PORTF // Port for E line +#define LCD_E_PIN PF7 // Pin for E line +#else +#define LCD_E_PORT PORTD // Port for E line +#define LCD_E_PIN PD3 // Pin for E line +#endif + +#if (LCD_DISPLAYS>=2) // If you have 2 displays, set these and change LCD_DISPLAYS=2 +#define LCD_DISPLAY2_LINES 2 // Number of Lines, Only Used for Set I/O Mode Command +#define LCD_E2_PORT PORTC // Port for E line +#define LCD_E2_PIN 5 // Pin for E line +#endif + +#if (LCD_DISPLAYS>=3) // If you have 3 displays, set these and change LCD_DISPLAYS=3 +#define LCD_DISPLAY3_LINES 2 // Number of Lines, Only Used for Set I/O Mode Command +#define LCD_E3_PORT PORTC // Port for E line +#define LCD_E3_PIN 5 // Pin for E line +#endif + +#if (LCD_DISPLAYS>=4) // If you have 4 displays, set these and change LCD_DISPLAYS=4 +#define LCD_DISPLAY4_LINES 2 // Number of Lines, Only Used for Set I/O Mode Command +#define LCD_E4_PORT PORTC // Port for E line +#define LCD_E4_PIN 5 // Pin for E line +#endif + +#endif diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot.c b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot.c new file mode 100644 index 0000000..ea85564 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot.c @@ -0,0 +1,1562 @@ +/***************************************************************************** +Title: STK500v2 compatible bootloader + Modified for Wiring board ATMega128-16MHz +Author: Peter Fleury http://jump.to/fleury +Compiler: avr-gcc 3.4.5 or 4.1 / avr-libc 1.4.3 +Hardware: All AVRs with bootloader support, tested with ATmega8 +License: GNU General Public License + +Modified: Worapoht Kornkaewwattanakul http://www.avride.com +Date: 17 October 2007 +Update: 1st, 29 Dec 2007 : Enable CMD_SPI_MULTI but ignore unused command by return 0x00 byte response.. +Compiler: WINAVR20060421 +Description: add timeout feature like previous Wiring bootloader + +DESCRIPTION: + This program allows an AVR with bootloader capabilities to + read/write its own Flash/EEprom. To enter Programming mode + an input pin is checked. If this pin is pulled low, programming mode + is entered. If not, normal execution is done from $0000 + "reset" vector in Application area. + Size fits into a 1024 word bootloader section + when compiled with avr-gcc 4.1 + (direct replace on Wiring Board without fuse setting changed) + +USAGE: + - Set AVR MCU type and clock-frequency (F_CPU) in the Makefile. + - Set baud rate below (AVRISP only works with 115200 bps) + - compile/link the bootloader with the supplied Makefile + - program the "Boot Flash section size" (BOOTSZ fuses), + for boot-size 1024 words: program BOOTSZ01 + - enable the BOOT Reset Vector (program BOOTRST) + - Upload the hex file to the AVR using any ISP programmer + - Program Boot Lock Mode 3 (program BootLock 11 and BootLock 12 lock bits) // (leave them) + - Reset your AVR while keeping PROG_PIN pulled low // (for enter bootloader by switch) + - Start AVRISP Programmer (AVRStudio/Tools/Program AVR) + - AVRISP will detect the bootloader + - Program your application FLASH file and optional EEPROM file using AVRISP + +Note: + Erasing the device without flashing, through AVRISP GUI button "Erase Device" + is not implemented, due to AVRStudio limitations. + Flash is always erased before programming. + + AVRdude: + Please uncomment #define REMOVE_CMD_SPI_MULTI when using AVRdude. + Comment #define REMOVE_PROGRAM_LOCK_BIT_SUPPORT to reduce code size + Read Fuse Bits and Read/Write Lock Bits is not supported + +NOTES: + Based on Atmel Application Note AVR109 - Self-programming + Based on Atmel Application Note AVR068 - STK500v2 Protocol + +LICENSE: + Copyright (C) 2006 Peter Fleury + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + +*****************************************************************************/ + +//************************************************************************ +//* Edit History +//************************************************************************ +//* Jul 7, 2010 = Mark Sproul msproul@skycharoit.com +//* Jul 7, 2010 Working on mega2560. No Auto-restart +//* Jul 7, 2010 Switched to 8K bytes (4K words) so that we have room for the monitor +//* Jul 8, 2010 Found older version of source that had auto restart, put that code back in +//* Jul 8, 2010 Adding monitor code +//* Jul 11, 2010 Added blinking LED while waiting for download to start +//* Jul 11, 2010 Added EEPROM test +//* Jul 29, 2010 Added recchar_timeout for timing out on bootloading +//* Aug 23, 2010 Added support for atmega2561 +//* Aug 26, 2010 Removed support for BOOT_BY_SWITCH +//* Sep 8, 2010 Added support for atmega16 +//* Nov 9, 2010 Issue 392:Fixed bug that 3 !!! in code would cause it to jump to monitor +//* Jun 24, 2011 Removed analogRead (was not used) +//* Dec 29, 2011 Issue 181: added watch dog timmer support +//* Dec 29, 2011 Issue 505: bootloader is comparing the seqNum to 1 or the current sequence +//* Jan 1, 2012 Issue 543: CMD_CHIP_ERASE_ISP now returns STATUS_CMD_FAILED instead of STATUS_CMD_OK +//* Jan 1, 2012 Issue 543: Write EEPROM now does something (NOT TESTED) +//* Jan 1, 2012 Issue 544: stk500v2 bootloader doesn't support reading fuses +//************************************************************************ + +//************************************************************************ +//* these are used to test issues +//* http://code.google.com/p/arduino/issues/detail?id=505 +//* Reported by mark.stubbs, Mar 14, 2011 +//* The STK500V2 bootloader is comparing the seqNum to 1 or the current sequence +//* (IE: Requiring the sequence to be 1 or match seqNum before continuing). +//* The correct behavior is for the STK500V2 to accept the PC's sequence number, and echo it back for the reply message. +#define _FIX_ISSUE_505_ +//************************************************************************ +//* Issue 181: added watch dog timmer support +#define _FIX_ISSUE_181_ +// LCD startup screen and boot animation +#define LCD_HD44780 +#define LCD_HD44780_ANIMATION +#define LCD_HD44780_COUNTER +// Dual serial support +#define DUALSERIAL +// EINSY board +#define EINSYBOARD + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "command.h" + +#ifdef LCD_HD44780 +#include "lcd.h" +#endif + + +#ifndef EEWE + #define EEWE 1 +#endif +#ifndef EEMWE + #define EEMWE 2 +#endif + + + +/* + * Uncomment the following lines to save code space + */ +//#define REMOVE_PROGRAM_LOCK_BIT_SUPPORT // disable program lock bits +//#define REMOVE_BOOTLOADER_LED // no LED to show active bootloader +//#define REMOVE_CMD_SPI_MULTI // disable processing of SPI_MULTI commands, Remark this line for AVRDUDE +// + + + +//************************************************************************ +//* LED on pin "PROGLED_PIN" on port "PROGLED_PORT" +//* indicates that bootloader is active +//* PG2 -> LED on Wiring board +//************************************************************************ +#define BLINK_LED_WHILE_WAITING + +#ifdef _MEGA_BOARD_ + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB7 +#elif defined( _BOARD_AMBER128_ ) + //* this is for the amber 128 http://www.soc-robotics.com/ + //* onbarod led is PORTE4 + #define PROGLED_PORT PORTD + #define PROGLED_DDR DDRD + #define PROGLED_PIN PINE7 +#elif defined( _CEREBOTPLUS_BOARD_ ) || defined(_CEREBOT_II_BOARD_) + //* this is for the Cerebot 2560 board and the Cerebot-ii + //* onbarod leds are on PORTE4-7 + #define PROGLED_PORT PORTE + #define PROGLED_DDR DDRE + #define PROGLED_PIN PINE7 +#elif defined( _PENGUINO_ ) + //* this is for the Penguino + //* onbarod led is PORTE4 + #define PROGLED_PORT PORTC + #define PROGLED_DDR DDRC + #define PROGLED_PIN PINC6 +#elif defined( _ANDROID_2561_ ) || defined( __AVR_ATmega2561__ ) + //* this is for the Boston Android 2561 + //* onbarod led is PORTE4 + #define PROGLED_PORT PORTA + #define PROGLED_DDR DDRA + #define PROGLED_PIN PINA3 +#elif defined( _BOARD_MEGA16 ) + //* onbarod led is PORTA7 + #define PROGLED_PORT PORTA + #define PROGLED_DDR DDRA + #define PROGLED_PIN PINA7 + #define UART_BAUDRATE_DOUBLE_SPEED 0 + +#elif defined( _BOARD_BAHBOT_ ) + //* dosent have an onboard LED but this is what will probably be added to this port + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB0 + +#elif defined( _BOARD_ROBOTX_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB6 +#elif defined( _BOARD_CUSTOM1284_BLINK_B0_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB0 +#elif defined( _BOARD_CUSTOM1284_ ) + #define PROGLED_PORT PORTD + #define PROGLED_DDR DDRD + #define PROGLED_PIN PIND5 +#elif defined( _AVRLIP_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB5 +#elif defined( _BOARD_STK500_ ) + #define PROGLED_PORT PORTA + #define PROGLED_DDR DDRA + #define PROGLED_PIN PINA7 +#elif defined( _BOARD_STK502_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB5 +#elif defined( _BOARD_STK525_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB7 +#else + #define PROGLED_PORT PORTG + #define PROGLED_DDR DDRG + #define PROGLED_PIN PING2 +#endif + + + +/* + * define CPU frequency in Mhz here if not defined in Makefile + */ +#ifndef F_CPU + #define F_CPU 16000000UL +#endif + +#define _BLINK_LOOP_COUNT_ (F_CPU / 2250) +/* + * UART Baudrate, AVRStudio AVRISP only accepts 115200 bps + */ + +#ifndef BAUDRATE + #define BAUDRATE 115200 +#endif + +/* + * Enable (1) or disable (0) USART double speed operation + */ +#ifndef UART_BAUDRATE_DOUBLE_SPEED + #if defined (__AVR_ATmega32__) + #define UART_BAUDRATE_DOUBLE_SPEED 0 + #else + #define UART_BAUDRATE_DOUBLE_SPEED 1 + #endif +#endif + +/* + * HW and SW version, reported to AVRISP, must match version of AVRStudio + */ +#define CONFIG_PARAM_BUILD_NUMBER_LOW 0 +#define CONFIG_PARAM_BUILD_NUMBER_HIGH 0 +#define CONFIG_PARAM_HW_VER 0x0F +#define CONFIG_PARAM_SW_MAJOR 2 +#define CONFIG_PARAM_SW_MINOR 0x0A + +/* + * Calculate the address where the bootloader starts from FLASHEND and BOOTSIZE + * (adjust BOOTSIZE below and BOOTLOADER_ADDRESS in Makefile if you want to change the size of the bootloader) + */ +//#define BOOTSIZE 1024 +#if FLASHEND > 0x0F000 + #define BOOTSIZE 8192 +#else + #define BOOTSIZE 2048 +#endif + +//#define APP_END (FLASHEND -(2*BOOTSIZE) + 1) +#define APP_END (FLASHEND -(BOOTSIZE) + 1) + +/* + * Signature bytes are not available in avr-gcc io_xxx.h + */ +#if defined (__AVR_ATmega8__) + #define SIGNATURE_BYTES 0x1E9307 +#elif defined (__AVR_ATmega16__) + #define SIGNATURE_BYTES 0x1E9403 +#elif defined (__AVR_ATmega32__) + #define SIGNATURE_BYTES 0x1E9502 +#elif defined (__AVR_ATmega8515__) + #define SIGNATURE_BYTES 0x1E9306 +#elif defined (__AVR_ATmega8535__) + #define SIGNATURE_BYTES 0x1E9308 +#elif defined (__AVR_ATmega162__) + #define SIGNATURE_BYTES 0x1E9404 +#elif defined (__AVR_ATmega128__) + #define SIGNATURE_BYTES 0x1E9702 +#elif defined (__AVR_ATmega1280__) + #define SIGNATURE_BYTES 0x1E9703 +#elif defined (__AVR_ATmega2560__) + #define SIGNATURE_BYTES 0x1E9801 +#elif defined (__AVR_ATmega2561__) + #define SIGNATURE_BYTES 0x1e9802 +#elif defined (__AVR_ATmega1284P__) + #define SIGNATURE_BYTES 0x1e9705 +#elif defined (__AVR_ATmega640__) + #define SIGNATURE_BYTES 0x1e9608 +#elif defined (__AVR_ATmega64__) + #define SIGNATURE_BYTES 0x1E9602 +#elif defined (__AVR_ATmega169__) + #define SIGNATURE_BYTES 0x1e9405 +#elif defined (__AVR_AT90USB1287__) + #define SIGNATURE_BYTES 0x1e9782 +#else + #error "no signature definition for MCU available" +#endif + + +#if defined(_BOARD_ROBOTX_) || defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB1286__) + #define UART_BAUD_RATE_LOW UBRR1L + #define UART_STATUS_REG UCSR1A + #define UART_CONTROL_REG UCSR1B + #define UART_ENABLE_TRANSMITTER TXEN1 + #define UART_ENABLE_RECEIVER RXEN1 + #define UART_TRANSMIT_COMPLETE TXC1 + #define UART_RECEIVE_COMPLETE RXC1 + #define UART_DATA_REG UDR1 + #define UART_DOUBLE_SPEED U2X1 + +#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \ + || defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__) + /* ATMega8 with one USART */ + #define UART_BAUD_RATE_LOW UBRRL + #define UART_STATUS_REG UCSRA + #define UART_CONTROL_REG UCSRB + #define UART_ENABLE_TRANSMITTER TXEN + #define UART_ENABLE_RECEIVER RXEN + #define UART_TRANSMIT_COMPLETE TXC + #define UART_RECEIVE_COMPLETE RXC + #define UART_DATA_REG UDR + #define UART_DOUBLE_SPEED U2X + +#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) || defined(__AVR_ATmega162__) \ + || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) + /* ATMega with two USART, use UART0 */ + #define UART_BAUD_RATE_LOW UBRR0L + #define UART_STATUS_REG UCSR0A + #define UART_CONTROL_REG UCSR0B + #define UART_ENABLE_TRANSMITTER TXEN0 + #define UART_ENABLE_RECEIVER RXEN0 + #define UART_TRANSMIT_COMPLETE TXC0 + #define UART_RECEIVE_COMPLETE RXC0 + #define UART_DATA_REG UDR0 + #define UART_DOUBLE_SPEED U2X0 +#elif defined(UBRR0L) && defined(UCSR0A) && defined(TXEN0) + /* ATMega with two USART, use UART0 */ + #define UART_BAUD_RATE_LOW UBRR0L + #define UART_STATUS_REG UCSR0A + #define UART_CONTROL_REG UCSR0B + #define UART_ENABLE_TRANSMITTER TXEN0 + #define UART_ENABLE_RECEIVER RXEN0 + #define UART_TRANSMIT_COMPLETE TXC0 + #define UART_RECEIVE_COMPLETE RXC0 + #define UART_DATA_REG UDR0 + #define UART_DOUBLE_SPEED U2X0 +#elif defined(UBRRL) && defined(UCSRA) && defined(UCSRB) && defined(TXEN) && defined(RXEN) + //* catch all + #define UART_BAUD_RATE_LOW UBRRL + #define UART_STATUS_REG UCSRA + #define UART_CONTROL_REG UCSRB + #define UART_ENABLE_TRANSMITTER TXEN + #define UART_ENABLE_RECEIVER RXEN + #define UART_TRANSMIT_COMPLETE TXC + #define UART_RECEIVE_COMPLETE RXC + #define UART_DATA_REG UDR + #define UART_DOUBLE_SPEED U2X +#else + #error "no UART definition for MCU available" +#endif + + +/* + * Macro to calculate UBBR from XTAL and baudrate + */ +#if defined(__AVR_ATmega32__) && UART_BAUDRATE_DOUBLE_SPEED + #define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu / 4 / baudRate - 1) / 2) +#elif defined(__AVR_ATmega32__) + #define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu / 8 / baudRate - 1) / 2) +#elif UART_BAUDRATE_DOUBLE_SPEED + #define UART_BAUD_SELECT(baudRate,xtalCpu) (((float)(xtalCpu))/(((float)(baudRate))*8.0)-1.0+0.5) +#else + #define UART_BAUD_SELECT(baudRate,xtalCpu) (((float)(xtalCpu))/(((float)(baudRate))*16.0)-1.0+0.5) +#endif + +#ifdef DUALSERIAL + +// UART defines +#define UART_BAUD_RATE_LOW0 UBRR0L +#define UART_STATUS_REG0 UCSR0A +#define UART_CONTROL_REG0 UCSR0B +#define UART_ENABLE_TRANSMITTER0 TXEN0 +#define UART_ENABLE_RECEIVER0 RXEN0 +#define UART_TRANSMIT_COMPLETE0 TXC0 +#define UART_RECEIVE_COMPLETE0 RXC0 +#define UART_DATA_REG0 UDR0 +#define UART_DOUBLE_SPEED0 U2X0 + +#define UART_BAUD_RATE_LOW2 UBRR2L +#define UART_STATUS_REG2 UCSR2A +#define UART_CONTROL_REG2 UCSR2B +#define UART_ENABLE_TRANSMITTER2 TXEN2 +#define UART_ENABLE_RECEIVER2 RXEN2 +#define UART_TRANSMIT_COMPLETE2 TXC2 +#define UART_RECEIVE_COMPLETE2 RXC2 +#define UART_DATA_REG2 UDR2 +#define UART_DOUBLE_SPEED2 U2X2 + +#endif //DUALSERIAL + + +#define UART_BAUD_SELECT(baudRate,xtalCpu) (((float)(xtalCpu))/(((float)(baudRate))*8.0)-1.0+0.5) + +/* + * States used in the receive state machine + */ +#define ST_START 0 +#define ST_GET_SEQ_NUM 1 +#define ST_MSG_SIZE_1 2 +#define ST_MSG_SIZE_2 3 +#define ST_GET_TOKEN 4 +#define ST_GET_DATA 5 +#define ST_GET_CHECK 6 +#define ST_PROCESS 7 + +/* + * use 16bit address variable for ATmegas with <= 64K flash + */ +#if defined(RAMPZ) + typedef uint32_t address_t; +#else + typedef uint16_t address_t; +#endif + +/* + * function prototypes + */ +static void sendchar(char c); +//static unsigned char recchar(void); + +#ifdef DUALSERIAL +int selectedSerial; +#endif //DUALSERIAL + +/* + * since this bootloader is not linked against the avr-gcc crt1 functions, + * to reduce the code size, we need to provide our own initialization + */ +void __jumpMain (void) __attribute__ ((naked)) __attribute__ ((section (".init9"))); +#include + +//#define SPH_REG 0x3E +//#define SPL_REG 0x3D + +#define STACK_TOP (RAMEND - 16) + +//***************************************************************************** +void __jumpMain(void) +{ +//* July 17, 2010 Added stack pointer initialzation +//* the first line did not do the job on the ATmega128 + + asm volatile ( ".set __stack, %0" :: "i" (STACK_TOP) ); + +//* set stack pointer to top of RAM + + asm volatile ( "ldi 16, %0" :: "i" (STACK_TOP >> 8) ); + asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_HI_ADDR) ); + + asm volatile ( "ldi 16, %0" :: "i" (STACK_TOP & 0x0ff) ); + asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_LO_ADDR) ); + + asm volatile ( "clr __zero_reg__" ); // GCC depends on register r1 set to 0 + asm volatile ( "out %0, __zero_reg__" :: "I" (_SFR_IO_ADDR(SREG)) ); // set SREG to 0 + asm volatile ( "jmp main"); // jump to main() +} + + +//***************************************************************************** +void delay_ms(unsigned int timedelay) +{ + unsigned int i; + for (i=0;i 9)?('A' + val - 10):('0' + val)); +} + +void lcd_print_hex_byte(uint8_t val) +{ + lcd_print_hex_nibble(val >> 4); + lcd_print_hex_nibble(val & 0xf); +} + +void lcd_print_hex_word(uint16_t val) +{ + lcd_print_hex_byte(val >> 8); + lcd_print_hex_byte(val & 0xff); +} + +void lcd_print_hex_dword(uint32_t val) +{ + lcd_print_hex_word(val >> 16); + lcd_print_hex_word(val & 0xffff); +} +/**/ +/* +const unsigned long ulFlashEnd = FLASHEND; +const unsigned long ulRamEnd = RAMEND; +const unsigned long ulBootSize = BOOTSIZE; +const unsigned long ulAppEnd = APP_END; +*/ +//***************************************************************************** +/* + * send single byte to USART, wait until transmission is completed + */ +static void sendchar(char c) +{ +#ifdef DUALSERIAL + if (selectedSerial == 0) + { + UART_DATA_REG0 = c; // prepare transmission + while (!(UART_STATUS_REG0 & (1 << UART_TRANSMIT_COMPLETE0))); // wait until byte sent + UART_STATUS_REG0 |= (1 << UART_TRANSMIT_COMPLETE0); // delete TXCflag + } + else if (selectedSerial == 2) + { + UART_DATA_REG2 = c; // prepare transmission + while (!(UART_STATUS_REG2 & (1 << UART_TRANSMIT_COMPLETE2))); // wait until byte sent + UART_STATUS_REG2 |= (1 << UART_TRANSMIT_COMPLETE2); // delete TXCflag + } +#else //DUALSERIAL + UART_DATA_REG = c; // prepare transmission + while (!(UART_STATUS_REG & (1 << UART_TRANSMIT_COMPLETE))); // wait until byte sent + UART_STATUS_REG |= (1 << UART_TRANSMIT_COMPLETE); // delete TXCflag +#endif //DUALSERIAL +} + + +//************************************************************************ +#ifdef DUALSERIAL +static int Serial_Available(int serial) +{ + if (serial == 0) + return (UART_STATUS_REG0 & (1 << UART_RECEIVE_COMPLETE0)); // wait for data + else if (serial == 2) + return (UART_STATUS_REG2 & (1 << UART_RECEIVE_COMPLETE2)); // wait for data + return 0; +} +#else //DUALSERIAL +static int Serial_Available(void) +{ + return (UART_STATUS_REG & (1 << UART_RECEIVE_COMPLETE)); // wait for data +} +#endif //DUALSERIAL + + +//***************************************************************************** +/* + * Read single byte from USART, block if no data available + */ +/*static unsigned char recchar(void) +{ +#ifdef DUALSERIAL + if (selectedSerial == 0) + { + while (!(UART_STATUS_REG0 & (1 << UART_RECEIVE_COMPLETE0))) { } // wait for data + return UART_DATA_REG0; + } + else if (selectedSerial == 2) + { + while (!(UART_STATUS_REG2 & (1 << UART_RECEIVE_COMPLETE2))) { } // wait for data + return UART_DATA_REG2; + } + return 0; +#else //DUALSERIAL + while (!(UART_STATUS_REG & (1 << UART_RECEIVE_COMPLETE))) { } // wait for data + return UART_DATA_REG; +#endif //DUALSERIAL +}*/ + +#define MAX_TIME_COUNT (F_CPU >> 1) +//***************************************************************************** +static unsigned char recchar_timeout(void) +{ + uint32_t count = 0; +#ifdef DUALSERIAL + while (1) + { + if ((selectedSerial == 0) && (UART_STATUS_REG0 & (1 << UART_RECEIVE_COMPLETE0))) break; + else if ((selectedSerial == 2) && (UART_STATUS_REG2 & (1 << UART_RECEIVE_COMPLETE2))) break; + count++; + if (count > MAX_TIME_COUNT) + { + unsigned int data; + #if (FLASHEND > 0x10000) + data = pgm_read_word_far(0); //* get the first word of the user program + #else + data = pgm_read_word_near(0); //* get the first word of the user program + #endif + if (data != 0xffff) //* make sure its valid before jumping to it. + { + asm volatile( + "clr r30 \n\t" + "clr r31 \n\t" + "ijmp \n\t" + ); + } + count = 0; + } + } + if (selectedSerial == 0) return UART_DATA_REG0; + else if (selectedSerial == 2) return UART_DATA_REG2; + return 0; +#else //DUALSERIAL + while (!(UART_STATUS_REG & (1 << UART_RECEIVE_COMPLETE))) + { + // wait for data + count++; + if (count > MAX_TIME_COUNT) + { + unsigned int data; + #if (FLASHEND > 0x10000) + data = pgm_read_word_far(0); //* get the first word of the user program + #else + data = pgm_read_word_near(0); //* get the first word of the user program + #endif + if (data != 0xffff) //* make sure its valid before jumping to it. + { + asm volatile( + "clr r30 \n\t" + "clr r31 \n\t" + "ijmp \n\t" + ); + } + count = 0; + } + } + return UART_DATA_REG; +#endif //DUALSERIAL +} + +#ifdef DUALSERIAL +void initUart() +{ + // init uart0 + UART_STATUS_REG0 |= (1 <> 8) ); + asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_HI_ADDR) ); + asm volatile ( "ldi 16, %0" :: "i" (RAMEND & 0x0ff) ); + asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_LO_ADDR) );*/ + +#ifdef _FIX_ISSUE_181_ + //************************************************************************ + //* Dec 29, 2011 Issue #181, added watch dog timmer support + //* handle the watch dog timer + uint8_t mcuStatusReg; + mcuStatusReg = MCUSR; + + __asm__ __volatile__ ("cli"); + __asm__ __volatile__ ("wdr"); + MCUSR = 0; + WDTCSR |= _BV(WDCE) | _BV(WDE); + WDTCSR = 0; + __asm__ __volatile__ ("sei"); + // check if WDT generated the reset, if so, go straight to app + if (mcuStatusReg & _BV(WDRF)) + { + if (boot_app_magic == 0x55aa55aa) + { +/// uint16_t tmp_boot_copy_size = boot_copy_size; +/// uint32_t tmp_boot_src_addr = boot_src_addr; + + address = boot_dst_addr; + address_t pageAddress = address; + while (boot_copy_size) + { + if (boot_app_flags & BOOT_APP_FLG_ERASE) + { + boot_page_erase(pageAddress); + boot_spm_busy_wait(); + } + pageAddress += SPM_PAGESIZE; + if ((boot_app_flags & BOOT_APP_FLG_COPY)) + { + while (boot_copy_size && (address < pageAddress)) + { + uint16_t word = 0x0000; + if (boot_app_flags & BOOT_APP_FLG_FLASH) + word = pgm_read_word_far(boot_src_addr); //from FLASH + else + word = *((uint16_t*)boot_src_addr); //from RAM + boot_page_fill(address, word); + address += 2; + boot_src_addr += 2; + if (boot_copy_size > 2) + boot_copy_size -= 2; + else + boot_copy_size = 0; + } + boot_page_write(pageAddress - SPM_PAGESIZE); + boot_spm_busy_wait(); + boot_rww_enable(); + } + else + { + address += SPM_PAGESIZE; + if (boot_copy_size > SPM_PAGESIZE) + boot_copy_size -= SPM_PAGESIZE; + else + boot_copy_size = 0; + } + } +/// boot_copy_size = tmp_boot_copy_size; +/// boot_src_addr = tmp_boot_src_addr; + + } + goto exit; +// original implementation app_start() does not work +// app_start(); + } + //************************************************************************ +#endif + + + boot_timer = 0; + boot_state = 0; + +#ifdef BLINK_LED_WHILE_WAITING +// boot_timeout = 90000; //* should be about 4 seconds +// boot_timeout = 170000; + boot_timeout = 20000; //* should be about 1 second +#else + boot_timeout = 3500000; // 7 seconds , approx 2us per step when optimize "s" +#endif + /* + * Branch to bootloader or application code ? + */ + +#ifdef DUALSERIAL + selectedSerial = 0; +#endif //DUALSERIAL + + +#ifndef REMOVE_BOOTLOADER_LED + /* PROG_PIN pulled low, indicate with LED that bootloader is active */ + PROGLED_DDR |= (1< boot_timeout) + { + boot_state = 1; // (after ++ -> boot_state=2 bootloader timeout, jump to main 0x00000 ) + } + #ifdef BLINK_LED_WHILE_WAITING + if ((boot_timer % _BLINK_LOOP_COUNT_) == 0) + { + //* toggle the LED + PROGLED_PORT ^= (1< boot_timeout) + { + boot_state = 1; // (after ++ -> boot_state=2 bootloader timeout, jump to main 0x00000 ) + } + #ifdef BLINK_LED_WHILE_WAITING + if ((boot_timer % _BLINK_LOOP_COUNT_) == 0) + { + //* toggle the LED + PROGLED_PORT ^= (1< 10) + { + animationTimer = 0; + animationFrame++; + if (animationFrame > 5) animationFrame = 0; + lcd_goto(91); + lcd_puts("| |"); + lcd_goto((animationFrame <= 3)?(92 + animationFrame):(98 - animationFrame)); + lcd_putc('*'); + } + } +#endif //LCD_HD44780_ANIMATION + +#ifdef LCD_HD44780_COUNTER + if ((flashSize != 0) && flashOperation) + { + if (flashOperation == 1) //write + { + lcd_goto(88); + lcd_puts("write "); + } + if (flashOperation == 2) //verify + { + lcd_goto(87); + lcd_puts("verify "); + } + int progress = 100 * flashCounter / flashSize; + char text[4] = " "; + for (int i = 2; i >= 0; i--) + if (progress > 0) + { + text[i] = '0' + (progress % 10); + progress /= 10; + } + else + text[i] = ' '; + lcd_puts(text); + lcd_putc('%'); + } +#endif //LCD_HD44780_COUNTER + + /* + * Now process the STK500 commands, see Atmel Appnote AVR068 + */ + + switch (msgBuffer[0]) + { + #ifndef REMOVE_CMD_SPI_MULTI + case CMD_SPI_MULTI: + { + unsigned char answerByte; + unsigned char flag=0; + + if ( msgBuffer[4]== 0x30 ) + { + unsigned char signatureIndex = msgBuffer[6]; + + if ( signatureIndex == 0 ) + { + answerByte = (SIGNATURE_BYTES >> 16) & 0x000000FF; + } + else if ( signatureIndex == 1 ) + { + answerByte = (SIGNATURE_BYTES >> 8) & 0x000000FF; + } + else + { + answerByte = SIGNATURE_BYTES & 0x000000FF; + } + } + else if ( msgBuffer[4] & 0x50 ) + { + //* Issue 544: stk500v2 bootloader doesn't support reading fuses + //* I cant find the docs that say what these are supposed to be but this was figured out by trial and error + // answerByte = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS); + // answerByte = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS); + // answerByte = boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS); + if (msgBuffer[4] == 0x50) + { + answerByte = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS); + } + else if (msgBuffer[4] == 0x58) + { + answerByte = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS); + } + else + { + answerByte = 0; + } + } + else + { + answerByte = 0; // for all others command are not implemented, return dummy value for AVRDUDE happy + } + if ( !flag ) + { + msgLength = 7; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = 0; + msgBuffer[3] = msgBuffer[4]; + msgBuffer[4] = 0; + msgBuffer[5] = answerByte; + msgBuffer[6] = STATUS_CMD_OK; + } + } + break; + #endif + case CMD_SIGN_ON: + msgLength = 11; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = 8; + msgBuffer[3] = 'A'; + msgBuffer[4] = 'V'; + msgBuffer[5] = 'R'; + msgBuffer[6] = 'I'; + msgBuffer[7] = 'S'; + msgBuffer[8] = 'P'; + msgBuffer[9] = '_'; + msgBuffer[10] = '2'; + break; + + case CMD_GET_PARAMETER: + { + unsigned char value; + + switch(msgBuffer[1]) + { + case PARAM_BUILD_NUMBER_LOW: + value = CONFIG_PARAM_BUILD_NUMBER_LOW; + break; + case PARAM_BUILD_NUMBER_HIGH: + value = CONFIG_PARAM_BUILD_NUMBER_HIGH; + break; + case PARAM_HW_VER: + value = CONFIG_PARAM_HW_VER; + break; + case PARAM_SW_MAJOR: + value = CONFIG_PARAM_SW_MAJOR; + break; + case PARAM_SW_MINOR: + value = CONFIG_PARAM_SW_MINOR; + break; + default: + value = 0; + break; + } + msgLength = 3; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = value; + } + break; + + case CMD_LEAVE_PROGMODE_ISP: + isLeave = 1; + //* fall thru + + case CMD_SET_PARAMETER: + case CMD_ENTER_PROGMODE_ISP: + msgLength = 2; + msgBuffer[1] = STATUS_CMD_OK; + break; + + case CMD_READ_SIGNATURE_ISP: + { + unsigned char signatureIndex = msgBuffer[4]; + unsigned char signature; + + if ( signatureIndex == 0 ) + signature = (SIGNATURE_BYTES >>16) & 0x000000FF; + else if ( signatureIndex == 1 ) + signature = (SIGNATURE_BYTES >> 8) & 0x000000FF; + else + signature = SIGNATURE_BYTES & 0x000000FF; + + msgLength = 4; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = signature; + msgBuffer[3] = STATUS_CMD_OK; + } + break; + + case CMD_READ_LOCK_ISP: + msgLength = 4; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = boot_lock_fuse_bits_get( GET_LOCK_BITS ); + msgBuffer[3] = STATUS_CMD_OK; + break; + + case CMD_READ_FUSE_ISP: + { + unsigned char fuseBits; + + if ( msgBuffer[2] == 0x50 ) + { + if ( msgBuffer[3] == 0x08 ) + fuseBits = boot_lock_fuse_bits_get( GET_EXTENDED_FUSE_BITS ); + else + fuseBits = boot_lock_fuse_bits_get( GET_LOW_FUSE_BITS ); + } + else + { + fuseBits = boot_lock_fuse_bits_get( GET_HIGH_FUSE_BITS ); + } + msgLength = 4; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = fuseBits; + msgBuffer[3] = STATUS_CMD_OK; + } + break; + + #ifndef REMOVE_PROGRAM_LOCK_BIT_SUPPORT + case CMD_PROGRAM_LOCK_ISP: + { + unsigned char lockBits = msgBuffer[4]; + + lockBits = (~lockBits) & 0x3C; // mask BLBxx bits + boot_lock_bits_set(lockBits); // and program it + boot_spm_busy_wait(); + + msgLength = 3; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = STATUS_CMD_OK; + } + break; + #endif + case CMD_CHIP_ERASE_ISP: + eraseAddress = 0; + msgLength = 2; + // msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[1] = STATUS_CMD_FAILED; //* isue 543, return FAILED instead of OK + break; + + case CMD_LOAD_ADDRESS: + #if defined(RAMPZ) + address = ( ((address_t)(msgBuffer[1])<<24)|((address_t)(msgBuffer[2])<<16)|((address_t)(msgBuffer[3])<<8)|(msgBuffer[4]) )<<1; + #else + address = ( ((msgBuffer[3])<<8)|(msgBuffer[4]) )<<1; //convert word to byte address + #endif + msgLength = 2; + msgBuffer[1] = STATUS_CMD_OK; + break; + + case CMD_SET_UPLOAD_SIZE_PRUSA3D: + ((unsigned char*)&flashSize)[0] = msgBuffer[1]; + ((unsigned char*)&flashSize)[1] = msgBuffer[2]; + ((unsigned char*)&flashSize)[2] = msgBuffer[3]; + ((unsigned char*)&flashSize)[3] = 0; + msgLength = 2; + msgBuffer[1] = STATUS_CMD_OK; + break; + + case CMD_PROGRAM_FLASH_ISP: + case CMD_PROGRAM_EEPROM_ISP: + { + unsigned int size = ((msgBuffer[1])<<8) | msgBuffer[2]; + unsigned char *p = msgBuffer+10; + unsigned int data; + unsigned char highByte, lowByte; + address_t tempaddress = address; + + + if ( msgBuffer[0] == CMD_PROGRAM_FLASH_ISP ) + { + if (flashSize != 0) + { + if (address == 0) //first page + { + flashCounter = size; //initial value = size + flashAddressLast = 0; //last + flashOperation = 1; //write + } + else if (address != flashAddressLast) + flashCounter += size; //add size to counter + flashAddressLast = address; + } + + // erase only main section (bootloader protection) + if (eraseAddress < APP_END ) //erase and write only blocks with address less 0x3e000 + { //because prevent "brick" + boot_page_erase(eraseAddress); // Perform page erase + boot_spm_busy_wait(); // Wait until the memory is erased. + eraseAddress += SPM_PAGESIZE; // point to next page to be erase + } + if (address < APP_END) + { + /* Write FLASH */ + do { + lowByte = *p++; + highByte = *p++; + + data = (highByte << 8) | lowByte; + boot_page_fill(address,data); + + address = address + 2; // Select next word in memory + size -= 2; // Reduce number of bytes to write by two + } while (size); // Loop until all bytes written + + boot_page_write(tempaddress); + boot_spm_busy_wait(); + boot_rww_enable(); // Re-enable the RWW section + } + } + else + { + //* issue 543, this should work, It has not been tested. + uint16_t ii = address >> 1; + /* write EEPROM */ + while (size) { + eeprom_write_byte((uint8_t*)ii, *p++); + address+=2; // Select next EEPROM byte + ii++; + size--; + } + } + msgLength = 2; + msgBuffer[1] = STATUS_CMD_OK; + + } + break; + + case CMD_READ_FLASH_ISP: + case CMD_READ_EEPROM_ISP: + { + unsigned int size = ((msgBuffer[1])<<8) | msgBuffer[2]; + unsigned char *p = msgBuffer+1; + msgLength = size+3; + + *p++ = STATUS_CMD_OK; + if (msgBuffer[0] == CMD_READ_FLASH_ISP ) + { + if (flashSize != 0) + { + if ((address == 0x00000) && (flashOperation == 1)) + { + flashOperation = 2; //verify + flashCounter = size; //initial value = size + } + else + flashCounter += size; //add size to counter + } + + unsigned int data; + + // Read FLASH + do { + //#if defined(RAMPZ) + #if (FLASHEND > 0x10000) + data = pgm_read_word_far(address); + #else + data = pgm_read_word_near(address); + #endif + *p++ = (unsigned char)data; //LSB + *p++ = (unsigned char)(data >> 8); //MSB + address += 2; // Select next word in memory + size -= 2; + }while (size); + } + else + { + /* Read EEPROM */ + do { + EEARL = address; // Setup EEPROM address + EEARH = ((address >> 8)); + address++; // Select next EEPROM byte + EECR |= (1<>8)&0xFF); + sendchar(c); + checksum ^= c; + + c = msgLength&0x00FF; + sendchar(c); + checksum ^= c; + + sendchar(TOKEN); + checksum ^= TOKEN; + + p = msgBuffer; + while ( msgLength ) + { + c = *p++; + sendchar(c); + checksum ^=c; + msgLength--; + } + sendchar(checksum); + seqNum++; + + #ifndef REMOVE_BOOTLOADER_LED + //* toggle the LED + PROGLED_PORT ^= (1< + + +base address = f000 +avrdude: Device signature = 0x1e9703 +avrdude: safemode: lfuse reads as FF +avrdude: safemode: hfuse reads as D8 +avrdude: safemode: efuse reads as F5 +avrdude> +*/ + +//************************************************************************ diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot.h b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot.h new file mode 100644 index 0000000..0ddb1fa --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot.h @@ -0,0 +1,4 @@ +#ifndef STK500BOOT_H +#define STK500BOOT_H +extern void sendchar(char c); +#endif // STK500BOOT_H diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot.hex b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot.hex new file mode 100644 index 0000000..93fa242 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot.hex @@ -0,0 +1,216 @@ +:020000023000CC +:10E000000D9472F00D949BF00D949BF00D949BF089 +:10E010000D949BF00D949BF00D949BF00D949BF050 +:10E020000D949BF00D949BF00D949BF00D949BF040 +:10E030000D949BF00D949BF00D949BF00D949BF030 +:10E040000D949BF00D949BF00D949BF00D949BF020 +:10E050000D949BF00D949BF00D949BF00D949BF010 +:10E060000D949BF00D949BF00D949BF00D949BF000 +:10E070000D949BF00D949BF00D949BF00D949BF0F0 +:10E080000D949BF00D949BF00D949BF00D949BF0E0 +:10E090000D949BF00D949BF00D949BF00D949BF0D0 +:10E0A0000D949BF00D949BF00D949BF00D949BF0C0 +:10E0B0000D949BF00D949BF00D949BF00D949BF0B0 +:10E0C0000D949BF00D949BF00D949BF00D949BF0A0 +:10E0D0000D949BF00D949BF00D949BF00D949BF090 +:10E0E0000D949BF011241FBECFEFD1E2DEBFCDBF58 +:10E0F00001E00CBF12E0A0E0B2E0EAEEFCEE03E0CB +:10E100000BBF02C007900D92A235B107D9F712E0FC +:10E11000A2E5B2E001C01D92A435B107E1F70F946A +:10E12000C0F00D9473F601E20EBF0FEF0DBF112486 +:10E130001FBE0D94C0F00D9400F020E030E040EDE3 +:10E1400057E005C0FA013197F1F72F5F3F4F2817CD +:10E150003907C0F30895E0ECF0E0808182608083AD +:10E1600020E12093C40098E19093C100E0EDF0E03D +:10E170008081826080832093D4009093D1000895A1 +:10E180002F923F924F925F926F927F928F929F92C7 +:10E19000AF92BF92CF92DF92EF92FF920F931F93B5 +:10E1A000DF93CF93CDB7DEB7C053D1400FB6F8940D +:10E1B000DEBF0FBECDBF01E20EBF0FEF0DBF94B7A4 +:10E1C000F894A89514BE80916000886180936000E7 +:10E1D00010926000789493FF05C0E0915202F09194 +:10E1E00053021995279A2F9A8091C00082608093DC +:10E1F000C00080E18093C40088E18093C1000000EA +:10E200000F94ABF00F94D2F50F94CAF587E10F94F9 +:10E21000CEF580E092E00F94B6F58DE20F94CEF546 +:10E220008EE092E00F94B6F5EE24FF248701F4E02F +:10E23000AF2EB12CCC24DD2424C0C5010197F1F709 +:10E240000894E11CF11C011D111D21E2E2162EE4CF +:10E25000F20620E0020720E0120718F0E1E0CE2EDF +:10E26000D12CC801B70127EC3BE140E050E00F940E +:10E2700043F6611571058105910519F485B1805842 +:10E2800085B98091C00087FD03C0C114D104A9F2F3 +:10E29000A6014F5F5F4FC25EDE4F59834883CE5168 +:10E2A000D140C25EDE4F88819981CE51D140019725 +:10E2B00009F0CDC3CD5DDE4F19821882C352D14023 +:10E2C000A0E0CE5DDE4F1882C252D14044245524D6 +:10E2D00022243324C05EDE4F19821882C052D140FE +:10E2E000882499245401CB5DDE4F188219821A824A +:10E2F0001B82C552D140ABBEF40127913691C15D5E +:10E30000DE4F39832883CF52D1409DC3C25EDE4F9A +:10E3100048815981CE51D1404130510509F52091B4 +:10E32000C600C25EDE4F19821882CE51D14022C093 +:10E330002F5F3F4F4F4F5F4F213082E138078AE711 +:10E34000480780E0580780F0C15DDE4FE881F98121 +:10E35000CF52D140EF5FFF4F19F0EE27FF2709940E +:10E3600020E030E040E050E08091C00087FFE0CF47 +:10E370002091C600933011F1943028F4913089F047 +:10E380009230B8F408C0953061F19530F0F09630D5 +:10E3900009F048C043C02B3109F0B8CF91E0ABE1A0 +:10E3A000B5CFA227CE5DDE4F2883C252D14092E086 +:10E3B000ADCF722F60E0A22793E0A8CF822F90E02C +:10E3C000682B792BA22794E0A1CF2E3009F05AC3F5 +:10E3D000A22795E0CD5DDE4F19821882C352D1404D +:10E3E00095CFE1E0F0E0EC0FFD1FCD5DDE4F488101 +:10E3F0005981C352D140E40FF51F20834F5F5F4F17 +:10E40000CD5DDE4F59834883C352D140A2274617C2 +:10E41000570709F07BCFBA0196E078CF2A1709F0A9 +:10E4200031C303C0973009F071CF0894411C511CCF +:10E430005BE04516510408F45DC00894211C311CB2 +:10E4400086E02816310410F02224332480E00F9453 +:10E45000CEF5C05EDE4FA881B981C052D140AB2B52 +:10E46000B1F484E10F94CEF580E292E00F94B6F51A +:10E470008DE20F94CEF584E392E00F94B6F5E1E0DF +:10E48000F0E0C05EDE4FF983E883C052D1408BE5F7 +:10E490000F94CEF588E492E00F94B6F5F2E02F16D3 +:10E4A0003104E9F023E02216310440F42114310450 +:10E4B00091F031E023163104D9F413C044E024165E +:10E4C000310469F054E02516310438F085E028164F +:10E4D000310471F406C08CE505C08FE503C08EE5FC +:10E4E00001C08DE50F94CEF58FE492E00F94B6F560 +:10E4F000442455249981933109F40EC19431C0F418 +:10E50000963009F4DCC0973048F4923069F19330CA +:10E5100009F470C0913009F017C256C0913109F466 +:10E520007AC0923108F0C0C0903109F00DC21CC011 +:10E53000983109F488C0993150F4953109F4ECC050 +:10E54000953108F49AC1963109F0FEC196C19A310D +:10E5500009F471C09A3108F496C09B3109F460C087 +:10E560009D3109F0F1C102C090E056C09D81903309 +:10E5700059F48F81882311F49EE11CC0813011F081 +:10E5800091E018C098E916C0892F807591F09035F8 +:10E5900039F489E0E0E0F0E08093570094910AC0FC +:10E5A000983539F4E3E0F0E089E0809357009491E6 +:10E5B00001C090E01A821B828D818C831D829E8314 +:10E5C0001F8227E030E0C4C11A8288E08B8381E497 +:10E5D0008C8386E58D8382E58E8389E48F8383E552 +:10E5E000888780E589878FE58A8782E38B872BE0A0 +:10E5F00030E0AEC18A81813941F0823941F0803901 +:10E6000011F48FE005C080E003C082E001C08AE021 +:10E610001A828B8346C091E01A8222E030E099C1D1 +:10E620008D81882311F48EE128C0813011F081E0C2 +:10E6300024C088E922C01A8289E0E1E0F0E08093FA +:10E64000570084911BC08B81803589F48C81883080 +:10E6500039F4E2E0F0E089E08093570084910DC046 +:10E6600089E0E0E0F0E080935700849106C0E3E0A9 +:10E67000F0E089E08093570084911A828B831C829A +:10E6800024E030E065C18D81836C99E0E1E0F0E049 +:10E69000082E90935700E89507B600FCFDCF1A822C +:10E6A0001B8223E030E054C180EC8A83CB5DDE4FD7 +:10E6B000188219821A821B82C552D14047C18A81B1 +:10E6C00090E0A0E0B0E0B82EAA24992488248B81A1 +:10E6D00090E0A0E0B0E0DC0199278827882A992AF9 +:10E6E000AA2ABB2A8D8190E0A0E0B0E0882A992A6E +:10E6F000AA2ABB2A8C8190E0A0E0B0E0BA2FA92F13 +:10E70000982F8827882A992AAA2ABB2A880C991C1C +:10E71000AA1CBB1C1A821AC1FA81C65DDE4FF8839F +:10E72000CA52D140C75DDE4F1882C952D1408B8199 +:10E73000C82EDD24C75DDE4F28813981C952D14002 +:10E74000C22AD32A933109F06DC0CB5DDE4F888198 +:10E750009981AA81BB81C552D1408030E0EC9E07EF +:10E76000E3E0AE07E0E0BE07F0F423E0FC01A09395 +:10E770005B0020935700E89507B600FCFDCFCB5D0A +:10E78000DE4F88819981AA81BB81C552D1408050DA +:10E790009F4FAF4FBF4FCB5DDE4F88839983AA83D6 +:10E7A000BB83C552D140B501A401DE011B968C91FB +:10E7B00011962C9111971296C45DDE4F2883CC528E +:10E7C000D140C55DDE4F1882CB52D14090E0C55D8F +:10E7D000DE4FE881F981CB52D1408E2B9F2B21E077 +:10E7E0000C01FA0160935B0020935700E895112417 +:10E7F0004E5F5F4F6F4F7F4F8EEF9FEFC80ED91E5A +:10E80000C114D104A1F695E0F401A0925B009093AD +:10E810005700E89507B600FCFDCF81E180935700D3 +:10E82000E89527C0D501C401B695A795979587951A +:10E830007C0186012BE0622E712C6C0E7D1E0BC0BC +:10E84000D3016D913D01C7010F9465F60894E11C59 +:10E85000F11C015010400115110591F7A60160E06F +:10E8600070E0440F551F661F771F480D591D6A1D24 +:10E870007B1D1A824A015B0169C0BA81C25DDE4F0D +:10E88000B883CE52D140C35DDE4F1882CD52D14005 +:10E890008B81C82EDD24C35DDE4FE881F981CD5226 +:10E8A000D140CE2ADF2A1A8289818431D1F496019F +:10E8B000BE016D5F7F4FABBEF40187919691DB0186 +:10E8C0008C9311969C936E5F7F4F82E090E0A0E066 +:10E8D000B0E0880E991EAA1EBB1E2250304059F788 +:10E8E0002DC0A5019401BE016D5F7F4F0894C10842 +:10E8F000D108760100E010E00894C11CD11C0894F6 +:10E90000E11CF11C011D111DE80CF91C0A1D1B1D49 +:10E9100021BDBB27A52F942F832F82BD2F5F3F4F93 +:10E920004F4F5F4FF89A80B5DB018D93BD012E15D7 +:10E930003F054007510761F749015A0196012D5FD4 +:10E940003F4FFB01108204C080EC8A8322E030E05C +:10E9500090E0FBE1F093C6008091C00086FFFCCF01 +:10E960008091C00080648093C000CE5DDE4F4881FE +:10E97000C252D1404093C6008091C00086FFFCCFB8 +:10E980008091C00080648093C000532F3093C600F4 +:10E990008091C00086FFFCCF8091C000806480938E +:10E9A000C000422F2093C6008091C00086FFFCCF9C +:10E9B0008091C00080648093C0008EE08093C60088 +:10E9C0008091C00086FFFCCF8091C000806480935E +:10E9D000C000A5E1CE5DDE4F8881C252D140A8279C +:10E9E000A427A527FE01319610C040814093C600A0 +:10E9F0008091C00086FFFCCF31968091C00080647A +:10EA00008093C000A427215030402115310569F7BB +:10EA1000A093C6008091C00086FFFCCF8091C0000B +:10EA200080648093C00085B1805885B9992379F4BA +:10EA3000CE5DDE4F9881C252D1409F5FCE5DDE4FEA +:10EA40009883C252D14090E060E070E05FCC27989C +:10EA50002F9880E090E020ED37E0F9013197F1F751 +:10EA6000019684369105C9F700008091C0008D7F22 +:10EA70008093C00081E180935700E895EE27FF273F +:10EA80000994FFCF90E042CC282F662311F05D9AC5 +:10EA900001C05D9827FF02C0A39A01C0A398922FDE +:10EAA00026FF04C080910201806803C080910201AA +:10EAB0008F778093020195FF02C0A49A01C0A498A9 +:10EAC00094FF02C05A9A01C05A9800C05B9A82E033 +:10EAD0008A95F1F700C05B9893FF02C0A39A01C02A +:10EAE000A39892FF04C080910201806803C08091C6 +:10EAF00002018F778093020191FF02C0A49A01C0A6 +:10EB0000A49890FF02C05A9A01C05A9800C05B9A1C +:10EB100092E09A95F1F700C05B98A39A8091020168 +:10EB2000806880930201A49A5A9A662341F42430A3 +:10EB300030F48FE999E10197F1F700C003C095ED3A +:10EB40009A95F1F70000089561E00F9444F5089557 +:10EB5000CF93DF93EC0102C00F94A4F5FE01219640 +:10EB600084918823C9F7DF91CF910895CF93DF93E4 +:10EB7000EC0102C00F94A4F589918823D9F7DF91A5 +:10EB8000CF91089560E00F9444F5089582E00F94CA +:10EB9000C2F5089581E00F94C2F5089580580F944E +:10EBA000C2F50895539A559A9B9AE1E0F1E080816D +:10EBB000806880839C9A529A5B985D98A39AE2E061 +:10EBC000F1E0808180688083A49A5A9A8FE59AEE5A +:10EBD0000197F1F700C00000A39880818F778083B0 +:10EBE00000C05B9A92E09A95F1F700C05B988FE0C5 +:10EBF00090E40197F1F700C000005B9A92E09A95CB +:10EC0000F1F700C05B988FE891E00197F1F700C041 +:10EC100000005B9A92E09A95F1F700C05B9885ED51 +:10EC20008A95F1F700005A9800C05B9A92E09A9595 +:10EC3000F1F700C05B9885ED8A95F1F700005A98CE +:10EC400000C05B9A92E09A95F1F700C05B9882E071 +:10EC50008A95F1F700C0A39A00C05B9A92E09A955A +:10EC6000F1F700C05B9885ED8A95F1F7000088E028 +:10EC70000F94C2F50F94CAF586E00F94C2F58CE0AC +:10EC80000F94C2F50895A1E21A2EAA1BBB1BFD0129 +:10EC90000DC0AA1FBB1FEE1FFF1FA217B307E4077B +:10ECA000F50720F0A21BB30BE40BF50B661F771FD3 +:10ECB000881F991F1A9469F76095709580959095B3 +:10ECC0009B01AC01BD01CF010895262FF999FECF1C +:10ECD0001FBA92BD81BD20BD0FB6F894FA9AF99A79 +:0AECE0000FBE01960895F894FFCFCF +:10ECEA0020334420205072696E74657273002020AC +:10ECFA00204F726967696E616C205072757361008A +:10ED0A0020446F206E6F7420646973636F6E6E6542 +:10ED1A006374210020557067726164696E672066AA +:10ED2A0069726D77617265007C202020207C002A40 +:02ED3A000000D7 +:040000033000E000E9 +:00000001FF diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot_v2_mega2560.hex b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot_v2_mega2560.hex new file mode 100644 index 0000000..fa36efc --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_einsy_rambo/stk500boot_v2_mega2560.hex @@ -0,0 +1,285 @@ +:020000023000CC +:10E000000D9472F00D949BF00D949BF00D949BF089 +:10E010000D949BF00D949BF00D949BF00D949BF050 +:10E020000D949BF00D949BF00D949BF00D949BF040 +:10E030000D949BF00D949BF00D949BF00D949BF030 +:10E040000D949BF00D949BF00D949BF00D949BF020 +:10E050000D949BF00D949BF00D949BF00D949BF010 +:10E060000D949BF00D949BF00D949BF00D949BF000 +:10E070000D949BF00D949BF00D949BF00D949BF0F0 +:10E080000D949BF00D949BF00D949BF00D949BF0E0 +:10E090000D949BF00D949BF00D949BF00D949BF0D0 +:10E0A0000D949BF00D949BF00D949BF00D949BF0C0 +:10E0B0000D949BF00D949BF00D949BF00D949BF0B0 +:10E0C0000D949BF00D949BF00D949BF00D949BF0A0 +:10E0D0000D949BF00D949BF00D949BF00D949BF090 +:10E0E0000D949BF011241FBECFEFD1E2DEBFCDBF58 +:10E0F00001E00CBF12E0A0E0B2E0E4E2F1EF03E0E7 +:10E100000BBF02C007900D92A836B107D9F712E0F5 +:10E11000A8E6B2E001C01D92A837B107E1F70F945D +:10E12000FEF00D9490F801E20EBF0FEE0DBF11242A +:10E130001FBE0D94FEF00D9400F020E030E040EDA5 +:10E1400057E005C0FA013197F1F72F5F3F4F2817CD +:10E150003907C0F308952091760230917702211596 +:10E16000310561F48093C6008091C00086FFFCCF2A +:10E170008091C00080648093C000089522303105F2 +:10E1800059F48093D6008091D00086FFFCCF809117 +:10E19000D00080648093D0000895E0ECF0E08081AE +:10E1A0008260808320E12093C40098E19093C100B5 +:10E1B000E0EDF0E08081826080832093D400909332 +:10E1C000D1000895019719F480E885B9089515B82C +:10E1D000089581B1806F81B982B1806F82B96D9AE3 +:10E1E00075989D9AA598E1E0F1E08081886280832E +:10E1F000E2E0F1E080818862808308952F923F926F +:10E200004F925F926F927F928F929F92AF92BF9246 +:10E21000CF92DF92EF92FF920F931F93DF93CF93F2 +:10E22000CDB7DEB7C053D1400FB6F894DEBF0FBEF6 +:10E23000CDBF94B7F894A89514BE80916000886112 +:10E240008093600010926000789493FFC0C080912A +:10E25000FC1F9091FD1FA091FE1FB091FF1F8A5AD5 +:10E260009545AA4AB54509F0D6C52091F41F3091CD +:10E27000F51F4091F61F5091F71F79018A01F3E0D5 +:10E280008F2E9924939475E061E199C08091FB1FD2 +:10E2900080FF09C0F70100935B0080925700E8956A +:10E2A00007B600FCFDCFA12CE1E0BE2EC12CD12C85 +:10E2B000AE0CBF1CC01ED11E8091FB1F81FD4DC046 +:10E2C00065C08091FB1F82FF0DC08091F01F90916F +:10E2D000F11FA091F21FB091F31FABBFFC0187911A +:10E2E00096910BC08091F01F9091F11FA091F21FA9 +:10E2F000B091F31FFC01808191810C01F9014093E1 +:10E300005B0090925700E89511242E5F3F4F4F4FCE +:10E310005F4F8091F01F9091F11FA091F21FB0917B +:10E32000F31F0296A11DB11D8093F01F9093F11F62 +:10E33000A093F21FB093F31F8091F81F9091F91FE3 +:10E340008330910530F002979093F91F8093F81F66 +:10E3500004C01092F91F1092F81F8091F81F90913D +:10E36000F91F892B31F02A153B054C055D0508F492 +:10E37000A8CFF70100935B0070935700E89507B6AC +:10E3800000FCFDCF60935700E89517C020503F4F29 +:10E390004F4F5F4F8091F81F9091F91FF1E081304E +:10E3A0009F0738F0805091409093F91F8093F81F99 +:10E3B00004C01092F91F1092F81F86017501809118 +:10E3C000F81F9091F91F892B09F060CF24C5109296 +:10E3D000770210927602279A2F9A8091C00082606D +:10E3E0008093C00080E18093C40088E18093C100E5 +:10E3F00000000F94E9F080E885B90F94CDF00F94F8 +:10E40000A9F70F94A1F780E00F94A5F781E40F948A +:10E41000A5F780E092E00F948DF787E10F94A5F7C0 +:10E4200082E192E00F948DF785E60F94A5F781E2E3 +:10E4300092E00F948DF715B8A0907602B090770215 +:10E44000EE24FF24870134E0832E912CCC24DD249C +:10E4500024C0C4010197F1F70894E11CF11C011DCF +:10E46000111D21E2E2162EE4F20620E0020720E070 +:10E47000120718F021E0C22ED12CC801B70127ECF9 +:10E480003BE140E050E00F944CF8611571058105C7 +:10E49000910519F485B1805885B98091C00087FD38 +:10E4A00007C08091D00087FD03C0C114D10489F258 +:10E4B0008091D00087FF03C092E0A92EB12C960175 +:10E4C0002F5F3F4FB0927702A09276022130310544 +:10E4D00009F094C422243324CC24CC5DDE4F18826E +:10E4E000C452D140882499245401CB5DDE4F188258 +:10E4F00019821A821B82C552D140CE5DDE4F19822D +:10E500001882C252D1404424552400E010E0ABBE32 +:10E51000F40187919691C15DDE4F99838883CF5234 +:10E52000D14064C420E030E02130310551F120E0D9 +:10E5300030E040E050E0109721F48091C00087FD6A +:10E5400020C0A230B10521F48091D00087FD1CC00D +:10E550002F5F3F4F4F4F5F4F2130E2E13E07EAE729 +:10E560004E07E0E05E0738F3C15DDE4F2881398158 +:10E57000CF52D1402F5F3F4FD1F2EE27FF270994B2 +:10E58000D6CF2091C60002C02091D600933011F161 +:10E59000943028F4913089F09230B8F407C0953067 +:10E5A00041F19530F0F09630D1F535C02B3109F0BE +:10E5B000B9CF91E08BE1C82EB5CFC226CC5DDE4F3E +:10E5C0002883C452D14092E0ADCF722F60E0C226C2 +:10E5D00093E0A8CF822F90E0682B792BC22694E09D +:10E5E000A1CF2E3009F025C4C22695E02224332481 +:10E5F00099CFE5E0F0E0EC0FFD1FE20DF31D208365 +:10E600000894211C311CC2262616370609F08ACF31 +:10E61000B10196E087CF2C1509F00BC403C09730E9 +:10E6200009F080CF012B81F40F94A1F784E10F94BE +:10E63000A5F785E292E00F948DF78DE20F94A5F790 +:10E6400089E392E00F948DF78091680290916902BE +:10E65000A0916A02B0916B020097A105B10599F5EE +:10E66000CE5DDE4FA881B981C252D1401196CE5DF8 +:10E67000DE4FB983A883C252D1401B9720F1089482 +:10E68000411C511CB6E04B16510410F04424552493 +:10E690008BE50F94A5F78DE492E00F948DF7E4E0FD +:10E6A0004E16510418F4842D845A02C082E684194F +:10E6B0000F94A5F78AE20F947BF7CE5DDE4F1982A7 +:10E6C0001882C252D1408091680290916902A09153 +:10E6D0006A02B0916B020097A105B10509F461C00F +:10E6E0008091740290917502009709F45AC00197C5 +:10E6F00039F488E50F94A5F784E592E00F948DF73F +:10E700008091740290917502029739F487E50F9415 +:10E71000A5F78BE592E00F948DF760916C027091F4 +:10E720006D0280916E0290916F0224E630E040E02D +:10E7300050E00F941AF820916802309169024091DC +:10E740006A0250916B020F944CF880916302909191 +:10E750006402A0916502B091660289839A83AB83BB +:10E76000BC83FE0133961216130674F4C9016AE0E5 +:10E7700070E00F9439F8805D8083C9016AE070E031 +:10E780000F9439F89B0102C080E280833197EC1727 +:10E79000FD0749F7CE0101960F948DF785E20F949E +:10E7A0007BF76D81643109F432C26531F0F4663073 +:10E7B00009F4E7C0673048F4623091F1633009F43E +:10E7C00077C0613009F0C5C25CC0613109F481C015 +:10E7D000623120F4603109F0BCC222C0623109F418 +:10E7E000C5C0633109F0B5C205C1693109F4ACC0D7 +:10E7F0006A3150F4663109F40AC2663108F4FAC08D +:10E80000683109F0A6C27FC06B3109F469C06B3171 +:10E8100008F471C06D3131F0613709F09AC2DDC082 +:10E82000DD2459C09985903359F48B85882311F4E0 +:10E830009EE11CC0813011F091E018C098E916C02B +:10E84000892F807591F0903539F489E0E0E0F0E0AF +:10E850008093570094910AC0983539F4E3E0F0E0D2 +:10E8600089E080935700949101C090E01E821F823E +:10E870008985888719869A871B86F7E0EF2EF12C09 +:10E880006DC21E8288E08F8381E4888786E5898750 +:10E8900082E58A8789E48B8783E58C8780E58D878D +:10E8A0008FE58E8782E38F87EBE0EE2EF12C56C248 +:10E8B0008E81813941F0823941F0803911F48FE045 +:10E8C00005C080E003C082E001C08AE01E828F8321 +:10E8D00049C0DD24D3941E8272E0E72EF12C3FC2A2 +:10E8E0008985882311F48EE128C0813011F081E000 +:10E8F00024C088E922C01E82E1E0F0E089E0809334 +:10E90000570084911BC08F81803589F488858830B9 +:10E9100039F4E2E0F0E089E08093570084910DC083 +:10E9200089E0E0E0F0E080935700849106C0E3E0E6 +:10E93000F0E089E08093570084911E828F831886CF +:10E9400064E0E62EF12C0AC28985836C99E0E1E04F +:10E95000F0E0082E90935700E89507B600FCFDCF35 +:10E960001E821F8253E0E52EF12CF8C180EC8E83CD +:10E97000CB5DDE4F188219821A821B82C552D140AC +:10E98000EAC18E8190E0A0E0B0E0B82EAA249924DC +:10E9900088248F8190E0A0E0B0E0DC0199278827EF +:10E9A000882A992AAA2ABB2A898590E0A0E0B0E0AB +:10E9B000882A992AAA2ABB2A888590E0A0E0B0E09C +:10E9C000BA2FA92F982F8827882A992AAA2ABB2AE2 +:10E9D000880C991CAA1CBB1C0BC08E8180936802FA +:10E9E0008F8180936902888580936A0210926B02FE +:10E9F0001E82B1C1FE81C65DDE4FF883CA52D1408E +:10EA0000C75DDE4F1882C952D1408F81C82EDD24E8 +:10EA1000C75DDE4F28813981C952D140C22AD32A2D +:10EA2000633109F0C9C08091680290916902A09198 +:10EA30006A02B0916B020097A105B10509F443C0C9 +:10EA400081149104A104B10491F4C601A0E0B0E0E6 +:10EA500080936C0290936D02A0936E02B0936F024C +:10EA600081E090E0909375028093740224C08091BD +:10EA7000700290917102A0917202B0917302881697 +:10EA80009906AA06BB06B9F0960140E050E08091D5 +:10EA90006C0290916D02A0916E02B0916F02820F94 +:10EAA000931FA41FB51F80936C0290936D02A093D7 +:10EAB0006E02B0936F028092700290927102A092E7 +:10EAC0007202B0927302CB5DDE4F88819981AA8178 +:10EAD000BB81C552D1408030E0EE9E07E3E0AE0737 +:10EAE000E0E0BE07F0F423E0FC01A0935B0020937C +:10EAF0005700E89507B600FCFDCFCB5DDE4F88815F +:10EB00009981AA81BB81C552D14080509F4FAF4FA0 +:10EB1000BF4FCB5DDE4F88839983AA83BB83C552E9 +:10EB2000D14090E0891690EE990693E0A90690E016 +:10EB3000B90618F0B501A40166C0B501A401DE0153 +:10EB40001F968C9111962C9111971296C45DDE4FF1 +:10EB50002883CC52D140C55DDE4F1882CB52D140C4 +:10EB600090E0C55DDE4FE881F981CB52D1408E2B1C +:10EB70009F2B21E00C01FA0160935B00209357006A +:10EB8000E89511244E5F5F4F6F4F7F4F8EEF9FEFE1 +:10EB9000C80ED91EC114D104A1F695E0F401A092CB +:10EBA0005B0090935700E89507B600FCFDCF81E12C +:10EBB00080935700E89527C0D501C401B695A79565 +:10EBC000979587957C018601AFE06A2E712C6C0EBB +:10EBD0007D1E0BC0D3016D913D01C7010F9482F8DA +:10EBE0000894E11CF11C015010400115110591F72A +:10EBF000A60160E070E0440F551F661F771F480DA7 +:10EC0000591D6A1D7B1D1E824A015B01A4C0BE8185 +:10EC1000C25DDE4FB883CE52D140C35DDE4F188255 +:10EC2000CD52D1408F81C82EDD24C35DDE4FE881F7 +:10EC3000F981CD52D140CE2ADF2A1E828D818431C6 +:10EC400009F052C08091680290916902A0916A0215 +:10EC5000B0916B020097A105B10561F18114910497 +:10EC6000A104B10481F4809174029091750201971E +:10EC700051F482E090E09093750280937402C60193 +:10EC8000A0E0B0E00FC0960140E050E080916C023F +:10EC900090916D02A0916E02B0916F02820F931F4E +:10ECA000A41FB51F80936C0290936D02A0936E0217 +:10ECB000B0936F029601BE01695F7F4FABBEF40156 +:10ECC00087919691DB018C9311969C936E5F7F4F99 +:10ECD00082E090E0A0E0B0E0880E991EAA1EBB1E64 +:10ECE0002250304059F72DC0A5019401BE01695F43 +:10ECF0007F4F0894C108D108760100E010E0089425 +:10ED0000C11CD11C0894E11CF11C011D111DE80C53 +:10ED1000F91C0A1D1B1D21BDBB27A52F942F832F76 +:10ED200082BD2F5F3F4F4F4F5F4FF89A80B5DB0199 +:10ED30008D93BD012E153F054007510761F749012D +:10ED40005A0133E0E32EF12CEC0CFD1CFB01108288 +:10ED500005C080EC8E8322E0E22EF12CDD248BE1D5 +:10ED60000F94ABF0CC5DDE4F8881C452D1400F943C +:10ED7000ABF08F2D0F94ABF08E2D0F94ABF08EE097 +:10ED80000F94ABF095E1C92ECC5DDE4FF881C452F3 +:10ED9000D140CF26CE24CF2485E0682E712C6C0E76 +:10EDA0007D1E0AC0D3011D913D01812F0F94ABF050 +:10EDB000C1260894E108F108E114F10499F78C2DBB +:10EDC0000F94ABF085B1805885B9DD20B9F4CC5DE6 +:10EDD000DE4FB881C452D140BF5FCC5DDE4FB883F7 +:10EDE000C452D14001E010E020E030E0A091760272 +:10EDF000B091770290E060E070E096CB27982F9872 +:10EE000080E090E020ED37E0F9013197F1F70196CD +:10EE100084369105C9F700008091C0008D7F8093F2 +:10EE2000C00081E180935700E895EE27FF27099401 +:10EE3000FFCF90E077CB282F662311F05D9A01C0B9 +:10EE40005D9827FF02C0A39A01C0A398922F26FFC6 +:10EE500004C080910201806803C0809102018F7715 +:10EE60008093020195FF02C0A49A01C0A49894FF68 +:10EE700002C08D9A01C08D9800C08F9A82E08A9559 +:10EE8000F1F700C08F9893FF02C0A39A01C0A39826 +:10EE900092FF04C080910201806803C0809102014A +:10EEA0008F778093020191FF02C0A49A01C0A498B9 +:10EEB00090FF02C08D9A01C08D9800C08F9A92E099 +:10EEC0009A95F1F700C08F98A39A8091020180680B +:10EED00080930201A49A8D9A662341F4243030F481 +:10EEE0008FE999E10197F1F700C003C095ED9A957C +:10EEF000F1F70000089561E00F941BF70895CF9398 +:10EF0000DF93EC0102C00F947BF7FE012196849100 +:10EF10008823C9F7DF91CF910895CF93DF93EC0158 +:10EF200002C00F947BF789918823D9F7DF91CF91A5 +:10EF3000089560E00F941BF7089582E00F9499F70D +:10EF4000089581E00F9499F7089580580F9499F7E8 +:10EF50000895879A559A9B9AE1E0F1E08081806854 +:10EF600080839C9A859A8F985D98A39AE2E0F1E05D +:10EF7000808180688083A49A8D9A8FE59AEE0197AC +:10EF8000F1F700C00000A39880818F77808300C0D4 +:10EF90008F9A92E09A95F1F700C08F988FE090E4F5 +:10EFA0000197F1F700C000008F9A92E09A95F1F76F +:10EFB00000C08F988FE891E00197F1F700C0000042 +:10EFC0008F9A92E09A95F1F700C08F9885ED8A9517 +:10EFD000F1F700008D9800C08F9A92E09A95F1F7B2 +:10EFE00000C08F9885ED8A95F1F700008D9800C0DC +:10EFF0008F9A92E09A95F1F700C08F9882E08A95F7 +:10F00000F1F700C0A39A00C08F9A92E09A95F1F7A9 +:10F0100000C08F9885ED8A95F1F7000088E00F9485 +:10F0200099F70F94A1F786E00F9499F78CE00F946D +:10F0300099F70895629FD001739FF001829FE00DC0 +:10F04000F11D649FE00DF11D929FF00D839FF00D67 +:10F05000749FF00D659FF00D9927729FB00DE11D13 +:10F06000F91F639FB00DE11DF91FBD01CF011124F0 +:10F07000089597FB092E07260AD077FD04D02ED0DD +:10F0800006D000201AF4709561957F4F0895F6F729 +:10F09000909581959F4F0895A1E21A2EAA1BBB1B44 +:10F0A000FD010DC0AA1FBB1FEE1FFF1FA217B30754 +:10F0B000E407F50720F0A21BB30BE40BF50B661F6A +:10F0C000771F881F991F1A9469F76095709580952E +:10F0D00090959B01AC01BD01CF010895AA1BBB1BFC +:10F0E00051E107C0AA1FBB1FA617B70710F0A61B48 +:10F0F000B70B881F991F5A95A9F780959095BC0169 +:10F10000CD010895262FF999FECF1FBA92BD81BD7A +:10F1100020BD0FB6F894FA9AF99A0FBE0196089599 +:04F12000F894FFCF91 +:10F124004F726967696E616C2050727573612069F2 +:10F134003300507275736120526573656172636840 +:10F14400002E2E2E0020446F206E6F74206469738D +:10F15400636F6E6E6563742100205570677261641D +:10F16400696E67206669726D77617265007C202024 +:10F1740020207C0077726974652000766572696668 +:08F1840079200020202000008A +:040000033000E000E9 +:00000001FF diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/Caterina-prusa_mm_control.hex b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/Caterina-prusa_mm_control.hex new file mode 100644 index 0000000..ff8a9f5 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/Caterina-prusa_mm_control.hex @@ -0,0 +1,259 @@ +:107000005FC0000080C000007EC000007CC00000A7 +:107010007AC0000078C0000076C0000074C0000094 +:1070200072C0000070C00000C0C400006CC000004E +:107030006AC0000068C0000066C0000064C00000B4 +:1070400062C00000CDC000005EC000005CC0000057 +:107050005AC0000058C0000056C0000054C00000D4 +:1070600052C0000050C000004EC000004CC00000E4 +:107070004AC0000048C0000046C0000044C00000F4 +:1070800042C0000040C000003EC000003CC0000004 +:107090003AC0000038C0000036C0000034C0000014 +:1070A00032C0000030C000002EC00000443E5D3EF3 +:1070B000043F5D3E043F953EB73E043FD73EE93E68 +:1070C00011241FBECFEFDAE0DEBFCDBF8091FE0AF4 +:1070D0009091FF0A90935D0280935C0212E0A0E021 +:1070E000B1E0EAEAFEE702C005900D92A032B107D6 +:1070F000D9F722E0A0E2B2E001C01D92AC35B207A0 +:10710000E1F718D3C4C67CCF84E08093E900809176 +:10711000E80085FD0DC08091E8008B778093E80042 +:107120008091E80082FDF3CF8EB38111F9CF02C0C8 +:107130008091F100089593E09093E9009091E80028 +:1071400095FF03C08093F10008959091E8009E7729 +:107150009093E8009091E80090FDF4CF9EB39111D8 +:10716000F9CF0895F89481E085BF15BE0C94000016 +:10717000089520912602309127022F5F3F4F3093D0 +:10718000270220932602832F37FF02C08EEF831B36 +:10719000880F821710F45D9808955D9A089584B75A +:1071A000877F84BF90E880E00FB6F89490936100E9 +:1071B000809361000FBE81E085BF82E085BF559A54 +:1071C000E1E6F0E0908310825D98109289009AEFDA +:1071D0009093880080936F0083E080938100CDC3FB +:1071E0001F920F920FB60F9211242F938F939F939C +:1071F000EF93FF931092850010928400E0E0F0E09E +:1072000085919491019649F08091200290912102FC +:1072100001969093210280932002FF91EF919F911C +:107220008F912F910F900FBE0F901F90189542E0F5 +:1072300061EC82E037D342E161E883E033D342E19D +:1072400060E884E02FC380915402982F9F77913299 +:1072500039F590915502903291F0913209F5813AC9 +:10726000F9F48091E800877F8093E80067E070E0A0 +:1072700082E091E04BD48091E8008B770FC081329F +:1072800079F48091E800877F8093E80067E070E000 +:1072900082E091E098D48091E8008E778093E800B6 +:1072A00008954F925F926F927F92AF92BF92CF926A +:1072B000DF92EF92FF920F931F93CF93DF9384E0BF +:1072C0008093E9008091E80082FF25C21DDFC82F6E +:1072D000853481F48CE49DE1909321028093200217 +:1072E00007B600FCFDCFF999FECF81E180935700EE +:1072F000E89503C0843521F407DF8DE01CDFE2C18F +:107300008C34D9F38035C9F3843721F484E413DF56 +:1073100080E0F4CF813611F489E5F0CF813491F427 +:10732000F3DEC82FF1DE90E0880F991F2C2F30E09C +:10733000322F2227330F822B932B092E000CAA0BFE +:10734000BB0B94C1803711F483E5D8CF833549F462 +:10735000C7E1D2E01C2F195F8991EDDE1C13FCCF31 +:10736000B1C1863521F481E3E6DE80E3C7CF833700 +:1073700031F487E8E0DE85E9DEDE8EE1BFCF8536D9 +:10738000F1F4E0E0F0E083E095E007B600FCFDCF2B +:10739000F999FECF80935700E89507B600FCFDCF22 +:1073A000F999FECF90935700E89507B600FCFDCF02 +:1073B000E058FF4FE11540E7F40739F79ECF8237D9 +:1073C00019F4E1E0F0E00EC0863419F4E0E0F0E0FA +:1073D00009C08E3419F4E3E0F0E004C0813539F4DB +:1073E000E2E0F0E089E080935700849187CF823615 +:1073F00031F489E5A0DE80E09EDE80E87FCF823434 +:1074000019F0873609F016C110922102109220025D +:107410007BDE082F79DED82F77DE182F8BEB810FDC +:10742000823010F08FE36ACF2D2F30E0302B109296 +:107430006F00C73609F048C007B600FCFDCFF999C8 +:10744000FECF81E180935700E895E90100E0BB247D +:10745000B394209709F4EAC0C0902202D09023028E +:10746000E0902402F09025021634B9F4E02FF0E009 +:10747000EC29FD2984915FDE002369F052E0C50EFE +:10748000D11CE11CF11CC0922202D0922302E09296 +:107490002402F09225020B2515C0D701C601B6952E +:1074A000A79597958795DDD446DE82E0C80ED11C5E +:1074B000E11CF11CC0922202D0922302E09224022D +:1074C000F09225022197C5CFC0902202D0902302CE +:1074D000E0902402F0902502163421F5D701C60170 +:1074E0008F779927AA27BB27C114E0E7DE06E104BE +:1074F000F104C0F4892B8A2B8B2BA1F48FB7F8945D +:1075000007B600FCFDCFF999FECF93E0F60190930A +:107510005700E89507B600FCFDCF91E19093570026 +:10752000E8958FBFE901B12C00E0AA24A39420972D +:1075300009F454C0163469F5002339F107B600FC8C +:10754000FDCFF999FECF4090220250902302609027 +:10755000240270902502D8DD2B2D30E0A901582B94 +:10756000F2010A01A0925700E8951124B301A2018B +:107570004E5F5F4F6F4F7F4F409322025093230225 +:10758000609324027093250202C0BEDDB82E0A2546 +:1075900023C0BADD682F8091220290912302A0912E +:1075A0002402B0912502B695A7959795879561D449 +:1075B0004091220250912302609124027091250291 +:1075C0004E5F5F4F6F4F7F4F4093220250932302D5 +:1075D00060932402709325022197A9CF163421F5D8 +:1075E000D701C6018F779927AA27BB27C114F0E7D7 +:1075F000DF06E104F104C0F4892B8A2B8B2BA1F464 +:107600008FB7F89407B600FCFDCFF999FECF95E04F +:10761000F60190935700E89507B600FCFDCF91E185 +:1076200090935700E8958FBF8DE085DD82E08093D1 +:107630006F0048C0843419F567DD682F80912202FD +:1076400090912302A0912402B0912502B695A795AE +:10765000979587950ED48091220290912302A09154 +:107660002402B09125020296A11DB11D8093220231 +:1076700090932302A0932402B09325023ECE843639 +:10768000F1F4C0902202D0902302E0902402F09006 +:107690002502D701C601B695A79597958795E1D3A1 +:1076A0004ADDF2E0CF0ED11CE11CF11CC092220297 +:1076B000D0922302E0922402F092250203C08B3183 +:1076C00009F0B0CE83E08093E9009091E8008091CA +:1076D000E8008E778093E80095FD11C08091E80066 +:1076E00080FD04C08EB38111F9CF15C08091E800F0 +:1076F0008E778093E80003C08EB3882361F0809179 +:10770000E80080FFF9CF84E08093E9008091E800F1 +:107710008B778093E800DF91CF911F910F91FF90BD +:10772000EF90DF90CF90BF90AF907F906F905F9081 +:107730004F9008951092FF0A1092FE0A84B714BE6B +:107740000FB6F894A89590916000986190936000AE +:10775000109260000FBE81FD1DC080FF07C0E0E0F9 +:10776000F0E0259134912F3F3F4F99F483FF12C0F1 +:1077700020915C0230915D028091000190910101A5 +:107780002817390739F0E0E0F0E0859194910196EF +:1077900009F0E8DC04DD78941092210210922002B6 +:1077A00080DD48D3809120029091210281349F4155 +:1077B00010F4DFDCF5CF8091E00081608093E00081 +:1077C0009BE088E10FB6F894A895809360000FBE07 +:1077D00090936000FFCFCF93292F30E02230310506 +:1077E00061F02330310571F02130310509F051C0CD +:1077F00082E190E025E032E050C08EE390E027EC9B +:1078000031E04BC0882309F435C0813009F437C01A +:10781000823009F439C0833009F03BC09AE290937A +:10782000280280932902AAE2B2E090E0C1E22FB7D9 +:10783000F894E92FE695F0E03E968C2F87BF84916F +:107840002FBF90FF82958F70682F70E08A3018F0FC +:1078500027E330E002C020E330E0260F371F2D93EE +:107860003D939F5F943119F78091280290E028E2C0 +:1078700032E013C084E090E023EC31E00EC08CE7EE +:1078800090E025E431E009C08AE390E029E031E0AE +:1078900004C080E090E020E030E0FA0131832083F2 +:1078A000CF9108958093E900EBEEF0E08081816054 +:1078B0008083EDEEF0E010826093EC0040838091D5 +:1078C000EE00881F8827881F08958091540287FF43 +:1078D0000FC08091E80082FD04C08EB38111F9CF02 +:1078E00010C08091E8008B770AC08EB3882349F0DE +:1078F0008091E80080FFF9CF8091E8008E77809337 +:10790000E80008950F931F93CF93DF9341D048D0A1 +:10791000C8EDD0E088818F778883888180688883EC +:1079200088818F7D888319BC1EBA1092520200EEA6 +:1079300010E0F80180818B7F80838881816088835B +:1079400042E060E080E0AEDFE1EEF0E080818E7F3B +:107950008083E2EEF0E080818160808380818860B6 +:107960008083F80180818E7F808388818061888315 +:10797000DF91CF911F910F910895E7EDF0E08081A5 +:10798000816080838AE482BF81E080935302BACF12 +:10799000E8EDF0E080818E7F80831092E200089510 +:1079A0001092DA001092E10008951F920F920FB624 +:1079B0000F9211242F933F934F935F936F937F9375 +:1079C0008F939F93AF93BF93EF93FF938091DA00D0 +:1079D00080FF1BC08091D80080FF17C08091DA0023 +:1079E0008E7F8093DA008091D90080FF0BC080E108 +:1079F00089BD82E189BD09B400FEFDCF81E08EBB67 +:107A000018D203C019BC1EBA14D28091E10080FFC5 +:107A100017C08091E20080FF13C08091E2008E7F4A +:107A20008093E2008091E20080618093E200809187 +:107A3000D80080628093D80019BC85E08EBBF9D154 +:107A40008091E10084FF2CC08091E20084FF28C077 +:107A500080E189BD82E189BD09B400FEFDCF80913E +:107A6000D8008F7D8093D8008091E1008F7E809335 +:107A7000E1008091E2008F7E8093E2008091E2003D +:107A800081608093E20080915202811106C0809152 +:107A9000E30087FD02C081E001C084E08EBBC9D154 +:107AA0008091E10083FF21C08091E20083FF1DC02F +:107AB0008091E100877F8093E10082E08EBB10928D +:107AC00052028091E1008E7F8093E1008091E2007C +:107AD0008E7F8093E2008091E20080618093E200DB +:107AE00042E060E080E0DEDEA4D1FF91EF91BF9143 +:107AF000AF919F918F917F916F915F914F913F9146 +:107B00002F910F900FBE0F901F90189520915A0241 +:107B100030915B022617370748F06115710539F47B +:107B20002091E8002E772093E80001C0B90140E0E1 +:107B300061157105A1F12EB3222309F440C025304F +:107B400009F43FC02091E80023FD37C02091E800F0 +:107B500022FD2DC02091E80020FFEACF4091F300E4 +:107B60002091F20030E0342BFC01CF01611571054A +:107B700059F02830310540F481918093F100615033 +:107B800071092F5F3F4FF1CF41E02830310509F0F7 +:107B900040E02091E8002E772093E800C9CF411102 +:107BA000CACF05C08EB3882351F0853051F0809143 +:107BB000E80082FFF7CF80E0089581E0089582E039 +:107BC000089583E008956115710529F42091E80076 +:107BD0002B772093E800FC016115710531F18EB31C +:107BE000882359F1853059F18091E80083FD23C045 +:107BF0008091E80082FFF0CF2091F3008091F200A5 +:107C000090E0922B892B31F08091F10081936150AB +:107C1000710991F78091E8008B778093E800DCCFC1 +:107C20008EB3882351F0853051F08091E80080FFB9 +:107C3000F7CF80E0089581E0089582E0089583E021 +:107C400008950F931F93CF93DF9300D0CDB7DEB786 +:107C5000E4E5F2E088E08E0F9091F10091938E13AD +:107C6000FBCFF1DA8091E80083FFCEC0809154020F +:107C700090915502492F50E04A30510508F0C4C098 +:107C8000FA01EA5AF74CE7C0823809F0BDC080918A +:107C9000580287708093E9008091EB001092E90010 +:107CA0009091E800977F9093E80085FB882780F902 +:107CB0008093F1001092F10085C0282F2D7F09F0EC +:107CC000A3C0823009F0A0C080915602811127C064 +:107CD00080915802877009F497C08093E900209141 +:107CE000EB0020FF1CC0933021F48091EB008062F8 +:107CF00014C09091EB0090619093EB0021E030E094 +:107D0000A90102C0440F551F8A95E2F74093EA008B +:107D10001092EA008091EB0088608093EB00109253 +:107D2000E9008091E800877F50C081116DC01091FB +:107D300056021F770FB7F8948091E800877F8093F1 +:107D4000E800C3DD8091E80080FFFCCF8091E30074 +:107D50008078812B8093E30080688093E300111189 +:107D600002C082E001C083E08EBB0FBF4DC08058CF +:107D7000823008F049C0AE014F5F5F4F60915802FA +:107D8000809156029091570226DDBC01892B09F49F +:107D90003BC09091E800977F9093E80089819A8199 +:107DA000B5DE8091E8008B778093E8002DC08038A5 +:107DB00059F58091E800877F8093E8008091520216 +:107DC0008093F1008091E8008E778093E8007DDD5C +:107DD0001BC0811119C0909156029230A8F4809175 +:107DE000E800877F8093E800909352026EDD8091D7 +:107DF0005202811106C08091E30087FD02C081E03C +:107E000001C084E08EBB13DA8091E80083FF0AC0D2 +:107E10008091EB0080628093EB008091E800877F87 +:107E20008093E8000F900F90DF91CF911F910F91F9 +:107E300008950895CF938EB3882359F0C091E90037 +:107E4000C7701092E9008091E80083FDFADEC093CC +:107E5000E900CF910895EE0FFF1F0590F491E02DFA +:107E60000994F999FECF92BD81BDF89A992780B502 +:107E70000895262FF999FECF1FBA92BD81BD20BD6E +:107E80000FB6F894FA9AF99A0FBE01960895F894ED +:027E9000FFCF22 +:107E920008950895089508950895089508950895F8 +:087EA200089508950895089564 +:107EAA007777000000000000083A0350007200755E +:107EBA0000730061002000520065007300650061D4 +:107ECA0000720063006800200028007000720075CC +:107EDA000073006100330064002E0063006F006DC0 +:107EEA0000290000007C034F0072006900670069E6 +:107EFA00006E0061006C0020005000720075007373 +:107F0A0000610020006900330020004D004B00335F +:107F1A000020004D0075006C007400690020004DBF +:107F2A00006100740065007200690061006C002045 +:107F3A000032002E003000200075007000670072C9 +:107F4A00006100640065002000280062006F006F75 +:107F5A000074006C006F0061006400650072002903 +:107F6A000000000403090409023E000201008032F5 +:107F7A000904000001020201000524001001042482 +:107F8A0002040524060001070582030800FF09040C +:107F9A000100020A0000000705040210000107059B +:107FAA0083021000011201100102000008992C033B +:107FBA00000100020103014341544552494E410068 +:107FE00058CF58CF58CF58CF58CF58CF58CF58CF59 +:087FF00058CF58CF58CF58CFED +:087FF8000070000000DFFBDC5B +:040000030000700089 +:00000001FF diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/Readme.txt b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/Readme.txt new file mode 100644 index 0000000..f9707e9 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/Readme.txt @@ -0,0 +1,14 @@ +Notes on building the improved 32u4 Caterina bootloader: + +1. Must download LUFA-111009 and extract to this directory. + + This should be in a folder named LUFA-111009/ + +2. Make sure avr-gcc is installed. It make come with tools, but + if not maybe wingnu32 make, and core tools can be downloaded and used. + +3. Try using powershell if you get "...died before initialization" errors. + +4. The "build.txt" file and "program.txt" files can be renamed + to .bat files and run to build and program the boards listed + herein (Windows only, unfortunately). \ No newline at end of file diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/build.txt b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/build.txt new file mode 100644 index 0000000..8aae266 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/build.txt @@ -0,0 +1,24 @@ +make clean +make PID=0x9209 F_CPU=16000000 +copy Caterina.hex Caterina-wiflyin.hex +make clean +make PID=0x9207 F_CPU=8000000 +copy Caterina.hex Caterina-lilypadusb.hex +make clean +make PID=0x9205 F_CPU=16000000 +copy Caterina.hex Caterina-promicro16.hex +make clean +make PID=0x9203 F_CPU=8000000 +copy Caterina.hex Caterina-promicro8.hex +make clean +make PID=0x2B74 F_CPU=16000000 +copy Caterina.hex Caterina-makey.hex +make clean +make PID=0xF100 F_CPU=8000000 +copy Caterina.hex Caterina-fio.hex +make clean +make PID=0x920B F_CPU=16000000 +copy Caterina.hex Caterina-minibench.hex +make clean +make PID=0x0110 F_CPU=8000000 +copy Caterina.hex Caterina-lilypadusbplus.hex \ No newline at end of file diff --git a/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/program.txt b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/program.txt new file mode 100644 index 0000000..e1819de --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/bootloaders/prusa_mm_control/program.txt @@ -0,0 +1,9 @@ +@ECHO OFF +IF "%1"=="" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina.hex -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m +IF "%1"=="lilypadusb" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-lilypadusb.hex -U efuse:w:0xfe:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m +IF "%1"=="fio" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-fio.hex -U efuse:w:0xfe:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m +IF "%1"=="promicro8" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-promicro8.hex -U efuse:w:0xfe:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m +IF "%1"=="promicro16" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-promicro16.hex -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m +IF "%1"=="makey" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-makey.hex -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m +IF "%1"=="wiflyin" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-wiflyin.hex -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m +IF "%1"=="minibench" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-minibench.hex -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m \ No newline at end of file diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Arduino.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Arduino.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Arduino.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Arduino.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/CDC.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/CDC.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/CDC.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/CDC.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Client.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Client.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Client.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Client.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial0.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial0.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial0.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial0.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial1.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial1.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial1.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial1.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial2.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial2.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial2.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial2.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial3.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial3.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial3.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial3.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial_private.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial_private.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/HardwareSerial_private.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/HardwareSerial_private.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/IPAddress.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/IPAddress.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/IPAddress.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/IPAddress.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/IPAddress.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/IPAddress.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/IPAddress.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/IPAddress.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/PluggableUSB.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/PluggableUSB.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/PluggableUSB.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/PluggableUSB.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/PluggableUSB.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/PluggableUSB.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/PluggableUSB.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/PluggableUSB.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Print.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Print.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Print.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Print.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Print.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Print.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Print.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Print.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Printable.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Printable.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Printable.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Printable.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Server.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Server.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Server.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Server.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Stream.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Stream.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Stream.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Stream.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Stream.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Stream.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Stream.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Stream.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Tone.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Tone.cpp similarity index 99% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Tone.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Tone.cpp index 1bfb3e3..fed4ae3 100644 --- a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Tone.cpp +++ b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Tone.cpp @@ -91,9 +91,9 @@ volatile uint8_t timer5_pin_mask; #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) #define AVAILABLE_TONE_PINS 1 -#define USE_TIMER2 +#define USE_TIMER4 -const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 3, 4, 5, 1, 0 */ }; +const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 4 /*, 3, 5 */ }; static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255, 255, 255, 255, 255 */ }; #elif defined(__AVR_ATmega8__) diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/USBAPI.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/USBAPI.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/USBAPI.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/USBAPI.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/USBCore.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/USBCore.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/USBCore.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/USBCore.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/USBCore.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/USBCore.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/USBCore.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/USBCore.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/USBDesc.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/USBDesc.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/USBDesc.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/USBDesc.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Udp.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Udp.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/Udp.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/Udp.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/WCharacter.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/WCharacter.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/WCharacter.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/WCharacter.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/WInterrupts.c b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/WInterrupts.c similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/WInterrupts.c rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/WInterrupts.c diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/WMath.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/WMath.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/WMath.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/WMath.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/WString.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/WString.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/WString.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/WString.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/WString.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/WString.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/WString.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/WString.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/abi.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/abi.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/abi.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/abi.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/binary.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/binary.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/binary.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/binary.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/hooks.c b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/hooks.c similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/hooks.c rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/hooks.c diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/main.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/main.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/main.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/main.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/new.cpp b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/new.cpp similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/new.cpp rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/new.cpp diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/new.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/new.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/new.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/new.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring.c b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring.c similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring.c rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring.c diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_analog.c b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_analog.c similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_analog.c rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_analog.c diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_digital.c b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_digital.c similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_digital.c rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_digital.c diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_private.h b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_private.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_private.h rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_private.h diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_pulse.S b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_pulse.S similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_pulse.S rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_pulse.S diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_pulse.c b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_pulse.c similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_pulse.c rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_pulse.c diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_shift.c b/IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_shift.c similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/cores/rambo/wiring_shift.c rename to IDE_Board_Manager/prusa3dboards/cores/prusa_einsy_rambo/wiring_shift.c diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/platform.txt b/IDE_Board_Manager/prusa3dboards/platform.txt similarity index 97% rename from IDE_Board_Manager/prusa3drambo-1.0.1/platform.txt rename to IDE_Board_Manager/prusa3dboards/platform.txt index 63d0b93..7f552a4 100644 --- a/IDE_Board_Manager/prusa3drambo-1.0.1/platform.txt +++ b/IDE_Board_Manager/prusa3dboards/platform.txt @@ -5,7 +5,7 @@ # For more info: # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification -name=Arduino AVR Boards +name=Prusa Research AVR Boards version=1.6.20 # AVR compile variables @@ -21,7 +21,7 @@ compiler.warning_flags.all=-Wall -Wextra compiler.path={runtime.tools.avr-gcc.path}/bin/ compiler.c.cmd=avr-gcc compiler.c.flags=-c -g -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -compiler.c.elf.flags={compiler.warning_flags} -Os -Wl,-u,vfprintf -lprintf_flt -lm -g -flto -fuse-linker-plugin -Wl,--gc-sections +compiler.c.elf.flags={compiler.warning_flags} -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections compiler.c.elf.cmd=avr-gcc compiler.S.flags=-c -g -x assembler-with-cpp -flto -MMD compiler.cpp.cmd=avr-g++ diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/variants/rambo/pins_arduino.h b/IDE_Board_Manager/prusa3dboards/variants/prusa_einsy_rambo/pins_arduino.h similarity index 100% rename from IDE_Board_Manager/prusa3drambo-1.0.1/variants/rambo/pins_arduino.h rename to IDE_Board_Manager/prusa3dboards/variants/prusa_einsy_rambo/pins_arduino.h diff --git a/IDE_Board_Manager/prusa3dboards/variants/prusa_mm_control/pins_arduino.h b/IDE_Board_Manager/prusa3dboards/variants/prusa_mm_control/pins_arduino.h new file mode 100644 index 0000000..809e323 --- /dev/null +++ b/IDE_Board_Manager/prusa3dboards/variants/prusa_mm_control/pins_arduino.h @@ -0,0 +1,380 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +// Workaround for wrong definitions in "iom32u4.h". +// This should be fixed in the AVR toolchain. +#undef UHCON +#undef UHINT +#undef UHIEN +#undef UHADDR +#undef UHFNUM +#undef UHFNUML +#undef UHFNUMH +#undef UHFLEN +#undef UPINRQX +#undef UPINTX +#undef UPNUM +#undef UPRST +#undef UPCONX +#undef UPCFG0X +#undef UPCFG1X +#undef UPSTAX +#undef UPCFG2X +#undef UPIENX +#undef UPDATX +#undef TCCR2A +#undef WGM20 +#undef WGM21 +#undef COM2B0 +#undef COM2B1 +#undef COM2A0 +#undef COM2A1 +#undef TCCR2B +#undef CS20 +#undef CS21 +#undef CS22 +#undef WGM22 +#undef FOC2B +#undef FOC2A +#undef TCNT2 +#undef TCNT2_0 +#undef TCNT2_1 +#undef TCNT2_2 +#undef TCNT2_3 +#undef TCNT2_4 +#undef TCNT2_5 +#undef TCNT2_6 +#undef TCNT2_7 +#undef OCR2A +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 +#undef OCR2B +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 + +#define NUM_DIGITAL_PINS 31 +#define NUM_ANALOG_INPUTS 12 + +#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0) +#define TXLED0 PORTD |= (1<<5) +#define TXLED1 PORTD &= ~(1<<5) +#define RXLED0 PORTB |= (1<<0) +#define RXLED1 PORTB &= ~(1<<0) + +static const uint8_t SDA = 2; +static const uint8_t SCL = 3; +#define LED_BUILTIN 13 +#define LED_BUILTIN_RX 17 +#define LED_BUILTIN_TX 30 + +// Map SPI port to 'new' pins D14..D17 +static const uint8_t SS = 17; +static const uint8_t MOSI = 16; +static const uint8_t MISO = 14; +static const uint8_t SCK = 15; + +// Mapping of analog pins as digital I/O +// A6-A11 share with digital pins +static const uint8_t A0 = 18; +static const uint8_t A1 = 19; +static const uint8_t A2 = 20; +static const uint8_t A3 = 21; +static const uint8_t A4 = 22; +static const uint8_t A5 = 23; +static const uint8_t A6 = 24; // D4 +static const uint8_t A7 = 25; // D6 +static const uint8_t A8 = 26; // D8 +static const uint8_t A9 = 27; // D9 +static const uint8_t A10 = 28; // D10 +static const uint8_t A11 = 29; // D12 + +#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0)) +#define digitalPinToPCICRbit(p) 0 +#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0)) +#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4)))))) + +// __AVR_ATmega32U4__ has an unusual mapping of pins to channels +extern const uint8_t PROGMEM analog_pin_to_channel_PGM[]; +#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) ) + +#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT))))) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ATMEL ATMEGA32U4 / ARDUINO LEONARDO +// +// D0 PD2 RXD1/INT2 +// D1 PD3 TXD1/INT3 +// D2 PD1 SDA SDA/INT1 +// D3# PD0 PWM8/SCL OC0B/SCL/INT0 +// D4 A6 PD4 ADC8 +// D5# PC6 ??? OC3A/#OC4A +// D6# A7 PD7 FastPWM #OC4D/ADC10 +// D7 PE6 INT6/AIN0 +// +// D8 A8 PB4 ADC11/PCINT4 +// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5 +// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6 +// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7 +// D12 A11 PD6 T1/#OC4D/ADC9 +// D13# PC7 PWM10 CLK0/OC4A +// +// A0 D18 PF7 ADC7 +// A1 D19 PF6 ADC6 +// A2 D20 PF5 ADC5 +// A3 D21 PF4 ADC4 +// A4 D22 PF1 ADC1 +// A5 D23 PF0 ADC0 +// +// New pins D14..D17 to map SPI port to digital pins +// +// MISO D14 PB3 MISO,PCINT3 +// SCK D15 PB1 SCK,PCINT1 +// MOSI D16 PB2 MOSI,PCINT2 +// SS D17 PB0 RXLED,SS/PCINT0 +// +// Connected LEDs on board for TX and RX +// TXLED D30 PD5 XCK1 +// RXLED D17 PB0 +// HWB PE2 HWB + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, + (uint16_t) &DDRE, + (uint16_t) &DDRF, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, + (uint16_t) &PORTE, + (uint16_t) &PORTF, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, + (uint16_t) &PINE, + (uint16_t) &PINF, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PD, // D0 - PD2 + PD, // D1 - PD3 + PD, // D2 - PD1 + PD, // D3 - PD0 + PD, // D4 - PD4 + PC, // D5 - PC6 + PD, // D6 - PD7 + PE, // D7 - PE6 + + PB, // D8 - PB4 + PB, // D9 - PB5 + PB, // D10 - PB6 + PB, // D11 - PB7 + PD, // D12 - PD6 + PC, // D13 - PC7 + + PB, // D14 - MISO - PB3 + PB, // D15 - SCK - PB1 + PB, // D16 - MOSI - PB2 + PB, // D17 - SS - PB0 + + PF, // D18 - A0 - PF7 + PF, // D19 - A1 - PF6 + PF, // D20 - A2 - PF5 + PF, // D21 - A3 - PF4 + PF, // D22 - A4 - PF1 + PF, // D23 - A5 - PF0 + + PD, // D24 / PD5 + PD, // D25 / D6 - A7 - PD7 + PB, // D26 / D8 - A8 - PB4 + PB, // D27 / D9 - A9 - PB5 + PB, // D28 / D10 - A10 - PB6 + PD, // D29 / D12 - A11 - PD6 + PD, // D30 / TX Led - PD5 +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(2), // D0 - PD2 + _BV(3), // D1 - PD3 + _BV(1), // D2 - PD1 + _BV(0), // D3 - PD0 + _BV(4), // D4 - PD4 + _BV(6), // D5 - PC6 + _BV(7), // D6 - PD7 + _BV(6), // D7 - PE6 + + _BV(4), // D8 - PB4 + _BV(5), // D9 - PB5 + _BV(6), // D10 - PB6 + _BV(7), // D11 - PB7 + _BV(6), // D12 - PD6 + _BV(7), // D13 - PC7 + + _BV(3), // D14 - MISO - PB3 + _BV(1), // D15 - SCK - PB1 + _BV(2), // D16 - MOSI - PB2 + _BV(0), // D17 - SS - PB0 + + _BV(7), // D18 - A0 - PF7 + _BV(6), // D19 - A1 - PF6 + _BV(5), // D20 - A2 - PF5 + _BV(4), // D21 - A3 - PF4 + _BV(1), // D22 - A4 - PF1 + _BV(0), // D23 - A5 - PF0 + + _BV(4), // D24 / D4 - A6 - PD4 + _BV(7), // D25 / D6 - A7 - PD7 + _BV(4), // D26 / D8 - A8 - PB4 + _BV(5), // D27 / D9 - A9 - PB5 + _BV(6), // D28 / D10 - A10 - PB6 + _BV(6), // D29 / D12 - A11 - PD6 + _BV(5), // D30 / TX Led - PD5 +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + TIMER0B, /* 3 */ + NOT_ON_TIMER, + TIMER3A, /* 5 */ + TIMER4D, /* 6 */ + NOT_ON_TIMER, + + NOT_ON_TIMER, + TIMER1A, /* 9 */ + TIMER1B, /* 10 */ + TIMER0A, /* 11 */ + + NOT_ON_TIMER, + TIMER4A, /* 13 */ + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +const uint8_t PROGMEM analog_pin_to_channel_PGM[] = { + 7, // A0 PF7 ADC7 + 6, // A1 PF6 ADC6 + 5, // A2 PF5 ADC5 + 4, // A3 PF4 ADC4 + 1, // A4 PF1 ADC1 + 0, // A5 PF0 ADC0 + 8, // A6 D4 PD4 ADC8 + 10, // A7 D6 PD7 ADC10 + 11, // A8 D8 PB4 ADC11 + 12, // A9 D9 PB5 ADC12 + 13, // A10 D10 PB6 ADC13 + 9 // A11 D12 PD6 ADC9 +}; + +#endif /* ARDUINO_MAIN */ + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +// Alias SerialUSB to Serial +#define SerialUSB SERIAL_PORT_USBVIRTUAL + +#ifndef MAGIC_KEY +#define MAGIC_KEY 0x7777 +#endif + +#ifndef MAGIC_KEY_POS +#define MAGIC_KEY_POS 0x0800 +#endif +#ifndef NEW_LUFA_SIGNATURE +#define NEW_LUFA_SIGNATURE 0xDCFB +#endif + +#endif /* Pins_Arduino_h */ diff --git a/IDE_Board_Manager/prusa3drambo-1.0.1/boards.txt b/IDE_Board_Manager/prusa3drambo-1.0.1/boards.txt deleted file mode 100644 index 61f1787..0000000 --- a/IDE_Board_Manager/prusa3drambo-1.0.1/boards.txt +++ /dev/null @@ -1,31 +0,0 @@ -# See: https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification - -############################################################## - -menu.cpu=Processor - -######################################## -## RAMBo -######################################## -rambo.name=PrusaResearch EINSY RAMBo -rambo.vid.0=0x27b1 -rambo.pid.0=0x0001 - -rambo.upload.tool=arduino:avrdude -rambo.upload.protocol=wiring -rambo.upload.maximum_size=253952 -rambo.upload.speed=115200 - -rambo.bootloader.low_fuses=0xFF -rambo.bootloader.high_fuses=0xD8 -rambo.bootloader.extended_fuses=0xFD -rambo.bootloader.path=stk500v2 -#rambo.bootloader.file=stk500boot_v2_mega2560.hex -rambo.bootloader.unlock_bits=0x3F -rambo.bootloader.lock_bits=0x0F - -rambo.build.mcu=atmega2560 -rambo.build.f_cpu=16000000L -rambo.build.board=AVR_RAMBO -rambo.build.core=rambo -rambo.build.variant=rambo diff --git a/README.md b/README.md index b52b7f8..3bd03cf 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,173 @@ -# Arduino_Boards -Board definitions for Arduino compatible boards manufactured by Prusa Research +# Prusa Research AVR Boards +Prusa Research AVR Boards definitions for Arduino compatible boards manufactured/used by Prusa Research +- [Prusa MM Control board](https://github.com/prusa3d/MM-control-2.0) +- Prusa Einsy and miniRAMBo boards by Ultimachine [Einsy](https://github.com/ultimachine/Einsy-Rambo) and [miniRAMBo](https://github.com/ultimachine/Mini-Rambo) + +# Table of contents + + + * [Linux build](#linux) + * Windows build + * [Using Linux subsystem](#using-linux-subsystem-under-windows-10-64-bit) + * [Using Git-bash](#using-git-bash-under-windows-10-64-bit) + * [How-to change code and dependencies](#2-How-to-modify) + * [Prepare new version](#3-Prepare-new-version) + + + +# 1-Build environment +## Linux + +## Windows +Please make sure if you modify code, files, etc. that the line endings are UNIX conform (LF and not CRLF). +### Using Linux subsystem under Windows 10 64-bit +_notes: Script and instructions contributed by 3d-gussner. Use at your own risk. Script downloads Arduino executables outside of Prusa control. Report problems [there.](https://github.com/3d-gussner/Arduino_Boards/issues)._ +- follow the [Microsoft guide](https://docs.microsoft.com/en-us/windows/wsl/install-win10) +- Tested versions are at this moment + - Ubuntu other may different + - After the installation and reboot please open your Ubuntu bash and do following steps + - run command `apt-get update` + - run command `apt-get upgrade` to update your OS. + +#### Some Tips for Ubuntu +- Linux is case sensetive so please don't forget to use capital letters where needed, like changing to a directory +- To change the path to your Prusa-Firmware location you downloaded and unzipped + - Example: You files are under `C:\Users\\Downloads\Arduino_Boards` + - use under Ubuntu the following command `cd /mnt/c/Users//Downloads/Arduino_Boards` + to change to the right folder +- Unix and windows have different line endings (LF vs CRLF), try dos2unix to convert + - This should fix the `"$'\r': command not found"` error + - to install run `apt-get install dos2unix` + +#### Modify Arduino_Boards with Ubuntu Linux subsystem installed +- open Ubuntu bash +- change to your source code folder (case sensitive) +- Read How-to-modify below +- run `./Prepare-new-version.sh` +- Read How-to-modify part `package_prusa3d_index.json` below + +### Using Git-bash under Windows 10 64-bit +_notes: Script and instructions contributed by 3d-gussner. Use at your own risk. Script downloads Arduino executables outside of Prusa control. Report problems [there.](https://github.com/3d-gussner/Prusa-Firmware/issues) Multi language build is supported._ +- Download and install the [64bit Git version](https://git-scm.com/download/win) +- Also follow these [instructions](https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058) + +#### Compile Prusa-firmware with Git-bash installed +- open Git-bash +- Read How-to-modify below +- change to your source code folder +- run `bash Prepare-new-version.sh` +- Read How-to-modify `package_prusa3d_index.json` below + +# 2-How-to-modify +Folder Structure: + + . + +-- IDE_Boards_Manager + ¦ +-- prusa3dboards Please don't change that folder name when you update your Github and post a PR. + ¦ +-- bootloaders + ¦ +-- prusa_einsy_rambo Which is a clone of https://github.com/prusa3d/stk500v2-prusa + ¦ +-- prusa_mm_control + ¦ +-- cores + ¦ +-- prusa_einsy_rambo + ¦ +-- variants + ¦ +-- prusa_einsy_rambo + ¦ +-- prusa_mm_control + ¦ +-- ... + +-- ... + +Files: + + . + +-- IDE_Boards_Manager + ¦ +-- prusa3dboards Please don't change that folder name when you update your Github and post a PR. + ¦ +-- boards.txt contains definitions for the boards (board name, parameters for building and uploading sketches, etc.). + ¦ +-- platform.txt contains definitions for the CPU architecture used (compiler, build process parameters, tools used for upload, etc.). + ¦ +-- avrdude.conf + ¦ +-- ... + ¦ +-- package_prusa3d_index.json + ¦ +-- prusa3dboards.version contains the release version numbers and is used in `Prepare-new-version.sh`. The first line is used. + ¦ +-- prusa3dboards-.tar.bz2 actual used pacakges for Ardunio IDE Boards Manager + ¦ +-- prusa3dboards-.md Info about the version + ¦ +-- ... + +-- LICENSE + +-- README.md + +-- ... + +More information about [boards.txt](https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification#boardstxt) +More information about [platforms.txt](https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification#platformtxt) +More information about [package_prusa3d_index.json](https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.6.x-package_index.json-format-specification) + +Naming convention for version: +- <`major:#1`.`minor:#2`.`maintenance:#2`"-`devel status:0-4`-`devel build:#6`" where `-devel status` and `devel build` are optional + - `#1` = numbers 0-9 + - `#2` = numbers 0-99 + - `0-4`= only numbers between 0 and 4. 0=devel, 1=alpha, 2=beta, 3=pre-release, 4=release candidate + - `#6` = numbers 0-999999 + +Few examples: + +- 1.0.0-0-235 Is a version in development and devel build 235. +- 1.0.0 Is the frist stable version +- 1.0.1 Is a stable version that was maintaind...like adding a bootloader or changing tools to existing boards +- 1.1.0-3 Is a pre-release version including new boards +- 1.1.0 Is the first stable version including new boards + +After modifying the source code please follow these steps: +- add the new version (following the naming conention) in the first line of `prusa3dboards.version` +- run `Prepare-new-version.sh` to generate `prusa3dboards-tar.bz2` and to show `sha256checksum` and `size` needed in the `package_prusa3d_index.json` +- open `package_prusa3d_index.json`in your prefered editor (like notepad++) + - Directly under + + ``` + { + "packages": [ + { + "name": "PrusaResearch", + "maintainer": "Prusa Research", + "websiteURL": "https://www.prusa3d.com/", + "email": "info@prusa3d.com", + "help": { + "online": "https://github.com/3d-gussner/Arduino_Boards" + }, + "platforms": [ + ``` + you will find the latest Prusa Research AVR Boards definition ... something like this + ``` + { + "name": "Prusa Research AVR Boards", + "architecture": "avr", + "version": "1.0.2", + "category": "Contributed", + "url": "https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/V1.0.2/IDE_Board_Manager/prusa3dboards-1.0.2.tar.bz2", + "archiveFileName": "prusa3dboards-1.0.2.tar.bz2", + "checksum": "SHA-256:7d49c48d86644513bd2f2222024934e827783f9f5be160c8a1ae14e177d0393a", + "size": "120855", + "help": { + "online": "https://learn.sparkfun.com/tutorials/installing-arduino-ide/board-add-ons-with-arduino-board-manager" + }, + "boards": [ + { + "name": "Original Prusa i3 MK3 Multi Material 2.0 upgrade" + }, + { + "name": "Original Prusa i3 MK3/MK3S Einsy RAMBo" + } + ], + "toolsDependencies": [] + }, + ``` + + +- Copy and paste this section twice +- Modify the top one with new values + - change `"version": "1.0.2",` `"version": "", + - change in `"url":` and `"archiveFileName":` the "ArchiveFileName" parts you got from `Prepare-new-version.sh` + - if you have your own github for of this repository and you made a new worktree/branch to test your code you should not forget to modify the `"url":` to your `branch` + - change in `"checksum": ` the "SHA256 checksum" you got from `Prepare-new-version.sh` + - change in `"size":` the "Size" you got from `Prepare-new-version.sh` +- double check the syntax/format of the JSON file. In Notepad++ makes it is quite easy by using the [+] and [-] to see if your changes are correct. + +When you have an own github and work localy use `git status` to verify your status. +- You may need to use `git add IDE_Board_Manager/prusa3dboards-.tar.bz2` +- You need to commit your changes with `git commit -a`. Please try to document your changes as detailed as possible. +