STM32: fix us ticker set event timestamp

While we are handling new timestamp, disable ticker's interrupt.
pull/4632/head
Martin Kojtal 2017-06-26 15:20:54 +01:00
parent cbfb234f07
commit 0591b2bcd4
1 changed files with 4 additions and 2 deletions

View File

@ -44,14 +44,16 @@ uint32_t us_ticker_read()
void us_ticker_set_interrupt(timestamp_t timestamp) void us_ticker_set_interrupt(timestamp_t timestamp)
{ {
TimMasterHandle.Instance = TIM_MST; TimMasterHandle.Instance = TIM_MST;
// disable IT while we are handling the correct timestamp
__HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1);
// Set new output compare value // Set new output compare value
__HAL_TIM_SET_COMPARE(&TimMasterHandle, TIM_CHANNEL_1, (uint32_t)timestamp); __HAL_TIM_SET_COMPARE(&TimMasterHandle, TIM_CHANNEL_1, (uint32_t)timestamp);
// Enable IT
__HAL_TIM_ENABLE_IT(&TimMasterHandle, TIM_IT_CC1);
// Check if timestamp has already passed, and if so, set the event immediately // Check if timestamp has already passed, and if so, set the event immediately
if ((int32_t)(timestamp - TIM_MST->CNT) <= 0) { if ((int32_t)(timestamp - TIM_MST->CNT) <= 0) {
LL_TIM_GenerateEvent_CC1(TimMasterHandle.Instance); LL_TIM_GenerateEvent_CC1(TimMasterHandle.Instance);
} }
// Enable IT
__HAL_TIM_ENABLE_IT(&TimMasterHandle, TIM_IT_CC1);
} }
void us_ticker_disable_interrupt(void) void us_ticker_disable_interrupt(void)