AnsweredAssumed Answered

Conflict between MCAPI and DMA descriptor chain? [CCES2.6 & SC584]

Question asked by Jhon on Oct 21, 2017
Latest reply on Oct 22, 2017 by Jhon



I'm using the SC584 FFT accelerator under CCES2.6.0. My code is based on the 2 examples:

(1) ADSP-SC5xx_EZ-KIT_Lite-Rel2.0.0\ADSP-SC5xx_EZ-KIT\Examples\drivers\fft\SmallFFTDescriptorChain

(2) ADSP-SC5xx_EZ-KIT_Lite-Rel2.0.0\ADSP-SC5xx_EZ-KIT\Examples\services\mcapi\ThreeCore


But when I run the FFTA setup code in Core2, the MCAPI code fails, the "mcapi_endpoint_get" function in Core0 can't get response from Core2.


If I remove this code from Core2:

    if (adi_tru_Init(/*reset*/true) != ADI_TRU_SUCCESS)
        printf("Failed to initialize TRU\n");
        return 1;

Then the MCAPI communication works fine, but the DMA of Core2 fails, in the console window is shows:

    Failed to initiate One-shot 1D memory copy, Error Code: 0x00000007
    Failed to query the current status of Memory DMA copy


I think this is a TRU setup problem. Before calling "adi_tru_Init" in Core2, the TRU registers are (only non-zero regs listed):

    TRU0_MTR = 60
    TRU0_GCTL = 1
    TRU0_SSR87 = 60
    TRU0_SSR91 = 61
    TRU0_SSR95 = 62

after calling "adi_tru_Init"m TRU0_MTR, TRU0_SSR87, TRU0_SSR91, TRU0_SSR95 change to 0, and after these lines:

    adi_fft_Check(h, adi_fft_RegisterTxTriggerMaster(h, TRGM_SYS_SOFT0_MST));
    adi_fft_Check(h, adi_fft_RegisterRxTriggerMaster(h, TRGM_SYS_SOFT1_MST));

    adi_fft_Check(h, adi_fft_TriggerRx(h));

and the TRU regisrers are (only non-zero regs listed):

    TRU0_MTR = 5E

    TRU0_GCTL = 1
    TRU0_SSR44 = 5D
    TRU0_SSR45 = 5E


I think there maybe some conflict between the MCAPI and the FFTA dma setup, but I don't know what to do next. Can anybody help me?