223 lines
5.1 KiB
C
Raw Normal View History

2023-07-13 11:27:03 +08:00
#ifndef COMMON_INC_PHY_PARA_H_
#define COMMON_INC_PHY_PARA_H_
#include "ucp_drv_common.h"
#define MTIMER_NULL 0xFFFF
#define PHY_SCS_MAX_NUM 4
#define SFN_PERIOD 10000 // 10ms
#define PROTO_SEL_ADDR (0x0A4D7000)
#define PROTO_OPT_ADDR (0x0A4D7004)
#define PHY_PARA_ADDR (0x0A4D7008)
#define PHY_CELL_ADDR (0x0A4D7100)
#define STC_TOD_INT_ADDR (0x0A4D7200)
#define STC_RT_ADDR (0x0A4D7204)
#define STC_CTW_EN_ADDR (0x0A4D7208)
#define CPRI_DELAY_ADDR (0x0A4D7210)
#define CPRI_ADVANCE_ADDR (0x0A4D7214)
#define CPRI_TDD_ADVANCE_ADDR (0x0A4D7218)
#define ARM_SFN_VALID_ADDR (0x0A4D7220) // 0xAA not valid, 0x55 valid
#define ARM_SFN_NUM_ADDR (0x0A4D7224)
#define ARM_SFN_FLIP_ADDR (0x0A4D7228)
#define ARM_LOCK_FLAG_ADDR (0x0A4D722C)
#define ARM_SFN_VALID_FLAG (0x55)
#define ARM_SFN_NOTVALID_FLAG (0xAA)
#define CSU_STOP_CMD_ADDR (0x0A4D7230)
//#define CSU_ADVANCE_US_ADDR (0x0A4D7234)
#define CTC_INT_TYPE_ADDR (0x0A4D7234)
#define CSU_RX_TD_SAMPLE (0x0A4D7238)
#define CSU_TX_ADVANCE_SAMPLE (0x0A4D723C)
#define SERDES_INIT_FLAG_ADDR (0x0A4D7240) // cpri or jesd clk init finished
#define STC_ONEPPS_OUT_ADDR (0x0A4D7244)
#define DDR_MONITOR_ENABLE (0x0A4D7250) // 开始监测ddr性能
#define DDR_MONITOR_CNT (0x0A4D7254)
#define SLOT_NUM_DEBUG_ADDR (0x0A4D7300)
#define APE_INT_INFO_ADDR (0x0A4D7400)
#define PHY_CELL_FLAG 0xAFAFAFAF
#define ARM_SFN_UPDATE_FLAG 0xA5A5A5A5
#define ENABLE_SFNCAL // 使能与arm的帧号校准功能
//#define DISTRIBUTED_BS
//#define INTEGRATION_BS
//#define GPS_PP1S_SYNC
#define GPS_LTE_OFFSET 700 // us
#define GPS_NR_OFFSET 2700 // us
#define LTE_NR_OFFSET 2000 // us
#define SCS_MAX_NUM 2
#ifdef DISTRIBUTED_BS
#define MTIMER_MAX_NUM 2
#endif
#ifdef INTEGRATED_BS
#define MTIMER_MAX_NUM 4
#endif
typedef enum _tagMtimerDistributeOptId
{
MTIMER_CPRI_ID = 0,
MTIMER_ECPRI_ID
}mtimerDistributeOptId;
typedef enum _tagMtimerIntegrateOptId
{
MTIMER_JESD_RX0_ID = 0,
MTIMER_JESD_RX1_ID,
MTIMER_JESD_TX0_ID,
MTIMER_JESD_TX1_ID
}mtimerIntegrateOptId;
typedef enum _tagAPEIntInfoId
{
APE_INT_TX_SLOT = 0,
APE_INT_RX_SLOT = 1,
APE_INT_STC_0US = 2,
APE_INT_STC = 3,
APE_INT_MAXNUM = 8
}numAPEIntInfoId;
typedef enum _tagCtcIntType
{
CTC_INT_TYPE_NULL = 0,
CTC_INT_TYPE_CAL = 1
}numCtcIntType;
typedef enum _tagProtocolID
{
PROTOCOL_NULL = 0,
PROTOCOL_CPRI = 1,
PROTOCOL_ECPRI,
PROTOCOL_JESD
}numProtoID;
#define PROTO_OPTION_NULL 0
typedef enum _tagCpriOptionID
{
CPRI_OPTION_7 = 7,
CPRI_OPTION_8 = 8,
CPRI_OPTION_9 = 9,
CPRI_OPTION_10 = 10
}cpriOptID;
typedef enum _tagEcpriOptionID
{
ECPRI_OPTION_10G = 1,
ECPRI_OPTION_25G = 2
}ecpriOptID;
typedef enum _tagScsID
{
LTE_SCS_ID = 0,
NR_SCS_30K,
NR_SCS_60K,
NR_SCS_120K,
SCS_NULL = 0xFFFF
}numScsID;
typedef struct _tagCoreInt
{
uint32_t intNum;
uint32_t intCnt;
}stCoreInt;
typedef struct _tagPhyScsPara
{
uint16_t scsId;
uint16_t runCoreId;
uint16_t mtimerId;
uint16_t gpsOffset; // us as unit
uint16_t slotPeriod;
uint16_t slotNumOfTdd;
uint16_t slotNumOfSfn;
uint16_t reserved;
uint32_t rxSlotNum;
uint32_t txSlotNum;
uint32_t rxSfnNum;
uint32_t txSfnNum;
uint32_t rxSetVal;
uint32_t txSetVal;
uint32_t txSlotIntFlag;
uint32_t rxSlotIntFlag;
// UINT64 rxSlotStcCnt;
// UINT64 txSlotStcCnt;
}stPhyScsPara;
typedef struct phy_timer_config_ind_t
{
uint32_t scsId;
uint32_t runCoreId; // 此次需要建小区的ape core idbitmap方式bit0对应ape0bit1对应ape1。。。
uint16_t bandWidth; //带宽:5M,10M,15M,20M,25M,30M,40M,50M,60M,80M,100M
uint16_t t_period; //timer周期=t_us*num_t, 500us, 625us, 1000us, 1250us, 2500us, 5000us, 10000us, 20000us
uint16_t t_us; //物理层时隙定时长度, 125us, 250us, 500us, 1000us
uint8_t num_t; //timer周期内时隙的个数5,10,20,40,80
uint8_t num_t_per_sfn; //一个SFN内的时隙个数
uint8_t num_t_dl; //下行时隙个数
uint8_t num_t_dl_symb; //时隙内下行符号个数
uint8_t num_t_ul_symb; //时隙内上行符号个数
uint8_t num_ants; //天线个数
}phy_timer_config_ind_t;
typedef struct _tagPhyCellPara
{
uint32_t flag;
phy_timer_config_ind_t phyPara;
}stPhyCellPara;
typedef struct _tagSfnPara
{
uint32_t scsId;
uint32_t slotPeriod; // slot period, us as unit
uint32_t tddPeriod; // tdd period, us as unit
uint32_t tddSlotNum; // slot num of every tdd period
uint32_t slotMaxNum;
uint32_t ctcIntFlag;
uint32_t txSlotNum;
uint32_t rxSlotNum;
uint32_t txSfnNum;
uint32_t rxSfnNum;
uint32_t txSlotIntCnt;
uint32_t rxSlotIntCnt;
uint64_t txSlotTiming;
uint64_t rxSlotTiming;
}stSfnPara;
void sfn_para_init(void);
void phy_para_init(int32_t protocol, int32_t option);
void phy_scs_para_init(int32_t scsId);
int32_t get_protocol_sel();
int32_t get_protocol_opt();
void set_tx_slot_intflag(uint8_t scs, int32_t flag);
int32_t get_tx_slot_intflag(uint8_t scs);
void set_rx_slot_intflag(uint8_t scs, int32_t flag);
int32_t get_rx_slot_intflag(uint8_t scs);
void get_cpri_delay(uint32_t* delay);
void get_cpri_advance(uint32_t* advance);
int32_t send_cpri_csu_stop_cmd();
int32_t send_cpri_csu_start_cmd();
#endif /* COMMON_INC_PHY_PARA_H_ */