/*****************************************************************************/ /** * Description: A simplified version of timesync for datalink 814 (Dijian) * * Date: 2023-12-20-04 16:32 * LastEditors: Fan Hao * LastEditTime: 2023-12-20 16:32 * Revisions: Rev 0.0 * History: * [2023-12-20]: 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 TIME_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) } TMC_CONFIG; typedef struct { TMC_CONFIG config; uint32_t modelVer; } TMC_INST; /************************** Function Prototypes ******************************/ int32_t TimeCtrl_Init(TMC_INST **instPtr, TMC_CONFIG *config); uint32_t TimeCtrl_GetVersion(TMC_INST *instPtr); void TimeCtrl_Destroy(TMC_INST *instPtr); void TimeCtrl_Reset(TMC_INST *instPtr); void TimeCtrl_ResetLow(TMC_INST *instPtr); void TimeCtrl_ResetHigh(TMC_INST *instPtr); TIME_INT TimeCtrl_GetIntCnt(TMC_INST *instPtr); TIME_FRAC TimeCtrl_GetFracCnt(TMC_INST *instPtr); void TimeCtrl_GetCurrentTime(TMC_INST *instPtr, TIME_WORD *tmWord); void TimeCtrl_GetCurrentStep(TMC_INST *instPtr, TIME_FRAC *tmFrac); void TimeCtrl_SetOptimizeStep(TMC_INST *instPtr, TIME_FRAC *tmFrac); void TimeCtrl_TimeAdjust(TMC_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_ */