/*****************************************************************************/ /** * Description: A simplified version of timesync for datalink 814 (Dijian) * * Date: 2021-12-04 16:32 * LastEditors: Fan Hao * LastEditTime: 2022-07-06 16:32 * Revisions: Rev 0.0 * History: * [2022-07-06]: Initial version. * [2021-12-04]: Initial version. * * Copyright(c) 2021 Beijing Institute of Technology. * Lab of Communication and Networking * ******************************************************************************/ #ifndef TIME_CTRL_H_ #define TIME_CTRL_H_ /***************************** Include Files *********************************/ #include /************************** Constant Definitions *****************************/ #define COUNTE_FRAC_MAX 500000 // how many 10ns in a 5ms /***************** Macros (Inline Functions) Definitions *********************/ /**************************** Type Definitions *******************************/ typedef enum { TM_ADJ_NONE = 0, TM_ADJ_ADD = 1, TM_ADJ_SET = 2 } TIMECTRL_ADJ_TYPE; typedef uint32_t TIME_FRAC; typedef uint32_t TIME_INT; typedef struct { /* 5ms each LSB */ TIME_INT int_part; /* 10ns each LSB */ TIME_FRAC frac_part; } TIME_WORD; typedef struct { uintptr_t baseAddr; uint32_t reset; //time for reset (unit: us) } TIMECTRL_CONFIG; typedef struct { TIMECTRL_CONFIG config; uint32_t modelVer; } TIMECTRL_INST; /************************** Function Prototypes ******************************/ int32_t TimeCtrl_Init(TIMECTRL_INST **instPtr, TIMECTRL_CONFIG *config); uint32_t TimeCtrl_GetVersion(TIMECTRL_INST *instPtr); void TimeCtrl_Destroy(TIMECTRL_INST *instPtr); void TimeCtrl_Reset(TIMECTRL_INST *instPtr); void TimeCtrl_ResetLow(TIMECTRL_INST *instPtr); void TimeCtrl_ResetHigh(TIMECTRL_INST *instPtr); TIME_INT TimeCtrl_GetIntCnt(TIMECTRL_INST *instPtr); TIME_FRAC TimeCtrl_GetFracCnt(TIMECTRL_INST *instPtr); void TimeCtrl_GetCurrentTime(TIMECTRL_INST *instPtr, TIME_WORD* tmWord); void TimeCtrl_GetCurrentStep(TIMECTRL_INST *instPtr, TIME_FRAC* tmFrac); void TimeCtrl_SetOptimizeStep(TIMECTRL_INST *instPtr, TIME_FRAC* tmFrac); void TimeCtrl_TimeAdjust(TIMECTRL_INST *instPtr, const TIME_WORD* tmWord, TIMECTRL_ADJ_TYPE type); void TimeCtrl_CalculateTimeGap(const TIME_WORD *a, const TIME_WORD *b, TIME_WORD *gap); #endif /* TIME_SYNC_H_ */