#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 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 uint8_t m; // 天线数*2 uint8_t nTotal; // n+cs+padding uint8_t seq; uint8_t margin; uint8_t tfMode; }stJesdCsuPara; // 链表节点结构体定义 typedef struct _tagJesdCsuNodePara { uint32_t dataAddr; // 数据地址 uint32_t yStep; // 每个天线的数据总长度,B为单位 uint32_t allNum; // 需要csu搬运的总的数据长度,B为单位 }stJesdCsuNodePara; /******************************************************************************************************************* 函数名称:jesd_set_protocol_rx_advance 函数入参: uint32_t rxAdvance: 协议规定的接收提前量 返回值: 无 函数功能:协议规定的接收提前量,NR提前13us,LTE不提前,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)B,设置合理的margin值,确保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); /******************************************************************************************************************* 函数名称:jesd_orx_csu_init 函数入参: uint8_t margin: jesd csu一次搬移的数据量xnum=(32*2^margin)B,设置合理的margin值,确保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通道ID,JESD_CSU_CH0: rx0, JESD_CSU_CH1: rx1 uint32_t send_threshold: 接收缓存InLatch的阈值,低于该值,CSU暂停向总线发起写请求 uint32_t almostfull_threshold: 接收缓存InLatch的阈值,不低于该值,CSU开始向总线发起写请求 返回值: 0 : 正常 -1: 输入参数错误 函数功能:JESD CSU初始化 ********************************************************************************************************************/ 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 ************************************************************************************/ /******************************************************************************************************************* 函数名称:jesd_csu_rx_cfg 函数入参: uint32_t listAddr: 链表地址,目前使用的双边多维链式DMA,地址要求0x40B对齐 uint32_t nodeNum: 链表包含的节点个数 stJesdCsuNodePara* pListNode: 指向链表节点首地址的指针 uint8_t nChId: 通道ID, JESD_CSU_CH0: rx0, JESD_CSU_CH1: rx1 uint8_t nListId: 链表ID, 0~1, 每个通道,最多支持2个链表配置,该参数可用于2.5ms双小区配置, 第一个2.5ms采用list0,第二个2.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); /******************************************************************************************************************* 函数名称:jesd_csu_tx_cfg 函数入参: uint32_t listAddr: 链表地址,目前使用的双边多维链式DMA,地址要求0x40B对齐 uint32_t nodeNum: 链表包含的节点个数 stJesdCsuNodePara* pListNode: 指向链表节点首地址的指针 uint8_t nChId: 通道ID, JESD_CSU_CH0: tx0, JESD_CSU_CH1: tx1 uint8_t nListId: 链表ID, 0~1, 每个通道,最多支持2个链表配置,该参数可用于2.5ms双小区配置, 第一个2.5ms采用list0,第二个2.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); /******************************************************************************************************************* 函数名称:jesd_csu_orx_cfg 函数入参: uint32_t listAddr: 链表地址,目前使用的双边多维链式DMA,地址要求0x40B对齐 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); /******************************************************************************************************************* 函数名称:jesd_csu_stat_lookup 函数入参: uint8_t tag: tag号 返回值: 0 : 未完成 1 : 已完成 -1: 输入参数错误 函数功能:根据tag号,查询该tag号对应的通道任务是否完成 ********************************************************************************************************************/ int32_t jesd_csu_stat_lookup(uint8_t tag); #endif