Browse Source

update:完善luat_rtos的timer

alienwalker 3 years ago
parent
commit
c06eb9b333

+ 7 - 0
application/src/luat_rtos_air105.c

@@ -61,6 +61,13 @@ int luat_start_rtos_timer(void *timer, uint32_t ms, uint8_t is_repeat)
 	return Timer_StartMS(timer, ms, is_repeat);
 }
 
+int luat_rtos_timer_start(void *timer, uint32_t timeout, uint8_t repeat, luat_rtos_timer_callback_t callback_fun, void *user_param)
+{
+	Timer_Stop(timer);
+	Timer_SetCallback(timer, callback_fun, user_param);
+	return Timer_StartMS(timer, timeout, repeat);
+}
+
 void luat_stop_rtos_timer(void *timer)
 {
 	Timer_Stop(timer);

+ 8 - 0
bsp/air105/hal/core_timer.c

@@ -322,6 +322,14 @@ uint32_t Timer_NextToRest(void)
 	return TIMM0->TIM[SYS_TIMER_TIM].CurrentValue;
 }
 
+void Timer_SetCallback(Timer_t *Timer, CBFuncEx_t CB, void *Param)
+{
+	uint32_t Critical = OS_EnterCritical();
+	Timer->CallBack = CB;
+	Timer->Param = Param;
+	OS_ExitCritical(Critical);
+}
+
 uint8_t Timer_IsRunning(Timer_t *Timer)
 {
 	if (Timer->Node.next && Timer->Node.prev)

+ 1 - 0
bsp/air105/include/core_timer.h

@@ -45,4 +45,5 @@ void Timer_Release(Timer_t *Timer);
 uint32_t Timer_NextToRest(void);
 uint8_t Timer_IsRunning(Timer_t *Timer);
 void Timer_PrintAll(void);
+void Timer_SetCallback(Timer_t *Timer, CBFuncEx_t CB, void *Param);
 #endif