Api hal timebase: fix lptim lockups caused by flag clear outside of interrupt (#332)
This commit is contained in:
parent
8b94eff7f9
commit
928bca4eaa
@ -11,6 +11,12 @@
|
||||
#define API_HAL_TIMEBASE_TICK_PER_EPOCH (API_HAL_TIMEBASE_TIMER_MAX / API_HAL_TIMEBASE_CLK_PER_TICK)
|
||||
#define API_HAL_TIMEBASE_MAX_SLEEP (API_HAL_TIMEBASE_TICK_PER_EPOCH - 1)
|
||||
|
||||
#ifdef API_HAL_TIMEBASE_DEBUG
|
||||
#include <stm32wbxx_ll_gpio.h>
|
||||
#define LED_GREEN_PORT GPIOA
|
||||
#define LED_GREEN_PIN LL_GPIO_PIN_2
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
// Sleep control
|
||||
volatile uint16_t insomnia;
|
||||
@ -98,7 +104,13 @@ static inline uint32_t api_hal_timebase_sleep(TickType_t expected_idle_ticks) {
|
||||
|
||||
HAL_SuspendTick();
|
||||
// Go to stop2 mode
|
||||
#ifdef API_HAL_TIMEBASE_DEBUG
|
||||
LL_GPIO_SetOutputPin(LED_GREEN_PORT, LED_GREEN_PIN);
|
||||
#endif
|
||||
api_hal_power_deep_sleep();
|
||||
#ifdef API_HAL_TIMEBASE_DEBUG
|
||||
LL_GPIO_ResetOutputPin(LED_GREEN_PORT, LED_GREEN_PIN);
|
||||
#endif
|
||||
|
||||
HAL_ResumeTick();
|
||||
|
||||
@ -111,10 +123,7 @@ static inline uint32_t api_hal_timebase_sleep(TickType_t expected_idle_ticks) {
|
||||
|
||||
// Store and clear interrupt flags
|
||||
// we don't want handler to be called after renabling IRQ
|
||||
bool cmpm_flag = LL_LPTIM_IsActiveFlag_CMPM(API_HAL_TIMEBASE_TIMER);
|
||||
if (cmpm_flag) LL_LPTIM_ClearFLAG_CMPM(API_HAL_TIMEBASE_TIMER);
|
||||
bool arrm_flag = LL_LPTIM_IsActiveFlag_ARRM(API_HAL_TIMEBASE_TIMER);
|
||||
if (arrm_flag) LL_LPTIM_ClearFLAG_ARRM(API_HAL_TIMEBASE_TIMER);
|
||||
|
||||
// Calculate and set next wakeup compare value
|
||||
const uint16_t next_cmp = (after_tick + 1) * API_HAL_TIMEBASE_CLK_PER_TICK;
|
||||
|
@ -14,6 +14,11 @@ FLASH_ADDRESS = 0x08000000
|
||||
CFLAGS += -DNO_BOOTLOADER
|
||||
endif
|
||||
|
||||
API_HAL_TIMEBASE_DEBUG ?= 0
|
||||
ifeq ($(API_HAL_TIMEBASE_DEBUG), 1)
|
||||
CFLAGS += -DAPI_HAL_TIMEBASE_DEBUG
|
||||
endif
|
||||
|
||||
OPENOCD_OPTS = -f interface/stlink.cfg -c "transport select hla_swd" -f ../debug/stm32wbx.cfg -c "stm32wbx.cpu configure -rtos auto" -c "init"
|
||||
BOOT_CFLAGS = -DBOOT_ADDRESS=$(BOOT_ADDRESS) -DFW_ADDRESS=$(FW_ADDRESS) -DOS_OFFSET=$(OS_OFFSET)
|
||||
MCU_FLAGS = -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard
|
||||
|
Loading…
Reference in New Issue
Block a user