1
0
Fork 0
CANopenNode/stack/eCos/CO_PollingTimer.c
2015-07-25 14:03:15 +02:00

88 lines
2.3 KiB
C

//===========================================================================
/// \file CO_PollingTimer.c
/// \author Uwe Kindler (UK)
/// \date 2013/08/28
/// \brief Implementation of simple polling timer
//===========================================================================
//===========================================================================
// INCLUDES
//===========================================================================
#include <cyg/kernel/kapi.h>
#include "CO_PollingTimer.h"
#include "ecos_helper.h"
//===========================================================================
cyg_uint64 CO_TmrGetMilliSec(void)
{
return convertTicksToMs(cyg_current_time());
}
//===========================================================================
cyg_uint64 CO_TmrGetElapsedMsecs(cyg_uint64 LastTimeStamp)
{
return CO_TmrGetMilliSec() - LastTimeStamp;
}
//===========================================================================
bool CO_TmrIsExpired(cyg_uint64 LastTimeStamp)
{
cyg_uint64 dwTimeNow = CO_TmrGetMilliSec();
cyg_uint64 dwTimestamp = (LastTimeStamp + 1);
if (dwTimeNow > dwTimestamp)
{
if ((dwTimeNow - dwTimestamp) < 0x8000000000000000)
{
return true;
}
else
{
return false;
}
}
else // if (dwTimeNow <= dwTimestamp)
{
if ((dwTimestamp - dwTimeNow) > 0x8000000000000000)
{
return true;
}
else
{
return false;
}
} // if (time_now <= timestamp)
}
//===========================================================================
cyg_uint64 CO_TmrStartFrom(cyg_uint64 dwStartTime, cyg_uint64 dwPeriod)
{
cyg_uint64 TimeStamp = dwStartTime + dwPeriod;
// if resulting time stamp is in the past, then we fix the time stamp value
// and move it to now
if (TimeStamp < CO_TmrGetMilliSec())
{
return CO_TmrGetMilliSec();
}
else
{
return TimeStamp;
}
}
//===========================================================================
cyg_uint64 CO_TmrStartFromNow(cyg_uint64 dwPeriod)
{
return CO_TmrGetMilliSec() + dwPeriod;
}
//----------------------------------------------------------------------------
// end of CO_PollingTimer.c