YB_Platform/inc/drv_ape.h
xinxin.li 79c795ee4d 1. UCP4008-SL-EVB feature enhancement#1740/1741;
2. 将pp1s中断从APE0移到PET RFM1;
3. 去掉APE上的接收时隙中断,并修改接收帧号/时隙号/时隙cycle的计算方式;
4. 测试case:case21、case24、case34.
2024-04-24 20:28:37 +08:00

667 lines
27 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 __DRV_APE_INTERFACE_H__
#define __DRV_APE_INTERFACE_H__
/****************************UCP2.0 Platform start***********************************/
#define STC_LOCAL_TIME_BASE (0x08568000 + 0x4014)
#define GET_STC_CNT() (LOAD_EX_V_W(STC_LOCAL_TIME_BASE))
/*
函数名称delay_us
函数入参num微秒
函数功能:时延函数
*/
void delay_us(uint32_t num);
/**************************************************/
/* PORT ID相关 */
/**************************************************/
/*
函数名称get_ucp_port_id
函数入参:无
函数功能获取核的port id
*/
uint32_t get_ucp_port_id();
/**************************************************/
/* 核ID相关 */
/**************************************************/
/*
函数名称get_core_id
函数入参:无
函数功能获取核id
*/
uint32_t get_core_id(void);
/**************************************************/
/* 初始化接口 */
/**************************************************/
/***************************************************************/
// 以下接口为帕拉丁临时验证带OSP的版本使用最好按声明的顺序依次调用。
// 具体可参见驱动的phy_drv_init接口该接口只是驱动临时使用物理层可根据自己需求适配修改。
/***************************************************************/
// pet sm初始化该接口只需八个核中的一个核调用即可放在main函数的最前面
void pet_sm_init();
/***************************************************************/
// 以下接口为帕拉丁临时验证带OSP的版本使用最好按声明的顺序依次调用。
// 具体可参见phy_init.s.c中的tod_int_init接口。
/***************************************************************/
// stc timer tod中断初始化该接口只需八个核中的一个核调用即可放在osp初始化的钩子函数tod_int_init中
void stc_timer_todint_init(void);
/***************************************************************/
/**************************************************/
/* 其他接口 */
/**************************************************/
/*
函数名称get_tx_nr_sfn
函数入参:无
函数功能:获取发送帧号
*/
int get_tx_nr_sfn();
/*
函数名称get_tx_lte_sfn
函数入参:无
函数功能:获取发送帧号
*/
int get_tx_lte_sfn();
/*
函数名称get_tx_nr_slot
函数入参:无
函数功能:获取发送时隙号
*/
int get_tx_nr_slot();
/*
函数名称get_tx_lte_subframe
函数入参:无
函数功能:获取发送时隙号
*/
int get_tx_lte_subframe();
/*
函数名称get_rx_nr_sfn
函数入参:无
函数功能:接收帧号
*/
int get_rx_nr_sfn();
/*
函数名称get_rx_lte_sfn
函数入参:无
函数功能:接收帧号
*/
int get_rx_lte_sfn();
/*
函数名称get_rx_nr_slot
函数入参:无
函数功能:接收时隙号
*/
int get_rx_nr_slot();
/*
函数名称get_rx_lte_subframe
函数入参:无
函数功能:接收时隙号
*/
int get_rx_lte_subframe();
/*
函数名称get_tx_nr_slot_cycle
函数入参:无
函数功能获取发送时隙偏移单位为ns
*/
int get_tx_nr_slot_cycle();
/*
函数名称get_tx_lte_slot_cycle
函数入参scs
函数功能获取发送时隙偏移单位为ns
*/
int get_tx_lte_subframe_cycle();
/*
函数名称get_rx_nr_slot_cycle
函数入参:无
函数功能获取接收时隙偏移单位为ns
*/
int get_rx_nr_slot_cycle();
/*
函数名称get_rx_lte_slot_cycle
函数入参:无
函数功能获取接收时隙偏移单位为ns
*/
int get_rx_lte_subframe_cycle();
/*
函数名称get_cpri_delay
函数入参:
*delay: cpri的接收延迟量单位为us
函数功能获取cpri的接收延迟量
*/
void get_cpri_delay(uint32_t* delay);
/*
函数名称get_cpri_advance
函数入参:
*advance: cpri的发送提前量单位为us
函数功能获取cpri的发送提前量
*/
void get_cpri_advance(uint32_t* advance);
/*
函数名称send_cpri_csu_stop_cmd
函数入参:
函数功能cpri csu stop
*/
int32_t send_cpri_csu_stop_cmd();
/*
函数名称send_cpri_csu_start_cmd
函数入参:
函数功能cpri csu start
*/
int32_t send_cpri_csu_start_cmd();
/**************************************************/
/* ape cnt相关 */
/**************************************************/
extern int apeid_cnt_ad_val[8];
#define GET_CNT_VAL(apeid) LOAD_EX_V_W((volatile uint32_t*)(apeid_cnt_ad_val[apeid]))
/**************************************************/
/* ape csu相关 */
/**************************************************/
#define APC_DMA_REG_NUM 16
#define DMA_DIR_L2G 0
#define DMA_DIR_G2L 1
#define DMA_DIR_G2G 1
#define DMA_REG_GROUP0 0
#define DMA_REG_GROUP1 1
#define DMA_REG_GROUP2 2
#define DMA_REG_GROUP3 3
//ape-csu dma chain define
#define MAX_CHAIN_LEN (16)
#define APC_DMA_CHAIN_L2_SIZE_WORD (4)
#define APC_DMA_CHAIN_L1_3D_SIZE_WORD (8)
#define APC_DMA_CHAIN_L1_1D_SIZE_WORD (4)
/* apc-dma chain level2 info */
// word0
// cmdData Low 32bit
#define APC_DMA_CHAIN_L2_CMDDATAL_WORD_OFFSET (0)
#define APC_DMA_CHAIN_L2_CMDDATAL_BIT_OFFSET (0)
// word1
// bit26:24: next node address High 3bit
// bit17:16: base address for level1 chain High 2bit
// bit15:0: number of nodes for level1 chain 16bit
#define APC_DMA_CHAIN_L2_NXTADDRH_L1_BASEADDRH_NUMNODES_WORD_OFFSET (1)
#define APC_DMA_CHAIN_L2_L1_NUMNODES_BIT_OFFSET (0)
#define APC_DMA_CHAIN_L2_L1_BASEADDRH_BIT_OFFSET (16)
#define APC_DMA_CHAIN_L2_NXTADDRH_BIT_OFFSET (24)
// word2
// base address for level1 chain Low 32bit
#define APC_DMA_CHAIN_LEVEL2_L1_BASEADDR_L32_WORD_OFFSET (2)
#define APC_DMA_CHAIN_LEVEL2_L1_BASEADDR_L32_BIT_OFFSET (0)
// word3
// bit31: node address mode 1bit
// bit30:0: next node address Low 31bit
#define APC_DMA_CHAIN_L2_ADDRMODE_NXTADDRL_WORD_OFFSET (3)
#define APC_DMA_CHAIN_L2_NXTADDR_L31_BIT_OFFSET (0)
#define APC_DMA_CHAIN_L2_ADDRMODE_BIT_OFFSET (31)
/* apc-dma chain level1 2-3d info */
// word0
// cmdData Low 32bit
#define APC_DMA_CHAIN_L1_3D_CMDDATAL_WORD_OFFSET (0)
#define APC_DMA_CHAIN_L1_3D_CMDDATAL_BIT_OFFSET (0)
// word1
// xAddr Low 32bit
#define APC_DMA_CHAIN_L1_3D_XADDRL_WORD_OFFSET (1)
#define APC_DMA_CHAIN_L1_3D_XADDRL_BIT_OFFSET (0)
// word2
// bit29:16: cmdData High 14bit
// bit15:0: xNum 16bit
#define APC_DMA_CHAIN_L1_3D_CMDDATAH_XNUM_WORD_OFFSET (2)
#define APC_DMA_CHAIN_L1_3D_XNUM_BIT_OFFSET (0)
#define APC_DMA_CHAIN_L1_3D_CMDDATAH_BIT_OFFSET (16)
// word3
// yStep 32bit
#define APC_DMA_CHAIN_L1_3D_YSTEP_WORD_OFFSET (3)
#define APC_DMA_CHAIN_L1_3D_YSTEP_BIT_OFFSET (0)
// word4
// bit30:28: next node address High 3bit
// bit25:24: xAddr High 2bit
// bit23:20: GRAN
// bit19:16: SIZE
// bit15:0: YNum
#define APC_DMA_CHAIN_L1_3D_NXTADDRH_XADDRH_GRANSIZE_YNUM_WORD_OFFSET (4)
#define APC_DMA_CHAIN_L1_3D_YNUM_BIT_OFFSET (0)
#define APC_DMA_CHAIN_L1_3D_SIZE_BIT_OFFSET (16)
#define APC_DMA_CHAIN_L1_3D_GRAN_BIT_OFFSET (20)
#define APC_DMA_CHAIN_L1_3D_XADDRH_BIT_OFFSET (24)
#define APC_DMA_CHAIN_L1_3D_NXTADDRH_BIT_OFFSET (28)
// word5
// zStep 32bit
#define APC_DMA_CHAIN_L1_3D_ZSTEP_WORD_OFFSET (5)
#define APC_DMA_CHAIN_L1_3D_ZSTEP_BIT_OFFSET (0)
// word6
// AllNum 32bit (valid field is bit23:0)
#define APC_DMA_CHAIN_L1_3D_ALLNUM_WORD_OFFSET (6)
#define APC_DMA_CHAIN_L1_3D_ALLNUM_BIT_OFFSET (0)
// word7
// bit31: node address mode 1bit
// bit30:0: next node address Low 31bit
#define APC_DMA_CHAIN_L1_3D_ADDRMODE_NXTADDRL_WORD_OFFSET (7)
#define APC_DMA_CHAIN_L1_3D_NXTADDRL_BIT_OFFSET (0)
#define APC_DMA_CHAIN_L1_3D_ADDRMODE_BIT_OFFSET (31)
/* apc-dma chain level1 1d info */
// word0
// cmdData Low 32bit
#define APC_DMA_CHAIN_L1_1D_CMDDATAL_WORD_OFFSET (0)
#define APC_DMA_CHAIN_L1_1D_CMDDATAL_BIT_OFFSET (0)
// word1
// xAddr Low 32bit
#define APC_DMA_CHAIN_L1_1D_XADDRL_WORD_OFFSET (1)
#define APC_DMA_CHAIN_L1_1D_XADDRL_BIT_OFFSET (0)
// word2
// bit31:30: xAddr High 2bit
// bit29:16: cmdData High 14bit
// bit15:0: AllNum 16bit (MaxBytes 65535)
#define APC_DMA_CHAIN_L1_1D_XADDRH_CMDDATAH_ALLNUM_WORD_OFFSET (2)
#define APC_DMA_CHAIN_L1_1D_ALLNUM_BIT_OFFSET (0)
#define APC_DMA_CHAIN_L1_1D_CMDDATAH_BIT_OFFSET (16)
#define APC_DMA_CHAIN_L1_1D_XADDRH_BIT_OFFSET (30)
// word3
// bit31: node address mode 1bit
// bit30:0: next node address Low 31bit
#define APC_DMA_CHAIN_L1_1D_ADDRMODE_NXTADDRL_WORD_OFFSET (3)
#define APC_DMA_CHAIN_L1_1D_NXTADDRL_BIT_OFFSET (0)
#define APC_DMA_CHAIN_L1_1D_ADDRMODE_BIT_OFFSET (31)
//-------------------------------------------------------------
//struct define
//-------------------------------------------------------------
// cus dma 寄存器方式,结构体参数
typedef struct _tagCsuDmaReg
{
uint32_t dmaAddrL;
uint32_t dmaAddrH;
uint32_t dmaYStepL;
uint32_t dmaYStepH;
uint32_t dmaZStepL;
uint32_t dmaZStepH;
uint16_t dmaXNum;
uint16_t dmaYNum;
uint32_t dmaAllNum : 24;
uint32_t dmaGran : 4;
uint32_t dmaSize : 4;
}stCsuDmaReg;
typedef struct _tagCsuDmaCmdL
{
uint32_t rCmd : 2; // 0:普通DMA1:一级DMA2:一级DMA并等待ActNum3:二级DMA
uint32_t wCmd : 2;
uint32_t dmaType : 1; // 0:一维1:多维
uint32_t cacheMode : 1; // 0:common mode, 1:cache mode
uint32_t continueNext : 1; // continue the next dma
uint32_t continueLast : 1; // continue the last dma
uint32_t idSrc : 5; // src buffer id
uint32_t idDst : 5; // dst buffer id
uint32_t dmaTag : 5; // tag
uint32_t flush : 1;
uint32_t ecpriEnd : 3;
uint32_t zNumValid : 1;
uint32_t allOrYNum : 2;
uint32_t allNumSel : 1;
uint32_t stall : 1; // stall信号是否在传输之前触发stall中断
}stCsuDmaCmdL;
typedef struct _tagCsuDmaCmdH
{
uint32_t rXNumNextDma : 1; // 读操作完成一个XNum后换下一个DMA
uint32_t rYNumNextDma : 1; // 读操作完成一个YNum后换下一个DMA
uint32_t wXNumNextDma : 1; // 写操作完成一个XNum后换下一个DMA
uint32_t wYNumNextDma : 1; // 写操作完成一个YNum后换下一个DMA
uint32_t rRfpFirstDma : 1; // 读操作位对应AxC的rfp后第一组DMA请求
uint32_t reserved1 : 6;
uint32_t wLinkCycleMode : 1; // 写操作为链表循环模式
uint32_t reserved2 : 1;
uint32_t rLinkCycleMode : 1; // 读操作为链表循环模式
uint32_t reserved3 : 18;
}stCsuDmaCmdH;
// 一级链表多维DMA
typedef struct _tagCsuLinkDesc1L3D
{
uint32_t cmdFifoL; // [31:0] // fifo[31:0]
uint32_t dmaAddrL; // [63:32] // addr[31:0]
uint32_t dmaXNum : 16; // [79:64] // XNum
uint32_t cmdFifoH : 14; // [93:80] // fifo[45:32]
uint32_t reserved1 : 2; // [95:94]
uint32_t dmaYStep; // [127:96] // YStep[31:0]
uint32_t dmaYNum : 16; // [143:128] // YNum
uint32_t dmaSize : 4; // [147:144] // dmaSize
uint32_t dmaGran : 3; // [150:148] // gran
uint32_t dmaCGran : 1; // [151] // cgran
uint32_t dmaAddrH : 2; // [153:152] // addr[33:32]
uint32_t reserved2 : 2; // [155:154]
uint32_t nextAddrH : 3; // [158:156] // next addr[33:31]
uint32_t reserved3 : 1; // [159]
uint32_t dmaZStep; // [191:160] // ZStep[31:0]
uint32_t dmaAllNum; // [223:192] // all num
uint32_t nextAddrL : 31; // [254:224] // next addr[30:0]
uint32_t nAddrMode : 1; // [255] // 1使用nextAddr0地址自动加0x20/0x40
}stCsuLinkDesc1L3D;
//extern __attribute__((always_inline)) uint8_t os_get_apeid();
//-------------------------------------------------------------
//api
//-------------------------------------------------------------
/*!
* @brief: 查看tag号对应的dma任务是否完成未完成返回0完成返回1
* 如果isWait==1则等待该tag对应的任务完成再返回返回1
* @author: xinxin.li
* @Date: 2022年6月1日
* @param: task_tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
* @return: 1已完成0未完成
*/
int ape_csu_task_lookup(uint8_t task_tag, uint8_t isWait);
/*!
* @brief: 一维搬移到一维使用寄存器组0和组1实现L2G的Dma搬移
* @author: xinxin.li
* @Date: 2022年6月1日
* @param: addrSrc : [源地址 ]
* @param: addrDst : [目的地址 ]
* @param: dataLen : [搬移总字节数 ]
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
* @return: 0 正常执行完成如果isWait=1则等dma搬移完成才返回
*/
int ape_csu_dma_1D_L2G_ch0ch1_transfer(uint64_t addrSrc, uint64_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
/*!
* @brief: 一维搬移到一维使用寄存器组2和组3实现L2G的Dma搬移
* @author: xinxin.li
* @Date: 2022年6月1日
* @param: addrSrc : [源地址 ]
* @param: addrDst : [目的地址 ]
* @param: dataLen : [搬移总字节数 ]
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
* @return: 0 正常执行完成如果isWait=1则等dma搬移完成才返回
*/
int ape_csu_dma_1D_L2G_ch2ch3_transfer(uint64_t addrSrc, uint64_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
/*!
* @brief: 一维搬移到一维使用寄存器组0和组1实现G2L的Dma搬移
* @author: xinxin.li
* @Date: 2022年6月1日
* @param: addrSrc : [源地址 ]
* @param: addrDst : [目的地址 ]
* @param: dataLen : [搬移总字节数 ]
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
* @return: 0 正常执行完成如果isWait=1则等dma搬移完成才返回
*/
int ape_csu_dma_1D_G2L_ch0ch1_transfer(uint64_t addrSrc, uint64_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
/*!
* @brief: 一维搬移到一维使用寄存器组2和组3实现G2L的Dma搬移
* @author: xinxin.li
* @Date: 2022年6月1日
* @param: addrSrc : [源地址 ]
* @param: addrDst : [目的地址 ]
* @param: dataLen : [搬移总字节数 ]
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
* @return: 0 正常执行完成如果isWait=1则等dma搬移完成才返回
*/
int ape_csu_dma_1D_G2L_ch2ch3_transfer(uint64_t addrSrc, uint64_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
/*!
* @brief: 二维搬移到二维
* @author: xinxin.li
* @Date: 2022年6月1日
* @param: addrSrc : [源地址 ]
* @param: blockLenSrc : [源第一维度搬移字节数 ]
* @param: blockStepSrc : [源第二维度搬移步进字节数 ]
* @param: addrDst : [目的地址 ]
* @param: blockLenDst : [目的第一维度搬移字节数 ]
* @param: blockStepDst : [目的第二维度搬移步进字节数 ]
* @param: dataLen : [搬移总字节数 ]
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
* @param: regGroup : [寄存器组2源寄存器组4目的寄存器组53源寄存器组6目的寄存器组7 ]
* @param: dir : [0L2G1G2L or G2G ]
* @return: 0 正常执行完成如果isWait=1则等dma搬移完成才返回
* -1 入参错误
*/
int ape_csu_dma_2Dto2D_transfer(uint64_t addrSrc, uint16_t blockLenSrc, uint64_t blockStepSrc,
uint64_t addrDst, uint16_t blockLenDst, uint64_t blockStepDst,
uint32_t dataLen, uint8_t tag, uint8_t isWait, uint8_t regGroup, uint8_t dir);
/*!
* @brief: 三维搬移到一维
* @author: xinxin.li
* @Date: 2022年6月1日
* @param: addrSrc : [源地址 ]
* @param: xNumSrc : [源第一维度搬移字节数 ]
* @param: yNumSrc : [源第二维度搬移个数 ]
* @param: yStepSrc : [源第二维度搬移步进字节数 ]
* @param: zStepSrc : [源第三维度搬移步进字节数 ]
* @param: addrDst : [目的地址 ]
* @param: dataLen : [搬移总字节数 ]
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
* @param: regGroup : [寄存器组2源寄存器组4目的寄存器组53源寄存器组6目的寄存器组7 ]
* @param: dir : [0L2G1G2L or G2G ]
* @return: 0 正常执行完成如果isWait=1则等dma搬移完成才返回
* -1 入参错误
*/
int ape_csu_dma_3Dto1D_transfer(uint64_t addrSrc, uint16_t xNumSrc, uint16_t yNumSrc, uint64_t yStepSrc, uint64_t zStepSrc,
uint64_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait, uint8_t regGroup, uint8_t dir);
/*!
* @brief: 一维搬移到三维
* @author: xinxin.li
* @Date: 2023年8月28日
* @param: addrSrc : [源地址 ]
* @param: addrDst : [目的地址 ]
* @param: xNumDst : [目的第一维度搬移字节数 ]
* @param: yNumDst : [目的第二维度搬移个数 ]
* @param: yStepDst : [目的第二维度搬移步进字节数 ]
* @param: zStepDst : [目的第三维度搬移步进字节数 ]
* @param: dataLen : [搬移总字节数 ]
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
* @param: regGroup : [寄存器组2源寄存器组4目的寄存器组53源寄存器组6目的寄存器组7 ]
* @param: dir : [0L2G1G2L or G2G ]
* @return: 0 正常执行完成如果isWait=1则等dma搬移完成才返回
* -1 入参错误
*/
int32_t ape_csu_dma_1Dto3D_transfer(uint64_t addrSrc, uint64_t addrDst, uint16_t xNumDst, uint16_t yNumDst, uint64_t yStepDst, uint64_t zStepDst,
uint32_t dataLen, uint8_t tag, uint8_t isWait, uint8_t regGroup, uint8_t dir);
/*!
* @brief: 三维搬移到三维
* @author: xinxin.li
* @Date: 2023年8月28日
* @param: addrSrc : [源地址 ]
* @param: xNumSrc : [源第一维度搬移字节数 ]
* @param: yNumSrc : [源第二维度搬移个数 ]
* @param: yStepSrc : [源第二维度搬移步进字节数 ]
* @param: zStepSrc : [源第三维度搬移步进字节数 ]
* @param: addrDst : [目的地址 ]
* @param: xNumDst : [目的第一维度搬移字节数 ]
* @param: yNumDst : [目的第二维度搬移个数 ]
* @param: yStepDst : [目的第二维度搬移步进字节数 ]
* @param: zStepDst : [目的第三维度搬移步进字节数 ]
* @param: dataLen : [搬移总字节数 ]
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
* @param: regGroup : [寄存器组2源寄存器组4目的寄存器组53源寄存器组6目的寄存器组7 ]
* @param: dir : [0L2G1G2L or G2G ]
* @return: 0 正常执行完成如果isWait=1则等dma搬移完成才返回
* -1 入参错误
*/
int32_t ape_csu_dma_3Dto3D_transfer(uint64_t addrSrc, uint16_t xNumSrc, uint16_t yNumSrc, uint64_t yStepSrc, uint64_t zStepSrc,
uint64_t addrDst, uint16_t xNumDst, uint16_t yNumDst, uint64_t yStepDst, uint64_t zStepDst,
uint32_t dataLen, uint8_t tag, uint8_t isWait, uint8_t regGroup, uint8_t dir);
//pucch freq data copy from sm to dm
/*!
* @brief: 三维外部搬移到一维内部外部地址不超过32位寄存器组源用4目的用0
* @author: chunmeng.li
* @Date: 2022年6月13日
* @param: addrSrc : [源地址 ]
* @param: xNumSrc : [源第一维度搬移字节数 ]
* @param: yNumSrc : [源第二维度搬移个数 ]
* @param: yStepSrc : [源第二维度搬移步进字节数 ]
* @param: zStepSrc : [源第三维度搬移步进字节数 ]
* @param: addrDst : [目的地址 ]
* @param: dataLen : [搬移总字节数 ]
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
*/
void ape_csu_dma_3Dto1D_G2L_ch4ch0_simp_transfer(uint32_t addrSrc, uint16_t xNumSrc, uint16_t yNumSrc, uint32_t yStepSrc, uint32_t zStepSrc,
uint32_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
/*!
* @brief: 三维外部搬移到一维内部外部地址不超过32位寄存器组源用6目的用2
* @author: chunmeng.li
* @Date: 2022年6月13日
* @param: addrSrc : [源地址 ]
* @param: xNumSrc : [源第一维度搬移字节数 ]
* @param: yNumSrc : [源第二维度搬移个数 ]
* @param: yStepSrc : [源第二维度搬移步进字节数 ]
* @param: zStepSrc : [源第三维度搬移步进字节数 ]
* @param: addrDst : [目的地址 ]
* @param: dataLen : [搬移总字节数 ]
* @param: tag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: isWait : [是否等DMA结束函数返回0:不等待,1:等待 ]
*/
void ape_csu_dma_3Dto1D_G2L_ch6ch2_simp_transfer(uint32_t addrSrc, uint16_t xNumSrc, uint16_t yNumSrc, uint32_t yStepSrc, uint32_t zStepSrc,
uint32_t addrDst, uint32_t dataLen, uint8_t tag, uint8_t isWait);
/*!
* @brief: 一级多维单边链表参数配置简化版用于SM多维->DM(一维)
DMA链表搬移链表和寄存器配置
* 暂时固定用寄存器组0 & 1
* @author: chunmeng.li
* @Date: 2022年6月14日
* @param: *paramPtr : [链表参数空间指针: 起始地址64字节对齐]
* @param: paramCsuAddr : [链表参数空间地址csu视角]
* @param: numNodes : [链表节点数 ]
* @param: dmaTag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: *xAddrSrcPtr : [
链表各节点DMA搬移起始地址csu视角长度为链表节点数该函数不支持32比特地址 ]
* @param: xNum : [链表每节点X维度搬移字节数各节点xNum相同最大65535Byte ]
* @param: *allNumPtr : [链表每节点DMA搬移总字节数长度为链表节点数 ]
* @param: addrDst : [目的端地址为DM空间 ]
* @param: allNumTotal : [DMA搬移总字节数 ]
* @param: waitFlag : [是否等DMA结束函数返回0:不等待,1:等待 ]
*/
void dma_1l3d1s_chain_G2L_ch0ch1_simp_config_start(uint32_t *paramPtr,
uint32_t paramCsuAddr,
uint32_t numNodes,
uint32_t dmaTag,
uint32_t *xAddrSrcPtr,
uint16_t xNum,
uint32_t *allNumPtr,
uint32_t addrDst,
uint32_t allNumTotal,
uint32_t waitFlag);
/*!
* @brief: 一级一维双边链表参数配置,采用多维实现一维
*
建议使用者尽量将遍历规模较小的参数提前在DM空间中配置好同时简化该函数只配置可
变参数
* @author: chunmeng.li
* @Date: 2022年7月6日
* @param: *paramPtr : [链表参数空间指针: 起始地址64字节对齐长度为64Byte*节点数]
* @param: paramCsuAddr : [链表参数空间地址csu视角]
* @param: *srcAddrPtr : [链表各节点DMA读起始地址长度为链表节点数
该函数不支持32比特地址 ]
* @param: *dstAddrPtr : [链表各节点DMA写起始地址csu视角长度为链表节点数
该函数不支持32比特地址 ]
* @param: *allNumPtr : [链表每节点DMA搬移总字节数长度为链表节点数 ]
* @param: numNodes : [链表节点数 ]
* @param: dmaTag : [DMA Tag: 0~31用于查询是否完成 ]
* @param: waitFlag : [是否等DMA结束函数返回0:不等待,1:等待 ]
*/
void dma_1l1d2s_chain_ch3_G2L_start(uint32_t *paramPtr,
uint32_t paramCsuAddr,
uint32_t *srcAddrPtr,
uint32_t *dstAddrPtr,
uint32_t *allNumPtr,
uint32_t numNodes,
uint32_t dmaTag,
uint32_t waitFlag);
/*!
* @brief: k值查找参数配置及CSU启动
* @author: chunmeng.li
* @Date: 2022年6月11日
* @param: bitSequenceAddr : [比特序列地址csu视角512比特边界对齐支持DM/SM ]
* @param: seqIndexAddr : [优先级索引数组地址csu视角512比特边界对齐支持DM/SM ]
* @param: seqLength : [序列长度N=32/64/128/256/512/1024 ]
* @param: K0 : [第一个K值入参k+nPCwm ]
* @param: K1 : [第二个K值入参k+nPC ]
*/
void qounit_findK_config_start(uint32_t bitSequenceAddr,
uint32_t seqIndexAddr,
uint32_t seqLength,
uint32_t K0,
uint32_t K1);
/*!
* @brief: 16比特普通查找参数配置及CSU启动
* @author: chunmeng.li
* @Date: 2022年6月11日
* @param: compData : [待查询数据位宽16比特 ]
* @param: seqAddr : [序列地址csu视角512比特边界对齐 ]
* @param: seqLength : [序列长度最大65535 ]
*/
void qounit_findEqual_config_start(uint32_t compData,
uint32_t seqAddr,
uint16_t seqLength);
/*!
* @brief: 等待QOunit处理完成
* @author: chunmeng.li
* @Date: 2022年6月11日
*/
uint32_t qounit_wait_complete();
/*!
* @brief: 等待QOunit处理完成
* @author: yufei.wang
* @Date: 2022年6月11日
*/
int16_t qounit_equal_wait_complete();
#endif /* __APE_INTERFACE_H__ */