#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 函数入参:scs 函数功能:获取发送帧号 */ int get_tx_nr_sfn(uint8_t scs); /* 函数名称:get_tx_lte_sfn 函数入参:无 函数功能:获取发送帧号 */ int get_tx_lte_sfn(); /* 函数名称:get_tx_nr_slot 函数入参:scs 函数功能:获取发送时隙号 */ int get_tx_nr_slot(uint8_t scs); /* 函数名称:get_tx_lte_subframe 函数入参:无 函数功能:获取发送时隙号 */ int get_tx_lte_subframe(); /* 函数名称:get_rx_nr_sfn 函数入参:scs 函数功能:接收帧号 */ int get_rx_nr_sfn(uint8_t scs); /* 函数名称:get_rx_lte_sfn 函数入参:无 函数功能:接收帧号 */ int get_rx_lte_sfn(); /* 函数名称:get_rx_nr_slot 函数入参:scs 函数功能:接收时隙号 */ int get_rx_nr_slot(uint8_t scs); /* 函数名称:get_rx_lte_subframe 函数入参:无 函数功能:接收时隙号 */ int get_rx_lte_subframe(); /* 函数名称:get_tx_nr_slot_cycle 函数入参:scs 函数功能:获取发送时隙偏移,单位为ns */ int get_tx_nr_slot_cycle(uint8_t scs); /* 函数名称:get_tx_lte_slot_cycle 函数入参:scs 函数功能:获取发送时隙偏移,单位为ns */ int get_tx_lte_subframe_cycle(); /* 函数名称:get_rx_nr_slot_cycle 函数入参:scs 函数功能:获取接收时隙偏移,单位为ns */ int get_rx_nr_slot_cycle(uint8_t scs); /* 函数名称:get_rx_lte_slot_cycle 函数入参:scs 函数功能:获取接收时隙偏移,单位为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:普通DMA,1:一级DMA,2:一级DMA并等待ActNum,3:二级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:使用nextAddr,0:地址自动加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,目的寄存器组5;3:源寄存器组6,目的寄存器组7 ] * @param: dir : [0:L2G,1:G2L 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,目的寄存器组5;3:源寄存器组6,目的寄存器组7 ] * @param: dir : [0:L2G,1:G2L 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,目的寄存器组5;3:源寄存器组6,目的寄存器组7 ] * @param: dir : [0:L2G,1:G2L 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,目的寄存器组5;3:源寄存器组6,目的寄存器组7 ] * @param: dir : [0:L2G,1:G2L 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__ */