Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: SPIne CH_Communicatuin_Test CH_Communicatuin_Test2 MCP_SPIne ... more
Fork of mbed-dev-f303 by
Diff: targets/TARGET_STM/us_ticker_32b.c
- Revision:
- 174:b96e65c34a4d
- Parent:
- 168:9672193075cf
--- a/targets/TARGET_STM/us_ticker_32b.c Fri Sep 15 14:59:18 2017 +0100
+++ b/targets/TARGET_STM/us_ticker_32b.c Mon Oct 02 15:33:19 2017 +0100
@@ -23,49 +23,44 @@
TIM_HandleTypeDef TimMasterHandle;
-static int us_ticker_inited = 0;
-
void us_ticker_init(void)
{
- if (us_ticker_inited) return;
- us_ticker_inited = 1;
-
- TimMasterHandle.Instance = TIM_MST;
-
- HAL_InitTick(0); // The passed value is not used
+ /* NOTE: assuming that HAL tick has already been initialized! */
}
uint32_t us_ticker_read()
{
- if (!us_ticker_inited) us_ticker_init();
return TIM_MST->CNT;
}
void us_ticker_set_interrupt(timestamp_t timestamp)
{
- TimMasterHandle.Instance = TIM_MST;
+ // NOTE: This function must be called with interrupts disabled to keep our
+ // timer interrupt setup atomic
+
// disable IT while we are handling the correct timestamp
__HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1);
// Set new output compare value
__HAL_TIM_SET_COMPARE(&TimMasterHandle, TIM_CHANNEL_1, (uint32_t)timestamp);
- // Check if timestamp has already passed, and if so, set the event immediately
- if ((int32_t)(timestamp - TIM_MST->CNT) <= 0) {
- LL_TIM_GenerateEvent_CC1(TimMasterHandle.Instance);
- }
// Enable IT
__HAL_TIM_ENABLE_IT(&TimMasterHandle, TIM_IT_CC1);
}
+void us_ticker_fire_interrupt(void)
+{
+ LL_TIM_GenerateEvent_CC1(TimMasterHandle.Instance);
+}
+
+/* NOTE: must be called with interrupts disabled! */
void us_ticker_disable_interrupt(void)
{
- TimMasterHandle.Instance = TIM_MST;
__HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1);
}
+/* NOTE: must be called with interrupts disabled! */
void us_ticker_clear_interrupt(void)
{
- TimMasterHandle.Instance = TIM_MST;
- __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
+ __HAL_TIM_CLEAR_FLAG(&TimMasterHandle, TIM_FLAG_CC1);
}
#endif // !TIM_MST_16BIT
