This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

6678中的 CSL_edma3GetParamHandle() 函数应该怎么用?



大家好,我用的是6678,用edma来进行pingpong传输,下面是代码中几行语句,其中有几句不知道如何理解:  

 hChannel = CSL_edma3ChannelOpen(&chObj, instNum, &chAttr, &status);   //  打开一个channel

CSL_edma3HwChannelSetupQue(hChannel,CSL_EDMA3_QUE_3);       //  为这个channel分配一个queue

 CSL_edma3MapDMAChannelToParamBlock (hModule, channelNum, 2);     // 为这个channel分配一个PaRAM set 2

   hParamPing = CSL_edma3GetParamHandle(hChannel, 2, &status);       

 hParamPong = CSL_edma3GetParamHandle(hChannel, 1, &status);

最后两句的意思是为PaRAM set1 和PaRAM set2 分别分配一个handle吗? 那为什么需要hChannel这个参数呢,PaRAM不是和Channel是分开的吗?

  • 请参考具体的实现源码理解,EDMA CSL源码在PDK安装目录pdk_C6678_1_1_2_6\packages\ti\csl\src\ip\edma

    CSL_edma3GetParamHandle实现如下,需要输入一个handle获取寄存器基地址来获取每个param set的地址。

    CSL_Edma3ParamHandle  CSL_edma3GetParamHandle
    (
        CSL_Edma3ChannelHandle    hEdma,
        Int16                     paramNum,
        CSL_Status*               status      
    )
    {  
        CSL_Edma3ParamHandle handle = (CSL_Edma3ParamHandle)NULL;

        if (status == NULL) {
            /* Do nothing */
        }
        else if (hEdma == NULL) {
            *status = CSL_ESYS_BADHANDLE;
        }
        else if (paramNum < 0 || (paramNum >= hEdma->cfgInfo.numParamsets)) {
            *status = CSL_ESYS_INVPARAMS;
        }
        else {
            handle = (&hEdma->regs->PARAMSET[paramNum]);
            *status = CSL_SOK;
        }

        return (handle);
    }