From 8571128bc7cac43269ce57b70020841d8e86ff6c Mon Sep 17 00:00:00 2001 From: wb Date: Mon, 22 Jul 2024 16:48:32 +0800 Subject: [PATCH] Fixed MCU running exception when CH_CFG_ST_TIMEDELTA is defined as 2 --- os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.c | 10 +++++----- os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.h | 6 ++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.c b/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.c index 80ecc755b9..88aedefd81 100644 --- a/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.c +++ b/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.c @@ -243,22 +243,22 @@ void st_lld_serve_interrupt(void) { #if OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING #if ST_LLD_NUM_ALARMS > 1 if ((sr & TIM_SR_CC2IF) != 0U) { - if (st_callbacks[2] != NULL) { - st_callbacks[0](1U); + if (st_callbacks[1] != NULL) { + st_callbacks[1](1U); } } #endif #if ST_LLD_NUM_ALARMS > 2 if ((sr & TIM_SR_CC3IF) != 0U) { if (st_callbacks[2] != NULL) { - st_callbacks[1](2U); + st_callbacks[2](2U); } } #endif #if ST_LLD_NUM_ALARMS > 3 if ((sr & TIM_SR_CC4IF) != 0U) { - if (st_callbacks[2] != NULL) { - st_callbacks[2](3U); + if (st_callbacks[3] != NULL) { + st_callbacks[3](3U); } } #endif diff --git a/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.h b/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.h index 4ef27ace13..fafefa5f1d 100644 --- a/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.h +++ b/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.h @@ -225,8 +225,10 @@ static inline void st_lld_start_alarm(systime_t abstime) { WB32_ST_TIM->SR = 0; #if ST_LLD_NUM_ALARMS == 1 WB32_ST_TIM->DIER = WB32_TIM_DIER_CC1IE; + WB32_ST_TIM->CCER = WB32_TIM_CCER_CC1E; #else WB32_ST_TIM->DIER |= WB32_TIM_DIER_CC1IE; + WB32_ST_TIM->CCER |= WB32_TIM_CCER_CC1E; #endif } @@ -239,8 +241,10 @@ static inline void st_lld_stop_alarm(void) { #if ST_LLD_NUM_ALARMS == 1 WB32_ST_TIM->DIER = 0U; + WB32_ST_TIM->CCER = 0U; #else WB32_ST_TIM->DIER &= ~WB32_TIM_DIER_CC1IE; + WB32_ST_TIM->CCER &= ~WB32_TIM_CCER_CC1E; #endif } @@ -300,6 +304,7 @@ static inline void st_lld_start_alarm_n(unsigned alarm, systime_t abstime) { WB32_ST_TIM->CCR[alarm] = (uint32_t)abstime; WB32_ST_TIM->SR = 0; WB32_ST_TIM->DIER |= (WB32_TIM_DIER_CC1IE << alarm); + WB32_ST_TIM->DIER |= (WB32_TIM_CCER_CC1E << (alarm * 4)); } /** @@ -314,6 +319,7 @@ static inline void st_lld_start_alarm_n(unsigned alarm, systime_t abstime) { static inline void st_lld_stop_alarm_n(unsigned alarm) { WB32_ST_TIM->DIER &= ~(WB32_TIM_DIER_CC1IE << alarm); + WB32_ST_TIM->DIER &= ~(WB32_TIM_CCER_CC1E << (alarm * 4)); } /**