diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 44e5a9a45..32ee32529 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -131,15 +131,23 @@ void noInterrupts(void); int digitalPinToInterrupt(pin_size_t pin); +// These defines can be overridden by variant.h if implemented #define digitalPinToPort(x) (x) #define digitalPinToBitMask(x) (x) #define portOutputRegister(x) (x) #define portInputRegister(x) (x) +const struct device *digitalPinToPortDevice(pin_size_t pinNumber); +int digitalPinToPinIndex(pin_size_t pinNumber); + #if defined(CONFIG_PWM) || defined(CONFIG_DAC) void analogWriteResolution(int bits); #endif +#if defined(__arm__) +#define F_CPU (SystemCoreClock) +#endif + #include #if !defined(LED_BUILTIN) && defined(ZARD_LED_BUILTIN) diff --git a/cores/arduino/zephyrCommon.cpp b/cores/arduino/zephyrCommon.cpp index 894b6e8fc..8e8aa5052 100644 --- a/cores/arduino/zephyrCommon.cpp +++ b/cores/arduino/zephyrCommon.cpp @@ -218,6 +218,18 @@ void yield(void) { k_yield(); } +const struct device *digitalPinToPortDevice(pin_size_t pinNumber) { + RETURN_ON_INVALID_PIN(pinNumber, nullptr); + + return arduino_pins[pinNumber].port; +} + +int digitalPinToPinIndex(pin_size_t pinNumber) { + RETURN_ON_INVALID_PIN(pinNumber, -1); + + return arduino_pins[pinNumber].pin; +} + /* * The ACTIVE_HIGH flag is set so that A low physical * level on the pin will be interpreted as value 0.