255 lines
8.8 KiB
C
Raw Permalink Normal View History

2025-04-26 16:03:23 +08:00
/** ##########################################################################
** Filename : logic_time.c
** Project :
** Module :
** Processor :
** Version : 1.0
** Compiler :
** Date/Time :
** Abstract :
** Contents :
** Note :
**
** (c) Copyright dmdz Co.,Ltd
** --------------------------------------------------------------------------
** R E V I S I O N H I S T O R Y
** --------------------------------------------------------------------------
** Date Ver Author Description
** -20191106- --V01-- --LYJ--- ----
** -20230602- --V1.0-- --mingyea--- ----
** #########################################################################*/
/*---------------------------------------------------------------------------
- I N C L U D E F I L E S
----------------------------------------------------------------------------*/
#include "common_types.h"
#include "logic_timer.h"
#include "cpu.h"
/*---------------------------------------------------------------------------
- D E F I N E S / M A C R O S
----------------------------------------------------------------------------*/
#define LOGICTIME_CONTEXT_ENABLE 1u /*隊列操作時開啟上下文切換*/
//注意上下文切换要在单片机的cpu.h中定义
#define LOGICTIME_CRITICAL_ENTER() System_DisableIrqGlobal()
#define LOGICTIME_CRITICAL_EXIT() System_EnableIrqGlobal()
/*---------------------------------------------------------------------------
- T Y P E D E F I N I T I O N S
----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
- S T A T I C V A R I A B L E S
----------------------------------------------------------------------------*/
static logic_timer_t g_logic_time_tick;
/*---------------------------------------------------------------------------
- G L O B A L V A R I A B L E S
----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
- C O N S T A N T S
----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
- F U N C T I O N P R O T O T Y P E
----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
|Prototype : void logic_timer_tick_init(void)
|Called by : None
|Preconditions : None
|Input parameters : None
|Output parameters : None
|Return value : None
|Description :
----------------------------------------------------------------------------*/
void logic_timer_tick_init (void)
{
LOGICTIME_CRITICAL_ENTER(); /*PCLINT_ERROS*/ /*lint !e717 */ /*do while*/
g_logic_time_tick = 0u;
LOGICTIME_CRITICAL_EXIT(); /*PCLINT_ERROS*/ /*lint !e717 */ /*do while*/
} /* End of function logic_timer_tick_init*/
/*---------------------------------------------------------------------------
|Prototype : void logic_timer_tick_count(void)
|Called by : None
|Preconditions : None
|Input parameters : None
|Output parameters : None
|Return value : None
|Description : ; ;
----------------------------------------------------------------------------*/
void logic_timer_tick_count(void)
{
LOGICTIME_CRITICAL_ENTER(); /*PCLINT_ERROS*/ /*lint !e717 */ /*do while*/
g_logic_time_tick ++; /* Increment the current time */
LOGICTIME_CRITICAL_EXIT(); /*PCLINT_ERROS*/ /*lint !e717 */ /*do while*/
} /* End of function logic_timer_tick_count*/
/*---------------------------------------------------------------------------
|Prototype : void logic_timer_get_tick(void)
|Called by : None
|Preconditions : None
|Input parameters : None
|Output parameters : None
|Return value : None
|Description : tick
----------------------------------------------------------------------------*/
logic_timer_t logic_timer_get_tick(void)
{
logic_timer_t tmp;
LOGICTIME_CRITICAL_ENTER(); /*PCLINT_ERROS*/ /*lint !e717 */ /*do while*/
tmp = g_logic_time_tick; /* Increment the current time */
LOGICTIME_CRITICAL_EXIT(); /*PCLINT_ERROS*/ /*lint !e717 */ /*do while*/
return tmp ; /* Increment the current time */
} /* End of function logic_timer_get_tick*/
/*---------------------------------------------------------------------------
|Prototype : void logic_timer_start(logic_timer_s* delay_cb, void (*p_fun)(void),logic_timer_t delay_tick)
|Called by : None
|Preconditions : None
|Input parameters : None
|Output parameters : None
|Return value : None
|Description : /
----------------------------------------------------------------------------*/
void logic_timer_start(logic_timer_s* delay_cb, void (*p_fun)(void),logic_timer_t delay_tick)
{
delay_cb->current_time = logic_timer_get_tick();
delay_cb->delay_time = delay_tick;
delay_cb->p_func = p_fun;
delay_cb->state = (u8)LOGIC_TIMER_FALSE;
/*delay_cb->abort_en = LOGIC_TIMER_FALSE;*/
} /* End of function logic_timer_start*/
/*---------------------------------------------------------------------------
|Prototype : u8 logic_timer_out(logic_timer_s* delay_cb)
|Called by : None
|Preconditions : None
|Input parameters : None
|Output parameters : None
|Return value : None
|Description :
----------------------------------------------------------------------------*/
u8 logic_timer_out(logic_timer_s* delay_cb)
{
u8 l_result=LOGIC_TIMER_FALSE;
/*
if(delay_cb->abort_en)
return TIME_ABORT;
*/
if(delay_cb->state == (u8)LOGIC_TIMER_FALSE)
{
delay_cb->get_offset_time = logic_timer_get_tick() - delay_cb->current_time;
if ((delay_cb->get_offset_time) >= delay_cb->delay_time)
{
if(delay_cb->p_func != (void*)NULL_POINT)
{
delay_cb->p_func();
}
logic_timer_abort(delay_cb);
l_result = LOGIC_TIMER_TRUE;
/*return LOGIC_TIMER_TRUE;*/
}
else
{
}
}
else
{
}
//return delay_cb->state; /*return TIME_RUNNING;*/
return l_result; /*return TIME_RUNNING;*/
} /* End of function logic_timer_out*/
/*---------------------------------------------------------------------------
|Prototype : void logic_timer_abort(logic_timer_s *delay_cb)
|Called by : None
|Preconditions : None
|Input parameters : None
|Output parameters : None
|Return value : None
|Description :
----------------------------------------------------------------------------*/
void logic_timer_abort(logic_timer_s *delay_cb)
{
/*delay_cb->abort_en = LOGIC_TIMER_TRUE;*/
delay_cb->p_func = (void*)NULL_POINT;
delay_cb->state = (u8)LOGIC_TIMER_TRUE;
} /* End of function logic_timer_abort*/
#if 0
/*---------------------------------------------------------------------------
|Prototype : void logic_timer_tick_start(logic_timer_t *tick_counter, logic_timer_t tick_counts)
|Called by : None
|Preconditions : None
|Input parameters : None
|Output parameters : None
|Return value : None
|Description :
----------------------------------------------------------------------------*/
void logic_timer_tick_start(logic_timer_t *tick_counter, logic_timer_t tick_counts)
{
*tick_counter = tick_counts;
} /* End of function logic_timer_tick_start*/
/*---------------------------------------------------------------------------
|Prototype : u8 logic_timer_tick_time_out(logic_timer_t *tick_counter)
|Called by : None
|Preconditions : None
|Input parameters : None
|Output parameters : None
|Return value : None
|Description :
----------------------------------------------------------------------------*/
u8 logic_timer_tick_time_out(logic_timer_t *tick_counter)
{
u8 l_result;
if(*tick_counter !=0u)
{
(*tick_counter)--;
l_result = LOGIC_TIMER_FALSE; /*PRQA S 4420*/
}
else
{
l_result = LOGIC_TIMER_FALSE; /*PRQA S 4420*/
}
return l_result;
} /* End of function logic_timer_tick_time_out*/
/*---------------------------------------------------------------------------
|Prototype : void logic_timer_tick_abort(logic_timer_t* tick_counter)
|Called by : None
|Preconditions : None
|Input parameters : None
|Output parameters : None
|Return value : None
|Description :
----------------------------------------------------------------------------*/
void logic_timer_tick_abort(logic_timer_t* tick_counter)
{
*tick_counter = 0u;
} /* End of function logic_timer_tick_abort*/
#endif
/* [] END OF FILE */