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.

transfer data by QDMA

Hello!

I tried to tramsfer 16 subframes from DDR to L2 one by one using QDMA on 6748, but it doesn't work in my application.

The size of frame is 1600*480, and the size of subframe is 100*480.I check the QEESR,it always be 0,and i can't write 1 to it.  As result ,the QDMA does'nt work. How can solve this problem, please help me and tell more detailedly!

Best regard!

The following is my CODE for one subframe:

unsigned int Qdma3toL2()
{

 unsigned int chType_l2= EDMA3_CHANNEL_TYPE_QDMA;
 unsigned int chNum_l2= 2;
 unsigned int tccNum_l2= 2;
 unsigned int edmaTC_l2= 2;
 unsigned int syncType_l2= EDMA3_SYNC_A;
 unsigned int paRAMId_l2  = 2u;//一共128个
 unsigned int trigMode_l2   = EDMA3_TRIG_MODE_QDMA;
 unsigned int evtQ_l2       = 0; // 使用的事件队列
 unsigned int opt_l2        = 0;


    volatile unsigned int index = 0u;
    volatile unsigned int count = 0u;
    EDMA3CCPaRAMEntry paramSet;
    unsigned int retVal = 0u;
    unsigned int numenabled = 0u;
    unsigned int acnt = 100;
    unsigned int bcnt = 480;
    unsigned int ccnt = 1;
    unsigned int dstBuffAddr = 0;

 

    srcBuff = (char *)(image+1);//_srcBuff;
    dstBuff = (char *)(pbufA);//_dstBuff;

    /* Request DMA channel and TCC */
    retVal = EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, chType_l2, chNum_l2, tccNum_l2, evtQ_l2);

    EDMA3MapQdmaChToPaRAM(SOC_EDMA30CC_0_REGS, chNum_l2, &paRAMId_l2);
   
    EDMA3SetQdmaTrigWord(SOC_EDMA30CC_0_REGS, chNum_l2, EDMA3CC_PARAM_ENTRY_DST);
   
    /* ************* REGISTER THE CALL BACK FUNCTION HERE ******************* */
    cb_Fxn[tccNum_l2] = &callback; /* Registering Callback Function      */
 irqRaised = 0u;
    if (TRUE == retVal)
    {
        /* Fill the PaRAM Set with transfer specific information */
        paramSet.srcAddr    = (unsigned int)(srcBuff);
        paramSet.destAddr   = (unsigned int)(dstBuff);   
        paramSet.aCnt = 100;
        paramSet.bCnt = 480;
        paramSet.cCnt = 1;
        paramSet.srcBIdx = 1600;
        paramSet.destBIdx = 100;               
        paramSet.srcCIdx = 0;
        paramSet.destCIdx = 0;
        paramSet.linkAddr = (unsigned short)0xFFFFu;
        paramSet.bCntReload = (unsigned short)0u;

  
  /*CSL_EDMA3_ITCCH_DIS, \
  CSL_EDMA3_TCCH_DIS, \
  CSL_EDMA3_ITCINT_DIS, \
  CSL_EDMA3_TCINT_EN, \
  0, CSL_EDMA3_TCC_NORMAL,\
  CSL_EDMA3_FIFOWIDTH_NONE, \
  CSL_EDMA3_STATIC_EN, \
  CSL_EDMA3_SYNC_A, \
  CSL_EDMA3_ADDRMODE_INCR, \
  CSL_EDMA3_ADDRMODE_INCR );*/  
        paramSet.opt = 0x00100008;

        opt_l2= paramSet.opt;
        EDMA3QdmaSetPaRAM(SOC_EDMA30CC_0_REGS, chNum_l2, paRAMId_l2, &paramSet);
    }
     retVal = FALSE;
    retVal = EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, chNum_l2, EDMA3_TRIG_MODE_QDMA);

        dstBuffAddr = (unsigned int)EDMA3QdmaGetPaRAMEntry(
                         SOC_EDMA30CC_0_REGS, paRAMId_l2, EDMA3CC_PARAM_ENTRY_DST);
        EDMA3QdmaSetPaRAMEntry(SOC_EDMA30CC_0_REGS, paRAMId_l2,
                                          EDMA3CC_PARAM_ENTRY_DST, dstBuffAddr);
       
            /* Wait for the Completion ISR. */
  while (irqRaised == 0u)
  {
  }

   /* Check the status of the completed transfer */
   if (irqRaised < 0)
   {
    /* Some error occured, break from the FOR loop. */
    UARTPuts("\r\nQdma3Test: Event Miss Occured!!!\r\n", -1);

    /* Clear the error bits first */
       EDMA3ClearErrorBits(SOC_EDMA30CC_0_REGS, chNum, evtQ);
 //      break;
   }
       
   

    return TRUE;
}