/**
* @file DFM_Time.h
* @brief Driver Function Module: 时钟相关功能
* @details
* 本机精确时钟、上电周期号管理
* 延时功能的实现
* @author GT-BU
* @date 2021.02.20
* @version V1.0
* @copyright TCT
* @par 修改日志
* <table>
* <tr><th>Date        <th>Version  <th>Author     <th>Description
* <tr><td>2021.02.01  <td>V1.0     <td>GT-BU      <td>创建初始版本
* </table>
*/
#ifndef DFM_TIME_H
#define DFM_TIME_H
#include "CM_Types.h"
#include "CM_Atomic.h"
#ifdef __cplusplus
extern "C"
{
#endif
#include "DFM_Time.h"
#include "CM_Time.h"
#define NOW_USED_TIME ((CM_GetTick()-g_CycTick)/1000u)


    extern  CM_ATOMIC CM_UINT64 g_CycTick;  /**< CPU精确时钟 */
    extern  CM_ATOMIC CM_INT64 g_CycBaseTick; /**< 周期运行基准时间 */
    extern  CM_ATOMIC CM_UINT64 g_UTCBaseTick; /* UTC基准时间 -us*/
    extern CM_UINT32 g_MSCP_BirthCount;
    /* 延时至给定时刻 ns */
    CM_UINT64 DFM_WaitUntill(IN CM_UINT64 tarTick);

    CM_UINT64 DFM_GetCycTick(void);
    /**
    * @brief 获取进入周期运行距今的时间
    * @return 从系统首次进入周期运行值调用时刻经过的时间，单位：100us
    */
    CM_UINT64 DFM_GetUTCRelativeTick(void);

    /**
    * @brief 获取上电周期号
    * @return 本板卡从上电至被调用时刻的周期号
    * @note 上电周期号只与本板卡上电时间有关，固定周期自增，不受其他任何影响。
    */
    CM_UINT32 DFM_GetBirthCount(void);

    /**
    * @brief 获取精确上电时间
    * @return 系统上电至调用时刻的s数
    * @details 从系统上电开始计时，不受时钟同步等操作的影响。
    */
    CM_UINT64 CM_GetSecTick(void);

    /**
    * @brief 获取上电周期号
    * @return 上电完成至调用时刻的周期数
    * @details 从1开始，不受时钟同步等的影响
    */
    CM_UINT32 DFM_GetBirthCount(void);
#ifdef __cplusplus
}
#endif
#endif
