From 2d5d3753a1f9e54a2a094b5b6008e067bfb27f5e Mon Sep 17 00:00:00 2001 From: "Sneezy\\admin" Date: Fri, 19 Apr 2019 17:42:22 -0400 Subject: [PATCH 1/5] added support for atmega2561 and atmega1281 (64pin variants) following MegaCore pin definitions --- include/boards/avr/megacore64.h | 56 +++++++++++++++++++++++++++++++++ include/ports_avr.h | 4 +++ 2 files changed, 60 insertions(+) create mode 100644 include/boards/avr/megacore64.h diff --git a/include/boards/avr/megacore64.h b/include/boards/avr/megacore64.h new file mode 100644 index 0000000..8043b9b --- /dev/null +++ b/include/boards/avr/megacore64.h @@ -0,0 +1,56 @@ +// DirectIO support for megacore 64pin devices + +_define_pin(0, PORT_E, 0); +_define_pin(1, PORT_E, 1); +_define_pin(2, PORT_E, 2); +_define_pin(3, PORT_E, 3); +_define_pin(4, PORT_E, 4); +_define_pin(5, PORT_E, 5); +_define_pin(6, PORT_E, 6); +_define_pin(7, PORT_E, 7); +_define_pin(8, PORT_B, 0); +_define_pin(9, PORT_B, 1); +_define_pin(10, PORT_B, 2); +_define_pin(11, PORT_B, 3); +_define_pin(12, PORT_B, 4); +_define_pin(13, PORT_B, 5); +_define_pin(14, PORT_B, 6); +_define_pin(15, PORT_B, 7); +_define_pin(16, PORT_G, 3); +_define_pin(17, PORT_G, 4); +_define_pin(18, PORT_D, 0); +_define_pin(19, PORT_D, 1); +_define_pin(20, PORT_D, 2); +_define_pin(21, PORT_D, 3); +_define_pin(22, PORT_D, 4); +_define_pin(23, PORT_D, 5); +_define_pin(24, PORT_D, 6); +_define_pin(25, PORT_D, 7); +_define_pin(26, PORT_G, 0); +_define_pin(27, PORT_G, 1); +_define_pin(28, PORT_C, 0); +_define_pin(29, PORT_C, 1); +_define_pin(30, PORT_C, 2); +_define_pin(31, PORT_C, 3); +_define_pin(32, PORT_C, 4); +_define_pin(33, PORT_C, 5); +_define_pin(34, PORT_C, 6); +_define_pin(35, PORT_C, 7); +_define_pin(36, PORT_G, 2); +_define_pin(37, PORT_A, 7); +_define_pin(38, PORT_A, 6); +_define_pin(39, PORT_A, 5); +_define_pin(40, PORT_A, 4); +_define_pin(41, PORT_A, 3); +_define_pin(42, PORT_A, 2); +_define_pin(43, PORT_A, 1); +_define_pin(44, PORT_A, 0); +_define_pin(45, PORT_F, 0); +_define_pin(46, PORT_F, 1); +_define_pin(47, PORT_F, 2); +_define_pin(48, PORT_F, 3); +_define_pin(49, PORT_F, 4); +_define_pin(50, PORT_F, 5); +_define_pin(51, PORT_F, 6); +_define_pin(52, PORT_F, 7); +_define_pin(53, PORT_G, 5); diff --git a/include/ports_avr.h b/include/ports_avr.h index e430513..bd08ee3 100644 --- a/include/ports_avr.h +++ b/include/ports_avr.h @@ -160,6 +160,10 @@ template struct _pins {}; defined(ARDUINO_AVR_ADK) #include "boards/avr/mega.h" +#elif defined(ARDUINO_AVR_ATmega2561) || \ + defined(ARDUINO_AVR_ATmega1281) +#include "boards/avr/megacore64.h" + #elif defined(ARDUINO_AVR_LEONARDO) || \ defined(ARDUINO_AVR_LEONARDO_ETH) || \ defined(ARDUINO_AVR_ESPLORA) || \ From 1d73f76ae0eb1380125faf3df80b4ffb6f3923aa Mon Sep 17 00:00:00 2001 From: vagrant Date: Thu, 7 Mar 2019 20:56:58 +0000 Subject: [PATCH 2/5] fix gen_pins to handle includes --- extras/tools/gen_pins.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/extras/tools/gen_pins.py b/extras/tools/gen_pins.py index 80d807d..e23fc8b 100644 --- a/extras/tools/gen_pins.py +++ b/extras/tools/gen_pins.py @@ -76,7 +76,7 @@ def read_avr_variant(variant_file): pin_num = 0 port_re = re.compile('\s*P(?:ORT_)?([A-L])') pin_re = re.compile('\s*_BV\(\s*([0-9]+)\s*\)') - include_re = re.compile('#include "\.\./([^/]+)/pins_arduino.h"') + include_re = re.compile('#include "(\.\./[^/]+/pins_arduino.h)"') if variant_file.endswith('pins_arduino.c'): print('Warning: check generated pins for %s; multiple MCU variants may be combined' % variant_file) @@ -107,7 +107,9 @@ def read_avr_variant(variant_file): m = include_re.match(line) if m: found_include = True - print('%s -> %s' % (variant_file, m.group())) + target = m.group(1) + print('%s -> %s' % (variant_file, target)) + return read_avr_variant(join(dirname(variant_file), target)) if len(ports) != len(pins): error('ports/pins mismatch in %s (%d ports, %d pins)' % (variant_file, len(ports), len(pins))) From 675d5912824e45a4377577bcf7186a14789ccf89 Mon Sep 17 00:00:00 2001 From: Michael Marchetti Date: Thu, 7 Mar 2019 20:58:48 +0000 Subject: [PATCH 3/5] add missing boards --- include/boards/avr/eightanaloginputs.h | 22 +++++++++++++++++ include/boards/avr/micro.h | 33 ++++++++++++++++++++++++++ include/boards/avr/yun.h | 33 ++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 include/boards/avr/eightanaloginputs.h create mode 100644 include/boards/avr/micro.h create mode 100644 include/boards/avr/yun.h diff --git a/include/boards/avr/eightanaloginputs.h b/include/boards/avr/eightanaloginputs.h new file mode 100644 index 0000000..97836db --- /dev/null +++ b/include/boards/avr/eightanaloginputs.h @@ -0,0 +1,22 @@ +// DirectIO support for eightanaloginputs + +_define_pin(0, PORT_D, 0); +_define_pin(1, PORT_D, 1); +_define_pin(2, PORT_D, 2); +_define_pin(3, PORT_D, 3); +_define_pin(4, PORT_D, 4); +_define_pin(5, PORT_D, 5); +_define_pin(6, PORT_D, 6); +_define_pin(7, PORT_D, 7); +_define_pin(8, PORT_B, 0); +_define_pin(9, PORT_B, 1); +_define_pin(10, PORT_B, 2); +_define_pin(11, PORT_B, 3); +_define_pin(12, PORT_B, 4); +_define_pin(13, PORT_B, 5); +_define_pin(14, PORT_C, 0); +_define_pin(15, PORT_C, 1); +_define_pin(16, PORT_C, 2); +_define_pin(17, PORT_C, 3); +_define_pin(18, PORT_C, 4); +_define_pin(19, PORT_C, 5); diff --git a/include/boards/avr/micro.h b/include/boards/avr/micro.h new file mode 100644 index 0000000..22c3eb4 --- /dev/null +++ b/include/boards/avr/micro.h @@ -0,0 +1,33 @@ +// DirectIO support for micro + +_define_pin(0, PORT_D, 2); +_define_pin(1, PORT_D, 3); +_define_pin(2, PORT_D, 1); +_define_pin(3, PORT_D, 0); +_define_pin(4, PORT_D, 4); +_define_pin(5, PORT_C, 6); +_define_pin(6, PORT_D, 7); +_define_pin(7, PORT_E, 6); +_define_pin(8, PORT_B, 4); +_define_pin(9, PORT_B, 5); +_define_pin(10, PORT_B, 6); +_define_pin(11, PORT_B, 7); +_define_pin(12, PORT_D, 6); +_define_pin(13, PORT_C, 7); +_define_pin(14, PORT_B, 3); +_define_pin(15, PORT_B, 1); +_define_pin(16, PORT_B, 2); +_define_pin(17, PORT_B, 0); +_define_pin(18, PORT_F, 7); +_define_pin(19, PORT_F, 6); +_define_pin(20, PORT_F, 5); +_define_pin(21, PORT_F, 4); +_define_pin(22, PORT_F, 1); +_define_pin(23, PORT_F, 0); +_define_pin(24, PORT_D, 4); +_define_pin(25, PORT_D, 7); +_define_pin(26, PORT_B, 4); +_define_pin(27, PORT_B, 5); +_define_pin(28, PORT_B, 6); +_define_pin(29, PORT_D, 6); +_define_pin(30, PORT_D, 5); diff --git a/include/boards/avr/yun.h b/include/boards/avr/yun.h new file mode 100644 index 0000000..109dc9f --- /dev/null +++ b/include/boards/avr/yun.h @@ -0,0 +1,33 @@ +// DirectIO support for yun + +_define_pin(0, PORT_D, 2); +_define_pin(1, PORT_D, 3); +_define_pin(2, PORT_D, 1); +_define_pin(3, PORT_D, 0); +_define_pin(4, PORT_D, 4); +_define_pin(5, PORT_C, 6); +_define_pin(6, PORT_D, 7); +_define_pin(7, PORT_E, 6); +_define_pin(8, PORT_B, 4); +_define_pin(9, PORT_B, 5); +_define_pin(10, PORT_B, 6); +_define_pin(11, PORT_B, 7); +_define_pin(12, PORT_D, 6); +_define_pin(13, PORT_C, 7); +_define_pin(14, PORT_B, 3); +_define_pin(15, PORT_B, 1); +_define_pin(16, PORT_B, 2); +_define_pin(17, PORT_B, 0); +_define_pin(18, PORT_F, 7); +_define_pin(19, PORT_F, 6); +_define_pin(20, PORT_F, 5); +_define_pin(21, PORT_F, 4); +_define_pin(22, PORT_F, 1); +_define_pin(23, PORT_F, 0); +_define_pin(24, PORT_D, 4); +_define_pin(25, PORT_D, 7); +_define_pin(26, PORT_B, 4); +_define_pin(27, PORT_B, 5); +_define_pin(28, PORT_B, 6); +_define_pin(29, PORT_D, 6); +_define_pin(30, PORT_D, 5); From e1f6c12dca54a07dd7f768be8ecb5407ee89e1df Mon Sep 17 00:00:00 2001 From: petrzjunior Date: Thu, 11 Apr 2019 17:10:32 +0200 Subject: [PATCH 4/5] Add pullup option for InputLow --- DirectIO.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DirectIO.h b/DirectIO.h index 6ce57b3..e753d59 100644 --- a/DirectIO.h +++ b/DirectIO.h @@ -309,7 +309,7 @@ template class InputLow { // An active low digital input. read() returns true if the signal is asserted (low). public: - InputLow() {} + InputLow(boolean pullup=true) : input(pullup) {} boolean read() { return ! input.read(); } From 39ce858294ccc885dc5789096ac35a02629712a5 Mon Sep 17 00:00:00 2001 From: "Sneezy\\admin" Date: Fri, 19 Apr 2019 17:42:22 -0400 Subject: [PATCH 5/5] added support for atmega2561 and atmega1281 (64pin variants) following MegaCore pin definitions --- include/boards/avr/megacore64.h | 56 +++++++++++++++++++++++++++++++++ include/ports_avr.h | 4 +++ 2 files changed, 60 insertions(+) create mode 100644 include/boards/avr/megacore64.h diff --git a/include/boards/avr/megacore64.h b/include/boards/avr/megacore64.h new file mode 100644 index 0000000..8043b9b --- /dev/null +++ b/include/boards/avr/megacore64.h @@ -0,0 +1,56 @@ +// DirectIO support for megacore 64pin devices + +_define_pin(0, PORT_E, 0); +_define_pin(1, PORT_E, 1); +_define_pin(2, PORT_E, 2); +_define_pin(3, PORT_E, 3); +_define_pin(4, PORT_E, 4); +_define_pin(5, PORT_E, 5); +_define_pin(6, PORT_E, 6); +_define_pin(7, PORT_E, 7); +_define_pin(8, PORT_B, 0); +_define_pin(9, PORT_B, 1); +_define_pin(10, PORT_B, 2); +_define_pin(11, PORT_B, 3); +_define_pin(12, PORT_B, 4); +_define_pin(13, PORT_B, 5); +_define_pin(14, PORT_B, 6); +_define_pin(15, PORT_B, 7); +_define_pin(16, PORT_G, 3); +_define_pin(17, PORT_G, 4); +_define_pin(18, PORT_D, 0); +_define_pin(19, PORT_D, 1); +_define_pin(20, PORT_D, 2); +_define_pin(21, PORT_D, 3); +_define_pin(22, PORT_D, 4); +_define_pin(23, PORT_D, 5); +_define_pin(24, PORT_D, 6); +_define_pin(25, PORT_D, 7); +_define_pin(26, PORT_G, 0); +_define_pin(27, PORT_G, 1); +_define_pin(28, PORT_C, 0); +_define_pin(29, PORT_C, 1); +_define_pin(30, PORT_C, 2); +_define_pin(31, PORT_C, 3); +_define_pin(32, PORT_C, 4); +_define_pin(33, PORT_C, 5); +_define_pin(34, PORT_C, 6); +_define_pin(35, PORT_C, 7); +_define_pin(36, PORT_G, 2); +_define_pin(37, PORT_A, 7); +_define_pin(38, PORT_A, 6); +_define_pin(39, PORT_A, 5); +_define_pin(40, PORT_A, 4); +_define_pin(41, PORT_A, 3); +_define_pin(42, PORT_A, 2); +_define_pin(43, PORT_A, 1); +_define_pin(44, PORT_A, 0); +_define_pin(45, PORT_F, 0); +_define_pin(46, PORT_F, 1); +_define_pin(47, PORT_F, 2); +_define_pin(48, PORT_F, 3); +_define_pin(49, PORT_F, 4); +_define_pin(50, PORT_F, 5); +_define_pin(51, PORT_F, 6); +_define_pin(52, PORT_F, 7); +_define_pin(53, PORT_G, 5); diff --git a/include/ports_avr.h b/include/ports_avr.h index e430513..bd08ee3 100644 --- a/include/ports_avr.h +++ b/include/ports_avr.h @@ -160,6 +160,10 @@ template struct _pins {}; defined(ARDUINO_AVR_ADK) #include "boards/avr/mega.h" +#elif defined(ARDUINO_AVR_ATmega2561) || \ + defined(ARDUINO_AVR_ATmega1281) +#include "boards/avr/megacore64.h" + #elif defined(ARDUINO_AVR_LEONARDO) || \ defined(ARDUINO_AVR_LEONARDO_ETH) || \ defined(ARDUINO_AVR_ESPLORA) || \