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.

从核调用edma3 的问题



我在主核里面已经调用了edma,在从和里面也要调用,但是从核每次enable之后返回的都是错误,callback函数中的irqRaised1都小于0,不知道为什么。主核每次都能行,从核就不行。callback函数如下:

void callback1 (unsigned int tcc, EDMA3_RM_TccStatus status,
void *appData)
{
(void)tcc;
(void)appData;

switch (status)
{
case EDMA3_RM_XFER_COMPLETE:
/* Transfer completed successfully */
irqRaised1 = 1;
break;
case EDMA3_RM_E_CC_DMA_EVT_MISS:
/* Transfer resulted in DMA event miss error. */
irqRaised1 = -1;
break;
case EDMA3_RM_E_CC_QDMA_EVT_MISS:
/* Transfer resulted in QDMA event miss error. */
irqRaised1 = -2;
break;
default:
break;
}
}

  • 首先可以肯定多核使用EDMA是绝对没有问题,问题还是在软件的配置导致,所以不用怀疑多核访问EDMA的可行性。

    从提示来看是相关的EMR被置位,提示在收到一个新的EDMA event时,前一个EDMA事件还未被clear,所以建议查一下是否启动太频繁导致。建议可以先只侧一个从核看看,避免你的代码导致多个核之间的影响。

    你是用的EDMA LLD lib么,这个代码对底层寄存器配置等进行了封装,建议在查问题时还是仔细看看相关寄存器及PaRAM set的配置正确性。

  • 谢谢你!我每个从核调用两个channel,每个核都是handle = edma3init(1, &ret);,然后开始两个channel都用一个callback函数,就出像上面的错误,现在我用了两个callback函数,然后irqRaised1就一直为0,就停止了。

    irqRaised1 = 0;
    ret = EDMA3_DRV_enableTransfer (handle, chId1,EDMA3_DRV_TRIG_MODE_MANUAL);

    if (ret != EDMA3_DRV_SOK)
    {
    printf ("edma3_test: EDMA3_DRV_enableTransfer " \
    "Failed, error code: %d\r\n", ret);

    }
    while (irqRaised1 == 0u) { }

    /* Check the status of the completed transfer */
    if (irqRaised1 < 0)
    {
    /* Some error occured, break from the FOR loop. */
    printf ("\r\n%d edma3_test: Event Miss Occured!!!\r\n",i+1000);

    /* Clear the error bits first */
    ret = EDMA3_DRV_clearErrorBits (handle, chId1);

    }

    一直在这死循环了,请问是什么缘故!万分感谢!