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.

TMS320F28379D: suggestions for 1Msps ADC with DMA

Part Number: TMS320F28379D
Other Parts Discussed in Thread: C2000WARE

Dear all, 

I need to implement 1Msps(at least 500Msps) ADC in my project. The operation allows a break to deal with cached data. 

My design is using all 4ch ADC with 1Msps or 500Ksps speed and planning to use DMA to save data to external SDRAM. 

I went through the ADC examples in c2000ware. There is an example is using a PWM timer to trigger socs every 50us, using 16 socs to digitize and using DMA to save data.

My thoughts are:

1) I believe I did not catch the essentials of the SOCs yet. why we need so many SOCs? Will socs speed up the converting or the socs are running simultaneously so that we can get multi-converting results at once?  In my practice, it seems the SOCs actually cannot be total simultaneous, instead they are in sequence.  

2) if SOCs are in sequence say SOC0 -> 1...->SOC15, then what's the advantages here? Why not just run SOC0 15 times?

3) will the timing of every SOC is very accurate? IF the SOCs run time accurate, could I run SOC0 to SOC15 then back to SOC0 .....SOC15 like a circular manner for a continuous acquisition without a timer to trigger.  

4) Goes further and back to my application: If the timing of SOCs is accurate, what if I kick off the soc0 then circulate them, make them run and run until there are 500K sampled data is DMAed to external SDRAM.  

5) what's your suggestion for my 1Msps (at least 500Ksps) ADC application. 

Sorry for many questions, but I believe the key is that I did not understand SOCs very well. Any inputs will be appreciated.   

Thanks

  • Hi Hai,

    The SOCs are used to select a trigger source, input channel, and S+H duration. The overall function is similar to a sequencer on other ADCs, but the operation is very flexible.

    e.g. If on a single ADC (say ADC-A) you want to sample 2 channels (say input A1 and A3) in some order (say A3 then A1) based on some trigger (say ePWM3B) you'd use two SOCs:

    ADCA.SOC0 = {trigger = ePWM3B, channel = 3 (A3), SH = appropriate duration}
    ADCA.SOC1 = {trigger = ePWM3B, channel = 1 (A1), SH = appropriate duration}

    You can use multiple sets of SOCs to create different sequences from different trigger sources if desired.

    You can also club together multiple SOCs from different ADCs to get simultaneous operation. I think you'll want something along the lines of (assuming ePMW1A and channels A0, B0, C2, D0):

    ADCA.SOC0 = {trigger = ePWM1A, channel = 0 (A0), S+H = duration X}
    ADCB.SOC0 = {trigger = ePWM1A, channel = 0 (B0), S+H = duration X}
    ADCC.SOC0 = {trigger = ePWM1A, channel = 2 (C2), S+H = duration X}
    ADCD.SOC0 = {trigger = ePWM1A, channel = 0 (D0), S+H = duration X}

    Note that S+H duration of simultaneous ADC conversions should be the same to ensure synchronous operation.

    You can then set the ePWM1A to trigger at 1MHz if you want 1MSPS on each ADC. I'm not sure if you'll need 4 DMA channels or you can get by with a single DMA channel with a step size equal to the size of the whole ADC result register set (i.e. the distance &AdcbResult0 - &AdcaResult0).
  • hi Devin, Thanks for your informative explanation which really helps me to get out of this socs.