From 48d50ebb7928d9edc60362887a76b8ae99935f12 Mon Sep 17 00:00:00 2001 From: James Foster Date: Sat, 14 Nov 2020 20:16:11 -0800 Subject: [PATCH 1/2] Add macro for `portInputRegister()` --- .../TestSomething/test/outputRegister.cpp | 17 +++++++++++++++++ cpp/arduino/Godmode.h | 1 + 2 files changed, 18 insertions(+) diff --git a/SampleProjects/TestSomething/test/outputRegister.cpp b/SampleProjects/TestSomething/test/outputRegister.cpp index fa12255f..7bc1fb20 100644 --- a/SampleProjects/TestSomething/test/outputRegister.cpp +++ b/SampleProjects/TestSomething/test/outputRegister.cpp @@ -21,6 +21,23 @@ unittest(portOutputRegister) *(ss_pin_reg) |= ss_pin_mask; // clear SS assertEqual((int) 1, (int) *ss_pin_reg); // verify value } + +unittest(portInputRegister) +{ + uint8_t ss_pin = 12; + uint8_t ss_port = digitalPinToPort(ss_pin); + assertEqual(12, ss_port); + uint8_t *ss_pin_reg = portInputRegister(ss_port); + assertEqual(GODMODE()->pMmapPort(ss_port), ss_pin_reg); + uint8_t ss_pin_mask = digitalPinToBitMask(ss_pin); + assertEqual(1, ss_pin_mask); + + assertEqual((int) 1, (int) *ss_pin_reg); // verify initial value + *(ss_pin_reg) &= ~ss_pin_mask; // set SS + assertEqual((int) 0, (int) *ss_pin_reg); // verify value + *(ss_pin_reg) |= ss_pin_mask; // clear SS + assertEqual((int) 1, (int) *ss_pin_reg); // verify value +} #endif unittest_main() diff --git a/cpp/arduino/Godmode.h b/cpp/arduino/Godmode.h index b748a148..642cac71 100644 --- a/cpp/arduino/Godmode.h +++ b/cpp/arduino/Godmode.h @@ -182,6 +182,7 @@ inline void noTone(uint8_t _pin) {} #if defined(__AVR__) #define digitalPinToBitMask(pin) (1) #define digitalPinToPort(pin) (pin) + #define portInputRegister(port) (GODMODE()->pMmapPort(port)) #define portOutputRegister(port) (GODMODE()->pMmapPort(port)) #else // we don't (yet) support other boards From 2d2eece82499ead9f71f23bd9d2b37e628915a8c Mon Sep 17 00:00:00 2001 From: James Foster Date: Sat, 14 Nov 2020 22:30:53 -0800 Subject: [PATCH 2/2] Update `CHANGELOG.md` --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1e3a9ab..43be129d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] ### Added - `arduino_ci_remote.rb` CLI switch `--skip-examples-compilation` -- Add support for `diditalPinToPort()`, `digitalPinToBitMask()`, and `portOutputRegister()` +- Add support for `diditalPinToPort()`, `digitalPinToBitMask()`, `portOutputRegister()`, and `portInputRegister()` - `CppLibrary.header_files` to find header files - `LibraryProperties` to read metadata from Arduino libraries - `CppLibrary.library_properties_path`, `CppLibrary.library_properties?`, `CppLibrary.library_properties` to expose library properties of a Cpp library