From 3d7b366fd0fa5cb43743b58661c1027cd2623350 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 7 Jul 2018 09:50:34 +0000 Subject: Fixed bug #957. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12138 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c | 6 +++--- os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.h | 4 ++-- readme.txt | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c b/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c index 3dda5fbea..0de6ac49d 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c @@ -819,7 +819,7 @@ void gpt_lld_stop(GPTDriver *gptp) { */ void gpt_lld_start_timer(GPTDriver *gptp, gptcnt_t interval) { - gptp->tim->ARR = (uint32_t)interval; /* Time constant. */ + gptp->tim->ARR = (uint32_t)(interval - 1U); /* Time constant. */ gptp->tim->EGR = STM32_TIM_EGR_UG; /* Update event. */ gptp->tim->CNT = 0; /* Reset counter. */ @@ -861,9 +861,9 @@ void gpt_lld_stop_timer(GPTDriver *gptp) { */ void gpt_lld_polled_delay(GPTDriver *gptp, gptcnt_t interval) { - gptp->tim->ARR = (uint32_t)interval; /* Time constant. */ + gptp->tim->ARR = (uint32_t)(interval - 1U); /* Time constant. */ gptp->tim->EGR = STM32_TIM_EGR_UG; /* Update event. */ - gptp->tim->SR = 0; /* Clear pending IRQs. */ + gptp->tim->SR = 0; /* Clear pending IRQs. */ gptp->tim->CR1 = STM32_TIM_CR1_OPM | STM32_TIM_CR1_URS | STM32_TIM_CR1_CEN; while (!(gptp->tim->SR & STM32_TIM_SR_UIF)) ; diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.h b/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.h index f453243cb..df6645c12 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.h +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.h @@ -542,7 +542,7 @@ struct GPTDriver { * @notapi */ #define gpt_lld_change_interval(gptp, interval) \ - ((gptp)->tim->ARR = (uint32_t)(interval)) + ((gptp)->tim->ARR = (uint32_t)((interval) - 1U)) /** * @brief Returns the interval of GPT peripheral. @@ -553,7 +553,7 @@ struct GPTDriver { * * @notapi */ -#define gpt_lld_get_interval(gptp) ((gptcnt_t)(gptp)->tim->ARR) +#define gpt_lld_get_interval(gptp) ((gptcnt_t)((gptp)->tim->ARR + 1U)) /** * @brief Returns the counter value of GPT peripheral. diff --git a/readme.txt b/readme.txt index 002550eb1..59bd7f62c 100644 --- a/readme.txt +++ b/readme.txt @@ -138,6 +138,8 @@ - EX: Updated LIS302DL to 1.1.0 (backported to 18.2.1). - EX: Updated LPS25H to 1.1.0 (backported to 18.2.1). - EX: Updated LSM303DLHC to 1.1.0 (backported to 18.2.1). +- HAL: Fixed invalid period calculation in STM32 GPT driver (bug #957) + (backported to 18.2.2 and 17.6.5). - HAL: Fixed missing USART7/8 definitions in STM32F0 HAL (bug #956)(backported to 18.2.2). - LIB: Fixed heap allocation issue (bug #955)(backported to 18.2.2 and 17.6.5). -- cgit v1.2.3