summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal/systick.c
diff options
context:
space:
mode:
Diffstat (limited to 'stmhal/systick.c')
-rw-r--r--stmhal/systick.c48
1 files changed, 8 insertions, 40 deletions
diff --git a/stmhal/systick.c b/stmhal/systick.c
index eda39c7888..d6c914886a 100644
--- a/stmhal/systick.c
+++ b/stmhal/systick.c
@@ -2,47 +2,15 @@
#include "misc.h"
#include "systick.h"
-void sys_tick_init(void) {
- // SysTick_Config is now called from HAL_RCC_ClockConfig, which is called
- // from SystemClock_Config
-
- // SysTick_Config sets the SysTick_IRQn to be the lowest priority, but
- // we want it to be the highest priority, so fix things here.
- HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
-}
-
-void sys_tick_delay_ms(uint32_t delay_ms) {
- sys_tick_wait_at_least(HAL_GetTick(), delay_ms);
-}
-
-// waits until at least delay_ms milliseconds have passed from the sampling of stc
-// handles overflow properl
-// assumes stc was taken from HAL_GetTick() some time before calling this function
-// eg stc <= HAL_GetTick() for the case of no wrap around of HAL_GetTick()
-void sys_tick_wait_at_least(uint32_t stc, uint32_t delay_ms) {
- // stc_wait is the value of HAL_GetTick() that we wait for
- uint32_t stc_wait = stc + delay_ms;
- if (stc_wait < stc) {
- // stc_wait wrapped around
- while (stc <= HAL_GetTick() || HAL_GetTick() < stc_wait) {
- __WFI(); // enter sleep mode, waiting for interrupt
- }
- } else {
- // stc_wait did not wrap around
- while (stc <= HAL_GetTick() && HAL_GetTick() < stc_wait) {
- __WFI(); // enter sleep mode, waiting for interrupt
- }
- }
+bool sys_tick_has_passed(uint32_t start_tick, uint32_t delay_ms) {
+ return HAL_GetTick() - start_tick >= delay_ms;
}
-bool sys_tick_has_passed(uint32_t stc, uint32_t delay_ms) {
- // stc_wait is the value of HAL_GetTick() that we wait for
- uint32_t stc_wait = stc + delay_ms;
- if (stc_wait < stc) {
- // stc_wait wrapped around
- return !(stc <= HAL_GetTick() || HAL_GetTick() < stc_wait);
- } else {
- // stc_wait did not wrap around
- return !(stc <= HAL_GetTick() && HAL_GetTick() < stc_wait);
+// waits until at least delay_ms milliseconds have passed from the sampling of
+// startTick. Handles overflow properly. Assumes stc was taken from
+// HAL_GetTick() some time before calling this function.
+void sys_tick_wait_at_least(uint32_t start_tick, uint32_t delay_ms) {
+ while (!sys_tick_has_passed(start_tick, delay_ms)) {
+ __WFI(); // enter sleep mode, waiting for interrupt
}
}