97 lines
2.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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的选择信号;
3b000:表示选择gmac_pps;
3b001:表示选择gmac1_pps;
3b011:表示选择cpri_gmac_pps;
3b100:表示选择pet_pps;
3b101:表示选择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