YB_Platform/inc/drv_jesd_csu.h

163 lines
7.7 KiB
C
Raw Permalink Normal View History

2023-07-13 11:27:03 +08:00
#ifndef _JESD_CSU_H_
#define _JESD_CSU_H_
#include "typedef.h"
#define JS_204B_CONVERTER_BITS 16 // 12
#define JS_204B_CS_BITS 0 // 2
#define JS_204B_CF_VAL 0
#define JESD_CSU_RX0_TAG 0
#define JESD_CSU_TX0_TAG 1
#define JESD_CSU_RX1_TAG 2
#define JESD_CSU_TX1_TAG 3
#define JESD_CH_NUM 2 // rx0/rx1, tx0/tx1
#define JESD_LIST_NUM 2 // double 2.5ms, 2 lists for every ch
// 链表通道定义tx/rx各有两个通道小于等于4天线情况下只会启用通道0
2023-07-13 11:27:03 +08:00
typedef enum _tagJesdCsuCh
{
JESD_CSU_CH0 = 0,
JESD_CSU_CH1 = 1
}numJesdCsuCh;
typedef struct _tagJesdCsuPara
{
uint8_t antNum; // 天线数
uint8_t cf;
uint8_t cs; // 控制字, =0
uint8_t n; // iq数据精度, = 16bit
2023-07-13 11:27:03 +08:00
uint8_t m; // 天线数*2
uint8_t nTotal; // n+cs+padding
uint8_t seq;
uint8_t margin;
uint8_t tfMode;
2023-07-13 11:27:03 +08:00
}stJesdCsuPara;
// 链表节点结构体定义
2023-07-13 11:27:03 +08:00
typedef struct _tagJesdCsuNodePara
{
uint32_t dataAddr; // 数据地址
uint32_t yStep; // 每个天线的数据总长度B为单位
uint32_t allNum; // 需要csu搬运的总的数据长度B为单位
2023-07-13 11:27:03 +08:00
}stJesdCsuNodePara;
/*******************************************************************************************************************
jesd_set_protocol_rx_advance
uint32_t rxAdvance:
NR提前13usLTE不提前LTE模式下
********************************************************************************************************************/
void jesd_set_protocol_rx_advance(uint32_t rxAdvance);
/*******************************************************************************************************************
jesd_csu_init
uint8_t antNum: 线
uint8_t margin: jesd csu一次搬移的数据量xnum=(32*2^margin)Bmargin值allnum/xnum是个整数值
uint8_t tfMode: tdd/fdd mode
0 :
-1:
JESD CSU初始化
********************************************************************************************************************/
int32_t jesd_csu_init(uint8_t antNum, uint8_t margin, uint8_t tfMode);
2023-07-13 11:27:03 +08:00
/*******************************************************************************************************************
jesd_orx_csu_init
uint8_t margin: jesd csu一次搬移的数据量xnum=(32*2^margin)Bmargin值allnum/xnum是个整数值
0 :
-1: jesd_csu_init
JESD ORX通道CSU初始化
********************************************************************************************************************/
int32_t jesd_orx_csu_init(uint8_t margin);
/*******************************************************************************************************************
jesd_csu_rx_inlatch_thres_cfg
uint8_t ch: rx通道IDJESD_CSU_CH0: rx0, JESD_CSU_CH1: rx1
uint32_t send_threshold: InLatch的阈值CSU暂停向总线发起写请求
uint32_t almostfull_threshold: InLatch的阈值CSU开始向总线发起写请求
0 :
-1:
JESD CSU初始化
********************************************************************************************************************/
2023-07-13 11:27:03 +08:00
int32_t jesd_csu_rx_inlatch_thres_cfg(uint8_t ch, uint32_t send_threshold, uint32_t almostfull_threshold);
// JESD CSU资源配置可以根据通道ID和list ID查询驱动所采用的tag号从而查询对应的通道任务是否完成
/***********************************************************************************
ch list RegGroup CmdFIFO tagId = RegGroupId
rx0 0/1/2/3 0/4/8/12 0 0/4/8/12
tx0 0/1/2/3 1/5/9/13 1 1/5/9/13
rx1 0/1/2/3 2/6/10/14 2 2/6/10/14
tx1 0/1/2/3 3/7/11/15 3 3/7/11/15
************************************************************************************/
2023-07-13 11:27:03 +08:00
/*******************************************************************************************************************
jesd_csu_rx_cfg
uint32_t listAddr: 使DMA0x40B
uint32_t nodeNum:
stJesdCsuNodePara* pListNode:
uint8_t nChId: ID, JESD_CSU_CH0: rx0, JESD_CSU_CH1: rx1
uint8_t nListId: ID, 0~1, 22.5ms双小区配置
2.5ms采用list02.5ms采用list1
0 :
-1:
JESD RX通道CSU配置
********************************************************************************************************************/
int32_t jesd_csu_rx_cfg(uint32_t listAddr, uint32_t nodeNum, stJesdCsuNodePara* pListNode, uint8_t nChId, uint8_t nListId);
2023-07-13 11:27:03 +08:00
/*******************************************************************************************************************
jesd_csu_tx_cfg
uint32_t listAddr: 使DMA0x40B
uint32_t nodeNum:
stJesdCsuNodePara* pListNode:
uint8_t nChId: ID, JESD_CSU_CH0: tx0, JESD_CSU_CH1: tx1
uint8_t nListId: ID, 0~1, 22.5ms双小区配置
2.5ms采用list02.5ms采用list1
0 :
-1:
JESD TX通道CSU配置
********************************************************************************************************************/
int32_t jesd_csu_tx_cfg(uint32_t listAddr, uint32_t nodeNum, stJesdCsuNodePara* pListNode, uint8_t nChId, uint8_t nListId);
2023-07-13 11:27:03 +08:00
/*******************************************************************************************************************
jesd_csu_orx_cfg
uint32_t listAddr: 使DMA0x40B
uint32_t nodeNum:
stJesdCsuNodePara* pListNode:
uint8_t nListId: ID
0 :
-1:
JESD ORX通道CSU配置
********************************************************************************************************************/
int32_t jesd_csu_orx_cfg(uint32_t listAddr, uint32_t nodeNum, stJesdCsuNodePara* pListNode, uint8_t nListId);
2023-07-13 11:27:03 +08:00
/*******************************************************************************************************************
jesd_csu_stat_lookup
uint8_t tag: tag号
0 :
1 :
-1:
tag号tag号对应的通道任务是否完成
********************************************************************************************************************/
int32_t jesd_csu_stat_lookup(uint8_t tag);
2023-07-13 11:27:03 +08:00
#endif