95 lines
2.4 KiB
C
Raw Normal View History

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的选择信号;
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();
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