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.

EDMA can't request Channel

Hello 

My

1. SDK : VISION_SDK_02_05_00_00

2. DSP: C66

3. EDMA driver: edma3_lld_02_12_00_20

I got a problem that...I can't request channel...

When the program went into the if statement...

if (((rmInstance->initParam.rmInstInitConfig->ownDmaChannels[avlblIdx/32U])
&
(rmInstance->avlblDmaChannels[avlblIdx/32U])
&
~(rmInstance->initParam.rmInstInitConfig->resvdDmaChannels[avlblIdx/32U])
&
((uint32_t)1U << (avlblIdx%32U))) != FALSE)

 


it must not work...and no channel can be used...

when ending the "result = EDMA3_DRV_requestChannel" 

the result number is (-132)

and i initial my edma  handle 

>>> hEdma=Utils_dmaGetEdma3Hndl(UTILS_DMA_LOCAL_EDMA_INST_ID);

 

 

thanks 

by Alice

  • Hi,

    Moving your post to right forum to be better answered.

    Thanks & regards,
    Sivaraj K
  • Where is good space to post this question?

    thanks

    BY Alice
  • Hi,

    Thanks for your post.

    The problem you have reported above is due to the unavailability of access to the shared resources through semaphore. I think, you need to reserve the instance specific semaphore and own the resource on this particular edma3 instance of the resource manager. But in your case, a resource to own on a particular instance is not currently available and is been reserved by other instances of shared resources.

    Due to the above cause, the requested DMA channel is not available and not being enabled in DRAE/DRAEH shadow region registers and returns the edma3 handle with resources unallocated.

    I would suggest you to add the appropriate gel file in the target configuration file (.ccxml) for the appropriate keystone device and test the target connectivity through "Test Connection" button in the .ccxml file. While it is through via Test connection, launch the debugger to connect to the target and try execute the program through desired break points to evaluate for requested DMA/QDMA channel availability.

    Before you try the above, it is recommended to reset the board and validate the GEL file in the .ccxml file, thereafter, try lauching the target to execute the code.

    Thanks & regards,

    Sivaraj K

    -------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.

    -------------------------------------------------------------------------------------------------------

  • HI Sivaraj K

    I think it should not use this way to solve.
    Because in my project program , I use three times "EDMA funtion", one of them can execute once correctly... !!!Just onece!!!
    when I put break point to execute the second time, it must be wrong result and tell me that it cant request Channel...

    Thanks

    By Alice
  • Hi,

    I would recommend you to terminate the debugger and relaunch the target when you try for the second time to put break points and execute the same for the second time. Alternatively, you could also restart the cpu which would soft reset the CPU to try for the second time to debug the code with desired break points for the second time. Please try this way to fix your issue.

    After you load the application image, are you able to take control of main() for the second time when you debug to execuate at desired breakpoints? If not, please do soft reset the cpu and restart the device, if need relauch to connect to the target again, relaod the image, ensure the program control goes to start of main(), execute the code to the first break point and so on.

    Please ensure the above flow turns you out success to request for DMA/QDMA channel.

    Thanks & regards,

    Sivaraj K

    -------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.

    -------------------------------------------------------------------------------------------------------