wiring digital speed optimization #15

Merged
klassents merged 11 commits from v0.5.0_wiringDigital_optimization into v0.5.0 2025-03-17 07:53:29 +03:00
Showing only changes of commit d3b93e55bd - Show all commits

View File

@ -102,12 +102,18 @@ void digitalWrite(uint32_t PinNumber, uint32_t Val)
ErrorMsgHandler("digitalWrite(): pin number exceeds the total number of pins");
return;
}
GPIO_TypeDef* port = digitalPinToPort(PinNumber);
HAL_PinsTypeDef pin = digitalPinToBitMask(PinNumber);
if (digitalPinHasPWM(PinNumber))
// if the pin can use PWM, disable PWM
analogWriteStop(PinNumber);
HAL_GPIO_WritePin(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber), (Val == HIGH) ? GPIO_PIN_HIGH : GPIO_PIN_LOW);
if (Val == HIGH)
GPIO_SET_PIN(port, pin);
else
GPIO_CLEAR_PIN(port, pin);
}
// read pin
@ -118,12 +124,14 @@ int digitalRead(uint32_t PinNumber)
ErrorMsgHandler("digitalRead(): pin number exceeds the total number of pins");
return -1;
}
GPIO_TypeDef* port = digitalPinToPort(PinNumber);
HAL_PinsTypeDef pin = digitalPinToBitMask(PinNumber);
if (digitalPinHasPWM(PinNumber))
// if the pin can use PWM, disable PWM
analogWriteStop(PinNumber);
GPIO_PinState pinState = HAL_GPIO_ReadPin(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber));
return (pinState == GPIO_PIN_LOW) ? LOW : HIGH;
return GPIO_READ_PIN(port, pin);
}
// toggle pin