From be7e1271d224d2e04f18bb68355ed8771b384cf8 Mon Sep 17 00:00:00 2001 From: Gianfranco Date: Sun, 16 Jul 2023 08:16:21 +0200 Subject: [PATCH] add fix #2071 modification also to getter --- cores/arduino/HardwareTimer.h | 2 +- libraries/SrcWrapper/src/HardwareTimer.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cores/arduino/HardwareTimer.h b/cores/arduino/HardwareTimer.h index c019e44043..17fd4a14fb 100644 --- a/cores/arduino/HardwareTimer.h +++ b/cores/arduino/HardwareTimer.h @@ -113,7 +113,7 @@ class HardwareTimer { uint32_t getPrescaleFactor(); void setOverflow(uint64_t val, TimerFormat_t format = TICK_FORMAT); // set AutoReload register depending on format provided - uint32_t getOverflow(TimerFormat_t format = TICK_FORMAT); // return overflow depending on format provided + uint64_t getOverflow(TimerFormat_t format = TICK_FORMAT); // return overflow depending on format provided void setPWM(uint32_t channel, PinName pin, uint32_t frequency, uint32_t dutycycle, callback_function_t PeriodCallback = nullptr, callback_function_t CompareCallback = nullptr); // Set all in one command freq in HZ, Duty in percentage. Including both interrupt. void setPWM(uint32_t channel, uint32_t pin, uint32_t frequency, uint32_t dutycycle, callback_function_t PeriodCallback = nullptr, callback_function_t CompareCallback = nullptr); diff --git a/libraries/SrcWrapper/src/HardwareTimer.cpp b/libraries/SrcWrapper/src/HardwareTimer.cpp index 3b5f2e2827..69adea0de1 100644 --- a/libraries/SrcWrapper/src/HardwareTimer.cpp +++ b/libraries/SrcWrapper/src/HardwareTimer.cpp @@ -483,18 +483,18 @@ void HardwareTimer::setPrescaleFactor(uint32_t prescaler) * MICROSEC_FORMAT: return number of microsecondes for overflow * HERTZ_FORMAT: return frequency in hertz for overflow */ -uint32_t HardwareTimer::getOverflow(TimerFormat_t format) +uint64_t HardwareTimer::getOverflow(TimerFormat_t format) { // Hardware register correspond to period count-1. Example ARR register value 9 means period of 10 timer cycle uint32_t ARR_RegisterValue = LL_TIM_GetAutoReload(_timerObj.handle.Instance); uint32_t Prescalerfactor = LL_TIM_GetPrescaler(_timerObj.handle.Instance) + 1; - uint32_t return_value; + uint64_t return_value; switch (format) { case MICROSEC_FORMAT: - return_value = (uint32_t)(((ARR_RegisterValue + 1) * Prescalerfactor * 1000000.0) / getTimerClkFreq()); + return_value = (uint64_t)(((ARR_RegisterValue + 1) * Prescalerfactor * 1000000.0) / getTimerClkFreq()); break; case HERTZ_FORMAT: - return_value = (uint32_t)(getTimerClkFreq() / ((ARR_RegisterValue + 1) * Prescalerfactor)); + return_value = (uint64_t)(getTimerClkFreq() / ((ARR_RegisterValue + 1) * Prescalerfactor)); break; case TICK_FORMAT: default :