263 lines
9.3 KiB
C
263 lines
9.3 KiB
C
/** ##########################################################################
|
||
** 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中定义
|
||
#ifdef LOGICTIME_CONTEXT_ENABLE
|
||
#define LOGICTIME_SR_ALLOC() CPU_SR_ALLOC()
|
||
#define LOGICTIME_CRITICAL_ENTER() ENTER_CRITICAL()
|
||
#define LOGICTIME_CRITICAL_EXIT() EXIT_CRITICAL()
|
||
#else
|
||
#define LOGICTIME_SR_ALLOC()
|
||
#define LOGICTIME_CRITICAL_ENTER()
|
||
#define LOGICTIME_CRITICAL_EXIT()
|
||
#endif
|
||
|
||
/*---------------------------------------------------------------------------
|
||
- 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_SR_ALLOC(); /*PCLINT_ERROS*/ /*lint !e717 */ /*do while*/ /*PRQA S 2981*/
|
||
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_SR_ALLOC(); /*PCLINT_ERROS*/ /*lint !e717 */ /*do while*/ /*PRQA S 2981*/
|
||
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_SR_ALLOC(); /*PCLINT_ERROS*/ /*lint !e717 */ /*do while*/ /*PRQA S 2981*/
|
||
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 */
|