aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--os/hal/dox/icu.dox2
-rw-r--r--os/hal/include/icu.h6
-rw-r--r--os/hal/platforms/STM32/TIMv1/icu_lld.c1
-rw-r--r--readme.txt2
4 files changed, 9 insertions, 2 deletions
diff --git a/os/hal/dox/icu.dox b/os/hal/dox/icu.dox
index 1d3fe092e..76506c10a 100644
--- a/os/hal/dox/icu.dox
+++ b/os/hal/dox/icu.dox
@@ -54,6 +54,7 @@
ready -> waiting [label="\nicuEnable()"];
waiting -> active [label="\nStart Front"];
waiting -> ready [label="\nicuDisable()"];
+ waiting -> waiting [label="\nStop Front"];
active -> idle [label="\nStop Front\n>width_cb<"];
active -> ready [label="\nicuDisable()\nicuDisableI()"];
idle -> active [label="\nStart Front\n>period_cb<"];
@@ -83,6 +84,7 @@
ready -> waiting [label="\nicuEnable()"];
waiting -> active [label="\nStart Front"];
waiting -> ready [label="\nicuDisable()"];
+ waiting -> waiting [label="\nStop Front"];
active -> idle [label="\nStop Front\n>width_cb<"];
active -> ready [label="\nicuDisable()\nicuDisableI()"];
idle -> active [label="\nStart Front\n>period_cb<"];
diff --git a/os/hal/include/icu.h b/os/hal/include/icu.h
index ef42470cb..7db895fbf 100644
--- a/os/hal/include/icu.h
+++ b/os/hal/include/icu.h
@@ -140,8 +140,10 @@ typedef void (*icucallback_t)(ICUDriver *icup);
* @notapi
*/
#define _icu_isr_invoke_width_cb(icup) { \
- (icup)->state = ICU_IDLE; \
- (icup)->config->width_cb(icup); \
+ if ((icup)->state != ICU_WAITING) { \
+ (icup)->state = ICU_IDLE; \
+ (icup)->config->width_cb(icup); \
+ } \
}
/**
diff --git a/os/hal/platforms/STM32/TIMv1/icu_lld.c b/os/hal/platforms/STM32/TIMv1/icu_lld.c
index b407d33ae..0b1013a23 100644
--- a/os/hal/platforms/STM32/TIMv1/icu_lld.c
+++ b/os/hal/platforms/STM32/TIMv1/icu_lld.c
@@ -614,6 +614,7 @@ void icu_lld_stop(ICUDriver *icup) {
*/
void icu_lld_enable(ICUDriver *icup) {
+ icup->tim->EGR |= STM32_TIM_EGR_UG;
icup->tim->SR = 0; /* Clear pending IRQs (if any). */
if (icup->config->channel == ICU_CHANNEL_1) {
if (icup->config->period_cb != NULL)
diff --git a/readme.txt b/readme.txt
index f2e2b9d19..075376917 100644
--- a/readme.txt
+++ b/readme.txt
@@ -89,6 +89,8 @@
*****************************************************************************
*** 2.7.0 ***
+- FIX: Fixed spurious callback in ICU driver (bug #461)(backported to 2.6.3
+ and 2.4.6).
- FIX: Fixed compile error in STM32F0xx ADC driver when STM32F0XX_LD devices
are selected (bug #460)(backported to 2.6.3).
- FIX: Fixed race condition in STM32 SDC driver (bug #458)(backported