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 completion interrupt and LLD



Hi

In the EDMA3 LLD, it seems that the "edma3ComplHandler()" completion handler uses a global variable for the shadow region.

How can the following 2 scenarios work then?

1) Completion interrupts for shadow region 3 of EDMA instance 0 and shadow region 4 of EDMA instance 1 (so different EDMA instances), on the same core

2) Completion interrupts for two different shadow regions in the same EDMA instance, both handled by the same core.

Since the shadow region id in the compHandler function is a global variable in the core's L2SRAM, it is shared by all regions and instances in the specific core. 

How at all can this work?

Thanks

  • Ran,

    My desktop search did not find the symbol name "edma3ComplHandler". I have edma3_lld_02_11_05_02 installed.

    Which C66x device are you using?

    Which TI software package does the function "edma3ComplHandler()" come from?

    Regards,
    RandyP 

  • Hi RandyP,

    I have the same package. It can be found in packages\ti\sdo\edma3\rm\src\edma3resmgr.c

    This function is called from the lisrEdma3ComplHandler0() handler in the same file.

    Thanks

    Ran

  • Hi Ran,

    You can set/get different Interrupt for each EDMA shadow region, for example for EDMA1 there are 8 different events (CIC0 event's 8-15),

    BR,

    HR 

  • Ran,

    I have now located the file and examined some of the documentation. I find the following:

    edma3resmgr.c said:
    /** edma3RegionId will be updated ONCE using the parameter regionId passed to
     * the EDMA3_RM_open() function, for the Master RM instance (one who
     * configures the Global Registers).
     * This global variable will be used within the Interrupt handlers to know
     * which shadow region registers to access. All other interrupts coming
     * from other shadow regions will not be handled.
     */
    static EDMA3_RM_RegionId edma3RegionId = EDMA3_MAX_REGIONS;

    EDMA3_Driver_User_Guide said:
    1.1.2.6 Supports multiple instances of EDMA driver on a single processor: It
    supports multiple instances of itself, running on the same processor, but tied to
    different masters (and hence different shadow regions). These different
    instances will run on the same processor but manage same/different set of
    EDMA3 resources and are tied to different shadow regions. Please note that
    EDMA3 Driver doesn’t allow multiple instances for a single master on the
    respective shadow region.

    EDMA3_Driver_User_Guide said:
    3.2.2 EDMA3_DRV_InstanceInitConfig
    This configuration structure is used to specify which EDMA3 resources are
    owned and reserved by the EDMA3 driver instance. This configuration
    structure is shadow region specific and will be provided by the user at runtime
    while calling EDMA3_RM_open ().

    EDMA3_Driver_User_Guide said:
    3.2.3 EDMA3_DRV_InitConfig

    regionId      Shadow region identifier. Note that only one EDMA3 driver instance
    can be opened for each shadow region.

    My expectations from reading through these items are:

    1. You can create multiple RM instances, one per EDMA3CC instance. So for the C6678 you can have three RM instances, for EDMA3CC0-2. I am not absolutely certain of this, but we may be able to get an answer from the BIOS forum.

    2. For each DSP core, only one shadow region should be assigned to that core. The same shadow region number will be used for each of the EDMA3CCn instances.

    To be fully addressed, I think this thread needs to be moved to the BIOS forum since it does not reflect specific hardware limitations or features. This is completely (in my opinion) a software restriction by the LLD. I will put in a request for this thread to be moved there for better support.

    Regards,
    RandyP