|
|
@@ -32,6 +32,42 @@ u32 shark_get_seconds(void){
|
|
|
return shark_mseconds/1000 + get_system_sleep_time();
|
|
|
}
|
|
|
|
|
|
+void task_ticks_enable(void)
|
|
|
+{
|
|
|
+ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
|
|
|
+ DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
|
|
|
+}
|
|
|
+
|
|
|
+u32 task_ticks_abs(void)
|
|
|
+{
|
|
|
+ return DWT->CYCCNT;
|
|
|
+}
|
|
|
+
|
|
|
+u32 task_ticks_rel(u32 start)
|
|
|
+{
|
|
|
+ u32 ticks = DWT->CYCCNT;
|
|
|
+
|
|
|
+ if (ticks >= start) {
|
|
|
+ return ticks - start;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0xFFFFFFFF - start + ticks + 1;
|
|
|
+}
|
|
|
+
|
|
|
+void task_ticks_delay(u32 ticks)
|
|
|
+{
|
|
|
+ u32 start;
|
|
|
+
|
|
|
+ start = task_ticks_abs();
|
|
|
+ while (task_ticks_rel(start) < ticks);
|
|
|
+}
|
|
|
+
|
|
|
+void task_udelay(u32 delay)
|
|
|
+{
|
|
|
+ task_ticks_delay(delay * (SystemCoreClock / 1000000));
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
static inline void shark_timer_sync(void)
|
|
|
{
|
|
|
shark_task_head.time = shark_timer_head.next->time;
|