2023-07-13 11:27:03 +08:00
|
|
|
|
#ifndef _STC_TIMER_H_
|
|
|
|
|
#define _STC_TIMER_H_
|
|
|
|
|
|
|
|
|
|
#include "ucp_drv_common.h"
|
|
|
|
|
|
|
|
|
|
#define TDD_TMR_POINT_MAX 500 // 1个TDD周期内,可设置的最多定时点个数
|
|
|
|
|
#define TDD_SLOT_NUM_MAX 10
|
|
|
|
|
|
|
|
|
|
#define STC_RT_PALLADIUM 100000000
|
|
|
|
|
#define STC_RT 1000000000
|
|
|
|
|
|
|
|
|
|
typedef struct _tagStcTimerPoint
|
|
|
|
|
{
|
|
|
|
|
uint32_t pointVal;
|
|
|
|
|
uint32_t lastFlag;
|
|
|
|
|
}stStcTimerPoint;
|
|
|
|
|
|
|
|
|
|
typedef struct _tagStcTimerPara
|
|
|
|
|
{
|
|
|
|
|
uint32_t pClk;
|
|
|
|
|
uint32_t R;
|
|
|
|
|
uint32_t N;
|
|
|
|
|
uint32_t N1;
|
|
|
|
|
uint32_t A;
|
|
|
|
|
uint32_t C;
|
|
|
|
|
uint32_t usR; // us的clk
|
|
|
|
|
uint32_t ctwVal;
|
|
|
|
|
stStcTimerPoint tmrPoint[TDD_TMR_POINT_MAX];
|
|
|
|
|
uint32_t tmrPointNum[TDD_SLOT_NUM_MAX]; // 1个tdd周期内,设置的各个时隙的定时点个数
|
|
|
|
|
uint32_t tmrPointTotalNum; // 1个tdd周期内,设置的定时点总数
|
|
|
|
|
uint32_t slotTddNumMax;
|
|
|
|
|
uint32_t slotPointNum;
|
|
|
|
|
uint32_t curSlotNum; // current slot id
|
|
|
|
|
uint32_t curSlotTmrPointId; // current timer point id of this slot
|
|
|
|
|
uint32_t ctwIntCnt;
|
|
|
|
|
uint32_t todIntCnt;
|
|
|
|
|
uint32_t todLastStcCnt; // 计算tod周期精度使用,记录tod中断来时的时间
|
|
|
|
|
uint32_t ctwSetFinished; // 定时点设置完成
|
|
|
|
|
uint32_t ctwStartFlag; // start set ctw value
|
|
|
|
|
uint32_t apeSlotCallCnt; // 时隙中断中调用定时点任务计数
|
|
|
|
|
}stStcTimerPara;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
stc的选择信号;
|
|
|
|
|
3’b000:表示选择gmac_pps;
|
|
|
|
|
3’b001:表示选择gmac1_pps;
|
|
|
|
|
3’b011:表示选择cpri_gmac_pps;
|
|
|
|
|
3’b100:表示选择pet_pps;
|
|
|
|
|
3’b101:表示选择gps_one_pps_out;
|
|
|
|
|
*/
|
|
|
|
|
typedef enum _tagStcPP1sSrc{
|
|
|
|
|
STC_PP1S_SRC_GMAC = 0,
|
|
|
|
|
STC_PP1S_SRC_GMAC1 = 1,
|
|
|
|
|
STC_PP1S_SRC_CPRI = 3,
|
|
|
|
|
STC_PP1S_SRC_PET = 4,
|
|
|
|
|
STC_PP1S_SRC_GPS = 5
|
|
|
|
|
}numStcPP1sSrc;
|
|
|
|
|
|
2023-09-22 19:47:02 +08:00
|
|
|
|
void rfm_stc_init();
|
2023-07-13 11:27:03 +08:00
|
|
|
|
|
|
|
|
|
uint32_t stc_pclk_init();
|
|
|
|
|
|
|
|
|
|
// 计算最大公约数
|
|
|
|
|
int32_t gcd_stein(uint32_t x, uint32_t y);
|
|
|
|
|
|
|
|
|
|
void stc_timer_init(uint32_t pClk, uint32_t valR);
|
|
|
|
|
void stc_timer_tod_init(uint32_t pClk);
|
|
|
|
|
void stc_pp1s_src_init(uint8_t srcId);
|
|
|
|
|
void stc_timer_para_init(uint32_t pClk, uint32_t valR);
|
|
|
|
|
void stc_timer_local_init();
|
|
|
|
|
void stc_timer0_para_init();
|
|
|
|
|
void stc_timer1_para_init();
|
|
|
|
|
|
|
|
|
|
void stc_timer_sync(int32_t nScsId);
|
|
|
|
|
void stc_timer_set_tmrpoint(stStcTimerPoint* pTmrPoint);
|
|
|
|
|
|
|
|
|
|
void stc_timer_set_next_ctw(int32_t setFlag);
|
|
|
|
|
|
|
|
|
|
void stc_timer_ctwint_init();
|
|
|
|
|
|
|
|
|
|
void stc_timer_todint_init();
|
|
|
|
|
|
|
|
|
|
void stc_timer_ctwint_enable();
|
|
|
|
|
void stc_timer_ctwint_disable();
|
|
|
|
|
|
|
|
|
|
void isr_stc_timer_int();
|
|
|
|
|
|
|
|
|
|
void isr_stc_tod_int();
|
|
|
|
|
|
|
|
|
|
void stc_tod_para_init(uint32_t pClk);
|
|
|
|
|
void stc_timer_set_ctw(uint32_t val);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|