97 lines
2.5 KiB
C
97 lines
2.5 KiB
C
#ifndef _STC_TIMER_H_
|
||
#define _STC_TIMER_H_
|
||
|
||
#include "ucp_drv_common.h"
|
||
|
||
#define TDD_TMR_POINT_MAX (200) //(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;
|
||
|
||
void rfm_stc_init();
|
||
|
||
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_pp1s_out_set();
|
||
|
||
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
|