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.

C6474 EDMA3 example under DSP/BIOS

Guru 10750 points

Hi,

Is there a C6474 EDMA example under DSP/BIOS (using the C6474 CSL)? EDMA example using the ECM?

Many Thanks,

Haim

 

  • There is a CSL example for the C6455 uploaded to the posting at  http://e2e.ti.com/support/dsp/tms320c6000_high_performance_dsps/f/112/p/11561/45088.aspx#45088 [edit: RandyP to correct the link] . This example uses two manually triggered channels and handles separate interrupts for each. This should work well with the C6474 by including the correct CSL library and paths in the project.

    This does not use the Event Combiner Manager, but ECM is not a term that I have seen used very often. What would you like an example to do?

    There is a training video for the C6474 at http://e2e.ti.com/media/p/36682.aspx that might help to address some of your questions. Please see module 5 "C64x+ Megamodule Features" for information on interrupts and the Chip Interrupt Combiners, in particular.

  • Hi Randy,

    Thanks, There is an C6474 EDMA3 example in the C6474 CSL but there is no example running the EDMA3 under the DSP/BIOS as you have to change the CSL_int to the BIOS HWI/ECM, there is an EDMA3 LLD under DSP/BIOS but it is too complicated/large,

    Many Thanks,

    Haim

  • You do not have to use the HWI_Dispatcher for the EDMA3 interrupt if you want to stay with the pure CSL implementation. But doing it that way can get confusing if some of your interrupts use the HWI_Dispatcher and some do not.

    I have uploaded an LLD example from our Technical Training Organization that uses interrupts. The C code is very well documented, so it might take some of the complicated nature out of it and provide you with something closer to what you want. This example is for the C6455, again, but should work well with the C6474 by including the correct libraries and paths in the project.

    What more specific example are you looking for?

    TTO_LLD_example2_intGen_6455.zip
  • Hi Randy,

    Please note that there is an C6474 EDMA3 LLD but it is looks very complicated and too big, yes I can use the current C6474 including the CSL_EDMA & CSL_INT but as you mentioned it can confuse if someone else is using the dispatcher, it looks that I will start using the CSL as is (Is there any BIOS dispatcher example),

    BTW - what consideration should I take working on the 3 cores, I assume that I have to define different EDMA for each core and try to put the data in different DDR segments,

    Many thanks,

    Haim

  • HR said:

    ... there is a C6474 EDMA3 LLD but it is looks very complicated ...

    This is just my opinion, but to me CSL is much more complicated because of the long and non-intuitive command constants that are used with generic function names. I find LLD to be much more intuitive, plus it provides functionality that CSL3 dropped from CSL2 (resource management, in particular). For some excellent training material on the LLD, please check out some topics at TIeXpressDSP . Under Useful Starting Points, click on DSP/BIOS, then find the topic on "Programming the EDMA3 using the Low-Level Driver (LLD)". Note that at that topic, as of this writing, the actual material is "hidden" in the Abstract section after "Go to the following link for the pdf file:" - and even then, you have to click again to actually get to the pdf file - but it will be well worth the effort.

    HR said:

    ... there is an C6474 EDMA3 LLD but it is ... too big, ...

    Please explain this concern about size. If you have not built an example program, yet, then you cannot tell how much of the library will be pulled in with your implementation. It does include a lot of extra functionality, like resource management. When you build your program, the linker should only include the portions of the LLD libraries that you actually use in your program rather than automatically pulling in all of it.

    HR said:

    I can use the current C6474 including the CSL_EDMA & CSL_INT but as you mentioned it can confuse if someone else is using the dispatcher, it looks that I will start using the CSL as is (Is there any BIOS dispatcher example),

    May I assume that you meant CSL_edma3 and CSL_intc modules? In the TIeXpressDSP Wiki pages that I mentioned above, in the DSP/BIOS section there is also at topic titled "Converting from INTC to BIOS" that you may find very helpful.

    HR said:

    BTW - what consideration should I take working on the 3 cores, I assume that I have to define different EDMA for each core and try to put the data in different DDR segments,

    Since I do not know what you are trying to do, I cannot make a good comment for you on how to design your system. Certainly, singular resources like DMA/QDMA channels must be allocated to a specific core at any specific time, so this is usually done using Shadow Regions as discussed in the EDMA3 User's Guide. But one core might use one DMA channel to write to one DDR segment, and a different core might later use a different DMA channel to read from that same DDR segment. So an answer to your question is highly dependent on your application.

    There is a recent training video posted at www.ti.com that might help you. On the main page of www.ti.com under the major heading of Design Support there is a sub-category of Training & Events that you should click on. Then under Search Training, change "Select a topic" to DSP, change "Show all sub-topics" to C6000 Fixed-point DSPs, change "Show all types" to On-demand, and then click Search. You will find a topic titled "Tips and Tricks for Increasing Performance with TI’s Multi-core Embedded Processors". There is a very good intro to the topic of multi-processing and it moves into some helpful details for implementing efficient systems.

  • Randy,

    OK, Thank you very much for all the help,

    Haim

  • Randy,

    I got the EDMA working fine on each core with different EDMA parameters using the CSL but running them all together stuck the device any idea what should I look for?

    Many Thanks,

    Haim

  • First, start running on just one core, then two, then three to verify the "stuck" condition.

    Then try the other combinations of 2 cores to see if you can narrow down which set of test code is leading to your problem.

    Finally, start looking at the PaRAM for the channels that should be running and try to figure out which channels were running when you got stuck.

    If that does not get you very far, you will have to explain "stuck" in more detail.

  • Randy,

    The issue was using the using the LOG in the DDR2 moving it to L2 solved the 3 cores EDMA issue, I'm also trying to operate the interrupt's but probably I'm not enabling something -

    Core #0

    CSL_INTC_EVENTID_EDMA3CC_INT1 => CSL_INTC_VECTID_4

    CSL_EDMA3_REGION_1

    Drae = 0x0F

    Channel # - 0 (CSL_EDMA3_CHA_TEVTLO0)

    paramNum = 0

    Que #0

    TCC#1

    Enable EDMA int 0x2

     

     

    Core #1

    CSL_INTC_EVENTID_EDMA3CC_INT2 => CSL_INTC_VECTID_5

    CSL_EDMA3_REGION_2

    Drae = 0x0F0

    Channel # - 4 (CSL_EDMA3_CHA_TEVTLO2)

    paramNum = 4

    que #1

    TCC#4

    Enable EDMA int 0x10

     

     

    Core #2

    CSL_INTC_EVENTID_EDMA3CC_INT3 => CSL_INTC_VECTID_6

    CSL_EDMA3_REGION_3

    Drae = 0x0F00

    Channel # - 8 (CSL_EDMA3_CHA_CIC3_EVT2)

    paramNum = 8

    que #2

    TCC#8

    Enable EDMA int 0x100

    Many Thanks,

    Haim