diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c index 3e24bc6..0f199f1 100644 --- a/cores/arduino/wiring_digital.c +++ b/cores/arduino/wiring_digital.c @@ -19,6 +19,7 @@ #include "Arduino.h" #include "pins_arduino.h" #include "mik32_hal_gpio.h" +#include "wiring_LL.h" #ifdef __cplusplus extern "C" { @@ -66,6 +67,26 @@ void pinMode(uint32_t PinNumber, uint32_t PinMode) additionalPinsInit(PinNumber); } +void fastPinMode(uint32_t PinNumber, uint32_t PinMode) +{ + GPIO_TypeDef* port = digitalPinToPort(PinNumber); + HAL_PinsTypeDef pinMask = digitalPinToBitMask(PinNumber); + // set direction + if (PinMode == OUTPUT) + GPIO_OUTPUT_MODE_PIN(port, pinMask); + else + GPIO_INPUT_MODE_PIN(port, pinMask); + + // set pullup + if (PinMode == INPUT_PULLUP) + { + uint8_t pos = PIN_MASK_TO_PIN_NUMBER(pinMask); + if (port == GPIO_0) PIN_SET_PAD_CONFIG(PORT_0_PUPD, pos, HAL_GPIO_PULL_UP); + else if (port == GPIO_1) PIN_SET_PAD_CONFIG(PORT_1_PUPD, pos, HAL_GPIO_PULL_UP); + else PIN_SET_PAD_CONFIG(PORT_2_PUPD, pos, HAL_GPIO_PULL_UP); + } +} + // write pin void digitalWrite(uint32_t PinNumber, uint32_t Val) {